@kolektor/nucleus-identity 0.0.9-pre.5707 → 0.0.9-pre.5874

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.
@@ -12,6 +12,7 @@ import { SecretsStore } from './utils/secrets-store';
12
12
  import { OidcConfigurationService } from './utils/oidc-configuration.service';
13
13
  import { TokenClient } from './utils/token-client';
14
14
  import { ServicePrincipalRegistrationStatus } from './models/service-principal';
15
+ import { lastValueFrom } from 'rxjs';
15
16
  import * as i0 from "@angular/core";
16
17
  import * as i1 from "@kolektor/nucleus-common";
17
18
  import * as i2 from "./utils/location.service";
@@ -63,6 +64,7 @@ export class NucleusIdentityService {
63
64
  const request = this._authorizationNotifier.request;
64
65
  const response = this._authorizationNotifier.response;
65
66
  const res = await this.tokenClient.getByAuthorizationCode(request.redirectUri, response.code, request.internal['code_verifier']);
67
+ this._store.setDefaultIdentityId(null);
66
68
  await this._store.setToken(res);
67
69
  }
68
70
  else {
@@ -78,6 +80,7 @@ export class NucleusIdentityService {
78
80
  const assertionToken = await this.getServicePrincipalAccessToken();
79
81
  const scope = this.prepareScope(true, this.config?.requestedScopes);
80
82
  const res = await this.tokenClient.getBySecret(provider, secret, assertionToken, scope);
83
+ this._store.setDefaultIdentityId(null);
81
84
  await this._store.setToken(res);
82
85
  }
83
86
  async login() {
@@ -146,30 +149,34 @@ export class NucleusIdentityService {
146
149
  }
147
150
  }
148
151
  async loginServicePrincipal() {
149
- await this.loginServicePrincipalInternal();
150
- }
151
- /*
152
- public async loginAsServicePrincipal() {
153
- let token = await this._store.getToken(this._servicePrincipalTokenId);
154
- if (!token) {
155
- await this.loginServicePrincipal();
156
- }
157
- token = await this._store.getToken(this._servicePrincipalTokenId);
158
- // TODO: we have to distinguished that token is service principal so refresh token stuff is handled correctly.
159
- // We have to implement universal getAccessToken function that can handle all cases
160
- await this._store.setToken(token);
161
- }
162
- */
152
+ const sp = await this._store.getServicePrincipal();
153
+ if (sp) {
154
+ const scope = this.prepareScope(false, this.config.servicePrincipalRequestedScopes);
155
+ const res = await this.tokenClient.getByClientCredentials(sp.id, sp.secret, scope);
156
+ await this._store.setToken(res, this._servicePrincipalTokenId);
157
+ return res;
158
+ }
159
+ else {
160
+ throw Error('Service principal is not registered!');
161
+ }
162
+ }
163
+ async loginAsServicePrincipal() {
164
+ const token = await this._store.getToken(this._servicePrincipalTokenId);
165
+ if (!token) {
166
+ await this.loginServicePrincipal();
167
+ }
168
+ this._store.setDefaultIdentityId(this._servicePrincipalTokenId);
169
+ }
163
170
  async getOtp(type, expiresIn = -1) {
164
171
  let url = this.config.getServerUrl(`/otp/create?type=${type}`);
165
172
  if (expiresIn > 0) {
166
173
  url += `&expiresIn=${expiresIn}`;
167
174
  }
168
- return this.http.get(url).toPromise();
175
+ return lastValueFrom(this.http.get(url));
169
176
  }
170
177
  async getOtpStatus(id) {
171
178
  const url = this.config.getServerUrl(`/otp/status/${id}`);
172
- return this.http.get(url).toPromise();
179
+ return lastValueFrom(this.http.get(url));
173
180
  }
174
181
  getOtpUrl(redirectUrl, password) {
175
182
  const encoded = encodeURIComponent(redirectUrl);
@@ -240,22 +247,10 @@ export class NucleusIdentityService {
240
247
  extras: params,
241
248
  }, this._crypto, true);
242
249
  }
243
- async loginServicePrincipalInternal() {
244
- const sp = await this._store.getServicePrincipal();
245
- if (sp) {
246
- const scope = this.prepareScope(false, this.config.servicePrincipalRequestedScopes);
247
- const res = await this.tokenClient.getByClientCredentials(sp.id, sp.secret, scope);
248
- await this._store.setToken(res, this._servicePrincipalTokenId);
249
- return res;
250
- }
251
- else {
252
- throw Error('Service principal is not registered!');
253
- }
254
- }
255
250
  async getServicePrincipalAccessTokenInternal() {
256
251
  let token = await this._store.getToken(this._servicePrincipalTokenId);
257
252
  if (!token?.isValid()) {
258
- token = await this.loginServicePrincipalInternal();
253
+ token = await this.loginServicePrincipal();
259
254
  }
260
255
  return token?.accessToken;
261
256
  }
@@ -340,4 +335,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImpor
340
335
  providedIn: 'root'
341
336
  }]
342
337
  }], ctorParameters: function () { return [{ type: i1.NucleusAppService }, { type: i2.LocationService }, { type: i3.HttpClient }, { type: i4.OidcConfigurationService }, { type: i5.TokenClient }]; } });
