@tiba-spark/client-shared-lib 26.2.0-219 → 26.2.0-235

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. package/esm2022/libraries/components/device/device-icon/device-icon.component.mjs +13 -3
  2. package/esm2022/libraries/components/device/device-item/device-item.component.mjs +2 -1
  3. package/esm2022/libraries/constants/global-constants.mjs +2 -1
  4. package/esm2022/libraries/constants/version-constants.mjs +2 -1
  5. package/esm2022/libraries/enums/localization.enum.mjs +6 -1
  6. package/esm2022/libraries/modules/facility/facility.state.mjs +9 -4
  7. package/esm2022/libraries/modules/login/login.actions.mjs +1 -1
  8. package/esm2022/libraries/modules/login/login.state.mjs +8 -2
  9. package/fesm2022/tiba-spark-client-shared-lib.mjs +36 -7
  10. package/fesm2022/tiba-spark-client-shared-lib.mjs.map +1 -1
  11. package/libraries/components/device/device-icon/device-icon.component.d.ts.map +1 -1
  12. package/libraries/components/device/device-item/device-item.component.d.ts +1 -0
  13. package/libraries/components/device/device-item/device-item.component.d.ts.map +1 -1
  14. package/libraries/constants/global-constants.d.ts +1 -0
  15. package/libraries/constants/global-constants.d.ts.map +1 -1
  16. package/libraries/constants/version-constants.d.ts +1 -0
  17. package/libraries/constants/version-constants.d.ts.map +1 -1
  18. package/libraries/enums/localization.enum.d.ts +5 -0
  19. package/libraries/enums/localization.enum.d.ts.map +1 -1
  20. package/libraries/modules/facility/facility.state.d.ts.map +1 -1
  21. package/libraries/modules/login/login.actions.d.ts +2 -2
  22. package/libraries/modules/login/login.actions.d.ts.map +1 -1
  23. package/libraries/modules/login/login.state.d.ts.map +1 -1
  24. package/package.json +1 -1
  25. package/src/libraries/theme/_variables.scss +5 -0
  26. package/src/libraries/theme/assets/icons/devices/thumbnail/lpr-entry-lane-thumb.svg +24 -0
  27. package/src/libraries/theme/assets/icons/devices/thumbnail/lpr-exit-lane-thumb.svg +24 -0
  28. package/src/libraries/theme/components/_dropdown.scss +19 -1
@@ -85,7 +85,13 @@ let LoginState = class LoginState {
85
85
  this.sessionStorageService.setItem(RESET_PASSWORD_EMAIL, JSON.stringify(email));
86
86
  this.store.dispatch(new Navigate(url));
87
87
  this.messageBarService.success(Localization.forgot_password_email_sent_msg, this.messageOptions);
88
- return this.usersCloudServiceProxy.forgotPassword(email, tenantId);
88
+ // Pre-authentication the tenant id is unknown: TenantDetailsDto carries no id, so the tenant
89
+ // resolver leaves tenantInfo.id null. Passing null to forgotPassword throws synchronously
90
+ // ("The parameter 'tenantId' cannot be null."). Fall back to the tenantless endpoint, which
91
+ // resolves the tenant server-side from the email address.
92
+ return tenantId != null
93
+ ? this.usersCloudServiceProxy.forgotPassword(email, tenantId)
94
+ : this.usersCloudServiceProxy.forgotPasswordTenantless(email);
89
95
  }
90
96
  onForgotPasswordTenantless(ctx, { email }) {
91
97
  this.messageBarService.success(Localization.forgot_password_email_sent_msg, this.messageOptions);
@@ -390,4 +396,4 @@ export { LoginState };
390
396
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LoginState, decorators: [{
391
397
  type: Injectable
392
398
  }], 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 }], propDecorators: { onAuthenticateMultipleTenantsAction: [], onForgotPassword: [], onForgotPasswordTenantless: [], onAccountSetPasswordInitAction: [], onAccountSetPasswordErrorAction: [], onAccountSetPasswordAction: [], onValidateUserTokenAction: [], onVerify2FactorAuthenticationAction: [], onSetTFASetupAction: [], onBackofficeAutheticateAction: [], onOpenIdAutheticateAction: [] } });
