keycloak-angular 7.3.0 → 8.1.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 (44) hide show
  1. package/README.md +136 -155
  2. package/bundles/keycloak-angular.umd.js +401 -327
  3. package/bundles/keycloak-angular.umd.js.map +1 -1
  4. package/bundles/keycloak-angular.umd.min.js +1 -15
  5. package/bundles/keycloak-angular.umd.min.js.map +1 -1
  6. package/esm2015/keycloak-angular.js +1 -1
  7. package/esm2015/lib/core/core.module.js +16 -18
  8. package/esm2015/lib/core/interceptors/keycloak-bearer.interceptor.js +6 -9
  9. package/esm2015/lib/core/interfaces/keycloak-event.js +1 -1
  10. package/esm2015/lib/core/interfaces/keycloak-options.js +2 -1
  11. package/esm2015/lib/core/services/keycloak-auth-guard.js +1 -1
  12. package/esm2015/lib/core/services/keycloak.service.js +28 -42
  13. package/esm2015/lib/keycloak-angular.module.js +8 -10
  14. package/esm2015/public_api.js +1 -1
  15. package/fesm2015/keycloak-angular.js +54 -78
  16. package/fesm2015/keycloak-angular.js.map +1 -1
  17. package/keycloak-angular.d.ts +0 -0
  18. package/keycloak-angular.metadata.json +1 -1
  19. package/lib/core/core.module.d.ts +0 -0
  20. package/lib/core/interceptors/keycloak-bearer.interceptor.d.ts +0 -0
  21. package/lib/core/interfaces/keycloak-event.d.ts +0 -0
  22. package/lib/core/interfaces/keycloak-options.d.ts +1 -2
  23. package/lib/core/services/keycloak-auth-guard.d.ts +0 -0
  24. package/lib/core/services/keycloak.service.d.ts +2 -2
  25. package/lib/keycloak-angular.module.d.ts +0 -0
  26. package/package.json +9 -14
  27. package/public_api.d.ts +0 -2
  28. package/esm2015/lib/core/interfaces/keycloak-config.js +0 -1
  29. package/esm2015/lib/core/utils/to-promise.js +0 -10
  30. package/esm5/keycloak-angular.js +0 -2
  31. package/esm5/lib/core/core.module.js +0 -26
  32. package/esm5/lib/core/interceptors/keycloak-bearer.interceptor.js +0 -48
  33. package/esm5/lib/core/interfaces/keycloak-config.js +0 -1
  34. package/esm5/lib/core/interfaces/keycloak-event.js +0 -11
  35. package/esm5/lib/core/interfaces/keycloak-options.js +0 -1
  36. package/esm5/lib/core/services/keycloak-auth-guard.js +0 -40
  37. package/esm5/lib/core/services/keycloak.service.js +0 -328
  38. package/esm5/lib/core/utils/to-promise.js +0 -10
  39. package/esm5/lib/keycloak-angular.module.js +0 -15
  40. package/esm5/public_api.js +0 -7
  41. package/fesm5/keycloak-angular.js +0 -461
  42. package/fesm5/keycloak-angular.js.map +0 -1
  43. package/lib/core/interfaces/keycloak-config.d.ts +0 -9
  44. package/lib/core/utils/to-promise.d.ts +0 -7
@@ -1,20 +1,20 @@
1
- import { __awaiter, __decorate } from "tslib";
1
+ import { __awaiter } from "tslib";
2
2
  import { Injectable } from '@angular/core';
3
3
  import { HttpHeaders } from '@angular/common/http';
4
4
  import { Subject, from } from 'rxjs';
5
+ import { map } from 'rxjs/operators';
5
6
  import * as Keycloak_ from 'keycloak-js';
6
7
  export const Keycloak = Keycloak_;
7
8
  import { KeycloakEventType } from '../interfaces/keycloak-event';