343
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVjbGV1cy1pZGVudGl0eS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbnVjbGV1cy1pZGVudGl0eS9zcmMvbGliL251Y2xldXMtaWRlbnRpdHkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsb0JBQW9CLEVBR3BCLHNCQUFzQixFQUN0QixxQkFBcUIsRUFDckIsbUJBQW1CLEVBQ25CLFlBQVksRUFDYixNQUFNLGlCQUFpQixDQUFDO0FBRXpCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDM0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzdELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUUzRCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUN0RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFbEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVuRCxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7OztBQUtoRixNQUFNLE9BQU8sc0JBQXNCO0lBQ2pDLFlBQ1UsVUFBNkIsRUFDckMsUUFBeUIsRUFDakIs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dGhvcml6YXRpb25SZXF1ZXN0LFxyXG4gIFRva2VuUmVzcG9uc2UsXHJcbiAgQ3J5cHRvLFxyXG4gIFJlZGlyZWN0UmVxdWVzdEhhbmRsZXIsXHJcbiAgQmFzaWNRdWVyeVN0cmluZ1V0aWxzLFxyXG4gIExvY2FsU3RvcmFnZUJhY2tlbmQsXHJcbiAgQXBwQXV0aEVycm9yXHJcbn0gZnJvbSAnQG9wZW5pZC9hcHBhdXRoJztcclxuXHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQXBwIH0gZnJvbSAnQGNhcGFjaXRvci9hcHAnO1xyXG5pbXBvcnQgeyBCcm93c2VyIH0gZnJvbSAnQGNhcGFjaXRvci9icm93c2VyJztcclxuaW1wb3J0IHsgRGV2aWNlIH0gZnJvbSAnQGNhcGFjaXRvci9kZXZpY2UnO1xyXG5pbXBvcnQgeyBOdWNsZXVzQ3J5cHRvIH0gZnJvbSAnLi91dGlscy9udWNsZXVzLWNyeXB0byc7XHJcbmltcG9ydCB7IE51Y2xldXNBcHBTZXJ2aWNlIH0gZnJvbSAnQGtvbGVrdG9yL251Y2xldXMtY29tbW9uJztcclxuaW1wb3J0IHsgTG9jYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi91dGlscy9sb2NhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXV0aG9yaXphdGlvblJlcXVlc3RIYW5kbGVyIH0gZnJvbSAnQG9wZW5pZC9hcHBhdXRoJztcclxuaW1wb3J0IHsgTnVjbGV1c0F1dGhvcml6YXRpb25Ob3RpZmllciB9IGZyb20gJy4vdXRpbHMvbnVjbGV1cy1hdXRob3JpemF0aW9uLW5vdGlmaWVyJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgT3RwUmVzcG9uc2UsIE90cFN0YXR1cywgT3RwVHlwZSB9IGZyb20gJy4vbW9kZWxzL290cCc7XHJcbmltcG9ydCB7IFNlY3JldHNTdG9yZSB9IGZyb20gJy4vdXRpbHMvc2VjcmV0cy1zdG9yZSc7XHJcbmltcG9ydCB7IE9pZGNDb25maWd1cmF0aW9uU2VydmljZSB9IGZyb20gJy4vdXRpbHMvb2lkYy1jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUb2tlbkNsaWVudCB9IGZyb20gJy4vdXRpbHMvdG9rZW4tY2xpZW50JztcclxuaW1wb3J0IHsgRGV2aWNlQ29kZSB9IGZyb20gJy4vbW9kZWxzL2RldmljZS1jb2RlJztcclxuaW1wb3J0IHsgU2VydmljZVByaW5jaXBhbFJlZ2lzdHJhdGlvblN0YXR1cyB9IGZyb20gJy4vbW9kZWxzL3NlcnZpY2UtcHJpbmNpcGFsJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIE51Y2xldXNJZGVudGl0eVNlcnZpY2Uge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBhcHBTZXJ2aWNlOiBOdWNsZXVzQXBwU2VydmljZSxcclxuICAgIGxvY2F0aW9uOiBMb2NhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICBwcml2YXRlIGNvbmZpZzogT2lkY0NvbmZpZ3VyYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0b2tlbkNsaWVudDogVG9rZW5DbGllbnRcclxuICApIHtcclxuICAgIGNvbnN0IHN0b3JhZ2UgPSBuZXcgTG9jYWxTdG9yYWdlQmFja2VuZCgpO1xyXG4gICAgdGhpcy5fY3J5cHRvID0gbmV3IE51Y2xldXNDcnlwdG8oKTtcclxuICAgIHRoaXMuX2F1dGhvcml6YXRpb25IYW5kbGVyID0gbmV3IFJlZGlyZWN0UmVxdWVzdEhhbmRsZXIoc3RvcmFnZSwgbmV3IEJhc2ljUXVlcnlTdHJpbmdVdGlscygpLCBsb2NhdGlvbiwgdGhpcy5fY3J5cHRvKTtcclxuICAgIHRoaXMuX2F1dGhvcml6YXRpb25IYW5kbGVyLnNldEF1dGhvcml6YXRpb25Ob3RpZmllcih0aGlzLl9hdXRob3JpemF0aW9uTm90aWZpZXIpO1xyXG4gICAgdGhpcy5fc3RvcmUgPSBuZXcgU2VjcmV0c1N0b3JlKGNvbmZpZy5jbGllbnRJZCk7XHJcbiAgfVxyXG5cclxuICAvLyBUT0RPOiBhZGQgc29tZSBraW5kIG9mIGNvbmZpZyB0aGF0IHdpbGwgc3BlY2lmeSB3aGljaCB0b2tlbiAodXNlclRva2VuIG9yIHNlcnZpY2VQcmluY2lwYWxUb2tlbikgc2hvdWxkIGJlIGluamVjdGVkIGJ5IGh0dHBJbnRlcmNlcHRvclxyXG5cclxuICBwcml2YXRlIF9hdXRob3JpemF0aW9uSGFuZGxlcjogQXV0aG9yaXphdGlvblJlcXVlc3RIYW5kbGVyO1xyXG4gIHByaXZhdGUgX2F1dGhvcml6YXRpb25Ob3RpZmllciA9IG5ldyBOdWNsZXVzQXV0aG9yaXphdGlvbk5vdGlmaWVyKCk7XHJcbiAgcHJpdmF0ZSBfY3J5cHRvOiBDcnlwdG87XHJcbiAgcHJpdmF0ZSBfaW5pdFN0YXJ0ZWQgPSBmYWxzZTtcclxuICBwcml2YXRlIF9pbml0aWFsaXplZCA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX3JlZnJlc2hUb2tlblByb21pc2U6IFByb21pc2U8VG9rZW5SZXNwb25zZT47XHJcbiAgcHJpdmF0ZSBfZ2V0VG9rZW5Qcm9taXNlOiBQcm9taXNlPHN0cmluZz47XHJcbiAgcHJpdmF0ZSBfZ2V0U2VydmljZVByaW5jaXBhbFRva2VuUHJvbWlzZTogUHJvbWlzZTxzdHJpbmc+O1xyXG4gIHByaXZhdGUgX3NlcnZpY2VQcmluY2lwYWxUb2tlbklkID0gJ19zdmNwJztcclxuICBwcml2YXRlIF9zdG9yZTogU2VjcmV0c1N0b3JlO1xyXG5cclxuICBwdWJsaWMgZ2V0IGlkZW50aXR5KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3N0b3JlLmdldElkZW50aXR5KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGlzQXV0aGVudGljYXRlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLmlkZW50aXR5ICE9IG51bGw7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHNlcnZpY2VQcmluY2lwYWxJZGVudGl0eSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9zdG9yZS5nZXRJZGVudGl0eSh0aGlzLl9zZXJ2aWNlUHJpbmNpcGFsVG9rZW5JZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGlzU2VydmljZVByaW5jaXBhbEF1dGhlbnRpY2F0ZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zZXJ2aWNlUHJpbmNpcGFsSWRlbnRpdHkgIT0gbnVsbDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBpbml0KHN0YXJ0TG9naW46IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHRoaXMuX2luaXRTdGFydGVkIHx8IHRoaXMuX2luaXRpYWxpemVkKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybignTnVjbGV1cy5JZGVudGl0eTogQXV0aCBpbml0aWFsaXphdGlvbiB3YXMgYWxyZWFkeSBzdGFydGVkLiBEb25cXCd0IGNhbGwgaW5pdCgpIG11bHRpcGxlIHRpbWVzIScpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLl9pbml0U3RhcnRlZCA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5oYW5kbGVMYXVuY2hDb2RlSGFzaCgpO1xyXG4gICAgYXdhaXQgdGhpcy5fYXV0aG9yaXphdGlvbkhhbmRsZXIuY29tcGxldGVBdXRob3JpemF0aW9uUmVxdWVzdElmUG9zc2libGUoKTtcclxuXHJcbiAgICBjb25zdCBhdXRoRXJyID0gdGhpcy5fYXV0aG9yaXphdGlvbk5vdGlmaWVyLmVycm9yO1xyXG4gICAgaWYgKGF1dGhFcnIpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdXRob3JpemF0aW9uIGVycjogJyArIGF1dGhFcnIuZXJyb3IgKyAnOiAnICsgYXV0aEVyci5lcnJvckRlc2NyaXB0aW9uKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5fYXV0aG9yaXphdGlvbk5vdGlmaWVyLnJlc3BvbnNlKSB7XHJcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5oYXNoID0gJyc7XHJcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLl9hdXRob3JpemF0aW9uTm90aWZpZXIucmVxdWVzdDtcclxuICAgICAgY29uc3QgcmVzcG9uc2UgPSB0aGlzLl9hdXRob3JpemF0aW9uTm90aWZpZXIucmVzcG9uc2U7XHJcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMudG9rZW5DbGllbnQuZ2V0QnlBdXRob3JpemF0aW9uQ29kZShyZXF1ZXN0LnJlZGlyZWN0VXJpLCByZXNwb25zZS5jb2RlLCByZXF1ZXN0LmludGVybmFsWydjb2RlX3ZlcmlmaWVyJ10pO1xyXG4gICAgICBhd2FpdCB0aGlzLl9zdG9yZS5zZXRUb2tlbihyZXMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5fc3RvcmUuZ2V0VG9rZW4oKTtcclxuICAgICAgaWYgKCFyZXMgJiYgc3RhcnRMb2dpbikge1xyXG4gICAgICAgIGF3YWl0IHRoaXMubG9naW4oKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5faW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGxvZ2luV2l0aFNlY3JldChwcm92aWRlcjogc3RyaW5nLCBzZWNyZXQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5fc3RvcmUucmVtb3ZlVG9rZW4oKTtcclxuICAgIGNvbnN0IGFzc2VydGlvblRva2VuID0gYXdhaXQgdGhpcy5nZXRTZXJ2aWNlUHJpbmNpcGFsQWNjZXNzVG9rZW4oKTtcclxuICAgIGNvbnN0IHNjb3BlID0gdGhpcy5wcmVwYXJlU2NvcGUodHJ1ZSwgdGhpcy5jb25maWc/LnJlcXVlc3RlZFNjb3Blcyk7XHJcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnRva2VuQ2xpZW50LmdldEJ5U2VjcmV0KHByb3ZpZGVyLCBzZWNyZXQsIGFzc2VydGlvblRva2VuLCBzY29wZSk7XHJcbiAgICBhd2FpdCB0aGlzLl9zdG9yZS5zZXRUb2tlbihyZXMpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGxvZ2luKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5fc3RvcmUucmVtb3ZlVG9rZW4oKTtcclxuICAgIGNvbnN0IGNvbmZpZyA9IGF3YWl0IHRoaXMuY29uZmlnLmdldENvbmZpZ3VyYXRpb24oKTtcclxuICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLnByZXBhcmVBdXRob3JpemF0aW9uUmVxdWVzdCgpO1xyXG4gICAgaWYgKHRoaXMuYXBwU2VydmljZS5pc05hdGl2ZSkge1xyXG4gICAgICBjb25zdCBsaXN0ZW5lciA9IEFwcC5hZGRMaXN0ZW5lcignYXBwVXJsT3BlbicsIGRhdGEgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmFwcFNlcnZpY2UucGxhdGZvcm0gPT09ICdpb3MnKSB7XHJcbiAgICAgICAgICBCcm93c2VyLmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxpc3RlbmVyLnJlbW92ZSgpO1xyXG4gICAgICAgIGNvbnN0IGhhc2ggPSB0aGlzLmdldENvZGVIYXNoKGRhdGEudXJsKTtcclxuICAgICAgICBpZiAoaGFzaCkge1xyXG4gICAgICAgICAgY29uc3QgdGFyZ2V0VXJsID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbiArIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSArICcjJyArIGhhc2g7XHJcbiAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKHRhcmdldFVybCk7XHJcbiAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnNvbGUud2FybignTnVjbGV1cy5JZGVudGl0eTogUmVkaXJlY3QgdXJsIGRpZCBub3QgY29udGFpbiBhdXRob3JpemF0aW9uIGNvZGUhJywgZGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHRoaXMuX2F1dGhvcml6YXRpb25IYW5kbGVyLnBlcmZvcm1BdXRob3JpemF0aW9uUmVxdWVzdChjb25maWcsIHJlcXVlc3QpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGxvZ291dCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuX3N0b3JlLnJlbW92ZVRva2VuKCk7XHJcbiAgICBjb25zdCBjb25maWcgPSBhd2FpdCB0aGlzLmNvbmZpZy5nZXRDb25maWd1cmF0aW9uKCk7XHJcbiAgICBjb25zdCByZWRpcmVjdFVybCA9IHRoaXMuY29uZmlnLnJlZGlyZWN0VXJsO1xyXG4gICAgY29uc3QgbG9nb3V0VXJsID0gY29uZmlnLmVuZFNlc3Npb25FbmRwb2ludCArICc/cG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpPScgKyBlbmNvZGVVUkkocmVkaXJlY3RVcmwpO1xyXG4gICAgaWYgKHRoaXMuYXBwU2VydmljZS5pc05hdGl2ZSkge1xyXG4gICAgICBjb25zdCBsaXN0ZW5lciA9IEFwcC5hZGRMaXN0ZW5lcignYXBwVXJsT3BlbicsICgpID0+IHtcclxuICAgICAgICBEZXZpY2UuZ2V0SW5mbygpLnRoZW4oaW5mbyA9PiB7XHJcbiAgICAgICAgICBpZiAoaW5mby5wbGF0Zm9ybSA9PT0gJ2lvcycpIHtcclxuICAgICAgICAgICAgQnJvd3Nlci5jbG9zZSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGxpc3RlbmVyLnJlbW92ZSgpO1xyXG4gICAgICB9KTtcclxuICAgICAgQnJvd3Nlci5vcGVuKHsgdXJsOiBsb2dvdXRVcmwgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKGxvZ291dFVybCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0QWNjZXNzVG9rZW4oKSB7XHJcbiAgICBpZiAoIXRoaXMuX2dldFRva2VuUHJvbWlzZSkge1xyXG4gICAgICB0aGlzLl9nZXRUb2tlblByb21pc2UgPSB0aGlzLmdldEFjY2Vzc1Rva2VuSW50ZXJuYWwoKTtcclxuICAgIH1cclxuICAgIHRyeSB7XHJcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9nZXRUb2tlblByb21pc2U7XHJcbiAgICB9IGZpbmFsbHkge1xyXG4gICAgICB0aGlzLl9nZXRUb2tlblByb21pc2UgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFNlcnZpY2VQcmluY2lwYWxBY2Nlc3NUb2tlbigpIHtcclxuICAgIGlmICghdGhpcy5fZ2V0U2VydmljZVByaW5jaXBhbFRva2VuUHJvbWlzZSkge1xyXG4gICAgICB0aGlzLl9nZXRTZXJ2aWNlUHJpbmNpcGFsVG9rZW5Qcm9taXNlID0gdGhpcy5nZXRTZXJ2aWNlUHJpbmNpcGFsQWNjZXNzVG9rZW5JbnRlcm5hbCgpO1xyXG4gICAgfVxyXG4gICAgdHJ5IHtcclxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX2dldFNlcnZpY2VQcmluY2lwYWxUb2tlblByb21pc2U7XHJcbiAgICB9IGZpbmFsbHkge1xyXG4gICAgICB0aGlzLl9nZXRTZXJ2aWNlUHJpbmNpcGFsVG9rZW5Qcm9taXNlID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBsb2dpblNlcnZpY2VQcmluY2lwYWwoKSB7XHJcbiAgICBhd2FpdCB0aGlzLmxvZ2luU2VydmljZVByaW5jaXBhbEludGVybmFsKCk7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gIHB1YmxpYyBhc3luYyBsb2dpbkFzU2VydmljZVByaW5jaXBhbCgpIHtcclxuICAgIGxldCB0b2tlbiA9IGF3YWl0IHRoaXMuX3N0b3JlLmdldFRva2VuKHRoaXMuX3NlcnZpY2VQcmluY2lwYWxUb2tlbklkKTtcclxuICAgIGlmICghdG9rZW4pIHtcclxuICAgICAgYXdhaXQgdGhpcy5sb2dpblNlcnZpY2VQcmluY2lwYWwoKTtcclxuICAgIH1cclxuICAgIHRva2VuID0gYXdhaXQgdGhpcy5fc3RvcmUuZ2V0VG9rZW4odGhpcy5fc2VydmljZVByaW5jaXBhbFRva2VuSWQpO1xyXG4gICAgIC8vIFRPRE86IHdlIGhhdmUgdG8gZGlzdGluZ3Vpc2hlZCB0aGF0IHRva2VuIGlzIHNlcnZpY2UgcHJpbmNpcGFsIHNvIHJlZnJlc2ggdG9rZW4gc3R1ZmYgaXMgaGFuZGxlZCBjb3JyZWN0bHkuXHJcbiAgICAgLy8gV2UgaGF2ZSB0byBpbXBsZW1lbnQgdW5pdmVyc2FsIGdldEFjY2Vzc1Rva2VuIGZ1bmN0aW9uIHRoYXQgY2FuIGhhbmRsZSBhbGwgY2FzZXNcclxuICAgIGF3YWl0IHRoaXMuX3N0b3JlLnNldFRva2VuKHRva2VuKTtcclxuICB9XHJcbiAgKi9cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldE90cCh0eXBlOiBPdHBUeXBlLCBleHBpcmVzSW46IG51bWJlciA9IC0xKSB7XHJcbiAgICBsZXQgdXJsID0gdGhpcy5jb25maWcuZ2V0U2VydmVyVXJsKGAvb3RwL2NyZWF0ZT90eXBlPSR7dHlwZX1gKTtcclxuICAgIGlmIChleHBpcmVzSW4gPiAwKSB7XHJcbiAgICAgIHVybCArPSBgJmV4cGlyZXNJbj0ke2V4cGlyZXNJbn1gO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8T3RwUmVzcG9uc2U+KHVybCkudG9Qcm9taXNlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0T3RwU3RhdHVzKGlkOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IHVybCA9IHRoaXMuY29uZmlnLmdldFNlcnZlclVybChgL290cC9zdGF0dXMvJHtpZH1gKTtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE90cFN0YXR1cz4odXJsKS50b1Byb21pc2UoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRPdHBVcmwocmVkaXJlY3RVcmw6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZykge1xyXG4gICAgY29uc3QgZW5jb2RlZCA9IGVuY29kZVVSSUNvbXBvbmVudChyZWRpcmVjdFVybCk7XHJcbiAgICBjb25zdCB1cmwgPSBgL290cC9hdXRoP290cFZhbHVlPSR7cGFzc3dvcmR9JnJldHVyblVybD0ke2VuY29kZWR9YDtcclxuICAgIHJldHVybiB0aGlzLmNvbmZpZy5nZXRTZXJ2ZXJVcmwodXJsKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzdGFydFNlcnZpY2VQcmluY2lwYWxSZWdpc3RyYXRpb24oKSB7XHJcbiAgICBjb25zdCBzcCA9IGF3YWl0IHRoaXMuX3N0b3JlLmdldFNlcnZpY2VQcmluY2lwYWwoKTtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLnRva2VuQ2xpZW50LmdldFJlZ2lzdHJhdGlvbkNvZGUoc3A/LmlkKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjb21wbGV0ZVNlcnZpY2VQcmluY2lwYWxSZWdpc3RyYXRpb24oZGV2aWNlQ29kZTogRGV2aWNlQ29kZSkge1xyXG4gICAgY29uc3QgdG9rZW5SZXMgPSBhd2FpdCB0aGlzLndhaXRGb3JEZXZpY2VUb2tlbihkZXZpY2VDb2RlKTtcclxuICAgIGNvbnN0IHJlZ1JlcyA9IGF3YWl0IHRoaXMudG9rZW5DbGllbnQucmVnaXN0ZXJTZXJ2aWNlUHJpbmNpcGFsKHRva2VuUmVzLmFjY2Vzc1Rva2VuKTtcclxuXHJcbiAgICBhd2FpdCB0aGlzLl9zdG9yZS5zZXRTZXJ2aWNlUHJpbmNpcGFsKHtcclxuICAgICAgaWQ6IHJlZ1Jlcy5jbGllbnRJZCxcclxuICAgICAgc2VjcmV0OiByZWdSZXMuY2xpZW50U2VjcmV0LFxyXG4gICAgICBleHBpcmVzQXQ6IHJlZ1Jlcy5zZWNyZXRFeHBpcmF0aW9uRGF0ZVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVtb3ZlU2VydmljZVByaW5jaXBhbFJlZ2lzdHJhdGlvbigpIHtcclxuICAgIHJldHVybiB0aGlzLl9zdG9yZS5yZW1vdmVTZXJ2aWNlUHJpbmNpcGFsKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0U2VydmljZVByaW5jaXBhbFJlZ2lzdHJhdGlvblN0YXR1cygpIHtcclxuICAgIGNvbnN0IHNwID0gYXdhaXQgdGhpcy5fc3RvcmUuZ2V0U2VydmljZVByaW5jaXBhbCgpO1xyXG4gICAgcmV0dXJuIG5ldyBTZXJ2aWNlUHJpbmNpcGFsUmVnaXN0cmF0aW9uU3RhdHVzKHNwKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzdGFydERldmljZUNvZGVMb2dpbigpIHtcclxuICAgIGNvbnN0IHNjb3BlID0gdGhpcy5wcmVwYXJlU2NvcGUodHJ1ZSwgdGhpcy5jb25maWcucmVxdWVzdGVkU2NvcGVzKTtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLnRva2VuQ2xpZW50LmdldERldmljZUNvZGUoc2NvcGUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGNvbXBsZXRlRGV2aWNlQ29kZUxvZ2luKGRldmljZUNvZGU6IERldmljZUNvZGUpIHtcclxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMud2FpdEZvckRldmljZVRva2VuKGRldmljZUNvZGUpO1xyXG4gICAgYXdhaXQgdGhpcy5fc3RvcmUuc2V0VG9rZW4ocmVzKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgd2FpdEZvckRldmljZVRva2VuKGRldmljZUNvZGU6IERldmljZUNvZGUpIHtcclxuICAgIGxldCByZXM6IFRva2VuUmVzcG9uc2UgPSBudWxsO1xyXG4gICAgZG8ge1xyXG4gICAgICBpZiAoZGV2aWNlQ29kZS5pc0V4cGlyZWQoKSkge1xyXG4gICAgICAgIHRocm93IEVycm9yKCdEZXZpY2UgY29kZSBpcyBleHBpcmVkIScpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHJlcyA9IGF3YWl0IHRoaXMudG9rZW5DbGllbnQuZ2V0QnlEZXZpY2VDb2RlKGRldmljZUNvZGUuZGV2aWNlQ29kZSk7XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgQXBwQXV0aEVycm9yICYmIGVycm9yLm1lc3NhZ2UgPT09ICdhdXRob3JpemF0aW9uX3BlbmRpbmcnKSB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLmRlbGF5KDIwMDApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gd2hpbGUgKCFyZXMpO1xyXG4gICAgcmV0dXJuIHJlcztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcHJlcGFyZUF1dGhvcml6YXRpb25SZXF1ZXN0KCk6IEF1dGhvcml6YXRpb25SZXF1ZXN0IHtcclxuICAgIGNvbnN0IHJlZGlyZWN0VXJpID0gdGhpcy5jb25maWcucmVkaXJlY3RVcmw7XHJcblxyXG4gICAgY29uc3QgcGFyYW1zID0ge1xyXG4gICAgICByZXNwb25zZV9tb2RlOiAnZnJhZ21lbnQnLFxyXG4gICAgICBwcm9tcHQ6ICdjb25zZW50JyxcclxuICAgICAgYWNjZXNzX3R5cGU6ICdvZmZsaW5lJyxcclxuICAgICAgYXV0aF9wcm92aWRlcl9oaW50OiB0aGlzLmNvbmZpZy5hdXRoUHJvdmlkZXJIaW50XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBuZXcgQXV0aG9yaXphdGlvblJlcXVlc3Qoe1xyXG4gICAgICBjbGllbnRfaWQ6IHRoaXMuY29uZmlnLmNsaWVudElkLFxyXG4gICAgICByZWRpcmVjdF91cmk6IHJlZGlyZWN0VXJpLFxyXG4gICAgICByZXNwb25zZV90eXBlOiBBdXRob3JpemF0aW9uUmVxdWVzdC5SRVNQT05TRV9UWVBFX0NPREUsXHJcbiAgICAgIHNjb3BlOiB0aGlzLnByZXBhcmVTY29wZSh0cnVlLCB0aGlzLmNvbmZpZy5yZXF1ZXN0ZWRTY29wZXMpLFxyXG4gICAgICBleHRyYXM6IHBhcmFtcyxcclxuICAgIH0sIHRoaXMuX2NyeXB0bywgdHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGxvZ2luU2VydmljZVByaW5jaXBhbEludGVybmFsKCkge1xyXG4gICAgY29uc3Qgc3AgPSBhd2FpdCB0aGlzLl9zdG9yZS5nZXRTZXJ2aWNlUHJpbmNpcGFsKCk7XHJcbiAgICBpZiAoc3ApIHtcclxuICAgICAgY29uc3Qgc2NvcGUgPSB0aGlzLnByZXBhcmVTY29wZShmYWxzZSwgdGhpcy5jb25maWcuc2VydmljZVByaW5jaXBhbFJlcXVlc3RlZFNjb3Blcyk7XHJcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMudG9rZW5DbGllbnQuZ2V0QnlDbGllbnRDcmVkZW50aWFscyhzcC5pZCwgc3Auc2VjcmV0LCBzY29wZSk7XHJcbiAgICAgIGF3YWl0IHRoaXMuX3N0b3JlLnNldFRva2VuKHJlcywgdGhpcy5fc2VydmljZVByaW5jaXBhbFRva2VuSWQpO1xyXG4gICAgICByZXR1cm4gcmVzO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhyb3cgRXJyb3IoJ1NlcnZpY2UgcHJpbmNpcGFsIGlzIG5vdCByZWdpc3RlcmVkIScpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBnZXRTZXJ2aWNlUHJpbmNpcGFsQWNjZXNzVG9rZW5JbnRlcm5hbCgpIHtcclxuICAgIGxldCB0b2tlbiA9IGF3YWl0IHRoaXMuX3N0b3JlLmdldFRva2VuKHRoaXMuX3NlcnZpY2VQcmluY2lwYWxUb2tlbklkKTtcclxuICAgIGlmICghdG9rZW4/LmlzVmFsaWQoKSkge1xyXG4gICAgICB0b2tlbiA9IGF3YWl0IHRoaXMubG9naW5TZXJ2aWNlUHJpbmNpcGFsSW50ZXJuYWwoKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0b2tlbj8uYWNjZXNzVG9rZW47XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGdldEFjY2Vzc1Rva2VuSW50ZXJuYWwoKSB7XHJcbiAgICBsZXQgdG9rZW4gPSBhd2FpdCB0aGlzLl9zdG9yZS5nZXRUb2tlbigpO1xyXG4gICAgaWYgKHRva2VuICYmICF0b2tlbi5pc1ZhbGlkKCkpIHtcclxuICAgICAgdG9rZW4gPSBhd2FpdCB0aGlzLmxvZ2luV2l0aFJlZnJlc2hUb2tlbih0b2tlbik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdG9rZW4/LmFjY2Vzc1Rva2VuO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBsb2dpbldpdGhSZWZyZXNoVG9rZW4odG9rZW46IFRva2VuUmVzcG9uc2UpIHtcclxuICAgIGlmICghdGhpcy5fcmVmcmVzaFRva2VuUHJvbWlzZSkge1xyXG4gICAgICB0aGlzLl9yZWZyZXNoVG9rZW5Qcm9taXNlID0gdGhpcy5sb2dpbldpdGhSZWZyZXNoVG9rZW5JbnRlcm5hbCh0b2tlbik7XHJcbiAgICB9XHJcbiAgICB0cnkge1xyXG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5fcmVmcmVzaFRva2VuUHJvbWlzZTtcclxuICAgIH0gZmluYWxseSB7XHJcbiAgICAgIHRoaXMuX3JlZnJlc2hUb2tlblByb21pc2UgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBsb2dpbldpdGhSZWZyZXNoVG9rZW5JbnRlcm5hbCh0b2tlbjogVG9rZW5SZXNwb25zZSkge1xyXG4gICAgaWYgKHRva2VuPy5yZWZyZXNoVG9rZW4pIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnRva2VuQ2xpZW50LmdldEJ5UmVmcmVzaFRva2VuKHRva2VuLnJlZnJlc2hUb2tlbik7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fc3RvcmUuc2V0VG9rZW4ocmVzKTtcclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oJ051Y2xldXMuSWRlbnRpdHk6IEZhaWxlZCB0byBsb2dpbiB3aXRoIHJlZnJlc2ggdG9rZW4uJywgZXJyKTtcclxuICAgICAgICBpZiAoZXJyLm1lc3NhZ2UgPT09ICdpbnZhbGlkX2dyYW50Jykge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5sb2dvdXQoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUud2FybignTnVjbGV1cy5JZGVudGl0eTogVGhlcmUgaXMgbm8gcmVmcmVzaCB0b2tlbiBhdmFpbGFibGUuJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldENvZGVIYXNoKHVybDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBhcnIgPSB1cmwuc3BsaXQoJyMnKTtcclxuICAgIGlmIChhcnIubGVuZ3RoID4gMSkge1xyXG4gICAgICBjb25zdCBoYXNoID0gYXJyWzFdO1xyXG4gICAgICBpZiAoaGFzaC5zdGFydHNXaXRoKCdjb2RlPScpKSB7XHJcbiAgICAgICAgcmV0dXJuIGhhc2g7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVMYXVuY2hDb2RlSGFzaCgpIHtcclxuICAgIGlmICh0aGlzLmFwcFNlcnZpY2UuaXNOYXRpdmUgJiYgdGhpcy5hcHBTZXJ2aWNlLmxhdW5jaFVybCkge1xyXG4gICAgICBjb25zdCBoYXNoID0gdGhpcy5nZXRDb2RlSGFzaCh0aGlzLmFwcFNlcnZpY2UubGF1bmNoVXJsKTtcclxuICAgICAgaWYgKGhhc2gpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnTnVjbGV1cy5JZGVudGl0eTogR290IGF1dGhvcml6YXRpb24gY29kZSBmcm9tIGxhdW5jaFVybCwgd2lsbCBhc3NpZ24gaXQgdG8gaGFzaC4nKTtcclxuICAgICAgICB3aW5kb3cubG9jYXRpb24uaGFzaCA9ICcjJyArIGhhc2g7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcHJlcGFyZVNjb3BlKG9mZmxpbmVBY2Nlc3M6IGJvb2xlYW4sIGFkaXRpb25hbFNjb3BlOiBzdHJpbmcpIHtcclxuICAgIGxldCBzY29wZSA9ICdvcGVuaWQnO1xyXG4gICAgaWYgKG9mZmxpbmVBY2Nlc3MpIHtcclxuICAgICAgc2NvcGUgKz0gJyBvZmZsaW5lX2FjY2Vzcyc7XHJcbiAgICB9XHJcbiAgICBpZiAoc2NvcGUpIHtcclxuICAgICAgc2NvcGUgKz0gJyAnICsgYWRpdGlvbmFsU2NvcGU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc2NvcGU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRlbGF5KG1pbGlzZWNvbmRzOiBudW1iZXIpIHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPihyZXNvbHZlID0+IHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICB9LCBtaWxpc2Vjb25kcyk7XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIl19
338
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVjbGV1cy1pZGVudGl0eS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbnVjbGV1cy1pZGVudGl0eS9zcmMvbGliL251Y2xldXMtaWRlbnRpdHkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsb0JBQW9CLEVBR3BCLHNCQUFzQixFQUN0QixxQkFBcUIsRUFDckIsbUJBQW1CLEVBQ25CLFlBQVksRUFDYixNQUFNLGlCQUFpQixDQUFDO0FBRXpCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDM0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzdELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUUzRCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUN0RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFbEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVuRCxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7O0FBS3JDLE1BQU0sT0FBTyxzQkFBc0I7SUFDakMsWUFDVSxVQUE2QixFQUNyQyxRQUF5QixFQUNqQixJQUFnQixFQUNoQixNQUFnQyxFQUNoQyxXQUF3QjtRQUp4QixlQUFVLEdBQVYsVUFBVSxDQUFtQjtRQUU3QixTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLFdBQU0sR0FBTixNQUFNLENBQTBCO1FBQ2hDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBVTFCLDJCQUFzQixHQUFHLElBQUksNEJBQTRCLEVBQUUsQ0FBQztRQUU1RCxpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUNyQixpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUlyQiw2QkFBd0IsR0FBRyxPQUFPLENBQUM7UUFmekMsTUFBTSxPQUFPLEdBQUcsSUFBSSxtQkFBbUIsRUFBRSxDQUFDO1FBQzFDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxzQkFBc0IsQ0FBQyxPQUFPLEVBQUUsSUFBSSxxQkFBcUIsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdEgsSUFBSSxDQUFDLHFCQUFxQixDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ2pGLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxZQUFZLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFhRCxJQUFXLFFBQVE7UUFDakIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFFRCxJQUFXLGVBQWU7UUFDeEIsT0FBTyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBVyx3QkFBd0I7UUFDakMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQsSUFBVywrQkFBK0I7UUFDeEMsT0FBTyxJQUFJLENBQUMsd0JBQXdCLElBQUksSUFBSSxDQUFDO0lBQy9DLENBQUM7SUFFTSxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQXNCLEtBQUs7UUFDM0MsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDMUMsT0FBTyxDQUFDLElBQUksQ0FBQywrRkFBK0YsQ0FBQyxDQUFDO1lBQzlHLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBRXpCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzVCLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixDQUFDLHNDQUFzQyxFQUFFLENBQUM7UUFFMUUsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQztRQUNsRCxJQUFJLE9BQU8sRUFBRTtZQUNYLE1BQU0sSUFBSSxLQUFLLENBQUMscUJBQXFCLEdBQUcsT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUM7U0FDMUY7YUFBTSxJQUFJLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLEVBQUU7WUFDL0MsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQzFCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUM7WUFDcEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQztZQUN0RCxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsc0JBQXNCLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztZQUNqSSxJQUFJLENBQUMsTUFBTSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3ZDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDakM7YUFBTTtZQUNMLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN6QyxJQUFJLENBQUMsR0FBRyxJQUFJLFVBQVUsRUFBRTtnQkFDdEIsTUFBTSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7YUFDcEI7U0FDRjtRQUNELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO0lBQzNCLENBQUM7SUFFTSxLQUFLLENBQUMsZUFBZSxDQUFDLFFBQWdCLEVBQUUsTUFBYztRQUMzRCxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzFCLE1BQU0sY0FBYyxHQUFHLE1BQU0sSUFBSSxDQUFDLDhCQUE4QixFQUFFLENBQUM7UUFDbkUsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxlQUFlLENBQUMsQ0FBQztRQUNwRSxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3hGLElBQUksQ0FBQyxNQUFNLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkMsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRU0sS0FBSyxDQUFDLEtBQUs7UUFDaEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMxQixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUNwRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztRQUNuRCxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFO1lBQzVCLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxFQUFFO2dCQUNwRCxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxLQUFLLEtBQUssRUFBRTtvQkFDdEMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO2lCQUNqQjtnQkFDRCxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ2xCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN4QyxJQUFJLElBQUksRUFBRTtvQkFDUixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO29CQUNqRixNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztvQkFDbEMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztpQkFDMUI7cUJBQU07b0JBQ0wsT0FBTyxDQUFDLElBQUksQ0FBQyxvRUFBb0UsRUFBRSxJQUFJLENBQUMsQ0FBQztpQkFDMUY7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO1FBQ0QsSUFBSSxDQUFDLHFCQUFxQixDQUFDLDJCQUEyQixDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRU0sS0FBSyxDQUFDLE1BQU07UUFDakIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMxQixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUNwRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztRQUM1QyxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsa0JBQWtCLEdBQUcsNEJBQTRCLEdBQUcsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3BHLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUU7WUFDNUIsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsR0FBRyxFQUFFO2dCQUNsRCxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO29CQUMzQixJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssS0FBSyxFQUFFO3dCQUMzQixPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7cUJBQ2pCO2dCQUNILENBQUMsQ0FBQyxDQUFDO2dCQUNILFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNwQixDQUFDLENBQUMsQ0FBQztZQUNILE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztTQUNsQzthQUFNO1lBQ0wsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDbkM7SUFDSCxDQUFDO0lBRU0sS0FBSyxDQUFDLGNBQWM7UUFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUMxQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7U0FDdkQ7UUFDRCxJQUFJO1lBQ0YsT0FBTyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztTQUNwQztnQkFBUztZQUNSLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7U0FDOUI7SUFDSCxDQUFDO0lBRU0sS0FBSyxDQUFDLDhCQUE4QjtRQUN6QyxJQUFJLENBQUMsSUFBSSxDQUFDLGdDQUFnQyxFQUFFO1lBQzFDLElBQUksQ0FBQyxnQ0FBZ0MsR0FBRyxJQUFJLENBQUMsc0NBQXNDLEVBQUUsQ0FBQztTQUN2RjtRQUNELElBQUk7WUFDRixPQUFPLE1BQU0sSUFBSSxDQUFDLGdDQUFnQyxDQUFDO1NBQ3BEO2dCQUFTO1lBQ1IsSUFBSSxDQUFDLGdDQUFnQyxHQUFHLElBQUksQ0FBQztTQUM5QztJQUNILENBQUM7SUFFTSxLQUFLLENBQUMscUJBQXFCO1FBQ2hDLE1BQU0sRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQ25ELElBQUksRUFBRSxFQUFFO1lBQ04sTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1lBQ3BGLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDbkYsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUM7WUFDL0QsT0FBTyxHQUFHLENBQUM7U0FDWjthQUFNO1lBQ0wsTUFBTSxLQUFLLENBQUMsc0NBQXNDLENBQUMsQ0FBQztTQUNyRDtJQUNILENBQUM7SUFFTSxLQUFLLENBQUMsdUJBQXVCO1FBQ2xDLE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFDeEUsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNWLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7U0FDcEM7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFTSxLQUFLLENBQUMsTUFBTSxDQUFDLElBQWEsRUFBRSxZQUFvQixDQUFDLENBQUM7UUFDdkQsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsb0JBQW9CLElBQUksRUFBRSxDQUFDLENBQUM7UUFDL0QsSUFBSSxTQUFTLEdBQUcsQ0FBQyxFQUFFO1lBQ2pCLEdBQUcsSUFBSSxjQUFjLFNBQVMsRUFBRSxDQUFDO1NBQ2xDO1FBQ0QsT0FBTyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQWMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRU0sS0FBSyxDQUFDLFlBQVksQ0FBQyxFQUFVO1FBQ2xDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMxRCxPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBWSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFTSxTQUFTLENBQUMsV0FBbUIsRUFBRSxRQUFnQjtRQUNwRCxNQUFNLE9BQU8sR0FBRyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNoRCxNQUFNLEdBQUcsR0FBRyxzQkFBc0IsUUFBUSxjQUFjLE9BQU8sRUFBRSxDQUFDO1FBQ2xFLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVNLEtBQUssQ0FBQyxpQ0FBaUM7UUFDNUMsTUFBTSxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDbkQsT0FBTyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsbUJBQW1CLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFTSxLQUFLLENBQUMsb0NBQW9DLENBQUMsVUFBc0I7UUFDdEUsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDM0QsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLHdCQUF3QixDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUVyRixNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUM7WUFDcEMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxRQUFRO1lBQ25CLE1BQU0sRUFBRSxNQUFNLENBQUMsWUFBWTtZQUMzQixTQUFTLEVBQUUsTUFBTSxDQUFDLG9CQUFvQjtTQUN2QyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sa0NBQWtDO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQzlDLENBQUM7SUFFTSxLQUFLLENBQUMscUNBQXFDO1FBQ2hELE1BQU0sRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQ25ELE9BQU8sSUFBSSxrQ0FBa0MsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRU0sS0FBSyxDQUFDLG9CQUFvQjtRQUMvQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ25FLE9BQU8sTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRU0sS0FBSyxDQUFDLHVCQUF1QixDQUFDLFVBQXNCO1FBQ3pELE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3RELE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVPLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxVQUFzQjtRQUNyRCxJQUFJLEdBQUcsR0FBa0IsSUFBSSxDQUFDO1FBQzlCLEdBQUc7WUFDRCxJQUFJLFVBQVUsQ0FBQyxTQUFTLEVBQUUsRUFBRTtnQkFDMUIsTUFBTSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQzthQUN4QztZQUVELElBQUk7Z0JBQ0YsR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQ3JFO1lBQUMsT0FBTyxLQUFLLEVBQUU7Z0JBQ2QsSUFBSSxLQUFLLFlBQVksWUFBWSxJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssdUJBQXVCLEVBQUU7b0JBQzlFLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDeEI7cUJBQU07b0JBQ0wsTUFBTSxLQUFLLENBQUM7aUJBQ2I7YUFDRjtTQUNGLFFBQVEsQ0FBQyxHQUFHLEVBQUU7UUFDZixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFTywyQkFBMkI7UUFDakMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7UUFFNUMsTUFBTSxNQUFNLEdBQUc7WUFDYixhQUFhLEVBQUUsVUFBVTtZQUN6QixNQUFNLEVBQUUsU0FBUztZQUNqQixXQUFXLEVBQUUsU0FBUztZQUN0QixrQkFBa0IsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQjtTQUNqRCxDQUFDO1FBRUYsT0FBTyxJQUFJLG9CQUFvQixDQUFDO1lBQzlCLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVE7WUFDL0IsWUFBWSxFQUFFLFdBQVc7WUFDekIsYUFBYSxFQUFFLG9CQUFvQixDQUFDLGtCQUFrQjtZQUN0RCxLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUM7WUFDM0QsTUFBTSxFQUFFLE1BQU07U0FDZixFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVPLEtBQUssQ0FBQyxzQ0FBc0M7UUFDbEQsSUFBSSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUN0RSxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQ3JCLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1NBQzVDO1FBQ0QsT0FBTyxLQUFLLEVBQUUsV0FBVyxDQUFDO0lBQzVCLENBQUM7SUFFTyxLQUFLLENBQUMsc0JBQXNCO1FBQ2xDLElBQUksS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN6QyxJQUFJLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUM3QixLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDakQ7UUFDRCxPQUFPLEtBQUssRUFBRSxXQUFXLENBQUM7SUFDNUIsQ0FBQztJQUVPLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxLQUFvQjtRQUN0RCxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFO1lBQzlCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsNkJBQTZCLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDdkU7UUFDRCxJQUFJO1lBQ0YsT0FBTyxNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztTQUN4QztnQkFBUztZQUNSLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7U0FDbEM7SUFDSCxDQUFDO0lBRU8sS0FBSyxDQUFDLDZCQUE2QixDQUFDLEtBQW9CO1FBQzlELElBQUksS0FBSyxFQUFFLFlBQVksRUFBRTtZQUN2QixJQUFJO2dCQUNGLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ3pFLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2hDLE9BQU8sR0FBRyxDQUFDO2FBQ1o7WUFBQyxPQUFPLEdBQUcsRUFBRTtnQkFDWixPQUFPLENBQUMsSUFBSSxDQUFDLHVEQUF1RCxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUMzRSxJQUFJLEdBQUcsQ0FBQyxPQUFPLEtBQUssZUFBZSxFQUFFO29CQUNuQyxNQUFNLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztpQkFDckI7YUFDRjtTQUNGO2FBQU07WUFDTCxPQUFPLENBQUMsSUFBSSxDQUFDLHdEQUF3RCxDQUFDLENBQUM7U0FDeEU7SUFDSCxDQUFDO0lBRU8sV0FBVyxDQUFDLEdBQVc7UUFDN0IsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzQixJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2xCLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwQixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQzVCLE9BQU8sSUFBSSxDQUFDO2FBQ2I7U0FDRjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVPLG9CQUFvQjtRQUMxQixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFO1lBQ3pELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN6RCxJQUFJLElBQUksRUFBRTtnQkFDUixPQUFPLENBQUMsR0FBRyxDQUFDLGtGQUFrRixDQUFDLENBQUM7Z0JBQ2hHLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7YUFDbkM7U0FDRjtJQUNILENBQUM7SUFFTyxZQUFZLENBQUMsYUFBc0IsRUFBRSxjQUFzQjtRQUNqRSxJQUFJLEtBQUssR0FBRyxRQUFRLENBQUM7UUFDckIsSUFBSSxhQUFhLEVBQUU7WUFDakIsS0FBSyxJQUFJLGlCQUFpQixDQUFDO1NBQzVCO1FBQ0QsSUFBSSxLQUFLLEVBQUU7WUFDVCxLQUFLLElBQUksR0FBRyxHQUFHLGNBQWMsQ0FBQztTQUMvQjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVPLEtBQUssQ0FBQyxXQUFtQjtRQUMvQixPQUFPLElBQUksT0FBTyxDQUFPLE9BQU8sQ0FBQyxFQUFFO1lBQ2pDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsT0FBTyxFQUFFLENBQUM7WUFDWixDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDbEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzttSEFwVlUsc0JBQXNCO3VIQUF0QixzQkFBc0IsY0FGckIsTUFBTTsyRkFFUCxzQkFBc0I7a0JBSGxDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBdXRob3JpemF0aW9uUmVxdWVzdCxcclxuICBUb2tlblJlc3BvbnNlLFxyXG4gIENyeXB0byxcclxuICBSZWRpcmVjdFJlcXVlc3RIYW5kbGVyLFxyXG4gIEJhc2ljUXVlcnlTdHJpbmdVdGlscyxcclxuICBMb2NhbFN0b3JhZ2VCYWNrZW5kLFxyXG4gIEFwcEF1dGhFcnJvclxyXG59IGZyb20gJ0BvcGVuaWQvYXBwYXV0aCc7XHJcblxyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFwcCB9IGZyb20gJ0BjYXBhY2l0b3IvYXBwJztcclxuaW1wb3J0IHsgQnJvd3NlciB9IGZyb20gJ0BjYXBhY2l0b3IvYnJvd3Nlcic7XHJcbmltcG9ydCB7IERldmljZSB9IGZyb20gJ0BjYXBhY2l0b3IvZGV2aWNlJztcclxuaW1wb3J0IHsgTnVjbGV1c0NyeXB0byB9IGZyb20gJy4vdXRpbHMvbnVjbGV1cy1jcnlwdG8nO1xyXG5pbXBvcnQgeyBOdWNsZXVzQXBwU2VydmljZSB9IGZyb20gJ0Brb2xla3Rvci9udWNsZXVzLWNvbW1vbic7XHJcbmltcG9ydCB7IExvY2F0aW9uU2VydmljZSB9IGZyb20gJy4vdXRpbHMvbG9jYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IEF1dGhvcml6YXRpb25SZXF1ZXN0SGFuZGxlciB9IGZyb20gJ0BvcGVuaWQvYXBwYXV0aCc7XHJcbmltcG9ydCB7IE51Y2xldXNBdXRob3JpemF0aW9uTm90aWZpZXIgfSBmcm9tICcuL3V0aWxzL251Y2xldXMtYXV0aG9yaXphdGlvbi1ub3RpZmllcic7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IE90cFJlc3BvbnNlLCBPdHBTdGF0dXMsIE90cFR5cGUgfSBmcm9tICcuL21vZGVscy9vdHAnO1xyXG5pbXBvcnQgeyBTZWNyZXRzU3RvcmUgfSBmcm9tICcuL3V0aWxzL3NlY3JldHMtc3RvcmUnO1xyXG5pbXBvcnQgeyBPaWRjQ29uZmlndXJhdGlvblNlcnZpY2UgfSBmcm9tICcuL3V0aWxzL29pZGMtY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVG9rZW5DbGllbnQgfSBmcm9tICcuL3V0aWxzL3Rva2VuLWNsaWVudCc7XHJcbmltcG9ydCB7IERldmljZUNvZGUgfSBmcm9tICcuL21vZGVscy9kZXZpY2UtY29kZSc7XHJcbmltcG9ydCB7IFNlcnZpY2VQcmluY2lwYWxSZWdpc3RyYXRpb25TdGF0dXMgfSBmcm9tICcuL21vZGVscy9zZXJ2aWNlLXByaW5jaXBhbCc7XHJcbmltcG9ydCB7IGxhc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIE51Y2xldXNJZGVudGl0eVNlcnZpY2Uge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBhcHBTZXJ2aWNlOiBOdWNsZXVzQXBwU2VydmljZSxcclxuICAgIGxvY2F0aW9uOiBMb2NhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICBwcml2YXRlIGNvbmZpZzogT2lkY0NvbmZpZ3VyYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0b2tlbkNsaWVudDogVG9rZW5DbGllbnRcclxuICApIHtcclxuICAgIGNvbnN0IHN0b3JhZ2UgPSBuZXcgTG9jYWxTdG9yYWdlQmFja2VuZCgpO1xyXG4gICAgdGhpcy5fY3J5cHRvID0gbmV3IE51Y2xldXNDcnlwdG8oKTtcclxuICAgIHRoaXMuX2F1dGhvcml6YXRpb25IYW5kbGVyID0gbmV3IFJlZGlyZWN0UmVxdWVzdEhhbmRsZXIoc3RvcmFnZSwgbmV3IEJhc2ljUXVlcnlTdHJpbmdVdGlscygpLCBsb2NhdGlvbiwgdGhpcy5fY3J5cHRvKTtcclxuICAgIHRoaXMuX2F1dGhvcml6YXRpb25IYW5kbGVyLnNldEF1dGhvcml6YXRpb25Ob3RpZmllcih0aGlzLl9hdXRob3JpemF0aW9uTm90aWZpZXIpO1xyXG4gICAgdGhpcy5fc3RvcmUgPSBuZXcgU2VjcmV0c1N0b3JlKGNvbmZpZy5jbGllbnRJZCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9hdXRob3JpemF0aW9uSGFuZGxlcjogQXV0aG9yaXphdGlvblJlcXVlc3RIYW5kbGVyO1xyXG4gIHByaXZhdGUgX2F1dGhvcml6YXRpb25Ob3RpZmllciA9IG5ldyBOdWNsZXVzQXV0aG9yaXphdGlvbk5vdGlmaWVyKCk7XHJcbiAgcHJpdmF0ZSBfY3J5cHRvOiBDcnlwdG87XHJcbiAgcHJpdmF0ZSBfaW5pdFN0YXJ0ZWQgPSBmYWxzZTtcclxuICBwcml2YXRlIF9pbml0aWFsaXplZCA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX3JlZnJlc2hUb2tlblByb21pc2U6IFByb21pc2U8VG9rZW5SZXNwb25zZT47XHJcbiAgcHJpdmF0ZSBfZ2V0VG9rZW5Qcm9taXNlOiBQcm9taXNlPHN0cmluZz47XHJcbiAgcHJpdmF0ZSBfZ2V0U2VydmljZVByaW5jaXBhbFRva2VuUHJvbWlzZTogUHJvbWlzZTxzdHJpbmc+O1xyXG4gIHByaXZhdGUgX3NlcnZpY2VQcmluY2lwYWxUb2tlbklkID0gJ19zdmNwJztcclxuICBwcml2YXRlIF9zdG9yZTogU2VjcmV0c1N0b3JlO1xyXG5cclxuICBwdWJsaWMgZ2V0IGlkZW50aXR5KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3N0b3JlLmdldElkZW50aXR5KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGlzQXV0aGVudGljYXRlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLmlkZW50aXR5ICE9IG51bGw7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHNlcnZpY2VQcmluY2lwYWxJZGVudGl0eSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9zdG9yZS5nZXRJZGVudGl0eSh0aGlzLl9zZXJ2aWNlUHJpbmNpcGFsVG9rZW5JZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGlzU2VydmljZVByaW5jaXBhbEF1dGhlbnRpY2F0ZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zZXJ2aWNlUHJpbmNpcGFsSWRlbnRpdHkgIT0gbnVsbDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBpbml0KHN0YXJ0TG9naW46IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHRoaXMuX2luaXRTdGFydGVkIHx8IHRoaXMuX2luaXRpYWxpemVkKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybignTnVjbGV1cy5JZGVudGl0eTogQXV0aCBpbml0aWFsaXphdGlvbiB3YXMgYWxyZWFkeSBzdGFydGVkLiBEb25cXCd0IGNhbGwgaW5pdCgpIG11bHRpcGxlIHRpbWVzIScpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLl9pbml0U3RhcnRlZCA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5oYW5kbGVMYXVuY2hDb2RlSGFzaCgpO1xyXG4gICAgYXdhaXQgdGhpcy5fYXV0aG9yaXphdGlvbkhhbmRsZXIuY29tcGxldGVBdXRob3JpemF0aW9uUmVxdWVzdElmUG9zc2libGUoKTtcclxuXHJcbiAgICBjb25zdCBhdXRoRXJyID0gdGhpcy5fYXV0aG9yaXphdGlvbk5vdGlmaWVyLmVycm9yO1xyXG4gICAgaWYgKGF1dGhFcnIpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdXRob3JpemF0aW9uIGVycjogJyArIGF1dGhFcnIuZXJyb3IgKyAnOiAnICsgYXV0aEVyci5lcnJvckRlc2NyaXB0aW9uKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5fYXV0aG9yaXphdGlvbk5vdGlmaWVyLnJlc3BvbnNlKSB7XHJcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5oYXNoID0gJyc7XHJcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLl9hdXRob3JpemF0aW9uTm90aWZpZXIucmVxdWVzdDtcclxuICAgICAgY29uc3QgcmVzcG9uc2UgPSB0aGlzLl9hdXRob3JpemF0aW9uTm90aWZpZXIucmVzcG9uc2U7XHJcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMudG9rZW5DbGllbnQuZ2V0QnlBdXRob3JpemF0aW9uQ29kZShyZXF1ZXN0LnJlZGlyZWN0VXJpLCByZXNwb25zZS5jb2RlLCByZXF1ZXN0LmludGVybmFsWydjb2RlX3ZlcmlmaWVyJ10pO1xyXG4gICAgICB0aGlzLl9zdG9yZS5zZXREZWZhdWx0SWRlbnRpdHlJZChudWxsKTtcclxuICAgICAgYXdhaXQgdGhpcy5fc3RvcmUuc2V0VG9rZW4ocmVzKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuX3N0b3JlLmdldFRva2VuKCk7XHJcbiAgICAgIGlmICghcmVzICYmIHN0YXJ0TG9naW4pIHtcclxuICAgICAgICBhd2FpdCB0aGlzLmxvZ2luKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuX2luaXRpYWxpemVkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBsb2dpbldpdGhTZWNyZXQocHJvdmlkZXI6IHN0cmluZywgc2VjcmV0OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuX3N0b3JlLnJlbW92ZVRva2VuKCk7XHJcbiAgICBjb25zdCBhc3NlcnRpb25Ub2tlbiA9IGF3YWl0IHRoaXMuZ2V0U2VydmljZVByaW5jaXBhbEFjY2Vzc1Rva2VuKCk7XHJcbiAgICBjb25zdCBzY29wZSA9IHRoaXMucHJlcGFyZVNjb3BlKHRydWUsIHRoaXMuY29uZmlnPy5yZXF1ZXN0ZWRTY29wZXMpO1xyXG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy50b2tlbkNsaWVudC5nZXRCeVNlY3JldChwcm92aWRlciwgc2VjcmV0LCBhc3NlcnRpb25Ub2tlbiwgc2NvcGUpO1xyXG4gICAgdGhpcy5fc3RvcmUuc2V0RGVmYXVsdElkZW50aXR5SWQobnVsbCk7XHJcbiAgICBhd2FpdCB0aGlzLl9zdG9yZS5zZXRUb2tlbihyZXMpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGxvZ2luKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5fc3RvcmUucmVtb3ZlVG9rZW4oKTtcclxuICAgIGNvbnN0IGNvbmZpZyA9IGF3YWl0IHRoaXMuY29uZmlnLmdldENvbmZpZ3VyYXRpb24oKTtcclxuICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLnByZXBhcmVBdXRob3JpemF0aW9uUmVxdWVzdCgpO1xyXG4gICAgaWYgKHRoaXMuYXBwU2VydmljZS5pc05hdGl2ZSkge1xyXG4gICAgICBjb25zdCBsaXN0ZW5lciA9IEFwcC5hZGRMaXN0ZW5lcignYXBwVXJsT3BlbicsIGRhdGEgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmFwcFNlcnZpY2UucGxhdGZvcm0gPT09ICdpb3MnKSB7XHJcbiAgICAgICAgICBCcm93c2VyLmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxpc3RlbmVyLnJlbW92ZSgpO1xyXG4gICAgICAgIGNvbnN0IGhhc2ggPSB0aGlzLmdldENvZGVIYXNoKGRhdGEudXJsKTtcclxuICAgICAgICBpZiAoaGFzaCkge1xyXG4gICAgICAgICAgY29uc3QgdGFyZ2V0VXJsID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbiArIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSArICcjJyArIGhhc2g7XHJcbiAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKHRhcmdldFVybCk7XHJcbiAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnNvbGUud2FybignTnVjbGV1cy5JZGVudGl0eTogUmVkaXJlY3QgdXJsIGRpZCBub3QgY29udGFpbiBhdXRob3JpemF0aW9uIGNvZGUhJywgZGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHRoaXMuX2F1dGhvcml6YXRpb25IYW5kbGVyLnBlcmZvcm1BdXRob3JpemF0aW9uUmVxdWVzdChjb25maWcsIHJlcXVlc3QpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGxvZ291dCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuX3N0b3JlLnJlbW92ZVRva2VuKCk7XHJcbiAgICBjb25zdCBjb25maWcgPSBhd2FpdCB0aGlzLmNvbmZpZy5nZXRDb25maWd1cmF0aW9uKCk7XHJcbiAgICBjb25zdCByZWRpcmVjdFVybCA9IHRoaXMuY29uZmlnLnJlZGlyZWN0VXJsO1xyXG4gICAgY29uc3QgbG9nb3V0VXJsID0gY29uZmlnLmVuZFNlc3Npb25FbmRwb2ludCArICc/cG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpPScgKyBlbmNvZGVVUkkocmVkaXJlY3RVcmwpO1xyXG4gICAgaWYgKHRoaXMuYXBwU2VydmljZS5pc05hdGl2ZSkge1xyXG4gICAgICBjb25zdCBsaXN0ZW5lciA9IEFwcC5hZGRMaXN0ZW5lcignYXBwVXJsT3BlbicsICgpID0+IHtcclxuICAgICAgICBEZXZpY2UuZ2V0SW5mbygpLnRoZW4oaW5mbyA9PiB7XHJcbiAgICAgICAgICBpZiAoaW5mby5wbGF0Zm9ybSA9PT0gJ2lvcycpIHtcclxuICAgICAgICAgICAgQnJvd3Nlci5jbG9zZSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGxpc3RlbmVyLnJlbW92ZSgpO1xyXG4gICAgICB9KTtcclxuICAgICAgQnJvd3Nlci5vcGVuKHsgdXJsOiBsb2dvdXRVcmwgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKGxvZ291dFVybCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0QWNjZXNzVG9rZW4oKSB7XHJcbiAgICBpZiAoIXRoaXMuX2dldFRva2VuUHJvbWlzZSkge1xyXG4gICAgICB0aGlzLl9nZXRUb2tlblByb21pc2UgPSB0aGlzLmdldEFjY2Vzc1Rva2VuSW50ZXJuYWwoKTtcclxuICAgIH1cclxuICAgIHRyeSB7XHJcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9nZXRUb2tlblByb21pc2U7XHJcbiAgICB9IGZpbmFsbHkge1xyXG4gICAgICB0aGlzLl9nZXRUb2tlblByb21pc2UgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFNlcnZpY2VQcmluY2lwYWxBY2Nlc3NUb2tlbigpIHtcclxuICAgIGlmICghdGhpcy5fZ2V0U2VydmljZVByaW5jaXBhbFRva2VuUHJvbWlzZSkge1xyXG4gICAgICB0aGlzLl9nZXRTZXJ2aWNlUHJpbmNpcGFsVG9rZW5Qcm9taXNlID0gdGhpcy5nZXRTZXJ2aWNlUHJpbmNpcGFsQWNjZXNzVG9rZW5JbnRlcm5hbCgpO1xyXG4gICAgfVxyXG4gICAgdHJ5IHtcclxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX2dldFNlcnZpY2VQcmluY2lwYWxUb2tlblByb21pc2U7XHJcbiAgICB9IGZpbmFsbHkge1xyXG4gICAgICB0aGlzLl9nZXRTZXJ2aWNlUHJpbmNpcGFsVG9rZW5Qcm9taXNlID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBsb2dpblNlcnZpY2VQcmluY2lwYWwoKSB7XHJcbiAgICBjb25zdCBzcCA9IGF3YWl0IHRoaXMuX3N0b3JlLmdldFNlcnZpY2VQcmluY2lwYWwoKTtcclxuICAgIGlmIChzcCkge1xyXG4gICAgICBjb25zdCBzY29wZSA9IHRoaXMucHJlcGFyZVNjb3BlKGZhbHNlLCB0aGlzLmNvbmZpZy5zZXJ2aWNlUHJpbmNpcGFsUmVxdWVzdGVkU2NvcGVzKTtcclxuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy50b2tlbkNsaWVudC5nZXRCeUNsaWVudENyZWRlbnRpYWxzKHNwLmlkLCBzcC5zZWNyZXQsIHNjb3BlKTtcclxuICAgICAgYXdhaXQgdGhpcy5fc3RvcmUuc2V0VG9rZW4ocmVzLCB0aGlzLl9zZXJ2aWNlUHJpbmNpcGFsVG9rZW5JZCk7XHJcbiAgICAgIHJldHVybiByZXM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aHJvdyBFcnJvcignU2VydmljZSBwcmluY2lwYWwgaXMgbm90IHJlZ2lzdGVyZWQhJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgbG9naW5Bc1NlcnZpY2VQcmluY2lwYWwoKSB7XHJcbiAgICBjb25zdCB0b2tlbiA9IGF3YWl0IHRoaXMuX3N0b3JlLmdldFRva2VuKHRoaXMuX3NlcnZpY2VQcmluY2lwYWxUb2tlbklkKTtcclxuICAgIGlmICghdG9rZW4pIHtcclxuICAgICAgYXdhaXQgdGhpcy5sb2dpblNlcnZpY2VQcmluY2lwYWwoKTtcclxuICAgIH1cclxuICAgIHRoaXMuX3N0b3JlLnNldERlZmF1bHRJZGVudGl0eUlkKHRoaXMuX3NlcnZpY2VQcmluY2lwYWxUb2tlbklkKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRPdHAodHlwZTogT3RwVHlwZSwgZXhwaXJlc0luOiBudW1iZXIgPSAtMSkge1xyXG4gICAgbGV0IHVybCA9IHRoaXMuY29uZmlnLmdldFNlcnZlclVybChgL290cC9jcmVhdGU/dHlwZT0ke3R5cGV9YCk7XHJcbiAgICBpZiAoZXhwaXJlc0luID4gMCkge1xyXG4gICAgICB1cmwgKz0gYCZleHBpcmVzSW49JHtleHBpcmVzSW59YDtcclxuICAgIH1cclxuICAgIHJldHVybiBsYXN0VmFsdWVGcm9tKHRoaXMuaHR0cC5nZXQ8T3RwUmVzcG9uc2U+KHVybCkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldE90cFN0YXR1cyhpZDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCB1cmwgPSB0aGlzLmNvbmZpZy5nZXRTZXJ2ZXJVcmwoYC9vdHAvc3RhdHVzLyR7aWR9YCk7XHJcbiAgICByZXR1cm4gbGFzdFZhbHVlRnJvbSh0aGlzLmh0dHAuZ2V0PE90cFN0YXR1cz4odXJsKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0T3RwVXJsKHJlZGlyZWN0VXJsOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGVuY29kZWQgPSBlbmNvZGVVUklDb21wb25lbnQocmVkaXJlY3RVcmwpO1xyXG4gICAgY29uc3QgdXJsID0gYC9vdHAvYXV0aD9vdHBWYWx1ZT0ke3Bhc3N3b3JkfSZyZXR1cm5Vcmw9JHtlbmNvZGVkfWA7XHJcbiAgICByZXR1cm4gdGhpcy5jb25maWcuZ2V0U2VydmVyVXJsKHVybCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgc3RhcnRTZXJ2aWNlUHJpbmNpcGFsUmVnaXN0cmF0aW9uKCkge1xyXG4gICAgY29uc3Qgc3AgPSBhd2FpdCB0aGlzLl9zdG9yZS5nZXRTZXJ2aWNlUHJpbmNpcGFsKCk7XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy50b2tlbkNsaWVudC5nZXRSZWdpc3RyYXRpb25Db2RlKHNwPy5pZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgY29tcGxldGVTZXJ2aWNlUHJpbmNpcGFsUmVnaXN0cmF0aW9uKGRldmljZUNvZGU6IERldmljZUNvZGUpIHtcclxuICAgIGNvbnN0IHRva2VuUmVzID0gYXdhaXQgdGhpcy53YWl0Rm9yRGV2aWNlVG9rZW4oZGV2aWNlQ29kZSk7XHJcbiAgICBjb25zdCByZWdSZXMgPSBhd2FpdCB0aGlzLnRva2VuQ2xpZW50LnJlZ2lzdGVyU2VydmljZVByaW5jaXBhbCh0b2tlblJlcy5hY2Nlc3NUb2tlbik7XHJcblxyXG4gICAgYXdhaXQgdGhpcy5fc3RvcmUuc2V0U2VydmljZVByaW5jaXBhbCh7XHJcbiAgICAgIGlkOiByZWdSZXMuY2xpZW50SWQsXHJcbiAgICAgIHNlY3JldDogcmVnUmVzLmNsaWVudFNlY3JldCxcclxuICAgICAgZXhwaXJlc0F0OiByZWdSZXMuc2VjcmV0RXhwaXJhdGlvbkRhdGVcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbW92ZVNlcnZpY2VQcmluY2lwYWxSZWdpc3RyYXRpb24oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3RvcmUucmVtb3ZlU2VydmljZVByaW5jaXBhbCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFNlcnZpY2VQcmluY2lwYWxSZWdpc3RyYXRpb25TdGF0dXMoKSB7XHJcbiAgICBjb25zdCBzcCA9IGF3YWl0IHRoaXMuX3N0b3JlLmdldFNlcnZpY2VQcmluY2lwYWwoKTtcclxuICAgIHJldHVybiBuZXcgU2VydmljZVByaW5jaXBhbFJlZ2lzdHJhdGlvblN0YXR1cyhzcCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgc3RhcnREZXZpY2VDb2RlTG9naW4oKSB7XHJcbiAgICBjb25zdCBzY29wZSA9IHRoaXMucHJlcGFyZVNjb3BlKHRydWUsIHRoaXMuY29uZmlnLnJlcXVlc3RlZFNjb3Blcyk7XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy50b2tlbkNsaWVudC5nZXREZXZpY2VDb2RlKHNjb3BlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjb21wbGV0ZURldmljZUNvZGVMb2dpbihkZXZpY2VDb2RlOiBEZXZpY2VDb2RlKSB7XHJcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLndhaXRGb3JEZXZpY2VUb2tlbihkZXZpY2VDb2RlKTtcclxuICAgIGF3YWl0IHRoaXMuX3N0b3JlLnNldFRva2VuKHJlcyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHdhaXRGb3JEZXZpY2VUb2tlbihkZXZpY2VDb2RlOiBEZXZpY2VDb2RlKSB7XHJcbiAgICBsZXQgcmVzOiBUb2tlblJlc3BvbnNlID0gbnVsbDtcclxuICAgIGRvIHtcclxuICAgICAgaWYgKGRldmljZUNvZGUuaXNFeHBpcmVkKCkpIHtcclxuICAgICAgICB0aHJvdyBFcnJvcignRGV2aWNlIGNvZGUgaXMgZXhwaXJlZCEnKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdHJ5IHtcclxuICAgICAgICByZXMgPSBhd2FpdCB0aGlzLnRva2VuQ2xpZW50LmdldEJ5RGV2aWNlQ29kZShkZXZpY2VDb2RlLmRldmljZUNvZGUpO1xyXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEFwcEF1dGhFcnJvciAmJiBlcnJvci5tZXNzYWdlID09PSAnYXV0aG9yaXphdGlvbl9wZW5kaW5nJykge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5kZWxheSgyMDAwKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IHdoaWxlICghcmVzKTtcclxuICAgIHJldHVybiByZXM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHByZXBhcmVBdXRob3JpemF0aW9uUmVxdWVzdCgpOiBBdXRob3JpemF0aW9uUmVxdWVzdCB7XHJcbiAgICBjb25zdCByZWRpcmVjdFVyaSA9IHRoaXMuY29uZmlnLnJlZGlyZWN0VXJsO1xyXG5cclxuICAgIGNvbnN0IHBhcmFtcyA9IHtcclxuICAgICAgcmVzcG9uc2VfbW9kZTogJ2ZyYWdtZW50JyxcclxuICAgICAgcHJvbXB0OiAnY29uc2VudCcsXHJcbiAgICAgIGFjY2Vzc190eXBlOiAnb2ZmbGluZScsXHJcbiAgICAgIGF1dGhfcHJvdmlkZXJfaGludDogdGhpcy5jb25maWcuYXV0aFByb3ZpZGVySGludFxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gbmV3IEF1dGhvcml6YXRpb25SZXF1ZXN0KHtcclxuICAgICAgY2xpZW50X2lkOiB0aGlzLmNvbmZpZy5jbGllbnRJZCxcclxuICAgICAgcmVkaXJlY3RfdXJpOiByZWRpcmVjdFVyaSxcclxuICAgICAgcmVzcG9uc2VfdHlwZTogQXV0aG9yaXphdGlvblJlcXVlc3QuUkVTUE9OU0VfVFlQRV9DT0RFLFxyXG4gICAgICBzY29wZTogdGhpcy5wcmVwYXJlU2NvcGUodHJ1ZSwgdGhpcy5jb25maWcucmVxdWVzdGVkU2NvcGVzKSxcclxuICAgICAgZXh0cmFzOiBwYXJhbXMsXHJcbiAgICB9LCB0aGlzLl9jcnlwdG8sIHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBnZXRTZXJ2aWNlUHJpbmNpcGFsQWNjZXNzVG9rZW5JbnRlcm5hbCgpIHtcclxuICAgIGxldCB0b2tlbiA9IGF3YWl0IHRoaXMuX3N0b3JlLmdldFRva2VuKHRoaXMuX3NlcnZpY2VQcmluY2lwYWxUb2tlbklkKTtcclxuICAgIGlmICghdG9rZW4/LmlzVmFsaWQoKSkge1xyXG4gICAgICB0b2tlbiA9IGF3YWl0IHRoaXMubG9naW5TZXJ2aWNlUHJpbmNpcGFsKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdG9rZW4/LmFjY2Vzc1Rva2VuO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBnZXRBY2Nlc3NUb2tlbkludGVybmFsKCkge1xyXG4gICAgbGV0IHRva2VuID0gYXdhaXQgdGhpcy5fc3RvcmUuZ2V0VG9rZW4oKTtcclxuICAgIGlmICh0b2tlbiAmJiAhdG9rZW4uaXNWYWxpZCgpKSB7XHJcbiAgICAgIHRva2VuID0gYXdhaXQgdGhpcy5sb2dpbldpdGhSZWZyZXNoVG9rZW4odG9rZW4pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRva2VuPy5hY2Nlc3NUb2tlbjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgbG9naW5XaXRoUmVmcmVzaFRva2VuKHRva2VuOiBUb2tlblJlc3BvbnNlKSB7XHJcbiAgICBpZiAoIXRoaXMuX3JlZnJlc2hUb2tlblByb21pc2UpIHtcclxuICAgICAgdGhpcy5fcmVmcmVzaFRva2VuUHJvbWlzZSA9IHRoaXMubG9naW5XaXRoUmVmcmVzaFRva2VuSW50ZXJuYWwodG9rZW4pO1xyXG4gICAgfVxyXG4gICAgdHJ5IHtcclxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX3JlZnJlc2hUb2tlblByb21pc2U7XHJcbiAgICB9IGZpbmFsbHkge1xyXG4gICAgICB0aGlzLl9yZWZyZXNoVG9rZW5Qcm9taXNlID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgbG9naW5XaXRoUmVmcmVzaFRva2VuSW50ZXJuYWwodG9rZW46IFRva2VuUmVzcG9uc2UpIHtcclxuICAgIGlmICh0b2tlbj8ucmVmcmVzaFRva2VuKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy50b2tlbkNsaWVudC5nZXRCeVJlZnJlc2hUb2tlbih0b2tlbi5yZWZyZXNoVG9rZW4pO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX3N0b3JlLnNldFRva2VuKHJlcyk7XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKCdOdWNsZXVzLklkZW50aXR5OiBGYWlsZWQgdG8gbG9naW4gd2l0aCByZWZyZXNoIHRva2VuLicsIGVycik7XHJcbiAgICAgICAgaWYgKGVyci5tZXNzYWdlID09PSAnaW52YWxpZF9ncmFudCcpIHtcclxuICAgICAgICAgIGF3YWl0IHRoaXMubG9nb3V0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ051Y2xldXMuSWRlbnRpdHk6IFRoZXJlIGlzIG5vIHJlZnJlc2ggdG9rZW4gYXZhaWxhYmxlLicpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRDb2RlSGFzaCh1cmw6IHN0cmluZykge1xyXG4gICAgY29uc3QgYXJyID0gdXJsLnNwbGl0KCcjJyk7XHJcbiAgICBpZiAoYXJyLmxlbmd0aCA+IDEpIHtcclxuICAgICAgY29uc3QgaGFzaCA9IGFyclsxXTtcclxuICAgICAgaWYgKGhhc2guc3RhcnRzV2l0aCgnY29kZT0nKSkge1xyXG4gICAgICAgIHJldHVybiBoYXNoO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlTGF1bmNoQ29kZUhhc2goKSB7XHJcbiAgICBpZiAodGhpcy5hcHBTZXJ2aWNlLmlzTmF0aXZlICYmIHRoaXMuYXBwU2VydmljZS5sYXVuY2hVcmwpIHtcclxuICAgICAgY29uc3QgaGFzaCA9IHRoaXMuZ2V0Q29kZUhhc2godGhpcy5hcHBTZXJ2aWNlLmxhdW5jaFVybCk7XHJcbiAgICAgIGlmIChoYXNoKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ051Y2xldXMuSWRlbnRpdHk6IEdvdCBhdXRob3JpemF0aW9uIGNvZGUgZnJvbSBsYXVuY2hVcmwsIHdpbGwgYXNzaWduIGl0IHRvIGhhc2guJyk7XHJcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmhhc2ggPSAnIycgKyBoYXNoO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHByZXBhcmVTY29wZShvZmZsaW5lQWNjZXNzOiBib29sZWFuLCBhZGl0aW9uYWxTY29wZTogc3RyaW5nKSB7XHJcbiAgICBsZXQgc2NvcGUgPSAnb3BlbmlkJztcclxuICAgIGlmIChvZmZsaW5lQWNjZXNzKSB7XHJcbiAgICAgIHNjb3BlICs9ICcgb2ZmbGluZV9hY2Nlc3MnO1xyXG4gICAgfVxyXG4gICAgaWYgKHNjb3BlKSB7XHJcbiAgICAgIHNjb3BlICs9ICcgJyArIGFkaXRpb25hbFNjb3BlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHNjb3BlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBkZWxheShtaWxpc2Vjb25kczogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4ocmVzb2x2ZSA9PiB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgfSwgbWlsaXNlY29uZHMpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -6,8 +6,13 @@ export class SecretsStore {
6
6
  constructor(clientId) {
7
7
  this._tokens = {};
8
8
  this._identities = {};
9
- this._tokenStorageKeyPrefix = `Nucleus.Identity.${clientId}`; // do not change this or login fith existing refresh tokens will fail
10
- this._servicePrincipalKey = `Nucleus.Identity.${clientId}.SvcP`;
9
+ // this specify which identity id is used by default, when If id is not specified in getToken or getIdentity
10
+ this._defaultIdentityId = null;
11
+ this._defaultIdentityIdStorageKey = null;
12
+ this._tokenStorageKeyPrefix = `Nucleus.Identity.${clientId}`; // do not change this or login with existing tokens will fail
13
+ this._servicePrincipalKey = `${this._tokenStorageKeyPrefix}.SvcP`;
14
+ this._defaultIdentityIdStorageKey = `${this._tokenStorageKeyPrefix}.IdId`;
15
+ this._defaultIdentityId = localStorage.getItem(this._defaultIdentityIdStorageKey);
11
16
  }
12
17
  removeServicePrincipal() {
13
18
  this._servicePrincipal = null;
@@ -30,6 +35,15 @@ export class SecretsStore {
30
35
  const key = this.getTokenKey(id);
31
36
  return this._identities[key];
32
37
  }
38
+ setDefaultIdentityId(id) {
39
+ this._defaultIdentityId = id;
40
+ if (this._defaultIdentityId) {
41
+ localStorage.setItem(this._defaultIdentityIdStorageKey, this._defaultIdentityId);
42
+ }
43
+ else {
44
+ localStorage.removeItem(this._defaultIdentityIdStorageKey);
45
+ }
46
+ }
33
47
  async getToken(id = null) {
34
48
  const key = this.getTokenKey(id);
35
49
  // if token is not there or it is invalid we check storage again before returning
@@ -74,6 +88,9 @@ export class SecretsStore {
74
88
  }
75
89
  }
76
90
  getTokenKey(id = null) {
91
+ if (!id) {
92
+ id = this._defaultIdentityId;
93
+ }
77
94
  return id ? `${this._tokenStorageKeyPrefix}.${id}` : this._tokenStorageKeyPrefix;
78
95
  }
79
96
  clear(key) {
@@ -97,4 +114,4 @@ export class SecretsStore {
97
114
  }
98
115
  }
99
116
  }
100
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjcmV0cy1zdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL251Y2xldXMtaWRlbnRpdHkvc3JjL2xpYi91dGlscy9zZWNyZXRzLXN0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8saUNBQWlDLENBQUM7QUFDekMsT0FBTyxFQUFFLGFBQWEsRUFBcUIsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFOUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFdEUsTUFBTSxPQUFPLFlBQVk7SUFDdkIsWUFBWSxRQUFnQjtRQU1wQixZQUFPLEdBQW9DLEVBQUUsQ0FBQztRQUM5QyxnQkFBVyxHQUErQixFQUFFLENBQUM7UUFObkQsSUFBSSxDQUFDLHNCQUFzQixHQUFHLG9CQUFvQixRQUFRLEVBQUUsQ0FBQyxDQUFDLHFFQUFxRTtRQUNuSSxJQUFJLENBQUMsb0JBQW9CLEdBQUcsb0JBQW9CLFFBQVEsT0FBTyxDQUFDO0lBQ2xFLENBQUM7SUFRTSxzQkFBc0I7UUFDM0IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztRQUM5QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVNLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxnQkFBa0M7UUFDakUsSUFBSSxDQUFDLGlCQUFpQixHQUFHLGdCQUFnQixDQUFDO1FBQzFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRU0sS0FBSyxDQUFDLG1CQUFtQjtRQUM5QixJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQzNCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxNQUFN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QUNGO0lBQ0gsQ0FBQztJQUVPLFdBQVcsQ0FBQyxLQUFhLElBQUk7UUFDbkMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUM7SUFDbkYsQ0FBQztJQUVPLEtBQUssQ0FBQyxHQUFXO1FBQ3ZCLE9BQU8sbUJBQW1CLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRU8sSUFBSSxDQUFJLEdBQVcsRUFBRSxLQUFRO1FBQ25DLE9BQU8sbUJBQW1CLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRU8sS0FBSyxDQUFDLElBQUksQ0FBSSxHQUFXO1FBQy9CLElBQUk7WUFDRixNQUFNLENBQUMsR0FBRyxNQUFNLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDakQsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFO2dCQUNaLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFNLENBQUM7YUFDakM7aUJBQU07Z0JBQ0wsT0FBTyxJQUFJLENBQUM7YUFDYjtTQUNGO1FBQUMsTUFBTTtZQUNOLE9BQU8sSUFBSSxDQUFDO1NBQ2I7SUFDSCxDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJ2NhcGFjaXRvci1zZWN1cmUtc3RvcmFnZS1wbHVnaW4nO1xyXG5pbXBvcnQgeyBUb2tlblJlc3BvbnNlLCBUb2tlblJlc3BvbnNlSnNvbiB9IGZyb20gJ0BvcGVuaWQvYXBwYXV0aCc7XHJcbmltcG9ydCB7IElkZW50aXR5IH0gZnJvbSAnLi4vbW9kZWxzL2lkZW50aXR5JztcclxuaW1wb3J0IHsgU2VydmljZVByaW5jaXBhbCB9IGZyb20gJy4uL21vZGVscy9zZXJ2aWNlLXByaW5jaXBhbCc7XHJcbmltcG9ydCB7IFNlY3VyZVN0b3JhZ2VQbHVnaW4gfSBmcm9tICdjYXBhY2l0b3Itc2VjdXJlLXN0b3JhZ2UtcGx1Z2luJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTZWNyZXRzU3RvcmUge1xyXG4gIGNvbnN0cnVjdG9yKGNsaWVudElkOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX3Rva2VuU3RvcmFnZUtleVByZWZpeCA9IGBOdWNsZXVzLklkZW50aXR5LiR7Y2xpZW50SWR9YDsgLy8gZG8gbm90IGNoYW5nZSB0aGlzIG9yIGxvZ2luIGZpdGggZXhpc3RpbmcgcmVmcmVzaCB0b2tlbnMgd2lsbCBmYWlsXHJcbiAgICB0aGlzLl9zZXJ2aWNlUHJpbmNpcGFsS2V5ID0gYE51Y2xldXMuSWRlbnRpdHkuJHtjbGllbnRJZH0uU3ZjUGA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF90b2tlblN0b3JhZ2VLZXlQcmVmaXg6IHN0cmluZztcclxuICBwcml2YXRlIF90b2tlbnM6IHsgW2lkOiBzdHJpbmddOiBUb2tlblJlc3BvbnNlIH0gPSB7fTtcclxuICBwcml2YXRlIF9pZGVudGl0aWVzOiB7IFtpZDogc3RyaW5nXTogSWRlbnRpdHkgfSA9IHt9O1xyXG4gIHByaXZhdGUgX3NlcnZpY2VQcmluY2lwYWxLZXk7XHJcbiAgcHJpdmF0ZSBfc2VydmljZVByaW5jaXBhbDogU2VydmljZVByaW5jaXBhbDtcclxuXHJcbiAgcHVibGljIHJlbW92ZVNlcnZpY2VQcmluY2lwYWwoKSB7XHJcbiAgICB0aGlzLl9zZXJ2aWNlUHJpbmNpcGFsID0gbnVsbDtcclxuICAgIHJldHVybiB0aGlzLmNsZWFyKHRoaXMuX3NlcnZpY2VQcmluY2lwYWxLZXkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHNldFNlcnZpY2VQcmluY2lwYWwoc2VydmljZVByaW5jaXBhbDogU2VydmljZVByaW5jaXBhbCkge1xyXG4gICAgdGhpcy5fc2VydmljZVByaW5jaXBhbCA9IHNlcnZpY2VQcmluY2lwYWw7XHJcbiAgICBhd2FpdCB0aGlzLnNhdmUodGhpcy5fc2VydmljZVByaW5jaXBhbEtleSwgc2VydmljZVByaW5jaXBhbCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0U2VydmljZVByaW5jaXBhbCgpIHtcclxuICAgIGlmICghdGhpcy5fc2VydmljZVByaW5jaXBhbCkge1xyXG4gICAgICB0aGlzLl9zZXJ2aWNlUHJpbmNpcGFsID0gYXdhaXQgdGhpcy5sb2FkPFNlcnZpY2VQcmluY2lwYWw+KHRoaXMuX3NlcnZpY2VQcmluY2lwYWxLZXkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuX3NlcnZpY2VQcmluY2lwYWw7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0VG9rZW4odG9rZW46IFRva2VuUmVzcG9uc2UsIGlkOiBzdHJpbmcgPSBudWxsKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zZXRUb2tlbkludGVybmFsKHRva2VuLCB0cnVlLCBpZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0SWRlbnRpdHkoaWQ6IHN0cmluZyA9IG51bGwpIHtcclxuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0VG9rZW5LZXkoaWQpO1xyXG4gICAgcmV0dXJuIHRoaXMuX2lkZW50aXRpZXNba2V5XTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRUb2tlbihpZDogc3RyaW5nID0gbnVsbCkge1xyXG4gICAgY29uc3Qga2V5ID0gdGhpcy5nZXRUb2tlbktleShpZCk7XHJcblxyXG4gICAgLy8gaWYgdG9rZW4gaXMgbm90IHRoZXJlIG9yIGl0IGlzIGludmFsaWQgd2UgY2hlY2sgc3RvcmFnZSBhZ2FpbiBiZWZvcmUgcmV0dXJuaW5nXHJcbiAgICBpZiAoIXRoaXMuX3Rva2Vuc1trZXldIHx8ICF0aGlzLl90b2tlbnNba2V5XS5pc1ZhbGlkKCkpIHtcclxuICAgICAgYXdhaXQgdGhpcy5yZWxvYWRUb2tlbkZyb21TdG9yYWdlKGlkKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLl90b2tlbnNba2V5XTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZW1vdmVUb2tlbihpZDogc3RyaW5nID0gbnVsbCkge1xyXG4gICAgY29uc3Qga2V5ID0gdGhpcy5nZXRUb2tlbktleShpZCk7XHJcbiAgICBkZWxldGUgdGhpcy5fdG9rZW5zW2tleV07XHJcbiAgICBkZWxldGUgdGhpcy5faWRlbnRpdGllc1trZXldO1xyXG4gICAgcmV0dXJuIHRoaXMuY2xlYXIoa2V5KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgcmVsb2FkVG9rZW5Gcm9tU3RvcmFnZShpZDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldFRva2VuS2V5KGlkKTtcclxuICAgIGNvbnN0IHN0b3JlZFRva2VuID0gYXdhaXQgdGhpcy5sb2FkPFRva2VuUmVzcG9uc2VKc29uPihrZXkpO1xyXG4gICAgaWYgKHN0b3JlZFRva2VuKSB7XHJcbiAgICAgIGNvbnN0IHJlcyA9IG5ldyBUb2tlblJlc3BvbnNlKHN0b3JlZFRva2VuKTtcclxuICAgICAgaWYgKHJlcz8uYWNjZXNzVG9rZW4gfHwgcmVzPy5pZFRva2VuKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5zZXRUb2tlbkludGVybmFsKHJlcywgZmFsc2UsIGlkKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHNldFRva2VuSW50ZXJuYWwodG9rZW46IFRva2VuUmVzcG9uc2UsIHNhdmU6IGJvb2xlYW4sIGlkOiBzdHJpbmcgPSBudWxsKSB7XHJcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldFRva2VuS2V5KGlkKTtcclxuICAgIGlmICh0b2tlbiA9PSBudWxsKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMucmVtb3ZlVG9rZW4oaWQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fdG9rZW5zW2tleV0gPSB0b2tlbjtcclxuICAgICAgdGhpcy5faWRlbnRpdGllc1trZXldID0gSWRlbnRpdHkuY3JlYXRlRnJvbVJlc3BvbnNlKHRva2VuKTtcclxuICAgICAgaWYgKHNhdmUpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5zYXZlKGtleSwgdG9rZW4udG9Kc29uKCkpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgIGNvbnNvbGUud2FybignTnVjbGV1cy5JZGVudGl0eTogQ291bGQgbm90IHNhdmUgdG8gU2VjdXJlU3RvcmFnZS4nKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0VG9rZW5LZXkoaWQ6IHN0cmluZyA9IG51bGwpIHtcclxuICAgIHJldHVybiBpZCA/IGAke3RoaXMuX3Rva2VuU3RvcmFnZUtleVByZWZpeH0uJHtpZH1gIDogdGhpcy5fdG9rZW5TdG9yYWdlS2V5UHJlZml4O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbGVhcihrZXk6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIFNlY3VyZVN0b3JhZ2VQbHVnaW4ucmVtb3ZlKHsga2V5IH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzYXZlPFQ+KGtleTogc3RyaW5nLCB2YWx1ZTogVCk6IFByb21pc2U8eyB2YWx1ZTogYm9vbGVhbiB9PiB7XHJcbiAgICByZXR1cm4gU2VjdXJlU3RvcmFnZVBsdWdpbi5zZXQoeyBrZXksIHZhbHVlOiBKU09OLnN0cmluZ2lmeSh2YWx1ZSkgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGxvYWQ8VD4oa2V5OiBzdHJpbmcpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHggPSBhd2FpdCBTZWN1cmVTdG9yYWdlUGx1Z2luLmdldCh7IGtleSB9KTtcclxuICAgICAgaWYgKHg/LnZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoeC52YWx1ZSkgYXMgVDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbn1cclxuIl19
117
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjcmV0cy1zdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL251Y2xldXMtaWRlbnRpdHkvc3JjL2xpYi91dGlscy9zZWNyZXRzLXN0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8saUNBQWlDLENBQUM7QUFDekMsT0FBTyxFQUFFLGFBQWEsRUFBcUIsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFOUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFdEUsTUFBTSxPQUFPLFlBQVk7SUFDdkIsWUFBWSxRQUFnQjtRQU9wQixZQUFPLEdBQW9DLEVBQUUsQ0FBQztRQUM5QyxnQkFBVyxHQUErQixFQUFFLENBQUM7UUFHckQsNEdBQTRHO1FBQ3BHLHVCQUFrQixHQUFXLElBQUksQ0FBQztRQUNsQyxpQ0FBNEIsR0FBVyxJQUFJLENBQUM7UUFabEQsSUFBSSxDQUFDLHNCQUFzQixHQUFHLG9CQUFvQixRQUFRLEVBQUUsQ0FBQyxDQUFDLDZEQUE2RDtRQUMzSCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsR0FBRyxJQUFJLENBQUMsc0JBQXNCLE9BQU8sQ0FBQztRQUNsRSxJQUFJLENBQUMsNEJBQTRCLEdBQUcsR0FBRyxJQUFJLENBQUMsc0JBQXNCLE9BQU8sQ0FBQztRQUMxRSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBVU0sc0JBQXNCO1FBQzNCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFDOUIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFTSxLQUFLLENBQUMsbUJBQW1CLENBQUMsZ0JBQWtD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LENBQUM7SUFDeEUsQ0FBQztJQUVPLEtBQUssQ0FBQyxJQUFJLENBQUksR0FBVztRQUMvQixJQUFJO1lBQ0YsTUFBTSxDQUFDLEdBQUcsTUFBTSxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQ2pELElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRTtnQkFDWixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBTSxDQUFDO2FBQ2pDO2lCQUFNO2dCQUNMLE9BQU8sSUFBSSxDQUFDO2FBQ2I7U0FDRjtRQUFDLE1BQU07WUFDTixPQUFPLElBQUksQ0FBQztTQUNiO0lBQ0gsQ0FBQztDQUVGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICdjYXBhY2l0b3Itc2VjdXJlLXN0b3JhZ2UtcGx1Z2luJztcclxuaW1wb3J0IHsgVG9rZW5SZXNwb25zZSwgVG9rZW5SZXNwb25zZUpzb24gfSBmcm9tICdAb3BlbmlkL2FwcGF1dGgnO1xyXG5pbXBvcnQgeyBJZGVudGl0eSB9IGZyb20gJy4uL21vZGVscy9pZGVudGl0eSc7XHJcbmltcG9ydCB7IFNlcnZpY2VQcmluY2lwYWwgfSBmcm9tICcuLi9tb2RlbHMvc2VydmljZS1wcmluY2lwYWwnO1xyXG5pbXBvcnQgeyBTZWN1cmVTdG9yYWdlUGx1Z2luIH0gZnJvbSAnY2FwYWNpdG9yLXNlY3VyZS1zdG9yYWdlLXBsdWdpbic7XHJcblxyXG5leHBvcnQgY2xhc3MgU2VjcmV0c1N0b3JlIHtcclxuICBjb25zdHJ1Y3RvcihjbGllbnRJZDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl90b2tlblN0b3JhZ2VLZXlQcmVmaXggPSBgTnVjbGV1cy5JZGVudGl0eS4ke2NsaWVudElkfWA7IC8vIGRvIG5vdCBjaGFuZ2UgdGhpcyBvciBsb2dpbiB3aXRoIGV4aXN0aW5nIHRva2VucyB3aWxsIGZhaWxcclxuICAgIHRoaXMuX3NlcnZpY2VQcmluY2lwYWxLZXkgPSBgJHt0aGlzLl90b2tlblN0b3JhZ2VLZXlQcmVmaXh9LlN2Y1BgO1xyXG4gICAgdGhpcy5fZGVmYXVsdElkZW50aXR5SWRTdG9yYWdlS2V5ID0gYCR7dGhpcy5fdG9rZW5TdG9yYWdlS2V5UHJlZml4fS5JZElkYDtcclxuICAgIHRoaXMuX2RlZmF1bHRJZGVudGl0eUlkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5fZGVmYXVsdElkZW50aXR5SWRTdG9yYWdlS2V5KTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfdG9rZW5TdG9yYWdlS2V5UHJlZml4OiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBfdG9rZW5zOiB7IFtpZDogc3RyaW5nXTogVG9rZW5SZXNwb25zZSB9ID0ge307XHJcbiAgcHJpdmF0ZSBfaWRlbnRpdGllczogeyBbaWQ6IHN0cmluZ106IElkZW50aXR5IH0gPSB7fTtcclxuICBwcml2YXRlIF9zZXJ2aWNlUHJpbmNpcGFsS2V5O1xyXG4gIHByaXZhdGUgX3NlcnZpY2VQcmluY2lwYWw6IFNlcnZpY2VQcmluY2lwYWw7XHJcbiAgLy8gdGhpcyBzcGVjaWZ5IHdoaWNoIGlkZW50aXR5IGlkIGlzIHVzZWQgYnkgZGVmYXVsdCwgd2hlbiBJZiBpZCBpcyBub3Qgc3BlY2lmaWVkIGluIGdldFRva2VuIG9yIGdldElkZW50aXR5XHJcbiAgcHJpdmF0ZSBfZGVmYXVsdElkZW50aXR5SWQ6IHN0cmluZyA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfZGVmYXVsdElkZW50aXR5SWRTdG9yYWdlS2V5OiBzdHJpbmcgPSBudWxsO1xyXG5cclxuICBwdWJsaWMgcmVtb3ZlU2VydmljZVByaW5jaXBhbCgpIHtcclxuICAgIHRoaXMuX3NlcnZpY2VQcmluY2lwYWwgPSBudWxsO1xyXG4gICAgcmV0dXJuIHRoaXMuY2xlYXIodGhpcy5fc2VydmljZVByaW5jaXBhbEtleSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgc2V0U2VydmljZVByaW5jaXBhbChzZXJ2aWNlUHJpbmNpcGFsOiBTZXJ2aWNlUHJpbmNpcGFsKSB7XHJcbiAgICB0aGlzLl9zZXJ2aWNlUHJpbmNpcGFsID0gc2VydmljZVByaW5jaXBhbDtcclxuICAgIGF3YWl0IHRoaXMuc2F2ZSh0aGlzLl9zZXJ2aWNlUHJpbmNpcGFsS2V5LCBzZXJ2aWNlUHJpbmNpcGFsKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRTZXJ2aWNlUHJpbmNpcGFsKCkge1xyXG4gICAgaWYgKCF0aGlzLl9zZXJ2aWNlUHJpbmNpcGFsKSB7XHJcbiAgICAgIHRoaXMuX3NlcnZpY2VQcmluY2lwYWwgPSBhd2FpdCB0aGlzLmxvYWQ8U2VydmljZVByaW5jaXBhbD4odGhpcy5fc2VydmljZVByaW5jaXBhbEtleSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5fc2VydmljZVByaW5jaXBhbDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRUb2tlbih0b2tlbjogVG9rZW5SZXNwb25zZSwgaWQ6IHN0cmluZyA9IG51bGwpIHtcclxuICAgIHJldHVybiB0aGlzLnNldFRva2VuSW50ZXJuYWwodG9rZW4sIHRydWUsIGlkKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRJZGVudGl0eShpZDogc3RyaW5nID0gbnVsbCkge1xyXG4gICAgY29uc3Qga2V5ID0gdGhpcy5nZXRUb2tlbktleShpZCk7XHJcbiAgICByZXR1cm4gdGhpcy5faWRlbnRpdGllc1trZXldO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldERlZmF1bHRJZGVudGl0eUlkKGlkOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2RlZmF1bHRJZGVudGl0eUlkID0gaWQ7XHJcbiAgICBpZiAodGhpcy5fZGVmYXVsdElkZW50aXR5SWQpIHtcclxuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5fZGVmYXVsdElkZW50aXR5SWRTdG9yYWdlS2V5LCB0aGlzLl9kZWZhdWx0SWRlbnRpdHlJZCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLl9kZWZhdWx0SWRlbnRpdHlJZFN0b3JhZ2VLZXkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFRva2VuKGlkOiBzdHJpbmcgPSBudWxsKSB7XHJcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldFRva2VuS2V5KGlkKTtcclxuXHJcbiAgICAvLyBpZiB0b2tlbiBpcyBub3QgdGhlcmUgb3IgaXQgaXMgaW52YWxpZCB3ZSBjaGVjayBzdG9yYWdlIGFnYWluIGJlZm9yZSByZXR1cm5pbmdcclxuICAgIGlmICghdGhpcy5fdG9rZW5zW2tleV0gfHwgIXRoaXMuX3Rva2Vuc1trZXldLmlzVmFsaWQoKSkge1xyXG4gICAgICBhd2FpdCB0aGlzLnJlbG9hZFRva2VuRnJvbVN0b3JhZ2UoaWQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuX3Rva2Vuc1trZXldO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbW92ZVRva2VuKGlkOiBzdHJpbmcgPSBudWxsKSB7XHJcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldFRva2VuS2V5KGlkKTtcclxuICAgIGRlbGV0ZSB0aGlzLl90b2tlbnNba2V5XTtcclxuICAgIGRlbGV0ZSB0aGlzLl9pZGVudGl0aWVzW2tleV07XHJcbiAgICByZXR1cm4gdGhpcy5jbGVhcihrZXkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyByZWxvYWRUb2tlbkZyb21TdG9yYWdlKGlkOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0VG9rZW5LZXkoaWQpO1xyXG4gICAgY29uc3Qgc3RvcmVkVG9rZW4gPSBhd2FpdCB0aGlzLmxvYWQ8VG9rZW5SZXNwb25zZUpzb24+KGtleSk7XHJcbiAgICBpZiAoc3RvcmVkVG9rZW4pIHtcclxuICAgICAgY29uc3QgcmVzID0gbmV3IFRva2VuUmVzcG9uc2Uoc3RvcmVkVG9rZW4pO1xyXG4gICAgICBpZiAocmVzPy5hY2Nlc3NUb2tlbiB8fCByZXM/LmlkVG9rZW4pIHtcclxuICAgICAgICBhd2FpdCB0aGlzLnNldFRva2VuSW50ZXJuYWwocmVzLCBmYWxzZSwgaWQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgc2V0VG9rZW5JbnRlcm5hbCh0b2tlbjogVG9rZW5SZXNwb25zZSwgc2F2ZTogYm9vbGVhbiwgaWQ6IHN0cmluZyA9IG51bGwpIHtcclxuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0VG9rZW5LZXkoaWQpO1xyXG4gICAgaWYgKHRva2VuID09IG51bGwpIHtcclxuICAgICAgYXdhaXQgdGhpcy5yZW1vdmVUb2tlbihpZCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl90b2tlbnNba2V5XSA9IHRva2VuO1xyXG4gICAgICB0aGlzLl9pZGVudGl0aWVzW2tleV0gPSBJZGVudGl0eS5jcmVhdGVGcm9tUmVzcG9uc2UodG9rZW4pO1xyXG4gICAgICBpZiAoc2F2ZSkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLnNhdmUoa2V5LCB0b2tlbi50b0pzb24oKSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgY29uc29sZS53YXJuKCdOdWNsZXVzLklkZW50aXR5OiBDb3VsZCBub3Qgc2F2ZSB0byBTZWN1cmVTdG9yYWdlLicpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRUb2tlbktleShpZDogc3RyaW5nID0gbnVsbCkge1xyXG4gICAgaWYgKCFpZCkge1xyXG4gICAgICBpZCA9IHRoaXMuX2RlZmF1bHRJZGVudGl0eUlkO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGlkID8gYCR7dGhpcy5fdG9rZW5TdG9yYWdlS2V5UHJlZml4fS4ke2lkfWAgOiB0aGlzLl90b2tlblN0b3JhZ2VLZXlQcmVmaXg7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsZWFyKGtleTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gU2VjdXJlU3RvcmFnZVBsdWdpbi5yZW1vdmUoeyBrZXkgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNhdmU8VD4oa2V5OiBzdHJpbmcsIHZhbHVlOiBUKTogUHJvbWlzZTx7IHZhbHVlOiBib29sZWFuIH0+IHtcclxuICAgIHJldHVybiBTZWN1cmVTdG9yYWdlUGx1Z2luLnNldCh7IGtleSwgdmFsdWU6IEpTT04uc3RyaW5naWZ5KHZhbHVlKSB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgbG9hZDxUPihrZXk6IHN0cmluZykge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgeCA9IGF3YWl0IFNlY3VyZVN0b3JhZ2VQbHVnaW4uZ2V0KHsga2V5IH0pO1xyXG4gICAgICBpZiAoeD8udmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZSh4LnZhbHVlKSBhcyBUO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
@@ -2,7 +2,7 @@ import * as i0 from '@angular/core';
2
2
  import { Injectable, NgModule } from '@angular/core';
3
3
  import * as i1$1 from '@angular/common/http';
4
4
  import { HttpErrorResponse, HTTP_INTERCEPTORS } from '@angular/common/http';
5
- import { from, throwError } from 'rxjs';
5
+ import { lastValueFrom, from, throwError } from 'rxjs';
6
6
  import { mergeMap, catchError } from 'rxjs/operators';
7
7
  import { __awaiter } from 'tslib';
8
8
  import { AppAuthError, AuthorizationNotifier, TokenResponse, AuthorizationServiceConfiguration, JQueryRequestor, Requestor, nowInSeconds, BaseTokenRequestHandler, BasicQueryStringUtils, TokenRequest, GRANT_TYPE_AUTHORIZATION_CODE, GRANT_TYPE_REFRESH_TOKEN, LocalStorageBackend, RedirectRequestHandler, AuthorizationRequest } from '@openid/appauth';
@@ -144,8 +144,13 @@ class SecretsStore {
144
144
  constructor(clientId) {
145
145
  this._tokens = {};
146
146
  this._identities = {};
147
- this._tokenStorageKeyPrefix = `Nucleus.Identity.${clientId}`; // do not change this or login fith existing refresh tokens will fail
148
- this._servicePrincipalKey = `Nucleus.Identity.${clientId}.SvcP`;
147
+ // this specify which identity id is used by default, when If id is not specified in getToken or getIdentity
148
+ this._defaultIdentityId = null;
149
+ this._defaultIdentityIdStorageKey = null;
150
+ this._tokenStorageKeyPrefix = `Nucleus.Identity.${clientId}`; // do not change this or login with existing tokens will fail
151
+ this._servicePrincipalKey = `${this._tokenStorageKeyPrefix}.SvcP`;
152
+ this._defaultIdentityIdStorageKey = `${this._tokenStorageKeyPrefix}.IdId`;
153
+ this._defaultIdentityId = localStorage.getItem(this._defaultIdentityIdStorageKey);
149
154
  }
150
155
  removeServicePrincipal() {
151
156
  this._servicePrincipal = null;
@@ -172,6 +177,15 @@ class SecretsStore {
172
177
  const key = this.getTokenKey(id);
173
178
  return this._identities[key];
174
179
  }
180
+ setDefaultIdentityId(id) {
181
+ this._defaultIdentityId = id;
182
+ if (this._defaultIdentityId) {
183
+ localStorage.setItem(this._defaultIdentityIdStorageKey, this._defaultIdentityId);
184
+ }
185
+ else {
186
+ localStorage.removeItem(this._defaultIdentityIdStorageKey);
187
+ }
188
+ }
175
189
  getToken(id = null) {
176
190
  return __awaiter(this, void 0, void 0, function* () {
177
191
  const key = this.getTokenKey(id);
@@ -222,6 +236,9 @@ class SecretsStore {
222
236
  });
223
237
  }
224
238
  getTokenKey(id = null) {
239
+ if (!id) {
240
+ id = this._defaultIdentityId;
241
+ }
225
242
  return id ? `${this._tokenStorageKeyPrefix}.${id}` : this._tokenStorageKeyPrefix;
226
243
  }
227
244
  clear(key) {
@@ -701,6 +718,7 @@ class NucleusIdentityService {
701
718
  const request = this._authorizationNotifier.request;
702
719
  const response = this._authorizationNotifier.response;
703
720
  const res = yield this.tokenClient.getByAuthorizationCode(request.redirectUri, response.code, request.internal['code_verifier']);
721
+ this._store.setDefaultIdentityId(null);
704
722
  yield this._store.setToken(res);
705
723
  }
706
724
  else {
@@ -719,6 +737,7 @@ class NucleusIdentityService {
719
737
  const assertionToken = yield this.getServicePrincipalAccessToken();
720
738
  const scope = this.prepareScope(true, (_a = this.config) === null || _a === void 0 ? void 0 : _a.requestedScopes);
721
739
  const res = yield this.tokenClient.getBySecret(provider, secret, assertionToken, scope);
740
+ this._store.setDefaultIdentityId(null);
722
741
  yield this._store.setToken(res);
723
742
  });
724
743
  }
@@ -797,34 +816,40 @@ class NucleusIdentityService {
797
816
  }
798
817
  loginServicePrincipal() {
799
818
  return __awaiter(this, void 0, void 0, function* () {
800
- yield this.loginServicePrincipalInternal();
819
+ const sp = yield this._store.getServicePrincipal();
820
+ if (sp) {
821
+ const scope = this.prepareScope(false, this.config.servicePrincipalRequestedScopes);
822
+ const res = yield this.tokenClient.getByClientCredentials(sp.id, sp.secret, scope);
823
+ yield this._store.setToken(res, this._servicePrincipalTokenId);
824
+ return res;
825
+ }
826
+ else {
827
+ throw Error('Service principal is not registered!');
828
+ }
829
+ });
830
+ }
831
+ loginAsServicePrincipal() {
832
+ return __awaiter(this, void 0, void 0, function* () {
833
+ const token = yield this._store.getToken(this._servicePrincipalTokenId);
834
+ if (!token) {
835
+ yield this.loginServicePrincipal();
836
+ }
837
+ this._store.setDefaultIdentityId(this._servicePrincipalTokenId);
801
838
  });
802
839
  }
803
- /*
804
- public async loginAsServicePrincipal() {
805
- let token = await this._store.getToken(this._servicePrincipalTokenId);
806
- if (!token) {
807
- await this.loginServicePrincipal();
808
- }
809
- token = await this._store.getToken(this._servicePrincipalTokenId);
810
- // TODO: we have to distinguished that token is service principal so refresh token stuff is handled correctly.
811
- // We have to implement universal getAccessToken function that can handle all cases
812
- await this._store.setToken(token);
813
- }
814
- */
815
840
  getOtp(type, expiresIn = -1) {
816
841
  return __awaiter(this, void 0, void 0, function* () {
817
842
  let url = this.config.getServerUrl(`/otp/create?type=${type}`);
818
843
  if (expiresIn > 0) {
819
844
  url += `&expiresIn=${expiresIn}`;
820
845
  }
821
- return this.http.get(url).toPromise();
846
+ return lastValueFrom(this.http.get(url));
822
847
  });
823
848
  }
824
849
  getOtpStatus(id) {
825
850
  return __awaiter(this, void 0, void 0, function* () {
826
851
  const url = this.config.getServerUrl(`/otp/status/${id}`);
827
- return this.http.get(url).toPromise();
852
+ return lastValueFrom(this.http.get(url));
828
853
  });
829
854
  }
830
855
  getOtpUrl(redirectUrl, password) {
@@ -908,25 +933,11 @@ class NucleusIdentityService {
908
933
  extras: params,
909
934
  }, this._crypto, true);
910
935
  }
911
- loginServicePrincipalInternal() {
912
- return __awaiter(this, void 0, void 0, function* () {
913
- const sp = yield this._store.getServicePrincipal();
914
- if (sp) {
915
- const scope = this.prepareScope(false, this.config.servicePrincipalRequestedScopes);
916
- const res = yield this.tokenClient.getByClientCredentials(sp.id, sp.secret, scope);
917
- yield this._store.setToken(res, this._servicePrincipalTokenId);
918
- return res;
919
- }
920
- else {
921
- throw Error('Service principal is not registered!');
922
- }
923
- });
924
- }
925
936
  getServicePrincipalAccessTokenInternal() {
926
937
  return __awaiter(this, void 0, void 0, function* () {
927
938
  let token = yield this._store.getToken(this._servicePrincipalTokenId);
928
939
  if (!(token === null || token === void 0 ? void 0 : token.isValid())) {
929
- token = yield this.loginServicePrincipalInternal();
940
+ token = yield this.loginServicePrincipal();
930
941
  }
931
942
  return token === null || token === void 0 ? void 0 : token.accessToken;
932
943
  });
@@ -1119,3 +1130,4 @@ var OtpType;
1119
1130
  */
1120
1131
 
1121
1132
  export { DeviceCode, Identity, NucleusIdentityConfig, NucleusIdentityModule, NucleusIdentityService, OtpResponse, OtpStatus, OtpType, ServicePrincipalRegistrationStatus };
1133
+ //# sourceMappingURL=kolektor-nucleus-identity.mjs.map