393
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uc3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtc2hhcmVkLWxpYi9zcmMvbGlicmFyaWVzL21vZHVsZXMvbG9naW4vbG9naW4uc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJM0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBdUIsTUFBTSxhQUFhLENBQUM7QUFDM0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQWMsR0FBRyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUU1RixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzdELE9BQU8sRUFDZ0MsZUFBZSxFQUNILFVBQVUsRUFBRSxxQkFBcUIsRUFDbkYsTUFBTSwyQ0FBMkMsQ0FBQztBQUNuRCxPQUFPLEVBQ0wsbUNBQW1DLEVBQWdDLHNCQUFzQixFQUNoRCw0QkFBNEIsRUFDckUsa0JBQWtCLEVBQUUsb0JBQW9CLEVBQ3hDLDJCQUEyQixFQUM1QixNQUFNLDhDQUE4QyxDQUFDO0FBS3RELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBSXRGLE9BQU8sRUFBRSxZQUFZLEVBQUUsMEJBQTBCLEVBQUUsb0NBQW9DLEVBQUUsbUJBQW1CLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNy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QjtBQTdTYTtJQURiLFFBQVEsRUFBRTs2Q0FHVjtBQUdhO0lBRGIsUUFBUSxFQUFFO2tDQUdWO0FBR2E7SUFEYixRQUFRLEVBQUU7Z0NBR1Y7QUFHYTtJQURiLFFBQVEsRUFBRTtvQ0FHVjtBQUdhO0lBRGIsUUFBUSxFQUFFO2dDQUdWO0FBR2E7SUFEYixRQUFRLEVBQUU7bUNBR1Y7QUF6Q1UsVUFBVTtJQVh0QixLQUFLLENBQWtCO1FBQ3RCLElBQUksRUFBRSxPQUFPO1FBQ2IsUUFBUSxFQUFFO1lBQ1IsUUFBUSxFQUFFLFNBQVM7WUFDbkIsVUFBVSxFQUFFLEVBQUU7WUFDZCxrQkFBa0IsRUFBRSxTQUFTO1lBQzdCLFFBQVEsRUFBRSxFQUFFO1lBQ1osV0FBVyxFQUFFLEVBQUU7WUFDZixRQUFRLEVBQUUsU0FBUztTQUNwQjtLQUNGLENBQUM7R0FDVyxVQUFVLENBd1Z0Qjs7NEZBeFZZLFVBQVU7a0JBWnRCLFVBQVU7dWRBd0RGLG1DQUFtQyxNQWlCbkMsZ0JBQWdCLE1BWWhCLDBCQUEwQixNQU8xQiw4QkFBOEIsTUFROUIsK0JBQStCLE1BUy9CLDBCQUEwQixNQXdDMUIseUJBQXlCLE1Bd0N6QixtQ0FBbUMsTUEwQm5DLG1CQUFtQixNQXdDbkIsNkJBQTZCLE1BaUM3Qix5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNc2FsU2VydmljZSB9IGZyb20gJ0BhenVyZS9tc2FsLWFuZ3VsYXInO1xuaW1wb3J0IHsgQ2xlYXJDYWNoZVJlcXVlc3QgfSBmcm9tICdAYXp1cmUvbXNhbC1icm93c2VyJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IE5hdmlnYXRlIH0gZnJvbSAnQG5neHMvcm91dGVyLXBsdWdpbic7XG5pbXBvcnQgeyBBY3Rpb24sIFNlbGVjdG9yLCBTdGF0ZSwgU3RhdGVDb250ZXh0LCBTdG9yZSB9IGZyb20gJ0BuZ3hzL3N0b3JlJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCwgT2JzZXJ2YWJsZSwgdGFwLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBNZXNzYWdlQmFyUG9zaXRpb24gfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL21lc3NhZ2UtYmFyL21lc3NhZ2UtYmFyLXBvc2l0aW9uLmVudW0nO1xuaW1wb3J0IHsgTWVzc2FnZUJhclNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL21lc3NhZ2UtYmFyL21lc3NhZ2UtYmFyLnNlcnZpY2UnO1xuaW1wb3J0IHsgUkVTRVRfUEFTU1dPUkRfRU1BSUwgfSBmcm9tICcuLi8uLi9jb25zdGFudHMva2V5cy1jb25zdGFudHMnO1xuaW1wb3J0IHsgQXBwVHlwZSB9IGZyb20gJy4uLy4uL2VudW1zL2FwcC10eXBlLmVudW0nO1xuaW1wb3J0IHsgTG9jYWxpemF0aW9uIH0gZnJvbSAnLi4vLi4vZW51bXMvbG9jYWxpemF0aW9uLmVudW0nO1xuaW1wb3J0IHtcbiAgQWN0aXZhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEsIEFjdGl2YXRlVXNlckR0bywgQXBpRXhjZXB0aW9uLCBQcm9ibGVtRGV0YWlscywgVGZhU2V0dXBEdG8sXG4gIFVzZXJEdG9IdHRwUmVzcG9uc2VEYXRhLCBVc2Vyc0Nsb3VkU2VydmljZVByb3h5LCBVc2VyU3RhdHVzLCBVc2VyVXBkYXRlUGFzc3dvcmREdG9cbn0gZnJvbSAnLi4vLi4vc2VydmljZS1wcm94eS9jbG91ZC1zZXJ2aWNlLXByb3hpZXMnO1xuaW1wb3J0IHtcbiAgQXV0aGVudGljYXRlQmFja29mZmljZVNzb1JlcXVlc3REdG8sIEF1dGhlbnRpY2F0ZUVycm9yUmVzcG9uc2VEdG8sIEF1dGhlbnRpY2F0ZVJlcXVlc3REdG8sIEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvLFxuICBBdXRoZW50aWNhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEsIEF1dGhlbnRpY2F0ZVdlYlNzb1JlcXVlc3REdG8sIEJhY2tvZmZpY2VVc2VySWRlbnRpdHlTZXJ2aWNlUHJveHksXG4gIFBhc3N3b3JkQ2hhbmdlVHlwZSwgU2luZ2xlU2lnbk9uUHJvdmlkZXIsIFVzZXJzSWRlbnRpdHlTZXJ2aWNlUHJveHksIFZhbGlkYXRlQWN0aXZhdGlvblVzZXJEdG9IdHRwUmVzcG9uc2VEYXRhLFxuICBWZXJpZnkyRmFjdG9yQXV0aFJlcXVlc3REdG8sIFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvSHR0cFJlc3BvbnNlRGF0YVxufSBmcm9tICcuLi8uLi9zZXJ2aWNlLXByb3h5L2lkZW50aXR5LXNlcnZpY2UtcHJveGllcyc7XG5pbXBvcnQgeyBBcHBDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXBwLWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IE9wZW5JZEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvb3BlbmlkLWF1dGguc2VydmljZSc7XG5pbXBvcnQgeyBSb3V0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yb3V0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IFNlc3Npb25TdG9yYWdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Nlc3Npb24tc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IHBhcnNlQXBpRXJyb3JEYXRhLCBwYXJzZUFwaUVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL3V0aWxzL2FwaS1oZWxwZXIudXRpbCc7XG5pbXBvcnQgeyBTdHJpbmdNYXAgfSBmcm9tICcuLi8uLi91dGlscy9sYW5nLnV0aWwnO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi9hdXRoL2F1dGguc2VydmljZSc7XG5pbXBvcnQgeyBVc2VySW5mbyB9IGZyb20gJy4uL2F1dGgvbW9kZWwvdXNlci1pbmZvLmludGVyZmFjZSc7XG5pbXBvcnQgeyBIZWFsdGhBY3Rpb24sIExvYWRBcHBDb25maWd1cmF0aW9uQWN0aW9uLCBMb2FkQmFja29mZmljZUFwcENvbmZpZ3VyYXRpb25BY3Rpb24sIFNldFRlbmFudFVzZXJBY3Rpb24sIFVwZGF0ZUF1dGhUb2tlbkFjdGlvbiB9IGZyb20gJy4uL2F1dGgvc2Vzc2lvbi5hY3Rpb25zJztcbmltcG9ydCB7IFNlc3Npb25TdGF0ZSB9IGZyb20gJy4uL2F1dGgvc2Vzc2lvbi5zdGF0ZSc7XG5pbXBvcnQge1xuICBBY2NvdW50U2V0UGFzc3dvcmRBY3Rpb24sIEFjY291bnRTZXRQYXNzd29yZEVycm9yQWN0aW9uLCBBY2NvdW50U2V0UGFzc3dvcmRJbml0QWN0aW9uLCBBdXRoZW50aWNhdGVNdWx0aXBsZVRlbmFudHNBY3Rpb24sXG4gIEJhY2tvZmZpY2VBdXRoZXRpY2F0ZUFjdGlvbiwgRm9yZ290UGFzc3dvcmRBY3Rpb24sIEZvcmdvdFBhc3N3b3JkVGVuYW50bGVzc0FjdGlvbixcbiAgT3BlbklkQXV0aGV0aWNhdGVBY3Rpb24sIFNldFRGQVNldHVwQWN0aW9uLCBWYWxpZGF0ZVVzZXJUb2tlbkFjdGlvbiwgVmVyaWZ5MkZhY3RvckF1dGhlbnRpY2F0aW9uQWN0aW9uXG59IGZyb20gJy4vbG9naW4uYWN0aW9ucyc7XG5pbXBvcnQgeyBMb2dpblNlcnZpY2UgfSBmcm9tICcuL2xvZ2luLnNlcnZpY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIExvZ2luU3RhdGVNb2RlbCB7XG4gIHVzZXJJbmZvOiBVc2VySW5mbztcbiAgdGVuYW50TmFtZTogc3RyaW5nO1xuICBwYXNzd29yZENoYW5nZVR5cGU6IFBhc3N3b3JkQ2hhbmdlVHlwZTtcbiAgYWNjb3VudHM6IEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvW107XG4gIGFjY291bnRzTWFwOiBTdHJpbmdNYXA8QXV0aGVudGljYXRlUmVzcG9uc2VEdG8+O1xuICB0ZmFTZXR1cDogVGZhU2V0dXBEdG87XG59XG5cbkBJbmplY3RhYmxlKClcbkBTdGF0ZTxMb2dpblN0YXRlTW9kZWw+KHtcbiAgbmFtZTogJ2xvZ2luJyxcbiAgZGVmYXVsdHM6IHtcbiAgICB1c2VySW5mbzogdW5kZWZpbmVkLFxuICAgIHRlbmFudE5hbWU6ICcnLFxuICAgIHBhc3N3b3JkQ2hhbmdlVHlwZTogdW5kZWZpbmVkLFxuICAgIGFjY291bnRzOiBbXSxcbiAgICBhY2NvdW50c01hcDoge30sXG4gICAgdGZhU2V0dXA6IHVuZGVmaW5lZCxcbiAgfVxufSlcbmV4cG9ydCBjbGFzcyBMb2dpblN0YXRlIHtcblxuICBwcml2YXRlIG1lc3NhZ2VPcHRpb25zID0geyBwb3NpdGlvbjogTWVzc2FnZUJhclBvc2l0aW9uLlN0YXRpYyB9O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc3RvcmU6IFN0b3JlLFxuICAgIHByaXZhdGUgdXNlcnNDbG91ZFNlcnZpY2VQcm94eTogVXNlcnNDbG91ZFNlcnZpY2VQcm94eSxcbiAgICBwcml2YXRlIGJhY2tvZmZpY2VVc2VySWRlbnRpdHlTZXJ2aWNlUHJveHk6IEJhY2tvZmZpY2VVc2VySWRlbnRpdHlTZXJ2aWNlUHJveHksIHByaXZhdGUgb3BlbklkQXV0aFNlcnZpY2U6IE9wZW5JZEF1dGhTZXJ2aWNlLFxuICAgIHByaXZhdGUgdXNlcnNJZGVudGl0eVNlcnZpY2VQcm94eTogVXNlcnNJZGVudGl0eVNlcnZpY2VQcm94eSwgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzZXNzaW9uU3RvcmFnZVNlcnZpY2U6IFNlc3Npb25TdG9yYWdlU2VydmljZSwgcHJpdmF0ZSBsb2dpblNlcnZpY2U6IExvZ2luU2VydmljZSwgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgbXNhbFNlcnZpY2U6IE1zYWxTZXJ2aWNlLCBwcml2YXRlIG1lc3NhZ2VCYXJTZXJ2aWNlOiBNZXNzYWdlQmFyU2VydmljZSwgcHJpdmF0ZSBhcHBDb25maWc6IEFwcENvbmZpZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZVNlcnZpY2U6IFJvdXRlU2VydmljZSkge1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyB0d29GYWN0b3JTZXR1cEZvclVzZXIoc3RhdGU6IExvZ2luU3RhdGVNb2RlbCk6IFRmYVNldHVwRHRvIHtcbiAgICByZXR1cm4gc3RhdGUudGZhU2V0dXA7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIHRlbmFudE5hbWUoc3RhdGU6IExvZ2luU3RhdGVNb2RlbCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN0YXRlLnRlbmFudE5hbWU7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIHVzZXJJbmZvKHN0YXRlOiBMb2dpblN0YXRlTW9kZWwpOiBVc2VySW5mbyB7XG4gICAgcmV0dXJuIHN0YXRlLnVzZXJJbmZvO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyB0ZW1wbGF0ZVR5cGUoc3RhdGU6IExvZ2luU3RhdGVNb2RlbCk6IFBhc3N3b3JkQ2hhbmdlVHlwZSB7XG4gICAgcmV0dXJuIHN0YXRlLnBhc3N3b3JkQ2hhbmdlVHlwZTtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgYWNjb3VudHMoc3RhdGU6IExvZ2luU3RhdGVNb2RlbCk6IEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvW10ge1xuICAgIHJldHVybiBzdGF0ZS5hY2NvdW50cztcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgYWNjb3VudHNNYXAoc3RhdGU6IExvZ2luU3RhdGVNb2RlbCk6IFN0cmluZ01hcDxBdXRoZW50aWNhdGVSZXNwb25zZUR0bz4ge1xuICAgIHJldHVybiBzdGF0ZS5hY2NvdW50c01hcDtcbiAgfVxuXG4gIEBBY3Rpb24oQXV0aGVudGljYXRlTXVsdGlwbGVUZW5hbnRzQWN0aW9uKVxuICBwdWJsaWMgb25BdXRoZW50aWNhdGVNdWx0aXBsZVRlbmFudHNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8TG9naW5TdGF0ZU1vZGVsPiwgeyB1c2VybmFtZSwgcGFzc3dvcmQgfTogQXV0aGVudGljYXRlTXVsdGlwbGVUZW5hbnRzQWN0aW9uKSB7XG4gICAgY29uc3QgYXV0aGVudGljYXRlUmVxdWVzdER0byA9IG5ldyBBdXRoZW50aWNhdGVSZXF1ZXN0RHRvKCk7XG4gICAgYXV0aGVudGljYXRlUmVxdWVzdER0by51c2VybmFtZSA9IHVzZXJuYW1lO1xuICAgIGF1dGhlbnRpY2F0ZVJlcXVlc3REdG8ucGFzc3dvcmQgPSBwYXNzd29yZDtcbiAgICBhdXRoZW50aWNhdGVSZXF1ZXN0RHRvLnRlbmFudE5hbWUgPSAnJztcbiAgICByZXR1cm4gdGhpcy51c2Vyc0lkZW50aXR5U2VydmljZVByb3h5Lm11bHRpVGVuYW50c0F1dGhlbnRpY2F0ZShhdXRoZW50aWNhdGVSZXF1ZXN0RHRvKS5waXBlKHRhcCh7XG4gICAgICBuZXh0OiBhY2NvdW50c0h0dHBSZXNwb25zZURhdGEgPT4ge1xuICAgICAgICBjb25zdCBhY2NvdW50cyA9IGFjY291bnRzSHR0cFJlc3BvbnNlRGF0YS5kYXRhO1xuICAgICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgICAgYWNjb3VudHNcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IGUgPT4gdGhpcy5hdXRoZW50aWNhdGlvbkVycm9yTWVzc2FnZUJhcihlKVxuICAgIH0pKTtcbiAgfVxuXG4gIEBBY3Rpb24oRm9yZ290UGFzc3dvcmRBY3Rpb24pXG4gIHB1YmxpYyBvbkZvcmdvdFBhc3N3b3JkKGN0eDogU3RhdGVDb250ZXh0PExvZ2luU3RhdGVNb2RlbD4sIHsgZW1haWwsIHRlbmFudElkIH06IEZvcmdvdFBhc3N3b3JkQWN0aW9uKSB7XG4gICAgY29uc3QgaXNNb2JpbGVBcHBNb2RlID0gdGhpcy5hcHBDb25maWcuZ2V0Q29uZmlnKCkuYXBwVHlwZSA9PT0gQXBwVHlwZS5Nb2JpbGU7XG4gICAgY29uc3QgcGF0aCA9IFsnYWNjb3VudCcsICdmb3Jnb3QtcGFzc3dvcmQtc3VjY2VzcyddO1xuICAgIGNvbnN0IHVybCA9IGlzTW9iaWxlQXBwTW9kZSA/IHBhdGggOiB0aGlzLnJvdXRlU2VydmljZS5nZXROYXZpZ2F0aW9uUm91dGUocGF0aCk7XG5cbiAgICB0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS5zZXRJdGVtKFJFU0VUX1BBU1NXT1JEX0VNQUlMLCBKU09OLnN0cmluZ2lmeShlbWFpbCkpO1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IE5hdmlnYXRlKHVybCkpO1xuICAgIHRoaXMubWVzc2FnZUJhclNlcnZpY2Uuc3VjY2VzcyhMb2NhbGl6YXRpb24uZm9yZ290X3Bhc3N3b3JkX2VtYWlsX3NlbnRfbXNnLCB0aGlzLm1lc3NhZ2VPcHRpb25zKTtcbiAgICByZXR1cm4gdGhpcy51c2Vyc0Nsb3VkU2VydmljZVByb3h5LmZvcmdvdFBhc3N3b3JkKGVtYWlsLCB0ZW5hbnRJZCk7XG4gIH1cblxuICBAQWN0aW9uKEZvcmdvdFBhc3N3b3JkVGVuYW50bGVzc0FjdGlvbilcbiAgcHVibGljIG9uRm9yZ290UGFzc3dvcmRUZW5hbnRsZXNzKGN0eDogU3RhdGVDb250ZXh0PExvZ2luU3RhdGVNb2RlbD4sIHsgZW1haWwgfTogRm9yZ290UGFzc3dvcmRBY3Rpb24pIHtcbiAgICB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLnN1Y2Nlc3MoTG9jYWxpemF0aW9uLmZvcmdvdF9wYXNzd29yZF9lbWFpbF9zZW50X21zZywgdGhpcy5tZXNzYWdlT3B0aW9ucyk7XG4gICAgcmV0dXJuIHRoaXMudXNlcnNDbG91ZFNlcnZpY2VQcm94eS5mb3Jnb3RQYXNzd29yZFRlbmFudGxlc3MoZW1haWwpO1xuICB9XG5cblxuICBAQWN0aW9uKEFjY291bnRTZXRQYXNzd29yZEluaXRBY3Rpb24pXG4gIHB1YmxpYyBvbkFjY291bnRTZXRQYXNzd29yZEluaXRBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8TG9naW5TdGF0ZU1vZGVsPiwgeyB1c2VySW5mbywgY29tcG9uZW50VHlwZSB9KSB7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgdXNlckluZm8sXG4gICAgICBwYXNzd29yZENoYW5nZVR5cGU6IGNvbXBvbmVudFR5cGVcbiAgICB9KTtcbiAgfVxuXG4gIEBBY3Rpb24oQWNjb3VudFNldFBhc3N3b3JkRXJyb3JBY3Rpb24pXG4gIHB1YmxpYyBvbkFjY291bnRTZXRQYXNzd29yZEVycm9yQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PExvZ2luU3RhdGVNb2RlbD4sIHsgZXJyb3JNc2csIHVzZXJuYW1lIH0pIHtcbiAgICBjb25zdCB1c2VySW5mbzogVXNlckluZm8gPSB7IC4uLnVzZXJuYW1lIH07XG4gICAgdGhpcy5tZXNzYWdlQmFyU2VydmljZS5lcnJvcihlcnJvck1zZywgdGhpcy5tZXNzYWdlT3B0aW9ucyk7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgdXNlckluZm9cbiAgICB9KTtcbiAgfVxuXG4gIEBBY3Rpb24oQWNjb3VudFNldFBhc3N3b3JkQWN0aW9uKVxuICBwdWJsaWMgb25BY2NvdW50U2V0UGFzc3dvcmRBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8TG9naW5TdGF0ZU1vZGVsPiwgeyBwYXNzd29yZCB9OiBBY2NvdW50U2V0UGFzc3dvcmRBY3Rpb24pIHtcbiAgICBjb25zdCB1c2VySW5mbyA9IGN0eC5nZXRTdGF0ZSgpLnVzZXJJbmZvO1xuICAgIGxldCBkYXRhOiBhbnk7XG4gICAgbGV0IHNldFBhc3N3b3JkJDogT2JzZXJ2YWJsZTxVc2VyRHRvSHR0cFJlc3BvbnNlRGF0YSB8IEFjdGl2YXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhPjtcblxuICAgIGlmICh0aGlzLmFwcENvbmZpZy5nZXRDb25maWcoKS5hcHBUeXBlID09PSBBcHBUeXBlLkNsb3VkKSB7XG4gICAgICBkYXRhID0gbmV3IEFjdGl2YXRlVXNlckR0byh7XG4gICAgICAgIHBhc3N3b3JkLFxuICAgICAgICBjdXJyZW50UGFzc3dvcmQ6IG51bGwsXG4gICAgICAgIHVzZXJTdGF0dXM6IHVzZXJJbmZvLnN0YXR1cyBhcyBVc2VyU3RhdHVzXG4gICAgICB9KTtcblxuICAgICAgc2V0UGFzc3dvcmQkID0gdGhpcy51c2Vyc0Nsb3VkU2VydmljZVByb3h5LmFjdGl2YXRlKGRhdGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXRhID0gbmV3IFVzZXJVcGRhdGVQYXNzd29yZER0byh7XG4gICAgICAgIHBhc3N3b3JkLFxuICAgICAgICBjdXJyZW50UGFzc3dvcmQ6IG51bGxcbiAgICAgIH0pO1xuICAgICAgc2V0UGFzc3dvcmQkID0gdGhpcy51c2Vyc0Nsb3VkU2VydmljZVByb3h5LnVwZGF0ZVVzZXJQYXNzd29yZChkYXRhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2V0UGFzc3dvcmQkLnBpcGUoXG4gICAgICBtYXAoKGFjdGl2YXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhOiBBY3RpdmF0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YSkgPT4ge1xuICAgICAgICBpZiAoYWN0aXZhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEuZGF0YS5pc1N1Y2Nlc3MpIHtcbiAgICAgICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgICAgICB0ZmFTZXR1cDogYWN0aXZhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEuZGF0YT8udGZhU2V0dXAsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGFjdGl2YXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhLmRhdGEuZXJyb3JNZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBjYXRjaEVycm9yKGUgPT4ge1xuICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBlO1xuICAgICAgICB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLmVycm9yKGVycm9yTWVzc2FnZSwgdGhpcy5tZXNzYWdlT3B0aW9ucyk7XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yTWVzc2FnZSk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBAQWN0aW9uKFZhbGlkYXRlVXNlclRva2VuQWN0aW9uKVxuICBwdWJsaWMgb25WYWxpZGF0ZVVzZXJUb2tlbkFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxMb2dpblN0YXRlTW9kZWw+LCB7IHRva2VuLCB0b2tlblR5cGUgfTogVmFsaWRhdGVVc2VyVG9rZW5BY3Rpb24pIHtcbiAgICBjb25zdCBwY3Q6IGFueSA9IFBhc3N3b3JkQ2hhbmdlVHlwZVt0b2tlblR5cGVdO1xuICAgIHJldHVybiB0aGlzLnVzZXJzSWRlbnRpdHlTZXJ2aWNlUHJveHkudmFsaWRhdGVBY3RpdmF0aW9uKHRva2VuLCBQYXNzd29yZENoYW5nZVR5cGVbUGFzc3dvcmRDaGFuZ2VUeXBlW3Rva2VuVHlwZV1dKS5waXBlKHRhcCh7XG4gICAgICBuZXh0OiAodXNlcjogVmFsaWRhdGVBY3RpdmF0aW9uVXNlckR0b0h0dHBSZXNwb25zZURhdGEpID0+IHtcbiAgICAgICAgaWYgKHVzZXI/LmRhdGEpIHtcbiAgICAgICAgICBjb25zdCB1c2VySW5mbzogVXNlckluZm8gPSB7XG4gICAgICAgICAgICB1c2VySWQ6IHVzZXIuZGF0YS5pZCxcbiAgICAgICAgICAgIHVzZXJuYW1lOiB1c2VyLmRhdGEudU5hbWUsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogYCR7dXNlci5kYXRhLm5hbWV9ICR7dXNlci5kYXRhLmxhc3ROYW1lfWAsXG4gICAgICAgICAgICBzdGF0dXM6IHVzZXIuZGF0YS5zdGF0dXMsXG4gICAgICAgICAgICBwbWw6IHVzZXIuZGF0YS5wbWxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmICh1c2VyLmRhdGEuc3RhdHVzICE9PSBVc2VyU3RhdHVzLkJsb2NrZWQpIHtcbiAgICAgICAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgICAgICAgdXNlckluZm8sXG4gICAgICAgICAgICAgIHBhc3N3b3JkQ2hhbmdlVHlwZTogcGN0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZUJhclNlcnZpY2UuZXJyb3IoTG9jYWxpemF0aW9uLm5vbl9hY3RpdmVfdXNlciwgdGhpcy5tZXNzYWdlT3B0aW9ucyk7XG4gICAgICAgICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgICAgICAgIHVzZXJJbmZvLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZXJyb3I6IGUgPT4ge1xuICAgICAgICBjb25zdCBlcnJvckpzb246IFByb2JsZW1EZXRhaWxzID0gSlNPTi5wYXJzZShlLnJlc3BvbnNlKSBhcyBQcm9ibGVtRGV0YWlscztcbiAgICAgICAgdGhpcy5tZXNzYWdlQmFyU2VydmljZS5lcnJvcihwYXJzZUFwaUVycm9yTWVzc2FnZShlKSwgdGhpcy5tZXNzYWdlT3B0aW9ucyk7XG4gICAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgICB1c2VySW5mbzoge1xuICAgICAgICAgICAgdXNlcm5hbWU6IGVycm9ySnNvbi5pbnN0YW5jZSxcbiAgICAgICAgICAgIHVzZXJJZDogbnVsbCxcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiBudWxsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSkpO1xuICB9XG5cbiAgQEFjdGlvbihWZXJpZnkyRmFjdG9yQXV0aGVudGljYXRpb25BY3Rpb24pXG4gIHB1YmxpYyBvblZlcmlmeTJGYWN0b3JBdXRoZW50aWNhdGlvbkFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxMb2dpblN0YXRlTW9kZWw+LCB7IHVzZXJOYW1lLCBjb2RlLCBzZXR1cDJGYSB9OiBWZXJpZnkyRmFjdG9yQXV0aGVudGljYXRpb25BY3Rpb24pIHtcbiAgICBjb25zdCB2ZXJpZnkyRmFjdG9yQXV0aFJlcXVlc3REdG8gPSBuZXcgVmVyaWZ5MkZhY3RvckF1dGhSZXF1ZXN0RHRvKHtcbiAgICAgIGNvZGUsXG4gICAgICB1c2VyTmFtZVxuICAgIH0pO1xuXG4gICAgbGV0IHZlcmlmeTJGYWN0b3JBdXRoJDogT2JzZXJ2YWJsZTxWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgIGlmIChzZXR1cDJGYSkge1xuICAgICAgdmVyaWZ5MkZhY3RvckF1dGgkID0gdGhpcy51c2Vyc0lkZW50aXR5U2VydmljZVByb3h5LnZlcmlmeTJGYWN0b3JBdXRoZW50aWNhdGlvbih2ZXJpZnkyRmFjdG9yQXV0aFJlcXVlc3REdG8pO1xuICAgIH0gZWxzZSB7IC8vIGxvZ2luIGZvciB1c2VyIHdpdGggMkZBIChhbHJlYWR5IHNldCB1cClcbiAgICAgIHZlcmlmeTJGYWN0b3JBdXRoJCA9IHRoaXMudXNlcnNJZGVudGl0eVNlcnZpY2VQcm94eS52ZXJpZnkyRmFjdG9yQXV0aGVudGljYXRpb25Mb2dpbih2ZXJpZnkyRmFjdG9yQXV0aFJlcXVlc3REdG8pO1xuICAgIH1cblxuICAgIHJldHVybiB2ZXJpZnkyRmFjdG9yQXV0aCQucGlwZSh0YXAoe1xuICAgICAgbmV4dDogKHZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0OiBWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0b0h0dHBSZXNwb25zZURhdGEpID0+IHtcbiAgICAgICAgdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UuYWNjZXNzVG9rZW4gPSB2ZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldC5kYXRhLmFjY2Vzc1Rva2VuO1xuICAgICAgICB0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS5yZWZyZXNoVG9rZW4gPSB2ZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldC5kYXRhLnJlZnJlc2hUb2tlbjtcbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgVXBkYXRlQXV0aFRva2VuQWN0aW9uKHZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0LmRhdGEuYWNjZXNzVG9rZW4sdmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXQuZGF0YS5yZWZyZXNoVG9rZW4pKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogZSA9PiB7XG4gICAgICAgIHRoaXMubWVzc2FnZUJhclNlcnZpY2UuZXJyb3IocGFyc2VBcGlFcnJvck1lc3NhZ2UoZSksIHRoaXMubWVzc2FnZU9wdGlvbnMpO1xuICAgICAgfVxuICAgIH0pKTtcbiAgfVxuXG4gIEBBY3Rpb24oU2V0VEZBU2V0dXBBY3Rpb24pXG4gIHB1YmxpYyBvblNldFRGQVNldHVwQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PExvZ2luU3RhdGVNb2RlbD4sIHsgdGZhU2V0dXBEdG8gfSkge1xuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIHRmYVNldHVwOiB0ZmFTZXR1cER0b1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhdXRoZW50aWNhdGlvbkVycm9yTWVzc2FnZUJhcihlcnJvcjogQXBpRXhjZXB0aW9uKSB7XG4gICAgY29uc3QgZXJyb3JNZXNzYWdlID0gcGFyc2VBcGlFcnJvck1lc3NhZ2UoZXJyb3IpO1xuICAgIGNvbnN0IGRhdGEgPSBwYXJzZUFwaUVycm9yRGF0YTxBdXRoZW50aWNhdGVFcnJvclJlc3BvbnNlRHRvPihlcnJvcik7XG4gICAgdGhpcy5tZXNzYWdlQmFyU2VydmljZS5lcnJvcihlcnJvck1lc3NhZ2UsIHsgcG9zaXRpb246IE1lc3NhZ2VCYXJQb3NpdGlvbi5TdGF0aWMsIG1lc3NhZ2VQYXJhbXM6IHsgdGVtcG9yYXJ5TG9ja2VkTWludXRlczogZGF0YT8udGVtcG9yYXJ5QmxvY2tlZFRpbWUgfSB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJNc2xMb2dpbkNhY2hlKCkge1xuICAgIGNvbnN0IGNsZWFyQ2FjaGVSZXF1ZXN0OiBDbGVhckNhY2hlUmVxdWVzdCA9IHtcbiAgICAgIGFjY291bnQ6IHRoaXMubXNhbFNlcnZpY2UuaW5zdGFuY2UuZ2V0QWxsQWNjb3VudHMoKVswXSxcbiAgICB9O1xuICAgIHRoaXMubXNhbFNlcnZpY2UuaW5zdGFuY2UuY2xlYXJDYWNoZShjbGVhckNhY2hlUmVxdWVzdCk7XG4gICAgdGhpcy5tc2FsU2VydmljZS5sb2dvdXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJTaW5nbGVTaW5nT25DYWNoZShzaW5nbGVTaWduT25Qcm92aWRlcjogU2luZ2xlU2lnbk9uUHJvdmlkZXIpIHtcbiAgICBzd2l0Y2ggKHNpbmdsZVNpZ25PblByb3ZpZGVyKSB7XG4gICAgICBjYXNlIFNpbmdsZVNpZ25PblByb3ZpZGVyLk1pY3Jvc29mdDpcbiAgICAgICAgdGhpcy5jbGVhck1zbExvZ2luQ2FjaGUoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgU2luZ2xlU2lnbk9uUHJvdmlkZXIuUGluZ0ZlZGVyYXRlOlxuICAgICAgICB0aGlzLm9wZW5JZEF1dGhTZXJ2aWNlLnNpZ25PdXQoKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGxvY2FsU3RvcmFnZS5jbGVhcigpO1xuICB9XG5cbiAgcHJpdmF0ZSB1c2VyU3RhdHVzSXNBd2FpdGluZ0FjY2VzcyA9IChhdXRoUmVzcG9uc2U6IEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YSk6IGJvb2xlYW4gPT5cbiAgICBhdXRoUmVzcG9uc2UuZGF0YS5zaW5nbGVTaWduT25BdXRoZW50aWNhdGlvbkR0bz8uaXNBdXRoZW50aWNhdGVkID09PSBmYWxzZSAmJlxuICAgIGF1dGhSZXNwb25zZS5kYXRhLnNpbmdsZVNpZ25PbkF1dGhlbnRpY2F0aW9uRHRvPy51c2VyU3RhdHVzID09PSBVc2VyU3RhdHVzLkF3YWl0aW5nQWNjZXNzO1xuXG4gIEBBY3Rpb24oQmFja29mZmljZUF1dGhldGljYXRlQWN0aW9uKVxuICBwdWJsaWMgb25CYWNrb2ZmaWNlQXV0aGV0aWNhdGVBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8TG9naW5TdGF0ZU1vZGVsPiwgeyB0b2tlbiwgdGVuYW50SW5mbyB9OiBCYWNrb2ZmaWNlQXV0aGV0aWNhdGVBY3Rpb24pIHtcbiAgICBjb25zdCBhdXRoZW50aWNhdGVSZXF1ZXN0RHRvID0gbmV3IEF1dGhlbnRpY2F0ZUJhY2tvZmZpY2VTc29SZXF1ZXN0RHRvKCk7XG4gICAgYXV0aGVudGljYXRlUmVxdWVzdER0by5jb2RlID0gdG9rZW47XG4gICAgYXV0aGVudGljYXRlUmVxdWVzdER0by50ZW5hbnROYW1lID0gdGVuYW50SW5mbz8udGVuYW50TmFtZTtcblxuICAgIGNvbnN0IGF1dGhlbnRpY2F0ZU9pZGMkID0gdGhpcy5iYWNrb2ZmaWNlVXNlcklkZW50aXR5U2VydmljZVByb3h5LmJhY2tvZmZpY2VBdXRoZW50aWNhdGUoYXV0aGVudGljYXRlUmVxdWVzdER0byk7XG4gICAgcmV0dXJuIGF1dGhlbnRpY2F0ZU9pZGMkLnBpcGUodGFwKHtcbiAgICAgIG5leHQ6IGF1dGhSZXNwb25zZSA9PiB7XG4gICAgICAgIGlmIChhdXRoUmVzcG9uc2UuZGF0YS5tZXNzYWdlID09PSBMb2NhbGl6YXRpb24uc3NvX3BlbmRpbmdfYXBwcm92YWwpIHtcbiAgICAgICAgICBjb25zdCBtZXNzYWdlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLnNzb19wZW5kaW5nX2FwcHJvdmFsKTtcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLmluZm8obWVzc2FnZSwgeyBwb3NpdGlvbjogTWVzc2FnZUJhclBvc2l0aW9uLlN0YXRpYyB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzcGFya1Nlc3Npb24gPSB0aGlzLmF1dGhTZXJ2aWNlLnByb2Nlc3NBdXRoZW50aWNhdGUoYXV0aFJlc3BvbnNlLmRhdGEpO1xuICAgICAgICBjdHguZGlzcGF0Y2gobmV3IFNldFRlbmFudFVzZXJBY3Rpb24oc3BhcmtTZXNzaW9uKSk7XG4gICAgICAgIGlmICh0aGlzLnVzZXJTdGF0dXNJc0F3YWl0aW5nQWNjZXNzKGF1dGhSZXNwb25zZSkpIHtcbiAgICAgICAgICB0aGlzLmNsZWFyU2luZ2xlU2luZ09uQ2FjaGUoU2luZ2xlU2lnbk9uUHJvdmlkZXIuTWljcm9zb2Z0KTtcbiAgICAgICAgICBjb25zdCBtZXNzYWdlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLnNzb19wZW5kaW5nX2FwcHJvdmFsKTtcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLndhcm4obWVzc2FnZSwgeyBwb3NpdGlvbjogTWVzc2FnZUJhclBvc2l0aW9uLlN0YXRpYyB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAvLyBBZnRlciBhdXRoZW50aWNhdGlvbiBnZXQgYXBwIGNvbmZpZ3VyYXRpb25cbiAgICAgICAgICB0aGlzLmxvZ2luVG9CYWNrb2ZmaWNlKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBlcnJvcjogZSA9PiB7XG4gICAgICAgIHRoaXMuc2luZ2xlU2luZ09uRXJyb3JIYW5kbGluZyhlKTtcbiAgICAgIH1cbiAgICB9KSk7XG4gIH1cblxuICBAQWN0aW9uKE9wZW5JZEF1dGhldGljYXRlQWN0aW9uKVxuICBwdWJsaWMgb25PcGVuSWRBdXRoZXRpY2F0ZUFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxMb2dpblN0YXRlTW9kZWw+LCBhY3Rpb246IE9wZW5JZEF1dGhldGljYXRlQWN0aW9uKSB7XG4gICAgbGV0IGF1dGhlbnRpY2F0ZU9pZGMkOiBPYnNlcnZhYmxlPEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YT47XG5cbiAgICBjb25zdCBhdXRoZW50aWNhdGVSZXF1ZXN0RHRvID0gbmV3IEF1dGhlbnRpY2F0ZVdlYlNzb1JlcXVlc3REdG8oKTtcbiAgICBhdXRoZW50aWNhdGVSZXF1ZXN0RHRvLmNvZGUgPSBhY3Rpb24udG9rZW47XG4gICAgYXV0aGVudGljYXRlUmVxdWVzdER0by50ZW5hbnROYW1lID0gYWN0aW9uLnRlbmFudEluZm8/LnRlbmFudE5hbWU7XG4gICAgY29uc3QgY29uZmxpY3REZXRlY3RlZCA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoU2Vzc2lvblN0YXRlLmlzQ29uZmxpY3REZXRlY3RlZClcbiAgICBpZiAoY29uZmxpY3REZXRlY3RlZCA9PSBudWxsKSB7XG4gICAgYXV0aGVudGljYXRlT2lkYyQgPSB0aGlzLnVzZXJzSWRlbnRpdHlTZXJ2aWNlUHJveHkub3BlbklkQXV0aGVudGljYXRlKGF1dGhlbnRpY2F0ZVJlcXVlc3REdG8pO1xuXG4gICAgcmV0dXJuIGF1dGhlbnRpY2F0ZU9pZGMkLnBpcGUodGFwKHtcbiAgICAgIG5leHQ6IGF1dGhSZXNwb25zZSA9PiB7XG4gICAgICAgIGlmIChhdXRoUmVzcG9uc2UuZGF0YS5tZXNzYWdlID09PSBMb2NhbGl6YXRpb24uc3NvX3BlbmRpbmdfYXBwcm92YWwpIHtcbiAgICAgICAgICBjb25zdCBtZXNzYWdlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLnNzb19wZW5kaW5nX2FwcHJvdmFsKTtcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLmluZm8obWVzc2FnZSwgeyBwb3NpdGlvbjogTWVzc2FnZUJhclBvc2l0aW9uLlN0YXRpYyB9KTtcbiAgICAgICAgICBhY3Rpb24uaXNQZW5kaW5nQXBwcm92YWwgPSB0cnVlO1xuICAgICAgICAgIC8vdGhpcy5jbGVhclNpbmdsZVNpbmdPbkNhY2hlKHNpbmdsZVNpZ25PblByb3ZpZGVyKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzcGFya1Nlc3Npb24gPSB0aGlzLmF1dGhTZXJ2aWNlLnByb2Nlc3NBdXRoZW50aWNhdGUoYXV0aFJlc3BvbnNlLmRhdGEpO1xuICAgICAgICBjdHguZGlzcGF0Y2gobmV3IFNldFRlbmFudFVzZXJBY3Rpb24oc3BhcmtTZXNzaW9uKSk7XG4gICAgICAgIFxuICAgICAgICAgIGlmICh0aGlzLnVzZXJTdGF0dXNJc0F3YWl0aW5nQWNjZXNzKGF1dGhSZXNwb25zZSkpIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJTaW5nbGVTaW5nT25DYWNoZShhY3Rpb24uc2luZ2xlU2lnbk9uUHJvdmlkZXIpO1xuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5zc29fcGVuZGluZ19hcHByb3ZhbCk7XG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLndhcm4obWVzc2FnZSwgeyBwb3NpdGlvbjogTWVzc2FnZUJhclBvc2l0aW9uLlN0YXRpYyB9KTtcbiAgICAgICAgICAgIGFjdGlvbi5pc1BlbmRpbmdBcHByb3ZhbCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gQWZ0ZXIgYXV0aGVudGljYXRpb24gZ2V0IGFwcCBjb25maWd1cmF0aW9uXG4gICAgICAgICAgICB0aGlzLmxvZ2luVG9TcGFyaygpO1xuICAgICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAgIGVycm9yOiBlID0+IHtcbiAgICAgICAgICB0aGlzLnNpbmdsZVNpbmdPbkVycm9ySGFuZGxpbmcoZSk7XG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICB9XG4gIH1cblxuICBzaW5nbGVTaW5nT25FcnJvckhhbmRsaW5nKGU6IGFueSkge1xuICAgIGlmIChlLmVycm9yTWVzc2FnZSA9PSBMb2NhbGl6YXRpb24uc3NvX3BlbmRpbmdfYXBwcm92YWwpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChMb2NhbGl6YXRpb24uc3NvX3BlbmRpbmdfYXBwcm92YWwpO1xuICAgICAgdGhpcy5tZXNzYWdlQmFyU2VydmljZS5pbmZvKG1lc3NhZ2UsIHsgcG9zaXRpb246IE1lc3NhZ2VCYXJQb3NpdGlvbi5TdGF0aWMgfSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGUuZXJyb3JNZXNzYWdlKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoZS5lcnJvck1lc3NhZ2UpO1xuICAgICAgdGhpcy5tZXNzYWdlQmFyU2VydmljZS5lcnJvcihtZXNzYWdlLCB7IHBvc2l0aW9uOiBNZXNzYWdlQmFyUG9zaXRpb24uU3RhdGljIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMubWVzc2FnZUJhclNlcnZpY2UuZXJyb3IocGFyc2VBcGlFcnJvck1lc3NhZ2UoZSksIHRoaXMubWVzc2FnZU9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIGxvZ2luVG9TcGFyaygpIHtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBMb2FkQXBwQ29uZmlndXJhdGlvbkFjdGlvbigpKTtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBIZWFsdGhBY3Rpb24oKSk7XG4gICAgdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UudXBkYXRlTG9nZ2VkVGVuYW50KCk7XG4gICAgdGhpcy5sb2dpblNlcnZpY2UubG9naW5Ub1NwYXJrKCk7XG4gIH1cblxuICBsb2dpblRvQmFja29mZmljZSgpIHtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBMb2FkQmFja29mZmljZUFwcENvbmZpZ3VyYXRpb25BY3Rpb24oKSk7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgSGVhbHRoQWN0aW9uKCkpO1xuICAgIHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnVwZGF0ZUxvZ2dlZFRlbmFudCgpO1xuICAgIHRoaXMubG9naW5TZXJ2aWNlLmxvZ2luVG9TcGFyaygpO1xuICB9XG59XG4iXX0=
399
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uc3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtc2hhcmVkLWxpYi9zcmMvbGlicmFyaWVzL21vZHVsZXMvbG9naW4vbG9naW4uc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJM0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBdUIsTUFBTSxhQUFhLENBQUM7QUFDM0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQWMsR0FBRyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUU1RixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzdELE9BQU8sRUFDZ0MsZUFBZSxFQUNILFVBQVUsRUFBRSxxQkFBcUIsRUFDbkYsTUFBTSwyQ0FBMkMsQ0FBQztBQUNuRCxPQUFPLEVBQ0wsbUNBQW1DLEVBQWdDLHNCQUFzQixFQUNoRCw0QkFBNEIsRUFDckUsa0JBQWtCLEVBQUUsb0JBQW9CLEVBQ3hDLDJCQUEyQixFQUM1QixNQUFNLDhDQUE4QyxDQUFDO0FBS3RELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBSXRGLE9BQU8sRUFBRSxZQUFZLEVBQUUsMEJBQTBCLEVBQUUsb0NBQW9DLEVBQUUsbUJBQW1CLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNy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LENBQUMsaUNBQWlDLENBQUM7cUVBd0J6QztBQUdNO0lBRE4sTUFBTSxDQUFDLGlCQUFpQixDQUFDO3FEQUt6QjtBQW9DTTtJQUROLE1BQU0sQ0FBQywyQkFBMkIsQ0FBQzsrREErQm5DO0FBR007SUFETixNQUFNLENBQUMsdUJBQXVCLENBQUM7MkRBd0MvQjtBQXBUYTtJQURiLFFBQVEsRUFBRTs2Q0FHVjtBQUdhO0lBRGIsUUFBUSxFQUFFO2tDQUdWO0FBR2E7SUFEYixRQUFRLEVBQUU7Z0NBR1Y7QUFHYTtJQURiLFFBQVEsRUFBRTtvQ0FHVjtBQUdhO0lBRGIsUUFBUSxFQUFFO2dDQUdWO0FBR2E7SUFEYixRQUFRLEVBQUU7bUNBR1Y7QUF6Q1UsVUFBVTtJQVh0QixLQUFLLENBQWtCO1FBQ3RCLElBQUksRUFBRSxPQUFPO1FBQ2IsUUFBUSxFQUFFO1lBQ1IsUUFBUSxFQUFFLFNBQVM7WUFDbkIsVUFBVSxFQUFFLEVBQUU7WUFDZCxrQkFBa0IsRUFBRSxTQUFTO1lBQzdCLFFBQVEsRUFBRSxFQUFFO1lBQ1osV0FBVyxFQUFFLEVBQUU7WUFDZixRQUFRLEVBQUUsU0FBUztTQUNwQjtLQUNGLENBQUM7R0FDVyxVQUFVLENBK1Z0Qjs7NEZBL1ZZLFVBQVU7a0JBWnRCLFVBQVU7dWRBd0RGLG1DQUFtQyxNQWlCbkMsZ0JBQWdCLE1BbUJoQiwwQkFBMEIsTUFPMUIsOEJBQThCLE1BUTlCLCtCQUErQixNQVMvQiwwQkFBMEIsTUF3QzFCLHlCQUF5QixNQXdDekIsbUNBQW1DLE1BMEJuQyxtQkFBbUIsTUF3Q25CLDZCQUE2QixNQWlDN0IseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTXNhbFNlcnZpY2UgfSBmcm9tICdAYXp1cmUvbXNhbC1hbmd1bGFyJztcbmltcG9ydCB7IENsZWFyQ2FjaGVSZXF1ZXN0IH0gZnJvbSAnQGF6dXJlL21zYWwtYnJvd3Nlcic7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBOYXZpZ2F0ZSB9IGZyb20gJ0BuZ3hzL3JvdXRlci1wbHVnaW4nO1xuaW1wb3J0IHsgQWN0aW9uLCBTZWxlY3RvciwgU3RhdGUsIFN0YXRlQ29udGV4dCwgU3RvcmUgfSBmcm9tICdAbmd4cy9zdG9yZSc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAsIE9ic2VydmFibGUsIHRhcCwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTWVzc2FnZUJhclBvc2l0aW9uIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9tZXNzYWdlLWJhci9tZXNzYWdlLWJhci1wb3NpdGlvbi5lbnVtJztcbmltcG9ydCB7IE1lc3NhZ2VCYXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9tZXNzYWdlLWJhci9tZXNzYWdlLWJhci5zZXJ2aWNlJztcbmltcG9ydCB7IFJFU0VUX1BBU1NXT1JEX0VNQUlMIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2tleXMtY29uc3RhbnRzJztcbmltcG9ydCB7IEFwcFR5cGUgfSBmcm9tICcuLi8uLi9lbnVtcy9hcHAtdHlwZS5lbnVtJztcbmltcG9ydCB7IExvY2FsaXphdGlvbiB9IGZyb20gJy4uLy4uL2VudW1zL2xvY2FsaXphdGlvbi5lbnVtJztcbmltcG9ydCB7XG4gIEFjdGl2YXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhLCBBY3RpdmF0ZVVzZXJEdG8sIEFwaUV4Y2VwdGlvbiwgUHJvYmxlbURldGFpbHMsIFRmYVNldHVwRHRvLFxuICBVc2VyRHRvSHR0cFJlc3BvbnNlRGF0YSwgVXNlcnNDbG91ZFNlcnZpY2VQcm94eSwgVXNlclN0YXR1cywgVXNlclVwZGF0ZVBhc3N3b3JkRHRvXG59IGZyb20gJy4uLy4uL3NlcnZpY2UtcHJveHkvY2xvdWQtc2VydmljZS1wcm94aWVzJztcbmltcG9ydCB7XG4gIEF1dGhlbnRpY2F0ZUJhY2tvZmZpY2VTc29SZXF1ZXN0RHRvLCBBdXRoZW50aWNhdGVFcnJvclJlc3BvbnNlRHRvLCBBdXRoZW50aWNhdGVSZXF1ZXN0RHRvLCBBdXRoZW50aWNhdGVSZXNwb25zZUR0byxcbiAgQXV0aGVudGljYXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhLCBBdXRoZW50aWNhdGVXZWJTc29SZXF1ZXN0RHRvLCBCYWNrb2ZmaWNlVXNlcklkZW50aXR5U2VydmljZVByb3h5LFxuICBQYXNzd29yZENoYW5nZVR5cGUsIFNpbmdsZVNpZ25PblByb3ZpZGVyLCBVc2Vyc0lkZW50aXR5U2VydmljZVByb3h5LCBWYWxpZGF0ZUFjdGl2YXRpb25Vc2VyRHRvSHR0cFJlc3BvbnNlRGF0YSxcbiAgVmVyaWZ5MkZhY3RvckF1dGhSZXF1ZXN0RHRvLCBWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0b0h0dHBSZXNwb25zZURhdGFcbn0gZnJvbSAnLi4vLi4vc2VydmljZS1wcm94eS9pZGVudGl0eS1zZXJ2aWNlLXByb3hpZXMnO1xuaW1wb3J0IHsgQXBwQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FwcC1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBPcGVuSWRBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL29wZW5pZC1hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgUm91dGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcm91dGUuc2VydmljZSc7XG5pbXBvcnQgeyBTZXNzaW9uU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zZXNzaW9uLXN0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBwYXJzZUFwaUVycm9yRGF0YSwgcGFyc2VBcGlFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi91dGlscy9hcGktaGVscGVyLnV0aWwnO1xuaW1wb3J0IHsgU3RyaW5nTWFwIH0gZnJvbSAnLi4vLi4vdXRpbHMvbGFuZy51dGlsJztcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vYXV0aC9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgVXNlckluZm8gfSBmcm9tICcuLi9hdXRoL21vZGVsL3VzZXItaW5mby5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSGVhbHRoQWN0aW9uLCBMb2FkQXBwQ29uZmlndXJhdGlvbkFjdGlvbiwgTG9hZEJhY2tvZmZpY2VBcHBDb25maWd1cmF0aW9uQWN0aW9uLCBTZXRUZW5hbnRVc2VyQWN0aW9uLCBVcGRhdGVBdXRoVG9rZW5BY3Rpb24gfSBmcm9tICcuLi9hdXRoL3Nlc3Npb24uYWN0aW9ucyc7XG5pbXBvcnQgeyBTZXNzaW9uU3RhdGUgfSBmcm9tICcuLi9hdXRoL3Nlc3Npb24uc3RhdGUnO1xuaW1wb3J0IHtcbiAgQWNjb3VudFNldFBhc3N3b3JkQWN0aW9uLCBBY2NvdW50U2V0UGFzc3dvcmRFcnJvckFjdGlvbiwgQWNjb3VudFNldFBhc3N3b3JkSW5pdEFjdGlvbiwgQXV0aGVudGljYXRlTXVsdGlwbGVUZW5hbnRzQWN0aW9uLFxuICBCYWNrb2ZmaWNlQXV0aGV0aWNhdGVBY3Rpb24sIEZvcmdvdFBhc3N3b3JkQWN0aW9uLCBGb3Jnb3RQYXNzd29yZFRlbmFudGxlc3NBY3Rpb24sXG4gIE9wZW5JZEF1dGhldGljYXRlQWN0aW9uLCBTZXRURkFTZXR1cEFjdGlvbiwgVmFsaWRhdGVVc2VyVG9rZW5BY3Rpb24sIFZlcmlmeTJGYWN0b3JBdXRoZW50aWNhdGlvbkFjdGlvblxufSBmcm9tICcuL2xvZ2luLmFjdGlvbnMnO1xuaW1wb3J0IHsgTG9naW5TZXJ2aWNlIH0gZnJvbSAnLi9sb2dpbi5zZXJ2aWNlJztcblxuZXhwb3J0IGludGVyZmFjZSBMb2dpblN0YXRlTW9kZWwge1xuICB1c2VySW5mbzogVXNlckluZm87XG4gIHRlbmFudE5hbWU6IHN0cmluZztcbiAgcGFzc3dvcmRDaGFuZ2VUeXBlOiBQYXNzd29yZENoYW5nZVR5cGU7XG4gIGFjY291bnRzOiBBdXRoZW50aWNhdGVSZXNwb25zZUR0b1tdO1xuICBhY2NvdW50c01hcDogU3RyaW5nTWFwPEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvPjtcbiAgdGZhU2V0dXA6IFRmYVNldHVwRHRvO1xufVxuXG5ASW5qZWN0YWJsZSgpXG5AU3RhdGU8TG9naW5TdGF0ZU1vZGVsPih7XG4gIG5hbWU6ICdsb2dpbicsXG4gIGRlZmF1bHRzOiB7XG4gICAgdXNlckluZm86IHVuZGVmaW5lZCxcbiAgICB0ZW5hbnROYW1lOiAnJyxcbiAgICBwYXNzd29yZENoYW5nZVR5cGU6IHVuZGVmaW5lZCxcbiAgICBhY2NvdW50czogW10sXG4gICAgYWNjb3VudHNNYXA6IHt9LFxuICAgIHRmYVNldHVwOiB1bmRlZmluZWQsXG4gIH1cbn0pXG5leHBvcnQgY2xhc3MgTG9naW5TdGF0ZSB7XG5cbiAgcHJpdmF0ZSBtZXNzYWdlT3B0aW9ucyA9IHsgcG9zaXRpb246IE1lc3NhZ2VCYXJQb3NpdGlvbi5TdGF0aWMgfTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHN0b3JlOiBTdG9yZSxcbiAgICBwcml2YXRlIHVzZXJzQ2xvdWRTZXJ2aWNlUHJveHk6IFVzZXJzQ2xvdWRTZXJ2aWNlUHJveHksXG4gICAgcHJpdmF0ZSBiYWNrb2ZmaWNlVXNlcklkZW50aXR5U2VydmljZVByb3h5OiBCYWNrb2ZmaWNlVXNlcklkZW50aXR5U2VydmljZVByb3h5LCBwcml2YXRlIG9wZW5JZEF1dGhTZXJ2aWNlOiBPcGVuSWRBdXRoU2VydmljZSxcbiAgICBwcml2YXRlIHVzZXJzSWRlbnRpdHlTZXJ2aWNlUHJveHk6IFVzZXJzSWRlbnRpdHlTZXJ2aWNlUHJveHksIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxuICAgIHByaXZhdGUgc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlOiBTZXNzaW9uU3RvcmFnZVNlcnZpY2UsIHByaXZhdGUgbG9naW5TZXJ2aWNlOiBMb2dpblNlcnZpY2UsIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIG1zYWxTZXJ2aWNlOiBNc2FsU2VydmljZSwgcHJpdmF0ZSBtZXNzYWdlQmFyU2VydmljZTogTWVzc2FnZUJhclNlcnZpY2UsIHByaXZhdGUgYXBwQ29uZmlnOiBBcHBDb25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGVTZXJ2aWNlOiBSb3V0ZVNlcnZpY2UpIHtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgdHdvRmFjdG9yU2V0dXBGb3JVc2VyKHN0YXRlOiBMb2dpblN0YXRlTW9kZWwpOiBUZmFTZXR1cER0byB7XG4gICAgcmV0dXJuIHN0YXRlLnRmYVNldHVwO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyB0ZW5hbnROYW1lKHN0YXRlOiBMb2dpblN0YXRlTW9kZWwpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdGF0ZS50ZW5hbnROYW1lO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyB1c2VySW5mbyhzdGF0ZTogTG9naW5TdGF0ZU1vZGVsKTogVXNlckluZm8ge1xuICAgIHJldHVybiBzdGF0ZS51c2VySW5mbztcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgdGVtcGxhdGVUeXBlKHN0YXRlOiBMb2dpblN0YXRlTW9kZWwpOiBQYXNzd29yZENoYW5nZVR5cGUge1xuICAgIHJldHVybiBzdGF0ZS5wYXNzd29yZENoYW5nZVR5cGU7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGFjY291bnRzKHN0YXRlOiBMb2dpblN0YXRlTW9kZWwpOiBBdXRoZW50aWNhdGVSZXNwb25zZUR0b1tdIHtcbiAgICByZXR1cm4gc3RhdGUuYWNjb3VudHM7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGFjY291bnRzTWFwKHN0YXRlOiBMb2dpblN0YXRlTW9kZWwpOiBTdHJpbmdNYXA8QXV0aGVudGljYXRlUmVzcG9uc2VEdG8+IHtcbiAgICByZXR1cm4gc3RhdGUuYWNjb3VudHNNYXA7XG4gIH1cblxuICBAQWN0aW9uKEF1dGhlbnRpY2F0ZU11bHRpcGxlVGVuYW50c0FjdGlvbilcbiAgcHVibGljIG9uQXV0aGVudGljYXRlTXVsdGlwbGVUZW5hbnRzQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PExvZ2luU3RhdGVNb2RlbD4sIHsgdXNlcm5hbWUsIHBhc3N3b3JkIH06IEF1dGhlbnRpY2F0ZU11bHRpcGxlVGVuYW50c0FjdGlvbikge1xuICAgIGNvbnN0IGF1dGhlbnRpY2F0ZVJlcXVlc3REdG8gPSBuZXcgQXV0aGVudGljYXRlUmVxdWVzdER0bygpO1xuICAgIGF1dGhlbnRpY2F0ZVJlcXVlc3REdG8udXNlcm5hbWUgPSB1c2VybmFtZTtcbiAgICBhdXRoZW50aWNhdGVSZXF1ZXN0RHRvLnBhc3N3b3JkID0gcGFzc3dvcmQ7XG4gICAgYXV0aGVudGljYXRlUmVxdWVzdER0by50ZW5hbnROYW1lID0gJyc7XG4gICAgcmV0dXJuIHRoaXMudXNlcnNJZGVudGl0eVNlcnZpY2VQcm94eS5tdWx0aVRlbmFudHNBdXRoZW50aWNhdGUoYXV0aGVudGljYXRlUmVxdWVzdER0bykucGlwZSh0YXAoe1xuICAgICAgbmV4dDogYWNjb3VudHNIdHRwUmVzcG9uc2VEYXRhID0+IHtcbiAgICAgICAgY29uc3QgYWNjb3VudHMgPSBhY2NvdW50c0h0dHBSZXNwb25zZURhdGEuZGF0YTtcbiAgICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICAgIGFjY291bnRzXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiBlID0+IHRoaXMuYXV0aGVudGljYXRpb25FcnJvck1lc3NhZ2VCYXIoZSlcbiAgICB9KSk7XG4gIH1cblxuICBAQWN0aW9uKEZvcmdvdFBhc3N3b3JkQWN0aW9uKVxuICBwdWJsaWMgb25Gb3Jnb3RQYXNzd29yZChjdHg6IFN0YXRlQ29udGV4dDxMb2dpblN0YXRlTW9kZWw+LCB7IGVtYWlsLCB0ZW5hbnRJZCB9OiBGb3Jnb3RQYXNzd29yZEFjdGlvbikge1xuICAgIGNvbnN0IGlzTW9iaWxlQXBwTW9kZSA9IHRoaXMuYXBwQ29uZmlnLmdldENvbmZpZygpLmFwcFR5cGUgPT09IEFwcFR5cGUuTW9iaWxlO1xuICAgIGNvbnN0IHBhdGggPSBbJ2FjY291bnQnLCAnZm9yZ290LXBhc3N3b3JkLXN1Y2Nlc3MnXTtcbiAgICBjb25zdCB1cmwgPSBpc01vYmlsZUFwcE1vZGUgPyBwYXRoIDogdGhpcy5yb3V0ZVNlcnZpY2UuZ2V0TmF2aWdhdGlvblJvdXRlKHBhdGgpO1xuXG4gICAgdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2Uuc2V0SXRlbShSRVNFVF9QQVNTV09SRF9FTUFJTCwgSlNPTi5zdHJpbmdpZnkoZW1haWwpKTtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBOYXZpZ2F0ZSh1cmwpKTtcbiAgICB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLnN1Y2Nlc3MoTG9jYWxpemF0aW9uLmZvcmdvdF9wYXNzd29yZF9lbWFpbF9zZW50X21zZywgdGhpcy5tZXNzYWdlT3B0aW9ucyk7XG5cbiAgICAvLyBQcmUtYXV0aGVudGljYXRpb24gdGhlIHRlbmFudCBpZCBpcyB1bmtub3duOiBUZW5hbnREZXRhaWxzRHRvIGNhcnJpZXMgbm8gaWQsIHNvIHRoZSB0ZW5hbnRcbiAgICAvLyByZXNvbHZlciBsZWF2ZXMgdGVuYW50SW5mby5pZCBudWxsLiBQYXNzaW5nIG51bGwgdG8gZm9yZ290UGFzc3dvcmQgdGhyb3dzIHN5bmNocm9ub3VzbHlcbiAgICAvLyAoXCJUaGUgcGFyYW1ldGVyICd0ZW5hbnRJZCcgY2Fubm90IGJlIG51bGwuXCIpLiBGYWxsIGJhY2sgdG8gdGhlIHRlbmFudGxlc3MgZW5kcG9pbnQsIHdoaWNoXG4gICAgLy8gcmVzb2x2ZXMgdGhlIHRlbmFudCBzZXJ2ZXItc2lkZSBmcm9tIHRoZSBlbWFpbCBhZGRyZXNzLlxuICAgIHJldHVybiB0ZW5hbnRJZCAhPSBudWxsXG4gICAgICA/IHRoaXMudXNlcnNDbG91ZFNlcnZpY2VQcm94eS5mb3Jnb3RQYXNzd29yZChlbWFpbCwgdGVuYW50SWQpXG4gICAgICA6IHRoaXMudXNlcnNDbG91ZFNlcnZpY2VQcm94eS5mb3Jnb3RQYXNzd29yZFRlbmFudGxlc3MoZW1haWwpO1xuICB9XG5cbiAgQEFjdGlvbihGb3Jnb3RQYXNzd29yZFRlbmFudGxlc3NBY3Rpb24pXG4gIHB1YmxpYyBvbkZvcmdvdFBhc3N3b3JkVGVuYW50bGVzcyhjdHg6IFN0YXRlQ29udGV4dDxMb2dpblN0YXRlTW9kZWw+LCB7IGVtYWlsIH06IEZvcmdvdFBhc3N3b3JkQWN0aW9uKSB7XG4gICAgdGhpcy5tZXNzYWdlQmFyU2VydmljZS5zdWNjZXNzKExvY2FsaXphdGlvbi5mb3Jnb3RfcGFzc3dvcmRfZW1haWxfc2VudF9tc2csIHRoaXMubWVzc2FnZU9wdGlvbnMpO1xuICAgIHJldHVybiB0aGlzLnVzZXJzQ2xvdWRTZXJ2aWNlUHJveHkuZm9yZ290UGFzc3dvcmRUZW5hbnRsZXNzKGVtYWlsKTtcbiAgfVxuXG5cbiAgQEFjdGlvbihBY2NvdW50U2V0UGFzc3dvcmRJbml0QWN0aW9uKVxuICBwdWJsaWMgb25BY2NvdW50U2V0UGFzc3dvcmRJbml0QWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PExvZ2luU3RhdGVNb2RlbD4sIHsgdXNlckluZm8sIGNvbXBvbmVudFR5cGUgfSkge1xuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIHVzZXJJbmZvLFxuICAgICAgcGFzc3dvcmRDaGFuZ2VUeXBlOiBjb21wb25lbnRUeXBlXG4gICAgfSk7XG4gIH1cblxuICBAQWN0aW9uKEFjY291bnRTZXRQYXNzd29yZEVycm9yQWN0aW9uKVxuICBwdWJsaWMgb25BY2NvdW50U2V0UGFzc3dvcmRFcnJvckFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxMb2dpblN0YXRlTW9kZWw+LCB7IGVycm9yTXNnLCB1c2VybmFtZSB9KSB7XG4gICAgY29uc3QgdXNlckluZm86IFVzZXJJbmZvID0geyAuLi51c2VybmFtZSB9O1xuICAgIHRoaXMubWVzc2FnZUJhclNlcnZpY2UuZXJyb3IoZXJyb3JNc2csIHRoaXMubWVzc2FnZU9wdGlvbnMpO1xuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIHVzZXJJbmZvXG4gICAgfSk7XG4gIH1cblxuICBAQWN0aW9uKEFjY291bnRTZXRQYXNzd29yZEFjdGlvbilcbiAgcHVibGljIG9uQWNjb3VudFNldFBhc3N3b3JkQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PExvZ2luU3RhdGVNb2RlbD4sIHsgcGFzc3dvcmQgfTogQWNjb3VudFNldFBhc3N3b3JkQWN0aW9uKSB7XG4gICAgY29uc3QgdXNlckluZm8gPSBjdHguZ2V0U3RhdGUoKS51c2VySW5mbztcbiAgICBsZXQgZGF0YTogYW55O1xuICAgIGxldCBzZXRQYXNzd29yZCQ6IE9ic2VydmFibGU8VXNlckR0b0h0dHBSZXNwb25zZURhdGEgfCBBY3RpdmF0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YT47XG5cbiAgICBpZiAodGhpcy5hcHBDb25maWcuZ2V0Q29uZmlnKCkuYXBwVHlwZSA9PT0gQXBwVHlwZS5DbG91ZCkge1xuICAgICAgZGF0YSA9IG5ldyBBY3RpdmF0ZVVzZXJEdG8oe1xuICAgICAgICBwYXNzd29yZCxcbiAgICAgICAgY3VycmVudFBhc3N3b3JkOiBudWxsLFxuICAgICAgICB1c2VyU3RhdHVzOiB1c2VySW5mby5zdGF0dXMgYXMgVXNlclN0YXR1c1xuICAgICAgfSk7XG5cbiAgICAgIHNldFBhc3N3b3JkJCA9IHRoaXMudXNlcnNDbG91ZFNlcnZpY2VQcm94eS5hY3RpdmF0ZShkYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGF0YSA9IG5ldyBVc2VyVXBkYXRlUGFzc3dvcmREdG8oe1xuICAgICAgICBwYXNzd29yZCxcbiAgICAgICAgY3VycmVudFBhc3N3b3JkOiBudWxsXG4gICAgICB9KTtcbiAgICAgIHNldFBhc3N3b3JkJCA9IHRoaXMudXNlcnNDbG91ZFNlcnZpY2VQcm94eS51cGRhdGVVc2VyUGFzc3dvcmQoZGF0YSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNldFBhc3N3b3JkJC5waXBlKFxuICAgICAgbWFwKChhY3RpdmF0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YTogQWN0aXZhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEpID0+IHtcbiAgICAgICAgaWYgKGFjdGl2YXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhLmRhdGEuaXNTdWNjZXNzKSB7XG4gICAgICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICAgICAgdGZhU2V0dXA6IGFjdGl2YXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhLmRhdGE/LnRmYVNldHVwLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihhY3RpdmF0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YS5kYXRhLmVycm9yTWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgY2F0Y2hFcnJvcihlID0+IHtcbiAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogZTtcbiAgICAgICAgdGhpcy5tZXNzYWdlQmFyU2VydmljZS5lcnJvcihlcnJvck1lc3NhZ2UsIHRoaXMubWVzc2FnZU9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvck1lc3NhZ2UpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgQEFjdGlvbihWYWxpZGF0ZVVzZXJUb2tlbkFjdGlvbilcbiAgcHVibGljIG9uVmFsaWRhdGVVc2VyVG9rZW5BY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8TG9naW5TdGF0ZU1vZGVsPiwgeyB0b2tlbiwgdG9rZW5UeXBlIH06IFZhbGlkYXRlVXNlclRva2VuQWN0aW9uKSB7XG4gICAgY29uc3QgcGN0OiBhbnkgPSBQYXNzd29yZENoYW5nZVR5cGVbdG9rZW5UeXBlXTtcbiAgICByZXR1cm4gdGhpcy51c2Vyc0lkZW50aXR5U2VydmljZVByb3h5LnZhbGlkYXRlQWN0aXZhdGlvbih0b2tlbiwgUGFzc3dvcmRDaGFuZ2VUeXBlW1Bhc3N3b3JkQ2hhbmdlVHlwZVt0b2tlblR5cGVdXSkucGlwZSh0YXAoe1xuICAgICAgbmV4dDogKHVzZXI6IFZhbGlkYXRlQWN0aXZhdGlvblVzZXJEdG9IdHRwUmVzcG9uc2VEYXRhKSA9PiB7XG4gICAgICAgIGlmICh1c2VyPy5kYXRhKSB7XG4gICAgICAgICAgY29uc3QgdXNlckluZm86IFVzZXJJbmZvID0ge1xuICAgICAgICAgICAgdXNlcklkOiB1c2VyLmRhdGEuaWQsXG4gICAgICAgICAgICB1c2VybmFtZTogdXNlci5kYXRhLnVOYW1lLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6IGAke3VzZXIuZGF0YS5uYW1lfSAke3VzZXIuZGF0YS5sYXN0TmFtZX1gLFxuICAgICAgICAgICAgc3RhdHVzOiB1c2VyLmRhdGEuc3RhdHVzLFxuICAgICAgICAgICAgcG1sOiB1c2VyLmRhdGEucG1sXG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZiAodXNlci5kYXRhLnN0YXR1cyAhPT0gVXNlclN0YXR1cy5CbG9ja2VkKSB7XG4gICAgICAgICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgICAgICAgIHVzZXJJbmZvLFxuICAgICAgICAgICAgICBwYXNzd29yZENoYW5nZVR5cGU6IHBjdCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLmVycm9yKExvY2FsaXphdGlvbi5ub25fYWN0aXZlX3VzZXIsIHRoaXMubWVzc2FnZU9wdGlvbnMpO1xuICAgICAgICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICAgICAgICB1c2VySW5mbyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGVycm9yOiBlID0+IHtcbiAgICAgICAgY29uc3QgZXJyb3JKc29uOiBQcm9ibGVtRGV0YWlscyA9IEpTT04ucGFyc2UoZS5yZXNwb25zZSkgYXMgUHJvYmxlbURldGFpbHM7XG4gICAgICAgIHRoaXMubWVzc2FnZUJhclNlcnZpY2UuZXJyb3IocGFyc2VBcGlFcnJvck1lc3NhZ2UoZSksIHRoaXMubWVzc2FnZU9wdGlvbnMpO1xuICAgICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgICAgdXNlckluZm86IHtcbiAgICAgICAgICAgIHVzZXJuYW1lOiBlcnJvckpzb24uaW5zdGFuY2UsXG4gICAgICAgICAgICB1c2VySWQ6IG51bGwsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogbnVsbFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pKTtcbiAgfVxuXG4gIEBBY3Rpb24oVmVyaWZ5MkZhY3RvckF1dGhlbnRpY2F0aW9uQWN0aW9uKVxuICBwdWJsaWMgb25WZXJpZnkyRmFjdG9yQXV0aGVudGljYXRpb25BY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8TG9naW5TdGF0ZU1vZGVsPiwgeyB1c2VyTmFtZSwgY29kZSwgc2V0dXAyRmEgfTogVmVyaWZ5MkZhY3RvckF1dGhlbnRpY2F0aW9uQWN0aW9uKSB7XG4gICAgY29uc3QgdmVyaWZ5MkZhY3RvckF1dGhSZXF1ZXN0RHRvID0gbmV3IFZlcmlmeTJGYWN0b3JBdXRoUmVxdWVzdER0byh7XG4gICAgICBjb2RlLFxuICAgICAgdXNlck5hbWVcbiAgICB9KTtcblxuICAgIGxldCB2ZXJpZnkyRmFjdG9yQXV0aCQ6IE9ic2VydmFibGU8VmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICBpZiAoc2V0dXAyRmEpIHtcbiAgICAgIHZlcmlmeTJGYWN0b3JBdXRoJCA9IHRoaXMudXNlcnNJZGVudGl0eVNlcnZpY2VQcm94eS52ZXJpZnkyRmFjdG9yQXV0aGVudGljYXRpb24odmVyaWZ5MkZhY3RvckF1dGhSZXF1ZXN0RHRvKTtcbiAgICB9IGVsc2UgeyAvLyBsb2dpbiBmb3IgdXNlciB3aXRoIDJGQSAoYWxyZWFkeSBzZXQgdXApXG4gICAgICB2ZXJpZnkyRmFjdG9yQXV0aCQgPSB0aGlzLnVzZXJzSWRlbnRpdHlTZXJ2aWNlUHJveHkudmVyaWZ5MkZhY3RvckF1dGhlbnRpY2F0aW9uTG9naW4odmVyaWZ5MkZhY3RvckF1dGhSZXF1ZXN0RHRvKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmVyaWZ5MkZhY3RvckF1dGgkLnBpcGUodGFwKHtcbiAgICAgIG5leHQ6ICh2ZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldDogVmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG9IdHRwUmVzcG9uc2VEYXRhKSA9PiB7XG4gICAgICAgIHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLmFjY2Vzc1Rva2VuID0gdmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXQuZGF0YS5hY2Nlc3NUb2tlbjtcbiAgICAgICAgdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UucmVmcmVzaFRva2VuID0gdmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXQuZGF0YS5yZWZyZXNoVG9rZW47XG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFVwZGF0ZUF1dGhUb2tlbkFjdGlvbih2ZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldC5kYXRhLmFjY2Vzc1Rva2VuLHZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0LmRhdGEucmVmcmVzaFRva2VuKSk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IGUgPT4ge1xuICAgICAgICB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLmVycm9yKHBhcnNlQXBpRXJyb3JNZXNzYWdlKGUpLCB0aGlzLm1lc3NhZ2VPcHRpb25zKTtcbiAgICAgIH1cbiAgICB9KSk7XG4gIH1cblxuICBAQWN0aW9uKFNldFRGQVNldHVwQWN0aW9uKVxuICBwdWJsaWMgb25TZXRURkFTZXR1cEFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxMb2dpblN0YXRlTW9kZWw+LCB7IHRmYVNldHVwRHRvIH0pIHtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICB0ZmFTZXR1cDogdGZhU2V0dXBEdG9cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXV0aGVudGljYXRpb25FcnJvck1lc3NhZ2VCYXIoZXJyb3I6IEFwaUV4Y2VwdGlvbikge1xuICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IHBhcnNlQXBpRXJyb3JNZXNzYWdlKGVycm9yKTtcbiAgICBjb25zdCBkYXRhID0gcGFyc2VBcGlFcnJvckRhdGE8QXV0aGVudGljYXRlRXJyb3JSZXNwb25zZUR0bz4oZXJyb3IpO1xuICAgIHRoaXMubWVzc2FnZUJhclNlcnZpY2UuZXJyb3IoZXJyb3JNZXNzYWdlLCB7IHBvc2l0aW9uOiBNZXNzYWdlQmFyUG9zaXRpb24uU3RhdGljLCBtZXNzYWdlUGFyYW1zOiB7IHRlbXBvcmFyeUxvY2tlZE1pbnV0ZXM6IGRhdGE/LnRlbXBvcmFyeUJsb2NrZWRUaW1lIH0gfSk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFyTXNsTG9naW5DYWNoZSgpIHtcbiAgICBjb25zdCBjbGVhckNhY2hlUmVxdWVzdDogQ2xlYXJDYWNoZVJlcXVlc3QgPSB7XG4gICAgICBhY2NvdW50OiB0aGlzLm1zYWxTZXJ2aWNlLmluc3RhbmNlLmdldEFsbEFjY291bnRzKClbMF0sXG4gICAgfTtcbiAgICB0aGlzLm1zYWxTZXJ2aWNlLmluc3RhbmNlLmNsZWFyQ2FjaGUoY2xlYXJDYWNoZVJlcXVlc3QpO1xuICAgIHRoaXMubXNhbFNlcnZpY2UubG9nb3V0KCk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFyU2luZ2xlU2luZ09uQ2FjaGUoc2luZ2xlU2lnbk9uUHJvdmlkZXI6IFNpbmdsZVNpZ25PblByb3ZpZGVyKSB7XG4gICAgc3dpdGNoIChzaW5nbGVTaWduT25Qcm92aWRlcikge1xuICAgICAgY2FzZSBTaW5nbGVTaWduT25Qcm92aWRlci5NaWNyb3NvZnQ6XG4gICAgICAgIHRoaXMuY2xlYXJNc2xMb2dpbkNhY2hlKCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFNpbmdsZVNpZ25PblByb3ZpZGVyLlBpbmdGZWRlcmF0ZTpcbiAgICAgICAgdGhpcy5vcGVuSWRBdXRoU2VydmljZS5zaWduT3V0KCk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBsb2NhbFN0b3JhZ2UuY2xlYXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXNlclN0YXR1c0lzQXdhaXRpbmdBY2Nlc3MgPSAoYXV0aFJlc3BvbnNlOiBBdXRoZW50aWNhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEpOiBib29sZWFuID0+XG4gICAgYXV0aFJlc3BvbnNlLmRhdGEuc2luZ2xlU2lnbk9uQXV0aGVudGljYXRpb25EdG8/LmlzQXV0aGVudGljYXRlZCA9PT0gZmFsc2UgJiZcbiAgICBhdXRoUmVzcG9uc2UuZGF0YS5zaW5nbGVTaWduT25BdXRoZW50aWNhdGlvbkR0bz8udXNlclN0YXR1cyA9PT0gVXNlclN0YXR1cy5Bd2FpdGluZ0FjY2VzcztcblxuICBAQWN0aW9uKEJhY2tvZmZpY2VBdXRoZXRpY2F0ZUFjdGlvbilcbiAgcHVibGljIG9uQmFja29mZmljZUF1dGhldGljYXRlQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PExvZ2luU3RhdGVNb2RlbD4sIHsgdG9rZW4sIHRlbmFudEluZm8gfTogQmFja29mZmljZUF1dGhldGljYXRlQWN0aW9uKSB7XG4gICAgY29uc3QgYXV0aGVudGljYXRlUmVxdWVzdER0byA9IG5ldyBBdXRoZW50aWNhdGVCYWNrb2ZmaWNlU3NvUmVxdWVzdER0bygpO1xuICAgIGF1dGhlbnRpY2F0ZVJlcXVlc3REdG8uY29kZSA9IHRva2VuO1xuICAgIGF1dGhlbnRpY2F0ZVJlcXVlc3REdG8udGVuYW50TmFtZSA9IHRlbmFudEluZm8/LnRlbmFudE5hbWU7XG5cbiAgICBjb25zdCBhdXRoZW50aWNhdGVPaWRjJCA9IHRoaXMuYmFja29mZmljZVVzZXJJZGVudGl0eVNlcnZpY2VQcm94eS5iYWNrb2ZmaWNlQXV0aGVudGljYXRlKGF1dGhlbnRpY2F0ZVJlcXVlc3REdG8pO1xuICAgIHJldHVybiBhdXRoZW50aWNhdGVPaWRjJC5waXBlKHRhcCh7XG4gICAgICBuZXh0OiBhdXRoUmVzcG9uc2UgPT4ge1xuICAgICAgICBpZiAoYXV0aFJlc3BvbnNlLmRhdGEubWVzc2FnZSA9PT0gTG9jYWxpemF0aW9uLnNzb19wZW5kaW5nX2FwcHJvdmFsKSB7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5zc29fcGVuZGluZ19hcHByb3ZhbCk7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlQmFyU2VydmljZS5pbmZvKG1lc3NhZ2UsIHsgcG9zaXRpb246IE1lc3NhZ2VCYXJQb3NpdGlvbi5TdGF0aWMgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3BhcmtTZXNzaW9uID0gdGhpcy5hdXRoU2VydmljZS5wcm9jZXNzQXV0aGVudGljYXRlKGF1dGhSZXNwb25zZS5kYXRhKTtcbiAgICAgICAgY3R4LmRpc3BhdGNoKG5ldyBTZXRUZW5hbnRVc2VyQWN0aW9uKHNwYXJrU2Vzc2lvbikpO1xuICAgICAgICBpZiAodGhpcy51c2VyU3RhdHVzSXNBd2FpdGluZ0FjY2VzcyhhdXRoUmVzcG9uc2UpKSB7XG4gICAgICAgICAgdGhpcy5jbGVhclNpbmdsZVNpbmdPbkNhY2hlKFNpbmdsZVNpZ25PblByb3ZpZGVyLk1pY3Jvc29mdCk7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5zc29fcGVuZGluZ19hcHByb3ZhbCk7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlQmFyU2VydmljZS53YXJuKG1lc3NhZ2UsIHsgcG9zaXRpb246IE1lc3NhZ2VCYXJQb3NpdGlvbi5TdGF0aWMgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgLy8gQWZ0ZXIgYXV0aGVudGljYXRpb24gZ2V0IGFwcCBjb25maWd1cmF0aW9uXG4gICAgICAgICAgdGhpcy5sb2dpblRvQmFja29mZmljZSgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZXJyb3I6IGUgPT4ge1xuICAgICAgICB0aGlzLnNpbmdsZVNpbmdPbkVycm9ySGFuZGxpbmcoZSk7XG4gICAgICB9XG4gICAgfSkpO1xuICB9XG5cbiAgQEFjdGlvbihPcGVuSWRBdXRoZXRpY2F0ZUFjdGlvbilcbiAgcHVibGljIG9uT3BlbklkQXV0aGV0aWNhdGVBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8TG9naW5TdGF0ZU1vZGVsPiwgYWN0aW9uOiBPcGVuSWRBdXRoZXRpY2F0ZUFjdGlvbikge1xuICAgIGxldCBhdXRoZW50aWNhdGVPaWRjJDogT2JzZXJ2YWJsZTxBdXRoZW50aWNhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGE+O1xuXG4gICAgY29uc3QgYXV0aGVudGljYXRlUmVxdWVzdER0byA9IG5ldyBBdXRoZW50aWNhdGVXZWJTc29SZXF1ZXN0RHRvKCk7XG4gICAgYXV0aGVudGljYXRlUmVxdWVzdER0by5jb2RlID0gYWN0aW9uLnRva2VuO1xuICAgIGF1dGhlbnRpY2F0ZVJlcXVlc3REdG8udGVuYW50TmFtZSA9IGFjdGlvbi50ZW5hbnRJbmZvPy50ZW5hbnROYW1lO1xuICAgIGNvbnN0IGNvbmZsaWN0RGV0ZWN0ZWQgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KFNlc3Npb25TdGF0ZS5pc0NvbmZsaWN0RGV0ZWN0ZWQpXG4gICAgaWYgKGNvbmZsaWN0RGV0ZWN0ZWQgPT0gbnVsbCkge1xuICAgIGF1dGhlbnRpY2F0ZU9pZGMkID0gdGhpcy51c2Vyc0lkZW50aXR5U2VydmljZVByb3h5Lm9wZW5JZEF1dGhlbnRpY2F0ZShhdXRoZW50aWNhdGVSZXF1ZXN0RHRvKTtcblxuICAgIHJldHVybiBhdXRoZW50aWNhdGVPaWRjJC5waXBlKHRhcCh7XG4gICAgICBuZXh0OiBhdXRoUmVzcG9uc2UgPT4ge1xuICAgICAgICBpZiAoYXV0aFJlc3BvbnNlLmRhdGEubWVzc2FnZSA9PT0gTG9jYWxpemF0aW9uLnNzb19wZW5kaW5nX2FwcHJvdmFsKSB7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5zc29fcGVuZGluZ19hcHByb3ZhbCk7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlQmFyU2VydmljZS5pbmZvKG1lc3NhZ2UsIHsgcG9zaXRpb246IE1lc3NhZ2VCYXJQb3NpdGlvbi5TdGF0aWMgfSk7XG4gICAgICAgICAgYWN0aW9uLmlzUGVuZGluZ0FwcHJvdmFsID0gdHJ1ZTtcbiAgICAgICAgICAvL3RoaXMuY2xlYXJTaW5nbGVTaW5nT25DYWNoZShzaW5nbGVTaWduT25Qcm92aWRlcik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3BhcmtTZXNzaW9uID0gdGhpcy5hdXRoU2VydmljZS5wcm9jZXNzQXV0aGVudGljYXRlKGF1dGhSZXNwb25zZS5kYXRhKTtcbiAgICAgICAgY3R4LmRpc3BhdGNoKG5ldyBTZXRUZW5hbnRVc2VyQWN0aW9uKHNwYXJrU2Vzc2lvbikpO1xuICAgICAgICBcbiAgICAgICAgICBpZiAodGhpcy51c2VyU3RhdHVzSXNBd2FpdGluZ0FjY2VzcyhhdXRoUmVzcG9uc2UpKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyU2luZ2xlU2luZ09uQ2FjaGUoYWN0aW9uLnNpbmdsZVNpZ25PblByb3ZpZGVyKTtcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChMb2NhbGl6YXRpb24uc3NvX3BlbmRpbmdfYXBwcm92YWwpO1xuICAgICAgICAgICAgdGhpcy5tZXNzYWdlQmFyU2VydmljZS53YXJuKG1lc3NhZ2UsIHsgcG9zaXRpb246IE1lc3NhZ2VCYXJQb3NpdGlvbi5TdGF0aWMgfSk7XG4gICAgICAgICAgICBhY3Rpb24uaXNQZW5kaW5nQXBwcm92YWwgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIEFmdGVyIGF1dGhlbnRpY2F0aW9uIGdldCBhcHAgY29uZmlndXJhdGlvblxuICAgICAgICAgICAgdGhpcy5sb2dpblRvU3BhcmsoKTtcbiAgICAgICAgICB9XG4gICAgICB9LFxuICAgICAgICBlcnJvcjogZSA9PiB7XG4gICAgICAgICAgdGhpcy5zaW5nbGVTaW5nT25FcnJvckhhbmRsaW5nKGUpO1xuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgfVxuICB9XG5cbiAgc2luZ2xlU2luZ09uRXJyb3JIYW5kbGluZyhlOiBhbnkpIHtcbiAgICBpZiAoZS5lcnJvck1lc3NhZ2UgPT0gTG9jYWxpemF0aW9uLnNzb19wZW5kaW5nX2FwcHJvdmFsKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLnNzb19wZW5kaW5nX2FwcHJvdmFsKTtcbiAgICAgIHRoaXMubWVzc2FnZUJhclNlcnZpY2UuaW5mbyhtZXNzYWdlLCB7IHBvc2l0aW9uOiBNZXNzYWdlQmFyUG9zaXRpb24uU3RhdGljIH0pO1xuICAgIH1cbiAgICBlbHNlIGlmIChlLmVycm9yTWVzc2FnZSkge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGUuZXJyb3JNZXNzYWdlKTtcbiAgICAgIHRoaXMubWVzc2FnZUJhclNlcnZpY2UuZXJyb3IobWVzc2FnZSwgeyBwb3NpdGlvbjogTWVzc2FnZUJhclBvc2l0aW9uLlN0YXRpYyB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLmVycm9yKHBhcnNlQXBpRXJyb3JNZXNzYWdlKGUpLCB0aGlzLm1lc3NhZ2VPcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICBsb2dpblRvU3BhcmsoKSB7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgTG9hZEFwcENvbmZpZ3VyYXRpb25BY3Rpb24oKSk7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgSGVhbHRoQWN0aW9uKCkpO1xuICAgIHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnVwZGF0ZUxvZ2dlZFRlbmFudCgpO1xuICAgIHRoaXMubG9naW5TZXJ2aWNlLmxvZ2luVG9TcGFyaygpO1xuICB9XG5cbiAgbG9naW5Ub0JhY2tvZmZpY2UoKSB7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgTG9hZEJhY2tvZmZpY2VBcHBDb25maWd1cmF0aW9uQWN0aW9uKCkpO1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IEhlYWx0aEFjdGlvbigpKTtcbiAgICB0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS51cGRhdGVMb2dnZWRUZW5hbnQoKTtcbiAgICB0aGlzLmxvZ2luU2VydmljZS5sb2dpblRvU3BhcmsoKTtcbiAgfVxufVxuIl19