8
- import { toPromise } from '../utils/to-promise';
9
- let KeycloakService = class KeycloakService {
9
+ export class KeycloakService {
10
10
  constructor() {
11
11
  this._keycloakEvents$ = new Subject();
12
12
  }
13
13
  bindsKeycloakEvents() {
14
- this._instance.onAuthError = errorData => {
14
+ this._instance.onAuthError = (errorData) => {
15
15
  this._keycloakEvents$.next({
16
16
  args: errorData,
17
- type: KeycloakEventType.OnAuthError
17
+ type: KeycloakEventType.OnAuthError,
18
18
  });
19
19
  };
20
20
  this._instance.onAuthLogout = () => {
@@ -22,12 +22,12 @@ let KeycloakService = class KeycloakService {
22
22
  };
23
23
  this._instance.onAuthRefreshSuccess = () => {
24
24
  this._keycloakEvents$.next({
25
- type: KeycloakEventType.OnAuthRefreshSuccess
25
+ type: KeycloakEventType.OnAuthRefreshSuccess,
26
26
  });
27
27
  };
28
28
  this._instance.onAuthRefreshError = () => {
29
29
  this._keycloakEvents$.next({
30
- type: KeycloakEventType.OnAuthRefreshError
30
+ type: KeycloakEventType.OnAuthRefreshError,
31
31
  });
32
32
  };
33
33
  this._instance.onAuthSuccess = () => {
@@ -35,13 +35,13 @@ let KeycloakService = class KeycloakService {
35
35
  };
36
36
  this._instance.onTokenExpired = () => {
37
37
  this._keycloakEvents$.next({
38
- type: KeycloakEventType.OnTokenExpired
38
+ type: KeycloakEventType.OnTokenExpired,
39
39
  });
40
40
  };
41
- this._instance.onReady = authenticated => {
41
+ this._instance.onReady = (authenticated) => {
42
42
  this._keycloakEvents$.next({
43
43
  args: authenticated,
44
- type: KeycloakEventType.OnReady
44
+ type: KeycloakEventType.OnReady,
45
45
  });
46
46
  };
47
47
  }
@@ -55,14 +55,14 @@ let KeycloakService = class KeycloakService {
55
55
  else {
56
56
  excludedUrl = {
57
57
  urlPattern: new RegExp(item.url, 'i'),
58
- httpMethods: item.httpMethods
58
+ httpMethods: item.httpMethods,
59
59
  };
60
60
  }
61
61
  excludedUrls.push(excludedUrl);
62
62
  }
63
63
  return excludedUrls;
64
64
  }
65
- initServiceValues({ enableBearerInterceptor = true, loadUserProfileAtStartUp = true, bearerExcludedUrls = [], authorizationHeaderName = 'Authorization', bearerPrefix = 'bearer', initOptions }) {
65
+ initServiceValues({ enableBearerInterceptor = true, loadUserProfileAtStartUp = false, bearerExcludedUrls = [], authorizationHeaderName = 'Authorization', bearerPrefix = 'Bearer', initOptions, }) {
66
66
  this._enableBearerInterceptor = enableBearerInterceptor;
67
67
  this._loadUserProfileAtStartUp = loadUserProfileAtStartUp;
68
68
  this._authorizationHeaderName = authorizationHeaderName;
@@ -76,7 +76,7 @@ let KeycloakService = class KeycloakService {
76
76
  const { config, initOptions } = options;
77
77
  this._instance = Keycloak(config);
78
78
  this.bindsKeycloakEvents();
79
- const authenticated = yield toPromise(this._instance.init(initOptions));
79
+ const authenticated = yield this._instance.init(initOptions);
80
80
  if (authenticated && this._loadUserProfileAtStartUp) {
81
81
  yield this.loadUserProfile();
82
82
  }
@@ -85,7 +85,7 @@ let KeycloakService = class KeycloakService {
85
85
  }
86
86
  login(options = {}) {
87
87
  return __awaiter(this, void 0, void 0, function* () {
88
- yield toPromise(this._instance.login(options));
88
+ yield this._instance.login(options);
89
89
  if (this._loadUserProfileAtStartUp) {
90
90
  yield this.loadUserProfile();
91
91
  }
@@ -94,15 +94,15 @@ let KeycloakService = class KeycloakService {
94
94
  logout(redirectUri) {
95
95
  return __awaiter(this, void 0, void 0, function* () {
96
96
  const options = {
97
- redirectUri
97
+ redirectUri,
98
98
  };
99
- yield toPromise(this._instance.logout(options));
99
+ yield this._instance.logout(options);
100
100
  this._userProfile = undefined;
101
101
  });
102
102
  }
103
103
  register(options = { action: 'register' }) {
104
104
  return __awaiter(this, void 0, void 0, function* () {
105
- yield toPromise(this._instance.register(options));
105
+ yield this._instance.register(options);
106
106
  });
107
107
  }
108
108
  isUserInRole(role, resource) {
@@ -158,7 +158,7 @@ let KeycloakService = class KeycloakService {
158
158
  if (!this._instance) {
159
159
  throw new Error('Keycloak Angular library is not initialized.');
160
160
  }
161
- return toPromise(this._instance.updateToken(minValidity));
161
+ return this._instance.updateToken(minValidity);
162
162
  });
163
163
  }
164
164
  loadUserProfile(forceReload = false) {
@@ -169,23 +169,13 @@ let KeycloakService = class KeycloakService {
169
169
  if (!this._instance.authenticated) {
170
170
  throw new Error('The user profile was not loaded as the user is not logged in.');
171
171
  }
172
- return this._userProfile = yield toPromise(this._instance.loadUserProfile());
172
+ return this._userProfile = yield this._instance.loadUserProfile();
173
173
  });
174
174
  }
175
- getToken(forceLogin = true) {
175
+ getToken() {
176
176
  return __awaiter(this, void 0, void 0, function* () {
177
- try {
178
- yield this.updateToken(10);
179
- return this._instance.token;
180
- }
181
- catch (error) {
182
- if (forceLogin) {
183
- this.login();
184
- }
185
- else {
186
- throw error;
187
- }
188
- }
177
+ yield this.updateToken(10);
178
+ return this._instance.token;
189
179
  });
190
180
  }
191
181
  getUsername() {
@@ -198,10 +188,7 @@ let KeycloakService = class KeycloakService {
198
188
  this._instance.clearToken();
199
189
  }
200
190
  addTokenToHeader(headers = new HttpHeaders()) {
201
- return from(() => __awaiter(this, void 0, void 0, function* () {
202
- const token = yield this.getToken();
203
- return headers.set(this._authorizationHeaderName, this._bearerPrefix + token);
204
- }));
191
+ return from(this.getToken()).pipe(map((token) => token ? headers.set(this._authorizationHeaderName, this._bearerPrefix + token) : headers));
205
192
  }
206
193
  getKeycloakInstance() {
207
194
  return this._instance;
@@ -215,9 +202,8 @@ let KeycloakService = class KeycloakService {
215
202
  get keycloakEvents$() {
216
203
  return this._keycloakEvents$;
217
204
  }
218
- };
219
- KeycloakService = __decorate([
220
- Injectable()
221
- ], KeycloakService);
222
- export { KeycloakService };
223
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Y2xvYWsuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2tleWNsb2FrLWFuZ3VsYXIvIiwic291cmNlcyI6WyJsaWIvY29yZS9zZXJ2aWNlcy9rZXljbG9hay5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFRQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVuRCxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUdyQyxPQUFPLEtBQUssU0FBUyxNQUFNLGFBQWEsQ0FBQztBQUN6QyxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDO0FBR2xDLE9BQU8sRUFBaUIsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFVaEQsSUFBYSxlQUFlLEdBQTVCLE1BQWEsZUFBZTtJQUE1QjtRQXNDVSxxQkFBZ0IsR0FBMkIsSUFBSSxPQUFPLEVBQWlCLENBQUM7SUF1Y2xGLENBQUM7SUE5YlMsbUJBQW1CO1FBQ3pCLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQyxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7Z0JBQ3pCLElBQUksRUFBRSxTQUFTO2dCQUNmLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxXQUFXO2FBQ3BDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxHQUFHLEdBQUcsRUFBRTtZQUNqQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDdkUsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLFNBQVMs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QUM7SUFxQkQsSUFBSSxlQUFlO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQy9CLENBQUM7Q0FDRixDQUFBO0FBN2VZLGVBQWU7SUFEM0IsVUFBVSxFQUFFO0dBQ0EsZUFBZSxDQTZlM0I7U0E3ZVksZUFBZSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBNYXVyaWNpbyBHZW1lbGxpIFZpZ29sbyBhbmQgY29udHJpYnV0b3JzLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9naXRodWIuY29tL21hdXJpY2lvdmlnb2xvL2tleWNsb2FrLWFuZ3VsYXIvTElDRU5TRVxuICovXG5cbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuXG5pbXBvcnQgeyBTdWJqZWN0LCBmcm9tIH0gZnJvbSAncnhqcyc7XG5cbi8vIFdvcmthcm91bmQgZm9yIHJvbGx1cCBsaWJyYXJ5IGJlaGF2aW91ciwgYXMgcG9pbnRlZCBvdXQgb24gaXNzdWUgIzEyNjcgKGh0dHBzOi8vZ2l0aHViLmNvbS9yb2xsdXAvcm9sbHVwL2lzc3Vlcy8xMjY3KS5cbmltcG9ydCAqIGFzIEtleWNsb2FrXyBmcm9tICdrZXljbG9hay1qcyc7XG5leHBvcnQgY29uc3QgS2V5Y2xvYWsgPSBLZXljbG9ha187XG5cbmltcG9ydCB7IEV4Y2x1ZGVkVXJsLCBFeGNsdWRlZFVybFJlZ2V4LCBLZXljbG9ha09wdGlvbnMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2tleWNsb2FrLW9wdGlvbnMnO1xuaW1wb3J0IHsgS2V5Y2xvYWtFdmVudCwgS2V5Y2xvYWtFdmVudFR5cGUgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2tleWNsb2FrLWV2ZW50JztcbmltcG9ydCB7IHRvUHJvbWlzZSB9IGZyb20gJy4uL3V0aWxzL3RvLXByb21pc2UnO1xuXG4vKipcbiAqIFNlcnZpY2UgdG8gZXhwb3NlIGV4aXN0ZW50IG1ldGhvZHMgZnJvbSB0aGUgS2V5Y2xvYWsgSlMgYWRhcHRlciwgYWRkaW5nIG5ld1xuICogZnVuY3Rpb25hbGl0aWVzIHRvIGltcHJvdmUgdGhlIHVzZSBvZiBrZXljbG9hayBpbiBBbmd1bGFyIHYgPiA0LjMgYXBwbGljYXRpb25zLlxuICpcbiAqIFRoaXMgY2xhc3Mgc2hvdWxkIGJlIGluamVjdGVkIGluIHRoZSBhcHBsaWNhdGlvbiBib290c3RyYXAsIHNvIHRoZSBzYW1lIGluc3RhbmNlIHdpbGwgYmUgdXNlZFxuICogYWxvbmcgdGhlIHdlYiBhcHBsaWNhdGlvbi5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEtleWNsb2FrU2VydmljZSB7XG4gIC8qKlxuICAgKiBLZXljbG9hay1qcyBpbnN0YW5jZS5cbiAgICovXG4gIHByaXZhdGUgX2luc3RhbmNlOiBLZXljbG9hay5LZXljbG9ha0luc3RhbmNlO1xuICAvKipcbiAgICogVXNlciBwcm9maWxlIGFzIEtleWNsb2FrUHJvZmlsZSBpbnRlcmZhY2UuXG4gICAqL1xuICBwcml2YXRlIF91c2VyUHJvZmlsZTogS2V5Y2xvYWsuS2V5Y2xvYWtQcm9maWxlO1xuICAvKipcbiAgICogRmxhZyB0byBpbmRpY2F0ZSBpZiB0aGUgYmVhcmVyIHdpbGwgbm90IGJlIGFkZGVkIHRvIHRoZSBhdXRob3JpemF0aW9uIGhlYWRlci5cbiAgICovXG4gIHByaXZhdGUgX2VuYWJsZUJlYXJlckludGVyY2VwdG9yOiBib29sZWFuO1xuICAvKipcbiAgICogV2hlbiB0aGUgaW1wbGljaXQgZmxvdyBpcyBjaG9vc2VuIHRoZXJlIG11c3QgZXhpc3QgYSBzaWxlbnRSZWZyZXNoLCBhcyB0aGVyZSBpc1xuICAgKiBubyByZWZyZXNoIHRva2VuLlxuICAgKi9cbiAgcHJpdmF0ZSBfc2lsZW50UmVmcmVzaDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGF0IHRoZSB1c2VyIHByb2ZpbGUgc2hvdWxkIGJlIGxvYWRlZCBhdCB0aGUga2V5Y2xvYWsgaW5pdGlhbGl6YXRpb24sXG4gICAqIGp1c3QgYWZ0ZXIgdGhlIGxvZ2luLlxuICAgKi9cbiAgcHJpdmF0ZSBfbG9hZFVzZXJQcm9maWxlQXRTdGFydFVwOiBib29sZWFuO1xuICAvKipcbiAgICogVGhlIGJlYXJlciBwcmVmaXggdGhhdCB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSBBdXRob3JpemF0aW9uIEhlYWRlci5cbiAgICovXG4gIHByaXZhdGUgX2JlYXJlclByZWZpeDogc3RyaW5nO1xuICAvKipcbiAgICogVmFsdWUgdGhhdCB3aWxsIGJlIHVzZWQgYXMgdGhlIEF1dGhvcml6YXRpb24gSHR0cCBIZWFkZXIgbmFtZS5cbiAgICovXG4gIHByaXZhdGUgX2F1dGhvcml6YXRpb25IZWFkZXJOYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgZXhjbHVkZWQgdXJscyBwYXR0ZXJucyB0aGF0IG11c3Qgc2tpcCB0aGUgS2V5Y2xvYWtCZWFyZXJJbnRlcmNlcHRvci5cbiAgICovXG4gIHByaXZhdGUgX2V4Y2x1ZGVkVXJsczogRXhjbHVkZWRVcmxSZWdleFtdO1xuICAvKipcbiAgICogT2JzZXJ2ZXIgZm9yIHRoZSBrZXljbG9hayBldmVudHNcbiAgICovXG4gIHByaXZhdGUgX2tleWNsb2FrRXZlbnRzJDogU3ViamVjdDxLZXljbG9ha0V2ZW50PiA9IG5ldyBTdWJqZWN0PEtleWNsb2FrRXZlbnQ+KCk7XG5cbiAgLyoqXG4gICAqIEJpbmRzIHRoZSBrZXljbG9hay1qcyBldmVudHMgdG8gdGhlIGtleWNsb2FrRXZlbnRzIFN1YmplY3RcbiAgICogd2hpY2ggaXMgYSBnb29kIHdheSB0byBtb25pdG9yIGZvciBjaGFuZ2VzLCBpZiBuZWVkZWQuXG4gICAqXG4gICAqIFRoZSBrZXljbG9ha0V2ZW50cyByZXR1cm5zIHRoZSBrZXljbG9hay1qcyBldmVudCB0eXBlIGFuZCBhbnlcbiAgICogYXJndW1lbnQgaWYgdGhlIHNvdXJjZSBmdW5jdGlvbiBwcm92aWRlcyBhbnkuXG4gICAqL1xuICBwcml2YXRlIGJpbmRzS2V5Y2xvYWtFdmVudHMoKTogdm9pZCB7XG4gICAgdGhpcy5faW5zdGFuY2Uub25BdXRoRXJyb3IgPSBlcnJvckRhdGEgPT4ge1xuICAgICAgdGhpcy5fa2V5Y2xvYWtFdmVudHMkLm5leHQoe1xuICAgICAgICBhcmdzOiBlcnJvckRhdGEsXG4gICAgICAgIHR5cGU6IEtleWNsb2FrRXZlbnRUeXBlLk9uQXV0aEVycm9yXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgdGhpcy5faW5zdGFuY2Uub25BdXRoTG9nb3V0ID0gKCkgPT4ge1xuICAgICAgdGhpcy5fa2V5Y2xvYWtFdmVudHMkLm5leHQoeyB0eXBlOiBLZXljbG9ha0V2ZW50VHlwZS5PbkF1dGhMb2dvdXQgfSk7XG4gICAgfTtcblxuICAgIHRoaXMuX2luc3RhbmNlLm9uQXV0aFJlZnJlc2hTdWNjZXNzID0gKCkgPT4ge1xuICAgICAgdGhpcy5fa2V5Y2xvYWtFdmVudHMkLm5leHQoe1xuICAgICAgICB0eXBlOiBLZXljbG9ha0V2ZW50VHlwZS5PbkF1dGhSZWZyZXNoU3VjY2Vzc1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHRoaXMuX2luc3RhbmNlLm9uQXV0aFJlZnJlc2hFcnJvciA9ICgpID0+IHtcbiAgICAgIHRoaXMuX2tleWNsb2FrRXZlbnRzJC5uZXh0KHtcbiAgICAgICAgdHlwZTogS2V5Y2xvYWtFdmVudFR5cGUuT25BdXRoUmVmcmVzaEVycm9yXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgdGhpcy5faW5zdGFuY2Uub25BdXRoU3VjY2VzcyA9ICgpID0+IHtcbiAgICAgIHRoaXMuX2tleWNsb2FrRXZlbnRzJC5uZXh0KHsgdHlwZTogS2V5Y2xvYWtFdmVudFR5cGUuT25BdXRoU3VjY2VzcyB9KTtcbiAgICB9O1xuXG4gICAgdGhpcy5faW5zdGFuY2Uub25Ub2tlbkV4cGlyZWQgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9rZXljbG9ha0V2ZW50cyQubmV4dCh7XG4gICAgICAgIHR5cGU6IEtleWNsb2FrRXZlbnRUeXBlLk9uVG9rZW5FeHBpcmVkXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgdGhpcy5faW5zdGFuY2Uub25SZWFkeSA9IGF1dGhlbnRpY2F0ZWQgPT4ge1xuICAgICAgdGhpcy5fa2V5Y2xvYWtFdmVudHMkLm5leHQoe1xuICAgICAgICBhcmdzOiBhdXRoZW50aWNhdGVkLFxuICAgICAgICB0eXBlOiBLZXljbG9ha0V2ZW50VHlwZS5PblJlYWR5XG4gICAgICB9KTtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIGFsbCBiZWFyZXJFeGNsdWRlZFVybCBjb250ZW50IGluIGEgdW5pZm9ybSB0eXBlOiBFeGNsdWRlZFVybCxcbiAgICogc28gaXQgYmVjb21lcyBlYXNpZXIgdG8gaGFuZGxlLlxuICAgKlxuICAgKiBAcGFyYW0gYmVhcmVyRXhjbHVkZWRVcmxzIGFycmF5IG9mIHN0cmluZ3Mgb3IgRXhjbHVkZWRVcmwgdGhhdCBpbmNsdWRlc1xuICAgKiB0aGUgdXJsIGFuZCBIdHRwTWV0aG9kLlxuICAgKi9cbiAgcHJpdmF0ZSBsb2FkRXhjbHVkZWRVcmxzKGJlYXJlckV4Y2x1ZGVkVXJsczogKHN0cmluZyB8IEV4Y2x1ZGVkVXJsKVtdKTogRXhjbHVkZWRVcmxSZWdleFtdIHtcbiAgICBjb25zdCBleGNsdWRlZFVybHM6IEV4Y2x1ZGVkVXJsUmVnZXhbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBiZWFyZXJFeGNsdWRlZFVybHMpIHtcbiAgICAgIGxldCBleGNsdWRlZFVybDogRXhjbHVkZWRVcmxSZWdleDtcbiAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgZXhjbHVkZWRVcmwgPSB7IHVybFBhdHRlcm46IG5ldyBSZWdFeHAoaXRlbSwgJ2knKSwgaHR0cE1ldGhvZHM6IFtdIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBleGNsdWRlZFVybCA9IHtcbiAgICAgICAgICB1cmxQYXR0ZXJuOiBuZXcgUmVnRXhwKGl0ZW0udXJsLCAnaScpLFxuICAgICAgICAgIGh0dHBNZXRob2RzOiBpdGVtLmh0dHBNZXRob2RzXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBleGNsdWRlZFVybHMucHVzaChleGNsdWRlZFVybCk7XG4gICAgfVxuICAgIHJldHVybiBleGNsdWRlZFVybHM7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyB0aGUgY2xhc3MgdmFsdWVzIGluaXRpYWxpemF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgKi9cbiAgcHJpdmF0ZSBpbml0U2VydmljZVZhbHVlcyh7XG4gICAgZW5hYmxlQmVhcmVySW50ZXJjZXB0b3IgPSB0cnVlLFxuICAgIGxvYWRVc2VyUHJvZmlsZUF0U3RhcnRVcCA9IHRydWUsXG4gICAgYmVhcmVyRXhjbHVkZWRVcmxzID0gW10sXG4gICAgYXV0aG9yaXphdGlvbkhlYWRlck5hbWUgPSAnQXV0aG9yaXphdGlvbicsXG4gICAgYmVhcmVyUHJlZml4ID0gJ2JlYXJlcicsXG4gICAgaW5pdE9wdGlvbnNcbiAgfTogS2V5Y2xvYWtPcHRpb25zKTogdm9pZCB7XG4gICAgdGhpcy5fZW5hYmxlQmVhcmVySW50ZXJjZXB0b3IgPSBlbmFibGVCZWFyZXJJbnRlcmNlcHRvcjtcbiAgICB0aGlzLl9sb2FkVXNlclByb2ZpbGVBdFN0YXJ0VXAgPSBsb2FkVXNlclByb2ZpbGVBdFN0YXJ0VXA7XG4gICAgdGhpcy5fYXV0aG9yaXphdGlvbkhlYWRlck5hbWUgPSBhdXRob3JpemF0aW9uSGVhZGVyTmFtZTtcbiAgICB0aGlzLl9iZWFyZXJQcmVmaXggPSBiZWFyZXJQcmVmaXgudHJpbSgpLmNvbmNhdCgnICcpO1xuICAgIHRoaXMuX2V4Y2x1ZGVkVXJscyA9IHRoaXMubG9hZEV4Y2x1ZGVkVXJscyhiZWFyZXJFeGNsdWRlZFVybHMpO1xuICAgIHRoaXMuX3NpbGVudFJlZnJlc2ggPSBpbml0T3B0aW9ucyA/IGluaXRPcHRpb25zLmZsb3cgPT09ICdpbXBsaWNpdCcgOiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBLZXljbG9hayBpbml0aWFsaXphdGlvbi4gSXQgc2hvdWxkIGJlIGNhbGxlZCB0byBpbml0aWFsaXplIHRoZSBhZGFwdGVyLlxuICAgKiBPcHRpb25zIGlzIGEgb2JqZWN0IHdpdGggMiBtYWluIHBhcmFtZXRlcnM6IGNvbmZpZyBhbmQgaW5pdE9wdGlvbnMuIFRoZSBmaXJzdCBvbmVcbiAgICogd2lsbCBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgS2V5Y2xvYWsgaW5zdGFuY2UuIFRoZSBzZWNvbmQgb25lIGFyZSBvcHRpb25zIHRvIGluaXRpYWxpemUgdGhlXG4gICAqIGtleWNsb2FrIGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgKiBDb25maWc6IG1heSBiZSBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGtleWNsb2FrIFVSSSBvciBhbiBvYmplY3Qgd2l0aCB0aGVcbiAgICogZm9sbG93aW5nIGNvbnRlbnQ6XG4gICAqIC0gdXJsOiBLZXljbG9hayBqc29uIFVSTFxuICAgKiAtIHJlYWxtOiByZWFsbSBuYW1lXG4gICAqIC0gY2xpZW50SWQ6IGNsaWVudCBpZFxuICAgKlxuICAgKiBpbml0T3B0aW9uczpcbiAgICogT3B0aW9ucyB0byBpbml0aWFsaXplIHRoZSBLZXljbG9hayBhZGFwdGVyLCBtYXRjaGVzIHRoZSBvcHRpb25zIGFzIHByb3ZpZGVkIGJ5IEtleWNsb2FrIGl0c2VsZi5cbiAgICpcbiAgICogZW5hYmxlQmVhcmVySW50ZXJjZXB0b3I6XG4gICAqIEZsYWcgdG8gaW5kaWNhdGUgaWYgdGhlIGJlYXJlciB3aWxsIGFkZGVkIHRvIHRoZSBhdXRob3JpemF0aW9uIGhlYWRlci5cbiAgICpcbiAgICogbG9hZFVzZXJQcm9maWxlSW5TdGFydFVwOlxuICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgdXNlciBwcm9maWxlIHNob3VsZCBiZSBsb2FkZWQgYXQgdGhlIGtleWNsb2FrIGluaXRpYWxpemF0aW9uLFxuICAgKiBqdXN0IGFmdGVyIHRoZSBsb2dpbi5cbiAgICpcbiAgICogYmVhcmVyRXhjbHVkZWRVcmxzOlxuICAgKiBTdHJpbmcgQXJyYXkgdG8gZXhjbHVkZSB0aGUgdXJscyB0aGF0IHNob3VsZCBub3QgaGF2ZSB0aGUgQXV0aG9yaXphdGlvbiBIZWFkZXIgYXV0b21hdGljYWxseVxuICAgKiBhZGRlZC5cbiAgICpcbiAgICogYXV0aG9yaXphdGlvbkhlYWRlck5hbWU6XG4gICAqIFRoaXMgdmFsdWUgd2lsbCBiZSB1c2VkIGFzIHRoZSBBdXRob3JpemF0aW9uIEh0dHAgSGVhZGVyIG5hbWUuXG4gICAqXG4gICAqIGJlYXJlclByZWZpeDpcbiAgICogVGhpcyB2YWx1ZSB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBBdXRob3JpemF0aW9uIEh0dHAgSGVhZGVyIHBhcmFtLlxuICAgKlxuICAgKiBAcmV0dXJuc1xuICAgKiBBIFByb21pc2Ugd2l0aCBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgaW5pdGlhbGl6YXRpb24gd2FzIHN1Y2Nlc3NmdWwuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgaW5pdChvcHRpb25zOiBLZXljbG9ha09wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMuaW5pdFNlcnZpY2VWYWx1ZXMob3B0aW9ucyk7XG4gICAgY29uc3QgeyBjb25maWcsIGluaXRPcHRpb25zIH0gPSBvcHRpb25zO1xuXG4gICAgdGhpcy5faW5zdGFuY2UgPSBLZXljbG9hayhjb25maWcpO1xuICAgIHRoaXMuYmluZHNLZXljbG9ha0V2ZW50cygpO1xuXG4gICAgY29uc3QgYXV0aGVudGljYXRlZCA9IGF3YWl0IHRvUHJvbWlzZSh0aGlzLl9pbnN0YW5jZS5pbml0KGluaXRPcHRpb25zKSk7XG5cbiAgICBpZiAoYXV0aGVudGljYXRlZCAmJiB0aGlzLl9sb2FkVXNlclByb2ZpbGVBdFN0YXJ0VXApIHtcbiAgICAgIGF3YWl0IHRoaXMubG9hZFVzZXJQcm9maWxlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF1dGhlbnRpY2F0ZWQ7XG4gIH1cblxuICAvKipcbiAgICogUmVkaXJlY3RzIHRvIGxvZ2luIGZvcm0gb24gKG9wdGlvbnMgaXMgYW4gb3B0aW9uYWwgb2JqZWN0IHdpdGggcmVkaXJlY3RVcmkgYW5kL29yXG4gICAqIHByb21wdCBmaWVsZHMpLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgKiBPYmplY3QsIHdoZXJlOlxuICAgKiAgLSByZWRpcmVjdFVyaTogU3BlY2lmaWVzIHRoZSB1cmkgdG8gcmVkaXJlY3QgdG8gYWZ0ZXIgbG9naW4uXG4gICAqICAtIHByb21wdDpCeSBkZWZhdWx0IHRoZSBsb2dpbiBzY3JlZW4gaXMgZGlzcGxheWVkIGlmIHRoZSB1c2VyIGlzIG5vdCBsb2dnZWQtaW4gdG8gS2V5Y2xvYWsuXG4gICAqIFRvIG9ubHkgYXV0aGVudGljYXRlIHRvIHRoZSBhcHBsaWNhdGlvbiBpZiB0aGUgdXNlciBpcyBhbHJlYWR5IGxvZ2dlZC1pbiBhbmQgbm90IGRpc3BsYXkgdGhlXG4gICAqIGxvZ2luIHBhZ2UgaWYgdGhlIHVzZXIgaXMgbm90IGxvZ2dlZC1pbiwgc2V0IHRoaXMgb3B0aW9uIHRvIG5vbmUuIFRvIGFsd2F5cyByZXF1aXJlXG4gICAqIHJlLWF1dGhlbnRpY2F0aW9uIGFuZCBpZ25vcmUgU1NPLCBzZXQgdGhpcyBvcHRpb24gdG8gbG9naW4gLlxuICAgKiAgLSBtYXhBZ2U6IFVzZWQganVzdCBpZiB1c2VyIGlzIGFscmVhZHkgYXV0aGVudGljYXRlZC4gU3BlY2lmaWVzIG1heGltdW0gdGltZSBzaW5jZSB0aGVcbiAgICogYXV0aGVudGljYXRpb24gb2YgdXNlciBoYXBwZW5lZC4gSWYgdXNlciBpcyBhbHJlYWR5IGF1dGhlbnRpY2F0ZWQgZm9yIGxvbmdlciB0aW1lIHRoYW5cbiAgICogbWF4QWdlLCB0aGUgU1NPIGlzIGlnbm9yZWQgYW5kIGhlIHdpbGwgbmVlZCB0byByZS1hdXRoZW50aWNhdGUgYWdhaW4uXG4gICAqICAtIGxvZ2luSGludDogVXNlZCB0byBwcmUtZmlsbCB0aGUgdXNlcm5hbWUvZW1haWwgZmllbGQgb24gdGhlIGxvZ2luIGZvcm0uXG4gICAqICAtIGFjdGlvbjogSWYgdmFsdWUgaXMgJ3JlZ2lzdGVyJyB0aGVuIHVzZXIgaXMgcmVkaXJlY3RlZCB0byByZWdpc3RyYXRpb24gcGFnZSwgb3RoZXJ3aXNlIHRvXG4gICAqIGxvZ2luIHBhZ2UuXG4gICAqICAtIGxvY2FsZTogU3BlY2lmaWVzIHRoZSBkZXNpcmVkIGxvY2FsZSBmb3IgdGhlIFVJLlxuICAgKiBAcmV0dXJuc1xuICAgKiBBIHZvaWQgUHJvbWlzZSBpZiB0aGUgbG9naW4gaXMgc3VjY2Vzc2Z1bCBhbmQgYWZ0ZXIgdGhlIHVzZXIgcHJvZmlsZSBsb2FkaW5nLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGxvZ2luKG9wdGlvbnM6IEtleWNsb2FrLktleWNsb2FrTG9naW5PcHRpb25zID0ge30pIHtcbiAgICBhd2FpdCB0b1Byb21pc2UodGhpcy5faW5zdGFuY2UubG9naW4ob3B0aW9ucykpO1xuXG4gICAgaWYgKHRoaXMuX2xvYWRVc2VyUHJvZmlsZUF0U3RhcnRVcCkge1xuICAgICAgYXdhaXQgdGhpcy5sb2FkVXNlclByb2ZpbGUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVkaXJlY3RzIHRvIGxvZ291dC5cbiAgICpcbiAgICogQHBhcmFtIHJlZGlyZWN0VXJpXG4gICAqIFNwZWNpZmllcyB0aGUgdXJpIHRvIHJlZGlyZWN0IHRvIGFmdGVyIGxvZ291dC5cbiAgICogQHJldHVybnNcbiAgICogQSB2b2lkIFByb21pc2UgaWYgdGhlIGxvZ291dCB3YXMgc3VjY2Vzc2Z1bCwgY2xlYW5pbmcgYWxzbyB0aGUgdXNlclByb2ZpbGUuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgbG9nb3V0KHJlZGlyZWN0VXJpPzogc3RyaW5nKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgIHJlZGlyZWN0VXJpXG4gICAgfTtcblxuICAgIGF3YWl0IHRvUHJvbWlzZSh0aGlzLl9pbnN0YW5jZS5sb2dvdXQob3B0aW9ucykpO1xuICAgIHRoaXMuX3VzZXJQcm9maWxlID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZGlyZWN0cyB0byByZWdpc3RyYXRpb24gZm9ybS4gU2hvcnRjdXQgZm9yIGxvZ2luIHdpdGggb3B0aW9uXG4gICAqIGFjdGlvbiA9ICdyZWdpc3RlcicuIE9wdGlvbnMgYXJlIHNhbWUgYXMgZm9yIHRoZSBsb2dpbiBtZXRob2QgYnV0ICdhY3Rpb24nIGlzIHNldCB0b1xuICAgKiAncmVnaXN0ZXInLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgKiBsb2dpbiBvcHRpb25zXG4gICAqIEByZXR1cm5zXG4gICAqIEEgdm9pZCBQcm9taXNlIGlmIHRoZSByZWdpc3RlciBmbG93IHdhcyBzdWNjZXNzZnVsLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlZ2lzdGVyKG9wdGlvbnM6IEtleWNsb2FrLktleWNsb2FrTG9naW5PcHRpb25zID0geyBhY3Rpb246ICdyZWdpc3RlcicgfSkge1xuICAgIGF3YWl0IHRvUHJvbWlzZSh0aGlzLl9pbnN0YW5jZS5yZWdpc3RlcihvcHRpb25zKSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhlIHVzZXIgaGFzIGFjY2VzcyB0byB0aGUgc3BlY2lmaWVkIHJvbGUuIEl0IHdpbGwgbG9vayBmb3Igcm9sZXMgaW5cbiAgICogcmVhbG0gYW5kIGNsaWVudElkLCBidXQgd2lsbCBub3QgY2hlY2sgaWYgdGhlIHVzZXIgaXMgbG9nZ2VkIGluIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSByb2xlXG4gICAqIHJvbGUgbmFtZVxuICAgKiBAcGFyYW0gcmVzb3VyY2VcbiAgICogcmVzb3VyY2UgbmFtZSBJZiBub3Qgc3BlY2lmaWVkLCBgY2xpZW50SWRgIGlzIHVzZWRcbiAgICogQHJldHVybnNcbiAgICogQSBib29sZWFuIG1lYW5pbmcgaWYgdGhlIHVzZXIgaGFzIHRoZSBzcGVjaWZpZWQgUm9sZS5cbiAgICovXG4gIGlzVXNlckluUm9sZShyb2xlOiBzdHJpbmcsIHJlc291cmNlPzogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgbGV0IGhhc1JvbGU6IGJvb2xlYW47XG4gICAgaGFzUm9sZSA9IHRoaXMuX2luc3RhbmNlLmhhc1Jlc291cmNlUm9sZShyb2xlLCByZXNvdXJjZSk7XG4gICAgaWYgKCFoYXNSb2xlKSB7XG4gICAgICBoYXNSb2xlID0gdGhpcy5faW5zdGFuY2UuaGFzUmVhbG1Sb2xlKHJvbGUpO1xuICAgIH1cbiAgICByZXR1cm4gaGFzUm9sZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHJvbGVzIG9mIHRoZSBsb2dnZWQgdXNlci4gVGhlIGFsbFJvbGVzIHBhcmFtZXRlciwgd2l0aCBkZWZhdWx0IHZhbHVlXG4gICAqIHRydWUsIHdpbGwgcmV0dXJuIHRoZSBjbGllbnRJZCBhbmQgcmVhbG0gcm9sZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBsb2dnZWQgdXNlci4gSWYgc2V0IHRvIGZhbHNlXG4gICAqIGl0IHdpbGwgb25seSByZXR1cm4gdGhlIHVzZXIgcm9sZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBjbGllbnRJZC5cbiAgICpcbiAgICogQHBhcmFtIGFsbFJvbGVzXG4gICAqIEZsYWcgdG8gc2V0IGlmIGFsbCByb2xlcyBzaG91bGQgYmUgcmV0dXJuZWQuKE9wdGlvbmFsOiBkZWZhdWx0IHZhbHVlIGlzIHRydWUpXG4gICAqIEByZXR1cm5zXG4gICAqIEFycmF5IG9mIFJvbGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgbG9nZ2VkIHVzZXIuXG4gICAqL1xuICBnZXRVc2VyUm9sZXMoYWxsUm9sZXM6IGJvb2xlYW4gPSB0cnVlKTogc3RyaW5nW10ge1xuICAgIGxldCByb2xlczogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAodGhpcy5faW5zdGFuY2UucmVzb3VyY2VBY2Nlc3MpIHtcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuX2luc3RhbmNlLnJlc291cmNlQWNjZXNzKSB7XG4gICAgICAgIGlmICh0aGlzLl9pbnN0YW5jZS5yZXNvdXJjZUFjY2Vzcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgY29uc3QgcmVzb3VyY2VBY2Nlc3M6IGFueSA9IHRoaXMuX2luc3RhbmNlLnJlc291cmNlQWNjZXNzW2tleV07XG4gICAgICAgICAgY29uc3QgY2xpZW50Um9sZXMgPSByZXNvdXJjZUFjY2Vzc1sncm9sZXMnXSB8fCBbXTtcbiAgICAgICAgICByb2xlcyA9IHJvbGVzLmNvbmNhdChjbGllbnRSb2xlcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGFsbFJvbGVzICYmIHRoaXMuX2luc3RhbmNlLnJlYWxtQWNjZXNzKSB7XG4gICAgICBjb25zdCByZWFsbVJvbGVzID0gdGhpcy5faW5zdGFuY2UucmVhbG1BY2Nlc3NbJ3JvbGVzJ10gfHwgW107XG4gICAgICByb2xlcy5wdXNoKC4uLnJlYWxtUm9sZXMpO1xuICAgIH1cbiAgICByZXR1cm4gcm9sZXM7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdXNlciBpcyBsb2dnZWQgaW4uXG4gICAqXG4gICAqIEByZXR1cm5zXG4gICAqIEEgYm9vbGVhbiB0aGF0IGluZGljYXRlcyBpZiB0aGUgdXNlciBpcyBsb2dnZWQgaW4uXG4gICAqL1xuICBhc3luYyBpc0xvZ2dlZEluKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIXRoaXMuX2luc3RhbmNlLmF1dGhlbnRpY2F0ZWQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy51cGRhdGVUb2tlbigyMCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHRva2VuIGhhcyBsZXNzIHRoYW4gbWluVmFsaWRpdHkgc2Vjb25kcyBsZWZ0IGJlZm9yZVxuICAgKiBpdCBleHBpcmVzLlxuICAgKlxuICAgKiBAcGFyYW0gbWluVmFsaWRpdHlcbiAgICogU2Vjb25kcyBsZWZ0LiAobWluVmFsaWRpdHkpIGlzIG9wdGlvbmFsLiBEZWZhdWx0IHZhbHVlIGlzIDAuXG4gICAqIEByZXR1cm5zXG4gICAqIEJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgdG9rZW4gaXMgZXhwaXJlZC5cbiAgICovXG4gIGlzVG9rZW5FeHBpcmVkKG1pblZhbGlkaXR5OiBudW1iZXIgPSAwKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlLmlzVG9rZW5FeHBpcmVkKG1pblZhbGlkaXR5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiB0aGUgdG9rZW4gZXhwaXJlcyB3aXRoaW4gbWluVmFsaWRpdHkgc2Vjb25kcyB0aGUgdG9rZW4gaXMgcmVmcmVzaGVkLiBJZiB0aGVcbiAgICogc2Vzc2lvbiBzdGF0dXMgaWZyYW1lIGlzIGVuYWJsZWQsIHRoZSBzZXNzaW9uIHN0YXR1cyBpcyBhbHNvIGNoZWNrZWQuXG4gICAqIFJldHVybnMgYSBwcm9taXNlIHRlbGxpbmcgaWYgdGhlIHRva2VuIHdhcyByZWZyZXNoZWQgb3Igbm90LiBJZiB0aGUgc2Vzc2lvbiBpcyBub3QgYWN0aXZlXG4gICAqIGFueW1vcmUsIHRoZSBwcm9taXNlIGlzIHJlamVjdGVkLlxuICAgKlxuICAgKiBAcGFyYW0gbWluVmFsaWRpdHlcbiAgICogU2Vjb25kcyBsZWZ0LiAobWluVmFsaWRpdHkgaXMgb3B0aW9uYWwsIGlmIG5vdCBzcGVjaWZpZWQgNSBpcyB1c2VkKVxuICAgKiBAcmV0dXJuc1xuICAgKiBQcm9taXNlIHdpdGggYSBib29sZWFuIGluZGljYXRpbmcgaWYgdGhlIHRva2VuIHdhcyBzdWNjZXNmdWxseSB1cGRhdGVkLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHVwZGF0ZVRva2VuKG1pblZhbGlkaXR5ID0gNSkge1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSB3b3JrYXJvdW5kIHVudGlsIHRoZSBzaWxlbnQgcmVmcmVzaCAoaXNzdWUgIzQzKVxuICAgIC8vIGlzIG5vdCBpbXBsZW1lbnRlZCwgYXZvaWRpbmcgdGhlIHJlZGlyZWN0IGxvb3AuXG4gICAgaWYgKHRoaXMuX3NpbGVudFJlZnJlc2gpIHtcbiAgICAgIGlmICh0aGlzLmlzVG9rZW5FeHBpcmVkKCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gcmVmcmVzaCB0aGUgdG9rZW4sIG9yIHRoZSBzZXNzaW9uIGlzIGV4cGlyZWQnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9pbnN0YW5jZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdLZXljbG9hayBBbmd1bGFyIGxpYnJhcnkgaXMgbm90IGluaXRpYWxpemVkLicpO1xuICAgIH1cblxuICAgIHJldHVybiB0b1Byb21pc2UodGhpcy5faW5zdGFuY2UudXBkYXRlVG9rZW4obWluVmFsaWRpdHkpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyB0aGUgdXNlciBwcm9maWxlLlxuICAgKiBSZXR1cm5zIHByb21pc2UgdG8gc2V0IGZ1bmN0aW9ucyB0byBiZSBpbnZva2VkIGlmIHRoZSBwcm9maWxlIHdhcyBsb2FkZWRcbiAgICogc3VjY2Vzc2Z1bGx5LCBvciBpZiB0aGUgcHJvZmlsZSBjb3VsZCBub3QgYmUgbG9hZGVkLlxuICAgKlxuICAgKiBAcGFyYW0gZm9yY2VSZWxvYWRcbiAgICogSWYgdHJ1ZSB3aWxsIGZvcmNlIHRoZSBsb2FkVXNlclByb2ZpbGUgZXZlbiBpZiBpdHMgYWxyZWFkeSBsb2FkZWQuXG4gICAqIEByZXR1cm5zXG4gICAqIEEgcHJvbWlzZSB3aXRoIHRoZSBLZXljbG9ha1Byb2ZpbGUgZGF0YSBsb2FkZWQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgbG9hZFVzZXJQcm9maWxlKGZvcmNlUmVsb2FkID0gZmFsc2UpIHtcbiAgICBpZiAodGhpcy5fdXNlclByb2ZpbGUgJiYgIWZvcmNlUmVsb2FkKSB7XG4gICAgICByZXR1cm4gdGhpcy5fdXNlclByb2ZpbGU7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9pbnN0YW5jZS5hdXRoZW50aWNhdGVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSB1c2VyIHByb2ZpbGUgd2FzIG5vdCBsb2FkZWQgYXMgdGhlIHVzZXIgaXMgbm90IGxvZ2dlZCBpbi4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fdXNlclByb2ZpbGUgPSBhd2FpdCB0b1Byb21pc2UodGhpcy5faW5zdGFuY2UubG9hZFVzZXJQcm9maWxlKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGF1dGhlbnRpY2F0ZWQgdG9rZW4sIGNhbGxpbmcgdXBkYXRlVG9rZW4gdG8gZ2V0IGEgcmVmcmVzaGVkIG9uZSBpZlxuICAgKiBuZWNlc3NhcnkuIElmIHRoZSBzZXNzaW9uIGlzIGV4cGlyZWQgYW5kIHRoZSBmb3JjZUxvZ2luIGZsYWcgaXMgc2V0IHRvIHRydWUsXG4gICAqIHRoaXMgbWV0aG9kIGNhbGxzIHRoZSBsb2dpbiBtZXRob2QgZm9yIGEgbmV3IGxvZ2luLCBvdGhlcndpc2UgcmVqZWN0cy5cbiAgICpcbiAgICogQHBhcmFtIGZvcmNlTG9naW5cbiAgICogRmxhZyB3aGV0aGVyIGEgbG9naW4gc2hvdWxkIGJlIGVuZm9yY2VkIGlmIHRoZSBzZXNzaW9uIGlzIGV4cGlyZWQuXG4gICAqIEByZXR1cm5zXG4gICAqIFByb21pc2Ugd2l0aCB0aGUgZ2VuZXJhdGVkIHRva2VuLlxuICAgKi9cbiAgYXN5bmMgZ2V0VG9rZW4oZm9yY2VMb2dpbiA9IHRydWUpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZVRva2VuKDEwKTtcbiAgICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZS50b2tlbjtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGZvcmNlTG9naW4pIHtcbiAgICAgICAgdGhpcy5sb2dpbigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGxvZ2dlZCB1c2VybmFtZS5cbiAgICpcbiAgICogQHJldHVybnNcbiAgICogVGhlIGxvZ2dlZCB1c2VybmFtZS5cbiAgICovXG4gIHB1YmxpYyBnZXRVc2VybmFtZSgpIHtcbiAgICBpZiAoIXRoaXMuX3VzZXJQcm9maWxlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGxvZ2dlZCBpbiBvciB1c2VyIHByb2ZpbGUgd2FzIG5vdCBsb2FkZWQuJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3VzZXJQcm9maWxlLnVzZXJuYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIGF1dGhlbnRpY2F0aW9uIHN0YXRlLCBpbmNsdWRpbmcgdG9rZW5zLiBUaGlzIGNhbiBiZSB1c2VmdWwgaWYgYXBwbGljYXRpb25cbiAgICogaGFzIGRldGVjdGVkIHRoZSBzZXNzaW9uIHdhcyBleHBpcmVkLCBmb3IgZXhhbXBsZSBpZiB1cGRhdGluZyB0b2tlbiBmYWlscy5cbiAgICogSW52b2tpbmcgdGhpcyByZXN1bHRzIGluIG9uQXV0aExvZ291dCBjYWxsYmFjayBsaXN0ZW5lciBiZWluZyBpbnZva2VkLlxuICAgKi9cbiAgY2xlYXJUb2tlbigpOiB2b2lkIHtcbiAgICB0aGlzLl9pbnN0YW5jZS5jbGVhclRva2VuKCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHZhbGlkIHRva2VuIGluIGhlYWRlci4gVGhlIGtleSAmIHZhbHVlIGZvcm1hdCBpczpcbiAgICogQXV0aG9yaXphdGlvbiBCZWFyZXIgPHRva2VuPi5cbiAgICogSWYgdGhlIGhlYWRlcnMgcGFyYW0gaXMgdW5kZWZpbmVkIGl0IHdpbGwgY3JlYXRlIHRoZSBBbmd1bGFyIGhlYWRlcnMgb2JqZWN0LlxuICAgKlxuICAgKiBAcGFyYW0gaGVhZGVyc1xuICAgKiBVcGRhdGVkIGhlYWRlciB3aXRoIEF1dGhvcml6YXRpb24gYW5kIEtleWNsb2FrIHRva2VuLlxuICAgKiBAcmV0dXJuc1xuICAgKiBBbiBvYnNlcnZhYmxlIHdpdGggd2l0aCB0aGUgSFRUUCBBdXRob3JpemF0aW9uIGhlYWRlciBhbmQgdGhlIGN1cnJlbnQgdG9rZW4uXG4gICAqL1xuICBwdWJsaWMgYWRkVG9rZW5Ub0hlYWRlcihoZWFkZXJzOiBIdHRwSGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpKSB7XG4gICAgcmV0dXJuIGZyb20oYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdG9rZW4gPSBhd2FpdCB0aGlzLmdldFRva2VuKCk7XG4gICAgICByZXR1cm4gaGVhZGVycy5zZXQodGhpcy5fYXV0aG9yaXphdGlvbkhlYWRlck5hbWUsIHRoaXMuX2JlYXJlclByZWZpeCArIHRva2VuKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBLZXljbG9hayBpbnN0YW5jZSwgaWYgeW91IG5lZWQgYW55IGN1c3RvbWl6YXRpb24gdGhhdFxuICAgKiB0aGlzIEFuZ3VsYXIgc2VydmljZSBkb2VzIG5vdCBzdXBwb3J0IHlldC4gVXNlIHdpdGggY2F1dGlvbi5cbiAgICpcbiAgICogQHJldHVybnNcbiAgICogVGhlIEtleWNsb2FrSW5zdGFuY2UgZnJvbSBrZXljbG9hay1qcy5cbiAgICovXG4gIGdldEtleWNsb2FrSW5zdGFuY2UoKTogS2V5Y2xvYWsuS2V5Y2xvYWtJbnN0YW5jZSB7XG4gICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGV4Y2x1ZGVkIFVSTHMgdGhhdCBzaG91bGQgbm90IGJlIGNvbnNpZGVyZWQgYnlcbiAgICogdGhlIGh0dHAgaW50ZXJjZXB0b3Igd2hpY2ggYXV0b21hdGljYWxseSBhZGRzIHRoZSBhdXRob3JpemF0aW9uIGhlYWRlciBpbiB0aGUgSHR0cCBSZXF1ZXN0LlxuICAgKlxuICAgKiBAcmV0dXJuc1xuICAgKiBUaGUgZXhjbHVkZWQgdXJscyB0aGF0IG11c3Qgbm90IGJlIGludGVyY2VwdGVkIGJ5IHRoZSBLZXljbG9ha0JlYXJlckludGVyY2VwdG9yLlxuICAgKi9cbiAgZ2V0IGV4Y2x1ZGVkVXJscygpOiBFeGNsdWRlZFVybFJlZ2V4W10ge1xuICAgIHJldHVybiB0aGlzLl9leGNsdWRlZFVybHM7XG4gIH1cblxuICAvKipcbiAgICogRmxhZyB0byBpbmRpY2F0ZSBpZiB0aGUgYmVhcmVyIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGF1dGhvcml6YXRpb24gaGVhZGVyLlxuICAgKlxuICAgKiBAcmV0dXJuc1xuICAgKiBSZXR1cm5zIGlmIHRoZSBiZWFyZXIgaW50ZXJjZXB0b3Igd2FzIHNldCB0byBiZSBkaXNhYmxlZC5cbiAgICovXG4gIGdldCBlbmFibGVCZWFyZXJJbnRlcmNlcHRvcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZW5hYmxlQmVhcmVySW50ZXJjZXB0b3I7XG4gIH1cblxuICAvKipcbiAgICogS2V5Y2xvYWsgc3ViamVjdCB0byBtb25pdG9yIHRoZSBldmVudHMgdHJpZ2dlcmVkIGJ5IGtleWNsb2FrLWpzLlxuICAgKiBUaGUgZm9sbG93aW5nIGV2ZW50cyBhcyBhdmFpbGFibGUgKGFzIGRlc2NyaWJlZCBhdCBrZXljbG9hayBkb2NzIC1cbiAgICogaHR0cHM6Ly93d3cua2V5Y2xvYWsub3JnL2RvY3MvbGF0ZXN0L3NlY3VyaW5nX2FwcHMvaW5kZXguaHRtbCNjYWxsYmFjay1ldmVudHMpOlxuICAgKiAtIE9uQXV0aEVycm9yXG4gICAqIC0gT25BdXRoTG9nb3V0XG4gICAqIC0gT25BdXRoUmVmcmVzaEVycm9yXG4gICAqIC0gT25BdXRoUmVmcmVzaFN1Y2Nlc3NcbiAgICogLSBPbkF1dGhTdWNjZXNzXG4gICAqIC0gT25SZWFkeVxuICAgKiAtIE9uVG9rZW5FeHBpcmVcbiAgICogSW4gZWFjaCBvY2N1cnJlbmNlIG9mIGFueSBvZiB0aGVzZSwgdGhpcyBzdWJqZWN0IHdpbGwgcmV0dXJuIHRoZSBldmVudCB0eXBlLFxuICAgKiBkZXNjcmliZWQgYXQge0BsaW5rIEtleWNsb2FrRXZlbnRUeXBlfSBlbnVtIGFuZCB0aGUgZnVuY3Rpb24gYXJncyBmcm9tIHRoZSBrZXljbG9hay1qc1xuICAgKiBpZiBwcm92aWRlZCBhbnkuXG4gICAqXG4gICAqIEByZXR1cm5zXG4gICAqIEEgc3ViamVjdCB3aXRoIHRoZSB7QGxpbmsgS2V5Y2xvYWtFdmVudH0gd2hpY2ggZGVzY3JpYmVzIHRoZSBldmVudCB0eXBlIGFuZCBhdHRhY2hlcyB0aGVcbiAgICogZnVuY3Rpb24gYXJncy5cbiAgICovXG4gIGdldCBrZXljbG9ha0V2ZW50cyQoKTogU3ViamVjdDxLZXljbG9ha0V2ZW50PiB7XG4gICAgcmV0dXJuIHRoaXMuX2tleWNsb2FrRXZlbnRzJDtcbiAgfVxufVxuIl19
205
+ }
206
+ KeycloakService.decorators = [
207
+ { type: Injectable }
208
+ ];
209
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Y2xvYWsuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi9wcm9qZWN0cy9rZXljbG9hay1hbmd1bGFyL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9jb3JlL3NlcnZpY2VzL2tleWNsb2FrLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQVFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRW5ELE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUdyQyxPQUFPLEtBQUssU0FBUyxNQUFNLGFBQWEsQ0FBQztBQUN6QyxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDO0FBT2xDLE9BQU8sRUFBaUIsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQVVoRixNQUFNLE9BQU8sZUFBZTtJQUQ1QjtRQXVDVSxxQkFBZ0IsR0FBMkIsSUFBSSxPQUFPLEVBRTNELENBQUM7SUFpY04sQ0FBQztJQXhiUyxtQkFBbUI7UUFDekIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUN6QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDO2dCQUN6QixJQUFJLEVBQUUsU0FBUztnQkFDZixJQUFJLEVBQUUsaUJBQWlCLENBQUMsV0FBVzthQUNwQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUM7UUFFRixJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksR0FBRyxHQUFHLEVBQUU7WUFDakMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZFLENBQUMsQ0FBQztRQUVGLElB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O1lBQzNCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7UUFDOUIsQ0FBQztLQUFBO0lBUU0sV0FBVztRQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUN0QixNQUFNLElBQUksS0FBSyxDQUFDLG9EQUFvRCxDQUFDLENBQUM7U0FDdkU7UUFFRCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDO0lBQ3BDLENBQUM7SUFPRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBWU0sZ0JBQWdCLENBQUMsVUFBdUIsSUFBSSxXQUFXLEVBQUU7UUFDOUQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUMvQixHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUNaLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUN6RixDQUNGLENBQUM7SUFDSixDQUFDO0lBU0QsbUJBQW1CO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBU0QsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFRRCxJQUFJLHVCQUF1QjtRQUN6QixPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQztJQUN2QyxDQUFDO0lBcUJELElBQUksZUFBZTtRQUNqQixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUMvQixDQUFDOzs7WUF6ZUYsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBNYXVyaWNpbyBHZW1lbGxpIFZpZ29sbyBhbmQgY29udHJpYnV0b3JzLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9naXRodWIuY29tL21hdXJpY2lvdmlnb2xvL2tleWNsb2FrLWFuZ3VsYXIvTElDRU5TRVxuICovXG5cbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuXG5pbXBvcnQgeyBTdWJqZWN0LCBmcm9tIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbi8vIFdvcmthcm91bmQgZm9yIHJvbGx1cCBsaWJyYXJ5IGJlaGF2aW91ciwgYXMgcG9pbnRlZCBvdXQgb24gaXNzdWUgIzEyNjcgKGh0dHBzOi8vZ2l0aHViLmNvbS9yb2xsdXAvcm9sbHVwL2lzc3Vlcy8xMjY3KS5cbmltcG9ydCAqIGFzIEtleWNsb2FrXyBmcm9tICdrZXljbG9hay1qcyc7XG5leHBvcnQgY29uc3QgS2V5Y2xvYWsgPSBLZXljbG9ha187XG5cbmltcG9ydCB7XG4gIEV4Y2x1ZGVkVXJsLFxuICBFeGNsdWRlZFVybFJlZ2V4LFxuICBLZXljbG9ha09wdGlvbnMsXG59IGZyb20gJy4uL2ludGVyZmFjZXMva2V5Y2xvYWstb3B0aW9ucyc7XG5pbXBvcnQgeyBLZXljbG9ha0V2ZW50LCBLZXljbG9ha0V2ZW50VHlwZSB9IGZyb20gJy4uL2ludGVyZmFjZXMva2V5Y2xvYWstZXZlbnQnO1xuXG4vKipcbiAqIFNlcnZpY2UgdG8gZXhwb3NlIGV4aXN0ZW50IG1ldGhvZHMgZnJvbSB0aGUgS2V5Y2xvYWsgSlMgYWRhcHRlciwgYWRkaW5nIG5ld1xuICogZnVuY3Rpb25hbGl0aWVzIHRvIGltcHJvdmUgdGhlIHVzZSBvZiBrZXljbG9hayBpbiBBbmd1bGFyIHYgPiA0LjMgYXBwbGljYXRpb25zLlxuICpcbiAqIFRoaXMgY2xhc3Mgc2hvdWxkIGJlIGluamVjdGVkIGluIHRoZSBhcHBsaWNhdGlvbiBib290c3RyYXAsIHNvIHRoZSBzYW1lIGluc3RhbmNlIHdpbGwgYmUgdXNlZFxuICogYWxvbmcgdGhlIHdlYiBhcHBsaWNhdGlvbi5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEtleWNsb2FrU2VydmljZSB7XG4gIC8qKlxuICAgKiBLZXljbG9hay1qcyBpbnN0YW5jZS5cbiAgICovXG4gIHByaXZhdGUgX2luc3RhbmNlOiBLZXljbG9hay5LZXljbG9ha0luc3RhbmNlO1xuICAvKipcbiAgICogVXNlciBwcm9maWxlIGFzIEtleWNsb2FrUHJvZmlsZSBpbnRlcmZhY2UuXG4gICAqL1xuICBwcml2YXRlIF91c2VyUHJvZmlsZTogS2V5Y2xvYWsuS2V5Y2xvYWtQcm9maWxlO1xuICAvKipcbiAgICogRmxhZyB0byBpbmRpY2F0ZSBpZiB0aGUgYmVhcmVyIHdpbGwgbm90IGJlIGFkZGVkIHRvIHRoZSBhdXRob3JpemF0aW9uIGhlYWRlci5cbiAgICovXG4gIHByaXZhdGUgX2VuYWJsZUJlYXJlckludGVyY2VwdG9yOiBib29sZWFuO1xuICAvKipcbiAgICogV2hlbiB0aGUgaW1wbGljaXQgZmxvdyBpcyBjaG9vc2VuIHRoZXJlIG11c3QgZXhpc3QgYSBzaWxlbnRSZWZyZXNoLCBhcyB0aGVyZSBpc1xuICAgKiBubyByZWZyZXNoIHRva2VuLlxuICAgKi9cbiAgcHJpdmF0ZSBfc2lsZW50UmVmcmVzaDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGF0IHRoZSB1c2VyIHByb2ZpbGUgc2hvdWxkIGJlIGxvYWRlZCBhdCB0aGUga2V5Y2xvYWsgaW5pdGlhbGl6YXRpb24sXG4gICAqIGp1c3QgYWZ0ZXIgdGhlIGxvZ2luLlxuICAgKi9cbiAgcHJpdmF0ZSBfbG9hZFVzZXJQcm9maWxlQXRTdGFydFVwOiBib29sZWFuO1xuICAvKipcbiAgICogVGhlIGJlYXJlciBwcmVmaXggdGhhdCB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSBBdXRob3JpemF0aW9uIEhlYWRlci5cbiAgICovXG4gIHByaXZhdGUgX2JlYXJlclByZWZpeDogc3RyaW5nO1xuICAvKipcbiAgICogVmFsdWUgdGhhdCB3aWxsIGJlIHVzZWQgYXMgdGhlIEF1dGhvcml6YXRpb24gSHR0cCBIZWFkZXIgbmFtZS5cbiAgICovXG4gIHByaXZhdGUgX2F1dGhvcml6YXRpb25IZWFkZXJOYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgZXhjbHVkZWQgdXJscyBwYXR0ZXJucyB0aGF0IG11c3Qgc2tpcCB0aGUgS2V5Y2xvYWtCZWFyZXJJbnRlcmNlcHRvci5cbiAgICovXG4gIHByaXZhdGUgX2V4Y2x1ZGVkVXJsczogRXhjbHVkZWRVcmxSZWdleFtdO1xuICAvKipcbiAgICogT2JzZXJ2ZXIgZm9yIHRoZSBrZXljbG9hayBldmVudHNcbiAgICovXG4gIHByaXZhdGUgX2tleWNsb2FrRXZlbnRzJDogU3ViamVjdDxLZXljbG9ha0V2ZW50PiA9IG5ldyBTdWJqZWN0PFxuICAgIEtleWNsb2FrRXZlbnRcbiAgPigpO1xuXG4gIC8qKlxuICAgKiBCaW5kcyB0aGUga2V5Y2xvYWstanMgZXZlbnRzIHRvIHRoZSBrZXljbG9ha0V2ZW50cyBTdWJqZWN0XG4gICAqIHdoaWNoIGlzIGEgZ29vZCB3YXkgdG8gbW9uaXRvciBmb3IgY2hhbmdlcywgaWYgbmVlZGVkLlxuICAgKlxuICAgKiBUaGUga2V5Y2xvYWtFdmVudHMgcmV0dXJucyB0aGUga2V5Y2xvYWstanMgZXZlbnQgdHlwZSBhbmQgYW55XG4gICAqIGFyZ3VtZW50IGlmIHRoZSBzb3VyY2UgZnVuY3Rpb24gcHJvdmlkZXMgYW55LlxuICAgKi9cbiAgcHJpdmF0ZSBiaW5kc0tleWNsb2FrRXZlbnRzKCk6IHZvaWQge1xuICAgIHRoaXMuX2luc3RhbmNlLm9uQXV0aEVycm9yID0gKGVycm9yRGF0YSkgPT4ge1xuICAgICAgdGhpcy5fa2V5Y2xvYWtFdmVudHMkLm5leHQoe1xuICAgICAgICBhcmdzOiBlcnJvckRhdGEsXG4gICAgICAgIHR5cGU6IEtleWNsb2FrRXZlbnRUeXBlLk9uQXV0aEVycm9yLFxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHRoaXMuX2luc3RhbmNlLm9uQXV0aExvZ291dCA9ICgpID0+IHtcbiAgICAgIHRoaXMuX2tleWNsb2FrRXZlbnRzJC5uZXh0KHsgdHlwZTogS2V5Y2xvYWtFdmVudFR5cGUuT25BdXRoTG9nb3V0IH0pO1xuICAgIH07XG5cbiAgICB0aGlzLl9pbnN0YW5jZS5vbkF1dGhSZWZyZXNoU3VjY2VzcyA9ICgpID0+IHtcbiAgICAgIHRoaXMuX2tleWNsb2FrRXZlbnRzJC5uZXh0KHtcbiAgICAgICAgdHlwZTogS2V5Y2xvYWtFdmVudFR5cGUuT25BdXRoUmVmcmVzaFN1Y2Nlc3MsXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgdGhpcy5faW5zdGFuY2Uub25BdXRoUmVmcmVzaEVycm9yID0gKCkgPT4ge1xuICAgICAgdGhpcy5fa2V5Y2xvYWtFdmVudHMkLm5leHQoe1xuICAgICAgICB0eXBlOiBLZXljbG9ha0V2ZW50VHlwZS5PbkF1dGhSZWZyZXNoRXJyb3IsXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgdGhpcy5faW5zdGFuY2Uub25BdXRoU3VjY2VzcyA9ICgpID0+IHtcbiAgICAgIHRoaXMuX2tleWNsb2FrRXZlbnRzJC5uZXh0KHsgdHlwZTogS2V5Y2xvYWtFdmVudFR5cGUuT25BdXRoU3VjY2VzcyB9KTtcbiAgICB9O1xuXG4gICAgdGhpcy5faW5zdGFuY2Uub25Ub2tlbkV4cGlyZWQgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9rZXljbG9ha0V2ZW50cyQubmV4dCh7XG4gICAgICAgIHR5cGU6IEtleWNsb2FrRXZlbnRUeXBlLk9uVG9rZW5FeHBpcmVkLFxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHRoaXMuX2luc3RhbmNlLm9uUmVhZHkgPSAoYXV0aGVudGljYXRlZCkgPT4ge1xuICAgICAgdGhpcy5fa2V5Y2xvYWtFdmVudHMkLm5leHQoe1xuICAgICAgICBhcmdzOiBhdXRoZW50aWNhdGVkLFxuICAgICAgICB0eXBlOiBLZXljbG9ha0V2ZW50VHlwZS5PblJlYWR5LFxuICAgICAgfSk7XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyBhbGwgYmVhcmVyRXhjbHVkZWRVcmwgY29udGVudCBpbiBhIHVuaWZvcm0gdHlwZTogRXhjbHVkZWRVcmwsXG4gICAqIHNvIGl0IGJlY29tZXMgZWFzaWVyIHRvIGhhbmRsZS5cbiAgICpcbiAgICogQHBhcmFtIGJlYXJlckV4Y2x1ZGVkVXJscyBhcnJheSBvZiBzdHJpbmdzIG9yIEV4Y2x1ZGVkVXJsIHRoYXQgaW5jbHVkZXNcbiAgICogdGhlIHVybCBhbmQgSHR0cE1ldGhvZC5cbiAgICovXG4gIHByaXZhdGUgbG9hZEV4Y2x1ZGVkVXJscyhcbiAgICBiZWFyZXJFeGNsdWRlZFVybHM6IChzdHJpbmcgfCBFeGNsdWRlZFVybClbXVxuICApOiBFeGNsdWRlZFVybFJlZ2V4W10ge1xuICAgIGNvbnN0IGV4Y2x1ZGVkVXJsczogRXhjbHVkZWRVcmxSZWdleFtdID0gW107XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGJlYXJlckV4Y2x1ZGVkVXJscykge1xuICAgICAgbGV0IGV4Y2x1ZGVkVXJsOiBFeGNsdWRlZFVybFJlZ2V4O1xuICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJykge1xuICAgICAgICBleGNsdWRlZFVybCA9IHsgdXJsUGF0dGVybjogbmV3IFJlZ0V4cChpdGVtLCAnaScpLCBodHRwTWV0aG9kczogW10gfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV4Y2x1ZGVkVXJsID0ge1xuICAgICAgICAgIHVybFBhdHRlcm46IG5ldyBSZWdFeHAoaXRlbS51cmwsICdpJyksXG4gICAgICAgICAgaHR0cE1ldGhvZHM6IGl0ZW0uaHR0cE1ldGhvZHMsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBleGNsdWRlZFVybHMucHVzaChleGNsdWRlZFVybCk7XG4gICAgfVxuICAgIHJldHVybiBleGNsdWRlZFVybHM7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyB0aGUgY2xhc3MgdmFsdWVzIGluaXRpYWxpemF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgKi9cbiAgcHJpdmF0ZSBpbml0U2VydmljZVZhbHVlcyh7XG4gICAgZW5hYmxlQmVhcmVySW50ZXJjZXB0b3IgPSB0cnVlLFxuICAgIGxvYWRVc2VyUHJvZmlsZUF0U3RhcnRVcCA9IGZhbHNlLFxuICAgIGJlYXJlckV4Y2x1ZGVkVXJscyA9IFtdLFxuICAgIGF1dGhvcml6YXRpb25IZWFkZXJOYW1lID0gJ0F1dGhvcml6YXRpb24nLFxuICAgIGJlYXJlclByZWZpeCA9ICdCZWFyZXInLFxuICAgIGluaXRPcHRpb25zLFxuICB9OiBLZXljbG9ha09wdGlvbnMpOiB2b2lkIHtcbiAgICB0aGlzLl9lbmFibGVCZWFyZXJJbnRlcmNlcHRvciA9IGVuYWJsZUJlYXJlckludGVyY2VwdG9yO1xuICAgIHRoaXMuX2xvYWRVc2VyUHJvZmlsZUF0U3RhcnRVcCA9IGxvYWRVc2VyUHJvZmlsZUF0U3RhcnRVcDtcbiAgICB0aGlzLl9hdXRob3JpemF0aW9uSGVhZGVyTmFtZSA9IGF1dGhvcml6YXRpb25IZWFkZXJOYW1lO1xuICAgIHRoaXMuX2JlYXJlclByZWZpeCA9IGJlYXJlclByZWZpeC50cmltKCkuY29uY2F0KCcgJyk7XG4gICAgdGhpcy5fZXhjbHVkZWRVcmxzID0gdGhpcy5sb2FkRXhjbHVkZWRVcmxzKGJlYXJlckV4Y2x1ZGVkVXJscyk7XG4gICAgdGhpcy5fc2lsZW50UmVmcmVzaCA9IGluaXRPcHRpb25zID8gaW5pdE9wdGlvbnMuZmxvdyA9PT0gJ2ltcGxpY2l0JyA6IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEtleWNsb2FrIGluaXRpYWxpemF0aW9uLiBJdCBzaG91bGQgYmUgY2FsbGVkIHRvIGluaXRpYWxpemUgdGhlIGFkYXB0ZXIuXG4gICAqIE9wdGlvbnMgaXMgYSBvYmplY3Qgd2l0aCAyIG1haW4gcGFyYW1ldGVyczogY29uZmlnIGFuZCBpbml0T3B0aW9ucy4gVGhlIGZpcnN0IG9uZVxuICAgKiB3aWxsIGJlIHVzZWQgdG8gY3JlYXRlIHRoZSBLZXljbG9hayBpbnN0YW5jZS4gVGhlIHNlY29uZCBvbmUgYXJlIG9wdGlvbnMgdG8gaW5pdGlhbGl6ZSB0aGVcbiAgICoga2V5Y2xvYWsgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zXG4gICAqIENvbmZpZzogbWF5IGJlIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUga2V5Y2xvYWsgVVJJIG9yIGFuIG9iamVjdCB3aXRoIHRoZVxuICAgKiBmb2xsb3dpbmcgY29udGVudDpcbiAgICogLSB1cmw6IEtleWNsb2FrIGpzb24gVVJMXG4gICAqIC0gcmVhbG06IHJlYWxtIG5hbWVcbiAgICogLSBjbGllbnRJZDogY2xpZW50IGlkXG4gICAqXG4gICAqIGluaXRPcHRpb25zOlxuICAgKiBPcHRpb25zIHRvIGluaXRpYWxpemUgdGhlIEtleWNsb2FrIGFkYXB0ZXIsIG1hdGNoZXMgdGhlIG9wdGlvbnMgYXMgcHJvdmlkZWQgYnkgS2V5Y2xvYWsgaXRzZWxmLlxuICAgKlxuICAgKiBlbmFibGVCZWFyZXJJbnRlcmNlcHRvcjpcbiAgICogRmxhZyB0byBpbmRpY2F0ZSBpZiB0aGUgYmVhcmVyIHdpbGwgYWRkZWQgdG8gdGhlIGF1dGhvcml6YXRpb24gaGVhZGVyLlxuICAgKlxuICAgKiBsb2FkVXNlclByb2ZpbGVJblN0YXJ0VXA6XG4gICAqIEluZGljYXRlcyB0aGF0IHRoZSB1c2VyIHByb2ZpbGUgc2hvdWxkIGJlIGxvYWRlZCBhdCB0aGUga2V5Y2xvYWsgaW5pdGlhbGl6YXRpb24sXG4gICAqIGp1c3QgYWZ0ZXIgdGhlIGxvZ2luLlxuICAgKlxuICAgKiBiZWFyZXJFeGNsdWRlZFVybHM6XG4gICAqIFN0cmluZyBBcnJheSB0byBleGNsdWRlIHRoZSB1cmxzIHRoYXQgc2hvdWxkIG5vdCBoYXZlIHRoZSBBdXRob3JpemF0aW9uIEhlYWRlciBhdXRvbWF0aWNhbGx5XG4gICAqIGFkZGVkLlxuICAgKlxuICAgKiBhdXRob3JpemF0aW9uSGVhZGVyTmFtZTpcbiAgICogVGhpcyB2YWx1ZSB3aWxsIGJlIHVzZWQgYXMgdGhlIEF1dGhvcml6YXRpb24gSHR0cCBIZWFkZXIgbmFtZS5cbiAgICpcbiAgICogYmVhcmVyUHJlZml4OlxuICAgKiBUaGlzIHZhbHVlIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIEF1dGhvcml6YXRpb24gSHR0cCBIZWFkZXIgcGFyYW0uXG4gICAqXG4gICAqIEByZXR1cm5zXG4gICAqIEEgUHJvbWlzZSB3aXRoIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSBpbml0aWFsaXphdGlvbiB3YXMgc3VjY2Vzc2Z1bC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBpbml0KG9wdGlvbnM6IEtleWNsb2FrT3B0aW9ucyA9IHt9KSB7XG4gICAgdGhpcy5pbml0U2VydmljZVZhbHVlcyhvcHRpb25zKTtcbiAgICBjb25zdCB7IGNvbmZpZywgaW5pdE9wdGlvbnMgfSA9IG9wdGlvbnM7XG5cbiAgICB0aGlzLl9pbnN0YW5jZSA9IEtleWNsb2FrKGNvbmZpZyk7XG4gICAgdGhpcy5iaW5kc0tleWNsb2FrRXZlbnRzKCk7XG5cbiAgICBjb25zdCBhdXRoZW50aWNhdGVkID0gYXdhaXQgdGhpcy5faW5zdGFuY2UuaW5pdChpbml0T3B0aW9ucyk7XG5cbiAgICBpZiAoYXV0aGVudGljYXRlZCAmJiB0aGlzLl9sb2FkVXNlclByb2ZpbGVBdFN0YXJ0VXApIHtcbiAgICAgIGF3YWl0IHRoaXMubG9hZFVzZXJQcm9maWxlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF1dGhlbnRpY2F0ZWQ7XG4gIH1cblxuICAvKipcbiAgICogUmVkaXJlY3RzIHRvIGxvZ2luIGZvcm0gb24gKG9wdGlvbnMgaXMgYW4gb3B0aW9uYWwgb2JqZWN0IHdpdGggcmVkaXJlY3RVcmkgYW5kL29yXG4gICAqIHByb21wdCBmaWVsZHMpLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgKiBPYmplY3QsIHdoZXJlOlxuICAgKiAgLSByZWRpcmVjdFVyaTogU3BlY2lmaWVzIHRoZSB1cmkgdG8gcmVkaXJlY3QgdG8gYWZ0ZXIgbG9naW4uXG4gICAqICAtIHByb21wdDpCeSBkZWZhdWx0IHRoZSBsb2dpbiBzY3JlZW4gaXMgZGlzcGxheWVkIGlmIHRoZSB1c2VyIGlzIG5vdCBsb2dnZWQtaW4gdG8gS2V5Y2xvYWsuXG4gICAqIFRvIG9ubHkgYXV0aGVudGljYXRlIHRvIHRoZSBhcHBsaWNhdGlvbiBpZiB0aGUgdXNlciBpcyBhbHJlYWR5IGxvZ2dlZC1pbiBhbmQgbm90IGRpc3BsYXkgdGhlXG4gICAqIGxvZ2luIHBhZ2UgaWYgdGhlIHVzZXIgaXMgbm90IGxvZ2dlZC1pbiwgc2V0IHRoaXMgb3B0aW9uIHRvIG5vbmUuIFRvIGFsd2F5cyByZXF1aXJlXG4gICAqIHJlLWF1dGhlbnRpY2F0aW9uIGFuZCBpZ25vcmUgU1NPLCBzZXQgdGhpcyBvcHRpb24gdG8gbG9naW4gLlxuICAgKiAgLSBtYXhBZ2U6IFVzZWQganVzdCBpZiB1c2VyIGlzIGFscmVhZHkgYXV0aGVudGljYXRlZC4gU3BlY2lmaWVzIG1heGltdW0gdGltZSBzaW5jZSB0aGVcbiAgICogYXV0aGVudGljYXRpb24gb2YgdXNlciBoYXBwZW5lZC4gSWYgdXNlciBpcyBhbHJlYWR5IGF1dGhlbnRpY2F0ZWQgZm9yIGxvbmdlciB0aW1lIHRoYW5cbiAgICogbWF4QWdlLCB0aGUgU1NPIGlzIGlnbm9yZWQgYW5kIGhlIHdpbGwgbmVlZCB0byByZS1hdXRoZW50aWNhdGUgYWdhaW4uXG4gICAqICAtIGxvZ2luSGludDogVXNlZCB0byBwcmUtZmlsbCB0aGUgdXNlcm5hbWUvZW1haWwgZmllbGQgb24gdGhlIGxvZ2luIGZvcm0uXG4gICAqICAtIGFjdGlvbjogSWYgdmFsdWUgaXMgJ3JlZ2lzdGVyJyB0aGVuIHVzZXIgaXMgcmVkaXJlY3RlZCB0byByZWdpc3RyYXRpb24gcGFnZSwgb3RoZXJ3aXNlIHRvXG4gICAqIGxvZ2luIHBhZ2UuXG4gICAqICAtIGxvY2FsZTogU3BlY2lmaWVzIHRoZSBkZXNpcmVkIGxvY2FsZSBmb3IgdGhlIFVJLlxuICAgKiBAcmV0dXJuc1xuICAgKiBBIHZvaWQgUHJvbWlzZSBpZiB0aGUgbG9naW4gaXMgc3VjY2Vzc2Z1bCBhbmQgYWZ0ZXIgdGhlIHVzZXIgcHJvZmlsZSBsb2FkaW5nLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGxvZ2luKG9wdGlvbnM6IEtleWNsb2FrLktleWNsb2FrTG9naW5PcHRpb25zID0ge30pIHtcbiAgICBhd2FpdCB0aGlzLl9pbnN0YW5jZS5sb2dpbihvcHRpb25zKTtcblxuICAgIGlmICh0aGlzLl9sb2FkVXNlclByb2ZpbGVBdFN0YXJ0VXApIHtcbiAgICAgIGF3YWl0IHRoaXMubG9hZFVzZXJQcm9maWxlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZGlyZWN0cyB0byBsb2dvdXQuXG4gICAqXG4gICAqIEBwYXJhbSByZWRpcmVjdFVyaVxuICAgKiBTcGVjaWZpZXMgdGhlIHVyaSB0byByZWRpcmVjdCB0byBhZnRlciBsb2dvdXQuXG4gICAqIEByZXR1cm5zXG4gICAqIEEgdm9pZCBQcm9taXNlIGlmIHRoZSBsb2dvdXQgd2FzIHN1Y2Nlc3NmdWwsIGNsZWFuaW5nIGFsc28gdGhlIHVzZXJQcm9maWxlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGxvZ291dChyZWRpcmVjdFVyaT86IHN0cmluZykge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICByZWRpcmVjdFVyaSxcbiAgICB9O1xuXG4gICAgYXdhaXQgdGhpcy5faW5zdGFuY2UubG9nb3V0KG9wdGlvbnMpO1xuICAgIHRoaXMuX3VzZXJQcm9maWxlID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZGlyZWN0cyB0byByZWdpc3RyYXRpb24gZm9ybS4gU2hvcnRjdXQgZm9yIGxvZ2luIHdpdGggb3B0aW9uXG4gICAqIGFjdGlvbiA9ICdyZWdpc3RlcicuIE9wdGlvbnMgYXJlIHNhbWUgYXMgZm9yIHRoZSBsb2dpbiBtZXRob2QgYnV0ICdhY3Rpb24nIGlzIHNldCB0b1xuICAgKiAncmVnaXN0ZXInLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgKiBsb2dpbiBvcHRpb25zXG4gICAqIEByZXR1cm5zXG4gICAqIEEgdm9pZCBQcm9taXNlIGlmIHRoZSByZWdpc3RlciBmbG93IHdhcyBzdWNjZXNzZnVsLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlZ2lzdGVyKFxuICAgIG9wdGlvbnM6IEtleWNsb2FrLktleWNsb2FrTG9naW5PcHRpb25zID0geyBhY3Rpb246ICdyZWdpc3RlcicgfVxuICApIHtcbiAgICBhd2FpdCB0aGlzLl9pbnN0YW5jZS5yZWdpc3RlcihvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGUgdXNlciBoYXMgYWNjZXNzIHRvIHRoZSBzcGVjaWZpZWQgcm9sZS4gSXQgd2lsbCBsb29rIGZvciByb2xlcyBpblxuICAgKiByZWFsbSBhbmQgY2xpZW50SWQsIGJ1dCB3aWxsIG5vdCBjaGVjayBpZiB0aGUgdXNlciBpcyBsb2dnZWQgaW4gZm9yIGJldHRlciBwZXJmb3JtYW5jZS5cbiAgICpcbiAgICogQHBhcmFtIHJvbGVcbiAgICogcm9sZSBuYW1lXG4gICAqIEBwYXJhbSByZXNvdXJjZVxuICAgKiByZXNvdXJjZSBuYW1lIElmIG5vdCBzcGVjaWZpZWQsIGBjbGllbnRJZGAgaXMgdXNlZFxuICAgKiBAcmV0dXJuc1xuICAgKiBBIGJvb2xlYW4gbWVhbmluZyBpZiB0aGUgdXNlciBoYXMgdGhlIHNwZWNpZmllZCBSb2xlLlxuICAgKi9cbiAgaXNVc2VySW5Sb2xlKHJvbGU6IHN0cmluZywgcmVzb3VyY2U/OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBsZXQgaGFzUm9sZTogYm9vbGVhbjtcbiAgICBoYXNSb2xlID0gdGhpcy5faW5zdGFuY2UuaGFzUmVzb3VyY2VSb2xlKHJvbGUsIHJlc291cmNlKTtcbiAgICBpZiAoIWhhc1JvbGUpIHtcbiAgICAgIGhhc1JvbGUgPSB0aGlzLl9pbnN0YW5jZS5oYXNSZWFsbVJvbGUocm9sZSk7XG4gICAgfVxuICAgIHJldHVybiBoYXNSb2xlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgcm9sZXMgb2YgdGhlIGxvZ2dlZCB1c2VyLiBUaGUgYWxsUm9sZXMgcGFyYW1ldGVyLCB3aXRoIGRlZmF1bHQgdmFsdWVcbiAgICogdHJ1ZSwgd2lsbCByZXR1cm4gdGhlIGNsaWVudElkIGFuZCByZWFsbSByb2xlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGxvZ2dlZCB1c2VyLiBJZiBzZXQgdG8gZmFsc2VcbiAgICogaXQgd2lsbCBvbmx5IHJldHVybiB0aGUgdXNlciByb2xlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGNsaWVudElkLlxuICAgKlxuICAgKiBAcGFyYW0gYWxsUm9sZXNcbiAgICogRmxhZyB0byBzZXQgaWYgYWxsIHJvbGVzIHNob3VsZCBiZSByZXR1cm5lZC4oT3B0aW9uYWw6IGRlZmF1bHQgdmFsdWUgaXMgdHJ1ZSlcbiAgICogQHJldHVybnNcbiAgICogQXJyYXkgb2YgUm9sZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBsb2dnZWQgdXNlci5cbiAgICovXG4gIGdldFVzZXJSb2xlcyhhbGxSb2xlczogYm9vbGVhbiA9IHRydWUpOiBzdHJpbmdbXSB7XG4gICAgbGV0IHJvbGVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGlmICh0aGlzLl9pbnN0YW5jZS5yZXNvdXJjZUFjY2Vzcykge1xuICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5faW5zdGFuY2UucmVzb3VyY2VBY2Nlc3MpIHtcbiAgICAgICAgaWYgKHRoaXMuX2luc3RhbmNlLnJlc291cmNlQWNjZXNzLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICBjb25zdCByZXNvdXJjZUFjY2VzczogYW55ID0gdGhpcy5faW5zdGFuY2UucmVzb3VyY2VBY2Nlc3Nba2V5XTtcbiAgICAgICAgICBjb25zdCBjbGllbnRSb2xlcyA9IHJlc291cmNlQWNjZXNzWydyb2xlcyddIHx8IFtdO1xuICAgICAgICAgIHJvbGVzID0gcm9sZXMuY29uY2F0KGNsaWVudFJvbGVzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoYWxsUm9sZXMgJiYgdGhpcy5faW5zdGFuY2UucmVhbG1BY2Nlc3MpIHtcbiAgICAgIGNvbnN0IHJlYWxtUm9sZXMgPSB0aGlzLl9pbnN0YW5jZS5yZWFsbUFjY2Vzc1sncm9sZXMnXSB8fCBbXTtcbiAgICAgIHJvbGVzLnB1c2goLi4ucmVhbG1Sb2xlcyk7XG4gICAgfVxuICAgIHJldHVybiByb2xlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB1c2VyIGlzIGxvZ2dlZCBpbi5cbiAgICpcbiAgICogQHJldHVybnNcbiAgICogQSBib29sZWFuIHRoYXQgaW5kaWNhdGVzIGlmIHRoZSB1c2VyIGlzIGxvZ2dlZCBpbi5cbiAgICovXG4gIGFzeW5jIGlzTG9nZ2VkSW4oKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghdGhpcy5faW5zdGFuY2UuYXV0aGVudGljYXRlZCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZVRva2VuKDIwKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdG9rZW4gaGFzIGxlc3MgdGhhbiBtaW5WYWxpZGl0eSBzZWNvbmRzIGxlZnQgYmVmb3JlXG4gICAqIGl0IGV4cGlyZXMuXG4gICAqXG4gICAqIEBwYXJhbSBtaW5WYWxpZGl0eVxuICAgKiBTZWNvbmRzIGxlZnQuIChtaW5WYWxpZGl0eSkgaXMgb3B0aW9uYWwuIERlZmF1bHQgdmFsdWUgaXMgMC5cbiAgICogQHJldHVybnNcbiAgICogQm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSB0b2tlbiBpcyBleHBpcmVkLlxuICAgKi9cbiAgaXNUb2tlbkV4cGlyZWQobWluVmFsaWRpdHk6IG51bWJlciA9IDApOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faW5zdGFuY2UuaXNUb2tlbkV4cGlyZWQobWluVmFsaWRpdHkpO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIHRoZSB0b2tlbiBleHBpcmVzIHdpdGhpbiBtaW5WYWxpZGl0eSBzZWNvbmRzIHRoZSB0b2tlbiBpcyByZWZyZXNoZWQuIElmIHRoZVxuICAgKiBzZXNzaW9uIHN0YXR1cyBpZnJhbWUgaXMgZW5hYmxlZCwgdGhlIHNlc3Npb24gc3RhdHVzIGlzIGFsc28gY2hlY2tlZC5cbiAgICogUmV0dXJucyBhIHByb21pc2UgdGVsbGluZyBpZiB0aGUgdG9rZW4gd2FzIHJlZnJlc2hlZCBvciBub3QuIElmIHRoZSBzZXNzaW9uIGlzIG5vdCBhY3RpdmVcbiAgICogYW55bW9yZSwgdGhlIHByb21pc2UgaXMgcmVqZWN0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSBtaW5WYWxpZGl0eVxuICAgKiBTZWNvbmRzIGxlZnQuIChtaW5WYWxpZGl0eSBpcyBvcHRpb25hbCwgaWYgbm90IHNwZWNpZmllZCA1IGlzIHVzZWQpXG4gICAqIEByZXR1cm5zXG4gICAqIFByb21pc2Ugd2l0aCBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgdG9rZW4gd2FzIHN1Y2Nlc2Z1bGx5IHVwZGF0ZWQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgdXBkYXRlVG9rZW4obWluVmFsaWRpdHkgPSA1KSB7XG4gICAgLy8gVE9ETzogdGhpcyBpcyBhIHdvcmthcm91bmQgdW50aWwgdGhlIHNpbGVudCByZWZyZXNoIChpc3N1ZSAjNDMpXG4gICAgLy8gaXMgbm90IGltcGxlbWVudGVkLCBhdm9pZGluZyB0aGUgcmVkaXJlY3QgbG9vcC5cbiAgICBpZiAodGhpcy5fc2lsZW50UmVmcmVzaCkge1xuICAgICAgaWYgKHRoaXMuaXNUb2tlbkV4cGlyZWQoKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ0ZhaWxlZCB0byByZWZyZXNoIHRoZSB0b2tlbiwgb3IgdGhlIHNlc3Npb24gaXMgZXhwaXJlZCdcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9pbnN0YW5jZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdLZXljbG9hayBBbmd1bGFyIGxpYnJhcnkgaXMgbm90IGluaXRpYWxpemVkLicpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZS51cGRhdGVUb2tlbihtaW5WYWxpZGl0eSk7XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgdGhlIHVzZXIgcHJvZmlsZS5cbiAgICogUmV0dXJucyBwcm9taXNlIHRvIHNldCBmdW5jdGlvbnMgdG8gYmUgaW52b2tlZCBpZiB0aGUgcHJvZmlsZSB3YXMgbG9hZGVkXG4gICAqIHN1Y2Nlc3NmdWxseSwgb3IgaWYgdGhlIHByb2ZpbGUgY291bGQgbm90IGJlIGxvYWRlZC5cbiAgICpcbiAgICogQHBhcmFtIGZvcmNlUmVsb2FkXG4gICAqIElmIHRydWUgd2lsbCBmb3JjZSB0aGUgbG9hZFVzZXJQcm9maWxlIGV2ZW4gaWYgaXRzIGFscmVhZHkgbG9hZGVkLlxuICAgKiBAcmV0dXJuc1xuICAgKiBBIHByb21pc2Ugd2l0aCB0aGUgS2V5Y2xvYWtQcm9maWxlIGRhdGEgbG9hZGVkLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGxvYWRVc2VyUHJvZmlsZShmb3JjZVJlbG9hZCA9IGZhbHNlKSB7XG4gICAgaWYgKHRoaXMuX3VzZXJQcm9maWxlICYmICFmb3JjZVJlbG9hZCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3VzZXJQcm9maWxlO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5faW5zdGFuY2UuYXV0aGVudGljYXRlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnVGhlIHVzZXIgcHJvZmlsZSB3YXMgbm90IGxvYWRlZCBhcyB0aGUgdXNlciBpcyBub3QgbG9nZ2VkIGluLidcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3VzZXJQcm9maWxlID0gYXdhaXQgdGhpcy5faW5zdGFuY2UubG9hZFVzZXJQcm9maWxlKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXV0aGVudGljYXRlZCB0b2tlbiwgY2FsbGluZyB1cGRhdGVUb2tlbiB0byBnZXQgYSByZWZyZXNoZWQgb25lIGlmIG5lY2Vzc2FyeS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRUb2tlbigpIHtcbiAgICBhd2FpdCB0aGlzLnVwZGF0ZVRva2VuKDEwKTtcbiAgICByZXR1cm4gdGhpcy5faW5zdGFuY2UudG9rZW47XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbG9nZ2VkIHVzZXJuYW1lLlxuICAgKlxuICAgKiBAcmV0dXJuc1xuICAgKiBUaGUgbG9nZ2VkIHVzZXJuYW1lLlxuICAgKi9cbiAgcHVibGljIGdldFVzZXJuYW1lKCkge1xuICAgIGlmICghdGhpcy5fdXNlclByb2ZpbGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgbG9nZ2VkIGluIG9yIHVzZXIgcHJvZmlsZSB3YXMgbm90IGxvYWRlZC4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fdXNlclByb2ZpbGUudXNlcm5hbWU7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgYXV0aGVudGljYXRpb24gc3RhdGUsIGluY2x1ZGluZyB0b2tlbnMuIFRoaXMgY2FuIGJlIHVzZWZ1bCBpZiBhcHBsaWNhdGlvblxuICAgKiBoYXMgZGV0ZWN0ZWQgdGhlIHNlc3Npb24gd2FzIGV4cGlyZWQsIGZvciBleGFtcGxlIGlmIHVwZGF0aW5nIHRva2VuIGZhaWxzLlxuICAgKiBJbnZva2luZyB0aGlzIHJlc3VsdHMgaW4gb25BdXRoTG9nb3V0IGNhbGxiYWNrIGxpc3RlbmVyIGJlaW5nIGludm9rZWQuXG4gICAqL1xuICBjbGVhclRva2VuKCk6IHZvaWQge1xuICAgIHRoaXMuX2luc3RhbmNlLmNsZWFyVG9rZW4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgdmFsaWQgdG9rZW4gaW4gaGVhZGVyLiBUaGUga2V5ICYgdmFsdWUgZm9ybWF0IGlzOlxuICAgKiBBdXRob3JpemF0aW9uIEJlYXJlciA8dG9rZW4+LlxuICAgKiBJZiB0aGUgaGVhZGVycyBwYXJhbSBpcyB1bmRlZmluZWQgaXQgd2lsbCBjcmVhdGUgdGhlIEFuZ3VsYXIgaGVhZGVycyBvYmplY3QuXG4gICAqXG4gICAqIEBwYXJhbSBoZWFkZXJzXG4gICAqIFVwZGF0ZWQgaGVhZGVyIHdpdGggQXV0aG9yaXphdGlvbiBhbmQgS2V5Y2xvYWsgdG9rZW4uXG4gICAqIEByZXR1cm5zXG4gICAqIEFuIG9ic2VydmFibGUgd2l0aCB3aXRoIHRoZSBIVFRQIEF1dGhvcml6YXRpb24gaGVhZGVyIGFuZCB0aGUgY3VycmVudCB0b2tlbi5cbiAgICovXG4gIHB1YmxpYyBhZGRUb2tlblRvSGVhZGVyKGhlYWRlcnM6IEh0dHBIZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkpIHtcbiAgICByZXR1cm4gZnJvbSh0aGlzLmdldFRva2VuKCkpLnBpcGUoXG4gICAgICBtYXAoKHRva2VuKSA9PlxuICAgICAgICB0b2tlbiA/IGhlYWRlcnMuc2V0KHRoaXMuX2F1dGhvcml6YXRpb25IZWFkZXJOYW1lLCB0aGlzLl9iZWFyZXJQcmVmaXggKyB0b2tlbikgOiBoZWFkZXJzXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBLZXljbG9hayBpbnN0YW5jZSwgaWYgeW91IG5lZWQgYW55IGN1c3RvbWl6YXRpb24gdGhhdFxuICAgKiB0aGlzIEFuZ3VsYXIgc2VydmljZSBkb2VzIG5vdCBzdXBwb3J0IHlldC4gVXNlIHdpdGggY2F1dGlvbi5cbiAgICpcbiAgICogQHJldHVybnNcbiAgICogVGhlIEtleWNsb2FrSW5zdGFuY2UgZnJvbSBrZXljbG9hay1qcy5cbiAgICovXG4gIGdldEtleWNsb2FrSW5zdGFuY2UoKTogS2V5Y2xvYWsuS2V5Y2xvYWtJbnN0YW5jZSB7XG4gICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGV4Y2x1ZGVkIFVSTHMgdGhhdCBzaG91bGQgbm90IGJlIGNvbnNpZGVyZWQgYnlcbiAgICogdGhlIGh0dHAgaW50ZXJjZXB0b3Igd2hpY2ggYXV0b21hdGljYWxseSBhZGRzIHRoZSBhdXRob3JpemF0aW9uIGhlYWRlciBpbiB0aGUgSHR0cCBSZXF1ZXN0LlxuICAgKlxuICAgKiBAcmV0dXJuc1xuICAgKiBUaGUgZXhjbHVkZWQgdXJscyB0aGF0IG11c3Qgbm90IGJlIGludGVyY2VwdGVkIGJ5IHRoZSBLZXljbG9ha0JlYXJlckludGVyY2VwdG9yLlxuICAgKi9cbiAgZ2V0IGV4Y2x1ZGVkVXJscygpOiBFeGNsdWRlZFVybFJlZ2V4W10ge1xuICAgIHJldHVybiB0aGlzLl9leGNsdWRlZFVybHM7XG4gIH1cblxuICAvKipcbiAgICogRmxhZyB0byBpbmRpY2F0ZSBpZiB0aGUgYmVhcmVyIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGF1dGhvcml6YXRpb24gaGVhZGVyLlxuICAgKlxuICAgKiBAcmV0dXJuc1xuICAgKiBSZXR1cm5zIGlmIHRoZSBiZWFyZXIgaW50ZXJjZXB0b3Igd2FzIHNldCB0byBiZSBkaXNhYmxlZC5cbiAgICovXG4gIGdldCBlbmFibGVCZWFyZXJJbnRlcmNlcHRvcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZW5hYmxlQmVhcmVySW50ZXJjZXB0b3I7XG4gIH1cblxuICAvKipcbiAgICogS2V5Y2xvYWsgc3ViamVjdCB0byBtb25pdG9yIHRoZSBldmVudHMgdHJpZ2dlcmVkIGJ5IGtleWNsb2FrLWpzLlxuICAgKiBUaGUgZm9sbG93aW5nIGV2ZW50cyBhcyBhdmFpbGFibGUgKGFzIGRlc2NyaWJlZCBhdCBrZXljbG9hayBkb2NzIC1cbiAgICogaHR0cHM6Ly93d3cua2V5Y2xvYWsub3JnL2RvY3MvbGF0ZXN0L3NlY3VyaW5nX2FwcHMvaW5kZXguaHRtbCNjYWxsYmFjay1ldmVudHMpOlxuICAgKiAtIE9uQXV0aEVycm9yXG4gICAqIC0gT25BdXRoTG9nb3V0XG4gICAqIC0gT25BdXRoUmVmcmVzaEVycm9yXG4gICAqIC0gT25BdXRoUmVmcmVzaFN1Y2Nlc3NcbiAgICogLSBPbkF1dGhTdWNjZXNzXG4gICAqIC0gT25SZWFkeVxuICAgKiAtIE9uVG9rZW5FeHBpcmVcbiAgICogSW4gZWFjaCBvY2N1cnJlbmNlIG9mIGFueSBvZiB0aGVzZSwgdGhpcyBzdWJqZWN0IHdpbGwgcmV0dXJuIHRoZSBldmVudCB0eXBlLFxuICAgKiBkZXNjcmliZWQgYXQge0BsaW5rIEtleWNsb2FrRXZlbnRUeXBlfSBlbnVtIGFuZCB0aGUgZnVuY3Rpb24gYXJncyBmcm9tIHRoZSBrZXljbG9hay1qc1xuICAgKiBpZiBwcm92aWRlZCBhbnkuXG4gICAqXG4gICAqIEByZXR1cm5zXG4gICAqIEEgc3ViamVjdCB3aXRoIHRoZSB7QGxpbmsgS2V5Y2xvYWtFdmVudH0gd2hpY2ggZGVzY3JpYmVzIHRoZSBldmVudCB0eXBlIGFuZCBhdHRhY2hlcyB0aGVcbiAgICogZnVuY3Rpb24gYXJncy5cbiAgICovXG4gIGdldCBrZXljbG9ha0V2ZW50cyQoKTogU3ViamVjdDxLZXljbG9ha0V2ZW50PiB7XG4gICAgcmV0dXJuIHRoaXMuX2tleWNsb2FrRXZlbnRzJDtcbiAgfVxufVxuIl19
@@ -1,12 +1,10 @@
1
- import { __decorate } from "tslib";
2
1
  import { NgModule } from '@angular/core';
3
2
  import { CoreModule } from './core/core.module';
4
- let KeycloakAngularModule = class KeycloakAngularModule {
5
- };
6
- KeycloakAngularModule = __decorate([
7
- NgModule({
8
- imports: [CoreModule]
9
- })
10
- ], KeycloakAngularModule);
11
- export { KeycloakAngularModule };
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Y2xvYWstYW5ndWxhci5tb2R1bGUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9rZXljbG9hay1hbmd1bGFyLyIsInNvdXJjZXMiOlsibGliL2tleWNsb2FrLWFuZ3VsYXIubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFRQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUtoRCxJQUFhLHFCQUFxQixHQUFsQyxNQUFhLHFCQUFxQjtDQUFHLENBQUE7QUFBeEIscUJBQXFCO0lBSGpDLFFBQVEsQ0FBQztRQUNSLE9BQU8sRUFBRSxDQUFDLFVBQVUsQ0FBQztLQUN0QixDQUFDO0dBQ1cscUJBQXFCLENBQUc7U0FBeEIscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IE1hdXJpY2lvIEdlbWVsbGkgVmlnb2xvIGFuZCBjb250cmlidXRvcnMuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2dpdGh1Yi5jb20vbWF1cmljaW92aWdvbG8va2V5Y2xvYWstYW5ndWxhci9MSUNFTlNFXG4gKi9cblxuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQ29yZU1vZHVsZSB9IGZyb20gJy4vY29yZS9jb3JlLm1vZHVsZSc7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtDb3JlTW9kdWxlXVxufSlcbmV4cG9ydCBjbGFzcyBLZXljbG9ha0FuZ3VsYXJNb2R1bGUge31cbiJdfQ==
3
+ export class KeycloakAngularModule {
4
+ }
5
+ KeycloakAngularModule.decorators = [
6
+ { type: NgModule, args: [{
7
+ imports: [CoreModule]
8
+ },] }
9
+ ];
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Y2xvYWstYW5ndWxhci5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vcHJvamVjdHMva2V5Y2xvYWstYW5ndWxhci9zcmMvIiwic291cmNlcyI6WyJsaWIva2V5Y2xvYWstYW5ndWxhci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBUUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFLaEQsTUFBTSxPQUFPLHFCQUFxQjs7O1lBSGpDLFFBQVEsU0FBQztnQkFDUixPQUFPLEVBQUUsQ0FBQyxVQUFVLENBQUM7YUFDdEIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgTWF1cmljaW8gR2VtZWxsaSBWaWdvbG8gYW5kIGNvbnRyaWJ1dG9ycy5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXVyaWNpb3ZpZ29sby9rZXljbG9hay1hbmd1bGFyL0xJQ0VOU0VcbiAqL1xuXG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBDb3JlTW9kdWxlIH0gZnJvbSAnLi9jb3JlL2NvcmUubW9kdWxlJztcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW0NvcmVNb2R1bGVdXG59KVxuZXhwb3J0IGNsYXNzIEtleWNsb2FrQW5ndWxhck1vZHVsZSB7fVxuIl19
@@ -4,4 +4,4 @@ export { KeycloakService } from './lib/core/services/keycloak.service';
4
4
  export { KeycloakBearerInterceptor } from './lib/core/interceptors/keycloak-bearer.interceptor';
5
5
  export { CoreModule } from './lib/core/core.module';
6
6
  export { KeycloakAngularModule } from './lib/keycloak-angular.module';
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2tleWNsb2FrLWFuZ3VsYXIvIiwic291cmNlcyI6WyJwdWJsaWNfYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVNBLE9BQU8sRUFFTCxpQkFBaUIsRUFDbEIsTUFBTSxzQ0FBc0MsQ0FBQztBQU05QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDdkUsT0FBTyxFQUNMLHlCQUF5QixFQUMxQixNQUFNLHFEQUFxRCxDQUFDO0FBQzdELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBNYXVyaWNpbyBHZW1lbGxpIFZpZ29sbyBhbmQgY29udHJpYnV0b3JzLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9naXRodWIuY29tL21hdXJpY2lvdmlnb2xvL2tleWNsb2FrLWFuZ3VsYXIvTElDRU5TRVxuICovXG5cbmV4cG9ydCB7IEtleWNsb2FrQ29uZmlnIH0gZnJvbSAnLi9saWIvY29yZS9pbnRlcmZhY2VzL2tleWNsb2FrLWNvbmZpZyc7XG5leHBvcnQge1xuICBLZXljbG9ha0V2ZW50LFxuICBLZXljbG9ha0V2ZW50VHlwZVxufSBmcm9tICcuL2xpYi9jb3JlL2ludGVyZmFjZXMva2V5Y2xvYWstZXZlbnQnO1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgS2V5Y2xvYWsncyBpbnRlcm5hbCB0eXBlcyBpbnN0ZWFkLlxuICovXG5leHBvcnQgdHlwZSBLZXljbG9ha0luaXRPcHRpb25zID0gS2V5Y2xvYWsuS2V5Y2xvYWtJbml0T3B0aW9ucztcbmV4cG9ydCB7IEtleWNsb2FrT3B0aW9ucyB9IGZyb20gJy4vbGliL2NvcmUvaW50ZXJmYWNlcy9rZXljbG9hay1vcHRpb25zJztcbmV4cG9ydCB7IEtleWNsb2FrQXV0aEd1YXJkIH0gZnJvbSAnLi9saWIvY29yZS9zZXJ2aWNlcy9rZXljbG9hay1hdXRoLWd1YXJkJztcbmV4cG9ydCB7IEtleWNsb2FrU2VydmljZSB9IGZyb20gJy4vbGliL2NvcmUvc2VydmljZXMva2V5Y2xvYWsuc2VydmljZSc7XG5leHBvcnQge1xuICBLZXljbG9ha0JlYXJlckludGVyY2VwdG9yXG59IGZyb20gJy4vbGliL2NvcmUvaW50ZXJjZXB0b3JzL2tleWNsb2FrLWJlYXJlci5pbnRlcmNlcHRvcic7XG5leHBvcnQgeyBDb3JlTW9kdWxlIH0gZnJvbSAnLi9saWIvY29yZS9jb3JlLm1vZHVsZSc7XG5leHBvcnQgeyBLZXljbG9ha0FuZ3VsYXJNb2R1bGUgfSBmcm9tICcuL2xpYi9rZXljbG9hay1hbmd1bGFyLm1vZHVsZSc7XG4iXX0=
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi9wcm9qZWN0cy9rZXljbG9hay1hbmd1bGFyL3NyYy8iLCJzb3VyY2VzIjpbInB1YmxpY19hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBUUEsT0FBTyxFQUVMLGlCQUFpQixFQUNsQixNQUFNLHNDQUFzQyxDQUFDO0FBRTlDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN2RSxPQUFPLEVBQ0wseUJBQXlCLEVBQzFCLE1BQU0scURBQXFELENBQUM7QUFDN0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLCtCQUErQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IE1hdXJpY2lvIEdlbWVsbGkgVmlnb2xvIGFuZCBjb250cmlidXRvcnMuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2dpdGh1Yi5jb20vbWF1cmljaW92aWdvbG8va2V5Y2xvYWstYW5ndWxhci9MSUNFTlNFXG4gKi9cblxuZXhwb3J0IHtcbiAgS2V5Y2xvYWtFdmVudCxcbiAgS2V5Y2xvYWtFdmVudFR5cGVcbn0gZnJvbSAnLi9saWIvY29yZS9pbnRlcmZhY2VzL2tleWNsb2FrLWV2ZW50JztcbmV4cG9ydCB7IEtleWNsb2FrT3B0aW9ucyB9IGZyb20gJy4vbGliL2NvcmUvaW50ZXJmYWNlcy9rZXljbG9hay1vcHRpb25zJztcbmV4cG9ydCB7IEtleWNsb2FrQXV0aEd1YXJkIH0gZnJvbSAnLi9saWIvY29yZS9zZXJ2aWNlcy9rZXljbG9hay1hdXRoLWd1YXJkJztcbmV4cG9ydCB7IEtleWNsb2FrU2VydmljZSB9IGZyb20gJy4vbGliL2NvcmUvc2VydmljZXMva2V5Y2xvYWsuc2VydmljZSc7XG5leHBvcnQge1xuICBLZXljbG9ha0JlYXJlckludGVyY2VwdG9yXG59IGZyb20gJy4vbGliL2NvcmUvaW50ZXJjZXB0b3JzL2tleWNsb2FrLWJlYXJlci5pbnRlcmNlcHRvcic7XG5leHBvcnQgeyBDb3JlTW9kdWxlIH0gZnJvbSAnLi9saWIvY29yZS9jb3JlLm1vZHVsZSc7XG5leHBvcnQgeyBLZXljbG9ha0FuZ3VsYXJNb2R1bGUgfSBmcm9tICcuL2xpYi9rZXljbG9hay1hbmd1bGFyLm1vZHVsZSc7XG4iXX0=
@@ -1,9 +1,9 @@
1
- import { __awaiter, __decorate, __metadata } from 'tslib';
1
+ import { __awaiter } from 'tslib';
2
2
  import { Injectable, NgModule } from '@angular/core';
3
3
  import { HttpHeaders, HTTP_INTERCEPTORS } from '@angular/common/http';
4
4
  import { Subject, from } from 'rxjs';
5
+ import { map, mergeMap } from 'rxjs/operators';
5
6
  import * as Keycloak_ from 'keycloak-js';
6
- import { mergeMap } from 'rxjs/operators';
7
7
  import { CommonModule } from '@angular/common';
8
8
 
9
9
  var KeycloakEventType;
@@ -37,26 +37,16 @@ class KeycloakAuthGuard {
37
37
  }
38
38
  }
39
39
 
40
- function toPromise(originalPromise) {
41
- if (originalPromise instanceof Promise) {
42
- return originalPromise;
43
- }
44
- return new Promise((resolve, reject) => {
45
- originalPromise.success(resolve);
46
- originalPromise.error(reject);
47
- });
48
- }
49
-
50
40
  const Keycloak = Keycloak_;
51
- let KeycloakService = class KeycloakService {
41
+ class KeycloakService {
52
42
  constructor() {
53
43
  this._keycloakEvents$ = new Subject();
54
44
  }
55
45
  bindsKeycloakEvents() {
56
- this._instance.onAuthError = errorData => {
46
+ this._instance.onAuthError = (errorData) => {
57
47
  this._keycloakEvents$.next({
58
48
  args: errorData,
59
- type: KeycloakEventType.OnAuthError
49
+ type: KeycloakEventType.OnAuthError,
60
50
  });
61
51
  };
62
52
  this._instance.onAuthLogout = () => {
@@ -64,12 +54,12 @@ let KeycloakService = class KeycloakService {
64
54
  };
65
55
  this._instance.onAuthRefreshSuccess = () => {
66
56
  this._keycloakEvents$.next({
67
- type: KeycloakEventType.OnAuthRefreshSuccess
57
+ type: KeycloakEventType.OnAuthRefreshSuccess,
68
58
  });
69
59
  };
70
60
  this._instance.onAuthRefreshError = () => {
71
61
  this._keycloakEvents$.next({
72
- type: KeycloakEventType.OnAuthRefreshError
62
+ type: KeycloakEventType.OnAuthRefreshError,
73
63
  });
74
64
  };
75
65
  this._instance.onAuthSuccess = () => {
@@ -77,13 +67,13 @@ let KeycloakService = class KeycloakService {
77
67
  };
78
68
  this._instance.onTokenExpired = () => {
79
69
  this._keycloakEvents$.next({
80
- type: KeycloakEventType.OnTokenExpired
70
+ type: KeycloakEventType.OnTokenExpired,
81
71
  });
82
72
  };
83
- this._instance.onReady = authenticated => {
73
+ this._instance.onReady = (authenticated) => {
84
74
  this._keycloakEvents$.next({
85
75
  args: authenticated,
86
- type: KeycloakEventType.OnReady
76
+ type: KeycloakEventType.OnReady,
87
77
  });
88
78
  };
89
79
  }
@@ -97,14 +87,14 @@ let KeycloakService = class KeycloakService {
97
87
  else {
98
88
  excludedUrl = {
99
89
  urlPattern: new RegExp(item.url, 'i'),
100
- httpMethods: item.httpMethods
90
+ httpMethods: item.httpMethods,
101
91
  };
102
92
  }
103
93
  excludedUrls.push(excludedUrl);
104
94
  }
105
95
  return excludedUrls;
106
96
  }
107
- initServiceValues({ enableBearerInterceptor = true, loadUserProfileAtStartUp = true, bearerExcludedUrls = [], authorizationHeaderName = 'Authorization', bearerPrefix = 'bearer', initOptions }) {
97
+ initServiceValues({ enableBearerInterceptor = true, loadUserProfileAtStartUp = false, bearerExcludedUrls = [], authorizationHeaderName = 'Authorization', bearerPrefix = 'Bearer', initOptions, }) {
108
98
  this._enableBearerInterceptor = enableBearerInterceptor;
109
99
  this._loadUserProfileAtStartUp = loadUserProfileAtStartUp;
110
100
  this._authorizationHeaderName = authorizationHeaderName;
@@ -118,7 +108,7 @@ let KeycloakService = class KeycloakService {
118
108
  const { config, initOptions } = options;
119
109
  this._instance = Keycloak(config);
120
110
  this.bindsKeycloakEvents();
121
- const authenticated = yield toPromise(this._instance.init(initOptions));
111
+ const authenticated = yield this._instance.init(initOptions);
122
112
  if (authenticated && this._loadUserProfileAtStartUp) {
123
113
  yield this.loadUserProfile();
124
114
  }
@@ -127,7 +117,7 @@ let KeycloakService = class KeycloakService {
127
117
  }
128
118
  login(options = {}) {
129
119
  return __awaiter(this, void 0, void 0, function* () {
130
- yield toPromise(this._instance.login(options));
120
+ yield this._instance.login(options);
131
121
  if (this._loadUserProfileAtStartUp) {
132
122
  yield this.loadUserProfile();
133
123
  }
@@ -136,15 +126,15 @@ let KeycloakService = class KeycloakService {
136
126
  logout(redirectUri) {
137
127
  return __awaiter(this, void 0, void 0, function* () {
138
128
  const options = {
139
- redirectUri
129
+ redirectUri,
140
130
  };
141
- yield toPromise(this._instance.logout(options));
131
+ yield this._instance.logout(options);
142
132
  this._userProfile = undefined;
143
133
  });
144
134
  }
145
135
  register(options = { action: 'register' }) {
146
136
  return __awaiter(this, void 0, void 0, function* () {
147
- yield toPromise(this._instance.register(options));
137
+ yield this._instance.register(options);
148
138
  });
149
139
  }
150
140
  isUserInRole(role, resource) {
@@ -200,7 +190,7 @@ let KeycloakService = class KeycloakService {
200
190
  if (!this._instance) {
201
191
  throw new Error('Keycloak Angular library is not initialized.');
202
192
  }
203
- return toPromise(this._instance.updateToken(minValidity));
193
+ return this._instance.updateToken(minValidity);
204
194
  });
205
195
  }
206
196
  loadUserProfile(forceReload = false) {
@@ -211,23 +201,13 @@ let KeycloakService = class KeycloakService {
211
201
  if (!this._instance.authenticated) {
212
202
  throw new Error('The user profile was not loaded as the user is not logged in.');
213
203
  }
214
- return this._userProfile = yield toPromise(this._instance.loadUserProfile());
204
+ return this._userProfile = yield this._instance.loadUserProfile();
215
205
  });
216
206
  }
217
- getToken(forceLogin = true) {
207
+ getToken() {
218
208
  return __awaiter(this, void 0, void 0, function* () {
219
- try {
220
- yield this.updateToken(10);
221
- return this._instance.token;
222
- }
223
- catch (error) {
224
- if (forceLogin) {
225
- this.login();
226
- }
227
- else {
228
- throw error;
229
- }
230
- }
209
+ yield this.updateToken(10);
210
+ return this._instance.token;
231
211
  });
232
212
  }
233
213
  getUsername() {
@@ -240,10 +220,7 @@ let KeycloakService = class KeycloakService {
240
220
  this._instance.clearToken();
241
221
  }
242
222
  addTokenToHeader(headers = new HttpHeaders()) {
243
- return from(() => __awaiter(this, void 0, void 0, function* () {
244
- const token = yield this.getToken();
245
- return headers.set(this._authorizationHeaderName, this._bearerPrefix + token);
246
- }));
223
+ return from(this.getToken()).pipe(map((token) => token ? headers.set(this._authorizationHeaderName, this._bearerPrefix + token) : headers));
247
224
  }
248
225
  getKeycloakInstance() {
249
226
  return this._instance;
@@ -257,12 +234,12 @@ let KeycloakService = class KeycloakService {
257
234
  get keycloakEvents$() {
258
235
  return this._keycloakEvents$;
259
236
  }
260
- };
261
- KeycloakService = __decorate([
262
- Injectable()
263
- ], KeycloakService);
237
+ }
238
+ KeycloakService.decorators = [
239
+ { type: Injectable }
240
+ ];
264
241
 
265
- let KeycloakBearerInterceptor = class KeycloakBearerInterceptor {
242
+ class KeycloakBearerInterceptor {
266
243
  constructor(keycloak) {
267
244
  this.keycloak = keycloak;
268
245
  }
@@ -291,38 +268,37 @@ let KeycloakBearerInterceptor = class KeycloakBearerInterceptor {
291
268
  return next.handle(kcReq);
292
269
  }));
293
270
  }
294
- };
271
+ }
272
+ KeycloakBearerInterceptor.decorators = [
273
+ { type: Injectable }
274
+ ];
295
275
  KeycloakBearerInterceptor.ctorParameters = () => [
296
276
  { type: KeycloakService }
297
277
  ];
298
- KeycloakBearerInterceptor = __decorate([
299
- Injectable(),
300
- __metadata("design:paramtypes", [KeycloakService])
301
- ], KeycloakBearerInterceptor);
302
278
 
303
- let CoreModule = class CoreModule {
304
- };
305
- CoreModule = __decorate([
306
- NgModule({
307
- imports: [CommonModule],
308
- providers: [
309
- KeycloakService,
310
- {
311
- provide: HTTP_INTERCEPTORS,
312
- useClass: KeycloakBearerInterceptor,
313
- multi: true
314
- }
315
- ]
316
- })
317
- ], CoreModule);
279
+ class CoreModule {
280
+ }
281
+ CoreModule.decorators = [
282
+ { type: NgModule, args: [{
283
+ imports: [CommonModule],
284
+ providers: [
285
+ KeycloakService,
286
+ {
287
+ provide: HTTP_INTERCEPTORS,
288
+ useClass: KeycloakBearerInterceptor,
289
+ multi: true
290
+ }
291
+ ]
292
+ },] }
293
+ ];
318
294
 
319
- let KeycloakAngularModule = class KeycloakAngularModule {
320
- };
321
- KeycloakAngularModule = __decorate([
322
- NgModule({
323
- imports: [CoreModule]
324
- })
325
- ], KeycloakAngularModule);
295
+ class KeycloakAngularModule {
296
+ }
297
+ KeycloakAngularModule.decorators = [
298
+ { type: NgModule, args: [{
299
+ imports: [CoreModule]
300
+ },] }
301
+ ];
326
302
 
327
303
  export { CoreModule, KeycloakAngularModule, KeycloakAuthGuard, KeycloakBearerInterceptor, KeycloakEventType, KeycloakService };
328
304
  //# sourceMappingURL=keycloak-angular.js.map