@tiba-spark/client-shared-lib 25.4.0-478 → 25.4.0-483
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/libraries/constants/version-constants.mjs +2 -1
- package/esm2022/libraries/enums/localization.enum.mjs +2 -1
- package/esm2022/libraries/modules/auth/session.actions.mjs +13 -2
- package/esm2022/libraries/modules/auth/session.state.mjs +38 -9
- package/esm2022/libraries/modules/login/login.state.mjs +35 -30
- package/esm2022/libraries/service-proxy/cloud-service-proxies.mjs +21 -21
- package/esm2022/libraries/service-proxy/identity-service-proxies.mjs +221 -1
- package/esm2022/libraries/service-proxy/service-proxy.module.mjs +1 -1
- package/esm2022/libraries/services/auth-token.service.mjs +28 -4
- package/esm2022/libraries/services/refresh-token.service.mjs +4 -4
- package/esm2022/libraries/services/session-storage.service.mjs +14 -2
- package/fesm2022/tiba-spark-client-shared-lib.mjs +363 -62
- package/fesm2022/tiba-spark-client-shared-lib.mjs.map +1 -1
- package/libraries/constants/version-constants.d.ts +1 -0
- package/libraries/constants/version-constants.d.ts.map +1 -1
- package/libraries/enums/localization.enum.d.ts +2 -1
- package/libraries/enums/localization.enum.d.ts.map +1 -1
- package/libraries/modules/auth/session.actions.d.ts +12 -1
- package/libraries/modules/auth/session.actions.d.ts.map +1 -1
- package/libraries/modules/auth/session.state.d.ts +6 -1
- package/libraries/modules/auth/session.state.d.ts.map +1 -1
- package/libraries/modules/login/login.state.d.ts.map +1 -1
- package/libraries/service-proxy/cloud-service-proxies.d.ts +4 -4
- package/libraries/service-proxy/cloud-service-proxies.d.ts.map +1 -1
- package/libraries/service-proxy/identity-service-proxies.d.ts +20 -0
- package/libraries/service-proxy/identity-service-proxies.d.ts.map +1 -1
- package/libraries/services/auth-token.service.d.ts +3 -0
- package/libraries/services/auth-token.service.d.ts.map +1 -1
- package/libraries/services/session-storage.service.d.ts +1 -0
- package/libraries/services/session-storage.service.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -5,7 +5,7 @@ import { Action, Selector, State } from '@ngxs/store';
|
|
|
5
5
|
import { catchError, map, tap, throwError } from 'rxjs';
|
|
6
6
|
import { MessageBarPosition } from '../../components/message-bar/message-bar-position.enum';
|
|
7
7
|
import { RESET_PASSWORD_EMAIL } from '../../constants/keys-constants';
|
|
8
|
-
import { VERSION_V1 } from '../../constants/version-constants';
|
|
8
|
+
import { VERSION_V1, VERSION_V2 } from '../../constants/version-constants';
|
|
9
9
|
import { AppType } from '../../enums/app-type.enum';
|
|
10
10
|
import { Localization } from '../../enums/localization.enum';
|
|
11
11
|
import { ActivateUserDto, UserStatus, UserUpdatePasswordDto } from '../../service-proxy/cloud-service-proxies';
|
|
@@ -13,6 +13,7 @@ import { AuthenticateBackofficeSsoRequestDto, AuthenticateRequestDto, Authentica
|
|
|
13
13
|
import { parseApiErrorData, parseApiErrorMessage } from '../../utils/api-helper.util';
|
|
14
14
|
import { HealthAction, LoadAppConfigurationAction, LoadBackofficeAppConfigurationAction, SetTenantUserAction, UpdateAuthTokenAction } from '../auth/session.actions';
|
|
15
15
|
import { AccountSetPasswordAction, AccountSetPasswordErrorAction, AccountSetPasswordInitAction, AuthenticateMultipleTenantsAction, BackofficeAutheticateAction, ForgotPasswordAction, ForgotPasswordTenantlessAction, MobileAuthenticateMultipleTenantsAction, OpenIdAutheticateAction, SetTFASetupAction, ValidateUserTokenAction, Verify2FactorAuthenticationAction } from './login.actions';
|
|
16
|
+
import { SessionState } from '../auth/session.state';
|
|
16
17
|
import * as i0 from "@angular/core";
|
|
17
18
|
import * as i1 from "@ngxs/store";
|
|
18
19
|
import * as i2 from "../../service-proxy/cloud-service-proxies";
|
|
@@ -69,7 +70,7 @@ let LoginState = class LoginState {
|
|
|
69
70
|
authenticateRequestDto.username = username;
|
|
70
71
|
authenticateRequestDto.password = password;
|
|
71
72
|
authenticateRequestDto.tenantName = '';
|
|
72
|
-
return this.usersIdentityServiceProxy.
|
|
73
|
+
return this.usersIdentityServiceProxy.v2_MultiTenantsAuthenticate(VERSION_V2, authenticateRequestDto).pipe(tap({
|
|
73
74
|
next: accountsHttpResponseData => {
|
|
74
75
|
const accounts = accountsHttpResponseData.data;
|
|
75
76
|
ctx.patchState({
|
|
@@ -207,7 +208,8 @@ let LoginState = class LoginState {
|
|
|
207
208
|
return verify2FactorAuth$.pipe(tap({
|
|
208
209
|
next: (verify2FactorAuthResponset) => {
|
|
209
210
|
this.sessionStorageService.accessToken = verify2FactorAuthResponset.data.accessToken;
|
|
210
|
-
this.
|
|
211
|
+
this.sessionStorageService.refreshToken = verify2FactorAuthResponset.data.refreshToken;
|
|
212
|
+
this.store.dispatch(new UpdateAuthTokenAction(verify2FactorAuthResponset.data.accessToken, verify2FactorAuthResponset.data.refreshToken));
|
|
211
213
|
},
|
|
212
214
|
error: e => {
|
|
213
215
|
this.messageBarService.error(parseApiErrorMessage(e), this.messageOptions);
|
|
@@ -277,33 +279,36 @@ let LoginState = class LoginState {
|
|
|
277
279
|
const authenticateRequestDto = new AuthenticateWebSsoRequestDto();
|
|
278
280
|
authenticateRequestDto.code = action.token;
|
|
279
281
|
authenticateRequestDto.tenantName = action.tenantInfo?.tenantName;
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
282
|
+
const conflictDetected = this.store.selectSnapshot(SessionState.isConflictDetected);
|
|
283
|
+
if (conflictDetected == null) {
|
|
284
|
+
authenticateOidc$ = this.usersIdentityServiceProxy.openIdAuthenticate(authenticateRequestDto);
|
|
285
|
+
return authenticateOidc$.pipe(tap({
|
|
286
|
+
next: authResponse => {
|
|
287
|
+
if (authResponse.data.message === Localization.sso_pending_approval) {
|
|
288
|
+
const message = this.translateService.instant(Localization.sso_pending_approval);
|
|
289
|
+
this.messageBarService.info(message, { position: MessageBarPosition.Static });
|
|
290
|
+
action.isPendingApproval = true;
|
|
291
|
+
//this.clearSingleSingOnCache(singleSignOnProvider);
|
|
292
|
+
return;
|
|
293
|
+
}
|
|
294
|
+
const sparkSession = this.authService.processAuthenticate(authResponse.data);
|
|
295
|
+
ctx.dispatch(new SetTenantUserAction(sparkSession));
|
|
296
|
+
if (this.userStatusIsAwaitingAccess(authResponse)) {
|
|
297
|
+
this.clearSingleSingOnCache(action.singleSignOnProvider);
|
|
298
|
+
const message = this.translateService.instant(Localization.sso_pending_approval);
|
|
299
|
+
this.messageBarService.warn(message, { position: MessageBarPosition.Static });
|
|
300
|
+
action.isPendingApproval = true;
|
|
301
|
+
}
|
|
302
|
+
else {
|
|
303
|
+
// After authentication get app configuration
|
|
304
|
+
this.loginToSpark();
|
|
305
|
+
}
|
|
306
|
+
},
|
|
307
|
+
error: e => {
|
|
308
|
+
this.singleSingOnErrorHandling(e);
|
|
301
309
|
}
|
|
302
|
-
}
|
|
303
|
-
|
|
304
|
-
this.singleSingOnErrorHandling(e);
|
|
305
|
-
}
|
|
306
|
-
}));
|
|
310
|
+
}));
|
|
311
|
+
}
|
|
307
312
|
}
|
|
308
313
|
singleSingOnErrorHandling(e) {
|
|
309
314
|
if (e.errorMessage == Localization.sso_pending_approval) {
|
|
@@ -404,4 +409,4 @@ export { LoginState };
|
|
|
404
409
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LoginState, decorators: [{
|
|
405
410
|
type: Injectable
|
|
406
411
|
}], ctorParameters: () => [{ type: i1.Store }, { type: i2.UsersCloudServiceProxy }, { type: i3.BackofficeUserIdentityServiceProxy }, { type: i4.OpenIdAuthService }, { type: i3.UsersIdentityServiceProxy }, { type: i5.AuthService }, { type: i6.SessionStorageService }, { type: i7.LoginService }, { type: i8.TranslateService }, { type: i9.MsalService }, { type: i10.MessageBarService }, { type: i11.AppConfigService }, { type: i12.RouteService }, { type: i3.MobileIdentityServiceProxy }], propDecorators: { onAuthenticateMultipleTenantsAction: [], onMobileAuthenticateMultipleTenantsAction: [], onForgotPassword: [], onForgotPasswordTenantless: [], onAccountSetPasswordInitAction: [], onAccountSetPasswordErrorAction: [], onAccountSetPasswordAction: [], onValidateUserTokenAction: [], onVerify2FactorAuthenticationAction: [], onSetTFASetupAction: [], onBackofficeAutheticateAction: [], onOpenIdAutheticateAction: [] } });
|
|
407
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uc3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtc2hhcmVkLWxpYi9zcmMvbGlicmFyaWVzL21vZHVsZXMvbG9naW4vbG9naW4uc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJM0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBdUIsTUFBTSxhQUFhLENBQUM7QUFDM0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQWMsR0FBRyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUU1RixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDL0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM3RCxPQUFPLEVBQ2dDLGVBQWUsRUFDSCxVQUFVLEVBQUUscUJBQXFCLEVBQ25GLE1BQU0sMkNBQTJDLENBQUM7QUFDbkQsT0FBTyxFQUNMLG1DQUFtQyxFQUNMLHNCQUFzQixFQUNYLDRCQUE0QixFQUNyRSxrQkFBa0IsRUFBRSxvQkFBb0IsRUFDeEMsMkJBQTJCLEVBQzVCLE1BQU0sOENBQThDLENBQUM7QUFLdEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFJdEYsT0FBTyxFQUFFLFlBQVksRUFBRSwwQkFBMEIsRUFBRSxvQ0FBb0MsRUFBRSxtQkFB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TUF3Q3pCLG1DQUFtQyxNQXlCbkMsbUJBQW1CLE1Bd0NuQiw2QkFBNkIsTUFpQzdCLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1zYWxTZXJ2aWNlIH0gZnJvbSAnQGF6dXJlL21zYWwtYW5ndWxhcic7XG5pbXBvcnQgeyBDbGVhckNhY2hlUmVxdWVzdCB9IGZyb20gJ0BhenVyZS9tc2FsLWJyb3dzZXInO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgTmF2aWdhdGUgfSBmcm9tICdAbmd4cy9yb3V0ZXItcGx1Z2luJztcbmltcG9ydCB7IEFjdGlvbiwgU2VsZWN0b3IsIFN0YXRlLCBTdGF0ZUNvbnRleHQsIFN0b3JlIH0gZnJvbSAnQG5neHMvc3RvcmUnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwLCBPYnNlcnZhYmxlLCB0YXAsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE1lc3NhZ2VCYXJQb3NpdGlvbiB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbWVzc2FnZS1iYXIvbWVzc2FnZS1iYXItcG9zaXRpb24uZW51bSc7XG5pbXBvcnQgeyBNZXNzYWdlQmFyU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbWVzc2FnZS1iYXIvbWVzc2FnZS1iYXIuc2VydmljZSc7XG5pbXBvcnQgeyBSRVNFVF9QQVNTV09SRF9FTUFJTCB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9rZXlzLWNvbnN0YW50cyc7XG5pbXBvcnQgeyBWRVJTSU9OX1YxIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL3ZlcnNpb24tY29uc3RhbnRzJztcbmltcG9ydCB7IEFwcFR5cGUgfSBmcm9tICcuLi8uLi9lbnVtcy9hcHAtdHlwZS5lbnVtJztcbmltcG9ydCB7IExvY2FsaXphdGlvbiB9IGZyb20gJy4uLy4uL2VudW1zL2xvY2FsaXphdGlvbi5lbnVtJztcbmltcG9ydCB7XG4gIEFjdGl2YXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhLCBBY3RpdmF0ZVVzZXJEdG8sIEFwaUV4Y2VwdGlvbiwgUHJvYmxlbURldGFpbHMsIFRmYVNldHVwRHRvLFxuICBVc2VyRHRvSHR0cFJlc3BvbnNlRGF0YSwgVXNlcnNDbG91ZFNlcnZpY2VQcm94eSwgVXNlclN0YXR1cywgVXNlclVwZGF0ZVBhc3N3b3JkRHRvXG59IGZyb20gJy4uLy4uL3NlcnZpY2UtcHJveHkvY2xvdWQtc2VydmljZS1wcm94aWVzJztcbmltcG9ydCB7XG4gIEF1dGhlbnRpY2F0ZUJhY2tvZmZpY2VTc29SZXF1ZXN0RHRvLFxuICBBdXRoZW50aWNhdGVFcnJvclJlc3BvbnNlRHRvLCBBdXRoZW50aWNhdGVSZXF1ZXN0RHRvLCBBdXRoZW50aWNhdGVSZXNwb25zZUR0byxcbiAgQXV0aGVudGljYXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhLCBBdXRoZW50aWNhdGVXZWJTc29SZXF1ZXN0RHRvLCBCYWNrb2ZmaWNlVXNlcklkZW50aXR5U2VydmljZVByb3h5LCBNb2JpbGVJZGVudGl0eVNlcnZpY2VQcm94eSxcbiAgUGFzc3dvcmRDaGFuZ2VUeXBlLCBTaW5nbGVTaWduT25Qcm92aWRlciwgVXNlcnNJZGVudGl0eVNlcnZpY2VQcm94eSwgVmFsaWRhdGVBY3RpdmF0aW9uVXNlckR0b0h0dHBSZXNwb25zZURhdGEsXG4gIFZlcmlmeTJGYWN0b3JBdXRoUmVxdWVzdER0bywgVmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG9IdHRwUmVzcG9uc2VEYXRhXG59IGZyb20gJy4uLy4uL3NlcnZpY2UtcHJveHkvaWRlbnRpdHktc2VydmljZS1wcm94aWVzJztcbmltcG9ydCB7IEFwcENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hcHAtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgT3BlbklkQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9vcGVuaWQtYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7IFJvdXRlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3JvdXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2Vzc2lvbi1zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgcGFyc2VBcGlFcnJvckRhdGEsIHBhcnNlQXBpRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vLi4vdXRpbHMvYXBpLWhlbHBlci51dGlsJztcbmltcG9ydCB7IFN0cmluZ01hcCB9IGZyb20gJy4uLy4uL3V0aWxzL2xhbmcudXRpbCc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uL2F1dGgvYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7IFVzZXJJbmZvIH0gZnJvbSAnLi4vYXV0aC9tb2RlbC91c2VyLWluZm8uaW50ZXJmYWNlJztcbmltcG9ydCB7IEhlYWx0aEFjdGlvbiwgTG9hZEFwcENvbmZpZ3VyYXRpb25BY3Rpb24sIExvYWRCYWNrb2ZmaWNlQXBwQ29uZmlndXJhdGlvbkFjdGlvbiwgU2V0VGVuYW50VXNlckFjdGlvbiwgVXBkYXRlQXV0aFRva2VuQWN0aW9uIH0gZnJvbSAnLi4vYXV0aC9zZXNzaW9uLmFjdGlvbnMnO1xuaW1wb3J0IHtcbiAgQWNjb3VudFNldFBhc3N3b3JkQWN0aW9uLCBBY2NvdW50U2V0UGFzc3dvcmRFcnJvckFjdGlvbiwgQWNjb3VudFNldFBhc3N3b3JkSW5pdEFjdGlvbiwgQXV0aGVudGljYXRlTXVsdGlwbGVUZW5hbnRzQWN0aW9uLFxuICBCYWNrb2ZmaWNlQXV0aGV0aWNhdGVBY3Rpb24sIEZvcmdvdFBhc3N3b3JkQWN0aW9uLCBGb3Jnb3RQYXNzd29yZFRlbmFudGxlc3NBY3Rpb24sIE1vYmlsZUF1dGhlbnRpY2F0ZU11bHRpcGxlVGVuYW50c0FjdGlvbixcbiAgT3BlbklkQXV0aGV0aWNhdGVBY3Rpb24sIFNldFRGQVNldHVwQWN0aW9uLCBWYWxpZGF0ZVVzZXJUb2tlbkFjdGlvbiwgVmVyaWZ5MkZhY3RvckF1dGhlbnRpY2F0aW9uQWN0aW9uXG59IGZyb20gJy4vbG9naW4uYWN0aW9ucyc7XG5pbXBvcnQgeyBMb2dpblNlcnZpY2UgfSBmcm9tICcuL2xvZ2luLnNlcnZpY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIExvZ2luU3RhdGVNb2RlbCB7XG4gIHVzZXJJbmZvOiBVc2VySW5mbztcbiAgdGVuYW50TmFtZTogc3RyaW5nO1xuICBwYXNzd29yZENoYW5nZVR5cGU6IFBhc3N3b3JkQ2hhbmdlVHlwZTtcbiAgYWNjb3VudHM6IEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvW107XG4gIGFjY291bnRzTWFwOiBTdHJpbmdNYXA8QXV0aGVudGljYXRlUmVzcG9uc2VEdG8+O1xuICB0ZmFTZXR1cDogVGZhU2V0dXBEdG87XG59XG5cbkBJbmplY3RhYmxlKClcbkBTdGF0ZTxMb2dpblN0YXRlTW9kZWw+KHtcbiAgbmFtZTogJ2xvZ2luJyxcbiAgZGVmYXVsdHM6IHtcbiAgICB1c2VySW5mbzogdW5kZWZpbmVkLFxuICAgIHRlbmFudE5hbWU6ICcnLFxuICAgIHBhc3N3b3JkQ2hhbmdlVHlwZTogdW5kZWZpbmVkLFxuICAgIGFjY291bnRzOiBbXSxcbiAgICBhY2NvdW50c01hcDoge30sXG4gICAgdGZhU2V0dXA6IHVuZGVmaW5lZCxcbiAgfVxufSlcbmV4cG9ydCBjbGFzcyBMb2dpblN0YXRlIHtcblxuICBwcml2YXRlIG1lc3NhZ2VPcHRpb25zID0geyBwb3NpdGlvbjogTWVzc2FnZUJhclBvc2l0aW9uLlN0YXRpYyB9O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc3RvcmU6IFN0b3JlLFxuICAgIHByaXZhdGUgdXNlcnNDbG91ZFNlcnZpY2VQcm94eTogVXNlcnNDbG91ZFNlcnZpY2VQcm94eSxcbiAgICBwcml2YXRlIGJhY2tvZmZpY2VVc2VySWRlbnRpdHlTZXJ2aWNlUHJveHk6IEJhY2tvZmZpY2VVc2VySWRlbnRpdHlTZXJ2aWNlUHJveHksIHByaXZhdGUgb3BlbklkQXV0aFNlcnZpY2U6IE9wZW5JZEF1dGhTZXJ2aWNlLFxuICAgIHByaXZhdGUgdXNlcnNJZGVudGl0eVNlcnZpY2VQcm94eTogVXNlcnNJZGVudGl0eVNlcnZpY2VQcm94eSwgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzZXNzaW9uU3RvcmFnZVNlcnZpY2U6IFNlc3Npb25TdG9yYWdlU2VydmljZSwgcHJpdmF0ZSBsb2dpblNlcnZpY2U6IExvZ2luU2VydmljZSwgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgbXNhbFNlcnZpY2U6IE1zYWxTZXJ2aWNlLCBwcml2YXRlIG1lc3NhZ2VCYXJTZXJ2aWNlOiBNZXNzYWdlQmFyU2VydmljZSwgcHJpdmF0ZSBhcHBDb25maWc6IEFwcENvbmZpZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZVNlcnZpY2U6IFJvdXRlU2VydmljZSwgcHJpdmF0ZSBtb2JpbGVJZGVudGl0eVNlcnZpY2VQcm94eTogTW9iaWxlSWRlbnRpdHlTZXJ2aWNlUHJveHkpIHtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgdHdvRmFjdG9yU2V0dXBGb3JVc2VyKHN0YXRlOiBMb2dpblN0YXRlTW9kZWwpOiBUZmFTZXR1cER0byB7XG4gICAgcmV0dXJuIHN0YXRlLnRmYVNldHVwO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyB0ZW5hbnROYW1lKHN0YXRlOiBMb2dpblN0YXRlTW9kZWwpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdGF0ZS50ZW5hbnROYW1lO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyB1c2VySW5mbyhzdGF0ZTogTG9naW5TdGF0ZU1vZGVsKTogVXNlckluZm8ge1xuICAgIHJldHVybiBzdGF0ZS51c2VySW5mbztcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgdGVtcGxhdGVUeXBlKHN0YXRlOiBMb2dpblN0YXRlTW9kZWwpOiBQYXNzd29yZENoYW5nZVR5cGUge1xuICAgIHJldHVybiBzdGF0ZS5wYXNzd29yZENoYW5nZVR5cGU7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGFjY291bnRzKHN0YXRlOiBMb2dpblN0YXRlTW9kZWwpOiBBdXRoZW50aWNhdGVSZXNwb25zZUR0b1tdIHtcbiAgICByZXR1cm4gc3RhdGUuYWNjb3VudHM7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGFjY291bnRzTWFwKHN0YXRlOiBMb2dpblN0YXRlTW9kZWwpOiBTdHJpbmdNYXA8QXV0aGVudGljYXRlUmVzcG9uc2VEdG8+IHtcbiAgICByZXR1cm4gc3RhdGUuYWNjb3VudHNNYXA7XG4gIH1cblxuICBAQWN0aW9uKEF1dGhlbnRpY2F0ZU11bHRpcGxlVGVuYW50c0FjdGlvbilcbiAgcHVibGljIG9uQXV0aGVudGljYXRlTXVsdGlwbGVUZW5hbnRzQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PExvZ2luU3RhdGVNb2RlbD4sIHsgdXNlcm5hbWUsIHBhc3N3b3JkIH06IEF1dGhlbnRpY2F0ZU11bHRpcGxlVGVuYW50c0FjdGlvbikge1xuICAgIGNvbnN0IGF1dGhlbnRpY2F0ZVJlcXVlc3REdG8gPSBuZXcgQXV0aGVudGljYXRlUmVxdWVzdER0bygpO1xuICAgIGF1dGhlbnRpY2F0ZVJlcXVlc3REdG8udXNlcm5hbWUgPSB1c2VybmFtZTtcbiAgICBhdXRoZW50aWNhdGVSZXF1ZXN0RHRvLnBhc3N3b3JkID0gcGFzc3dvcmQ7XG4gICAgYXV0aGVudGljYXRlUmVxdWVzdER0by50ZW5hbnROYW1lID0gJyc7XG5cbiAgICByZXR1cm4gdGhpcy51c2Vyc0lkZW50aXR5U2VydmljZVByb3h5Lm11bHRpVGVuYW50c0F1dGhlbnRpY2F0ZShhdXRoZW50aWNhdGVSZXF1ZXN0RHRvKS5waXBlKHRhcCh7XG4gICAgICBuZXh0OiBhY2NvdW50c0h0dHBSZXNwb25zZURhdGEgPT4ge1xuICAgICAgICBjb25zdCBhY2NvdW50cyA9IGFjY291bnRzSHR0cFJlc3BvbnNlRGF0YS5kYXRhO1xuICAgICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgICAgYWNjb3VudHNcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IGUgPT4gdGhpcy5hdXRoZW50aWNhdGlvbkVycm9yTWVzc2FnZUJhcihlKVxuICAgIH0pKTtcbiAgfVxuXG4gIEBBY3Rpb24oTW9iaWxlQXV0aGVudGljYXRlTXVsdGlwbGVUZW5hbnRzQWN0aW9uKVxuICBwdWJsaWMgb25Nb2JpbGVBdXRoZW50aWNhdGVNdWx0aXBsZVRlbmFudHNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8TG9naW5TdGF0ZU1vZGVsPiwgeyB1c2VybmFtZSwgcGFzc3dvcmQsIHRlbmFudE5hbWUgfTogTW9iaWxlQXV0aGVudGljYXRlTXVsdGlwbGVUZW5hbnRzQWN0aW9uKSB7XG4gICAgY29uc3QgYXV0aGVudGljYXRlUmVxdWVzdER0byA9IG5ldyBBdXRoZW50aWNhdGVSZXF1ZXN0RHRvKCk7XG4gICAgYXV0aGVudGljYXRlUmVxdWVzdER0by51c2VybmFtZSA9IHVzZXJuYW1lO1xuICAgIGF1dGhlbnRpY2F0ZVJlcXVlc3REdG8ucGFzc3dvcmQgPSBwYXNzd29yZDtcbiAgICBhdXRoZW50aWNhdGVSZXF1ZXN0RHRvLnRlbmFudE5hbWUgPSB0ZW5hbnROYW1lO1xuICAgIHJldHVybiB0aGlzLm1vYmlsZUlkZW50aXR5U2VydmljZVByb3h5Lm1vYmlsZUF1dGhlbnRpY2F0ZShWRVJTSU9OX1YxLCBhdXRoZW50aWNhdGVSZXF1ZXN0RHRvKS5waXBlKHRhcCh7XG4gICAgICBuZXh0OiBhY2NvdW50cyA9PiB7XG4gICAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgICBhY2NvdW50c01hcDogYWNjb3VudHMuZGF0YSxcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IGUgPT4gdGhpcy5hdXRoZW50aWNhdGlvbkVycm9yTWVzc2FnZUJhcihlKVxuICAgIH0pKTtcbiAgfVxuXG4gIEBBY3Rpb24oRm9yZ290UGFzc3dvcmRBY3Rpb24pXG4gIHB1YmxpYyBvbkZvcmdvdFBhc3N3b3JkKGN0eDogU3RhdGVDb250ZXh0PExvZ2luU3RhdGVNb2RlbD4sIHsgZW1haWwsIHRlbmFudElkIH06IEZvcmdvdFBhc3N3b3JkQWN0aW9uKSB7XG4gICAgY29uc3QgaXNNb2JpbGVBcHBNb2RlID0gdGhpcy5hcHBDb25maWcuZ2V0Q29uZmlnKCkuYXBwVHlwZSA9PT0gQXBwVHlwZS5Nb2JpbGU7XG4gICAgY29uc3QgcGF0aCA9IFsnYWNjb3VudCcsICdmb3Jnb3QtcGFzc3dvcmQtc3VjY2VzcyddO1xuICAgIGNvbnN0IHVybCA9IGlzTW9iaWxlQXBwTW9kZSA/IHBhdGggOiB0aGlzLnJvdXRlU2VydmljZS5nZXROYXZpZ2F0aW9uUm91dGUocGF0aCk7XG5cbiAgICB0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS5zZXRJdGVtKFJFU0VUX1BBU1NXT1JEX0VNQUlMLCBKU09OLnN0cmluZ2lmeShlbWFpbCkpO1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IE5hdmlnYXRlKHVybCkpO1xuICAgIHRoaXMubWVzc2FnZUJhclNlcnZpY2Uuc3VjY2VzcyhMb2NhbGl6YXRpb24uZm9yZ290X3Bhc3N3b3JkX2VtYWlsX3NlbnRfbXNnLCB0aGlzLm1lc3NhZ2VPcHRpb25zKTtcbiAgICByZXR1cm4gdGhpcy51c2Vyc0Nsb3VkU2VydmljZVByb3h5LmZvcmdvdFBhc3N3b3JkKGVtYWlsLCB0ZW5hbnRJZCk7XG4gIH1cblxuICBAQWN0aW9uKEZvcmdvdFBhc3N3b3JkVGVuYW50bGVzc0FjdGlvbilcbiAgcHVibGljIG9uRm9yZ290UGFzc3dvcmRUZW5hbnRsZXNzKGN0eDogU3RhdGVDb250ZXh0PExvZ2luU3RhdGVNb2RlbD4sIHsgZW1haWwgfTogRm9yZ290UGFzc3dvcmRBY3Rpb24pIHtcbiAgICB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLnN1Y2Nlc3MoTG9jYWxpemF0aW9uLmZvcmdvdF9wYXNzd29yZF9lbWFpbF9zZW50X21zZywgdGhpcy5tZXNzYWdlT3B0aW9ucyk7XG4gICAgcmV0dXJuIHRoaXMudXNlcnNDbG91ZFNlcnZpY2VQcm94eS5mb3Jnb3RQYXNzd29yZFRlbmFudGxlc3MoZW1haWwpO1xuICB9XG5cblxuICBAQWN0aW9uKEFjY291bnRTZXRQYXNzd29yZEluaXRBY3Rpb24pXG4gIHB1YmxpYyBvbkFjY291bnRTZXRQYXNzd29yZEluaXRBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8TG9naW5TdGF0ZU1vZGVsPiwgeyB1c2VySW5mbywgY29tcG9uZW50VHlwZSB9KSB7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgdXNlckluZm8sXG4gICAgICBwYXNzd29yZENoYW5nZVR5cGU6IGNvbXBvbmVudFR5cGVcbiAgICB9KTtcbiAgfVxuXG4gIEBBY3Rpb24oQWNjb3VudFNldFBhc3N3b3JkRXJyb3JBY3Rpb24pXG4gIHB1YmxpYyBvbkFjY291bnRTZXRQYXNzd29yZEVycm9yQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PExvZ2luU3RhdGVNb2RlbD4sIHsgZXJyb3JNc2csIHVzZXJuYW1lIH0pIHtcbiAgICBjb25zdCB1c2VySW5mbzogVXNlckluZm8gPSB7IC4uLnVzZXJuYW1lIH07XG4gICAgdGhpcy5tZXNzYWdlQmFyU2VydmljZS5lcnJvcihlcnJvck1zZywgdGhpcy5tZXNzYWdlT3B0aW9ucyk7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgdXNlckluZm9cbiAgICB9KTtcbiAgfVxuXG4gIEBBY3Rpb24oQWNjb3VudFNldFBhc3N3b3JkQWN0aW9uKVxuICBwdWJsaWMgb25BY2NvdW50U2V0UGFzc3dvcmRBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8TG9naW5TdGF0ZU1vZGVsPiwgeyBwYXNzd29yZCB9OiBBY2NvdW50U2V0UGFzc3dvcmRBY3Rpb24pIHtcbiAgICBjb25zdCB1c2VySW5mbyA9IGN0eC5nZXRTdGF0ZSgpLnVzZXJJbmZvO1xuICAgIGxldCBkYXRhOiBhbnk7XG4gICAgbGV0IHNldFBhc3N3b3JkJDogT2JzZXJ2YWJsZTxVc2VyRHRvSHR0cFJlc3BvbnNlRGF0YSB8IEFjdGl2YXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhPjtcblxuICAgIGlmICh0aGlzLmFwcENvbmZpZy5nZXRDb25maWcoKS5hcHBUeXBlID09PSBBcHBUeXBlLkNsb3VkKSB7XG4gICAgICBkYXRhID0gbmV3IEFjdGl2YXRlVXNlckR0byh7XG4gICAgICAgIHBhc3N3b3JkLFxuICAgICAgICBjdXJyZW50UGFzc3dvcmQ6IG51bGwsXG4gICAgICAgIHVzZXJTdGF0dXM6IHVzZXJJbmZvLnN0YXR1cyBhcyBVc2VyU3RhdHVzXG4gICAgICB9KTtcblxuICAgICAgc2V0UGFzc3dvcmQkID0gdGhpcy51c2Vyc0Nsb3VkU2VydmljZVByb3h5LmFjdGl2YXRlKGRhdGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXRhID0gbmV3IFVzZXJVcGRhdGVQYXNzd29yZER0byh7XG4gICAgICAgIHBhc3N3b3JkLFxuICAgICAgICBjdXJyZW50UGFzc3dvcmQ6IG51bGxcbiAgICAgIH0pO1xuICAgICAgc2V0UGFzc3dvcmQkID0gdGhpcy51c2Vyc0Nsb3VkU2VydmljZVByb3h5LnVwZGF0ZVVzZXJQYXNzd29yZChkYXRhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2V0UGFzc3dvcmQkLnBpcGUoXG4gICAgICBtYXAoKGFjdGl2YXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhOiBBY3RpdmF0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YSkgPT4ge1xuICAgICAgICBpZiAoYWN0aXZhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEuZGF0YS5pc1N1Y2Nlc3MpIHtcbiAgICAgICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgICAgICB0ZmFTZXR1cDogYWN0aXZhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEuZGF0YT8udGZhU2V0dXAsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGFjdGl2YXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhLmRhdGEuZXJyb3JNZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBjYXRjaEVycm9yKGUgPT4ge1xuICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBlO1xuICAgICAgICB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLmVycm9yKGVycm9yTWVzc2FnZSwgdGhpcy5tZXNzYWdlT3B0aW9ucyk7XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yTWVzc2FnZSk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBAQWN0aW9uKFZhbGlkYXRlVXNlclRva2VuQWN0aW9uKVxuICBwdWJsaWMgb25WYWxpZGF0ZVVzZXJUb2tlbkFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxMb2dpblN0YXRlTW9kZWw+LCB7IHRva2VuLCB0b2tlblR5cGUgfTogVmFsaWRhdGVVc2VyVG9rZW5BY3Rpb24pIHtcbiAgICBjb25zdCBwY3Q6IGFueSA9IFBhc3N3b3JkQ2hhbmdlVHlwZVt0b2tlblR5cGVdO1xuICAgIHJldHVybiB0aGlzLnVzZXJzSWRlbnRpdHlTZXJ2aWNlUHJveHkudmFsaWRhdGVBY3RpdmF0aW9uKHRva2VuLCBQYXNzd29yZENoYW5nZVR5cGVbUGFzc3dvcmRDaGFuZ2VUeXBlW3Rva2VuVHlwZV1dKS5waXBlKHRhcCh7XG4gICAgICBuZXh0OiAodXNlcjogVmFsaWRhdGVBY3RpdmF0aW9uVXNlckR0b0h0dHBSZXNwb25zZURhdGEpID0+IHtcbiAgICAgICAgaWYgKHVzZXI/LmRhdGEpIHtcbiAgICAgICAgICBjb25zdCB1c2VySW5mbzogVXNlckluZm8gPSB7XG4gICAgICAgICAgICB1c2VySWQ6IHVzZXIuZGF0YS5pZCxcbiAgICAgICAgICAgIHVzZXJuYW1lOiB1c2VyLmRhdGEudU5hbWUsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogYCR7dXNlci5kYXRhLm5hbWV9ICR7dXNlci5kYXRhLmxhc3ROYW1lfWAsXG4gICAgICAgICAgICBzdGF0dXM6IHVzZXIuZGF0YS5zdGF0dXMsXG4gICAgICAgICAgICBwbWw6IHVzZXIuZGF0YS5wbWxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmICh1c2VyLmRhdGEuc3RhdHVzICE9PSBVc2VyU3RhdHVzLkJsb2NrZWQpIHtcbiAgICAgICAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgICAgICAgdXNlckluZm8sXG4gICAgICAgICAgICAgIHBhc3N3b3JkQ2hhbmdlVHlwZTogcGN0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZUJhclNlcnZpY2UuZXJyb3IoTG9jYWxpemF0aW9uLm5vbl9hY3RpdmVfdXNlciwgdGhpcy5tZXNzYWdlT3B0aW9ucyk7XG4gICAgICAgICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgICAgICAgIHVzZXJJbmZvLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZXJyb3I6IGUgPT4ge1xuICAgICAgICBjb25zdCBlcnJvckpzb246IFByb2JsZW1EZXRhaWxzID0gSlNPTi5wYXJzZShlLnJlc3BvbnNlKSBhcyBQcm9ibGVtRGV0YWlscztcbiAgICAgICAgdGhpcy5tZXNzYWdlQmFyU2VydmljZS5lcnJvcihwYXJzZUFwaUVycm9yTWVzc2FnZShlKSwgdGhpcy5tZXNzYWdlT3B0aW9ucyk7XG4gICAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgICB1c2VySW5mbzoge1xuICAgICAgICAgICAgdXNlcm5hbWU6IGVycm9ySnNvbi5pbnN0YW5jZSxcbiAgICAgICAgICAgIHVzZXJJZDogbnVsbCxcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiBudWxsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSkpO1xuICB9XG5cbiAgQEFjdGlvbihWZXJpZnkyRmFjdG9yQXV0aGVudGljYXRpb25BY3Rpb24pXG4gIHB1YmxpYyBvblZlcmlmeTJGYWN0b3JBdXRoZW50aWNhdGlvbkFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxMb2dpblN0YXRlTW9kZWw+LCB7IHVzZXJOYW1lLCBjb2RlLCBzZXR1cDJGYSB9OiBWZXJpZnkyRmFjdG9yQXV0aGVudGljYXRpb25BY3Rpb24pIHtcbiAgICBjb25zdCB2ZXJpZnkyRmFjdG9yQXV0aFJlcXVlc3REdG8gPSBuZXcgVmVyaWZ5MkZhY3RvckF1dGhSZXF1ZXN0RHRvKHtcbiAgICAgIGNvZGUsXG4gICAgICB1c2VyTmFtZVxuICAgIH0pO1xuXG4gICAgbGV0IHZlcmlmeTJGYWN0b3JBdXRoJDogT2JzZXJ2YWJsZTxWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgIGlmIChzZXR1cDJGYSkge1xuICAgICAgdmVyaWZ5MkZhY3RvckF1dGgkID0gdGhpcy51c2Vyc0lkZW50aXR5U2VydmljZVByb3h5LnZlcmlmeTJGYWN0b3JBdXRoZW50aWNhdGlvbih2ZXJpZnkyRmFjdG9yQXV0aFJlcXVlc3REdG8pO1xuICAgIH0gZWxzZSB7IC8vIGxvZ2luIGZvciB1c2VyIHdpdGggMkZBIChhbHJlYWR5IHNldCB1cClcbiAgICAgIHZlcmlmeTJGYWN0b3JBdXRoJCA9IHRoaXMudXNlcnNJZGVudGl0eVNlcnZpY2VQcm94eS52ZXJpZnkyRmFjdG9yQXV0aGVudGljYXRpb25Mb2dpbih2ZXJpZnkyRmFjdG9yQXV0aFJlcXVlc3REdG8pO1xuICAgIH1cblxuICAgIHJldHVybiB2ZXJpZnkyRmFjdG9yQXV0aCQucGlwZSh0YXAoe1xuICAgICAgbmV4dDogKHZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0OiBWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0b0h0dHBSZXNwb25zZURhdGEpID0+IHtcbiAgICAgICAgdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UuYWNjZXNzVG9rZW4gPSB2ZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldC5kYXRhLmFjY2Vzc1Rva2VuO1xuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBVcGRhdGVBdXRoVG9rZW5BY3Rpb24odmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXQuZGF0YS5hY2Nlc3NUb2tlbikpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiBlID0+IHtcbiAgICAgICAgdGhpcy5tZXNzYWdlQmFyU2VydmljZS5lcnJvcihwYXJzZUFwaUVycm9yTWVzc2FnZShlKSwgdGhpcy5tZXNzYWdlT3B0aW9ucyk7XG4gICAgICB9XG4gICAgfSkpO1xuICB9XG5cbiAgQEFjdGlvbihTZXRURkFTZXR1cEFjdGlvbilcbiAgcHVibGljIG9uU2V0VEZBU2V0dXBBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8TG9naW5TdGF0ZU1vZGVsPiwgeyB0ZmFTZXR1cER0byB9KSB7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgdGZhU2V0dXA6IHRmYVNldHVwRHRvXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGF1dGhlbnRpY2F0aW9uRXJyb3JNZXNzYWdlQmFyKGVycm9yOiBBcGlFeGNlcHRpb24pIHtcbiAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBwYXJzZUFwaUVycm9yTWVzc2FnZShlcnJvcik7XG4gICAgY29uc3QgZGF0YSA9IHBhcnNlQXBpRXJyb3JEYXRhPEF1dGhlbnRpY2F0ZUVycm9yUmVzcG9uc2VEdG8+KGVycm9yKTtcbiAgICB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLmVycm9yKGVycm9yTWVzc2FnZSwgeyBwb3NpdGlvbjogTWVzc2FnZUJhclBvc2l0aW9uLlN0YXRpYywgbWVzc2FnZVBhcmFtczogeyB0ZW1wb3JhcnlMb2NrZWRNaW51dGVzOiBkYXRhPy50ZW1wb3JhcnlCbG9ja2VkVGltZSB9IH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhck1zbExvZ2luQ2FjaGUoKSB7XG4gICAgY29uc3QgY2xlYXJDYWNoZVJlcXVlc3Q6IENsZWFyQ2FjaGVSZXF1ZXN0ID0ge1xuICAgICAgYWNjb3VudDogdGhpcy5tc2FsU2VydmljZS5pbnN0YW5jZS5nZXRBbGxBY2NvdW50cygpWzBdLFxuICAgIH07XG4gICAgdGhpcy5tc2FsU2VydmljZS5pbnN0YW5jZS5jbGVhckNhY2hlKGNsZWFyQ2FjaGVSZXF1ZXN0KTtcbiAgICB0aGlzLm1zYWxTZXJ2aWNlLmxvZ291dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhclNpbmdsZVNpbmdPbkNhY2hlKHNpbmdsZVNpZ25PblByb3ZpZGVyOiBTaW5nbGVTaWduT25Qcm92aWRlcikge1xuICAgIHN3aXRjaCAoc2luZ2xlU2lnbk9uUHJvdmlkZXIpIHtcbiAgICAgIGNhc2UgU2luZ2xlU2lnbk9uUHJvdmlkZXIuTWljcm9zb2Z0OlxuICAgICAgICB0aGlzLmNsZWFyTXNsTG9naW5DYWNoZSgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBTaW5nbGVTaWduT25Qcm92aWRlci5QaW5nRmVkZXJhdGU6XG4gICAgICAgIHRoaXMub3BlbklkQXV0aFNlcnZpY2Uuc2lnbk91dCgpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgbG9jYWxTdG9yYWdlLmNsZWFyKCk7XG4gIH1cblxuICBwcml2YXRlIHVzZXJTdGF0dXNJc0F3YWl0aW5nQWNjZXNzID0gKGF1dGhSZXNwb25zZTogQXV0aGVudGljYXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhKTogYm9vbGVhbiA9PlxuICAgIGF1dGhSZXNwb25zZS5kYXRhLnNpbmdsZVNpZ25PbkF1dGhlbnRpY2F0aW9uRHRvPy5pc0F1dGhlbnRpY2F0ZWQgPT09IGZhbHNlICYmXG4gICAgYXV0aFJlc3BvbnNlLmRhdGEuc2luZ2xlU2lnbk9uQXV0aGVudGljYXRpb25EdG8/LnVzZXJTdGF0dXMgPT09IFVzZXJTdGF0dXMuQXdhaXRpbmdBY2Nlc3M7XG5cbiAgQEFjdGlvbihCYWNrb2ZmaWNlQXV0aGV0aWNhdGVBY3Rpb24pXG4gIHB1YmxpYyBvbkJhY2tvZmZpY2VBdXRoZXRpY2F0ZUFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxMb2dpblN0YXRlTW9kZWw+LCB7IHRva2VuLCB0ZW5hbnRJbmZvIH06IEJhY2tvZmZpY2VBdXRoZXRpY2F0ZUFjdGlvbikge1xuICAgIGNvbnN0IGF1dGhlbnRpY2F0ZVJlcXVlc3REdG8gPSBuZXcgQXV0aGVudGljYXRlQmFja29mZmljZVNzb1JlcXVlc3REdG8oKTtcbiAgICBhdXRoZW50aWNhdGVSZXF1ZXN0RHRvLmNvZGUgPSB0b2tlbjtcbiAgICBhdXRoZW50aWNhdGVSZXF1ZXN0RHRvLnRlbmFudE5hbWUgPSB0ZW5hbnRJbmZvPy50ZW5hbnROYW1lO1xuXG4gICAgY29uc3QgYXV0aGVudGljYXRlT2lkYyQgPSB0aGlzLmJhY2tvZmZpY2VVc2VySWRlbnRpdHlTZXJ2aWNlUHJveHkuYmFja29mZmljZUF1dGhlbnRpY2F0ZShhdXRoZW50aWNhdGVSZXF1ZXN0RHRvKTtcbiAgICByZXR1cm4gYXV0aGVudGljYXRlT2lkYyQucGlwZSh0YXAoe1xuICAgICAgbmV4dDogYXV0aFJlc3BvbnNlID0+IHtcbiAgICAgICAgaWYgKGF1dGhSZXNwb25zZS5kYXRhLm1lc3NhZ2UgPT09IExvY2FsaXphdGlvbi5zc29fcGVuZGluZ19hcHByb3ZhbCkge1xuICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChMb2NhbGl6YXRpb24uc3NvX3BlbmRpbmdfYXBwcm92YWwpO1xuICAgICAgICAgIHRoaXMubWVzc2FnZUJhclNlcnZpY2UuaW5mbyhtZXNzYWdlLCB7IHBvc2l0aW9uOiBNZXNzYWdlQmFyUG9zaXRpb24uU3RhdGljIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNwYXJrU2Vzc2lvbiA9IHRoaXMuYXV0aFNlcnZpY2UucHJvY2Vzc0F1dGhlbnRpY2F0ZShhdXRoUmVzcG9uc2UuZGF0YSk7XG4gICAgICAgIGN0eC5kaXNwYXRjaChuZXcgU2V0VGVuYW50VXNlckFjdGlvbihzcGFya1Nlc3Npb24pKTtcbiAgICAgICAgaWYgKHRoaXMudXNlclN0YXR1c0lzQXdhaXRpbmdBY2Nlc3MoYXV0aFJlc3BvbnNlKSkge1xuICAgICAgICAgIHRoaXMuY2xlYXJTaW5nbGVTaW5nT25DYWNoZShTaW5nbGVTaWduT25Qcm92aWRlci5NaWNyb3NvZnQpO1xuICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChMb2NhbGl6YXRpb24uc3NvX3BlbmRpbmdfYXBwcm92YWwpO1xuICAgICAgICAgIHRoaXMubWVzc2FnZUJhclNlcnZpY2Uud2FybihtZXNzYWdlLCB7IHBvc2l0aW9uOiBNZXNzYWdlQmFyUG9zaXRpb24uU3RhdGljIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIC8vIEFmdGVyIGF1dGhlbnRpY2F0aW9uIGdldCBhcHAgY29uZmlndXJhdGlvblxuICAgICAgICAgIHRoaXMubG9naW5Ub0JhY2tvZmZpY2UoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGVycm9yOiBlID0+IHtcbiAgICAgICAgdGhpcy5zaW5nbGVTaW5nT25FcnJvckhhbmRsaW5nKGUpO1xuICAgICAgfVxuICAgIH0pKTtcbiAgfVxuXG4gIEBBY3Rpb24oT3BlbklkQXV0aGV0aWNhdGVBY3Rpb24pXG4gIHB1YmxpYyBvbk9wZW5JZEF1dGhldGljYXRlQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PExvZ2luU3RhdGVNb2RlbD4sIGFjdGlvbjogT3BlbklkQXV0aGV0aWNhdGVBY3Rpb24pIHtcbiAgICBsZXQgYXV0aGVudGljYXRlT2lkYyQ6IE9ic2VydmFibGU8QXV0aGVudGljYXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhPjtcblxuICAgIGNvbnN0IGF1dGhlbnRpY2F0ZVJlcXVlc3REdG8gPSBuZXcgQXV0aGVudGljYXRlV2ViU3NvUmVxdWVzdER0bygpO1xuICAgIGF1dGhlbnRpY2F0ZVJlcXVlc3REdG8uY29kZSA9IGFjdGlvbi50b2tlbjtcbiAgICBhdXRoZW50aWNhdGVSZXF1ZXN0RHRvLnRlbmFudE5hbWUgPSBhY3Rpb24udGVuYW50SW5mbz8udGVuYW50TmFtZTtcblxuICAgIGF1dGhlbnRpY2F0ZU9pZGMkID0gdGhpcy51c2Vyc0lkZW50aXR5U2VydmljZVByb3h5Lm9wZW5JZEF1dGhlbnRpY2F0ZShhdXRoZW50aWNhdGVSZXF1ZXN0RHRvKTtcblxuICAgIHJldHVybiBhdXRoZW50aWNhdGVPaWRjJC5waXBlKHRhcCh7XG4gICAgICBuZXh0OiBhdXRoUmVzcG9uc2UgPT4ge1xuICAgICAgICBpZiAoYXV0aFJlc3BvbnNlLmRhdGEubWVzc2FnZSA9PT0gTG9jYWxpemF0aW9uLnNzb19wZW5kaW5nX2FwcHJvdmFsKSB7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5zc29fcGVuZGluZ19hcHByb3ZhbCk7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlQmFyU2VydmljZS5pbmZvKG1lc3NhZ2UsIHsgcG9zaXRpb246IE1lc3NhZ2VCYXJQb3NpdGlvbi5TdGF0aWMgfSk7XG4gICAgICAgICAgYWN0aW9uLmlzUGVuZGluZ0FwcHJvdmFsID0gdHJ1ZTtcbiAgICAgICAgICAvL3RoaXMuY2xlYXJTaW5nbGVTaW5nT25DYWNoZShzaW5nbGVTaWduT25Qcm92aWRlcik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3BhcmtTZXNzaW9uID0gdGhpcy5hdXRoU2VydmljZS5wcm9jZXNzQXV0aGVudGljYXRlKGF1dGhSZXNwb25zZS5kYXRhKTtcbiAgICAgICAgY3R4LmRpc3BhdGNoKG5ldyBTZXRUZW5hbnRVc2VyQWN0aW9uKHNwYXJrU2Vzc2lvbikpO1xuXG4gICAgICAgIGlmICh0aGlzLnVzZXJTdGF0dXNJc0F3YWl0aW5nQWNjZXNzKGF1dGhSZXNwb25zZSkpIHtcbiAgICAgICAgICB0aGlzLmNsZWFyU2luZ2xlU2luZ09uQ2FjaGUoYWN0aW9uLnNpbmdsZVNpZ25PblByb3ZpZGVyKTtcbiAgICAgICAgICBjb25zdCBtZXNzYWdlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLnNzb19wZW5kaW5nX2FwcHJvdmFsKTtcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLndhcm4obWVzc2FnZSwgeyBwb3NpdGlvbjogTWVzc2FnZUJhclBvc2l0aW9uLlN0YXRpYyB9KTtcbiAgICAgICAgICBhY3Rpb24uaXNQZW5kaW5nQXBwcm92YWwgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIC8vIEFmdGVyIGF1dGhlbnRpY2F0aW9uIGdldCBhcHAgY29uZmlndXJhdGlvblxuICAgICAgICAgIHRoaXMubG9naW5Ub1NwYXJrKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBlcnJvcjogZSA9PiB7XG4gICAgICAgIHRoaXMuc2luZ2xlU2luZ09uRXJyb3JIYW5kbGluZyhlKTtcbiAgICAgIH1cbiAgICB9KSk7XG4gIH1cblxuICBzaW5nbGVTaW5nT25FcnJvckhhbmRsaW5nKGU6IGFueSkge1xuICAgIGlmIChlLmVycm9yTWVzc2FnZSA9PSBMb2NhbGl6YXRpb24uc3NvX3BlbmRpbmdfYXBwcm92YWwpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChMb2NhbGl6YXRpb24uc3NvX3BlbmRpbmdfYXBwcm92YWwpO1xuICAgICAgdGhpcy5tZXNzYWdlQmFyU2VydmljZS5pbmZvKG1lc3NhZ2UsIHsgcG9zaXRpb246IE1lc3NhZ2VCYXJQb3NpdGlvbi5TdGF0aWMgfSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGUuZXJyb3JNZXNzYWdlKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoZS5lcnJvck1lc3NhZ2UpO1xuICAgICAgdGhpcy5tZXNzYWdlQmFyU2VydmljZS5lcnJvcihtZXNzYWdlLCB7IHBvc2l0aW9uOiBNZXNzYWdlQmFyUG9zaXRpb24uU3RhdGljIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMubWVzc2FnZUJhclNlcnZpY2UuZXJyb3IocGFyc2VBcGlFcnJvck1lc3NhZ2UoZSksIHRoaXMubWVzc2FnZU9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIGxvZ2luVG9TcGFyaygpIHtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBMb2FkQXBwQ29uZmlndXJhdGlvbkFjdGlvbigpKTtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBIZWFsdGhBY3Rpb24oKSk7XG4gICAgdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UudXBkYXRlTG9nZ2VkVGVuYW50KCk7XG4gICAgdGhpcy5sb2dpblNlcnZpY2UubG9naW5Ub1NwYXJrKCk7XG4gIH1cblxuICBsb2dpblRvQmFja29mZmljZSgpIHtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBMb2FkQmFja29mZmljZUFwcENvbmZpZ3VyYXRpb25BY3Rpb24oKSk7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgSGVhbHRoQWN0aW9uKCkpO1xuICAgIHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnVwZGF0ZUxvZ2dlZFRlbmFudCgpO1xuICAgIHRoaXMubG9naW5TZXJ2aWNlLmxvZ2luVG9TcGFyaygpO1xuICB9XG59XG4iXX0=
|
|
412
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uc3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtc2hhcmVkLWxpYi9zcmMvbGlicmFyaWVzL21vZHVsZXMvbG9naW4vbG9naW4uc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJM0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBdUIsTUFBTSxhQUFhLENBQUM7QUFDM0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQWMsR0FBRyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUU1RixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDN0QsT0FBTyxFQUNnQyxlQUFlLEVBQ0gsVUFBVSxFQUFFLHFCQUFxQixFQUNuRixNQUFNLDJDQUEyQyxDQUFDO0FBQ25ELE9BQU8sRUFDTCxtQ0FBbUMsRUFBZ0Msc0JBQXNCLEVBQ2hELDRCQUE0QixFQUNyRSxrQkFBa0IsRUFBRSxvQkFBb0IsRUFDeEMsMkJBQTJCLEVBQzVCLE1BQU0sOENBQThDLENBQUM7QUFLdEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFJdEYsT0FBTyxFQUFFLFlBQVksRUFBRSwwQkFBMEIsRUFBRSxvQ0FB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QVEsRUFBRTtZQUNSLFFBQVEsRUFBRSxTQUFTO1lBQ25CLFVBQVUsRUFBRSxFQUFFO1lBQ2Qsa0JBQWtCLEVBQUUsU0FBUztZQUM3QixRQUFRLEVBQUUsRUFBRTtZQUNaLFdBQVcsRUFBRSxFQUFFO1lBQ2YsUUFBUSxFQUFFLFNBQVM7U0FDcEI7S0FDRixDQUFDO0dBQ1csVUFBVSxDQXdXdEI7OzRGQXhXWSxVQUFVO2tCQVp0QixVQUFVO2dnQkF3REYsbUNBQW1DLE1BaUJuQyx5Q0FBeUMsTUFnQnpDLGdCQUFnQixNQVloQiwwQkFBMEIsTUFPMUIsOEJBQThCLE1BUTlCLCtCQUErQixNQVMvQiwwQkFBMEIsTUF3QzFCLHlCQUF5QixNQXdDekIsbUNBQW1DLE1BMEJuQyxtQkFBbUIsTUF3Q25CLDZCQUE2QixNQWlDN0IseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTXNhbFNlcnZpY2UgfSBmcm9tICdAYXp1cmUvbXNhbC1hbmd1bGFyJztcbmltcG9ydCB7IENsZWFyQ2FjaGVSZXF1ZXN0IH0gZnJvbSAnQGF6dXJlL21zYWwtYnJvd3Nlcic7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBOYXZpZ2F0ZSB9IGZyb20gJ0BuZ3hzL3JvdXRlci1wbHVnaW4nO1xuaW1wb3J0IHsgQWN0aW9uLCBTZWxlY3RvciwgU3RhdGUsIFN0YXRlQ29udGV4dCwgU3RvcmUgfSBmcm9tICdAbmd4cy9zdG9yZSc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAsIE9ic2VydmFibGUsIHRhcCwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTWVzc2FnZUJhclBvc2l0aW9uIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9tZXNzYWdlLWJhci9tZXNzYWdlLWJhci1wb3NpdGlvbi5lbnVtJztcbmltcG9ydCB7IE1lc3NhZ2VCYXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9tZXNzYWdlLWJhci9tZXNzYWdlLWJhci5zZXJ2aWNlJztcbmltcG9ydCB7IFJFU0VUX1BBU1NXT1JEX0VNQUlMIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2tleXMtY29uc3RhbnRzJztcbmltcG9ydCB7IFZFUlNJT05fVjEsIFZFUlNJT05fVjIgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvdmVyc2lvbi1jb25zdGFudHMnO1xuaW1wb3J0IHsgQXBwVHlwZSB9IGZyb20gJy4uLy4uL2VudW1zL2FwcC10eXBlLmVudW0nO1xuaW1wb3J0IHsgTG9jYWxpemF0aW9uIH0gZnJvbSAnLi4vLi4vZW51bXMvbG9jYWxpemF0aW9uLmVudW0nO1xuaW1wb3J0IHtcbiAgQWN0aXZhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEsIEFjdGl2YXRlVXNlckR0bywgQXBpRXhjZXB0aW9uLCBQcm9ibGVtRGV0YWlscywgVGZhU2V0dXBEdG8sXG4gIFVzZXJEdG9IdHRwUmVzcG9uc2VEYXRhLCBVc2Vyc0Nsb3VkU2VydmljZVByb3h5LCBVc2VyU3RhdHVzLCBVc2VyVXBkYXRlUGFzc3dvcmREdG9cbn0gZnJvbSAnLi4vLi4vc2VydmljZS1wcm94eS9jbG91ZC1zZXJ2aWNlLXByb3hpZXMnO1xuaW1wb3J0IHtcbiAgQXV0aGVudGljYXRlQmFja29mZmljZVNzb1JlcXVlc3REdG8sIEF1dGhlbnRpY2F0ZUVycm9yUmVzcG9uc2VEdG8sIEF1dGhlbnRpY2F0ZVJlcXVlc3REdG8sIEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvLFxuICBBdXRoZW50aWNhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEsIEF1dGhlbnRpY2F0ZVdlYlNzb1JlcXVlc3REdG8sIEJhY2tvZmZpY2VVc2VySWRlbnRpdHlTZXJ2aWNlUHJveHksIE1vYmlsZUlkZW50aXR5U2VydmljZVByb3h5LFxuICBQYXNzd29yZENoYW5nZVR5cGUsIFNpbmdsZVNpZ25PblByb3ZpZGVyLCBVc2Vyc0lkZW50aXR5U2VydmljZVByb3h5LCBWYWxpZGF0ZUFjdGl2YXRpb25Vc2VyRHRvSHR0cFJlc3BvbnNlRGF0YSxcbiAgVmVyaWZ5MkZhY3RvckF1dGhSZXF1ZXN0RHRvLCBWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0b0h0dHBSZXNwb25zZURhdGFcbn0gZnJvbSAnLi4vLi4vc2VydmljZS1wcm94eS9pZGVudGl0eS1zZXJ2aWNlLXByb3hpZXMnO1xuaW1wb3J0IHsgQXBwQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FwcC1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBPcGVuSWRBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL29wZW5pZC1hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgUm91dGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcm91dGUuc2VydmljZSc7XG5pbXBvcnQgeyBTZXNzaW9uU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zZXNzaW9uLXN0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBwYXJzZUFwaUVycm9yRGF0YSwgcGFyc2VBcGlFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi91dGlscy9hcGktaGVscGVyLnV0aWwnO1xuaW1wb3J0IHsgU3RyaW5nTWFwIH0gZnJvbSAnLi4vLi4vdXRpbHMvbGFuZy51dGlsJztcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vYXV0aC9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgVXNlckluZm8gfSBmcm9tICcuLi9hdXRoL21vZGVsL3VzZXItaW5mby5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSGVhbHRoQWN0aW9uLCBMb2FkQXBwQ29uZmlndXJhdGlvbkFjdGlvbiwgTG9hZEJhY2tvZmZpY2VBcHBDb25maWd1cmF0aW9uQWN0aW9uLCBTZXRUZW5hbnRVc2VyQWN0aW9uLCBVcGRhdGVBdXRoVG9rZW5BY3Rpb24gfSBmcm9tICcuLi9hdXRoL3Nlc3Npb24uYWN0aW9ucyc7XG5pbXBvcnQge1xuICBBY2NvdW50U2V0UGFzc3dvcmRBY3Rpb24sIEFjY291bnRTZXRQYXNzd29yZEVycm9yQWN0aW9uLCBBY2NvdW50U2V0UGFzc3dvcmRJbml0QWN0aW9uLCBBdXRoZW50aWNhdGVNdWx0aXBsZVRlbmFudHNBY3Rpb24sXG4gIEJhY2tvZmZpY2VBdXRoZXRpY2F0ZUFjdGlvbiwgRm9yZ290UGFzc3dvcmRBY3Rpb24sIEZvcmdvdFBhc3N3b3JkVGVuYW50bGVzc0FjdGlvbiwgTW9iaWxlQXV0aGVudGljYXRlTXVsdGlwbGVUZW5hbnRzQWN0aW9uLFxuICBPcGVuSWRBdXRoZXRpY2F0ZUFjdGlvbiwgU2V0VEZBU2V0dXBBY3Rpb24sIFZhbGlkYXRlVXNlclRva2VuQWN0aW9uLCBWZXJpZnkyRmFjdG9yQXV0aGVudGljYXRpb25BY3Rpb25cbn0gZnJvbSAnLi9sb2dpbi5hY3Rpb25zJztcbmltcG9ydCB7IExvZ2luU2VydmljZSB9IGZyb20gJy4vbG9naW4uc2VydmljZSc7XG5pbXBvcnQgeyBTZXNzaW9uU3RhdGUgfSBmcm9tICcuLi9hdXRoL3Nlc3Npb24uc3RhdGUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIExvZ2luU3RhdGVNb2RlbCB7XG4gIHVzZXJJbmZvOiBVc2VySW5mbztcbiAgdGVuYW50TmFtZTogc3RyaW5nO1xuICBwYXNzd29yZENoYW5nZVR5cGU6IFBhc3N3b3JkQ2hhbmdlVHlwZTtcbiAgYWNjb3VudHM6IEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvW107XG4gIGFjY291bnRzTWFwOiBTdHJpbmdNYXA8QXV0aGVudGljYXRlUmVzcG9uc2VEdG8+O1xuICB0ZmFTZXR1cDogVGZhU2V0dXBEdG87XG59XG5cbkBJbmplY3RhYmxlKClcbkBTdGF0ZTxMb2dpblN0YXRlTW9kZWw+KHtcbiAgbmFtZTogJ2xvZ2luJyxcbiAgZGVmYXVsdHM6IHtcbiAgICB1c2VySW5mbzogdW5kZWZpbmVkLFxuICAgIHRlbmFudE5hbWU6ICcnLFxuICAgIHBhc3N3b3JkQ2hhbmdlVHlwZTogdW5kZWZpbmVkLFxuICAgIGFjY291bnRzOiBbXSxcbiAgICBhY2NvdW50c01hcDoge30sXG4gICAgdGZhU2V0dXA6IHVuZGVmaW5lZCxcbiAgfVxufSlcbmV4cG9ydCBjbGFzcyBMb2dpblN0YXRlIHtcblxuICBwcml2YXRlIG1lc3NhZ2VPcHRpb25zID0geyBwb3NpdGlvbjogTWVzc2FnZUJhclBvc2l0aW9uLlN0YXRpYyB9O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc3RvcmU6IFN0b3JlLFxuICAgIHByaXZhdGUgdXNlcnNDbG91ZFNlcnZpY2VQcm94eTogVXNlcnNDbG91ZFNlcnZpY2VQcm94eSxcbiAgICBwcml2YXRlIGJhY2tvZmZpY2VVc2VySWRlbnRpdHlTZXJ2aWNlUHJveHk6IEJhY2tvZmZpY2VVc2VySWRlbnRpdHlTZXJ2aWNlUHJveHksIHByaXZhdGUgb3BlbklkQXV0aFNlcnZpY2U6IE9wZW5JZEF1dGhTZXJ2aWNlLFxuICAgIHByaXZhdGUgdXNlcnNJZGVudGl0eVNlcnZpY2VQcm94eTogVXNlcnNJZGVudGl0eVNlcnZpY2VQcm94eSwgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzZXNzaW9uU3RvcmFnZVNlcnZpY2U6IFNlc3Npb25TdG9yYWdlU2VydmljZSwgcHJpdmF0ZSBsb2dpblNlcnZpY2U6IExvZ2luU2VydmljZSwgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgbXNhbFNlcnZpY2U6IE1zYWxTZXJ2aWNlLCBwcml2YXRlIG1lc3NhZ2VCYXJTZXJ2aWNlOiBNZXNzYWdlQmFyU2VydmljZSwgcHJpdmF0ZSBhcHBDb25maWc6IEFwcENvbmZpZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZVNlcnZpY2U6IFJvdXRlU2VydmljZSwgcHJpdmF0ZSBtb2JpbGVJZGVudGl0eVNlcnZpY2VQcm94eTogTW9iaWxlSWRlbnRpdHlTZXJ2aWNlUHJveHkpIHtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgdHdvRmFjdG9yU2V0dXBGb3JVc2VyKHN0YXRlOiBMb2dpblN0YXRlTW9kZWwpOiBUZmFTZXR1cER0byB7XG4gICAgcmV0dXJuIHN0YXRlLnRmYVNldHVwO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyB0ZW5hbnROYW1lKHN0YXRlOiBMb2dpblN0YXRlTW9kZWwpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdGF0ZS50ZW5hbnROYW1lO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyB1c2VySW5mbyhzdGF0ZTogTG9naW5TdGF0ZU1vZGVsKTogVXNlckluZm8ge1xuICAgIHJldHVybiBzdGF0ZS51c2VySW5mbztcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgdGVtcGxhdGVUeXBlKHN0YXRlOiBMb2dpblN0YXRlTW9kZWwpOiBQYXNzd29yZENoYW5nZVR5cGUge1xuICAgIHJldHVybiBzdGF0ZS5wYXNzd29yZENoYW5nZVR5cGU7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGFjY291bnRzKHN0YXRlOiBMb2dpblN0YXRlTW9kZWwpOiBBdXRoZW50aWNhdGVSZXNwb25zZUR0b1tdIHtcbiAgICByZXR1cm4gc3RhdGUuYWNjb3VudHM7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGFjY291bnRzTWFwKHN0YXRlOiBMb2dpblN0YXRlTW9kZWwpOiBTdHJpbmdNYXA8QXV0aGVudGljYXRlUmVzcG9uc2VEdG8+IHtcbiAgICByZXR1cm4gc3RhdGUuYWNjb3VudHNNYXA7XG4gIH1cblxuICBAQWN0aW9uKEF1dGhlbnRpY2F0ZU11bHRpcGxlVGVuYW50c0FjdGlvbilcbiAgcHVibGljIG9uQXV0aGVudGljYXRlTXVsdGlwbGVUZW5hbnRzQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PExvZ2luU3RhdGVNb2RlbD4sIHsgdXNlcm5hbWUsIHBhc3N3b3JkIH06IEF1dGhlbnRpY2F0ZU11bHRpcGxlVGVuYW50c0FjdGlvbikge1xuICAgIGNvbnN0IGF1dGhlbnRpY2F0ZVJlcXVlc3REdG8gPSBuZXcgQXV0aGVudGljYXRlUmVxdWVzdER0bygpO1xuICAgIGF1dGhlbnRpY2F0ZVJlcXVlc3REdG8udXNlcm5hbWUgPSB1c2VybmFtZTtcbiAgICBhdXRoZW50aWNhdGVSZXF1ZXN0RHRvLnBhc3N3b3JkID0gcGFzc3dvcmQ7XG4gICAgYXV0aGVudGljYXRlUmVxdWVzdER0by50ZW5hbnROYW1lID0gJyc7XG4gICAgcmV0dXJuIHRoaXMudXNlcnNJZGVudGl0eVNlcnZpY2VQcm94eS52Ml9NdWx0aVRlbmFudHNBdXRoZW50aWNhdGUoVkVSU0lPTl9WMiwgYXV0aGVudGljYXRlUmVxdWVzdER0bykucGlwZSh0YXAoe1xuICAgICAgbmV4dDogYWNjb3VudHNIdHRwUmVzcG9uc2VEYXRhID0+IHtcbiAgICAgICAgY29uc3QgYWNjb3VudHMgPSBhY2NvdW50c0h0dHBSZXNwb25zZURhdGEuZGF0YTtcbiAgICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICAgIGFjY291bnRzXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiBlID0+IHRoaXMuYXV0aGVudGljYXRpb25FcnJvck1lc3NhZ2VCYXIoZSlcbiAgICB9KSk7XG4gIH1cblxuICBAQWN0aW9uKE1vYmlsZUF1dGhlbnRpY2F0ZU11bHRpcGxlVGVuYW50c0FjdGlvbilcbiAgcHVibGljIG9uTW9iaWxlQXV0aGVudGljYXRlTXVsdGlwbGVUZW5hbnRzQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PExvZ2luU3RhdGVNb2RlbD4sIHsgdXNlcm5hbWUsIHBhc3N3b3JkLCB0ZW5hbnROYW1lIH06IE1vYmlsZUF1dGhlbnRpY2F0ZU11bHRpcGxlVGVuYW50c0FjdGlvbikge1xuICAgIGNvbnN0IGF1dGhlbnRpY2F0ZVJlcXVlc3REdG8gPSBuZXcgQXV0aGVudGljYXRlUmVxdWVzdER0bygpO1xuICAgIGF1dGhlbnRpY2F0ZVJlcXVlc3REdG8udXNlcm5hbWUgPSB1c2VybmFtZTtcbiAgICBhdXRoZW50aWNhdGVSZXF1ZXN0RHRvLnBhc3N3b3JkID0gcGFzc3dvcmQ7XG4gICAgYXV0aGVudGljYXRlUmVxdWVzdER0by50ZW5hbnROYW1lID0gdGVuYW50TmFtZTtcbiAgICByZXR1cm4gdGhpcy5tb2JpbGVJZGVudGl0eVNlcnZpY2VQcm94eS5tb2JpbGVBdXRoZW50aWNhdGUoVkVSU0lPTl9WMSwgYXV0aGVudGljYXRlUmVxdWVzdER0bykucGlwZSh0YXAoe1xuICAgICAgbmV4dDogYWNjb3VudHMgPT4ge1xuICAgICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgICAgYWNjb3VudHNNYXA6IGFjY291bnRzLmRhdGEsXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiBlID0+IHRoaXMuYXV0aGVudGljYXRpb25FcnJvck1lc3NhZ2VCYXIoZSlcbiAgICB9KSk7XG4gIH1cblxuICBAQWN0aW9uKEZvcmdvdFBhc3N3b3JkQWN0aW9uKVxuICBwdWJsaWMgb25Gb3Jnb3RQYXNzd29yZChjdHg6IFN0YXRlQ29udGV4dDxMb2dpblN0YXRlTW9kZWw+LCB7IGVtYWlsLCB0ZW5hbnRJZCB9OiBGb3Jnb3RQYXNzd29yZEFjdGlvbikge1xuICAgIGNvbnN0IGlzTW9iaWxlQXBwTW9kZSA9IHRoaXMuYXBwQ29uZmlnLmdldENvbmZpZygpLmFwcFR5cGUgPT09IEFwcFR5cGUuTW9iaWxlO1xuICAgIGNvbnN0IHBhdGggPSBbJ2FjY291bnQnLCAnZm9yZ290LXBhc3N3b3JkLXN1Y2Nlc3MnXTtcbiAgICBjb25zdCB1cmwgPSBpc01vYmlsZUFwcE1vZGUgPyBwYXRoIDogdGhpcy5yb3V0ZVNlcnZpY2UuZ2V0TmF2aWdhdGlvblJvdXRlKHBhdGgpO1xuXG4gICAgdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2Uuc2V0SXRlbShSRVNFVF9QQVNTV09SRF9FTUFJTCwgSlNPTi5zdHJpbmdpZnkoZW1haWwpKTtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBOYXZpZ2F0ZSh1cmwpKTtcbiAgICB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLnN1Y2Nlc3MoTG9jYWxpemF0aW9uLmZvcmdvdF9wYXNzd29yZF9lbWFpbF9zZW50X21zZywgdGhpcy5tZXNzYWdlT3B0aW9ucyk7XG4gICAgcmV0dXJuIHRoaXMudXNlcnNDbG91ZFNlcnZpY2VQcm94eS5mb3Jnb3RQYXNzd29yZChlbWFpbCwgdGVuYW50SWQpO1xuICB9XG5cbiAgQEFjdGlvbihGb3Jnb3RQYXNzd29yZFRlbmFudGxlc3NBY3Rpb24pXG4gIHB1YmxpYyBvbkZvcmdvdFBhc3N3b3JkVGVuYW50bGVzcyhjdHg6IFN0YXRlQ29udGV4dDxMb2dpblN0YXRlTW9kZWw+LCB7IGVtYWlsIH06IEZvcmdvdFBhc3N3b3JkQWN0aW9uKSB7XG4gICAgdGhpcy5tZXNzYWdlQmFyU2VydmljZS5zdWNjZXNzKExvY2FsaXphdGlvbi5mb3Jnb3RfcGFzc3dvcmRfZW1haWxfc2VudF9tc2csIHRoaXMubWVzc2FnZU9wdGlvbnMpO1xuICAgIHJldHVybiB0aGlzLnVzZXJzQ2xvdWRTZXJ2aWNlUHJveHkuZm9yZ290UGFzc3dvcmRUZW5hbnRsZXNzKGVtYWlsKTtcbiAgfVxuXG5cbiAgQEFjdGlvbihBY2NvdW50U2V0UGFzc3dvcmRJbml0QWN0aW9uKVxuICBwdWJsaWMgb25BY2NvdW50U2V0UGFzc3dvcmRJbml0QWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PExvZ2luU3RhdGVNb2RlbD4sIHsgdXNlckluZm8sIGNvbXBvbmVudFR5cGUgfSkge1xuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIHVzZXJJbmZvLFxuICAgICAgcGFzc3dvcmRDaGFuZ2VUeXBlOiBjb21wb25lbnRUeXBlXG4gICAgfSk7XG4gIH1cblxuICBAQWN0aW9uKEFjY291bnRTZXRQYXNzd29yZEVycm9yQWN0aW9uKVxuICBwdWJsaWMgb25BY2NvdW50U2V0UGFzc3dvcmRFcnJvckFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxMb2dpblN0YXRlTW9kZWw+LCB7IGVycm9yTXNnLCB1c2VybmFtZSB9KSB7XG4gICAgY29uc3QgdXNlckluZm86IFVzZXJJbmZvID0geyAuLi51c2VybmFtZSB9O1xuICAgIHRoaXMubWVzc2FnZUJhclNlcnZpY2UuZXJyb3IoZXJyb3JNc2csIHRoaXMubWVzc2FnZU9wdGlvbnMpO1xuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIHVzZXJJbmZvXG4gICAgfSk7XG4gIH1cblxuICBAQWN0aW9uKEFjY291bnRTZXRQYXNzd29yZEFjdGlvbilcbiAgcHVibGljIG9uQWNjb3VudFNldFBhc3N3b3JkQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PExvZ2luU3RhdGVNb2RlbD4sIHsgcGFzc3dvcmQgfTogQWNjb3VudFNldFBhc3N3b3JkQWN0aW9uKSB7XG4gICAgY29uc3QgdXNlckluZm8gPSBjdHguZ2V0U3RhdGUoKS51c2VySW5mbztcbiAgICBsZXQgZGF0YTogYW55O1xuICAgIGxldCBzZXRQYXNzd29yZCQ6IE9ic2VydmFibGU8VXNlckR0b0h0dHBSZXNwb25zZURhdGEgfCBBY3RpdmF0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YT47XG5cbiAgICBpZiAodGhpcy5hcHBDb25maWcuZ2V0Q29uZmlnKCkuYXBwVHlwZSA9PT0gQXBwVHlwZS5DbG91ZCkge1xuICAgICAgZGF0YSA9IG5ldyBBY3RpdmF0ZVVzZXJEdG8oe1xuICAgICAgICBwYXNzd29yZCxcbiAgICAgICAgY3VycmVudFBhc3N3b3JkOiBudWxsLFxuICAgICAgICB1c2VyU3RhdHVzOiB1c2VySW5mby5zdGF0dXMgYXMgVXNlclN0YXR1c1xuICAgICAgfSk7XG5cbiAgICAgIHNldFBhc3N3b3JkJCA9IHRoaXMudXNlcnNDbG91ZFNlcnZpY2VQcm94eS5hY3RpdmF0ZShkYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGF0YSA9IG5ldyBVc2VyVXBkYXRlUGFzc3dvcmREdG8oe1xuICAgICAgICBwYXNzd29yZCxcbiAgICAgICAgY3VycmVudFBhc3N3b3JkOiBudWxsXG4gICAgICB9KTtcbiAgICAgIHNldFBhc3N3b3JkJCA9IHRoaXMudXNlcnNDbG91ZFNlcnZpY2VQcm94eS51cGRhdGVVc2VyUGFzc3dvcmQoZGF0YSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNldFBhc3N3b3JkJC5waXBlKFxuICAgICAgbWFwKChhY3RpdmF0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YTogQWN0aXZhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEpID0+IHtcbiAgICAgICAgaWYgKGFjdGl2YXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhLmRhdGEuaXNTdWNjZXNzKSB7XG4gICAgICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICAgICAgdGZhU2V0dXA6IGFjdGl2YXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhLmRhdGE/LnRmYVNldHVwLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihhY3RpdmF0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YS5kYXRhLmVycm9yTWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgY2F0Y2hFcnJvcihlID0+IHtcbiAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogZTtcbiAgICAgICAgdGhpcy5tZXNzYWdlQmFyU2VydmljZS5lcnJvcihlcnJvck1lc3NhZ2UsIHRoaXMubWVzc2FnZU9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvck1lc3NhZ2UpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgQEFjdGlvbihWYWxpZGF0ZVVzZXJUb2tlbkFjdGlvbilcbiAgcHVibGljIG9uVmFsaWRhdGVVc2VyVG9rZW5BY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8TG9naW5TdGF0ZU1vZGVsPiwgeyB0b2tlbiwgdG9rZW5UeXBlIH06IFZhbGlkYXRlVXNlclRva2VuQWN0aW9uKSB7XG4gICAgY29uc3QgcGN0OiBhbnkgPSBQYXNzd29yZENoYW5nZVR5cGVbdG9rZW5UeXBlXTtcbiAgICByZXR1cm4gdGhpcy51c2Vyc0lkZW50aXR5U2VydmljZVByb3h5LnZhbGlkYXRlQWN0aXZhdGlvbih0b2tlbiwgUGFzc3dvcmRDaGFuZ2VUeXBlW1Bhc3N3b3JkQ2hhbmdlVHlwZVt0b2tlblR5cGVdXSkucGlwZSh0YXAoe1xuICAgICAgbmV4dDogKHVzZXI6IFZhbGlkYXRlQWN0aXZhdGlvblVzZXJEdG9IdHRwUmVzcG9uc2VEYXRhKSA9PiB7XG4gICAgICAgIGlmICh1c2VyPy5kYXRhKSB7XG4gICAgICAgICAgY29uc3QgdXNlckluZm86IFVzZXJJbmZvID0ge1xuICAgICAgICAgICAgdXNlcklkOiB1c2VyLmRhdGEuaWQsXG4gICAgICAgICAgICB1c2VybmFtZTogdXNlci5kYXRhLnVOYW1lLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6IGAke3VzZXIuZGF0YS5uYW1lfSAke3VzZXIuZGF0YS5sYXN0TmFtZX1gLFxuICAgICAgICAgICAgc3RhdHVzOiB1c2VyLmRhdGEuc3RhdHVzLFxuICAgICAgICAgICAgcG1sOiB1c2VyLmRhdGEucG1sXG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZiAodXNlci5kYXRhLnN0YXR1cyAhPT0gVXNlclN0YXR1cy5CbG9ja2VkKSB7XG4gICAgICAgICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgICAgICAgIHVzZXJJbmZvLFxuICAgICAgICAgICAgICBwYXNzd29yZENoYW5nZVR5cGU6IHBjdCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLmVycm9yKExvY2FsaXphdGlvbi5ub25fYWN0aXZlX3VzZXIsIHRoaXMubWVzc2FnZU9wdGlvbnMpO1xuICAgICAgICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICAgICAgICB1c2VySW5mbyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGVycm9yOiBlID0+IHtcbiAgICAgICAgY29uc3QgZXJyb3JKc29uOiBQcm9ibGVtRGV0YWlscyA9IEpTT04ucGFyc2UoZS5yZXNwb25zZSkgYXMgUHJvYmxlbURldGFpbHM7XG4gICAgICAgIHRoaXMubWVzc2FnZUJhclNlcnZpY2UuZXJyb3IocGFyc2VBcGlFcnJvck1lc3NhZ2UoZSksIHRoaXMubWVzc2FnZU9wdGlvbnMpO1xuICAgICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgICAgdXNlckluZm86IHtcbiAgICAgICAgICAgIHVzZXJuYW1lOiBlcnJvckpzb24uaW5zdGFuY2UsXG4gICAgICAgICAgICB1c2VySWQ6IG51bGwsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogbnVsbFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pKTtcbiAgfVxuXG4gIEBBY3Rpb24oVmVyaWZ5MkZhY3RvckF1dGhlbnRpY2F0aW9uQWN0aW9uKVxuICBwdWJsaWMgb25WZXJpZnkyRmFjdG9yQXV0aGVudGljYXRpb25BY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8TG9naW5TdGF0ZU1vZGVsPiwgeyB1c2VyTmFtZSwgY29kZSwgc2V0dXAyRmEgfTogVmVyaWZ5MkZhY3RvckF1dGhlbnRpY2F0aW9uQWN0aW9uKSB7XG4gICAgY29uc3QgdmVyaWZ5MkZhY3RvckF1dGhSZXF1ZXN0RHRvID0gbmV3IFZlcmlmeTJGYWN0b3JBdXRoUmVxdWVzdER0byh7XG4gICAgICBjb2RlLFxuICAgICAgdXNlck5hbWVcbiAgICB9KTtcblxuICAgIGxldCB2ZXJpZnkyRmFjdG9yQXV0aCQ6IE9ic2VydmFibGU8VmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICBpZiAoc2V0dXAyRmEpIHtcbiAgICAgIHZlcmlmeTJGYWN0b3JBdXRoJCA9IHRoaXMudXNlcnNJZGVudGl0eVNlcnZpY2VQcm94eS52ZXJpZnkyRmFjdG9yQXV0aGVudGljYXRpb24odmVyaWZ5MkZhY3RvckF1dGhSZXF1ZXN0RHRvKTtcbiAgICB9IGVsc2UgeyAvLyBsb2dpbiBmb3IgdXNlciB3aXRoIDJGQSAoYWxyZWFkeSBzZXQgdXApXG4gICAgICB2ZXJpZnkyRmFjdG9yQXV0aCQgPSB0aGlzLnVzZXJzSWRlbnRpdHlTZXJ2aWNlUHJveHkudmVyaWZ5MkZhY3RvckF1dGhlbnRpY2F0aW9uTG9naW4odmVyaWZ5MkZhY3RvckF1dGhSZXF1ZXN0RHRvKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmVyaWZ5MkZhY3RvckF1dGgkLnBpcGUodGFwKHtcbiAgICAgIG5leHQ6ICh2ZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldDogVmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG9IdHRwUmVzcG9uc2VEYXRhKSA9PiB7XG4gICAgICAgIHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLmFjY2Vzc1Rva2VuID0gdmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXQuZGF0YS5hY2Nlc3NUb2tlbjtcbiAgICAgICAgdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UucmVmcmVzaFRva2VuID0gdmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXQuZGF0YS5yZWZyZXNoVG9rZW47XG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFVwZGF0ZUF1dGhUb2tlbkFjdGlvbih2ZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldC5kYXRhLmFjY2Vzc1Rva2VuLHZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0LmRhdGEucmVmcmVzaFRva2VuKSk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IGUgPT4ge1xuICAgICAgICB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLmVycm9yKHBhcnNlQXBpRXJyb3JNZXNzYWdlKGUpLCB0aGlzLm1lc3NhZ2VPcHRpb25zKTtcbiAgICAgIH1cbiAgICB9KSk7XG4gIH1cblxuICBAQWN0aW9uKFNldFRGQVNldHVwQWN0aW9uKVxuICBwdWJsaWMgb25TZXRURkFTZXR1cEFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxMb2dpblN0YXRlTW9kZWw+LCB7IHRmYVNldHVwRHRvIH0pIHtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICB0ZmFTZXR1cDogdGZhU2V0dXBEdG9cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXV0aGVudGljYXRpb25FcnJvck1lc3NhZ2VCYXIoZXJyb3I6IEFwaUV4Y2VwdGlvbikge1xuICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IHBhcnNlQXBpRXJyb3JNZXNzYWdlKGVycm9yKTtcbiAgICBjb25zdCBkYXRhID0gcGFyc2VBcGlFcnJvckRhdGE8QXV0aGVudGljYXRlRXJyb3JSZXNwb25zZUR0bz4oZXJyb3IpO1xuICAgIHRoaXMubWVzc2FnZUJhclNlcnZpY2UuZXJyb3IoZXJyb3JNZXNzYWdlLCB7IHBvc2l0aW9uOiBNZXNzYWdlQmFyUG9zaXRpb24uU3RhdGljLCBtZXNzYWdlUGFyYW1zOiB7IHRlbXBvcmFyeUxvY2tlZE1pbnV0ZXM6IGRhdGE/LnRlbXBvcmFyeUJsb2NrZWRUaW1lIH0gfSk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFyTXNsTG9naW5DYWNoZSgpIHtcbiAgICBjb25zdCBjbGVhckNhY2hlUmVxdWVzdDogQ2xlYXJDYWNoZVJlcXVlc3QgPSB7XG4gICAgICBhY2NvdW50OiB0aGlzLm1zYWxTZXJ2aWNlLmluc3RhbmNlLmdldEFsbEFjY291bnRzKClbMF0sXG4gICAgfTtcbiAgICB0aGlzLm1zYWxTZXJ2aWNlLmluc3RhbmNlLmNsZWFyQ2FjaGUoY2xlYXJDYWNoZVJlcXVlc3QpO1xuICAgIHRoaXMubXNhbFNlcnZpY2UubG9nb3V0KCk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFyU2luZ2xlU2luZ09uQ2FjaGUoc2luZ2xlU2lnbk9uUHJvdmlkZXI6IFNpbmdsZVNpZ25PblByb3ZpZGVyKSB7XG4gICAgc3dpdGNoIChzaW5nbGVTaWduT25Qcm92aWRlcikge1xuICAgICAgY2FzZSBTaW5nbGVTaWduT25Qcm92aWRlci5NaWNyb3NvZnQ6XG4gICAgICAgIHRoaXMuY2xlYXJNc2xMb2dpbkNhY2hlKCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFNpbmdsZVNpZ25PblByb3ZpZGVyLlBpbmdGZWRlcmF0ZTpcbiAgICAgICAgdGhpcy5vcGVuSWRBdXRoU2VydmljZS5zaWduT3V0KCk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBsb2NhbFN0b3JhZ2UuY2xlYXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXNlclN0YXR1c0lzQXdhaXRpbmdBY2Nlc3MgPSAoYXV0aFJlc3BvbnNlOiBBdXRoZW50aWNhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEpOiBib29sZWFuID0+XG4gICAgYXV0aFJlc3BvbnNlLmRhdGEuc2luZ2xlU2lnbk9uQXV0aGVudGljYXRpb25EdG8/LmlzQXV0aGVudGljYXRlZCA9PT0gZmFsc2UgJiZcbiAgICBhdXRoUmVzcG9uc2UuZGF0YS5zaW5nbGVTaWduT25BdXRoZW50aWNhdGlvbkR0bz8udXNlclN0YXR1cyA9PT0gVXNlclN0YXR1cy5Bd2FpdGluZ0FjY2VzcztcblxuICBAQWN0aW9uKEJhY2tvZmZpY2VBdXRoZXRpY2F0ZUFjdGlvbilcbiAgcHVibGljIG9uQmFja29mZmljZUF1dGhldGljYXRlQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PExvZ2luU3RhdGVNb2RlbD4sIHsgdG9rZW4sIHRlbmFudEluZm8gfTogQmFja29mZmljZUF1dGhldGljYXRlQWN0aW9uKSB7XG4gICAgY29uc3QgYXV0aGVudGljYXRlUmVxdWVzdER0byA9IG5ldyBBdXRoZW50aWNhdGVCYWNrb2ZmaWNlU3NvUmVxdWVzdER0bygpO1xuICAgIGF1dGhlbnRpY2F0ZVJlcXVlc3REdG8uY29kZSA9IHRva2VuO1xuICAgIGF1dGhlbnRpY2F0ZVJlcXVlc3REdG8udGVuYW50TmFtZSA9IHRlbmFudEluZm8/LnRlbmFudE5hbWU7XG5cbiAgICBjb25zdCBhdXRoZW50aWNhdGVPaWRjJCA9IHRoaXMuYmFja29mZmljZVVzZXJJZGVudGl0eVNlcnZpY2VQcm94eS5iYWNrb2ZmaWNlQXV0aGVudGljYXRlKGF1dGhlbnRpY2F0ZVJlcXVlc3REdG8pO1xuICAgIHJldHVybiBhdXRoZW50aWNhdGVPaWRjJC5waXBlKHRhcCh7XG4gICAgICBuZXh0OiBhdXRoUmVzcG9uc2UgPT4ge1xuICAgICAgICBpZiAoYXV0aFJlc3BvbnNlLmRhdGEubWVzc2FnZSA9PT0gTG9jYWxpemF0aW9uLnNzb19wZW5kaW5nX2FwcHJvdmFsKSB7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5zc29fcGVuZGluZ19hcHByb3ZhbCk7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlQmFyU2VydmljZS5pbmZvKG1lc3NhZ2UsIHsgcG9zaXRpb246IE1lc3NhZ2VCYXJQb3NpdGlvbi5TdGF0aWMgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3BhcmtTZXNzaW9uID0gdGhpcy5hdXRoU2VydmljZS5wcm9jZXNzQXV0aGVudGljYXRlKGF1dGhSZXNwb25zZS5kYXRhKTtcbiAgICAgICAgY3R4LmRpc3BhdGNoKG5ldyBTZXRUZW5hbnRVc2VyQWN0aW9uKHNwYXJrU2Vzc2lvbikpO1xuICAgICAgICBpZiAodGhpcy51c2VyU3RhdHVzSXNBd2FpdGluZ0FjY2VzcyhhdXRoUmVzcG9uc2UpKSB7XG4gICAgICAgICAgdGhpcy5jbGVhclNpbmdsZVNpbmdPbkNhY2hlKFNpbmdsZVNpZ25PblByb3ZpZGVyLk1pY3Jvc29mdCk7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5zc29fcGVuZGluZ19hcHByb3ZhbCk7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlQmFyU2VydmljZS53YXJuKG1lc3NhZ2UsIHsgcG9zaXRpb246IE1lc3NhZ2VCYXJQb3NpdGlvbi5TdGF0aWMgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgLy8gQWZ0ZXIgYXV0aGVudGljYXRpb24gZ2V0IGFwcCBjb25maWd1cmF0aW9uXG4gICAgICAgICAgdGhpcy5sb2dpblRvQmFja29mZmljZSgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZXJyb3I6IGUgPT4ge1xuICAgICAgICB0aGlzLnNpbmdsZVNpbmdPbkVycm9ySGFuZGxpbmcoZSk7XG4gICAgICB9XG4gICAgfSkpO1xuICB9XG5cbiAgQEFjdGlvbihPcGVuSWRBdXRoZXRpY2F0ZUFjdGlvbilcbiAgcHVibGljIG9uT3BlbklkQXV0aGV0aWNhdGVBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8TG9naW5TdGF0ZU1vZGVsPiwgYWN0aW9uOiBPcGVuSWRBdXRoZXRpY2F0ZUFjdGlvbikge1xuICAgIGxldCBhdXRoZW50aWNhdGVPaWRjJDogT2JzZXJ2YWJsZTxBdXRoZW50aWNhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGE+O1xuXG4gICAgY29uc3QgYXV0aGVudGljYXRlUmVxdWVzdER0byA9IG5ldyBBdXRoZW50aWNhdGVXZWJTc29SZXF1ZXN0RHRvKCk7XG4gICAgYXV0aGVudGljYXRlUmVxdWVzdER0by5jb2RlID0gYWN0aW9uLnRva2VuO1xuICAgIGF1dGhlbnRpY2F0ZVJlcXVlc3REdG8udGVuYW50TmFtZSA9IGFjdGlvbi50ZW5hbnRJbmZvPy50ZW5hbnROYW1lO1xuICAgIGNvbnN0IGNvbmZsaWN0RGV0ZWN0ZWQgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KFNlc3Npb25TdGF0ZS5pc0NvbmZsaWN0RGV0ZWN0ZWQpXG4gICAgaWYgKGNvbmZsaWN0RGV0ZWN0ZWQgPT0gbnVsbCkge1xuICAgIGF1dGhlbnRpY2F0ZU9pZGMkID0gdGhpcy51c2Vyc0lkZW50aXR5U2VydmljZVByb3h5Lm9wZW5JZEF1dGhlbnRpY2F0ZShhdXRoZW50aWNhdGVSZXF1ZXN0RHRvKTtcblxuICAgIHJldHVybiBhdXRoZW50aWNhdGVPaWRjJC5waXBlKHRhcCh7XG4gICAgICBuZXh0OiBhdXRoUmVzcG9uc2UgPT4ge1xuICAgICAgICBpZiAoYXV0aFJlc3BvbnNlLmRhdGEubWVzc2FnZSA9PT0gTG9jYWxpemF0aW9uLnNzb19wZW5kaW5nX2FwcHJvdmFsKSB7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5zc29fcGVuZGluZ19hcHByb3ZhbCk7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlQmFyU2VydmljZS5pbmZvKG1lc3NhZ2UsIHsgcG9zaXRpb246IE1lc3NhZ2VCYXJQb3NpdGlvbi5TdGF0aWMgfSk7XG4gICAgICAgICAgYWN0aW9uLmlzUGVuZGluZ0FwcHJvdmFsID0gdHJ1ZTtcbiAgICAgICAgICAvL3RoaXMuY2xlYXJTaW5nbGVTaW5nT25DYWNoZShzaW5nbGVTaWduT25Qcm92aWRlcik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3BhcmtTZXNzaW9uID0gdGhpcy5hdXRoU2VydmljZS5wcm9jZXNzQXV0aGVudGljYXRlKGF1dGhSZXNwb25zZS5kYXRhKTtcbiAgICAgICAgY3R4LmRpc3BhdGNoKG5ldyBTZXRUZW5hbnRVc2VyQWN0aW9uKHNwYXJrU2Vzc2lvbikpO1xuICAgICAgICBcbiAgICAgICAgICBpZiAodGhpcy51c2VyU3RhdHVzSXNBd2FpdGluZ0FjY2VzcyhhdXRoUmVzcG9uc2UpKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyU2luZ2xlU2luZ09uQ2FjaGUoYWN0aW9uLnNpbmdsZVNpZ25PblByb3ZpZGVyKTtcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChMb2NhbGl6YXRpb24uc3NvX3BlbmRpbmdfYXBwcm92YWwpO1xuICAgICAgICAgICAgdGhpcy5tZXNzYWdlQmFyU2VydmljZS53YXJuKG1lc3NhZ2UsIHsgcG9zaXRpb246IE1lc3NhZ2VCYXJQb3NpdGlvbi5TdGF0aWMgfSk7XG4gICAgICAgICAgICBhY3Rpb24uaXNQZW5kaW5nQXBwcm92YWwgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIEFmdGVyIGF1dGhlbnRpY2F0aW9uIGdldCBhcHAgY29uZmlndXJhdGlvblxuICAgICAgICAgICAgdGhpcy5sb2dpblRvU3BhcmsoKTtcbiAgICAgICAgICB9XG4gICAgICB9LFxuICAgICAgICBlcnJvcjogZSA9PiB7XG4gICAgICAgICAgdGhpcy5zaW5nbGVTaW5nT25FcnJvckhhbmRsaW5nKGUpO1xuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgfVxuICB9XG5cbiAgc2luZ2xlU2luZ09uRXJyb3JIYW5kbGluZyhlOiBhbnkpIHtcbiAgICBpZiAoZS5lcnJvck1lc3NhZ2UgPT0gTG9jYWxpemF0aW9uLnNzb19wZW5kaW5nX2FwcHJvdmFsKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLnNzb19wZW5kaW5nX2FwcHJvdmFsKTtcbiAgICAgIHRoaXMubWVzc2FnZUJhclNlcnZpY2UuaW5mbyhtZXNzYWdlLCB7IHBvc2l0aW9uOiBNZXNzYWdlQmFyUG9zaXRpb24uU3RhdGljIH0pO1xuICAgIH1cbiAgICBlbHNlIGlmIChlLmVycm9yTWVzc2FnZSkge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGUuZXJyb3JNZXNzYWdlKTtcbiAgICAgIHRoaXMubWVzc2FnZUJhclNlcnZpY2UuZXJyb3IobWVzc2FnZSwgeyBwb3NpdGlvbjogTWVzc2FnZUJhclBvc2l0aW9uLlN0YXRpYyB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLmVycm9yKHBhcnNlQXBpRXJyb3JNZXNzYWdlKGUpLCB0aGlzLm1lc3NhZ2VPcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICBsb2dpblRvU3BhcmsoKSB7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgTG9hZEFwcENvbmZpZ3VyYXRpb25BY3Rpb24oKSk7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgSGVhbHRoQWN0aW9uKCkpO1xuICAgIHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnVwZGF0ZUxvZ2dlZFRlbmFudCgpO1xuICAgIHRoaXMubG9naW5TZXJ2aWNlLmxvZ2luVG9TcGFyaygpO1xuICB9XG5cbiAgbG9naW5Ub0JhY2tvZmZpY2UoKSB7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgTG9hZEJhY2tvZmZpY2VBcHBDb25maWd1cmF0aW9uQWN0aW9uKCkpO1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IEhlYWx0aEFjdGlvbigpKTtcbiAgICB0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS51cGRhdGVMb2dnZWRUZW5hbnQoKTtcbiAgICB0aGlzLmxvZ2luU2VydmljZS5sb2dpblRvU3BhcmsoKTtcbiAgfVxufVxuIl19
|