@decaf-ts/integrations 0.14.0 → 0.14.3
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/README.md +11 -1
- package/dist/integrations.cjs +3317 -2
- package/dist/integrations.js +3665 -2
- package/lib/cjs/blob/azure/AzureBlobEnvironment.cjs +2 -2
- package/lib/cjs/blob/azure/AzureBlobStoreService.cjs +2 -2
- package/lib/cjs/blob/azure/index.cjs +2 -2
- package/lib/cjs/blob/core/BlobEnvironment.cjs +2 -2
- package/lib/cjs/blob/core/BlobErrors.cjs +2 -2
- package/lib/cjs/blob/core/BlobKey.cjs +2 -2
- package/lib/cjs/blob/core/BlobStoreFactory.cjs +2 -2
- package/lib/cjs/blob/core/BlobStoreService.cjs +2 -2
- package/lib/cjs/blob/core/BlobTypes.cjs +2 -2
- package/lib/cjs/blob/core/BlobValue.cjs +2 -2
- package/lib/cjs/blob/core/index.cjs +2 -2
- package/lib/cjs/blob/gcp/GcsBlobEnvironment.cjs +2 -2
- package/lib/cjs/blob/gcp/GcsBlobStoreService.cjs +2 -2
- package/lib/cjs/blob/gcp/index.cjs +2 -2
- package/lib/cjs/blob/index.cjs +2 -2
- package/lib/cjs/blob/local/LocalBlobEnvironment.cjs +2 -2
- package/lib/cjs/blob/local/LocalBlobStoreService.cjs +2 -2
- package/lib/cjs/blob/local/index.cjs +2 -2
- package/lib/cjs/blob/memory/MemoryBlobEnvironment.cjs +2 -2
- package/lib/cjs/blob/memory/MemoryBlobStoreService.cjs +2 -2
- package/lib/cjs/blob/memory/index.cjs +2 -2
- package/lib/cjs/blob/s3/MinioBlobEnvironment.cjs +2 -2
- package/lib/cjs/blob/s3/MinioBlobStoreService.cjs +2 -2
- package/lib/cjs/blob/s3/R2BlobEnvironment.cjs +2 -2
- package/lib/cjs/blob/s3/R2BlobStoreService.cjs +2 -2
- package/lib/cjs/blob/s3/S3BlobEnvironment.cjs +2 -2
- package/lib/cjs/blob/s3/S3BlobStoreService.cjs +2 -2
- package/lib/cjs/blob/s3/S3CompatibleBlobStoreService.cjs +2 -2
- package/lib/cjs/blob/s3/index.cjs +2 -2
- package/lib/cjs/calendar/CalendarService.cjs +2 -2
- package/lib/cjs/calendar/environment.cjs +2 -2
- package/lib/cjs/calendar/google-calendar/GoogleCalendarService.cjs +2 -2
- package/lib/cjs/calendar/google-calendar/index.cjs +2 -2
- package/lib/cjs/calendar/index.cjs +2 -2
- package/lib/cjs/calendar/types.cjs +2 -2
- package/lib/cjs/calendar/validators/cron.cjs +2 -2
- package/lib/cjs/calendar/writers/CalendarFsWriter.cjs +2 -2
- package/lib/cjs/calendar/writers/CalenderDownloader.cjs +2 -2
- package/lib/cjs/calendar/writers/ICalendarWriter.cjs +2 -2
- package/lib/cjs/comms/discord/DiscordService.cjs +2 -2
- package/lib/cjs/comms/discord/index.cjs +2 -2
- package/lib/cjs/comms/email/EmailService.cjs +2 -2
- package/lib/cjs/comms/email/index.cjs +2 -2
- package/lib/cjs/comms/email/mime.cjs +2 -2
- package/lib/cjs/comms/email/smtp.cjs +2 -2
- package/lib/cjs/comms/environment.cjs +2 -2
- package/lib/cjs/comms/gmail/GmailService.cjs +2 -2
- package/lib/cjs/comms/gmail/index.cjs +2 -2
- package/lib/cjs/comms/index.cjs +2 -2
- package/lib/cjs/comms/outlook/MicrosoftOutlookService.cjs +2 -2
- package/lib/cjs/comms/outlook/index.cjs +2 -2
- package/lib/cjs/comms/slack/SlackService.cjs +2 -2
- package/lib/cjs/comms/slack/index.cjs +2 -2
- package/lib/cjs/comms/teams/TeamsService.cjs +2 -2
- package/lib/cjs/comms/teams/index.cjs +2 -2
- package/lib/cjs/comms/telegram/TelegramService.cjs +2 -2
- package/lib/cjs/comms/telegram/index.cjs +2 -2
- package/lib/cjs/comms/whatsapp/WhatsAppService.cjs +2 -2
- package/lib/cjs/comms/whatsapp/index.cjs +2 -2
- package/lib/cjs/devops/environment.cjs +2 -2
- package/lib/cjs/devops/github/GithubService.cjs +2 -2
- package/lib/cjs/devops/github/index.cjs +2 -2
- package/lib/cjs/devops/gitlab/GitlabService.cjs +2 -2
- package/lib/cjs/devops/gitlab/index.cjs +2 -2
- package/lib/cjs/devops/index.cjs +2 -2
- package/lib/cjs/docker/DockerComposeService.cjs +2 -2
- package/lib/cjs/docker/index.cjs +2 -2
- package/lib/cjs/feature-flags/EngineCapabilityFeatureFlag.service.cjs +2 -2
- package/lib/cjs/feature-flags/constants.cjs +2 -2
- package/lib/cjs/feature-flags/decorators.cjs +2 -2
- package/lib/cjs/feature-flags/environment.cjs +2 -2
- package/lib/cjs/feature-flags/index.cjs +2 -2
- package/lib/cjs/feature-flags/models/FeatureFlag.model.cjs +2 -2
- package/lib/cjs/feature-flags/models/FeatureFlagAccess.model.cjs +2 -2
- package/lib/cjs/feature-flags/readers/FeatureFlagReader.cjs +2 -2
- package/lib/cjs/feature-flags/readers/index.cjs +2 -2
- package/lib/cjs/feature-flags/services/FeatureFlag.service.cjs +2 -2
- package/lib/cjs/feature-flags/types.cjs +2 -2
- package/lib/cjs/feature-flags/utils.cjs +2 -2
- package/lib/cjs/index.cjs +5 -5
- package/lib/cjs/io/airtable/AirtableService.cjs +2 -2
- package/lib/cjs/io/airtable/index.cjs +2 -2
- package/lib/cjs/io/confluence/ConfluenceService.cjs +2 -2
- package/lib/cjs/io/confluence/index.cjs +2 -2
- package/lib/cjs/io/environment.cjs +2 -2
- package/lib/cjs/io/google-docs/GoogleDocsService.cjs +2 -2
- package/lib/cjs/io/google-docs/index.cjs +2 -2
- package/lib/cjs/io/google-sheets/GoogleSheetsService.cjs +2 -2
- package/lib/cjs/io/google-sheets/index.cjs +2 -2
- package/lib/cjs/io/graphql/GraphqlService.cjs +2 -2
- package/lib/cjs/io/graphql/index.cjs +2 -2
- package/lib/cjs/io/index.cjs +2 -2
- package/lib/cjs/io/jira/JiraService.cjs +2 -2
- package/lib/cjs/io/jira/index.cjs +2 -2
- package/lib/cjs/io/microsoft-excel/MicrosoftExcelService.cjs +2 -2
- package/lib/cjs/io/microsoft-excel/index.cjs +2 -2
- package/lib/cjs/io/microsoft-sharepoint/MicrosoftSharePointService.cjs +2 -2
- package/lib/cjs/io/microsoft-sharepoint/index.cjs +2 -2
- package/lib/cjs/io/spreadsheet/SpreadsheetService.cjs +2 -2
- package/lib/cjs/io/spreadsheet/index.cjs +2 -2
- package/lib/cjs/keycloak/broker.cjs +2 -2
- package/lib/cjs/keycloak/index.cjs +2 -2
- package/lib/cjs/keycloak/services/KeycloakAuthService.cjs +2 -2
- package/lib/cjs/keycloak/services/KeycloakClientService.cjs +2 -2
- package/lib/cjs/keycloak/services/KeycloakIdentityProviderService.cjs +2 -2
- package/lib/cjs/keycloak/services/KeycloakRealmService.cjs +2 -2
- package/lib/cjs/keycloak/services/KeycloakRoleService.cjs +2 -2
- package/lib/cjs/keycloak/services/KeycloakService.cjs +2 -2
- package/lib/cjs/keycloak/services/KeycloakUserService.cjs +2 -2
- package/lib/cjs/keycloak/services/index.cjs +2 -2
- package/lib/cjs/keycloak/services/runtime.cjs +2 -2
- package/lib/cjs/keycloak/types.cjs +2 -2
- package/lib/cjs/kibana/builders/KibanaIndexBuilder.cjs +2 -2
- package/lib/cjs/kibana/builders/KibanaIndexBuilderCollection.cjs +2 -2
- package/lib/cjs/kibana/builders/index.cjs +2 -2
- package/lib/cjs/kibana/helpers.cjs +2 -2
- package/lib/cjs/kibana/index.cjs +2 -2
- package/lib/cjs/kibana/services/KibanaAuthService.cjs +2 -2
- package/lib/cjs/kibana/services/KibanaDashboardService.cjs +2 -2
- package/lib/cjs/kibana/services/KibanaDataViewService.cjs +2 -2
- package/lib/cjs/kibana/services/KibanaRoleService.cjs +2 -2
- package/lib/cjs/kibana/services/KibanaService.cjs +2 -2
- package/lib/cjs/kibana/services/KibanaSpaceService.cjs +2 -2
- package/lib/cjs/kibana/services/KibanaUserService.cjs +2 -2
- package/lib/cjs/kibana/services/index.cjs +2 -2
- package/lib/cjs/kibana/services/runtime.cjs +2 -2
- package/lib/cjs/kibana/types.cjs +2 -2
- package/lib/cjs/loader/ObjectLoader.cjs +2 -2
- package/lib/cjs/loader/assets.cjs +2 -2
- package/lib/cjs/loader/config.cjs +2 -2
- package/lib/cjs/loader/families.cjs +2 -2
- package/lib/cjs/loader/index.cjs +2 -2
- package/lib/cjs/loader/nest.cjs +2 -2
- package/lib/cjs/loader/types.cjs +2 -2
- package/lib/cjs/namespaces/index.cjs +2 -2
- package/lib/cjs/namespaces/models/authorization-model.cjs +2 -2
- package/lib/cjs/namespaces/models/credential.model.cjs +2 -2
- package/lib/cjs/namespaces/models/effective-permission.model.cjs +2 -2
- package/lib/cjs/namespaces/models/group-membership.model.cjs +2 -2
- package/lib/cjs/namespaces/models/group.model.cjs +2 -2
- package/lib/cjs/namespaces/models/index.cjs +2 -2
- package/lib/cjs/namespaces/models/inheritance-block.model.cjs +2 -2
- package/lib/cjs/namespaces/models/org-unit-closure.model.cjs +2 -2
- package/lib/cjs/namespaces/models/org-unit-membership.model.cjs +2 -2
- package/lib/cjs/namespaces/models/org-unit-profile.model.cjs +2 -2
- package/lib/cjs/namespaces/models/org-unit.model.cjs +2 -2
- package/lib/cjs/namespaces/models/permission.model.cjs +2 -2
- package/lib/cjs/namespaces/models/principal.model.cjs +2 -2
- package/lib/cjs/namespaces/models/protected-resource.model.cjs +2 -2
- package/lib/cjs/namespaces/models/resource-grant.model.cjs +2 -2
- package/lib/cjs/namespaces/models/role-assignment.model.cjs +2 -2
- package/lib/cjs/namespaces/models/role-permission.model.cjs +2 -2
- package/lib/cjs/namespaces/models/role.model.cjs +2 -2
- package/lib/cjs/namespaces/models/storage-binding.model.cjs +2 -2
- package/lib/cjs/namespaces/models/tenant-membership.model.cjs +2 -2
- package/lib/cjs/namespaces/models/tenant-profile.model.cjs +2 -2
- package/lib/cjs/namespaces/models/tenant.model.cjs +2 -2
- package/lib/cjs/namespaces/models/user.model.cjs +2 -2
- package/lib/cjs/namespaces/org-based-authorization-system.cjs +2 -2
- package/lib/cjs/namespaces/org-based-authorization-system.models.cjs +2 -2
- package/lib/cjs/namespaces/org-based-authorization-system.services.cjs +2 -2
- package/lib/cjs/namespaces/rls/index.cjs +2 -2
- package/lib/cjs/namespaces/rls/principal-resolver.cjs +2 -2
- package/lib/cjs/namespaces/rls/rls-bootstrap.service.cjs +2 -2
- package/lib/cjs/namespaces/rls/rls.constants.cjs +2 -2
- package/lib/cjs/namespaces/rls/rls.template.cjs +2 -2
- package/lib/cjs/namespaces/rls/rls.types.cjs +2 -2
- package/lib/cjs/namespaces/rls/session-binding.cjs +2 -2
- package/lib/cjs/namespaces/services/authz.service.cjs +2 -2
- package/lib/cjs/namespaces/services/bootstrap.service.cjs +2 -2
- package/lib/cjs/namespaces/services/credential.service.cjs +2 -2
- package/lib/cjs/namespaces/services/effective-permission.service.cjs +2 -2
- package/lib/cjs/namespaces/services/group-membership.service.cjs +2 -2
- package/lib/cjs/namespaces/services/group.service.cjs +2 -2
- package/lib/cjs/namespaces/services/index.cjs +2 -2
- package/lib/cjs/namespaces/services/inheritance-block.service.cjs +2 -2
- package/lib/cjs/namespaces/services/org-unit-closure.service.cjs +2 -2
- package/lib/cjs/namespaces/services/org-unit-membership.service.cjs +2 -2
- package/lib/cjs/namespaces/services/org-unit-profile.service.cjs +2 -2
- package/lib/cjs/namespaces/services/org-unit.service.cjs +2 -2
- package/lib/cjs/namespaces/services/permission.service.cjs +2 -2
- package/lib/cjs/namespaces/services/principal.service.cjs +2 -2
- package/lib/cjs/namespaces/services/protected-resource.service.cjs +2 -2
- package/lib/cjs/namespaces/services/resource-grant.service.cjs +2 -2
- package/lib/cjs/namespaces/services/resource-lifecycle.service.cjs +2 -2
- package/lib/cjs/namespaces/services/role-assignment.service.cjs +2 -2
- package/lib/cjs/namespaces/services/role-permission.service.cjs +2 -2
- package/lib/cjs/namespaces/services/role.service.cjs +2 -2
- package/lib/cjs/namespaces/services/storage-binding.service.cjs +2 -2
- package/lib/cjs/namespaces/services/system-management.service.cjs +2 -2
- package/lib/cjs/namespaces/services/tenant-membership.service.cjs +2 -2
- package/lib/cjs/namespaces/services/tenant-profile.service.cjs +2 -2
- package/lib/cjs/namespaces/services/tenant.service.cjs +2 -2
- package/lib/cjs/namespaces/services/user.service.cjs +2 -2
- package/lib/cjs/namespaces/types.cjs +2 -2
- package/lib/cjs/namespaces/utils.cjs +2 -2
- package/lib/cjs/nest/decorators.cjs +2 -2
- package/lib/cjs/nest/index.cjs +2 -2
- package/lib/cjs/nest/keycloakAuthHandler.cjs +2 -2
- package/lib/cjs/nest/keycloakModule.cjs +2 -2
- package/lib/cjs/nest/logging.cjs +2 -2
- package/lib/cjs/nest/types.cjs +2 -2
- package/lib/cjs/nest/utils.cjs +2 -2
- package/lib/cjs/plugins/contract.cjs +2 -2
- package/lib/cjs/plugins/index.cjs +2 -2
- package/lib/cjs/plugins/kibana/host.cjs +2 -2
- package/lib/cjs/plugins/kibana/index.cjs +2 -2
- package/lib/cjs/plugins/kibana/installer.cjs +2 -2
- package/lib/cjs/plugins/kibana/manifest.cjs +2 -2
- package/lib/cjs/plugins/kibana/templates.cjs +2 -2
- package/lib/cjs/plugins/kibana/types.cjs +2 -2
- package/lib/cjs/plugins/superset/host.cjs +2 -2
- package/lib/cjs/plugins/superset/index.cjs +2 -2
- package/lib/cjs/plugins/superset/installer.cjs +2 -2
- package/lib/cjs/plugins/superset/manifest.cjs +2 -2
- package/lib/cjs/plugins/superset/templates.cjs +2 -2
- package/lib/cjs/plugins/superset/types.cjs +2 -2
- package/lib/cjs/redis/RedisContextLock.cjs +2 -2
- package/lib/cjs/redis/RedisDispatch.cjs +2 -2
- package/lib/cjs/redis/RedisPaginator.cjs +2 -2
- package/lib/cjs/redis/RedisStatement.cjs +2 -2
- package/lib/cjs/redis/adapter.cjs +2 -2
- package/lib/cjs/redis/constants.cjs +2 -2
- package/lib/cjs/redis/handlers.cjs +2 -2
- package/lib/cjs/redis/index.cjs +2 -2
- package/lib/cjs/redis/serialization.cjs +2 -2
- package/lib/cjs/redis/types.cjs +2 -2
- package/lib/cjs/secrets/InfraCredentialBootstrap.cjs +2 -2
- package/lib/cjs/secrets/aws/AwsSecretEnvironment.cjs +2 -2
- package/lib/cjs/secrets/aws/AwsSecretService.cjs +2 -2
- package/lib/cjs/secrets/aws/AwsSecretServiceConfig.cjs +2 -2
- package/lib/cjs/secrets/aws/index.cjs +2 -2
- package/lib/cjs/secrets/azure/AzureKeyVaultSecretService.cjs +2 -2
- package/lib/cjs/secrets/azure/AzureKeyVaultSecretServiceConfig.cjs +2 -2
- package/lib/cjs/secrets/azure/AzureSecretEnvironment.cjs +2 -2
- package/lib/cjs/secrets/azure/index.cjs +2 -2
- package/lib/cjs/secrets/core/ClientBasedSecretService.cjs +2 -2
- package/lib/cjs/secrets/core/SecretEnvironment.cjs +2 -2
- package/lib/cjs/secrets/core/SecretErrors.cjs +2 -2
- package/lib/cjs/secrets/core/SecretName.cjs +2 -2
- package/lib/cjs/secrets/core/SecretReference.cjs +3 -2
- package/lib/cjs/secrets/core/SecretSerialization.cjs +2 -2
- package/lib/cjs/secrets/core/SecretService.cjs +2 -2
- package/lib/cjs/secrets/core/SecretTypes.cjs +2 -2
- package/lib/cjs/secrets/core/index.cjs +2 -2
- package/lib/cjs/secrets/fs/FsSecretEnvironment.cjs +2 -2
- package/lib/cjs/secrets/fs/FsSecretService.cjs +2 -2
- package/lib/cjs/secrets/fs/FsSecretServiceConfig.cjs +2 -2
- package/lib/cjs/secrets/fs/index.cjs +2 -2
- package/lib/cjs/secrets/gcp/GcpSecretEnvironment.cjs +2 -2
- package/lib/cjs/secrets/gcp/GcpSecretManagerService.cjs +2 -2
- package/lib/cjs/secrets/gcp/GcpSecretManagerServiceConfig.cjs +2 -2
- package/lib/cjs/secrets/gcp/index.cjs +2 -2
- package/lib/cjs/secrets/index.cjs +2 -2
- package/lib/cjs/secrets/kubernetes/KubernetesSecretEnvironment.cjs +34 -0
- package/lib/cjs/secrets/kubernetes/KubernetesSecretService.cjs +479 -0
- package/lib/cjs/secrets/kubernetes/KubernetesSecretServiceConfig.cjs +4 -0
- package/lib/cjs/secrets/kubernetes/index.cjs +27 -0
- package/lib/cjs/secrets/model/ModelSecretCrypto.cjs +2 -2
- package/lib/cjs/secrets/model/ModelSecretEnvironment.cjs +2 -2
- package/lib/cjs/secrets/model/ModelSecretService.cjs +2 -2
- package/lib/cjs/secrets/model/ModelSecretServiceConfig.cjs +2 -2
- package/lib/cjs/secrets/model/Secret.cjs +2 -2
- package/lib/cjs/secrets/model/index.cjs +2 -2
- package/lib/cjs/secrets/onepassword/OnePasswordSecretEnvironment.cjs +2 -2
- package/lib/cjs/secrets/onepassword/OnePasswordSecretService.cjs +2 -2
- package/lib/cjs/secrets/onepassword/OnePasswordSecretServiceConfig.cjs +2 -2
- package/lib/cjs/secrets/onepassword/index.cjs +2 -2
- package/lib/cjs/secrets/vault/VaultSecretEnvironment.cjs +2 -2
- package/lib/cjs/secrets/vault/VaultSecretService.cjs +2 -2
- package/lib/cjs/secrets/vault/VaultSecretServiceConfig.cjs +2 -2
- package/lib/cjs/secrets/vault/index.cjs +2 -2
- package/lib/cjs/sftp/aws/AwsSftpEnvironment.cjs +2 -2
- package/lib/cjs/sftp/aws/AwsSftpService.cjs +2 -2
- package/lib/cjs/sftp/aws/index.cjs +24 -0
- package/lib/cjs/sftp/core/SftpEnvironment.cjs +2 -2
- package/lib/cjs/sftp/core/SftpSource.cjs +2 -2
- package/lib/cjs/sftp/core/index.cjs +2 -2
- package/lib/cjs/sftp/index.cjs +2 -2
- package/lib/cjs/sftp/ssh2/Ssh2SftpEnvironment.cjs +2 -2
- package/lib/cjs/sftp/ssh2/Ssh2SftpService.cjs +2 -2
- package/lib/cjs/sftp/ssh2/index.cjs +24 -0
- package/lib/cjs/shared/environmentValue.cjs +2 -2
- package/lib/cjs/shared/http/HttpApiService.cjs +2 -2
- package/lib/cjs/shared/http/hermeticBoot.cjs +2 -2
- package/lib/cjs/shared/http/index.cjs +2 -2
- package/lib/cjs/shared/runtime.cjs +2 -2
- package/lib/cjs/user-requests/index.cjs +2 -2
- package/lib/cjs/utils.cjs +2 -2
- package/lib/esm/blob/azure/AzureBlobEnvironment.js +1 -1
- package/lib/esm/blob/azure/AzureBlobStoreService.js +1 -1
- package/lib/esm/blob/azure/index.js +1 -1
- package/lib/esm/blob/core/BlobEnvironment.js +1 -1
- package/lib/esm/blob/core/BlobErrors.js +1 -1
- package/lib/esm/blob/core/BlobKey.js +1 -1
- package/lib/esm/blob/core/BlobStoreFactory.js +1 -1
- package/lib/esm/blob/core/BlobStoreService.js +1 -1
- package/lib/esm/blob/core/BlobTypes.js +1 -1
- package/lib/esm/blob/core/BlobValue.js +1 -1
- package/lib/esm/blob/core/index.js +1 -1
- package/lib/esm/blob/gcp/GcsBlobEnvironment.js +1 -1
- package/lib/esm/blob/gcp/GcsBlobStoreService.js +1 -1
- package/lib/esm/blob/gcp/index.js +1 -1
- package/lib/esm/blob/index.js +1 -1
- package/lib/esm/blob/local/LocalBlobEnvironment.js +1 -1
- package/lib/esm/blob/local/LocalBlobStoreService.js +1 -1
- package/lib/esm/blob/local/index.js +1 -1
- package/lib/esm/blob/memory/MemoryBlobEnvironment.js +1 -1
- package/lib/esm/blob/memory/MemoryBlobStoreService.js +1 -1
- package/lib/esm/blob/memory/index.js +1 -1
- package/lib/esm/blob/s3/MinioBlobEnvironment.js +1 -1
- package/lib/esm/blob/s3/MinioBlobStoreService.js +1 -1
- package/lib/esm/blob/s3/R2BlobEnvironment.js +1 -1
- package/lib/esm/blob/s3/R2BlobStoreService.js +1 -1
- package/lib/esm/blob/s3/S3BlobEnvironment.js +1 -1
- package/lib/esm/blob/s3/S3BlobStoreService.js +1 -1
- package/lib/esm/blob/s3/S3CompatibleBlobStoreService.js +1 -1
- package/lib/esm/blob/s3/index.js +1 -1
- package/lib/esm/calendar/CalendarService.js +1 -1
- package/lib/esm/calendar/environment.js +1 -1
- package/lib/esm/calendar/google-calendar/GoogleCalendarService.js +1 -1
- package/lib/esm/calendar/google-calendar/index.js +1 -1
- package/lib/esm/calendar/index.js +1 -1
- package/lib/esm/calendar/types.js +1 -1
- package/lib/esm/calendar/validators/cron.js +1 -1
- package/lib/esm/calendar/writers/CalendarFsWriter.js +1 -1
- package/lib/esm/calendar/writers/CalenderDownloader.js +1 -1
- package/lib/esm/calendar/writers/ICalendarWriter.js +1 -1
- package/lib/esm/comms/discord/DiscordService.js +1 -1
- package/lib/esm/comms/discord/index.js +1 -1
- package/lib/esm/comms/email/EmailService.js +1 -1
- package/lib/esm/comms/email/index.js +1 -1
- package/lib/esm/comms/email/mime.js +1 -1
- package/lib/esm/comms/email/smtp.js +1 -1
- package/lib/esm/comms/environment.js +1 -1
- package/lib/esm/comms/gmail/GmailService.js +1 -1
- package/lib/esm/comms/gmail/index.js +1 -1
- package/lib/esm/comms/index.js +1 -1
- package/lib/esm/comms/outlook/MicrosoftOutlookService.js +1 -1
- package/lib/esm/comms/outlook/index.js +1 -1
- package/lib/esm/comms/slack/SlackService.js +1 -1
- package/lib/esm/comms/slack/index.js +1 -1
- package/lib/esm/comms/teams/TeamsService.js +1 -1
- package/lib/esm/comms/teams/index.js +1 -1
- package/lib/esm/comms/telegram/TelegramService.js +1 -1
- package/lib/esm/comms/telegram/index.js +1 -1
- package/lib/esm/comms/whatsapp/WhatsAppService.js +1 -1
- package/lib/esm/comms/whatsapp/index.js +1 -1
- package/lib/esm/devops/environment.js +1 -1
- package/lib/esm/devops/github/GithubService.js +1 -1
- package/lib/esm/devops/github/index.js +1 -1
- package/lib/esm/devops/gitlab/GitlabService.js +1 -1
- package/lib/esm/devops/gitlab/index.js +1 -1
- package/lib/esm/devops/index.js +1 -1
- package/lib/esm/docker/DockerComposeService.js +1 -1
- package/lib/esm/docker/index.js +1 -1
- package/lib/esm/feature-flags/EngineCapabilityFeatureFlag.service.js +1 -1
- package/lib/esm/feature-flags/constants.js +1 -1
- package/lib/esm/feature-flags/decorators.js +1 -1
- package/lib/esm/feature-flags/environment.js +1 -1
- package/lib/esm/feature-flags/index.js +1 -1
- package/lib/esm/feature-flags/models/FeatureFlag.model.js +1 -1
- package/lib/esm/feature-flags/models/FeatureFlagAccess.model.js +1 -1
- package/lib/esm/feature-flags/readers/FeatureFlagReader.js +1 -1
- package/lib/esm/feature-flags/readers/index.js +1 -1
- package/lib/esm/feature-flags/services/FeatureFlag.service.js +1 -1
- package/lib/esm/feature-flags/types.js +1 -1
- package/lib/esm/feature-flags/utils.js +1 -1
- package/lib/esm/index.js +4 -4
- package/lib/esm/io/airtable/AirtableService.js +1 -1
- package/lib/esm/io/airtable/index.js +1 -1
- package/lib/esm/io/confluence/ConfluenceService.js +1 -1
- package/lib/esm/io/confluence/index.js +1 -1
- package/lib/esm/io/environment.js +1 -1
- package/lib/esm/io/google-docs/GoogleDocsService.js +1 -1
- package/lib/esm/io/google-docs/index.js +1 -1
- package/lib/esm/io/google-sheets/GoogleSheetsService.js +1 -1
- package/lib/esm/io/google-sheets/index.js +1 -1
- package/lib/esm/io/graphql/GraphqlService.js +1 -1
- package/lib/esm/io/graphql/index.js +1 -1
- package/lib/esm/io/index.js +1 -1
- package/lib/esm/io/jira/JiraService.js +1 -1
- package/lib/esm/io/jira/index.js +1 -1
- package/lib/esm/io/microsoft-excel/MicrosoftExcelService.js +1 -1
- package/lib/esm/io/microsoft-excel/index.js +1 -1
- package/lib/esm/io/microsoft-sharepoint/MicrosoftSharePointService.js +1 -1
- package/lib/esm/io/microsoft-sharepoint/index.js +1 -1
- package/lib/esm/io/spreadsheet/SpreadsheetService.js +1 -1
- package/lib/esm/io/spreadsheet/index.js +1 -1
- package/lib/esm/keycloak/broker.js +1 -1
- package/lib/esm/keycloak/index.js +1 -1
- package/lib/esm/keycloak/services/KeycloakAuthService.js +1 -1
- package/lib/esm/keycloak/services/KeycloakClientService.js +1 -1
- package/lib/esm/keycloak/services/KeycloakIdentityProviderService.js +1 -1
- package/lib/esm/keycloak/services/KeycloakRealmService.js +1 -1
- package/lib/esm/keycloak/services/KeycloakRoleService.js +1 -1
- package/lib/esm/keycloak/services/KeycloakService.js +1 -1
- package/lib/esm/keycloak/services/KeycloakUserService.js +1 -1
- package/lib/esm/keycloak/services/index.js +1 -1
- package/lib/esm/keycloak/services/runtime.js +1 -1
- package/lib/esm/keycloak/types.js +1 -1
- package/lib/esm/kibana/builders/KibanaIndexBuilder.js +1 -1
- package/lib/esm/kibana/builders/KibanaIndexBuilderCollection.js +1 -1
- package/lib/esm/kibana/builders/index.js +1 -1
- package/lib/esm/kibana/helpers.js +1 -1
- package/lib/esm/kibana/index.js +1 -1
- package/lib/esm/kibana/services/KibanaAuthService.js +1 -1
- package/lib/esm/kibana/services/KibanaDashboardService.js +1 -1
- package/lib/esm/kibana/services/KibanaDataViewService.js +1 -1
- package/lib/esm/kibana/services/KibanaRoleService.js +1 -1
- package/lib/esm/kibana/services/KibanaService.js +1 -1
- package/lib/esm/kibana/services/KibanaSpaceService.js +1 -1
- package/lib/esm/kibana/services/KibanaUserService.js +1 -1
- package/lib/esm/kibana/services/index.js +1 -1
- package/lib/esm/kibana/services/runtime.js +1 -1
- package/lib/esm/kibana/types.js +1 -1
- package/lib/esm/loader/ObjectLoader.js +1 -1
- package/lib/esm/loader/assets.js +1 -1
- package/lib/esm/loader/config.js +1 -1
- package/lib/esm/loader/families.js +1 -1
- package/lib/esm/loader/index.js +1 -1
- package/lib/esm/loader/nest.js +1 -1
- package/lib/esm/loader/types.js +1 -1
- package/lib/esm/namespaces/index.js +1 -1
- package/lib/esm/namespaces/models/authorization-model.js +1 -1
- package/lib/esm/namespaces/models/credential.model.js +1 -1
- package/lib/esm/namespaces/models/effective-permission.model.js +1 -1
- package/lib/esm/namespaces/models/group-membership.model.js +1 -1
- package/lib/esm/namespaces/models/group.model.js +1 -1
- package/lib/esm/namespaces/models/index.js +1 -1
- package/lib/esm/namespaces/models/inheritance-block.model.js +1 -1
- package/lib/esm/namespaces/models/org-unit-closure.model.js +1 -1
- package/lib/esm/namespaces/models/org-unit-membership.model.js +1 -1
- package/lib/esm/namespaces/models/org-unit-profile.model.js +1 -1
- package/lib/esm/namespaces/models/org-unit.model.js +1 -1
- package/lib/esm/namespaces/models/permission.model.js +1 -1
- package/lib/esm/namespaces/models/principal.model.js +1 -1
- package/lib/esm/namespaces/models/protected-resource.model.js +1 -1
- package/lib/esm/namespaces/models/resource-grant.model.js +1 -1
- package/lib/esm/namespaces/models/role-assignment.model.js +1 -1
- package/lib/esm/namespaces/models/role-permission.model.js +1 -1
- package/lib/esm/namespaces/models/role.model.js +1 -1
- package/lib/esm/namespaces/models/storage-binding.model.js +1 -1
- package/lib/esm/namespaces/models/tenant-membership.model.js +1 -1
- package/lib/esm/namespaces/models/tenant-profile.model.js +1 -1
- package/lib/esm/namespaces/models/tenant.model.js +1 -1
- package/lib/esm/namespaces/models/user.model.js +1 -1
- package/lib/esm/namespaces/org-based-authorization-system.js +1 -1
- package/lib/esm/namespaces/org-based-authorization-system.models.js +1 -1
- package/lib/esm/namespaces/org-based-authorization-system.services.js +1 -1
- package/lib/esm/namespaces/rls/index.js +1 -1
- package/lib/esm/namespaces/rls/principal-resolver.js +1 -1
- package/lib/esm/namespaces/rls/rls-bootstrap.service.js +1 -1
- package/lib/esm/namespaces/rls/rls.constants.js +1 -1
- package/lib/esm/namespaces/rls/rls.template.js +1 -1
- package/lib/esm/namespaces/rls/rls.types.js +1 -1
- package/lib/esm/namespaces/rls/session-binding.js +1 -1
- package/lib/esm/namespaces/services/authz.service.js +1 -1
- package/lib/esm/namespaces/services/bootstrap.service.js +1 -1
- package/lib/esm/namespaces/services/credential.service.js +1 -1
- package/lib/esm/namespaces/services/effective-permission.service.js +1 -1
- package/lib/esm/namespaces/services/group-membership.service.js +1 -1
- package/lib/esm/namespaces/services/group.service.js +1 -1
- package/lib/esm/namespaces/services/index.js +1 -1
- package/lib/esm/namespaces/services/inheritance-block.service.js +1 -1
- package/lib/esm/namespaces/services/org-unit-closure.service.js +1 -1
- package/lib/esm/namespaces/services/org-unit-membership.service.js +1 -1
- package/lib/esm/namespaces/services/org-unit-profile.service.js +1 -1
- package/lib/esm/namespaces/services/org-unit.service.js +1 -1
- package/lib/esm/namespaces/services/permission.service.js +1 -1
- package/lib/esm/namespaces/services/principal.service.js +1 -1
- package/lib/esm/namespaces/services/protected-resource.service.js +1 -1
- package/lib/esm/namespaces/services/resource-grant.service.js +1 -1
- package/lib/esm/namespaces/services/resource-lifecycle.service.js +1 -1
- package/lib/esm/namespaces/services/role-assignment.service.js +1 -1
- package/lib/esm/namespaces/services/role-permission.service.js +1 -1
- package/lib/esm/namespaces/services/role.service.js +1 -1
- package/lib/esm/namespaces/services/storage-binding.service.js +1 -1
- package/lib/esm/namespaces/services/system-management.service.js +1 -1
- package/lib/esm/namespaces/services/tenant-membership.service.js +1 -1
- package/lib/esm/namespaces/services/tenant-profile.service.js +1 -1
- package/lib/esm/namespaces/services/tenant.service.js +1 -1
- package/lib/esm/namespaces/services/user.service.js +1 -1
- package/lib/esm/namespaces/types.js +1 -1
- package/lib/esm/namespaces/utils.js +1 -1
- package/lib/esm/nest/decorators.js +1 -1
- package/lib/esm/nest/index.js +1 -1
- package/lib/esm/nest/keycloakAuthHandler.js +1 -1
- package/lib/esm/nest/keycloakModule.js +1 -1
- package/lib/esm/nest/logging.js +1 -1
- package/lib/esm/nest/types.js +1 -1
- package/lib/esm/nest/utils.js +1 -1
- package/lib/esm/plugins/contract.js +1 -1
- package/lib/esm/plugins/index.js +1 -1
- package/lib/esm/plugins/kibana/host.js +1 -1
- package/lib/esm/plugins/kibana/index.js +1 -1
- package/lib/esm/plugins/kibana/installer.js +1 -1
- package/lib/esm/plugins/kibana/manifest.js +1 -1
- package/lib/esm/plugins/kibana/templates.js +1 -1
- package/lib/esm/plugins/kibana/types.js +1 -1
- package/lib/esm/plugins/superset/host.js +1 -1
- package/lib/esm/plugins/superset/index.js +1 -1
- package/lib/esm/plugins/superset/installer.js +1 -1
- package/lib/esm/plugins/superset/manifest.js +1 -1
- package/lib/esm/plugins/superset/templates.js +1 -1
- package/lib/esm/plugins/superset/types.js +1 -1
- package/lib/esm/redis/RedisContextLock.js +1 -1
- package/lib/esm/redis/RedisDispatch.js +1 -1
- package/lib/esm/redis/RedisPaginator.js +1 -1
- package/lib/esm/redis/RedisStatement.js +1 -1
- package/lib/esm/redis/adapter.js +1 -1
- package/lib/esm/redis/constants.js +1 -1
- package/lib/esm/redis/handlers.js +1 -1
- package/lib/esm/redis/index.js +1 -1
- package/lib/esm/redis/serialization.js +1 -1
- package/lib/esm/redis/types.js +1 -1
- package/lib/esm/secrets/InfraCredentialBootstrap.js +1 -1
- package/lib/esm/secrets/aws/AwsSecretEnvironment.js +1 -1
- package/lib/esm/secrets/aws/AwsSecretService.js +1 -1
- package/lib/esm/secrets/aws/AwsSecretServiceConfig.js +1 -1
- package/lib/esm/secrets/aws/index.js +1 -1
- package/lib/esm/secrets/azure/AzureKeyVaultSecretService.js +1 -1
- package/lib/esm/secrets/azure/AzureKeyVaultSecretServiceConfig.js +1 -1
- package/lib/esm/secrets/azure/AzureSecretEnvironment.js +1 -1
- package/lib/esm/secrets/azure/index.js +1 -1
- package/lib/esm/secrets/core/ClientBasedSecretService.js +1 -1
- package/lib/esm/secrets/core/SecretEnvironment.js +1 -1
- package/lib/esm/secrets/core/SecretErrors.js +1 -1
- package/lib/esm/secrets/core/SecretName.js +1 -1
- package/lib/esm/secrets/core/SecretReference.js +2 -1
- package/lib/esm/secrets/core/SecretSerialization.js +1 -1
- package/lib/esm/secrets/core/SecretService.js +1 -1
- package/lib/esm/secrets/core/SecretTypes.js +1 -1
- package/lib/esm/secrets/core/index.js +1 -1
- package/lib/esm/secrets/fs/FsSecretEnvironment.js +1 -1
- package/lib/esm/secrets/fs/FsSecretService.js +1 -1
- package/lib/esm/secrets/fs/FsSecretServiceConfig.js +1 -1
- package/lib/esm/secrets/fs/index.js +1 -1
- package/lib/esm/secrets/gcp/GcpSecretEnvironment.js +1 -1
- package/lib/esm/secrets/gcp/GcpSecretManagerService.js +1 -1
- package/lib/esm/secrets/gcp/GcpSecretManagerServiceConfig.js +1 -1
- package/lib/esm/secrets/gcp/index.js +1 -1
- package/lib/esm/secrets/index.js +1 -1
- package/lib/esm/secrets/kubernetes/KubernetesSecretEnvironment.js +30 -0
- package/lib/esm/secrets/kubernetes/KubernetesSecretService.js +474 -0
- package/lib/esm/secrets/kubernetes/KubernetesSecretServiceConfig.js +9 -0
- package/lib/esm/secrets/kubernetes/index.js +10 -0
- package/lib/esm/secrets/model/ModelSecretCrypto.js +1 -1
- package/lib/esm/secrets/model/ModelSecretEnvironment.js +1 -1
- package/lib/esm/secrets/model/ModelSecretService.js +1 -1
- package/lib/esm/secrets/model/ModelSecretServiceConfig.js +1 -1
- package/lib/esm/secrets/model/Secret.js +1 -1
- package/lib/esm/secrets/model/index.js +1 -1
- package/lib/esm/secrets/onepassword/OnePasswordSecretEnvironment.js +1 -1
- package/lib/esm/secrets/onepassword/OnePasswordSecretService.js +1 -1
- package/lib/esm/secrets/onepassword/OnePasswordSecretServiceConfig.js +1 -1
- package/lib/esm/secrets/onepassword/index.js +1 -1
- package/lib/esm/secrets/vault/VaultSecretEnvironment.js +1 -1
- package/lib/esm/secrets/vault/VaultSecretService.js +1 -1
- package/lib/esm/secrets/vault/VaultSecretServiceConfig.js +1 -1
- package/lib/esm/secrets/vault/index.js +1 -1
- package/lib/esm/sftp/aws/AwsSftpEnvironment.js +1 -1
- package/lib/esm/sftp/aws/AwsSftpService.js +1 -1
- package/lib/esm/sftp/aws/index.js +7 -0
- package/lib/esm/sftp/core/SftpEnvironment.js +1 -1
- package/lib/esm/sftp/core/SftpSource.js +1 -1
- package/lib/esm/sftp/core/index.js +1 -1
- package/lib/esm/sftp/index.js +1 -1
- package/lib/esm/sftp/ssh2/Ssh2SftpEnvironment.js +1 -1
- package/lib/esm/sftp/ssh2/Ssh2SftpService.js +1 -1
- package/lib/esm/sftp/ssh2/index.js +7 -0
- package/lib/esm/shared/environmentValue.js +1 -1
- package/lib/esm/shared/http/HttpApiService.js +1 -1
- package/lib/esm/shared/http/hermeticBoot.js +1 -1
- package/lib/esm/shared/http/index.js +1 -1
- package/lib/esm/shared/runtime.js +1 -1
- package/lib/esm/user-requests/index.js +1 -1
- package/lib/esm/utils.js +1 -1
- package/lib/types/index.d.cts +2 -2
- package/lib/types/index.d.mts +2 -2
- package/lib/types/secrets/core/SecretTypes.d.cts +13 -1
- package/lib/types/secrets/core/SecretTypes.d.mts +13 -1
- package/lib/types/secrets/kubernetes/KubernetesSecretEnvironment.d.cts +34 -0
- package/lib/types/secrets/kubernetes/KubernetesSecretEnvironment.d.mts +34 -0
- package/lib/types/secrets/kubernetes/KubernetesSecretService.d.cts +45 -0
- package/lib/types/secrets/kubernetes/KubernetesSecretService.d.mts +45 -0
- package/lib/types/secrets/kubernetes/KubernetesSecretServiceConfig.d.cts +49 -0
- package/lib/types/secrets/kubernetes/KubernetesSecretServiceConfig.d.mts +49 -0
- package/lib/types/secrets/kubernetes/index.d.cts +9 -0
- package/lib/types/secrets/kubernetes/index.d.mts +9 -0
- package/lib/types/sftp/aws/index.d.cts +6 -0
- package/lib/types/sftp/aws/index.d.mts +6 -0
- package/lib/types/sftp/ssh2/index.d.cts +6 -0
- package/lib/types/sftp/ssh2/index.d.mts +6 -0
- package/package.json +180 -55
- package/dist/integrations.cjs.map +0 -1
- package/dist/integrations.js.map +0 -1
- package/lib/cjs/blob/azure/AzureBlobEnvironment.cjs.map +0 -1
- package/lib/cjs/blob/azure/AzureBlobStoreService.cjs.map +0 -1
- package/lib/cjs/blob/azure/index.cjs.map +0 -1
- package/lib/cjs/blob/core/BlobEnvironment.cjs.map +0 -1
- package/lib/cjs/blob/core/BlobErrors.cjs.map +0 -1
- package/lib/cjs/blob/core/BlobKey.cjs.map +0 -1
- package/lib/cjs/blob/core/BlobStoreFactory.cjs.map +0 -1
- package/lib/cjs/blob/core/BlobStoreService.cjs.map +0 -1
- package/lib/cjs/blob/core/BlobTypes.cjs.map +0 -1
- package/lib/cjs/blob/core/BlobValue.cjs.map +0 -1
- package/lib/cjs/blob/core/index.cjs.map +0 -1
- package/lib/cjs/blob/gcp/GcsBlobEnvironment.cjs.map +0 -1
- package/lib/cjs/blob/gcp/GcsBlobStoreService.cjs.map +0 -1
- package/lib/cjs/blob/gcp/index.cjs.map +0 -1
- package/lib/cjs/blob/index.cjs.map +0 -1
- package/lib/cjs/blob/local/LocalBlobEnvironment.cjs.map +0 -1
- package/lib/cjs/blob/local/LocalBlobStoreService.cjs.map +0 -1
- package/lib/cjs/blob/local/index.cjs.map +0 -1
- package/lib/cjs/blob/memory/MemoryBlobEnvironment.cjs.map +0 -1
- package/lib/cjs/blob/memory/MemoryBlobStoreService.cjs.map +0 -1
- package/lib/cjs/blob/memory/index.cjs.map +0 -1
- package/lib/cjs/blob/s3/MinioBlobEnvironment.cjs.map +0 -1
- package/lib/cjs/blob/s3/MinioBlobStoreService.cjs.map +0 -1
- package/lib/cjs/blob/s3/R2BlobEnvironment.cjs.map +0 -1
- package/lib/cjs/blob/s3/R2BlobStoreService.cjs.map +0 -1
- package/lib/cjs/blob/s3/S3BlobEnvironment.cjs.map +0 -1
- package/lib/cjs/blob/s3/S3BlobStoreService.cjs.map +0 -1
- package/lib/cjs/blob/s3/S3CompatibleBlobStoreService.cjs.map +0 -1
- package/lib/cjs/blob/s3/index.cjs.map +0 -1
- package/lib/cjs/calendar/CalendarService.cjs.map +0 -1
- package/lib/cjs/calendar/environment.cjs.map +0 -1
- package/lib/cjs/calendar/google-calendar/GoogleCalendarService.cjs.map +0 -1
- package/lib/cjs/calendar/google-calendar/index.cjs.map +0 -1
- package/lib/cjs/calendar/index.cjs.map +0 -1
- package/lib/cjs/calendar/types.cjs.map +0 -1
- package/lib/cjs/calendar/validators/cron.cjs.map +0 -1
- package/lib/cjs/calendar/writers/CalendarFsWriter.cjs.map +0 -1
- package/lib/cjs/calendar/writers/CalenderDownloader.cjs.map +0 -1
- package/lib/cjs/calendar/writers/ICalendarWriter.cjs.map +0 -1
- package/lib/cjs/comms/discord/DiscordService.cjs.map +0 -1
- package/lib/cjs/comms/discord/index.cjs.map +0 -1
- package/lib/cjs/comms/email/EmailService.cjs.map +0 -1
- package/lib/cjs/comms/email/index.cjs.map +0 -1
- package/lib/cjs/comms/email/mime.cjs.map +0 -1
- package/lib/cjs/comms/email/smtp.cjs.map +0 -1
- package/lib/cjs/comms/environment.cjs.map +0 -1
- package/lib/cjs/comms/gmail/GmailService.cjs.map +0 -1
- package/lib/cjs/comms/gmail/index.cjs.map +0 -1
- package/lib/cjs/comms/index.cjs.map +0 -1
- package/lib/cjs/comms/outlook/MicrosoftOutlookService.cjs.map +0 -1
- package/lib/cjs/comms/outlook/index.cjs.map +0 -1
- package/lib/cjs/comms/slack/SlackService.cjs.map +0 -1
- package/lib/cjs/comms/slack/index.cjs.map +0 -1
- package/lib/cjs/comms/teams/TeamsService.cjs.map +0 -1
- package/lib/cjs/comms/teams/index.cjs.map +0 -1
- package/lib/cjs/comms/telegram/TelegramService.cjs.map +0 -1
- package/lib/cjs/comms/telegram/index.cjs.map +0 -1
- package/lib/cjs/comms/whatsapp/WhatsAppService.cjs.map +0 -1
- package/lib/cjs/comms/whatsapp/index.cjs.map +0 -1
- package/lib/cjs/devops/environment.cjs.map +0 -1
- package/lib/cjs/devops/github/GithubService.cjs.map +0 -1
- package/lib/cjs/devops/github/index.cjs.map +0 -1
- package/lib/cjs/devops/gitlab/GitlabService.cjs.map +0 -1
- package/lib/cjs/devops/gitlab/index.cjs.map +0 -1
- package/lib/cjs/devops/index.cjs.map +0 -1
- package/lib/cjs/docker/DockerComposeService.cjs.map +0 -1
- package/lib/cjs/docker/index.cjs.map +0 -1
- package/lib/cjs/feature-flags/EngineCapabilityFeatureFlag.service.cjs.map +0 -1
- package/lib/cjs/feature-flags/constants.cjs.map +0 -1
- package/lib/cjs/feature-flags/decorators.cjs.map +0 -1
- package/lib/cjs/feature-flags/environment.cjs.map +0 -1
- package/lib/cjs/feature-flags/index.cjs.map +0 -1
- package/lib/cjs/feature-flags/models/FeatureFlag.model.cjs.map +0 -1
- package/lib/cjs/feature-flags/models/FeatureFlagAccess.model.cjs.map +0 -1
- package/lib/cjs/feature-flags/readers/FeatureFlagReader.cjs.map +0 -1
- package/lib/cjs/feature-flags/readers/index.cjs.map +0 -1
- package/lib/cjs/feature-flags/services/FeatureFlag.service.cjs.map +0 -1
- package/lib/cjs/feature-flags/types.cjs.map +0 -1
- package/lib/cjs/feature-flags/utils.cjs.map +0 -1
- package/lib/cjs/index.cjs.map +0 -1
- package/lib/cjs/io/airtable/AirtableService.cjs.map +0 -1
- package/lib/cjs/io/airtable/index.cjs.map +0 -1
- package/lib/cjs/io/confluence/ConfluenceService.cjs.map +0 -1
- package/lib/cjs/io/confluence/index.cjs.map +0 -1
- package/lib/cjs/io/environment.cjs.map +0 -1
- package/lib/cjs/io/google-docs/GoogleDocsService.cjs.map +0 -1
- package/lib/cjs/io/google-docs/index.cjs.map +0 -1
- package/lib/cjs/io/google-sheets/GoogleSheetsService.cjs.map +0 -1
- package/lib/cjs/io/google-sheets/index.cjs.map +0 -1
- package/lib/cjs/io/graphql/GraphqlService.cjs.map +0 -1
- package/lib/cjs/io/graphql/index.cjs.map +0 -1
- package/lib/cjs/io/index.cjs.map +0 -1
- package/lib/cjs/io/jira/JiraService.cjs.map +0 -1
- package/lib/cjs/io/jira/index.cjs.map +0 -1
- package/lib/cjs/io/microsoft-excel/MicrosoftExcelService.cjs.map +0 -1
- package/lib/cjs/io/microsoft-excel/index.cjs.map +0 -1
- package/lib/cjs/io/microsoft-sharepoint/MicrosoftSharePointService.cjs.map +0 -1
- package/lib/cjs/io/microsoft-sharepoint/index.cjs.map +0 -1
- package/lib/cjs/io/spreadsheet/SpreadsheetService.cjs.map +0 -1
- package/lib/cjs/io/spreadsheet/index.cjs.map +0 -1
- package/lib/cjs/keycloak/broker.cjs.map +0 -1
- package/lib/cjs/keycloak/index.cjs.map +0 -1
- package/lib/cjs/keycloak/services/KeycloakAuthService.cjs.map +0 -1
- package/lib/cjs/keycloak/services/KeycloakClientService.cjs.map +0 -1
- package/lib/cjs/keycloak/services/KeycloakIdentityProviderService.cjs.map +0 -1
- package/lib/cjs/keycloak/services/KeycloakRealmService.cjs.map +0 -1
- package/lib/cjs/keycloak/services/KeycloakRoleService.cjs.map +0 -1
- package/lib/cjs/keycloak/services/KeycloakService.cjs.map +0 -1
- package/lib/cjs/keycloak/services/KeycloakUserService.cjs.map +0 -1
- package/lib/cjs/keycloak/services/index.cjs.map +0 -1
- package/lib/cjs/keycloak/services/runtime.cjs.map +0 -1
- package/lib/cjs/keycloak/types.cjs.map +0 -1
- package/lib/cjs/kibana/builders/KibanaIndexBuilder.cjs.map +0 -1
- package/lib/cjs/kibana/builders/KibanaIndexBuilderCollection.cjs.map +0 -1
- package/lib/cjs/kibana/builders/index.cjs.map +0 -1
- package/lib/cjs/kibana/helpers.cjs.map +0 -1
- package/lib/cjs/kibana/index.cjs.map +0 -1
- package/lib/cjs/kibana/services/KibanaAuthService.cjs.map +0 -1
- package/lib/cjs/kibana/services/KibanaDashboardService.cjs.map +0 -1
- package/lib/cjs/kibana/services/KibanaDataViewService.cjs.map +0 -1
- package/lib/cjs/kibana/services/KibanaRoleService.cjs.map +0 -1
- package/lib/cjs/kibana/services/KibanaService.cjs.map +0 -1
- package/lib/cjs/kibana/services/KibanaSpaceService.cjs.map +0 -1
- package/lib/cjs/kibana/services/KibanaUserService.cjs.map +0 -1
- package/lib/cjs/kibana/services/index.cjs.map +0 -1
- package/lib/cjs/kibana/services/runtime.cjs.map +0 -1
- package/lib/cjs/kibana/types.cjs.map +0 -1
- package/lib/cjs/loader/ObjectLoader.cjs.map +0 -1
- package/lib/cjs/loader/assets.cjs.map +0 -1
- package/lib/cjs/loader/config.cjs.map +0 -1
- package/lib/cjs/loader/families.cjs.map +0 -1
- package/lib/cjs/loader/index.cjs.map +0 -1
- package/lib/cjs/loader/nest.cjs.map +0 -1
- package/lib/cjs/loader/types.cjs.map +0 -1
- package/lib/cjs/namespaces/index.cjs.map +0 -1
- package/lib/cjs/namespaces/models/authorization-model.cjs.map +0 -1
- package/lib/cjs/namespaces/models/credential.model.cjs.map +0 -1
- package/lib/cjs/namespaces/models/effective-permission.model.cjs.map +0 -1
- package/lib/cjs/namespaces/models/group-membership.model.cjs.map +0 -1
- package/lib/cjs/namespaces/models/group.model.cjs.map +0 -1
- package/lib/cjs/namespaces/models/index.cjs.map +0 -1
- package/lib/cjs/namespaces/models/inheritance-block.model.cjs.map +0 -1
- package/lib/cjs/namespaces/models/org-unit-closure.model.cjs.map +0 -1
- package/lib/cjs/namespaces/models/org-unit-membership.model.cjs.map +0 -1
- package/lib/cjs/namespaces/models/org-unit-profile.model.cjs.map +0 -1
- package/lib/cjs/namespaces/models/org-unit.model.cjs.map +0 -1
- package/lib/cjs/namespaces/models/permission.model.cjs.map +0 -1
- package/lib/cjs/namespaces/models/principal.model.cjs.map +0 -1
- package/lib/cjs/namespaces/models/protected-resource.model.cjs.map +0 -1
- package/lib/cjs/namespaces/models/resource-grant.model.cjs.map +0 -1
- package/lib/cjs/namespaces/models/role-assignment.model.cjs.map +0 -1
- package/lib/cjs/namespaces/models/role-permission.model.cjs.map +0 -1
- package/lib/cjs/namespaces/models/role.model.cjs.map +0 -1
- package/lib/cjs/namespaces/models/storage-binding.model.cjs.map +0 -1
- package/lib/cjs/namespaces/models/tenant-membership.model.cjs.map +0 -1
- package/lib/cjs/namespaces/models/tenant-profile.model.cjs.map +0 -1
- package/lib/cjs/namespaces/models/tenant.model.cjs.map +0 -1
- package/lib/cjs/namespaces/models/user.model.cjs.map +0 -1
- package/lib/cjs/namespaces/org-based-authorization-system.cjs.map +0 -1
- package/lib/cjs/namespaces/org-based-authorization-system.models.cjs.map +0 -1
- package/lib/cjs/namespaces/org-based-authorization-system.services.cjs.map +0 -1
- package/lib/cjs/namespaces/rls/index.cjs.map +0 -1
- package/lib/cjs/namespaces/rls/principal-resolver.cjs.map +0 -1
- package/lib/cjs/namespaces/rls/rls-bootstrap.service.cjs.map +0 -1
- package/lib/cjs/namespaces/rls/rls.constants.cjs.map +0 -1
- package/lib/cjs/namespaces/rls/rls.template.cjs.map +0 -1
- package/lib/cjs/namespaces/rls/rls.types.cjs.map +0 -1
- package/lib/cjs/namespaces/rls/session-binding.cjs.map +0 -1
- package/lib/cjs/namespaces/services/authz.service.cjs.map +0 -1
- package/lib/cjs/namespaces/services/bootstrap.service.cjs.map +0 -1
- package/lib/cjs/namespaces/services/credential.service.cjs.map +0 -1
- package/lib/cjs/namespaces/services/effective-permission.service.cjs.map +0 -1
- package/lib/cjs/namespaces/services/group-membership.service.cjs.map +0 -1
- package/lib/cjs/namespaces/services/group.service.cjs.map +0 -1
- package/lib/cjs/namespaces/services/index.cjs.map +0 -1
- package/lib/cjs/namespaces/services/inheritance-block.service.cjs.map +0 -1
- package/lib/cjs/namespaces/services/org-unit-closure.service.cjs.map +0 -1
- package/lib/cjs/namespaces/services/org-unit-membership.service.cjs.map +0 -1
- package/lib/cjs/namespaces/services/org-unit-profile.service.cjs.map +0 -1
- package/lib/cjs/namespaces/services/org-unit.service.cjs.map +0 -1
- package/lib/cjs/namespaces/services/permission.service.cjs.map +0 -1
- package/lib/cjs/namespaces/services/principal.service.cjs.map +0 -1
- package/lib/cjs/namespaces/services/protected-resource.service.cjs.map +0 -1
- package/lib/cjs/namespaces/services/resource-grant.service.cjs.map +0 -1
- package/lib/cjs/namespaces/services/resource-lifecycle.service.cjs.map +0 -1
- package/lib/cjs/namespaces/services/role-assignment.service.cjs.map +0 -1
- package/lib/cjs/namespaces/services/role-permission.service.cjs.map +0 -1
- package/lib/cjs/namespaces/services/role.service.cjs.map +0 -1
- package/lib/cjs/namespaces/services/storage-binding.service.cjs.map +0 -1
- package/lib/cjs/namespaces/services/system-management.service.cjs.map +0 -1
- package/lib/cjs/namespaces/services/tenant-membership.service.cjs.map +0 -1
- package/lib/cjs/namespaces/services/tenant-profile.service.cjs.map +0 -1
- package/lib/cjs/namespaces/services/tenant.service.cjs.map +0 -1
- package/lib/cjs/namespaces/services/user.service.cjs.map +0 -1
- package/lib/cjs/namespaces/types.cjs.map +0 -1
- package/lib/cjs/namespaces/utils.cjs.map +0 -1
- package/lib/cjs/nest/decorators.cjs.map +0 -1
- package/lib/cjs/nest/index.cjs.map +0 -1
- package/lib/cjs/nest/keycloakAuthHandler.cjs.map +0 -1
- package/lib/cjs/nest/keycloakModule.cjs.map +0 -1
- package/lib/cjs/nest/logging.cjs.map +0 -1
- package/lib/cjs/nest/types.cjs.map +0 -1
- package/lib/cjs/nest/utils.cjs.map +0 -1
- package/lib/cjs/plugins/contract.cjs.map +0 -1
- package/lib/cjs/plugins/index.cjs.map +0 -1
- package/lib/cjs/plugins/kibana/host.cjs.map +0 -1
- package/lib/cjs/plugins/kibana/index.cjs.map +0 -1
- package/lib/cjs/plugins/kibana/installer.cjs.map +0 -1
- package/lib/cjs/plugins/kibana/manifest.cjs.map +0 -1
- package/lib/cjs/plugins/kibana/templates.cjs.map +0 -1
- package/lib/cjs/plugins/kibana/types.cjs.map +0 -1
- package/lib/cjs/plugins/superset/host.cjs.map +0 -1
- package/lib/cjs/plugins/superset/index.cjs.map +0 -1
- package/lib/cjs/plugins/superset/installer.cjs.map +0 -1
- package/lib/cjs/plugins/superset/manifest.cjs.map +0 -1
- package/lib/cjs/plugins/superset/templates.cjs.map +0 -1
- package/lib/cjs/plugins/superset/types.cjs.map +0 -1
- package/lib/cjs/redis/RedisContextLock.cjs.map +0 -1
- package/lib/cjs/redis/RedisDispatch.cjs.map +0 -1
- package/lib/cjs/redis/RedisPaginator.cjs.map +0 -1
- package/lib/cjs/redis/RedisStatement.cjs.map +0 -1
- package/lib/cjs/redis/adapter.cjs.map +0 -1
- package/lib/cjs/redis/constants.cjs.map +0 -1
- package/lib/cjs/redis/handlers.cjs.map +0 -1
- package/lib/cjs/redis/index.cjs.map +0 -1
- package/lib/cjs/redis/serialization.cjs.map +0 -1
- package/lib/cjs/redis/types.cjs.map +0 -1
- package/lib/cjs/secrets/InfraCredentialBootstrap.cjs.map +0 -1
- package/lib/cjs/secrets/aws/AwsSecretEnvironment.cjs.map +0 -1
- package/lib/cjs/secrets/aws/AwsSecretService.cjs.map +0 -1
- package/lib/cjs/secrets/aws/AwsSecretServiceConfig.cjs.map +0 -1
- package/lib/cjs/secrets/aws/index.cjs.map +0 -1
- package/lib/cjs/secrets/azure/AzureKeyVaultSecretService.cjs.map +0 -1
- package/lib/cjs/secrets/azure/AzureKeyVaultSecretServiceConfig.cjs.map +0 -1
- package/lib/cjs/secrets/azure/AzureSecretEnvironment.cjs.map +0 -1
- package/lib/cjs/secrets/azure/index.cjs.map +0 -1
- package/lib/cjs/secrets/core/ClientBasedSecretService.cjs.map +0 -1
- package/lib/cjs/secrets/core/SecretEnvironment.cjs.map +0 -1
- package/lib/cjs/secrets/core/SecretErrors.cjs.map +0 -1
- package/lib/cjs/secrets/core/SecretName.cjs.map +0 -1
- package/lib/cjs/secrets/core/SecretReference.cjs.map +0 -1
- package/lib/cjs/secrets/core/SecretSerialization.cjs.map +0 -1
- package/lib/cjs/secrets/core/SecretService.cjs.map +0 -1
- package/lib/cjs/secrets/core/SecretTypes.cjs.map +0 -1
- package/lib/cjs/secrets/core/index.cjs.map +0 -1
- package/lib/cjs/secrets/fs/FsSecretEnvironment.cjs.map +0 -1
- package/lib/cjs/secrets/fs/FsSecretService.cjs.map +0 -1
- package/lib/cjs/secrets/fs/FsSecretServiceConfig.cjs.map +0 -1
- package/lib/cjs/secrets/fs/index.cjs.map +0 -1
- package/lib/cjs/secrets/gcp/GcpSecretEnvironment.cjs.map +0 -1
- package/lib/cjs/secrets/gcp/GcpSecretManagerService.cjs.map +0 -1
- package/lib/cjs/secrets/gcp/GcpSecretManagerServiceConfig.cjs.map +0 -1
- package/lib/cjs/secrets/gcp/index.cjs.map +0 -1
- package/lib/cjs/secrets/index.cjs.map +0 -1
- package/lib/cjs/secrets/model/ModelSecretCrypto.cjs.map +0 -1
- package/lib/cjs/secrets/model/ModelSecretEnvironment.cjs.map +0 -1
- package/lib/cjs/secrets/model/ModelSecretService.cjs.map +0 -1
- package/lib/cjs/secrets/model/ModelSecretServiceConfig.cjs.map +0 -1
- package/lib/cjs/secrets/model/Secret.cjs.map +0 -1
- package/lib/cjs/secrets/model/index.cjs.map +0 -1
- package/lib/cjs/secrets/onepassword/OnePasswordSecretEnvironment.cjs.map +0 -1
- package/lib/cjs/secrets/onepassword/OnePasswordSecretService.cjs.map +0 -1
- package/lib/cjs/secrets/onepassword/OnePasswordSecretServiceConfig.cjs.map +0 -1
- package/lib/cjs/secrets/onepassword/index.cjs.map +0 -1
- package/lib/cjs/secrets/vault/VaultSecretEnvironment.cjs.map +0 -1
- package/lib/cjs/secrets/vault/VaultSecretService.cjs.map +0 -1
- package/lib/cjs/secrets/vault/VaultSecretServiceConfig.cjs.map +0 -1
- package/lib/cjs/secrets/vault/index.cjs.map +0 -1
- package/lib/cjs/sftp/aws/AwsSftpEnvironment.cjs.map +0 -1
- package/lib/cjs/sftp/aws/AwsSftpService.cjs.map +0 -1
- package/lib/cjs/sftp/core/SftpEnvironment.cjs.map +0 -1
- package/lib/cjs/sftp/core/SftpSource.cjs.map +0 -1
- package/lib/cjs/sftp/core/index.cjs.map +0 -1
- package/lib/cjs/sftp/index.cjs.map +0 -1
- package/lib/cjs/sftp/ssh2/Ssh2SftpEnvironment.cjs.map +0 -1
- package/lib/cjs/sftp/ssh2/Ssh2SftpService.cjs.map +0 -1
- package/lib/cjs/shared/environmentValue.cjs.map +0 -1
- package/lib/cjs/shared/http/HttpApiService.cjs.map +0 -1
- package/lib/cjs/shared/http/hermeticBoot.cjs.map +0 -1
- package/lib/cjs/shared/http/index.cjs.map +0 -1
- package/lib/cjs/shared/runtime.cjs.map +0 -1
- package/lib/cjs/user-requests/index.cjs.map +0 -1
- package/lib/cjs/utils.cjs.map +0 -1
- package/lib/esm/blob/azure/AzureBlobEnvironment.js.map +0 -1
- package/lib/esm/blob/azure/AzureBlobStoreService.js.map +0 -1
- package/lib/esm/blob/azure/index.js.map +0 -1
- package/lib/esm/blob/core/BlobEnvironment.js.map +0 -1
- package/lib/esm/blob/core/BlobErrors.js.map +0 -1
- package/lib/esm/blob/core/BlobKey.js.map +0 -1
- package/lib/esm/blob/core/BlobStoreFactory.js.map +0 -1
- package/lib/esm/blob/core/BlobStoreService.js.map +0 -1
- package/lib/esm/blob/core/BlobTypes.js.map +0 -1
- package/lib/esm/blob/core/BlobValue.js.map +0 -1
- package/lib/esm/blob/core/index.js.map +0 -1
- package/lib/esm/blob/gcp/GcsBlobEnvironment.js.map +0 -1
- package/lib/esm/blob/gcp/GcsBlobStoreService.js.map +0 -1
- package/lib/esm/blob/gcp/index.js.map +0 -1
- package/lib/esm/blob/index.js.map +0 -1
- package/lib/esm/blob/local/LocalBlobEnvironment.js.map +0 -1
- package/lib/esm/blob/local/LocalBlobStoreService.js.map +0 -1
- package/lib/esm/blob/local/index.js.map +0 -1
- package/lib/esm/blob/memory/MemoryBlobEnvironment.js.map +0 -1
- package/lib/esm/blob/memory/MemoryBlobStoreService.js.map +0 -1
- package/lib/esm/blob/memory/index.js.map +0 -1
- package/lib/esm/blob/s3/MinioBlobEnvironment.js.map +0 -1
- package/lib/esm/blob/s3/MinioBlobStoreService.js.map +0 -1
- package/lib/esm/blob/s3/R2BlobEnvironment.js.map +0 -1
- package/lib/esm/blob/s3/R2BlobStoreService.js.map +0 -1
- package/lib/esm/blob/s3/S3BlobEnvironment.js.map +0 -1
- package/lib/esm/blob/s3/S3BlobStoreService.js.map +0 -1
- package/lib/esm/blob/s3/S3CompatibleBlobStoreService.js.map +0 -1
- package/lib/esm/blob/s3/index.js.map +0 -1
- package/lib/esm/calendar/CalendarService.js.map +0 -1
- package/lib/esm/calendar/environment.js.map +0 -1
- package/lib/esm/calendar/google-calendar/GoogleCalendarService.js.map +0 -1
- package/lib/esm/calendar/google-calendar/index.js.map +0 -1
- package/lib/esm/calendar/index.js.map +0 -1
- package/lib/esm/calendar/types.js.map +0 -1
- package/lib/esm/calendar/validators/cron.js.map +0 -1
- package/lib/esm/calendar/writers/CalendarFsWriter.js.map +0 -1
- package/lib/esm/calendar/writers/CalenderDownloader.js.map +0 -1
- package/lib/esm/calendar/writers/ICalendarWriter.js.map +0 -1
- package/lib/esm/comms/discord/DiscordService.js.map +0 -1
- package/lib/esm/comms/discord/index.js.map +0 -1
- package/lib/esm/comms/email/EmailService.js.map +0 -1
- package/lib/esm/comms/email/index.js.map +0 -1
- package/lib/esm/comms/email/mime.js.map +0 -1
- package/lib/esm/comms/email/smtp.js.map +0 -1
- package/lib/esm/comms/environment.js.map +0 -1
- package/lib/esm/comms/gmail/GmailService.js.map +0 -1
- package/lib/esm/comms/gmail/index.js.map +0 -1
- package/lib/esm/comms/index.js.map +0 -1
- package/lib/esm/comms/outlook/MicrosoftOutlookService.js.map +0 -1
- package/lib/esm/comms/outlook/index.js.map +0 -1
- package/lib/esm/comms/slack/SlackService.js.map +0 -1
- package/lib/esm/comms/slack/index.js.map +0 -1
- package/lib/esm/comms/teams/TeamsService.js.map +0 -1
- package/lib/esm/comms/teams/index.js.map +0 -1
- package/lib/esm/comms/telegram/TelegramService.js.map +0 -1
- package/lib/esm/comms/telegram/index.js.map +0 -1
- package/lib/esm/comms/whatsapp/WhatsAppService.js.map +0 -1
- package/lib/esm/comms/whatsapp/index.js.map +0 -1
- package/lib/esm/devops/environment.js.map +0 -1
- package/lib/esm/devops/github/GithubService.js.map +0 -1
- package/lib/esm/devops/github/index.js.map +0 -1
- package/lib/esm/devops/gitlab/GitlabService.js.map +0 -1
- package/lib/esm/devops/gitlab/index.js.map +0 -1
- package/lib/esm/devops/index.js.map +0 -1
- package/lib/esm/docker/DockerComposeService.js.map +0 -1
- package/lib/esm/docker/index.js.map +0 -1
- package/lib/esm/feature-flags/EngineCapabilityFeatureFlag.service.js.map +0 -1
- package/lib/esm/feature-flags/constants.js.map +0 -1
- package/lib/esm/feature-flags/decorators.js.map +0 -1
- package/lib/esm/feature-flags/environment.js.map +0 -1
- package/lib/esm/feature-flags/index.js.map +0 -1
- package/lib/esm/feature-flags/models/FeatureFlag.model.js.map +0 -1
- package/lib/esm/feature-flags/models/FeatureFlagAccess.model.js.map +0 -1
- package/lib/esm/feature-flags/readers/FeatureFlagReader.js.map +0 -1
- package/lib/esm/feature-flags/readers/index.js.map +0 -1
- package/lib/esm/feature-flags/services/FeatureFlag.service.js.map +0 -1
- package/lib/esm/feature-flags/types.js.map +0 -1
- package/lib/esm/feature-flags/utils.js.map +0 -1
- package/lib/esm/index.js.map +0 -1
- package/lib/esm/io/airtable/AirtableService.js.map +0 -1
- package/lib/esm/io/airtable/index.js.map +0 -1
- package/lib/esm/io/confluence/ConfluenceService.js.map +0 -1
- package/lib/esm/io/confluence/index.js.map +0 -1
- package/lib/esm/io/environment.js.map +0 -1
- package/lib/esm/io/google-docs/GoogleDocsService.js.map +0 -1
- package/lib/esm/io/google-docs/index.js.map +0 -1
- package/lib/esm/io/google-sheets/GoogleSheetsService.js.map +0 -1
- package/lib/esm/io/google-sheets/index.js.map +0 -1
- package/lib/esm/io/graphql/GraphqlService.js.map +0 -1
- package/lib/esm/io/graphql/index.js.map +0 -1
- package/lib/esm/io/index.js.map +0 -1
- package/lib/esm/io/jira/JiraService.js.map +0 -1
- package/lib/esm/io/jira/index.js.map +0 -1
- package/lib/esm/io/microsoft-excel/MicrosoftExcelService.js.map +0 -1
- package/lib/esm/io/microsoft-excel/index.js.map +0 -1
- package/lib/esm/io/microsoft-sharepoint/MicrosoftSharePointService.js.map +0 -1
- package/lib/esm/io/microsoft-sharepoint/index.js.map +0 -1
- package/lib/esm/io/spreadsheet/SpreadsheetService.js.map +0 -1
- package/lib/esm/io/spreadsheet/index.js.map +0 -1
- package/lib/esm/keycloak/broker.js.map +0 -1
- package/lib/esm/keycloak/index.js.map +0 -1
- package/lib/esm/keycloak/services/KeycloakAuthService.js.map +0 -1
- package/lib/esm/keycloak/services/KeycloakClientService.js.map +0 -1
- package/lib/esm/keycloak/services/KeycloakIdentityProviderService.js.map +0 -1
- package/lib/esm/keycloak/services/KeycloakRealmService.js.map +0 -1
- package/lib/esm/keycloak/services/KeycloakRoleService.js.map +0 -1
- package/lib/esm/keycloak/services/KeycloakService.js.map +0 -1
- package/lib/esm/keycloak/services/KeycloakUserService.js.map +0 -1
- package/lib/esm/keycloak/services/index.js.map +0 -1
- package/lib/esm/keycloak/services/runtime.js.map +0 -1
- package/lib/esm/keycloak/types.js.map +0 -1
- package/lib/esm/kibana/builders/KibanaIndexBuilder.js.map +0 -1
- package/lib/esm/kibana/builders/KibanaIndexBuilderCollection.js.map +0 -1
- package/lib/esm/kibana/builders/index.js.map +0 -1
- package/lib/esm/kibana/helpers.js.map +0 -1
- package/lib/esm/kibana/index.js.map +0 -1
- package/lib/esm/kibana/services/KibanaAuthService.js.map +0 -1
- package/lib/esm/kibana/services/KibanaDashboardService.js.map +0 -1
- package/lib/esm/kibana/services/KibanaDataViewService.js.map +0 -1
- package/lib/esm/kibana/services/KibanaRoleService.js.map +0 -1
- package/lib/esm/kibana/services/KibanaService.js.map +0 -1
- package/lib/esm/kibana/services/KibanaSpaceService.js.map +0 -1
- package/lib/esm/kibana/services/KibanaUserService.js.map +0 -1
- package/lib/esm/kibana/services/index.js.map +0 -1
- package/lib/esm/kibana/services/runtime.js.map +0 -1
- package/lib/esm/kibana/types.js.map +0 -1
- package/lib/esm/loader/ObjectLoader.js.map +0 -1
- package/lib/esm/loader/assets.js.map +0 -1
- package/lib/esm/loader/config.js.map +0 -1
- package/lib/esm/loader/families.js.map +0 -1
- package/lib/esm/loader/index.js.map +0 -1
- package/lib/esm/loader/nest.js.map +0 -1
- package/lib/esm/loader/types.js.map +0 -1
- package/lib/esm/namespaces/index.js.map +0 -1
- package/lib/esm/namespaces/models/authorization-model.js.map +0 -1
- package/lib/esm/namespaces/models/credential.model.js.map +0 -1
- package/lib/esm/namespaces/models/effective-permission.model.js.map +0 -1
- package/lib/esm/namespaces/models/group-membership.model.js.map +0 -1
- package/lib/esm/namespaces/models/group.model.js.map +0 -1
- package/lib/esm/namespaces/models/index.js.map +0 -1
- package/lib/esm/namespaces/models/inheritance-block.model.js.map +0 -1
- package/lib/esm/namespaces/models/org-unit-closure.model.js.map +0 -1
- package/lib/esm/namespaces/models/org-unit-membership.model.js.map +0 -1
- package/lib/esm/namespaces/models/org-unit-profile.model.js.map +0 -1
- package/lib/esm/namespaces/models/org-unit.model.js.map +0 -1
- package/lib/esm/namespaces/models/permission.model.js.map +0 -1
- package/lib/esm/namespaces/models/principal.model.js.map +0 -1
- package/lib/esm/namespaces/models/protected-resource.model.js.map +0 -1
- package/lib/esm/namespaces/models/resource-grant.model.js.map +0 -1
- package/lib/esm/namespaces/models/role-assignment.model.js.map +0 -1
- package/lib/esm/namespaces/models/role-permission.model.js.map +0 -1
- package/lib/esm/namespaces/models/role.model.js.map +0 -1
- package/lib/esm/namespaces/models/storage-binding.model.js.map +0 -1
- package/lib/esm/namespaces/models/tenant-membership.model.js.map +0 -1
- package/lib/esm/namespaces/models/tenant-profile.model.js.map +0 -1
- package/lib/esm/namespaces/models/tenant.model.js.map +0 -1
- package/lib/esm/namespaces/models/user.model.js.map +0 -1
- package/lib/esm/namespaces/org-based-authorization-system.js.map +0 -1
- package/lib/esm/namespaces/org-based-authorization-system.models.js.map +0 -1
- package/lib/esm/namespaces/org-based-authorization-system.services.js.map +0 -1
- package/lib/esm/namespaces/rls/index.js.map +0 -1
- package/lib/esm/namespaces/rls/principal-resolver.js.map +0 -1
- package/lib/esm/namespaces/rls/rls-bootstrap.service.js.map +0 -1
- package/lib/esm/namespaces/rls/rls.constants.js.map +0 -1
- package/lib/esm/namespaces/rls/rls.template.js.map +0 -1
- package/lib/esm/namespaces/rls/rls.types.js.map +0 -1
- package/lib/esm/namespaces/rls/session-binding.js.map +0 -1
- package/lib/esm/namespaces/services/authz.service.js.map +0 -1
- package/lib/esm/namespaces/services/bootstrap.service.js.map +0 -1
- package/lib/esm/namespaces/services/credential.service.js.map +0 -1
- package/lib/esm/namespaces/services/effective-permission.service.js.map +0 -1
- package/lib/esm/namespaces/services/group-membership.service.js.map +0 -1
- package/lib/esm/namespaces/services/group.service.js.map +0 -1
- package/lib/esm/namespaces/services/index.js.map +0 -1
- package/lib/esm/namespaces/services/inheritance-block.service.js.map +0 -1
- package/lib/esm/namespaces/services/org-unit-closure.service.js.map +0 -1
- package/lib/esm/namespaces/services/org-unit-membership.service.js.map +0 -1
- package/lib/esm/namespaces/services/org-unit-profile.service.js.map +0 -1
- package/lib/esm/namespaces/services/org-unit.service.js.map +0 -1
- package/lib/esm/namespaces/services/permission.service.js.map +0 -1
- package/lib/esm/namespaces/services/principal.service.js.map +0 -1
- package/lib/esm/namespaces/services/protected-resource.service.js.map +0 -1
- package/lib/esm/namespaces/services/resource-grant.service.js.map +0 -1
- package/lib/esm/namespaces/services/resource-lifecycle.service.js.map +0 -1
- package/lib/esm/namespaces/services/role-assignment.service.js.map +0 -1
- package/lib/esm/namespaces/services/role-permission.service.js.map +0 -1
- package/lib/esm/namespaces/services/role.service.js.map +0 -1
- package/lib/esm/namespaces/services/storage-binding.service.js.map +0 -1
- package/lib/esm/namespaces/services/system-management.service.js.map +0 -1
- package/lib/esm/namespaces/services/tenant-membership.service.js.map +0 -1
- package/lib/esm/namespaces/services/tenant-profile.service.js.map +0 -1
- package/lib/esm/namespaces/services/tenant.service.js.map +0 -1
- package/lib/esm/namespaces/services/user.service.js.map +0 -1
- package/lib/esm/namespaces/types.js.map +0 -1
- package/lib/esm/namespaces/utils.js.map +0 -1
- package/lib/esm/nest/decorators.js.map +0 -1
- package/lib/esm/nest/index.js.map +0 -1
- package/lib/esm/nest/keycloakAuthHandler.js.map +0 -1
- package/lib/esm/nest/keycloakModule.js.map +0 -1
- package/lib/esm/nest/logging.js.map +0 -1
- package/lib/esm/nest/types.js.map +0 -1
- package/lib/esm/nest/utils.js.map +0 -1
- package/lib/esm/plugins/contract.js.map +0 -1
- package/lib/esm/plugins/index.js.map +0 -1
- package/lib/esm/plugins/kibana/host.js.map +0 -1
- package/lib/esm/plugins/kibana/index.js.map +0 -1
- package/lib/esm/plugins/kibana/installer.js.map +0 -1
- package/lib/esm/plugins/kibana/manifest.js.map +0 -1
- package/lib/esm/plugins/kibana/templates.js.map +0 -1
- package/lib/esm/plugins/kibana/types.js.map +0 -1
- package/lib/esm/plugins/superset/host.js.map +0 -1
- package/lib/esm/plugins/superset/index.js.map +0 -1
- package/lib/esm/plugins/superset/installer.js.map +0 -1
- package/lib/esm/plugins/superset/manifest.js.map +0 -1
- package/lib/esm/plugins/superset/templates.js.map +0 -1
- package/lib/esm/plugins/superset/types.js.map +0 -1
- package/lib/esm/redis/RedisContextLock.js.map +0 -1
- package/lib/esm/redis/RedisDispatch.js.map +0 -1
- package/lib/esm/redis/RedisPaginator.js.map +0 -1
- package/lib/esm/redis/RedisStatement.js.map +0 -1
- package/lib/esm/redis/adapter.js.map +0 -1
- package/lib/esm/redis/constants.js.map +0 -1
- package/lib/esm/redis/handlers.js.map +0 -1
- package/lib/esm/redis/index.js.map +0 -1
- package/lib/esm/redis/serialization.js.map +0 -1
- package/lib/esm/redis/types.js.map +0 -1
- package/lib/esm/secrets/InfraCredentialBootstrap.js.map +0 -1
- package/lib/esm/secrets/aws/AwsSecretEnvironment.js.map +0 -1
- package/lib/esm/secrets/aws/AwsSecretService.js.map +0 -1
- package/lib/esm/secrets/aws/AwsSecretServiceConfig.js.map +0 -1
- package/lib/esm/secrets/aws/index.js.map +0 -1
- package/lib/esm/secrets/azure/AzureKeyVaultSecretService.js.map +0 -1
- package/lib/esm/secrets/azure/AzureKeyVaultSecretServiceConfig.js.map +0 -1
- package/lib/esm/secrets/azure/AzureSecretEnvironment.js.map +0 -1
- package/lib/esm/secrets/azure/index.js.map +0 -1
- package/lib/esm/secrets/core/ClientBasedSecretService.js.map +0 -1
- package/lib/esm/secrets/core/SecretEnvironment.js.map +0 -1
- package/lib/esm/secrets/core/SecretErrors.js.map +0 -1
- package/lib/esm/secrets/core/SecretName.js.map +0 -1
- package/lib/esm/secrets/core/SecretReference.js.map +0 -1
- package/lib/esm/secrets/core/SecretSerialization.js.map +0 -1
- package/lib/esm/secrets/core/SecretService.js.map +0 -1
- package/lib/esm/secrets/core/SecretTypes.js.map +0 -1
- package/lib/esm/secrets/core/index.js.map +0 -1
- package/lib/esm/secrets/fs/FsSecretEnvironment.js.map +0 -1
- package/lib/esm/secrets/fs/FsSecretService.js.map +0 -1
- package/lib/esm/secrets/fs/FsSecretServiceConfig.js.map +0 -1
- package/lib/esm/secrets/fs/index.js.map +0 -1
- package/lib/esm/secrets/gcp/GcpSecretEnvironment.js.map +0 -1
- package/lib/esm/secrets/gcp/GcpSecretManagerService.js.map +0 -1
- package/lib/esm/secrets/gcp/GcpSecretManagerServiceConfig.js.map +0 -1
- package/lib/esm/secrets/gcp/index.js.map +0 -1
- package/lib/esm/secrets/index.js.map +0 -1
- package/lib/esm/secrets/model/ModelSecretCrypto.js.map +0 -1
- package/lib/esm/secrets/model/ModelSecretEnvironment.js.map +0 -1
- package/lib/esm/secrets/model/ModelSecretService.js.map +0 -1
- package/lib/esm/secrets/model/ModelSecretServiceConfig.js.map +0 -1
- package/lib/esm/secrets/model/Secret.js.map +0 -1
- package/lib/esm/secrets/model/index.js.map +0 -1
- package/lib/esm/secrets/onepassword/OnePasswordSecretEnvironment.js.map +0 -1
- package/lib/esm/secrets/onepassword/OnePasswordSecretService.js.map +0 -1
- package/lib/esm/secrets/onepassword/OnePasswordSecretServiceConfig.js.map +0 -1
- package/lib/esm/secrets/onepassword/index.js.map +0 -1
- package/lib/esm/secrets/vault/VaultSecretEnvironment.js.map +0 -1
- package/lib/esm/secrets/vault/VaultSecretService.js.map +0 -1
- package/lib/esm/secrets/vault/VaultSecretServiceConfig.js.map +0 -1
- package/lib/esm/secrets/vault/index.js.map +0 -1
- package/lib/esm/sftp/aws/AwsSftpEnvironment.js.map +0 -1
- package/lib/esm/sftp/aws/AwsSftpService.js.map +0 -1
- package/lib/esm/sftp/core/SftpEnvironment.js.map +0 -1
- package/lib/esm/sftp/core/SftpSource.js.map +0 -1
- package/lib/esm/sftp/core/index.js.map +0 -1
- package/lib/esm/sftp/index.js.map +0 -1
- package/lib/esm/sftp/ssh2/Ssh2SftpEnvironment.js.map +0 -1
- package/lib/esm/sftp/ssh2/Ssh2SftpService.js.map +0 -1
- package/lib/esm/shared/environmentValue.js.map +0 -1
- package/lib/esm/shared/http/HttpApiService.js.map +0 -1
- package/lib/esm/shared/http/hermeticBoot.js.map +0 -1
- package/lib/esm/shared/http/index.js.map +0 -1
- package/lib/esm/shared/runtime.js.map +0 -1
- package/lib/esm/user-requests/index.js.map +0 -1
- package/lib/esm/utils.js.map +0 -1
|
@@ -0,0 +1,479 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.KubernetesSecretService = void 0;
|
|
4
|
+
const client_node_1 = require("@kubernetes/client-node");
|
|
5
|
+
const core_1 = require("@decaf-ts/core");
|
|
6
|
+
const index_js_1 = require("./../core/index.cjs");
|
|
7
|
+
const index_js_2 = require("./../core/index.cjs");
|
|
8
|
+
const index_js_3 = require("./../core/index.cjs");
|
|
9
|
+
const KubernetesSecretEnvironment_js_1 = require("./KubernetesSecretEnvironment.cjs");
|
|
10
|
+
const environmentValue_js_1 = require("./../../shared/environmentValue.cjs");
|
|
11
|
+
const db_decorators_1 = require("@decaf-ts/db-decorators");
|
|
12
|
+
const PAYLOAD_DATA_KEY = "payload";
|
|
13
|
+
const MANAGED_LABEL = "decaf-ts.io/managed";
|
|
14
|
+
const ANNOTATION_PREFIX = "decaf-ts.io/";
|
|
15
|
+
const ENCODING_ANNOTATION = `${ANNOTATION_PREFIX}encoding`;
|
|
16
|
+
const CONTENT_TYPE_ANNOTATION = `${ANNOTATION_PREFIX}content-type`;
|
|
17
|
+
const TAGS_ANNOTATION = `${ANNOTATION_PREFIX}tags`;
|
|
18
|
+
const VERSION_ANNOTATION = `${ANNOTATION_PREFIX}version`;
|
|
19
|
+
const UPDATED_AT_ANNOTATION = `${ANNOTATION_PREFIX}updated-at`;
|
|
20
|
+
const TENANT_ANNOTATION = `${ANNOTATION_PREFIX}tenant-id`;
|
|
21
|
+
const ORG_UNIT_ANNOTATION = `${ANNOTATION_PREFIX}org-unit-id`;
|
|
22
|
+
const OWNER_ANNOTATION = `${ANNOTATION_PREFIX}owner-principal-id`;
|
|
23
|
+
const DNS_SUBDOMAIN_PATTERN = /^[a-z0-9]([-a-z0-9.]*[a-z0-9])?$/;
|
|
24
|
+
const DNS_LABEL_PATTERN = /^[a-z0-9]([-a-z0-9]*[a-z0-9])?$/;
|
|
25
|
+
function assertKubernetesName(name) {
|
|
26
|
+
if (name.length > 253 || !DNS_SUBDOMAIN_PATTERN.test(name)) {
|
|
27
|
+
throw new index_js_1.SecretError("SECRET_INVALID_NAME", `Invalid Kubernetes secret name: "${name}". Names must be lowercase DNS-1123 subdomains (letters, digits, '-', and '.').`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
function assertKubernetesNamespace(namespace) {
|
|
31
|
+
if (namespace.length > 63 || !DNS_LABEL_PATTERN.test(namespace)) {
|
|
32
|
+
throw new index_js_1.SecretError("SECRET_INVALID_NAME", `Invalid Kubernetes namespace: "${namespace}". Namespaces must be lowercase DNS-1123 labels.`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
function toDate(value) {
|
|
36
|
+
if (!value)
|
|
37
|
+
return undefined;
|
|
38
|
+
const date = value instanceof Date ? value : new Date(value);
|
|
39
|
+
return Number.isNaN(date.getTime()) ? undefined : date;
|
|
40
|
+
}
|
|
41
|
+
function parseTags(raw) {
|
|
42
|
+
if (!raw)
|
|
43
|
+
return undefined;
|
|
44
|
+
try {
|
|
45
|
+
const parsed = JSON.parse(raw);
|
|
46
|
+
return parsed && typeof parsed === "object"
|
|
47
|
+
? parsed
|
|
48
|
+
: undefined;
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* @class KubernetesSecretService
|
|
56
|
+
* @summary Native Kubernetes Secrets backend.
|
|
57
|
+
* @description Implements the {@link SecretService} contract on top of
|
|
58
|
+
* namespaced Kubernetes `Secret` objects. Each DECAF secret is stored as an
|
|
59
|
+
* `Opaque` Secret whose `payload` data key holds the serialized
|
|
60
|
+
* {@link SerializedSecretPayload} envelope, while encoding, content type, tags,
|
|
61
|
+
* logical version, and ownership hints live in `decaf-ts.io/*` annotations.
|
|
62
|
+
*
|
|
63
|
+
* Authentication uses the standard Kubernetes client resolution order:
|
|
64
|
+
* explicit `server` credentials, an explicit `kubeconfig` path, `KUBECONFIG`,
|
|
65
|
+
* `~/.kube/config`, and finally the in-cluster service account.
|
|
66
|
+
*/
|
|
67
|
+
class KubernetesSecretService extends index_js_1.ClientBasedSecretService {
|
|
68
|
+
constructor() {
|
|
69
|
+
super(...arguments);
|
|
70
|
+
this.provider = "kubernetes";
|
|
71
|
+
}
|
|
72
|
+
configFromEnvironment() {
|
|
73
|
+
const env = KubernetesSecretEnvironment_js_1.KubernetesSecretEnvironment.secrets.kubernetes;
|
|
74
|
+
const namespace = (0, environmentValue_js_1.envString)(env?.namespace);
|
|
75
|
+
const kubeconfig = (0, environmentValue_js_1.envString)(env?.kubeconfig);
|
|
76
|
+
const context = (0, environmentValue_js_1.envString)(env?.context);
|
|
77
|
+
const server = (0, environmentValue_js_1.envString)(env?.server);
|
|
78
|
+
if (!namespace && !kubeconfig && !context && !server)
|
|
79
|
+
return undefined;
|
|
80
|
+
return {
|
|
81
|
+
provider: "kubernetes",
|
|
82
|
+
namespace,
|
|
83
|
+
kubeconfig,
|
|
84
|
+
context,
|
|
85
|
+
server,
|
|
86
|
+
token: (0, environmentValue_js_1.envString)(env.token),
|
|
87
|
+
tokenFile: (0, environmentValue_js_1.envString)(env.tokenFile),
|
|
88
|
+
caFile: (0, environmentValue_js_1.envString)(env.caFile),
|
|
89
|
+
caData: (0, environmentValue_js_1.envString)(env.caData),
|
|
90
|
+
certFile: (0, environmentValue_js_1.envString)(env.certFile),
|
|
91
|
+
keyFile: (0, environmentValue_js_1.envString)(env.keyFile),
|
|
92
|
+
certData: (0, environmentValue_js_1.envString)(env.certData),
|
|
93
|
+
keyData: (0, environmentValue_js_1.envString)(env.keyData),
|
|
94
|
+
skipTLSVerify: (0, environmentValue_js_1.envBoolean)(env.skipTLSVerify),
|
|
95
|
+
serviceAccount: (0, environmentValue_js_1.envBoolean)(env.serviceAccount),
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
async initialize(...args) {
|
|
99
|
+
const { log } = (await this.logCtx(args, "initialize", true)).for(this.initialize);
|
|
100
|
+
const config = this.getConfigFromArgs(...args);
|
|
101
|
+
const kubeConfig = this.buildKubeConfig(config);
|
|
102
|
+
const namespace = this.resolveNamespace(config, kubeConfig);
|
|
103
|
+
const resolved = { ...config, namespace };
|
|
104
|
+
const client = kubeConfig.makeApiClient(client_node_1.CoreV1Api);
|
|
105
|
+
this._config = resolved;
|
|
106
|
+
this._client = client;
|
|
107
|
+
log.verbose(`Initialized Kubernetes secret service for namespace "${namespace}"`);
|
|
108
|
+
return { config: resolved, client };
|
|
109
|
+
}
|
|
110
|
+
async store(name, value, options = {}, ...args) {
|
|
111
|
+
const { log } = (await this.logCtx(args, "store", true)).for(this.store);
|
|
112
|
+
const normalizedName = this.normalizeName(name);
|
|
113
|
+
const namespace = this.resolveNamespaceOption(options.namespace);
|
|
114
|
+
log.verbose(`Storing secret ${normalizedName} in namespace ${namespace}`);
|
|
115
|
+
const serialized = (0, index_js_3.serializeSecretPayload)(value);
|
|
116
|
+
const body = this.buildSecret(normalizedName, namespace, serialized, options);
|
|
117
|
+
try {
|
|
118
|
+
await this.client.createNamespacedSecret({ namespace, body });
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
if (this.statusOf(error) === 409) {
|
|
122
|
+
try {
|
|
123
|
+
const existing = await this.client.readNamespacedSecret({
|
|
124
|
+
name: normalizedName,
|
|
125
|
+
namespace,
|
|
126
|
+
});
|
|
127
|
+
body.metadata = {
|
|
128
|
+
...(body.metadata || {}),
|
|
129
|
+
resourceVersion: existing.metadata?.resourceVersion,
|
|
130
|
+
};
|
|
131
|
+
await this.client.replaceNamespacedSecret({
|
|
132
|
+
name: normalizedName,
|
|
133
|
+
namespace,
|
|
134
|
+
body,
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
catch (replaceError) {
|
|
138
|
+
throw this.parseError(replaceError);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
throw this.parseError(error);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return {
|
|
146
|
+
provider: this.provider,
|
|
147
|
+
name: normalizedName,
|
|
148
|
+
namespace,
|
|
149
|
+
version: options.version,
|
|
150
|
+
uri: `kubernetes://${namespace}/${normalizedName}`,
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
async retrieve(nameOrRef, options = {}, ...args) {
|
|
154
|
+
const { log } = (await this.logCtx(args, "retrieve", true)).for(this.retrieve);
|
|
155
|
+
const { name, namespace, version } = this.resolveReference(nameOrRef, options);
|
|
156
|
+
log.verbose(`Retrieving secret ${name} from namespace ${namespace}`);
|
|
157
|
+
const secret = await this.readSecret(name, namespace);
|
|
158
|
+
this.assertVersion(secret, version);
|
|
159
|
+
const raw = secret.data?.[PAYLOAD_DATA_KEY];
|
|
160
|
+
if (!raw) {
|
|
161
|
+
throw new db_decorators_1.NotFoundError(`No secret value found for "${name}" in namespace "${namespace}"`);
|
|
162
|
+
}
|
|
163
|
+
let payload;
|
|
164
|
+
try {
|
|
165
|
+
payload = JSON.parse(Buffer.from(raw, "base64").toString("utf8"));
|
|
166
|
+
}
|
|
167
|
+
catch (error) {
|
|
168
|
+
throw new index_js_1.SecretError("SECRET_DESERIALIZATION_FAILED", `Failed to parse secret payload for "${name}": ${error.message}`, error);
|
|
169
|
+
}
|
|
170
|
+
return (0, index_js_3.deserializeSecretPayload)(payload);
|
|
171
|
+
}
|
|
172
|
+
async delete(nameOrRef, options = {}, ...args) {
|
|
173
|
+
const { log } = (await this.logCtx(args, "delete", true)).for(this.delete);
|
|
174
|
+
const { name, namespace, version } = this.resolveReference(nameOrRef, options);
|
|
175
|
+
log.verbose(`Deleting secret ${name} from namespace ${namespace}`);
|
|
176
|
+
if (version) {
|
|
177
|
+
const secret = await this.readSecret(name, namespace);
|
|
178
|
+
this.assertVersion(secret, version);
|
|
179
|
+
}
|
|
180
|
+
try {
|
|
181
|
+
await this.client.deleteNamespacedSecret({ name, namespace });
|
|
182
|
+
}
|
|
183
|
+
catch (error) {
|
|
184
|
+
throw this.parseError(error);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
async exists(nameOrRef, options = {}, ...args) {
|
|
188
|
+
const { log } = (await this.logCtx(args, "exists", true)).for(this.exists);
|
|
189
|
+
const { name, namespace, version } = this.resolveReference(nameOrRef, options);
|
|
190
|
+
log.verbose(`Checking if secret ${name} exists in namespace ${namespace}`);
|
|
191
|
+
try {
|
|
192
|
+
const secret = await this.readSecret(name, namespace);
|
|
193
|
+
this.assertVersion(secret, version);
|
|
194
|
+
return true;
|
|
195
|
+
}
|
|
196
|
+
catch (error) {
|
|
197
|
+
if (error instanceof db_decorators_1.NotFoundError)
|
|
198
|
+
return false;
|
|
199
|
+
throw error;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
async list(options = {}, ...args) {
|
|
203
|
+
const { log } = (await this.logCtx(args, "list", true)).for(this.list);
|
|
204
|
+
const namespace = this.resolveNamespaceOption(options.namespace);
|
|
205
|
+
log.verbose(`Listing secrets in namespace ${namespace}`);
|
|
206
|
+
const result = [];
|
|
207
|
+
let continueToken;
|
|
208
|
+
try {
|
|
209
|
+
do {
|
|
210
|
+
const response = await this.client.listNamespacedSecret({
|
|
211
|
+
namespace,
|
|
212
|
+
labelSelector: `${MANAGED_LABEL}=true`,
|
|
213
|
+
limit: 100,
|
|
214
|
+
_continue: continueToken,
|
|
215
|
+
});
|
|
216
|
+
for (const secret of response.items || []) {
|
|
217
|
+
result.push(this.toMetadata(secret, namespace));
|
|
218
|
+
}
|
|
219
|
+
continueToken = response.metadata?._continue;
|
|
220
|
+
} while (continueToken);
|
|
221
|
+
}
|
|
222
|
+
catch (error) {
|
|
223
|
+
throw this.parseError(error);
|
|
224
|
+
}
|
|
225
|
+
const filtered = result.filter((meta) => {
|
|
226
|
+
if (options.enabled === false)
|
|
227
|
+
return false;
|
|
228
|
+
if (!options.tags)
|
|
229
|
+
return true;
|
|
230
|
+
return Object.entries(options.tags).every(([key, value]) => meta.tags?.[key] === value);
|
|
231
|
+
});
|
|
232
|
+
const offset = options.offset ?? 0;
|
|
233
|
+
const end = typeof options.limit === "number" ? offset + options.limit : undefined;
|
|
234
|
+
return filtered.slice(offset, end);
|
|
235
|
+
}
|
|
236
|
+
async metadata(nameOrRef, options = {}, ...args) {
|
|
237
|
+
const { log } = (await this.logCtx(args, "metadata", true)).for(this.metadata);
|
|
238
|
+
const { name, namespace, version } = this.resolveReference(nameOrRef, options);
|
|
239
|
+
log.verbose(`Getting metadata for secret ${name} in namespace ${namespace}`);
|
|
240
|
+
try {
|
|
241
|
+
const secret = await this.readSecret(name, namespace);
|
|
242
|
+
this.assertVersion(secret, version);
|
|
243
|
+
return this.toMetadata(secret, namespace);
|
|
244
|
+
}
|
|
245
|
+
catch (error) {
|
|
246
|
+
if (error instanceof db_decorators_1.NotFoundError)
|
|
247
|
+
return undefined;
|
|
248
|
+
throw error;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
async rotate(nameOrRef, value, options = {}, ...args) {
|
|
252
|
+
const { name, namespace } = this.resolveReference(nameOrRef, options);
|
|
253
|
+
return this.store(name, value, { version: options.newVersion, namespace }, ...args);
|
|
254
|
+
}
|
|
255
|
+
buildKubeConfig(config) {
|
|
256
|
+
const kubeConfig = new client_node_1.KubeConfig();
|
|
257
|
+
try {
|
|
258
|
+
if (config.serviceAccount) {
|
|
259
|
+
kubeConfig.loadFromCluster();
|
|
260
|
+
}
|
|
261
|
+
else if (config.server) {
|
|
262
|
+
const clusterName = "decaf-cluster";
|
|
263
|
+
const userName = "decaf-user";
|
|
264
|
+
const contextName = "decaf-context";
|
|
265
|
+
kubeConfig.loadFromOptions({
|
|
266
|
+
clusters: [
|
|
267
|
+
{
|
|
268
|
+
name: clusterName,
|
|
269
|
+
server: config.server,
|
|
270
|
+
caData: config.caData,
|
|
271
|
+
caFile: config.caFile,
|
|
272
|
+
skipTLSVerify: config.skipTLSVerify,
|
|
273
|
+
},
|
|
274
|
+
],
|
|
275
|
+
users: [
|
|
276
|
+
{
|
|
277
|
+
name: userName,
|
|
278
|
+
token: config.token,
|
|
279
|
+
tokenFile: config.tokenFile,
|
|
280
|
+
certData: config.certData,
|
|
281
|
+
certFile: config.certFile,
|
|
282
|
+
keyData: config.keyData,
|
|
283
|
+
keyFile: config.keyFile,
|
|
284
|
+
},
|
|
285
|
+
],
|
|
286
|
+
contexts: [
|
|
287
|
+
{
|
|
288
|
+
name: contextName,
|
|
289
|
+
cluster: clusterName,
|
|
290
|
+
user: userName,
|
|
291
|
+
namespace: config.namespace,
|
|
292
|
+
},
|
|
293
|
+
],
|
|
294
|
+
currentContext: contextName,
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
else if (config.kubeconfig) {
|
|
298
|
+
kubeConfig.loadFromFile(config.kubeconfig);
|
|
299
|
+
}
|
|
300
|
+
else {
|
|
301
|
+
kubeConfig.loadFromDefault();
|
|
302
|
+
}
|
|
303
|
+
if (config.context) {
|
|
304
|
+
kubeConfig.setCurrentContext(config.context);
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
catch (error) {
|
|
308
|
+
throw this.parseError(error);
|
|
309
|
+
}
|
|
310
|
+
return kubeConfig;
|
|
311
|
+
}
|
|
312
|
+
resolveNamespace(config, kubeConfig) {
|
|
313
|
+
const namespace = config.namespace ||
|
|
314
|
+
kubeConfig.getContextObject(kubeConfig.getCurrentContext())?.namespace ||
|
|
315
|
+
"default";
|
|
316
|
+
assertKubernetesNamespace(namespace);
|
|
317
|
+
return namespace;
|
|
318
|
+
}
|
|
319
|
+
resolveNamespaceOption(namespace) {
|
|
320
|
+
const resolved = namespace || this.config.namespace || "default";
|
|
321
|
+
assertKubernetesNamespace(resolved);
|
|
322
|
+
return resolved;
|
|
323
|
+
}
|
|
324
|
+
resolveReference(nameOrRef, options) {
|
|
325
|
+
const name = typeof nameOrRef === "string" ? nameOrRef : nameOrRef.name;
|
|
326
|
+
const namespace = options.namespace ||
|
|
327
|
+
(typeof nameOrRef === "string" ? undefined : nameOrRef.namespace) ||
|
|
328
|
+
this.config.namespace ||
|
|
329
|
+
"default";
|
|
330
|
+
assertKubernetesNamespace(namespace);
|
|
331
|
+
const version = options.version ||
|
|
332
|
+
(typeof nameOrRef === "string" ? undefined : nameOrRef.version);
|
|
333
|
+
return { name: this.normalizeName(name), namespace, version };
|
|
334
|
+
}
|
|
335
|
+
normalizeName(name) {
|
|
336
|
+
try {
|
|
337
|
+
(0, index_js_2.validateSecretName)(name);
|
|
338
|
+
}
|
|
339
|
+
catch (error) {
|
|
340
|
+
throw this.parseError(error);
|
|
341
|
+
}
|
|
342
|
+
const normalizedName = (0, index_js_2.normalizeSecretName)(name);
|
|
343
|
+
assertKubernetesName(normalizedName);
|
|
344
|
+
return normalizedName;
|
|
345
|
+
}
|
|
346
|
+
buildSecret(name, namespace, serialized, options) {
|
|
347
|
+
const annotations = {
|
|
348
|
+
[ENCODING_ANNOTATION]: serialized.encoding,
|
|
349
|
+
[UPDATED_AT_ANNOTATION]: new Date().toISOString(),
|
|
350
|
+
};
|
|
351
|
+
if (options.contentType) {
|
|
352
|
+
annotations[CONTENT_TYPE_ANNOTATION] = options.contentType;
|
|
353
|
+
}
|
|
354
|
+
if (options.tags) {
|
|
355
|
+
annotations[TAGS_ANNOTATION] = JSON.stringify(options.tags);
|
|
356
|
+
}
|
|
357
|
+
if (options.version) {
|
|
358
|
+
annotations[VERSION_ANNOTATION] = options.version;
|
|
359
|
+
}
|
|
360
|
+
if (options.tenantId) {
|
|
361
|
+
annotations[TENANT_ANNOTATION] = options.tenantId;
|
|
362
|
+
}
|
|
363
|
+
if (options.orgUnitId) {
|
|
364
|
+
annotations[ORG_UNIT_ANNOTATION] = options.orgUnitId;
|
|
365
|
+
}
|
|
366
|
+
if (options.ownerPrincipalId) {
|
|
367
|
+
annotations[OWNER_ANNOTATION] = options.ownerPrincipalId;
|
|
368
|
+
}
|
|
369
|
+
return {
|
|
370
|
+
apiVersion: "v1",
|
|
371
|
+
kind: "Secret",
|
|
372
|
+
type: "Opaque",
|
|
373
|
+
metadata: {
|
|
374
|
+
name,
|
|
375
|
+
namespace,
|
|
376
|
+
labels: {
|
|
377
|
+
[MANAGED_LABEL]: "true",
|
|
378
|
+
},
|
|
379
|
+
annotations,
|
|
380
|
+
},
|
|
381
|
+
stringData: {
|
|
382
|
+
[PAYLOAD_DATA_KEY]: JSON.stringify(serialized),
|
|
383
|
+
},
|
|
384
|
+
};
|
|
385
|
+
}
|
|
386
|
+
async readSecret(name, namespace) {
|
|
387
|
+
try {
|
|
388
|
+
return await this.client.readNamespacedSecret({ name, namespace });
|
|
389
|
+
}
|
|
390
|
+
catch (error) {
|
|
391
|
+
throw this.parseError(error);
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
assertVersion(secret, version) {
|
|
395
|
+
if (!version)
|
|
396
|
+
return;
|
|
397
|
+
const stored = secret.metadata?.annotations?.[VERSION_ANNOTATION];
|
|
398
|
+
if (stored !== version) {
|
|
399
|
+
throw new db_decorators_1.NotFoundError(`Secret "${secret.metadata?.name}" version "${version}" not found`);
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
toMetadata(secret, namespace) {
|
|
403
|
+
const annotations = secret.metadata?.annotations || {};
|
|
404
|
+
const updatedAt = annotations[UPDATED_AT_ANNOTATION];
|
|
405
|
+
const name = secret.metadata?.name || "";
|
|
406
|
+
return {
|
|
407
|
+
provider: this.provider,
|
|
408
|
+
name,
|
|
409
|
+
version: annotations[VERSION_ANNOTATION],
|
|
410
|
+
createdAt: toDate(secret.metadata?.creationTimestamp),
|
|
411
|
+
updatedAt: updatedAt
|
|
412
|
+
? new Date(updatedAt)
|
|
413
|
+
: toDate(secret.metadata?.creationTimestamp),
|
|
414
|
+
enabled: true,
|
|
415
|
+
contentType: annotations[CONTENT_TYPE_ANNOTATION],
|
|
416
|
+
tags: parseTags(annotations[TAGS_ANNOTATION]),
|
|
417
|
+
externalId: secret.metadata?.uid,
|
|
418
|
+
uri: `kubernetes://${namespace}/${name}`,
|
|
419
|
+
};
|
|
420
|
+
}
|
|
421
|
+
statusOf(error) {
|
|
422
|
+
if (error instanceof client_node_1.ApiException)
|
|
423
|
+
return error.code;
|
|
424
|
+
const candidate = error;
|
|
425
|
+
if (typeof candidate?.code === "number")
|
|
426
|
+
return candidate.code;
|
|
427
|
+
if (typeof candidate?.statusCode === "number") {
|
|
428
|
+
return candidate.statusCode;
|
|
429
|
+
}
|
|
430
|
+
return undefined;
|
|
431
|
+
}
|
|
432
|
+
messageOf(error) {
|
|
433
|
+
const err = error;
|
|
434
|
+
return err?.body?.message || err?.body?.reason || err?.message || err?.name || "Unknown error";
|
|
435
|
+
}
|
|
436
|
+
parseError(error) {
|
|
437
|
+
if (error instanceof db_decorators_1.BaseError)
|
|
438
|
+
return error;
|
|
439
|
+
const status = this.statusOf(error);
|
|
440
|
+
const message = this.messageOf(error);
|
|
441
|
+
const lowerMessage = message.toLowerCase();
|
|
442
|
+
if (status === 404 ||
|
|
443
|
+
lowerMessage.includes("not found") ||
|
|
444
|
+
lowerMessage.includes("404")) {
|
|
445
|
+
return new db_decorators_1.NotFoundError(message);
|
|
446
|
+
}
|
|
447
|
+
if (status === 409 ||
|
|
448
|
+
lowerMessage.includes("already exists") ||
|
|
449
|
+
lowerMessage.includes("conflict") ||
|
|
450
|
+
lowerMessage.includes("409")) {
|
|
451
|
+
return new db_decorators_1.ConflictError(message);
|
|
452
|
+
}
|
|
453
|
+
if (status === 401 || lowerMessage.includes("unauthorized")) {
|
|
454
|
+
return new core_1.AuthorizationError(`Authentication failed: ${message}`);
|
|
455
|
+
}
|
|
456
|
+
if (status === 403 || lowerMessage.includes("forbidden")) {
|
|
457
|
+
return new core_1.AuthorizationError(`Permission denied: ${message}`);
|
|
458
|
+
}
|
|
459
|
+
if (status === 400 ||
|
|
460
|
+
status === 422 ||
|
|
461
|
+
lowerMessage.includes("bad request")) {
|
|
462
|
+
return new db_decorators_1.BadRequestError(message);
|
|
463
|
+
}
|
|
464
|
+
if (status === 429 || lowerMessage.includes("rate limit")) {
|
|
465
|
+
return new index_js_1.SecretError("SECRET_PROVIDER_RATE_LIMITED", `Rate limited: ${message}`, error);
|
|
466
|
+
}
|
|
467
|
+
if (status === undefined ||
|
|
468
|
+
(status !== undefined && status >= 500) ||
|
|
469
|
+
lowerMessage.includes("connection") ||
|
|
470
|
+
lowerMessage.includes("timeout") ||
|
|
471
|
+
lowerMessage.includes("unavailable")) {
|
|
472
|
+
return new index_js_1.SecretError("SECRET_PROVIDER_UNAVAILABLE", `Provider unavailable: ${message}`, error);
|
|
473
|
+
}
|
|
474
|
+
return new db_decorators_1.InternalError(message);
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
exports.KubernetesSecretService = KubernetesSecretService;
|
|
478
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiS3ViZXJuZXRlc1NlY3JldFNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2VjcmV0cy9rdWJlcm5ldGVzL0t1YmVybmV0ZXNTZWNyZXRTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxZQUFZLEVBQ1osU0FBUyxFQUNULFVBQVUsR0FFWCxNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBRSxrQkFBa0IsRUFBMkIsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RSxPQUFPLEVBQ0wsd0JBQXdCLEVBQ3hCLFdBQVcsR0FNWiwyQkFBMkI7QUFVNUIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLG1CQUFtQixFQUFFLDJCQUEyQjtBQUM3RSxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLHdCQUF3QixHQUV6QiwyQkFBMkI7QUFFNUIsT0FBTyxFQUFFLDJCQUEyQixFQUFFLHlDQUFzQztBQUM1RSxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSwyQ0FBc0M7QUFDdEUsT0FBTyxFQUNMLGVBQWUsRUFDZixTQUFTLEVBQ1QsYUFBYSxFQUNiLGFBQWEsRUFDYixhQUFhLEdBQ2QsTUFBTSx5QkFBeUIsQ0FBQztBQUVqQyxNQUFNLGdCQUFnQixHQUFHLFNBQVMsQ0FBQztBQUNuQyxNQUFNLGFBQWEsR0FBRyxxQkFBcUIsQ0FBQztBQUM1QyxNQUFNLGlCQUFpQixHQUFHLGNBQWMsQ0FBQztBQUN6QyxNQUFNLG1CQUFtQixHQUFHLEdBQUcsaUJBQWlCLFVBQVUsQ0FBQztBQUMzRCxNQUFNLHVCQUF1QixHQUFHLEdBQUcsaUJBQWlCLGNBQWMsQ0FBQztBQUNuRSxNQUFNLGVBQWUsR0FBRyxHQUFHLGlCQUFpQixNQUFNLENBQUM7QUFDbkQsTUFBTSxrQkFBa0IsR0FBRyxHQUFHLGlCQUFpQixTQUFTLENBQUM7QUFDekQsTUFBTSxxQkFBcUIsR0FBRyxHQUFHLGlCQUFpQixZQUFZLENBQUM7QUFD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QWEsQ0FBQyxFQUNwQyxDQUFDO1lBQ0QsT0FBTyxJQUFJLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN0QyxDQUFDO1FBRUQsSUFBSSxNQUFNLEtBQUssR0FBRyxJQUFJLFlBQVksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztZQUMxRCxPQUFPLElBQUksV0FBVyxDQUNwQiw4QkFBOEIsRUFDOUIsaUJBQWlCLE9BQU8sRUFBRSxFQUMxQixLQUFjLENBQ2YsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUNFLE1BQU0sS0FBSyxTQUFTO1lBQ3BCLENBQUMsTUFBTSxLQUFLLFNBQVMsSUFBSSxNQUFNLElBQUksR0FBRyxDQUFDO1lBQ3ZDLFlBQVksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDO1lBQ25DLFlBQVksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO1lBQ2hDLFlBQVksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEVBQ3BDLENBQUM7WUFDRCxPQUFPLElBQUksV0FBVyxDQUNwQiw2QkFBNkIsRUFDN0IseUJBQXlCLE9BQU8sRUFBRSxFQUNsQyxLQUFjLENBQ2YsQ0FBQztRQUNKLENBQUM7UUFFRCxPQUFPLElBQUksYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3BDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFwaUV4Y2VwdGlvbixcbiAgQ29yZVYxQXBpLFxuICBLdWJlQ29uZmlnLFxuICB0eXBlIFYxU2VjcmV0LFxufSBmcm9tIFwiQGt1YmVybmV0ZXMvY2xpZW50LW5vZGVcIjtcbmltcG9ydCB7IEF1dGhvcml6YXRpb25FcnJvciwgdHlwZSBNYXliZUNvbnRleHR1YWxBcmcgfSBmcm9tIFwiQGRlY2FmLXRzL2NvcmVcIjtcbmltcG9ydCB7XG4gIENsaWVudEJhc2VkU2VjcmV0U2VydmljZSxcbiAgU2VjcmV0RXJyb3IsXG4gIFNlY3JldFByb3ZpZGVyLFxuICBTZWNyZXROYW1lLFxuICBTZWNyZXRQYXlsb2FkLFxuICBTZWNyZXRSZWZlcmVuY2UsXG4gIFNlY3JldE1ldGFkYXRhLFxufSBmcm9tIFwiLi4vLi4vc2VjcmV0cy9jb3JlXCI7XG5pbXBvcnQge1xuICBTdG9yZVNlY3JldE9wdGlvbnMsXG4gIFJldHJpZXZlU2VjcmV0T3B0aW9ucyxcbiAgRGVsZXRlU2VjcmV0T3B0aW9ucyxcbiAgRXhpc3RzU2VjcmV0T3B0aW9ucyxcbiAgTGlzdFNlY3JldHNPcHRpb25zLFxuICBTZWNyZXRNZXRhZGF0YU9wdGlvbnMsXG4gIFJvdGF0ZVNlY3JldE9wdGlvbnMsXG59IGZyb20gXCIuLi8uLi9zZWNyZXRzL2NvcmVcIjtcbmltcG9ydCB7IHZhbGlkYXRlU2VjcmV0TmFtZSwgbm9ybWFsaXplU2VjcmV0TmFtZSB9IGZyb20gXCIuLi8uLi9zZWNyZXRzL2NvcmVcIjtcbmltcG9ydCB7XG4gIHNlcmlhbGl6ZVNlY3JldFBheWxvYWQsXG4gIGRlc2VyaWFsaXplU2VjcmV0UGF5bG9hZCxcbiAgdHlwZSBTZXJpYWxpemVkU2VjcmV0UGF5bG9hZCxcbn0gZnJvbSBcIi4uLy4uL3NlY3JldHMvY29yZVwiO1xuaW1wb3J0IHsgS3ViZXJuZXRlc1NlY3JldFNlcnZpY2VDb25maWcgfSBmcm9tIFwiLi9LdWJlcm5ldGVzU2VjcmV0U2VydmljZUNvbmZpZ1wiO1xuaW1wb3J0IHsgS3ViZXJuZXRlc1NlY3JldEVudmlyb25tZW50IH0gZnJvbSBcIi4vS3ViZXJuZXRlc1NlY3JldEVudmlyb25tZW50XCI7XG5pbXBvcnQgeyBlbnZCb29sZWFuLCBlbnZTdHJpbmcgfSBmcm9tIFwiLi4vLi4vc2hhcmVkL2Vudmlyb25tZW50VmFsdWVcIjtcbmltcG9ydCB7XG4gIEJhZFJlcXVlc3RFcnJvcixcbiAgQmFzZUVycm9yLFxuICBDb25mbGljdEVycm9yLFxuICBJbnRlcm5hbEVycm9yLFxuICBOb3RGb3VuZEVycm9yLFxufSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcblxuY29uc3QgUEFZTE9BRF9EQVRBX0tFWSA9IFwicGF5bG9hZFwiO1xuY29uc3QgTUFOQUdFRF9MQUJFTCA9IFwiZGVjYWYtdHMuaW8vbWFuYWdlZFwiO1xuY29uc3QgQU5OT1RBVElPTl9QUkVGSVggPSBcImRlY2FmLXRzLmlvL1wiO1xuY29uc3QgRU5DT0RJTkdfQU5OT1RBVElPTiA9IGAke0FOTk9UQVRJT05fUFJFRklYfWVuY29kaW5nYDtcbmNvbnN0IENPTlRFTlRfVFlQRV9BTk5PVEFUSU9OID0gYCR7QU5OT1RBVElPTl9QUkVGSVh9Y29udGVudC10eXBlYDtcbmNvbnN0IFRBR1NfQU5OT1RBVElPTiA9IGAke0FOTk9UQVRJT05fUFJFRklYfXRhZ3NgO1xuY29uc3QgVkVSU0lPTl9BTk5PVEFUSU9OID0gYCR7QU5OT1RBVElPTl9QUkVGSVh9dmVyc2lvbmA7XG5jb25zdCBVUERBVEVEX0FUX0FOTk9UQVRJT04gPSBgJHtBTk5PVEFUSU9OX1BSRUZJWH11cGRhdGVkLWF0YDtcbmNvbnN0IFRFTkFOVF9BTk5PVEFUSU9OID0gYCR7QU5OT1RBVElPTl9QUkVGSVh9dGVuYW50LWlkYDtcbmNvbnN0IE9SR19VTklUX0FOTk9UQVRJT04gPSBgJHtBTk5PVEFUSU9OX1BSRUZJWH1vcmctdW5pdC1pZGA7XG5jb25zdCBPV05FUl9BTk5PVEFUSU9OID0gYCR7QU5OT1RBVElPTl9QUkVGSVh9b3duZXItcHJpbmNpcGFsLWlkYDtcblxuY29uc3QgRE5TX1NVQkRPTUFJTl9QQVRURVJOID1cbiAgL15bYS16MC05XShbLWEtejAtOS5dKlthLXowLTldKT8kLztcbmNvbnN0IEROU19MQUJFTF9QQVRURVJOID0gL15bYS16MC05XShbLWEtejAtOV0qW2EtejAtOV0pPyQvO1xuXG5mdW5jdGlvbiBhc3NlcnRLdWJlcm5ldGVzTmFtZShuYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKG5hbWUubGVuZ3RoID4gMjUzIHx8ICFETlNfU1VCRE9NQUlOX1BBVFRFUk4udGVzdChuYW1lKSkge1xuICAgIHRocm93IG5ldyBTZWNyZXRFcnJvcihcbiAgICAgIFwiU0VDUkVUX0lOVkFMSURfTkFNRVwiLFxuICAgICAgYEludmFsaWQgS3ViZXJuZXRlcyBzZWNyZXQgbmFtZTogXCIke25hbWV9XCIuIE5hbWVzIG11c3QgYmUgbG93ZXJjYXNlIEROUy0xMTIzIHN1YmRvbWFpbnMgKGxldHRlcnMsIGRpZ2l0cywgJy0nLCBhbmQgJy4nKS5gXG4gICAgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhc3NlcnRLdWJlcm5ldGVzTmFtZXNwYWNlKG5hbWVzcGFjZTogc3RyaW5nKTogdm9pZCB7XG4gIGlmIChuYW1lc3BhY2UubGVuZ3RoID4gNjMgfHwgIUROU19MQUJFTF9QQVRURVJOLnRlc3QobmFtZXNwYWNlKSkge1xuICAgIHRocm93IG5ldyBTZWNyZXRFcnJvcihcbiAgICAgIFwiU0VDUkVUX0lOVkFMSURfTkFNRVwiLFxuICAgICAgYEludmFsaWQgS3ViZXJuZXRlcyBuYW1lc3BhY2U6IFwiJHtuYW1lc3BhY2V9XCIuIE5hbWVzcGFjZXMgbXVzdCBiZSBsb3dlcmNhc2UgRE5TLTExMjMgbGFiZWxzLmBcbiAgICApO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRvRGF0ZSh2YWx1ZTogRGF0ZSB8IHN0cmluZyB8IHVuZGVmaW5lZCk6IERhdGUgfCB1bmRlZmluZWQge1xuICBpZiAoIXZhbHVlKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCBkYXRlID0gdmFsdWUgaW5zdGFuY2VvZiBEYXRlID8gdmFsdWUgOiBuZXcgRGF0ZSh2YWx1ZSk7XG4gIHJldHVybiBOdW1iZXIuaXNOYU4oZGF0ZS5nZXRUaW1lKCkpID8gdW5kZWZpbmVkIDogZGF0ZTtcbn1cblxuZnVuY3Rpb24gcGFyc2VUYWdzKHJhdzogc3RyaW5nIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB8IHVuZGVmaW5lZCB7XG4gIGlmICghcmF3KSByZXR1cm4gdW5kZWZpbmVkO1xuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UocmF3KTtcbiAgICByZXR1cm4gcGFyc2VkICYmIHR5cGVvZiBwYXJzZWQgPT09IFwib2JqZWN0XCJcbiAgICAgID8gKHBhcnNlZCBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KVxuICAgICAgOiB1bmRlZmluZWQ7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBAY2xhc3MgS3ViZXJuZXRlc1NlY3JldFNlcnZpY2VcbiAqIEBzdW1tYXJ5IE5hdGl2ZSBLdWJlcm5ldGVzIFNlY3JldHMgYmFja2VuZC5cbiAqIEBkZXNjcmlwdGlvbiBJbXBsZW1lbnRzIHRoZSB7QGxpbmsgU2VjcmV0U2VydmljZX0gY29udHJhY3Qgb24gdG9wIG9mXG4gKiBuYW1lc3BhY2VkIEt1YmVybmV0ZXMgYFNlY3JldGAgb2JqZWN0cy4gRWFjaCBERUNBRiBzZWNyZXQgaXMgc3RvcmVkIGFzIGFuXG4gKiBgT3BhcXVlYCBTZWNyZXQgd2hvc2UgYHBheWxvYWRgIGRhdGEga2V5IGhvbGRzIHRoZSBzZXJpYWxpemVkXG4gKiB7QGxpbmsgU2VyaWFsaXplZFNlY3JldFBheWxvYWR9IGVudmVsb3BlLCB3aGlsZSBlbmNvZGluZywgY29udGVudCB0eXBlLCB0YWdzLFxuICogbG9naWNhbCB2ZXJzaW9uLCBhbmQgb3duZXJzaGlwIGhpbnRzIGxpdmUgaW4gYGRlY2FmLXRzLmlvLypgIGFubm90YXRpb25zLlxuICpcbiAqIEF1dGhlbnRpY2F0aW9uIHVzZXMgdGhlIHN0YW5kYXJkIEt1YmVybmV0ZXMgY2xpZW50IHJlc29sdXRpb24gb3JkZXI6XG4gKiBleHBsaWNpdCBgc2VydmVyYCBjcmVkZW50aWFscywgYW4gZXhwbGljaXQgYGt1YmVjb25maWdgIHBhdGgsIGBLVUJFQ09ORklHYCxcbiAqIGB+Ly5rdWJlL2NvbmZpZ2AsIGFuZCBmaW5hbGx5IHRoZSBpbi1jbHVzdGVyIHNlcnZpY2UgYWNjb3VudC5cbiAqL1xuZXhwb3J0IGNsYXNzIEt1YmVybmV0ZXNTZWNyZXRTZXJ2aWNlIGV4dGVuZHMgQ2xpZW50QmFzZWRTZWNyZXRTZXJ2aWNlPFxuICBDb3JlVjFBcGksXG4gIEt1YmVybmV0ZXNTZWNyZXRTZXJ2aWNlQ29uZmlnXG4+IHtcbiAgcmVhZG9ubHkgcHJvdmlkZXI6IFNlY3JldFByb3ZpZGVyID0gXCJrdWJlcm5ldGVzXCI7XG5cbiAgcHJvdGVjdGVkIGNvbmZpZ0Zyb21FbnZpcm9ubWVudCgpOlxuICAgIHwgS3ViZXJuZXRlc1NlY3JldFNlcnZpY2VDb25maWdcbiAgICB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgZW52ID0gS3ViZXJuZXRlc1NlY3JldEVudmlyb25tZW50LnNlY3JldHMua3ViZXJuZXRlcztcbiAgICBjb25zdCBuYW1lc3BhY2UgPSBlbnZTdHJpbmcoZW52Py5uYW1lc3BhY2UpO1xuICAgIGNvbnN0IGt1YmVjb25maWcgPSBlbnZTdHJpbmcoZW52Py5rdWJlY29uZmlnKTtcbiAgICBjb25zdCBjb250ZXh0ID0gZW52U3RyaW5nKGVudj8uY29udGV4dCk7XG4gICAgY29uc3Qgc2VydmVyID0gZW52U3RyaW5nKGVudj8uc2VydmVyKTtcbiAgICBpZiAoIW5hbWVzcGFjZSAmJiAha3ViZWNvbmZpZyAmJiAhY29udGV4dCAmJiAhc2VydmVyKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiB7XG4gICAgICBwcm92aWRlcjogXCJrdWJlcm5ldGVzXCIsXG4gICAgICBuYW1lc3BhY2UsXG4gICAgICBrdWJlY29uZmlnLFxuICAgICAgY29udGV4dCxcbiAgICAgIHNlcnZlcixcbiAgICAgIHRva2VuOiBlbnZTdHJpbmcoZW52LnRva2VuKSxcbiAgICAgIHRva2VuRmlsZTogZW52U3RyaW5nKGVudi50b2tlbkZpbGUpLFxuICAgICAgY2FGaWxlOiBlbnZTdHJpbmcoZW52LmNhRmlsZSksXG4gICAgICBjYURhdGE6IGVudlN0cmluZyhlbnYuY2FEYXRhKSxcbiAgICAgIGNlcnRGaWxlOiBlbnZTdHJpbmcoZW52LmNlcnRGaWxlKSxcbiAgICAgIGtleUZpbGU6IGVudlN0cmluZyhlbnYua2V5RmlsZSksXG4gICAgICBjZXJ0RGF0YTogZW52U3RyaW5nKGVudi5jZXJ0RGF0YSksXG4gICAgICBrZXlEYXRhOiBlbnZTdHJpbmcoZW52LmtleURhdGEpLFxuICAgICAgc2tpcFRMU1ZlcmlmeTogZW52Qm9vbGVhbihlbnYuc2tpcFRMU1ZlcmlmeSksXG4gICAgICBzZXJ2aWNlQWNjb3VudDogZW52Qm9vbGVhbihlbnYuc2VydmljZUFjY291bnQpLFxuICAgIH07XG4gIH1cblxuICBhc3luYyBpbml0aWFsaXplKFxuICAgIC4uLmFyZ3M6IE1heWJlQ29udGV4dHVhbEFyZzxhbnk+XG4gICk6IFByb21pc2U8eyBjb25maWc6IEt1YmVybmV0ZXNTZWNyZXRTZXJ2aWNlQ29uZmlnOyBjbGllbnQ6IENvcmVWMUFwaSB9PiB7XG4gICAgY29uc3QgeyBsb2cgfSA9IChhd2FpdCB0aGlzLmxvZ0N0eChhcmdzLCBcImluaXRpYWxpemVcIiwgdHJ1ZSkpLmZvcihcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZVxuICAgICk7XG4gICAgY29uc3QgY29uZmlnID1cbiAgICAgIHRoaXMuZ2V0Q29uZmlnRnJvbUFyZ3M8S3ViZXJuZXRlc1NlY3JldFNlcnZpY2VDb25maWc+KC4uLmFyZ3MpO1xuICAgIGNvbnN0IGt1YmVDb25maWcgPSB0aGlzLmJ1aWxkS3ViZUNvbmZpZyhjb25maWcpO1xuICAgIGNvbnN0IG5hbWVzcGFjZSA9IHRoaXMucmVzb2x2ZU5hbWVzcGFjZShjb25maWcsIGt1YmVDb25maWcpO1xuICAgIGNvbnN0IHJlc29sdmVkOiBLdWJlcm5ldGVzU2VjcmV0U2VydmljZUNvbmZpZyA9IHsgLi4uY29uZmlnLCBuYW1lc3BhY2UgfTtcbiAgICBjb25zdCBjbGllbnQgPSBrdWJlQ29uZmlnLm1ha2VBcGlDbGllbnQoQ29yZVYxQXBpKTtcbiAgICB0aGlzLl9jb25maWcgPSByZXNvbHZlZDtcbiAgICB0aGlzLl9jbGllbnQgPSBjbGllbnQ7XG4gICAgbG9nLnZlcmJvc2UoXG4gICAgICBgSW5pdGlhbGl6ZWQgS3ViZXJuZXRlcyBzZWNyZXQgc2VydmljZSBmb3IgbmFtZXNwYWNlIFwiJHtuYW1lc3BhY2V9XCJgXG4gICAgKTtcbiAgICByZXR1cm4geyBjb25maWc6IHJlc29sdmVkLCBjbGllbnQgfTtcbiAgfVxuXG4gIGFzeW5jIHN0b3JlPFQgZXh0ZW5kcyBTZWNyZXRQYXlsb2FkID0gU2VjcmV0UGF5bG9hZD4oXG4gICAgbmFtZTogU2VjcmV0TmFtZSxcbiAgICB2YWx1ZTogVCxcbiAgICBvcHRpb25zOiBTdG9yZVNlY3JldE9wdGlvbnMgPSB7fSxcbiAgICAuLi5hcmdzOiBNYXliZUNvbnRleHR1YWxBcmc8YW55PlxuICApOiBQcm9taXNlPFNlY3JldFJlZmVyZW5jZT4ge1xuICAgIGNvbnN0IHsgbG9nIH0gPSAoYXdhaXQgdGhpcy5sb2dDdHgoYXJncywgXCJzdG9yZVwiLCB0cnVlKSkuZm9yKHRoaXMuc3RvcmUpO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWROYW1lID0gdGhpcy5ub3JtYWxpemVOYW1lKG5hbWUpO1xuICAgIGNvbnN0IG5hbWVzcGFjZSA9IHRoaXMucmVzb2x2ZU5hbWVzcGFjZU9wdGlvbihvcHRpb25zLm5hbWVzcGFjZSk7XG4gICAgbG9nLnZlcmJvc2UoYFN0b3Jpbmcgc2VjcmV0ICR7bm9ybWFsaXplZE5hbWV9IGluIG5hbWVzcGFjZSAke25hbWVzcGFjZX1gKTtcblxuICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVTZWNyZXRQYXlsb2FkKHZhbHVlKTtcbiAgICBjb25zdCBib2R5ID0gdGhpcy5idWlsZFNlY3JldChub3JtYWxpemVkTmFtZSwgbmFtZXNwYWNlLCBzZXJpYWxpemVkLCBvcHRpb25zKTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmNsaWVudC5jcmVhdGVOYW1lc3BhY2VkU2VjcmV0KHsgbmFtZXNwYWNlLCBib2R5IH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAodGhpcy5zdGF0dXNPZihlcnJvcikgPT09IDQwOSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGV4aXN0aW5nID0gYXdhaXQgdGhpcy5jbGllbnQucmVhZE5hbWVzcGFjZWRTZWNyZXQoe1xuICAgICAgICAgICAgbmFtZTogbm9ybWFsaXplZE5hbWUsXG4gICAgICAgICAgICBuYW1lc3BhY2UsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYm9keS5tZXRhZGF0YSA9IHtcbiAgICAgICAgICAgIC4uLihib2R5Lm1ldGFkYXRhIHx8IHt9KSxcbiAgICAgICAgICAgIHJlc291cmNlVmVyc2lvbjogZXhpc3RpbmcubWV0YWRhdGE/LnJlc291cmNlVmVyc2lvbixcbiAgICAgICAgICB9O1xuICAgICAgICAgIGF3YWl0IHRoaXMuY2xpZW50LnJlcGxhY2VOYW1lc3BhY2VkU2VjcmV0KHtcbiAgICAgICAgICAgIG5hbWU6IG5vcm1hbGl6ZWROYW1lLFxuICAgICAgICAgICAgbmFtZXNwYWNlLFxuICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAocmVwbGFjZUVycm9yKSB7XG4gICAgICAgICAgdGhyb3cgdGhpcy5wYXJzZUVycm9yKHJlcGxhY2VFcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IHRoaXMucGFyc2VFcnJvcihlcnJvcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHByb3ZpZGVyOiB0aGlzLnByb3ZpZGVyLFxuICAgICAgbmFtZTogbm9ybWFsaXplZE5hbWUsXG4gICAgICBuYW1lc3BhY2UsXG4gICAgICB2ZXJzaW9uOiBvcHRpb25zLnZlcnNpb24sXG4gICAgICB1cmk6IGBrdWJlcm5ldGVzOi8vJHtuYW1lc3BhY2V9LyR7bm9ybWFsaXplZE5hbWV9YCxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgcmV0cmlldmU8VCBleHRlbmRzIFNlY3JldFBheWxvYWQgPSBTZWNyZXRQYXlsb2FkPihcbiAgICBuYW1lT3JSZWY6IFNlY3JldE5hbWUgfCBTZWNyZXRSZWZlcmVuY2UsXG4gICAgb3B0aW9uczogUmV0cmlldmVTZWNyZXRPcHRpb25zID0ge30sXG4gICAgLi4uYXJnczogTWF5YmVDb250ZXh0dWFsQXJnPGFueT5cbiAgKTogUHJvbWlzZTxUPiB7XG4gICAgY29uc3QgeyBsb2cgfSA9IChhd2FpdCB0aGlzLmxvZ0N0eChhcmdzLCBcInJldHJpZXZlXCIsIHRydWUpKS5mb3IoXG4gICAgICB0aGlzLnJldHJpZXZlXG4gICAgKTtcbiAgICBjb25zdCB7IG5hbWUsIG5hbWVzcGFjZSwgdmVyc2lvbiB9ID0gdGhpcy5yZXNvbHZlUmVmZXJlbmNlKFxuICAgICAgbmFtZU9yUmVmLFxuICAgICAgb3B0aW9uc1xuICAgICk7XG4gICAgbG9nLnZlcmJvc2UoYFJldHJpZXZpbmcgc2VjcmV0ICR7bmFtZX0gZnJvbSBuYW1lc3BhY2UgJHtuYW1lc3BhY2V9YCk7XG5cbiAgICBjb25zdCBzZWNyZXQgPSBhd2FpdCB0aGlzLnJlYWRTZWNyZXQobmFtZSwgbmFtZXNwYWNlKTtcbiAgICB0aGlzLmFzc2VydFZlcnNpb24oc2VjcmV0LCB2ZXJzaW9uKTtcblxuICAgIGNvbnN0IHJhdyA9IHNlY3JldC5kYXRhPy5bUEFZTE9BRF9EQVRBX0tFWV07XG4gICAgaWYgKCFyYXcpIHtcbiAgICAgIHRocm93IG5ldyBOb3RGb3VuZEVycm9yKFxuICAgICAgICBgTm8gc2VjcmV0IHZhbHVlIGZvdW5kIGZvciBcIiR7bmFtZX1cIiBpbiBuYW1lc3BhY2UgXCIke25hbWVzcGFjZX1cImBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IHBheWxvYWQ6IFNlcmlhbGl6ZWRTZWNyZXRQYXlsb2FkO1xuICAgIHRyeSB7XG4gICAgICBwYXlsb2FkID0gSlNPTi5wYXJzZShcbiAgICAgICAgQnVmZmVyLmZyb20ocmF3LCBcImJhc2U2NFwiKS50b1N0cmluZyhcInV0ZjhcIilcbiAgICAgICkgYXMgU2VyaWFsaXplZFNlY3JldFBheWxvYWQ7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBTZWNyZXRFcnJvcihcbiAgICAgICAgXCJTRUNSRVRfREVTRVJJQUxJWkFUSU9OX0ZBSUxFRFwiLFxuICAgICAgICBgRmFpbGVkIHRvIHBhcnNlIHNlY3JldCBwYXlsb2FkIGZvciBcIiR7bmFtZX1cIjogJHsoZXJyb3IgYXMgRXJyb3IpLm1lc3NhZ2V9YCxcbiAgICAgICAgZXJyb3IgYXMgRXJyb3JcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlc2VyaWFsaXplU2VjcmV0UGF5bG9hZChwYXlsb2FkKSBhcyBUO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlKFxuICAgIG5hbWVPclJlZjogU2VjcmV0TmFtZSB8IFNlY3JldFJlZmVyZW5jZSxcbiAgICBvcHRpb25zOiBEZWxldGVTZWNyZXRPcHRpb25zID0ge30sXG4gICAgLi4uYXJnczogTWF5YmVDb250ZXh0dWFsQXJnPGFueT5cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBsb2cgfSA9IChhd2FpdCB0aGlzLmxvZ0N0eChhcmdzLCBcImRlbGV0ZVwiLCB0cnVlKSkuZm9yKHRoaXMuZGVsZXRlKTtcbiAgICBjb25zdCB7IG5hbWUsIG5hbWVzcGFjZSwgdmVyc2lvbiB9ID0gdGhpcy5yZXNvbHZlUmVmZXJlbmNlKFxuICAgICAgbmFtZU9yUmVmLFxuICAgICAgb3B0aW9uc1xuICAgICk7XG4gICAgbG9nLnZlcmJvc2UoYERlbGV0aW5nIHNlY3JldCAke25hbWV9IGZyb20gbmFtZXNwYWNlICR7bmFtZXNwYWNlfWApO1xuXG4gICAgaWYgKHZlcnNpb24pIHtcbiAgICAgIGNvbnN0IHNlY3JldCA9IGF3YWl0IHRoaXMucmVhZFNlY3JldChuYW1lLCBuYW1lc3BhY2UpO1xuICAgICAgdGhpcy5hc3NlcnRWZXJzaW9uKHNlY3JldCwgdmVyc2lvbik7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuY2xpZW50LmRlbGV0ZU5hbWVzcGFjZWRTZWNyZXQoeyBuYW1lLCBuYW1lc3BhY2UgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IHRoaXMucGFyc2VFcnJvcihlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZXhpc3RzKFxuICAgIG5hbWVPclJlZjogU2VjcmV0TmFtZSB8IFNlY3JldFJlZmVyZW5jZSxcbiAgICBvcHRpb25zOiBFeGlzdHNTZWNyZXRPcHRpb25zID0ge30sXG4gICAgLi4uYXJnczogTWF5YmVDb250ZXh0dWFsQXJnPGFueT5cbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyBsb2cgfSA9IChhd2FpdCB0aGlzLmxvZ0N0eChhcmdzLCBcImV4aXN0c1wiLCB0cnVlKSkuZm9yKHRoaXMuZXhpc3RzKTtcbiAgICBjb25zdCB7IG5hbWUsIG5hbWVzcGFjZSwgdmVyc2lvbiB9ID0gdGhpcy5yZXNvbHZlUmVmZXJlbmNlKFxuICAgICAgbmFtZU9yUmVmLFxuICAgICAgb3B0aW9uc1xuICAgICk7XG4gICAgbG9nLnZlcmJvc2UoYENoZWNraW5nIGlmIHNlY3JldCAke25hbWV9IGV4aXN0cyBpbiBuYW1lc3BhY2UgJHtuYW1lc3BhY2V9YCk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3Qgc2VjcmV0ID0gYXdhaXQgdGhpcy5yZWFkU2VjcmV0KG5hbWUsIG5hbWVzcGFjZSk7XG4gICAgICB0aGlzLmFzc2VydFZlcnNpb24oc2VjcmV0LCB2ZXJzaW9uKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBOb3RGb3VuZEVycm9yKSByZXR1cm4gZmFsc2U7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBhc3luYyBsaXN0KFxuICAgIG9wdGlvbnM6IExpc3RTZWNyZXRzT3B0aW9ucyA9IHt9LFxuICAgIC4uLmFyZ3M6IE1heWJlQ29udGV4dHVhbEFyZzxhbnk+XG4gICk6IFByb21pc2U8U2VjcmV0TWV0YWRhdGFbXT4ge1xuICAgIGNvbnN0IHsgbG9nIH0gPSAoYXdhaXQgdGhpcy5sb2dDdHgoYXJncywgXCJsaXN0XCIsIHRydWUpKS5mb3IodGhpcy5saXN0KTtcbiAgICBjb25zdCBuYW1lc3BhY2UgPSB0aGlzLnJlc29sdmVOYW1lc3BhY2VPcHRpb24ob3B0aW9ucy5uYW1lc3BhY2UpO1xuICAgIGxvZy52ZXJib3NlKGBMaXN0aW5nIHNlY3JldHMgaW4gbmFtZXNwYWNlICR7bmFtZXNwYWNlfWApO1xuXG4gICAgY29uc3QgcmVzdWx0OiBTZWNyZXRNZXRhZGF0YVtdID0gW107XG4gICAgbGV0IGNvbnRpbnVlVG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIHRyeSB7XG4gICAgICBkbyB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jbGllbnQubGlzdE5hbWVzcGFjZWRTZWNyZXQoe1xuICAgICAgICAgIG5hbWVzcGFjZSxcbiAgICAgICAgICBsYWJlbFNlbGVjdG9yOiBgJHtNQU5BR0VEX0xBQkVMfT10cnVlYCxcbiAgICAgICAgICBsaW1pdDogMTAwLFxuICAgICAgICAgIF9jb250aW51ZTogY29udGludWVUb2tlbixcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZm9yIChjb25zdCBzZWNyZXQgb2YgcmVzcG9uc2UuaXRlbXMgfHwgW10pIHtcbiAgICAgICAgICByZXN1bHQucHVzaCh0aGlzLnRvTWV0YWRhdGEoc2VjcmV0LCBuYW1lc3BhY2UpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRpbnVlVG9rZW4gPSByZXNwb25zZS5tZXRhZGF0YT8uX2NvbnRpbnVlO1xuICAgICAgfSB3aGlsZSAoY29udGludWVUb2tlbik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IHRoaXMucGFyc2VFcnJvcihlcnJvcik7XG4gICAgfVxuXG4gICAgY29uc3QgZmlsdGVyZWQgPSByZXN1bHQuZmlsdGVyKChtZXRhKSA9PiB7XG4gICAgICBpZiAob3B0aW9ucy5lbmFibGVkID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKCFvcHRpb25zLnRhZ3MpIHJldHVybiB0cnVlO1xuICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKG9wdGlvbnMudGFncykuZXZlcnkoXG4gICAgICAgIChba2V5LCB2YWx1ZV0pID0+IG1ldGEudGFncz8uW2tleV0gPT09IHZhbHVlXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgY29uc3Qgb2Zmc2V0ID0gb3B0aW9ucy5vZmZzZXQgPz8gMDtcbiAgICBjb25zdCBlbmQgPVxuICAgICAgdHlwZW9mIG9wdGlvbnMubGltaXQgPT09IFwibnVtYmVyXCIgPyBvZmZzZXQgKyBvcHRpb25zLmxpbWl0IDogdW5kZWZpbmVkO1xuICAgIHJldHVybiBmaWx0ZXJlZC5zbGljZShvZmZzZXQsIGVuZCk7XG4gIH1cblxuICBhc3luYyBtZXRhZGF0YShcbiAgICBuYW1lT3JSZWY6IFNlY3JldE5hbWUgfCBTZWNyZXRSZWZlcmVuY2UsXG4gICAgb3B0aW9uczogU2VjcmV0TWV0YWRhdGFPcHRpb25zID0ge30sXG4gICAgLi4uYXJnczogTWF5YmVDb250ZXh0dWFsQXJnPGFueT5cbiAgKTogUHJvbWlzZTxTZWNyZXRNZXRhZGF0YSB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IHsgbG9nIH0gPSAoYXdhaXQgdGhpcy5sb2dDdHgoYXJncywgXCJtZXRhZGF0YVwiLCB0cnVlKSkuZm9yKFxuICAgICAgdGhpcy5tZXRhZGF0YVxuICAgICk7XG4gICAgY29uc3QgeyBuYW1lLCBuYW1lc3BhY2UsIHZlcnNpb24gfSA9IHRoaXMucmVzb2x2ZVJlZmVyZW5jZShcbiAgICAgIG5hbWVPclJlZixcbiAgICAgIG9wdGlvbnNcbiAgICApO1xuICAgIGxvZy52ZXJib3NlKGBHZXR0aW5nIG1ldGFkYXRhIGZvciBzZWNyZXQgJHtuYW1lfSBpbiBuYW1lc3BhY2UgJHtuYW1lc3BhY2V9YCk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3Qgc2VjcmV0ID0gYXdhaXQgdGhpcy5yZWFkU2VjcmV0KG5hbWUsIG5hbWVzcGFjZSk7XG4gICAgICB0aGlzLmFzc2VydFZlcnNpb24oc2VjcmV0LCB2ZXJzaW9uKTtcbiAgICAgIHJldHVybiB0aGlzLnRvTWV0YWRhdGEoc2VjcmV0LCBuYW1lc3BhY2UpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBOb3RGb3VuZEVycm9yKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcm90YXRlPFQgZXh0ZW5kcyBTZWNyZXRQYXlsb2FkID0gU2VjcmV0UGF5bG9hZD4oXG4gICAgbmFtZU9yUmVmOiBTZWNyZXROYW1lIHwgU2VjcmV0UmVmZXJlbmNlLFxuICAgIHZhbHVlOiBULFxuICAgIG9wdGlvbnM6IFJvdGF0ZVNlY3JldE9wdGlvbnMgPSB7fSxcbiAgICAuLi5hcmdzOiBNYXliZUNvbnRleHR1YWxBcmc8YW55PlxuICApOiBQcm9taXNlPFNlY3JldFJlZmVyZW5jZT4ge1xuICAgIGNvbnN0IHsgbmFtZSwgbmFtZXNwYWNlIH0gPSB0aGlzLnJlc29sdmVSZWZlcmVuY2UobmFtZU9yUmVmLCBvcHRpb25zKTtcbiAgICByZXR1cm4gdGhpcy5zdG9yZShcbiAgICAgIG5hbWUsXG4gICAgICB2YWx1ZSxcbiAgICAgIHsgdmVyc2lvbjogb3B0aW9ucy5uZXdWZXJzaW9uLCBuYW1lc3BhY2UgfSxcbiAgICAgIC4uLmFyZ3NcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEt1YmVDb25maWcoY29uZmlnOiBLdWJlcm5ldGVzU2VjcmV0U2VydmljZUNvbmZpZyk6IEt1YmVDb25maWcge1xuICAgIGNvbnN0IGt1YmVDb25maWcgPSBuZXcgS3ViZUNvbmZpZygpO1xuICAgIHRyeSB7XG4gICAgICBpZiAoY29uZmlnLnNlcnZpY2VBY2NvdW50KSB7XG4gICAgICAgIGt1YmVDb25maWcubG9hZEZyb21DbHVzdGVyKCk7XG4gICAgICB9IGVsc2UgaWYgKGNvbmZpZy5zZXJ2ZXIpIHtcbiAgICAgICAgY29uc3QgY2x1c3Rlck5hbWUgPSBcImRlY2FmLWNsdXN0ZXJcIjtcbiAgICAgICAgY29uc3QgdXNlck5hbWUgPSBcImRlY2FmLXVzZXJcIjtcbiAgICAgICAgY29uc3QgY29udGV4dE5hbWUgPSBcImRlY2FmLWNvbnRleHRcIjtcbiAgICAgICAga3ViZUNvbmZpZy5sb2FkRnJvbU9wdGlvbnMoe1xuICAgICAgICAgIGNsdXN0ZXJzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IGNsdXN0ZXJOYW1lLFxuICAgICAgICAgICAgICBzZXJ2ZXI6IGNvbmZpZy5zZXJ2ZXIsXG4gICAgICAgICAgICAgIGNhRGF0YTogY29uZmlnLmNhRGF0YSxcbiAgICAgICAgICAgICAgY2FGaWxlOiBjb25maWcuY2FGaWxlLFxuICAgICAgICAgICAgICBza2lwVExTVmVyaWZ5OiBjb25maWcuc2tpcFRMU1ZlcmlmeSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICB1c2VyczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiB1c2VyTmFtZSxcbiAgICAgICAgICAgICAgdG9rZW46IGNvbmZpZy50b2tlbixcbiAgICAgICAgICAgICAgdG9rZW5GaWxlOiBjb25maWcudG9rZW5GaWxlLFxuICAgICAgICAgICAgICBjZXJ0RGF0YTogY29uZmlnLmNlcnREYXRhLFxuICAgICAgICAgICAgICBjZXJ0RmlsZTogY29uZmlnLmNlcnRGaWxlLFxuICAgICAgICAgICAgICBrZXlEYXRhOiBjb25maWcua2V5RGF0YSxcbiAgICAgICAgICAgICAga2V5RmlsZTogY29uZmlnLmtleUZpbGUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgY29udGV4dHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogY29udGV4dE5hbWUsXG4gICAgICAgICAgICAgIGNsdXN0ZXI6IGNsdXN0ZXJOYW1lLFxuICAgICAgICAgICAgICB1c2VyOiB1c2VyTmFtZSxcbiAgICAgICAgICAgICAgbmFtZXNwYWNlOiBjb25maWcubmFtZXNwYWNlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIGN1cnJlbnRDb250ZXh0OiBjb250ZXh0TmFtZSxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKGNvbmZpZy5rdWJlY29uZmlnKSB7XG4gICAgICAgIGt1YmVDb25maWcubG9hZEZyb21GaWxlKGNvbmZpZy5rdWJlY29uZmlnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGt1YmVDb25maWcubG9hZEZyb21EZWZhdWx0KCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcuY29udGV4dCkge1xuICAgICAgICBrdWJlQ29uZmlnLnNldEN1cnJlbnRDb250ZXh0KGNvbmZpZy5jb250ZXh0KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgdGhpcy5wYXJzZUVycm9yKGVycm9yKTtcbiAgICB9XG4gICAgcmV0dXJuIGt1YmVDb25maWc7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVOYW1lc3BhY2UoXG4gICAgY29uZmlnOiBLdWJlcm5ldGVzU2VjcmV0U2VydmljZUNvbmZpZyxcbiAgICBrdWJlQ29uZmlnOiBLdWJlQ29uZmlnXG4gICk6IHN0cmluZyB7XG4gICAgY29uc3QgbmFtZXNwYWNlID1cbiAgICAgIGNvbmZpZy5uYW1lc3BhY2UgfHxcbiAgICAgIGt1YmVDb25maWcuZ2V0Q29udGV4dE9iamVjdChrdWJlQ29uZmlnLmdldEN1cnJlbnRDb250ZXh0KCkpPy5uYW1lc3BhY2UgfHxcbiAgICAgIFwiZGVmYXVsdFwiO1xuICAgIGFzc2VydEt1YmVybmV0ZXNOYW1lc3BhY2UobmFtZXNwYWNlKTtcbiAgICByZXR1cm4gbmFtZXNwYWNlO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlTmFtZXNwYWNlT3B0aW9uKG5hbWVzcGFjZT86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgcmVzb2x2ZWQgPSBuYW1lc3BhY2UgfHwgdGhpcy5jb25maWcubmFtZXNwYWNlIHx8IFwiZGVmYXVsdFwiO1xuICAgIGFzc2VydEt1YmVybmV0ZXNOYW1lc3BhY2UocmVzb2x2ZWQpO1xuICAgIHJldHVybiByZXNvbHZlZDtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZVJlZmVyZW5jZShcbiAgICBuYW1lT3JSZWY6IFNlY3JldE5hbWUgfCBTZWNyZXRSZWZlcmVuY2UsXG4gICAgb3B0aW9uczoge1xuICAgICAgbmFtZXNwYWNlPzogc3RyaW5nO1xuICAgICAgdmVyc2lvbj86IHN0cmluZztcbiAgICB9XG4gICk6IHsgbmFtZTogc3RyaW5nOyBuYW1lc3BhY2U6IHN0cmluZzsgdmVyc2lvbj86IHN0cmluZyB9IHtcbiAgICBjb25zdCBuYW1lID1cbiAgICAgIHR5cGVvZiBuYW1lT3JSZWYgPT09IFwic3RyaW5nXCIgPyBuYW1lT3JSZWYgOiBuYW1lT3JSZWYubmFtZTtcbiAgICBjb25zdCBuYW1lc3BhY2UgPVxuICAgICAgb3B0aW9ucy5uYW1lc3BhY2UgfHxcbiAgICAgICh0eXBlb2YgbmFtZU9yUmVmID09PSBcInN0cmluZ1wiID8gdW5kZWZpbmVkIDogbmFtZU9yUmVmLm5hbWVzcGFjZSkgfHxcbiAgICAgIHRoaXMuY29uZmlnLm5hbWVzcGFjZSB8fFxuICAgICAgXCJkZWZhdWx0XCI7XG4gICAgYXNzZXJ0S3ViZXJuZXRlc05hbWVzcGFjZShuYW1lc3BhY2UpO1xuICAgIGNvbnN0IHZlcnNpb24gPVxuICAgICAgb3B0aW9ucy52ZXJzaW9uIHx8XG4gICAgICAodHlwZW9mIG5hbWVPclJlZiA9PT0gXCJzdHJpbmdcIiA/IHVuZGVmaW5lZCA6IG5hbWVPclJlZi52ZXJzaW9uKTtcbiAgICByZXR1cm4geyBuYW1lOiB0aGlzLm5vcm1hbGl6ZU5hbWUobmFtZSksIG5hbWVzcGFjZSwgdmVyc2lvbiB9O1xuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVOYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIHZhbGlkYXRlU2VjcmV0TmFtZShuYW1lKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgdGhpcy5wYXJzZUVycm9yKGVycm9yIGFzIEVycm9yKTtcbiAgICB9XG4gICAgY29uc3Qgbm9ybWFsaXplZE5hbWUgPSBub3JtYWxpemVTZWNyZXROYW1lKG5hbWUpO1xuICAgIGFzc2VydEt1YmVybmV0ZXNOYW1lKG5vcm1hbGl6ZWROYW1lKTtcbiAgICByZXR1cm4gbm9ybWFsaXplZE5hbWU7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU2VjcmV0KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBuYW1lc3BhY2U6IHN0cmluZyxcbiAgICBzZXJpYWxpemVkOiBTZXJpYWxpemVkU2VjcmV0UGF5bG9hZCxcbiAgICBvcHRpb25zOiBTdG9yZVNlY3JldE9wdGlvbnNcbiAgKTogVjFTZWNyZXQge1xuICAgIGNvbnN0IGFubm90YXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgW0VOQ09ESU5HX0FOTk9UQVRJT05dOiBzZXJpYWxpemVkLmVuY29kaW5nLFxuICAgICAgW1VQREFURURfQVRfQU5OT1RBVElPTl06IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICB9O1xuXG4gICAgaWYgKG9wdGlvbnMuY29udGVudFR5cGUpIHtcbiAgICAgIGFubm90YXRpb25zW0NPTlRFTlRfVFlQRV9BTk5PVEFUSU9OXSA9IG9wdGlvbnMuY29udGVudFR5cGU7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnRhZ3MpIHtcbiAgICAgIGFubm90YXRpb25zW1RBR1NfQU5OT1RBVElPTl0gPSBKU09OLnN0cmluZ2lmeShvcHRpb25zLnRhZ3MpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy52ZXJzaW9uKSB7XG4gICAgICBhbm5vdGF0aW9uc1tWRVJTSU9OX0FOTk9UQVRJT05dID0gb3B0aW9ucy52ZXJzaW9uO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy50ZW5hbnRJZCkge1xuICAgICAgYW5ub3RhdGlvbnNbVEVOQU5UX0FOTk9UQVRJT05dID0gb3B0aW9ucy50ZW5hbnRJZDtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMub3JnVW5pdElkKSB7XG4gICAgICBhbm5vdGF0aW9uc1tPUkdfVU5JVF9BTk5PVEFUSU9OXSA9IG9wdGlvbnMub3JnVW5pdElkO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5vd25lclByaW5jaXBhbElkKSB7XG4gICAgICBhbm5vdGF0aW9uc1tPV05FUl9BTk5PVEFUSU9OXSA9IG9wdGlvbnMub3duZXJQcmluY2lwYWxJZDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgYXBpVmVyc2lvbjogXCJ2MVwiLFxuICAgICAga2luZDogXCJTZWNyZXRcIixcbiAgICAgIHR5cGU6IFwiT3BhcXVlXCIsXG4gICAgICBtZXRhZGF0YToge1xuICAgICAgICBuYW1lLFxuICAgICAgICBuYW1lc3BhY2UsXG4gICAgICAgIGxhYmVsczoge1xuICAgICAgICAgIFtNQU5BR0VEX0xBQkVMXTogXCJ0cnVlXCIsXG4gICAgICAgIH0sXG4gICAgICAgIGFubm90YXRpb25zLFxuICAgICAgfSxcbiAgICAgIHN0cmluZ0RhdGE6IHtcbiAgICAgICAgW1BBWUxPQURfREFUQV9LRVldOiBKU09OLnN0cmluZ2lmeShzZXJpYWxpemVkKSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVhZFNlY3JldChcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgbmFtZXNwYWNlOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxWMVNlY3JldD4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5jbGllbnQucmVhZE5hbWVzcGFjZWRTZWNyZXQoeyBuYW1lLCBuYW1lc3BhY2UgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IHRoaXMucGFyc2VFcnJvcihlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3NlcnRWZXJzaW9uKHNlY3JldDogVjFTZWNyZXQsIHZlcnNpb24/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXZlcnNpb24pIHJldHVybjtcbiAgICBjb25zdCBzdG9yZWQgPSBzZWNyZXQubWV0YWRhdGE/LmFubm90YXRpb25zPy5bVkVSU0lPTl9BTk5PVEFUSU9OXTtcbiAgICBpZiAoc3RvcmVkICE9PSB2ZXJzaW9uKSB7XG4gICAgICB0aHJvdyBuZXcgTm90Rm91bmRFcnJvcihcbiAgICAgICAgYFNlY3JldCBcIiR7c2VjcmV0Lm1ldGFkYXRhPy5uYW1lfVwiIHZlcnNpb24gXCIke3ZlcnNpb259XCIgbm90IGZvdW5kYFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHRvTWV0YWRhdGEoc2VjcmV0OiBWMVNlY3JldCwgbmFtZXNwYWNlOiBzdHJpbmcpOiBTZWNyZXRNZXRhZGF0YSB7XG4gICAgY29uc3QgYW5ub3RhdGlvbnMgPSBzZWNyZXQubWV0YWRhdGE/LmFubm90YXRpb25zIHx8IHt9O1xuICAgIGNvbnN0IHVwZGF0ZWRBdCA9IGFubm90YXRpb25zW1VQREFURURfQVRfQU5OT1RBVElPTl07XG4gICAgY29uc3QgbmFtZSA9IHNlY3JldC5tZXRhZGF0YT8ubmFtZSB8fCBcIlwiO1xuICAgIHJldHVybiB7XG4gICAgICBwcm92aWRlcjogdGhpcy5wcm92aWRlcixcbiAgICAgIG5hbWUsXG4gICAgICB2ZXJzaW9uOiBhbm5vdGF0aW9uc1tWRVJTSU9OX0FOTk9UQVRJT05dLFxuICAgICAgY3JlYXRlZEF0OiB0b0RhdGUoc2VjcmV0Lm1ldGFkYXRhPy5jcmVhdGlvblRpbWVzdGFtcCksXG4gICAgICB1cGRhdGVkQXQ6IHVwZGF0ZWRBdFxuICAgICAgICA/IG5ldyBEYXRlKHVwZGF0ZWRBdClcbiAgICAgICAgOiB0b0RhdGUoc2VjcmV0Lm1ldGFkYXRhPy5jcmVhdGlvblRpbWVzdGFtcCksXG4gICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgY29udGVudFR5cGU6IGFubm90YXRpb25zW0NPTlRFTlRfVFlQRV9BTk5PVEFUSU9OXSxcbiAgICAgIHRhZ3M6IHBhcnNlVGFncyhhbm5vdGF0aW9uc1tUQUdTX0FOTk9UQVRJT05dKSxcbiAgICAgIGV4dGVybmFsSWQ6IHNlY3JldC5tZXRhZGF0YT8udWlkLFxuICAgICAgdXJpOiBga3ViZXJuZXRlczovLyR7bmFtZXNwYWNlfS8ke25hbWV9YCxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0dXNPZihlcnJvcjogdW5rbm93bik6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgQXBpRXhjZXB0aW9uKSByZXR1cm4gZXJyb3IuY29kZTtcbiAgICBjb25zdCBjYW5kaWRhdGUgPSBlcnJvciBhcyB7IGNvZGU/OiB1bmtub3duOyBzdGF0dXNDb2RlPzogdW5rbm93biB9O1xuICAgIGlmICh0eXBlb2YgY2FuZGlkYXRlPy5jb2RlID09PSBcIm51bWJlclwiKSByZXR1cm4gY2FuZGlkYXRlLmNvZGU7XG4gICAgaWYgKHR5cGVvZiBjYW5kaWRhdGU/LnN0YXR1c0NvZGUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIHJldHVybiBjYW5kaWRhdGUuc3RhdHVzQ29kZTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgbWVzc2FnZU9mKGVycm9yOiB1bmtub3duKTogc3RyaW5nIHtcbiAgICBjb25zdCBlcnIgPSBlcnJvciBhcyB7XG4gICAgICBtZXNzYWdlPzogc3RyaW5nO1xuICAgICAgbmFtZT86IHN0cmluZztcbiAgICAgIGJvZHk/OiB7IG1lc3NhZ2U/OiBzdHJpbmc7IHJlYXNvbj86IHN0cmluZyB9O1xuICAgIH07XG4gICAgcmV0dXJuIGVycj8uYm9keT8ubWVzc2FnZSB8fCBlcnI/LmJvZHk/LnJlYXNvbiB8fCBlcnI/Lm1lc3NhZ2UgfHwgZXJyPy5uYW1lIHx8IFwiVW5rbm93biBlcnJvclwiO1xuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlRXJyb3IoZXJyb3I6IHVua25vd24pOiBFcnJvciB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgQmFzZUVycm9yKSByZXR1cm4gZXJyb3I7XG4gICAgY29uc3Qgc3RhdHVzID0gdGhpcy5zdGF0dXNPZihlcnJvcik7XG4gICAgY29uc3QgbWVzc2FnZSA9IHRoaXMubWVzc2FnZU9mKGVycm9yKTtcbiAgICBjb25zdCBsb3dlck1lc3NhZ2UgPSBtZXNzYWdlLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBpZiAoXG4gICAgICBzdGF0dXMgPT09IDQwNCB8fFxuICAgICAgbG93ZXJNZXNzYWdlLmluY2x1ZGVzKFwibm90IGZvdW5kXCIpIHx8XG4gICAgICBsb3dlck1lc3NhZ2UuaW5jbHVkZXMoXCI0MDRcIilcbiAgICApIHtcbiAgICAgIHJldHVybiBuZXcgTm90Rm91bmRFcnJvcihtZXNzYWdlKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBzdGF0dXMgPT09IDQwOSB8fFxuICAgICAgbG93ZXJNZXNzYWdlLmluY2x1ZGVzKFwiYWxyZWFkeSBleGlzdHNcIikgfHxcbiAgICAgIGxvd2VyTWVzc2FnZS5pbmNsdWRlcyhcImNvbmZsaWN0XCIpIHx8XG4gICAgICBsb3dlck1lc3NhZ2UuaW5jbHVkZXMoXCI0MDlcIilcbiAgICApIHtcbiAgICAgIHJldHVybiBuZXcgQ29uZmxpY3RFcnJvcihtZXNzYWdlKTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdHVzID09PSA0MDEgfHwgbG93ZXJNZXNzYWdlLmluY2x1ZGVzKFwidW5hdXRob3JpemVkXCIpKSB7XG4gICAgICByZXR1cm4gbmV3IEF1dGhvcml6YXRpb25FcnJvcihgQXV0aGVudGljYXRpb24gZmFpbGVkOiAke21lc3NhZ2V9YCk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXR1cyA9PT0gNDAzIHx8IGxvd2VyTWVzc2FnZS5pbmNsdWRlcyhcImZvcmJpZGRlblwiKSkge1xuICAgICAgcmV0dXJuIG5ldyBBdXRob3JpemF0aW9uRXJyb3IoYFBlcm1pc3Npb24gZGVuaWVkOiAke21lc3NhZ2V9YCk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgc3RhdHVzID09PSA0MDAgfHxcbiAgICAgIHN0YXR1cyA9PT0gNDIyIHx8XG4gICAgICBsb3dlck1lc3NhZ2UuaW5jbHVkZXMoXCJiYWQgcmVxdWVzdFwiKVxuICAgICkge1xuICAgICAgcmV0dXJuIG5ldyBCYWRSZXF1ZXN0RXJyb3IobWVzc2FnZSk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXR1cyA9PT0gNDI5IHx8IGxvd2VyTWVzc2FnZS5pbmNsdWRlcyhcInJhdGUgbGltaXRcIikpIHtcbiAgICAgIHJldHVybiBuZXcgU2VjcmV0RXJyb3IoXG4gICAgICAgIFwiU0VDUkVUX1BST1ZJREVSX1JBVEVfTElNSVRFRFwiLFxuICAgICAgICBgUmF0ZSBsaW1pdGVkOiAke21lc3NhZ2V9YCxcbiAgICAgICAgZXJyb3IgYXMgRXJyb3JcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgc3RhdHVzID09PSB1bmRlZmluZWQgfHxcbiAgICAgIChzdGF0dXMgIT09IHVuZGVmaW5lZCAmJiBzdGF0dXMgPj0gNTAwKSB8fFxuICAgICAgbG93ZXJNZXNzYWdlLmluY2x1ZGVzKFwiY29ubmVjdGlvblwiKSB8fFxuICAgICAgbG93ZXJNZXNzYWdlLmluY2x1ZGVzKFwidGltZW91dFwiKSB8fFxuICAgICAgbG93ZXJNZXNzYWdlLmluY2x1ZGVzKFwidW5hdmFpbGFibGVcIilcbiAgICApIHtcbiAgICAgIHJldHVybiBuZXcgU2VjcmV0RXJyb3IoXG4gICAgICAgIFwiU0VDUkVUX1BST1ZJREVSX1VOQVZBSUxBQkxFXCIsXG4gICAgICAgIGBQcm92aWRlciB1bmF2YWlsYWJsZTogJHttZXNzYWdlfWAsXG4gICAgICAgIGVycm9yIGFzIEVycm9yXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgSW50ZXJuYWxFcnJvcihtZXNzYWdlKTtcbiAgfVxufVxuIl19
|
|
479
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiS3ViZXJuZXRlc1NlY3JldFNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJLdWJlcm5ldGVzU2VjcmV0U2VydmljZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5REFBK0U7QUFDL0UseUNBQW9EO0FBQ3BELGlEQUE0RTtBQUM1RSxpREFBNkU7QUFDN0UsaURBQXVGO0FBQ3ZGLHFGQUErRTtBQUMvRSw0RUFBMkU7QUFDM0UsMkRBQW1IO0FBQ25ILE1BQU0sZ0JBQWdCLEdBQUcsU0FBUyxDQUFDO0FBQ25DLE1BQU0sYUFBYSxHQUFHLHFCQUFxQixDQUFDO0FBQzVDLE1BQU0saUJBQWlCLEdBQUcsY0FBYyxDQUFDO0FBQ3pDLE1BQU0sbUJBQW1CLEdBQUcsR0FBRyxpQkFBaUIsVUFBVSxDQUFDO0FBQzNELE1BQU0sdUJBQXVCLEdBQUcsR0FBRyxpQkFBaUIsY0FBYyxDQUFDO0FBQ25FLE1BQU0sZUFBZSxHQUFHLEdBQUcsaUJBQWlCLE1BQU0sQ0FBQztBQUNuRCxNQUFNLGtCQUFrQixHQUFHLEdBQUcsaUJBQWlCLFNBQVMsQ0FBQztBQUN6RCxNQUFNLHFCQUFxQixHQUFHLEdBQUcsaUJBQWlCLFlBQVksQ0FBQztBQUMvRCxNQUFNLGlCQUFpQixHQUFHLEdBQUcsaUJBQWlCLFdBQVcsQ0FBQztBQUMxRCxNQUFNLG1CQUFtQixHQUFHLEdBQUcsaUJBQWlCLGFBQWEsQ0FBQztBQUM5RCxNQUFNLGdCQUFnQixHQUFHLEdBQUcsaUJBQWlCLG9CQUFvQixDQUFDO0FBQ2xFLE1BQU0scUJBQXFCLEdBQUcsa0NBQWtDLENBQUM7QUFDakUsTUFBTSxpQkFBaUIsR0FBRyxpQ0FBaUMsQ0FBQztBQUM1RCxTQUFTLG9CQUFvQixDQUFDLElBQUk7SUFDOUIsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3pELE1BQU0sSUFBSSxzQkFB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QztRQUNELElBQUksTUFBTSxLQUFLLFNBQVM7WUFDcEIsQ0FBQyxNQUFNLEtBQUssU0FBUyxJQUFJLE1BQU0sSUFBSSxHQUFHLENBQUM7WUFDdkMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUM7WUFDbkMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7WUFDaEMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1lBQ3ZDLE9BQU8sSUFBSSxzQkFBVyxDQUFDLDZCQUE2QixFQUFFLHlCQUF5QixPQUFPLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNyRyxDQUFDO1FBQ0QsT0FBTyxJQUFJLDZCQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdEMsQ0FBQztDQUNKO0FBelpELDBEQXlaQztBQUNELDB1aURBQTB1aUQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcGlFeGNlcHRpb24sIENvcmVWMUFwaSwgS3ViZUNvbmZpZywgfSBmcm9tIFwiQGt1YmVybmV0ZXMvY2xpZW50LW5vZGVcIjtcbmltcG9ydCB7IEF1dGhvcml6YXRpb25FcnJvciB9IGZyb20gXCJAZGVjYWYtdHMvY29yZVwiO1xuaW1wb3J0IHsgQ2xpZW50QmFzZWRTZWNyZXRTZXJ2aWNlLCBTZWNyZXRFcnJvciwgfSBmcm9tIFwiLi8uLi9jb3JlL2luZGV4LmpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZVNlY3JldE5hbWUsIG5vcm1hbGl6ZVNlY3JldE5hbWUgfSBmcm9tIFwiLi8uLi9jb3JlL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBzZXJpYWxpemVTZWNyZXRQYXlsb2FkLCBkZXNlcmlhbGl6ZVNlY3JldFBheWxvYWQsIH0gZnJvbSBcIi4vLi4vY29yZS9pbmRleC5qc1wiO1xuaW1wb3J0IHsgS3ViZXJuZXRlc1NlY3JldEVudmlyb25tZW50IH0gZnJvbSBcIi4vS3ViZXJuZXRlc1NlY3JldEVudmlyb25tZW50LmpzXCI7XG5pbXBvcnQgeyBlbnZCb29sZWFuLCBlbnZTdHJpbmcgfSBmcm9tIFwiLi8uLi8uLi9zaGFyZWQvZW52aXJvbm1lbnRWYWx1ZS5qc1wiO1xuaW1wb3J0IHsgQmFkUmVxdWVzdEVycm9yLCBCYXNlRXJyb3IsIENvbmZsaWN0RXJyb3IsIEludGVybmFsRXJyb3IsIE5vdEZvdW5kRXJyb3IsIH0gZnJvbSBcIkBkZWNhZi10cy9kYi1kZWNvcmF0b3JzXCI7XG5jb25zdCBQQVlMT0FEX0RBVEFfS0VZID0gXCJwYXlsb2FkXCI7XG5jb25zdCBNQU5BR0VEX0xBQkVMID0gXCJkZWNhZi10cy5pby9tYW5hZ2VkXCI7XG5jb25zdCBBTk5PVEFUSU9OX1BSRUZJWCA9IFwiZGVjYWYtdHMuaW8vXCI7XG5jb25zdCBFTkNPRElOR19BTk5PVEFUSU9OID0gYCR7QU5OT1RBVElPTl9QUkVGSVh9ZW5jb2RpbmdgO1xuY29uc3QgQ09OVEVOVF9UWVBFX0FOTk9UQVRJT04gPSBgJHtBTk5PVEFUSU9OX1BSRUZJWH1jb250ZW50LXR5cGVgO1xuY29uc3QgVEFHU19BTk5PVEFUSU9OID0gYCR7QU5OT1RBVElPTl9QUkVGSVh9dGFnc2A7XG5jb25zdCBWRVJTSU9OX0FOTk9UQVRJT04gPSBgJHtBTk5PVEFUSU9OX1BSRUZJWH12ZXJzaW9uYDtcbmNvbnN0IFVQREFURURfQVRfQU5OT1RBVElPTiA9IGAke0FOTk9UQVRJT05fUFJFRklYfXVwZGF0ZWQtYXRgO1xuY29uc3QgVEVOQU5UX0FOTk9UQVRJT04gPSBgJHtBTk5PVEFUSU9OX1BSRUZJWH10ZW5hbnQtaWRgO1xuY29uc3QgT1JHX1VOSVRfQU5OT1RBVElPTiA9IGAke0FOTk9UQVRJT05fUFJFRklYfW9yZy11bml0LWlkYDtcbmNvbnN0IE9XTkVSX0FOTk9UQVRJT04gPSBgJHtBTk5PVEFUSU9OX1BSRUZJWH1vd25lci1wcmluY2lwYWwtaWRgO1xuY29uc3QgRE5TX1NVQkRPTUFJTl9QQVRURVJOID0gL15bYS16MC05XShbLWEtejAtOS5dKlthLXowLTldKT8kLztcbmNvbnN0IEROU19MQUJFTF9QQVRURVJOID0gL15bYS16MC05XShbLWEtejAtOV0qW2EtejAtOV0pPyQvO1xuZnVuY3Rpb24gYXNzZXJ0S3ViZXJuZXRlc05hbWUobmFtZSkge1xuICAgIGlmIChuYW1lLmxlbmd0aCA+IDI1MyB8fCAhRE5TX1NVQkRPTUFJTl9QQVRURVJOLnRlc3QobmFtZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFNlY3JldEVycm9yKFwiU0VDUkVUX0lOVkFMSURfTkFNRVwiLCBgSW52YWxpZCBLdWJlcm5ldGVzIHNlY3JldCBuYW1lOiBcIiR7bmFtZX1cIi4gTmFtZXMgbXVzdCBiZSBsb3dlcmNhc2UgRE5TLTExMjMgc3ViZG9tYWlucyAobGV0dGVycywgZGlnaXRzLCAnLScsIGFuZCAnLicpLmApO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGFzc2VydEt1YmVybmV0ZXNOYW1lc3BhY2UobmFtZXNwYWNlKSB7XG4gICAgaWYgKG5hbWVzcGFjZS5sZW5ndGggPiA2MyB8fCAhRE5TX0xBQkVMX1BBVFRFUk4udGVzdChuYW1lc3BhY2UpKSB7XG4gICAgICAgIHRocm93IG5ldyBTZWNyZXRFcnJvcihcIlNFQ1JFVF9JTlZBTElEX05BTUVcIiwgYEludmFsaWQgS3ViZXJuZXRlcyBuYW1lc3BhY2U6IFwiJHtuYW1lc3BhY2V9XCIuIE5hbWVzcGFjZXMgbXVzdCBiZSBsb3dlcmNhc2UgRE5TLTExMjMgbGFiZWxzLmApO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHRvRGF0ZSh2YWx1ZSkge1xuICAgIGlmICghdmFsdWUpXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3QgZGF0ZSA9IHZhbHVlIGluc3RhbmNlb2YgRGF0ZSA/IHZhbHVlIDogbmV3IERhdGUodmFsdWUpO1xuICAgIHJldHVybiBOdW1iZXIuaXNOYU4oZGF0ZS5nZXRUaW1lKCkpID8gdW5kZWZpbmVkIDogZGF0ZTtcbn1cbmZ1bmN0aW9uIHBhcnNlVGFncyhyYXcpIHtcbiAgICBpZiAoIXJhdylcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHJhdyk7XG4gICAgICAgIHJldHVybiBwYXJzZWQgJiYgdHlwZW9mIHBhcnNlZCA9PT0gXCJvYmplY3RcIlxuICAgICAgICAgICAgPyBwYXJzZWRcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjYXRjaCB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufVxuLyoqXG4gKiBAY2xhc3MgS3ViZXJuZXRlc1NlY3JldFNlcnZpY2VcbiAqIEBzdW1tYXJ5IE5hdGl2ZSBLdWJlcm5ldGVzIFNlY3JldHMgYmFja2VuZC5cbiAqIEBkZXNjcmlwdGlvbiBJbXBsZW1lbnRzIHRoZSB7QGxpbmsgU2VjcmV0U2VydmljZX0gY29udHJhY3Qgb24gdG9wIG9mXG4gKiBuYW1lc3BhY2VkIEt1YmVybmV0ZXMgYFNlY3JldGAgb2JqZWN0cy4gRWFjaCBERUNBRiBzZWNyZXQgaXMgc3RvcmVkIGFzIGFuXG4gKiBgT3BhcXVlYCBTZWNyZXQgd2hvc2UgYHBheWxvYWRgIGRhdGEga2V5IGhvbGRzIHRoZSBzZXJpYWxpemVkXG4gKiB7QGxpbmsgU2VyaWFsaXplZFNlY3JldFBheWxvYWR9IGVudmVsb3BlLCB3aGlsZSBlbmNvZGluZywgY29udGVudCB0eXBlLCB0YWdzLFxuICogbG9naWNhbCB2ZXJzaW9uLCBhbmQgb3duZXJzaGlwIGhpbnRzIGxpdmUgaW4gYGRlY2FmLXRzLmlvLypgIGFubm90YXRpb25zLlxuICpcbiAqIEF1dGhlbnRpY2F0aW9uIHVzZXMgdGhlIHN0YW5kYXJkIEt1YmVybmV0ZXMgY2xpZW50IHJlc29sdXRpb24gb3JkZXI6XG4gKiBleHBsaWNpdCBgc2VydmVyYCBjcmVkZW50aWFscywgYW4gZXhwbGljaXQgYGt1YmVjb25maWdgIHBhdGgsIGBLVUJFQ09ORklHYCxcbiAqIGB+Ly5rdWJlL2NvbmZpZ2AsIGFuZCBmaW5hbGx5IHRoZSBpbi1jbHVzdGVyIHNlcnZpY2UgYWNjb3VudC5cbiAqL1xuZXhwb3J0IGNsYXNzIEt1YmVybmV0ZXNTZWNyZXRTZXJ2aWNlIGV4dGVuZHMgQ2xpZW50QmFzZWRTZWNyZXRTZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5wcm92aWRlciA9IFwia3ViZXJuZXRlc1wiO1xuICAgIH1cbiAgICBjb25maWdGcm9tRW52aXJvbm1lbnQoKSB7XG4gICAgICAgIGNvbnN0IGVudiA9IEt1YmVybmV0ZXNTZWNyZXRFbnZpcm9ubWVudC5zZWNyZXRzLmt1YmVybmV0ZXM7XG4gICAgICAgIGNvbnN0IG5hbWVzcGFjZSA9IGVudlN0cmluZyhlbnY/Lm5hbWVzcGFjZSk7XG4gICAgICAgIGNvbnN0IGt1YmVjb25maWcgPSBlbnZTdHJpbmcoZW52Py5rdWJlY29uZmlnKTtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IGVudlN0cmluZyhlbnY/LmNvbnRleHQpO1xuICAgICAgICBjb25zdCBzZXJ2ZXIgPSBlbnZTdHJpbmcoZW52Py5zZXJ2ZXIpO1xuICAgICAgICBpZiAoIW5hbWVzcGFjZSAmJiAha3ViZWNvbmZpZyAmJiAhY29udGV4dCAmJiAhc2VydmVyKVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHByb3ZpZGVyOiBcImt1YmVybmV0ZXNcIixcbiAgICAgICAgICAgIG5hbWVzcGFjZSxcbiAgICAgICAgICAgIGt1YmVjb25maWcsXG4gICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICAgc2VydmVyLFxuICAgICAgICAgICAgdG9rZW46IGVudlN0cmluZyhlbnYudG9rZW4pLFxuICAgICAgICAgICAgdG9rZW5GaWxlOiBlbnZTdHJpbmcoZW52LnRva2VuRmlsZSksXG4gICAgICAgICAgICBjYUZpbGU6IGVudlN0cmluZyhlbnYuY2FGaWxlKSxcbiAgICAgICAgICAgIGNhRGF0YTogZW52U3RyaW5nKGVudi5jYURhdGEpLFxuICAgICAgICAgICAgY2VydEZpbGU6IGVudlN0cmluZyhlbnYuY2VydEZpbGUpLFxuICAgICAgICAgICAga2V5RmlsZTogZW52U3RyaW5nKGVudi5rZXlGaWxlKSxcbiAgICAgICAgICAgIGNlcnREYXRhOiBlbnZTdHJpbmcoZW52LmNlcnREYXRhKSxcbiAgICAgICAgICAgIGtleURhdGE6IGVudlN0cmluZyhlbnYua2V5RGF0YSksXG4gICAgICAgICAgICBza2lwVExTVmVyaWZ5OiBlbnZCb29sZWFuKGVudi5za2lwVExTVmVyaWZ5KSxcbiAgICAgICAgICAgIHNlcnZpY2VBY2NvdW50OiBlbnZCb29sZWFuKGVudi5zZXJ2aWNlQWNjb3VudCksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFzeW5jIGluaXRpYWxpemUoLi4uYXJncykge1xuICAgICAgICBjb25zdCB7IGxvZyB9ID0gKGF3YWl0IHRoaXMubG9nQ3R4KGFyZ3MsIFwiaW5pdGlhbGl6ZVwiLCB0cnVlKSkuZm9yKHRoaXMuaW5pdGlhbGl6ZSk7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuZ2V0Q29uZmlnRnJvbUFyZ3MoLi4uYXJncyk7XG4gICAgICAgIGNvbnN0IGt1YmVDb25maWcgPSB0aGlzLmJ1aWxkS3ViZUNvbmZpZyhjb25maWcpO1xuICAgICAgICBjb25zdCBuYW1lc3BhY2UgPSB0aGlzLnJlc29sdmVOYW1lc3BhY2UoY29uZmlnLCBrdWJlQ29uZmlnKTtcbiAgICAgICAgY29uc3QgcmVzb2x2ZWQgPSB7IC4uLmNvbmZpZywgbmFtZXNwYWNlIH07XG4gICAgICAgIGNvbnN0IGNsaWVudCA9IGt1YmVDb25maWcubWFrZUFwaUNsaWVudChDb3JlVjFBcGkpO1xuICAgICAgICB0aGlzLl9jb25maWcgPSByZXNvbHZlZDtcbiAgICAgICAgdGhpcy5fY2xpZW50ID0gY2xpZW50O1xuICAgICAgICBsb2cudmVyYm9zZShgSW5pdGlhbGl6ZWQgS3ViZXJuZXRlcyBzZWNyZXQgc2VydmljZSBmb3IgbmFtZXNwYWNlIFwiJHtuYW1lc3BhY2V9XCJgKTtcbiAgICAgICAgcmV0dXJuIHsgY29uZmlnOiByZXNvbHZlZCwgY2xpZW50IH07XG4gICAgfVxuICAgIGFzeW5jIHN0b3JlKG5hbWUsIHZhbHVlLCBvcHRpb25zID0ge30sIC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3QgeyBsb2cgfSA9IChhd2FpdCB0aGlzLmxvZ0N0eChhcmdzLCBcInN0b3JlXCIsIHRydWUpKS5mb3IodGhpcy5zdG9yZSk7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWROYW1lID0gdGhpcy5ub3JtYWxpemVOYW1lKG5hbWUpO1xuICAgICAgICBjb25zdCBuYW1lc3BhY2UgPSB0aGlzLnJlc29sdmVOYW1lc3BhY2VPcHRpb24ob3B0aW9ucy5uYW1lc3BhY2UpO1xuICAgICAgICBsb2cudmVyYm9zZShgU3RvcmluZyBzZWNyZXQgJHtub3JtYWxpemVkTmFtZX0gaW4gbmFtZXNwYWNlICR7bmFtZXNwYWNlfWApO1xuICAgICAgICBjb25zdCBzZXJpYWxpemVkID0gc2VyaWFsaXplU2VjcmV0UGF5bG9hZCh2YWx1ZSk7XG4gICAgICAgIGNvbnN0IGJvZHkgPSB0aGlzLmJ1aWxkU2VjcmV0KG5vcm1hbGl6ZWROYW1lLCBuYW1lc3BhY2UsIHNlcmlhbGl6ZWQsIG9wdGlvbnMpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jbGllbnQuY3JlYXRlTmFtZXNwYWNlZFNlY3JldCh7IG5hbWVzcGFjZSwgYm9keSB9KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnN0YXR1c09mKGVycm9yKSA9PT0gNDA5KSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmcgPSBhd2FpdCB0aGlzLmNsaWVudC5yZWFkTmFtZXNwYWNlZFNlY3JldCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBub3JtYWxpemVkTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzcGFjZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGJvZHkubWV0YWRhdGEgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi4oYm9keS5tZXRhZGF0YSB8fCB7fSksXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZVZlcnNpb246IGV4aXN0aW5nLm1ldGFkYXRhPy5yZXNvdXJjZVZlcnNpb24sXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuY2xpZW50LnJlcGxhY2VOYW1lc3BhY2VkU2VjcmV0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IG5vcm1hbGl6ZWROYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNwYWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChyZXBsYWNlRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgdGhpcy5wYXJzZUVycm9yKHJlcGxhY2VFcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgdGhpcy5wYXJzZUVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJvdmlkZXI6IHRoaXMucHJvdmlkZXIsXG4gICAgICAgICAgICBuYW1lOiBub3JtYWxpemVkTmFtZSxcbiAgICAgICAgICAgIG5hbWVzcGFjZSxcbiAgICAgICAgICAgIHZlcnNpb246IG9wdGlvbnMudmVyc2lvbixcbiAgICAgICAgICAgIHVyaTogYGt1YmVybmV0ZXM6Ly8ke25hbWVzcGFjZX0vJHtub3JtYWxpemVkTmFtZX1gLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBhc3luYyByZXRyaWV2ZShuYW1lT3JSZWYsIG9wdGlvbnMgPSB7fSwgLi4uYXJncykge1xuICAgICAgICBjb25zdCB7IGxvZyB9ID0gKGF3YWl0IHRoaXMubG9nQ3R4KGFyZ3MsIFwicmV0cmlldmVcIiwgdHJ1ZSkpLmZvcih0aGlzLnJldHJpZXZlKTtcbiAgICAgICAgY29uc3QgeyBuYW1lLCBuYW1lc3BhY2UsIHZlcnNpb24gfSA9IHRoaXMucmVzb2x2ZVJlZmVyZW5jZShuYW1lT3JSZWYsIG9wdGlvbnMpO1xuICAgICAgICBsb2cudmVyYm9zZShgUmV0cmlldmluZyBzZWNyZXQgJHtuYW1lfSBmcm9tIG5hbWVzcGFjZSAke25hbWVzcGFjZX1gKTtcbiAgICAgICAgY29uc3Qgc2VjcmV0ID0gYXdhaXQgdGhpcy5yZWFkU2VjcmV0KG5hbWUsIG5hbWVzcGFjZSk7XG4gICAgICAgIHRoaXMuYXNzZXJ0VmVyc2lvbihzZWNyZXQsIHZlcnNpb24pO1xuICAgICAgICBjb25zdCByYXcgPSBzZWNyZXQuZGF0YT8uW1BBWUxPQURfREFUQV9LRVldO1xuICAgICAgICBpZiAoIXJhdykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kRXJyb3IoYE5vIHNlY3JldCB2YWx1ZSBmb3VuZCBmb3IgXCIke25hbWV9XCIgaW4gbmFtZXNwYWNlIFwiJHtuYW1lc3BhY2V9XCJgKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcGF5bG9hZDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHBheWxvYWQgPSBKU09OLnBhcnNlKEJ1ZmZlci5mcm9tKHJhdywgXCJiYXNlNjRcIikudG9TdHJpbmcoXCJ1dGY4XCIpKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBTZWNyZXRFcnJvcihcIlNFQ1JFVF9ERVNFUklBTElaQVRJT05fRkFJTEVEXCIsIGBGYWlsZWQgdG8gcGFyc2Ugc2VjcmV0IHBheWxvYWQgZm9yIFwiJHtuYW1lfVwiOiAke2Vycm9yLm1lc3NhZ2V9YCwgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZXNlcmlhbGl6ZVNlY3JldFBheWxvYWQocGF5bG9hZCk7XG4gICAgfVxuICAgIGFzeW5jIGRlbGV0ZShuYW1lT3JSZWYsIG9wdGlvbnMgPSB7fSwgLi4uYXJncykge1xuICAgICAgICBjb25zdCB7IGxvZyB9ID0gKGF3YWl0IHRoaXMubG9nQ3R4KGFyZ3MsIFwiZGVsZXRlXCIsIHRydWUpKS5mb3IodGhpcy5kZWxldGUpO1xuICAgICAgICBjb25zdCB7IG5hbWUsIG5hbWVzcGFjZSwgdmVyc2lvbiB9ID0gdGhpcy5yZXNvbHZlUmVmZXJlbmNlKG5hbWVPclJlZiwgb3B0aW9ucyk7XG4gICAgICAgIGxvZy52ZXJib3NlKGBEZWxldGluZyBzZWNyZXQgJHtuYW1lfSBmcm9tIG5hbWVzcGFjZSAke25hbWVzcGFjZX1gKTtcbiAgICAgICAgaWYgKHZlcnNpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IHNlY3JldCA9IGF3YWl0IHRoaXMucmVhZFNlY3JldChuYW1lLCBuYW1lc3BhY2UpO1xuICAgICAgICAgICAgdGhpcy5hc3NlcnRWZXJzaW9uKHNlY3JldCwgdmVyc2lvbik7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2xpZW50LmRlbGV0ZU5hbWVzcGFjZWRTZWNyZXQoeyBuYW1lLCBuYW1lc3BhY2UgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyB0aGlzLnBhcnNlRXJyb3IoZXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIGV4aXN0cyhuYW1lT3JSZWYsIG9wdGlvbnMgPSB7fSwgLi4uYXJncykge1xuICAgICAgICBjb25zdCB7IGxvZyB9ID0gKGF3YWl0IHRoaXMubG9nQ3R4KGFyZ3MsIFwiZXhpc3RzXCIsIHRydWUpKS5mb3IodGhpcy5leGlzdHMpO1xuICAgICAgICBjb25zdCB7IG5hbWUsIG5hbWVzcGFjZSwgdmVyc2lvbiB9ID0gdGhpcy5yZXNvbHZlUmVmZXJlbmNlKG5hbWVPclJlZiwgb3B0aW9ucyk7XG4gICAgICAgIGxvZy52ZXJib3NlKGBDaGVja2luZyBpZiBzZWNyZXQgJHtuYW1lfSBleGlzdHMgaW4gbmFtZXNwYWNlICR7bmFtZXNwYWNlfWApO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3Qgc2VjcmV0ID0gYXdhaXQgdGhpcy5yZWFkU2VjcmV0KG5hbWUsIG5hbWVzcGFjZSk7XG4gICAgICAgICAgICB0aGlzLmFzc2VydFZlcnNpb24oc2VjcmV0LCB2ZXJzaW9uKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgTm90Rm91bmRFcnJvcilcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBsaXN0KG9wdGlvbnMgPSB7fSwgLi4uYXJncykge1xuICAgICAgICBjb25zdCB7IGxvZyB9ID0gKGF3YWl0IHRoaXMubG9nQ3R4KGFyZ3MsIFwibGlzdFwiLCB0cnVlKSkuZm9yKHRoaXMubGlzdCk7XG4gICAgICAgIGNvbnN0IG5hbWVzcGFjZSA9IHRoaXMucmVzb2x2ZU5hbWVzcGFjZU9wdGlvbihvcHRpb25zLm5hbWVzcGFjZSk7XG4gICAgICAgIGxvZy52ZXJib3NlKGBMaXN0aW5nIHNlY3JldHMgaW4gbmFtZXNwYWNlICR7bmFtZXNwYWNlfWApO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgbGV0IGNvbnRpbnVlVG9rZW47XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNsaWVudC5saXN0TmFtZXNwYWNlZFNlY3JldCh7XG4gICAgICAgICAgICAgICAgICAgIG5hbWVzcGFjZSxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWxTZWxlY3RvcjogYCR7TUFOQUdFRF9MQUJFTH09dHJ1ZWAsXG4gICAgICAgICAgICAgICAgICAgIGxpbWl0OiAxMDAsXG4gICAgICAgICAgICAgICAgICAgIF9jb250aW51ZTogY29udGludWVUb2tlbixcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHNlY3JldCBvZiByZXNwb25zZS5pdGVtcyB8fCBbXSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh0aGlzLnRvTWV0YWRhdGEoc2VjcmV0LCBuYW1lc3BhY2UpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29udGludWVUb2tlbiA9IHJlc3BvbnNlLm1ldGFkYXRhPy5fY29udGludWU7XG4gICAgICAgICAgICB9IHdoaWxlIChjb250aW51ZVRva2VuKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRocm93IHRoaXMucGFyc2VFcnJvcihlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmlsdGVyZWQgPSByZXN1bHQuZmlsdGVyKChtZXRhKSA9PiB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5lbmFibGVkID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMudGFncylcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyhvcHRpb25zLnRhZ3MpLmV2ZXJ5KChba2V5LCB2YWx1ZV0pID0+IG1ldGEudGFncz8uW2tleV0gPT09IHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IG9wdGlvbnMub2Zmc2V0ID8/IDA7XG4gICAgICAgIGNvbnN0IGVuZCA9IHR5cGVvZiBvcHRpb25zLmxpbWl0ID09PSBcIm51bWJlclwiID8gb2Zmc2V0ICsgb3B0aW9ucy5saW1pdCA6IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIGZpbHRlcmVkLnNsaWNlKG9mZnNldCwgZW5kKTtcbiAgICB9XG4gICAgYXN5bmMgbWV0YWRhdGEobmFtZU9yUmVmLCBvcHRpb25zID0ge30sIC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3QgeyBsb2cgfSA9IChhd2FpdCB0aGlzLmxvZ0N0eChhcmdzLCBcIm1ldGFkYXRhXCIsIHRydWUpKS5mb3IodGhpcy5tZXRhZGF0YSk7XG4gICAgICAgIGNvbnN0IHsgbmFtZSwgbmFtZXNwYWNlLCB2ZXJzaW9uIH0gPSB0aGlzLnJlc29sdmVSZWZlcmVuY2UobmFtZU9yUmVmLCBvcHRpb25zKTtcbiAgICAgICAgbG9nLnZlcmJvc2UoYEdldHRpbmcgbWV0YWRhdGEgZm9yIHNlY3JldCAke25hbWV9IGluIG5hbWVzcGFjZSAke25hbWVzcGFjZX1gKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHNlY3JldCA9IGF3YWl0IHRoaXMucmVhZFNlY3JldChuYW1lLCBuYW1lc3BhY2UpO1xuICAgICAgICAgICAgdGhpcy5hc3NlcnRWZXJzaW9uKHNlY3JldCwgdmVyc2lvbik7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50b01ldGFkYXRhKHNlY3JldCwgbmFtZXNwYWNlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIE5vdEZvdW5kRXJyb3IpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIHJvdGF0ZShuYW1lT3JSZWYsIHZhbHVlLCBvcHRpb25zID0ge30sIC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3QgeyBuYW1lLCBuYW1lc3BhY2UgfSA9IHRoaXMucmVzb2x2ZVJlZmVyZW5jZShuYW1lT3JSZWYsIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gdGhpcy5zdG9yZShuYW1lLCB2YWx1ZSwgeyB2ZXJzaW9uOiBvcHRpb25zLm5ld1ZlcnNpb24sIG5hbWVzcGFjZSB9LCAuLi5hcmdzKTtcbiAgICB9XG4gICAgYnVpbGRLdWJlQ29uZmlnKGNvbmZpZykge1xuICAgICAgICBjb25zdCBrdWJlQ29uZmlnID0gbmV3IEt1YmVDb25maWcoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChjb25maWcuc2VydmljZUFjY291bnQpIHtcbiAgICAgICAgICAgICAgICBrdWJlQ29uZmlnLmxvYWRGcm9tQ2x1c3RlcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY29uZmlnLnNlcnZlcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNsdXN0ZXJOYW1lID0gXCJkZWNhZi1jbHVzdGVyXCI7XG4gICAgICAgICAgICAgICAgY29uc3QgdXNlck5hbWUgPSBcImRlY2FmLXVzZXJcIjtcbiAgICAgICAgICAgICAgICBjb25zdCBjb250ZXh0TmFtZSA9IFwiZGVjYWYtY29udGV4dFwiO1xuICAgICAgICAgICAgICAgIGt1YmVDb25maWcubG9hZEZyb21PcHRpb25zKHtcbiAgICAgICAgICAgICAgICAgICAgY2x1c3RlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBjbHVzdGVyTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXI6IGNvbmZpZy5zZXJ2ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FEYXRhOiBjb25maWcuY2FEYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhRmlsZTogY29uZmlnLmNhRmlsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwVExTVmVyaWZ5OiBjb25maWcuc2tpcFRMU1ZlcmlmeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIHVzZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogdXNlck5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW46IGNvbmZpZy50b2tlbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbkZpbGU6IGNvbmZpZy50b2tlbkZpbGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydERhdGE6IGNvbmZpZy5jZXJ0RGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0RmlsZTogY29uZmlnLmNlcnRGaWxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleURhdGE6IGNvbmZpZy5rZXlEYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleUZpbGU6IGNvbmZpZy5rZXlGaWxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dHM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBjb250ZXh0TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHVzdGVyOiBjbHVzdGVyTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyOiB1c2VyTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lc3BhY2U6IGNvbmZpZy5uYW1lc3BhY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q29udGV4dDogY29udGV4dE5hbWUsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjb25maWcua3ViZWNvbmZpZykge1xuICAgICAgICAgICAgICAgIGt1YmVDb25maWcubG9hZEZyb21GaWxlKGNvbmZpZy5rdWJlY29uZmlnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGt1YmVDb25maWcubG9hZEZyb21EZWZhdWx0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY29uZmlnLmNvbnRleHQpIHtcbiAgICAgICAgICAgICAgICBrdWJlQ29uZmlnLnNldEN1cnJlbnRDb250ZXh0KGNvbmZpZy5jb250ZXh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRocm93IHRoaXMucGFyc2VFcnJvcihlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGt1YmVDb25maWc7XG4gICAgfVxuICAgIHJlc29sdmVOYW1lc3BhY2UoY29uZmlnLCBrdWJlQ29uZmlnKSB7XG4gICAgICAgIGNvbnN0IG5hbWVzcGFjZSA9IGNvbmZpZy5uYW1lc3BhY2UgfHxcbiAgICAgICAgICAgIGt1YmVDb25maWcuZ2V0Q29udGV4dE9iamVjdChrdWJlQ29uZmlnLmdldEN1cnJlbnRDb250ZXh0KCkpPy5uYW1lc3BhY2UgfHxcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiO1xuICAgICAgICBhc3NlcnRLdWJlcm5ldGVzTmFtZXNwYWNlKG5hbWVzcGFjZSk7XG4gICAgICAgIHJldHVybiBuYW1lc3BhY2U7XG4gICAgfVxuICAgIHJlc29sdmVOYW1lc3BhY2VPcHRpb24obmFtZXNwYWNlKSB7XG4gICAgICAgIGNvbnN0IHJlc29sdmVkID0gbmFtZXNwYWNlIHx8IHRoaXMuY29uZmlnLm5hbWVzcGFjZSB8fCBcImRlZmF1bHRcIjtcbiAgICAgICAgYXNzZXJ0S3ViZXJuZXRlc05hbWVzcGFjZShyZXNvbHZlZCk7XG4gICAgICAgIHJldHVybiByZXNvbHZlZDtcbiAgICB9XG4gICAgcmVzb2x2ZVJlZmVyZW5jZShuYW1lT3JSZWYsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IHR5cGVvZiBuYW1lT3JSZWYgPT09IFwic3RyaW5nXCIgPyBuYW1lT3JSZWYgOiBuYW1lT3JSZWYubmFtZTtcbiAgICAgICAgY29uc3QgbmFtZXNwYWNlID0gb3B0aW9ucy5uYW1lc3BhY2UgfHxcbiAgICAgICAgICAgICh0eXBlb2YgbmFtZU9yUmVmID09PSBcInN0cmluZ1wiID8gdW5kZWZpbmVkIDogbmFtZU9yUmVmLm5hbWVzcGFjZSkgfHxcbiAgICAgICAgICAgIHRoaXMuY29uZmlnLm5hbWVzcGFjZSB8fFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI7XG4gICAgICAgIGFzc2VydEt1YmVybmV0ZXNOYW1lc3BhY2UobmFtZXNwYWNlKTtcbiAgICAgICAgY29uc3QgdmVyc2lvbiA9IG9wdGlvbnMudmVyc2lvbiB8fFxuICAgICAgICAgICAgKHR5cGVvZiBuYW1lT3JSZWYgPT09IFwic3RyaW5nXCIgPyB1bmRlZmluZWQgOiBuYW1lT3JSZWYudmVyc2lvbik7XG4gICAgICAgIHJldHVybiB7IG5hbWU6IHRoaXMubm9ybWFsaXplTmFtZShuYW1lKSwgbmFtZXNwYWNlLCB2ZXJzaW9uIH07XG4gICAgfVxuICAgIG5vcm1hbGl6ZU5hbWUobmFtZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFsaWRhdGVTZWNyZXROYW1lKG5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgdGhyb3cgdGhpcy5wYXJzZUVycm9yKGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBub3JtYWxpemVkTmFtZSA9IG5vcm1hbGl6ZVNlY3JldE5hbWUobmFtZSk7XG4gICAgICAgIGFzc2VydEt1YmVybmV0ZXNOYW1lKG5vcm1hbGl6ZWROYW1lKTtcbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWROYW1lO1xuICAgIH1cbiAgICBidWlsZFNlY3JldChuYW1lLCBuYW1lc3BhY2UsIHNlcmlhbGl6ZWQsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgYW5ub3RhdGlvbnMgPSB7XG4gICAgICAgICAgICBbRU5DT0RJTkdfQU5OT1RBVElPTl06IHNlcmlhbGl6ZWQuZW5jb2RpbmcsXG4gICAgICAgICAgICBbVVBEQVRFRF9BVF9BTk5PVEFUSU9OXTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICB9O1xuICAgICAgICBpZiAob3B0aW9ucy5jb250ZW50VHlwZSkge1xuICAgICAgICAgICAgYW5ub3RhdGlvbnNbQ09OVEVOVF9UWVBFX0FOTk9UQVRJT05dID0gb3B0aW9ucy5jb250ZW50VHlwZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy50YWdzKSB7XG4gICAgICAgICAgICBhbm5vdGF0aW9uc1tUQUdTX0FOTk9UQVRJT05dID0gSlNPTi5zdHJpbmdpZnkob3B0aW9ucy50YWdzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy52ZXJzaW9uKSB7XG4gICAgICAgICAgICBhbm5vdGF0aW9uc1tWRVJTSU9OX0FOTk9UQVRJT05dID0gb3B0aW9ucy52ZXJzaW9uO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLnRlbmFudElkKSB7XG4gICAgICAgICAgICBhbm5vdGF0aW9uc1tURU5BTlRfQU5OT1RBVElPTl0gPSBvcHRpb25zLnRlbmFudElkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLm9yZ1VuaXRJZCkge1xuICAgICAgICAgICAgYW5ub3RhdGlvbnNbT1JHX1VOSVRfQU5OT1RBVElPTl0gPSBvcHRpb25zLm9yZ1VuaXRJZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5vd25lclByaW5jaXBhbElkKSB7XG4gICAgICAgICAgICBhbm5vdGF0aW9uc1tPV05FUl9BTk5PVEFUSU9OXSA9IG9wdGlvbnMub3duZXJQcmluY2lwYWxJZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYXBpVmVyc2lvbjogXCJ2MVwiLFxuICAgICAgICAgICAga2luZDogXCJTZWNyZXRcIixcbiAgICAgICAgICAgIHR5cGU6IFwiT3BhcXVlXCIsXG4gICAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgbmFtZXNwYWNlLFxuICAgICAgICAgICAgICAgIGxhYmVsczoge1xuICAgICAgICAgICAgICAgICAgICBbTUFOQUdFRF9MQUJFTF06IFwidHJ1ZVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYW5ub3RhdGlvbnMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3RyaW5nRGF0YToge1xuICAgICAgICAgICAgICAgIFtQQVlMT0FEX0RBVEFfS0VZXTogSlNPTi5zdHJpbmdpZnkoc2VyaWFsaXplZCksXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICBhc3luYyByZWFkU2VjcmV0KG5hbWUsIG5hbWVzcGFjZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY2xpZW50LnJlYWROYW1lc3BhY2VkU2VjcmV0KHsgbmFtZSwgbmFtZXNwYWNlIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgdGhyb3cgdGhpcy5wYXJzZUVycm9yKGVycm9yKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3NlcnRWZXJzaW9uKHNlY3JldCwgdmVyc2lvbikge1xuICAgICAgICBpZiAoIXZlcnNpb24pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHN0b3JlZCA9IHNlY3JldC5tZXRhZGF0YT8uYW5ub3RhdGlvbnM/LltWRVJTSU9OX0FOTk9UQVRJT05dO1xuICAgICAgICBpZiAoc3RvcmVkICE9PSB2ZXJzaW9uKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgTm90Rm91bmRFcnJvcihgU2VjcmV0IFwiJHtzZWNyZXQubWV0YWRhdGE/Lm5hbWV9XCIgdmVyc2lvbiBcIiR7dmVyc2lvbn1cIiBub3QgZm91bmRgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0b01ldGFkYXRhKHNlY3JldCwgbmFtZXNwYWNlKSB7XG4gICAgICAgIGNvbnN0IGFubm90YXRpb25zID0gc2VjcmV0Lm1ldGFkYXRhPy5hbm5vdGF0aW9ucyB8fCB7fTtcbiAgICAgICAgY29uc3QgdXBkYXRlZEF0ID0gYW5ub3RhdGlvbnNbVVBEQVRFRF9BVF9BTk5PVEFUSU9OXTtcbiAgICAgICAgY29uc3QgbmFtZSA9IHNlY3JldC5tZXRhZGF0YT8ubmFtZSB8fCBcIlwiO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJvdmlkZXI6IHRoaXMucHJvdmlkZXIsXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgdmVyc2lvbjogYW5ub3RhdGlvbnNbVkVSU0lPTl9BTk5PVEFUSU9OXSxcbiAgICAgICAgICAgIGNyZWF0ZWRBdDogdG9EYXRlKHNlY3JldC5tZXRhZGF0YT8uY3JlYXRpb25UaW1lc3RhbXApLFxuICAgICAgICAgICAgdXBkYXRlZEF0OiB1cGRhdGVkQXRcbiAgICAgICAgICAgICAgICA/IG5ldyBEYXRlKHVwZGF0ZWRBdClcbiAgICAgICAgICAgICAgICA6IHRvRGF0ZShzZWNyZXQubWV0YWRhdGE/LmNyZWF0aW9uVGltZXN0YW1wKSxcbiAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICBjb250ZW50VHlwZTogYW5ub3RhdGlvbnNbQ09OVEVOVF9UWVBFX0FOTk9UQVRJT05dLFxuICAgICAgICAgICAgdGFnczogcGFyc2VUYWdzKGFubm90YXRpb25zW1RBR1NfQU5OT1RBVElPTl0pLFxuICAgICAgICAgICAgZXh0ZXJuYWxJZDogc2VjcmV0Lm1ldGFkYXRhPy51aWQsXG4gICAgICAgICAgICB1cmk6IGBrdWJlcm5ldGVzOi8vJHtuYW1lc3BhY2V9LyR7bmFtZX1gLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBzdGF0dXNPZihlcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBBcGlFeGNlcHRpb24pXG4gICAgICAgICAgICByZXR1cm4gZXJyb3IuY29kZTtcbiAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gZXJyb3I7XG4gICAgICAgIGlmICh0eXBlb2YgY2FuZGlkYXRlPy5jb2RlID09PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZS5jb2RlO1xuICAgICAgICBpZiAodHlwZW9mIGNhbmRpZGF0ZT8uc3RhdHVzQ29kZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZS5zdGF0dXNDb2RlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIG1lc3NhZ2VPZihlcnJvcikge1xuICAgICAgICBjb25zdCBlcnIgPSBlcnJvcjtcbiAgICAgICAgcmV0dXJuIGVycj8uYm9keT8ubWVzc2FnZSB8fCBlcnI/LmJvZHk/LnJlYXNvbiB8fCBlcnI/Lm1lc3NhZ2UgfHwgZXJyPy5uYW1lIHx8IFwiVW5rbm93biBlcnJvclwiO1xuICAgIH1cbiAgICBwYXJzZUVycm9yKGVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEJhc2VFcnJvcilcbiAgICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gdGhpcy5zdGF0dXNPZihlcnJvcik7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLm1lc3NhZ2VPZihlcnJvcik7XG4gICAgICAgIGNvbnN0IGxvd2VyTWVzc2FnZSA9IG1lc3NhZ2UudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gNDA0IHx8XG4gICAgICAgICAgICBsb3dlck1lc3NhZ2UuaW5jbHVkZXMoXCJub3QgZm91bmRcIikgfHxcbiAgICAgICAgICAgIGxvd2VyTWVzc2FnZS5pbmNsdWRlcyhcIjQwNFwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBOb3RGb3VuZEVycm9yKG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDQwOSB8fFxuICAgICAgICAgICAgbG93ZXJNZXNzYWdlLmluY2x1ZGVzKFwiYWxyZWFkeSBleGlzdHNcIikgfHxcbiAgICAgICAgICAgIGxvd2VyTWVzc2FnZS5pbmNsdWRlcyhcImNvbmZsaWN0XCIpIHx8XG4gICAgICAgICAgICBsb3dlck1lc3NhZ2UuaW5jbHVkZXMoXCI0MDlcIikpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ29uZmxpY3RFcnJvcihtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdHVzID09PSA0MDEgfHwgbG93ZXJNZXNzYWdlLmluY2x1ZGVzKFwidW5hdXRob3JpemVkXCIpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEF1dGhvcml6YXRpb25FcnJvcihgQXV0aGVudGljYXRpb24gZmFpbGVkOiAke21lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gNDAzIHx8IGxvd2VyTWVzc2FnZS5pbmNsdWRlcyhcImZvcmJpZGRlblwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBBdXRob3JpemF0aW9uRXJyb3IoYFBlcm1pc3Npb24gZGVuaWVkOiAke21lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gNDAwIHx8XG4gICAgICAgICAgICBzdGF0dXMgPT09IDQyMiB8fFxuICAgICAgICAgICAgbG93ZXJNZXNzYWdlLmluY2x1ZGVzKFwiYmFkIHJlcXVlc3RcIikpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQmFkUmVxdWVzdEVycm9yKG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDQyOSB8fCBsb3dlck1lc3NhZ2UuaW5jbHVkZXMoXCJyYXRlIGxpbWl0XCIpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFNlY3JldEVycm9yKFwiU0VDUkVUX1BST1ZJREVSX1JBVEVfTElNSVRFRFwiLCBgUmF0ZSBsaW1pdGVkOiAke21lc3NhZ2V9YCwgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0dXMgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgKHN0YXR1cyAhPT0gdW5kZWZpbmVkICYmIHN0YXR1cyA+PSA1MDApIHx8XG4gICAgICAgICAgICBsb3dlck1lc3NhZ2UuaW5jbHVkZXMoXCJjb25uZWN0aW9uXCIpIHx8XG4gICAgICAgICAgICBsb3dlck1lc3NhZ2UuaW5jbHVkZXMoXCJ0aW1lb3V0XCIpIHx8XG4gICAgICAgICAgICBsb3dlck1lc3NhZ2UuaW5jbHVkZXMoXCJ1bmF2YWlsYWJsZVwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBTZWNyZXRFcnJvcihcIlNFQ1JFVF9QUk9WSURFUl9VTkFWQUlMQUJMRVwiLCBgUHJvdmlkZXIgdW5hdmFpbGFibGU6ICR7bWVzc2FnZX1gLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBJbnRlcm5hbEVycm9yKG1lc3NhZ2UpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVMzVmlaWEp1WlhSbGMxTmxZM0psZEZObGNuWnBZMlV1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SXVMaTh1TGk4dUxpOHVMaTl6Y21NdmMyVmpjbVYwY3k5cmRXSmxjbTVsZEdWekwwdDFZbVZ5Ym1WMFpYTlRaV055WlhSVFpYSjJhV05sTG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lKQlFVRkJMRTlCUVU4c1JVRkRUQ3haUVVGWkxFVkJRMW9zVTBGQlV5eEZRVU5VTEZWQlFWVXNSMEZGV0N4TlFVRk5MSGxDUVVGNVFpeERRVUZETzBGQlEycERMRTlCUVU4c1JVRkJSU3hyUWtGQmEwSXNSVUZCTWtJc1RVRkJUU3huUWtGQlowSXNRMEZCUXp0QlFVTTNSU3hQUVVGUExFVkJRMHdzZDBKQlFYZENMRVZCUTNoQ0xGZEJRVmNzUjBGTldpd3lRa0ZCTWtJN1FVRlZOVUlzVDBGQlR5eEZRVUZGTEd0Q1FVRnJRaXhGUVVGRkxHMUNRVUZ0UWl4RlFVRkZMREpDUVVFeVFqdEJRVU0zUlN4UFFVRlBMRVZCUTB3c2MwSkJRWE5DTEVWQlEzUkNMSGRDUVVGM1FpeEhRVVY2UWl3eVFrRkJNa0k3UVVGRk5VSXNUMEZCVHl4RlFVRkZMREpDUVVFeVFpeEZRVUZGTEhsRFFVRnpRenRCUVVNMVJTeFBRVUZQTEVWQlFVVXNWVUZCVlN4RlFVRkZMRk5CUVZNc1JVRkJSU3d5UTBGQmMwTTdRVUZEZEVVc1QwRkJUeXhGUVVOTUxHVkJRV1VzUlVGRFppeFRRVUZUTEVWQlExUXNZVUZCWVN4RlFVTmlMR0ZCUVdFc1JVRkRZaXhoUVVGaExFZEJRMlFzVFVGQlRTeDVRa0ZCZVVJc1EwRkJRenRCUVVWcVF5eE5RVUZOTEdkQ1FVRm5RaXhIUVVGSExGTkJRVk1zUTBGQlF6dEJRVU51UXl4TlFVRk5MR0ZCUVdFc1IwRkJSeXh4UWtGQmNVSXNRMEZCUXp0QlFVTTFReXhOUVVGTkxHbENRVUZwUWl4SFFVRkhMR05CUVdNc1EwRkJRenRCUVVONlF5eE5RVUZOTEcxQ1FVRnRRaXhIUVVGSExFZEJRVWNzYVVKQlFXbENMRlZCUVZVc1EwRkJRenRCUVVNelJDeE5RVUZOTEhWQ1FVRjFRaXhIUVVGSExFZEJRVWNzYVVKQlFXbENMR05CUVdNc1EwRkJRenRCUVVOdVJTeE5RVUZOTEdWQlFXVXNSMEZCUnl4SFFVRkhMR2xDUVVGcFFpeE5RVUZOTEVOQlFVTTdRVUZEYmtRc1RVRkJUU3hyUWtGQmEwSXNSMEZCUnl4SFFVRkhMR2xDUVVGcFFpeFRRVUZUTEVOQlFVTTdRVUZEZWtRc1RVRkJUU3h4UWtGQmNVSXNSMEZCUnl4SFFVRkhMR2xDUVVGcFFpeFpRVUZaTEVOQlFVTTdRVUZETDBRc1RVRkJUU3hwUWtGQmFVSXNSMEZCUnl4SFFVRkhMR2xDUVVGcFFpeFhRVUZYTEVOQlFVTTdRVUZETVVRc1RVRkJUU3h0UWtGQmJVSXNSMEZCUnl4SFFVRkhMR2xDUVVGcFFpeGhRVUZoTEVOQlFVTTdRVUZET1VRc1RVRkJUU3huUWtGQlowSXNSMEZCUnl4SFFVRkhMR2xDUVVGcFFpeHZRa0ZCYjBJc1EwRkJRenRCUVVWc1JTeE5RVUZOTEhGQ1FVRnhRaXhIUVVONlFpeHJRMEZCYTBNc1EwRkJRenRCUVVOeVF5eE5RVUZOTEdsQ1FVRnBRaXhIUVVGSExHbERRVUZwUXl4RFFVRkRPMEZCUlRWRUxGTkJRVk1zYjBKQlFXOUNMRU5CUVVNc1NVRkJXVHRKUVVONFF5eEpRVUZKTEVsQlFVa3NRMEZCUXl4TlFVRk5MRWRCUVVjc1IwRkJSeXhKUVVGSkxFTkJRVU1zY1VKQlFYRkNMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZGTEVOQlFVTTdVVUZETTBRc1RVRkJUU3hKUVVGSkxGZEJRVmNzUTBGRGJrSXNjVUpCUVhGQ0xFVkJRM0pDTEc5RFFVRnZReXhKUVVGSkxHbEdRVUZwUml4RFFVTXhTQ3hEUVVGRE8wbEJRMG9zUTBGQlF6dEJRVU5JTEVOQlFVTTdRVUZGUkN4VFFVRlRMSGxDUVVGNVFpeERRVUZETEZOQlFXbENPMGxCUTJ4RUxFbEJRVWtzVTBGQlV5eERRVUZETEUxQlFVMHNSMEZCUnl4RlFVRkZMRWxCUVVrc1EwRkJReXhwUWtGQmFVSXNRMEZCUXl4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExFVkJRVVVzUTBGQlF6dFJRVU5vUlN4TlFVRk5MRWxCUVVrc1YwRkJWeXhEUVVOdVFpeHhRa0ZCY1VJc1JVRkRja0lzYTBOQlFXdERMRk5CUVZNc2EwUkJRV3RFTEVOQlF6bEdMRU5CUVVNN1NVRkRTaXhEUVVGRE8wRkJRMGdzUTBGQlF6dEJRVVZFTEZOQlFWTXNUVUZCVFN4RFFVRkRMRXRCUVdkRE8wbEJRemxETEVsQlFVa3NRMEZCUXl4TFFVRkxPMUZCUVVVc1QwRkJUeXhUUVVGVExFTkJRVU03U1VGRE4wSXNUVUZCVFN4SlFVRkpMRWRCUVVjc1MwRkJTeXhaUVVGWkxFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXp0SlFVTTNSQ3hQUVVGUExFMUJRVTBzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTlCUVU4c1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRE8wRkJRM3BFTEVOQlFVTTdRVUZGUkN4VFFVRlRMRk5CUVZNc1EwRkJReXhIUVVGMVFqdEpRVU40UXl4SlFVRkpMRU5CUVVNc1IwRkJSenRSUVVGRkxFOUJRVThzVTBGQlV5eERRVUZETzBsQlF6TkNMRWxCUVVrc1EwRkJRenRSUVVOSUxFMUJRVTBzVFVGQlRTeEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03VVVGREwwSXNUMEZCVHl4TlFVRk5MRWxCUVVrc1QwRkJUeXhOUVVGTkxFdEJRVXNzVVVGQlVUdFpRVU42UXl4RFFVRkRMRU5CUVVVc1RVRkJhVU03V1VGRGNFTXNRMEZCUXl4RFFVRkRMRk5CUVZNc1EwRkJRenRKUVVOb1FpeERRVUZETzBsQlFVTXNUVUZCVFN4RFFVRkRPMUZCUTFBc1QwRkJUeXhUUVVGVExFTkJRVU03U1VGRGJrSXNRMEZCUXp0QlFVTklMRU5CUVVNN1FVRkZSRHM3T3pzN096czdPenM3TzBkQldVYzdRVUZEU0N4TlFVRk5MRTlCUVU4c2RVSkJRWGRDTEZOQlFWRXNkMEpCUnpWRE8wbEJTRVE3TzFGQlNWY3NZVUZCVVN4SFFVRnRRaXhaUVVGWkxFTkJRVU03U1VGbmFVSnVSQ3hEUVVGRE8wbEJPV2hDVnl4eFFrRkJjVUk3VVVGSE4wSXNUVUZCVFN4SFFVRkhMRWRCUVVjc01rSkJRVEpDTEVOQlFVTXNUMEZCVHl4RFFVRkRMRlZCUVZVc1EwRkJRenRSUVVNelJDeE5RVUZOTEZOQlFWTXNSMEZCUnl4VFFVRlRMRU5CUVVNc1IwRkJSeXhGUVVGRkxGTkJRVk1zUTBGQlF5eERRVUZETzFGQlF6VkRMRTFCUVUwc1ZVRkJWU3hIUVVGSExGTkJRVk1zUTBGQlF5eEhRVUZITEVWQlFVVXNWVUZCVlN4RFFVRkRMRU5CUVVNN1VVRkRPVU1zVFVGQlRTeFBRVUZQTEVkQlFVY3NVMEZCVXl4RFFVRkRMRWRCUVVjc1JVRkJSU3hQUVVGUExFTkJRVU1zUTBGQlF6dFJRVU40UXl4TlFVRk5MRTFCUVUwc1IwRkJSeXhUUVVGVExFTkJRVU1zUjBGQlJ5eEZRVUZGTEUxQlFVMHNRMEZCUXl4RFFVRkRPMUZCUTNSRExFbEJRVWtzUTBGQlF5eFRRVUZUTEVsQlFVa3NRMEZCUXl4VlFVRlZMRWxCUVVrc1EwRkJReXhQUVVGUExFbEJRVWtzUTBGQlF5eE5RVUZOTzFsQlFVVXNUMEZCVHl4VFFVRlRMRU5CUVVNN1VVRkRka1VzVDBGQlR6dFpRVU5NTEZGQlFWRXNSVUZCUlN4WlFVRlpPMWxCUTNSQ0xGTkJRVk03V1VGRFZDeFZRVUZWTzFsQlExWXNUMEZCVHp0WlFVTlFMRTFCUVUwN1dVRkRUaXhMUVVGTExFVkJRVVVzVTBGQlV5eERRVUZETEVkQlFVY3NRMEZCUXl4TFFVRkxMRU5CUVVNN1dVRkRNMElzVTBGQlV5eEZRVUZGTEZOQlFWTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1UwRkJVeXhEUVVGRE8xbEJRMjVETEUxQlFVMHNSVUZCUlN4VFFVRlRMRU5CUVVNc1IwRkJSeXhEUVVGRExFMUJRVTBzUTBGQlF6dFpRVU0zUWl4TlFVRk5MRVZCUVVVc1UwRkJVeXhEUVVGRExFZEJRVWNzUTBGQlF5eE5RVUZOTEVOQlFVTTdXVUZETjBJc1VVRkJVU3hGUVVGRkxGTkJRVk1zUTBGQlF5eEhRVUZITEVOQlFVTXNVVUZCVVN4RFFVRkRPMWxCUTJwRExFOUJRVThzUlVGQlJTeFRRVUZUTEVOQlFVTXNSMEZCUnl4RFFVRkRMRTlCUVU4c1EwRkJRenRaUVVNdlFpeFJRVUZSTEVWQlFVVXNVMEZCVXl4RFFVRkRMRWRCUVVjc1EwRkJReXhSUVVGUkxFTkJRVU03V1VGRGFrTXNUMEZCVHl4RlFVRkZMRk5CUVZNc1EwRkJReXhIUVVGSExFTkJRVU1zVDBGQlR5eERRVUZETzFsQlF5OUNMR0ZCUVdFc1JVRkJSU3hWUVVGVkxFTkJRVU1zUjBGQlJ5eERRVUZETEdGQlFXRXNRMEZCUXp0WlFVTTFReXhqUVVGakxFVkJRVVVzVlVGQlZTeERRVUZETEVkQlFVY3NRMEZCUXl4alFVRmpMRU5CUVVNN1UwRkRMME1zUTBGQlF6dEpRVU5LTEVOQlFVTTdTVUZGUkN4TFFVRkxMRU5CUVVNc1ZVRkJWU3hEUVVOa0xFZEJRVWNzU1VGQk5rSTdVVUZGYUVNc1RVRkJUU3hGUVVGRkxFZEJRVWNzUlVGQlJTeEhRVUZITEVOQlFVTXNUVUZCVFN4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFbEJRVWtzUlVGQlJTeFpRVUZaTEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJReTlFTEVsQlFVa3NRMEZCUXl4VlFVRlZMRU5CUTJoQ0xFTkJRVU03VVVGRFJpeE5RVUZOTEUxQlFVMHNSMEZEVml4SlFVRkpMRU5CUVVNc2FVSkJRV2xDTEVOQlFXZERMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU03VVVGRGFrVXNUVUZCVFN4VlFVRlZMRWRCUVVjc1NVRkJTU3hEUVVGRExHVkJRV1VzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0UlFVTm9SQ3hOUVVGTkxGTkJRVk1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNaMEpCUVdkQ0xFTkJRVU1zVFVGQlRTeEZRVUZGTEZWQlFWVXNRMEZCUXl4RFFVRkRPMUZCUXpWRUxFMUJRVTBzVVVGQlVTeEhRVUZyUXl4RlFVRkZMRWRCUVVjc1RVRkJUU3hGUVVGRkxGTkJRVk1zUlVGQlJTeERRVUZETzFGQlEzcEZMRTFCUVUwc1RVRkJUU3hIUVVGSExGVkJRVlVzUTBGQlF5eGhRVUZoTEVOQlFVTXNVMEZCVXl4RFFVRkRMRU5CUVVNN1VVRkRia1FzU1VGQlNTeERRVUZETEU5QlFVOHNSMEZCUnl4UlFVRlJMRU5CUVVNN1VVRkRlRUlzU1VGQlNTeERRVUZETEU5QlFVOHNSMEZCUnl4TlFVRk5MRU5CUVVNN1VVRkRkRUlzUjBGQlJ5eERRVUZETEU5QlFVOHNRMEZEVkN4M1JFRkJkMFFzVTBGQlV5eEhRVUZITEVOQlEzSkZMRU5CUVVNN1VVRkRSaXhQUVVGUExFVkJRVVVzVFVGQlRTeEZRVUZGTEZGQlFWRXNSVUZCUlN4TlFVRk5MRVZCUVVVc1EwRkJRenRKUVVOMFF5eERRVUZETzBsQlJVUXNTMEZCU3l4RFFVRkRMRXRCUVVzc1EwRkRWQ3hKUVVGblFpeEZRVU5vUWl4TFFVRlJMRVZCUTFJc1ZVRkJPRUlzUlVGQlJTeEZRVU5vUXl4SFFVRkhMRWxCUVRaQ08xRkJSV2hETEUxQlFVMHNSVUZCUlN4SFFVRkhMRVZCUVVVc1IwRkJSeXhEUVVGRExFMUJRVTBzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRVZCUVVVc1QwRkJUeXhGUVVGRkxFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6dFJRVU42UlN4TlFVRk5MR05CUVdNc1IwRkJSeXhKUVVGSkxFTkJRVU1zWVVGQllTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMUZCUTJoRUxFMUJRVTBzVTBGQlV5eEhRVUZITEVsQlFVa3NRMEZCUXl4elFrRkJjMElzUTBGQlF5eFBRVUZQTEVOQlFVTXNVMEZCVXl4RFFVRkRMRU5CUVVNN1VVRkRha1VzUjBGQlJ5eERRVUZETEU5QlFVOHNRMEZCUXl4clFrRkJhMElzWTBGQll5eHBRa0ZCYVVJc1UwRkJVeXhGUVVGRkxFTkJRVU1zUTBGQlF6dFJRVVV4UlN4TlFVRk5MRlZCUVZVc1IwRkJSeXh6UWtGQmMwSXNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRSUVVOcVJDeE5RVUZOTEVsQlFVa3NSMEZCUnl4SlFVRkpMRU5CUVVNc1YwRkJWeXhEUVVGRExHTkJRV01zUlVGQlJTeFRRVUZUTEVWQlFVVXNWVUZCVlN4RlFVRkZMRTlCUVU4c1EwRkJReXhEUVVGRE8xRkJSVGxGTEVsQlFVa3NRMEZCUXp0WlFVTklMRTFCUVUwc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eHpRa0ZCYzBJc1EwRkJReXhGUVVGRkxGTkJRVk1zUlVGQlJTeEpRVUZKTEVWQlFVVXNRMEZCUXl4RFFVRkRPMUZCUTJoRkxFTkJRVU03VVVGQlF5eFBRVUZQTEV0QlFVc3NSVUZCUlN4RFFVRkRPMWxCUTJZc1NVRkJTU3hKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEV0QlFVc3NRMEZCUXl4TFFVRkxMRWRCUVVjc1JVRkJSU3hEUVVGRE8yZENRVU5xUXl4SlFVRkpMRU5CUVVNN2IwSkJRMGdzVFVGQlRTeFJRVUZSTEVkQlFVY3NUVUZCVFN4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExHOUNRVUZ2UWl4RFFVRkRPM2RDUVVOMFJDeEpRVUZKTEVWQlFVVXNZMEZCWXp0M1FrRkRjRUlzVTBGQlV6dHhRa0ZEVml4RFFVRkRMRU5CUVVNN2IwSkJRMGdzU1VGQlNTeERRVUZETEZGQlFWRXNSMEZCUnp0M1FrRkRaQ3hIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNTVUZCU1N4RlFVRkZMRU5CUVVNN2QwSkJRM2hDTEdWQlFXVXNSVUZCUlN4UlFVRlJMRU5CUVVNc1VVRkJVU3hGUVVGRkxHVkJRV1U3Y1VKQlEzQkVMRU5CUVVNN2IwSkJRMFlzVFVGQlRTeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMSFZDUVVGMVFpeERRVUZETzNkQ1FVTjRReXhKUVVGSkxFVkJRVVVzWTBGQll6dDNRa0ZEY0VJc1UwRkJVenQzUWtGRFZDeEpRVUZKTzNGQ1FVTk1MRU5CUVVNc1EwRkJRenRuUWtGRFRDeERRVUZETzJkQ1FVRkRMRTlCUVU4c1dVRkJXU3hGUVVGRkxFTkJRVU03YjBKQlEzUkNMRTFCUVUwc1NVRkJTU3hEUVVGRExGVkJRVlVzUTBGQlF5eFpRVUZaTEVOQlFVTXNRMEZCUXp0blFrRkRkRU1zUTBGQlF6dFpRVU5JTEVOQlFVTTdhVUpCUVUwc1EwRkJRenRuUWtGRFRpeE5RVUZOTEVsQlFVa3NRMEZCUXl4VlFVRlZMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03V1VGREwwSXNRMEZCUXp0UlFVTklMRU5CUVVNN1VVRkZSQ3hQUVVGUE8xbEJRMHdzVVVGQlVTeEZRVUZGTEVsQlFVa3NRMEZCUXl4UlFVRlJPMWxCUTNaQ0xFbEJRVWtzUlVGQlJTeGpRVUZqTzFsQlEzQkNMRk5CUVZNN1dVRkRWQ3hQUVVGUExFVkJRVVVzVDBGQlR5eERRVUZETEU5QlFVODdXVUZEZUVJc1IwRkJSeXhGUVVGRkxHZENRVUZuUWl4VFFVRlRMRWxCUVVrc1kwRkJZeXhGUVVGRk8xTkJRMjVFTEVOQlFVTTdTVUZEU2l4RFFVRkRPMGxCUlVRc1MwRkJTeXhEUVVGRExGRkJRVkVzUTBGRFdpeFRRVUYxUXl4RlFVTjJReXhWUVVGcFF5eEZRVUZGTEVWQlEyNURMRWRCUVVjc1NVRkJOa0k3VVVGRmFFTXNUVUZCVFN4RlFVRkZMRWRCUVVjc1JVRkJSU3hIUVVGSExFTkJRVU1zVFVGQlRTeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1JVRkJSU3hWUVVGVkxFVkJRVVVzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUXpkRUxFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlEyUXNRMEZCUXp0UlFVTkdMRTFCUVUwc1JVRkJSU3hKUVVGSkxFVkJRVVVzVTBGQlV5eEZRVUZGTEU5QlFVOHNSVUZCUlN4SFFVRkhMRWxCUVVrc1EwRkJReXhuUWtGQlowSXNRMEZEZUVRc1UwRkJVeXhGUVVOVUxFOUJRVThzUTBGRFVpeERRVUZETzFGQlEwWXNSMEZCUnl4RFFVRkRMRTlCUVU4c1EwRkJReXh4UWtGQmNVSXNTVUZCU1N4dFFrRkJiVUlzVTBGQlV5eEZRVUZGTEVOQlFVTXNRMEZCUXp0UlFVVnlSU3hOUVVGTkxFMUJRVTBzUjBGQlJ5eE5RVUZOTEVsQlFVa3NRMEZCUXl4VlFVRlZMRU5CUVVNc1NVRkJTU3hGUVVGRkxGTkJRVk1zUTBGQlF5eERRVUZETzFGQlEzUkVMRWxCUVVrc1EwRkJReXhoUVVGaExFTkJRVU1zVFVGQlRTeEZRVUZGTEU5QlFVOHNRMEZCUXl4RFFVRkRPMUZCUlhCRExFMUJRVTBzUjBGQlJ5eEhRVUZITEUxQlFVMHNRMEZCUXl4SlFVRkpMRVZCUVVVc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4RFFVRkRPMUZCUXpWRExFbEJRVWtzUTBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXp0WlFVTlVMRTFCUVUwc1NVRkJTU3hoUVVGaExFTkJRM0pDTERoQ1FVRTRRaXhKUVVGSkxHMUNRVUZ0UWl4VFFVRlRMRWRCUVVjc1EwRkRiRVVzUTBGQlF6dFJRVU5LTEVOQlFVTTdVVUZGUkN4SlFVRkpMRTlCUVdkRExFTkJRVU03VVVGRGNrTXNTVUZCU1N4RFFVRkRPMWxCUTBnc1QwRkJUeXhIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlEyeENMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eEZRVUZGTEZGQlFWRXNRMEZCUXl4RFFVRkRMRkZCUVZFc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGRGFrSXNRMEZCUXp0UlFVTXZRaXhEUVVGRE8xRkJRVU1zVDBGQlR5eExRVUZMTEVWQlFVVXNRMEZCUXp0WlFVTm1MRTFCUVUwc1NVRkJTU3hYUVVGWExFTkJRMjVDTEN0Q1FVRXJRaXhGUVVNdlFpeDFRMEZCZFVNc1NVRkJTU3hOUVVGUExFdEJRV1VzUTBGQlF5eFBRVUZQTEVWQlFVVXNSVUZETTBVc1MwRkJZeXhEUVVObUxFTkJRVU03VVVGRFNpeERRVUZETzFGQlJVUXNUMEZCVHl4M1FrRkJkMElzUTBGQlF5eFBRVUZQTEVOQlFVMHNRMEZCUXp0SlFVTm9SQ3hEUVVGRE8wbEJSVVFzUzBGQlN5eERRVUZETEUxQlFVMHNRMEZEVml4VFFVRjFReXhGUVVOMlF5eFZRVUVyUWl4RlFVRkZMRVZCUTJwRExFZEJRVWNzU1VGQk5rSTdVVUZGYUVNc1RVRkJUU3hGUVVGRkxFZEJRVWNzUlVGQlJTeEhRVUZITEVOQlFVTXNUVUZCVFN4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFbEJRVWtzUlVGQlJTeFJRVUZSTEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPMUZCUXpORkxFMUJRVTBzUlVGQlJTeEpRVUZKTEVWQlFVVXNVMEZCVXl4RlFVRkZMRTlCUVU4c1JVRkJSU3hIUVVGSExFbEJRVWtzUTBGQlF5eG5Ra0ZCWjBJc1EwRkRlRVFzVTBGQlV5eEZRVU5VTEU5QlFVOHNRMEZEVWl4RFFVRkRPMUZCUTBZc1IwRkJSeXhEUVVGRExFOUJRVThzUTBGQlF5eHRRa0ZCYlVJc1NVRkJTU3h0UWtGQmJVSXNVMEZCVXl4RlFVRkZMRU5CUVVNc1EwRkJRenRSUVVWdVJTeEpRVUZKTEU5QlFVOHNSVUZCUlN4RFFVRkRPMWxCUTFvc1RVRkJUU3hOUVVGTkxFZEJRVWNzVFVGQlRTeEpRVUZKTEVOQlFVTXNWVUZCVlN4RFFVRkRMRWxCUVVrc1JVRkJSU3hUUVVGVExFTkJRVU1zUTBGQlF6dFpRVU4wUkN4SlFVRkpMRU5CUVVNc1lVRkJZU3hEUVVGRExFMUJRVTBzUlVGQlJTeFBRVUZQTEVOQlFVTXNRMEZCUXp0UlFVTjBReXhEUVVGRE8xRkJSVVFzU1VGQlNTeERRVUZETzFsQlEwZ3NUVUZCVFN4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExITkNRVUZ6UWl4RFFVRkRMRVZCUVVVc1NVRkJTU3hGUVVGRkxGTkJRVk1zUlVGQlJTeERRVUZETEVOQlFVTTdVVUZEYUVVc1EwRkJRenRSUVVGRExFOUJRVThzUzBGQlN5eEZRVUZGTEVOQlFVTTdXVUZEWml4TlFVRk5MRWxCUVVrc1EwRkJReXhWUVVGVkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdVVUZETDBJc1EwRkJRenRKUVVOSUxFTkJRVU03U1VGRlJDeExRVUZMTEVOQlFVTXNUVUZCVFN4RFFVTldMRk5CUVhWRExFVkJRM1pETEZWQlFTdENMRVZCUVVVc1JVRkRha01zUjBGQlJ5eEpRVUUyUWp0UlFVVm9ReXhOUVVGTkxFVkJRVVVzUjBGQlJ5eEZRVUZGTEVkQlFVY3NRMEZCUXl4TlFVRk5MRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeEZRVUZGTEZGQlFWRXNSVUZCUlN4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1VVRkRNMFVzVFVGQlRTeEZRVUZGTEVsQlFVa3NSVUZCUlN4VFFVRlRMRVZCUVVVc1QwRkJUeXhGUVVGRkxFZEJRVWNzU1VGQlNTeERRVUZETEdkQ1FVRm5RaXhEUVVONFJDeFRRVUZUTEVWQlExUXNUMEZCVHl4RFFVTlNMRU5CUVVNN1VVRkRSaXhIUVVGSExFTkJRVU1zVDBGQlR5eERRVUZETEhOQ1FVRnpRaXhKUVVGSkxIZENRVUYzUWl4VFFVRlRMRVZCUVVVc1EwRkJReXhEUVVGRE8xRkJSVE5GTEVsQlFVa3NRMEZCUXp0WlFVTklMRTFCUVUwc1RVRkJUU3hIUVVGSExFMUJRVTBzU1VGQlNTeERRVUZETEZWQlFWVXNRMEZCUXl4SlFVRkpMRVZCUVVVc1UwRkJVeXhEUVVGRExFTkJRVU03V1VGRGRFUXNTVUZCU1N4RFFVRkRMR0ZCUVdFc1EwRkJReXhOUVVGTkxFVkJRVVVzVDBGQlR5eERRVUZETEVOQlFVTTdXVUZEY0VNc1QwRkJUeXhKUVVGSkxFTkJRVU03VVVGRFpDeERRVUZETzFGQlFVTXNUMEZCVHl4TFFVRkxMRVZCUVVVc1EwRkJRenRaUVVObUxFbEJRVWtzUzBGQlN5eFpRVUZaTEdGQlFXRTdaMEpCUVVVc1QwRkJUeXhMUVVGTExFTkJRVU03V1VGRGFrUXNUVUZCVFN4TFFVRkxMRU5CUVVNN1VVRkRaQ3hEUVVGRE8wbEJRMGdzUTBGQlF6dEpRVVZFTEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUTFJc1ZVRkJPRUlzUlVGQlJTeEZRVU5vUXl4SFFVRkhMRWxCUVRaQ08xRkJSV2hETEUxQlFVMHNSVUZCUlN4SFFVRkhMRVZCUVVVc1IwRkJSeXhEUVVGRExFMUJRVTBzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRVZCUVVVc1RVRkJUU3hGUVVGRkxFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dFJRVU4yUlN4TlFVRk5MRk5CUVZNc1IwRkJSeXhKUVVGSkxFTkJRVU1zYzBKQlFYTkNMRU5CUVVNc1QwRkJUeXhEUVVGRExGTkJRVk1zUTBGQlF5eERRVUZETzFGQlEycEZMRWRCUVVjc1EwRkJReXhQUVVGUExFTkJRVU1zWjBOQlFXZERMRk5CUVZNc1JVRkJSU3hEUVVGRExFTkJRVU03VVVGRmVrUXNUVUZCVFN4TlFVRk5MRWRCUVhGQ0xFVkJRVVVzUTBGQlF6dFJRVU53UXl4SlFVRkpMR0ZCUVdsRExFTkJRVU03VVVGRmRFTXNTVUZCU1N4RFFVRkRPMWxCUTBnc1IwRkJSeXhEUVVGRE8yZENRVU5HTEUxQlFVMHNVVUZCVVN4SFFVRkhMRTFCUVUwc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eHZRa0ZCYjBJc1EwRkJRenR2UWtGRGRFUXNVMEZCVXp0dlFrRkRWQ3hoUVVGaExFVkJRVVVzUjBGQlJ5eGhRVUZoTEU5QlFVODdiMEpCUTNSRExFdEJRVXNzUlVGQlJTeEhRVUZITzI5Q1FVTldMRk5CUVZNc1JVRkJSU3hoUVVGaE8ybENRVU42UWl4RFFVRkRMRU5CUVVNN1owSkJSVWdzUzBGQlN5eE5RVUZOTEUxQlFVMHNTVUZCU1N4UlFVRlJMRU5CUVVNc1MwRkJTeXhKUVVGSkxFVkJRVVVzUlVGQlJTeERRVUZETzI5Q1FVTXhReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4VlFVRlZMRU5CUVVNc1RVRkJUU3hGUVVGRkxGTkJRVk1zUTBGQlF5eERRVUZETEVOQlFVTTdaMEpCUTJ4RUxFTkJRVU03WjBKQlJVUXNZVUZCWVN4SFFVRkhMRkZCUVZFc1EwRkJReXhSUVVGUkxFVkJRVVVzVTBGQlV5eERRVUZETzFsQlF5OURMRU5CUVVNc1VVRkJVU3hoUVVGaExFVkJRVVU3VVVGRE1VSXNRMEZCUXp0UlFVRkRMRTlCUVU4c1MwRkJTeXhGUVVGRkxFTkJRVU03V1VGRFppeE5RVUZOTEVsQlFVa3NRMEZCUXl4VlFVRlZMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03VVVGREwwSXNRMEZCUXp0UlFVVkVMRTFCUVUwc1VVRkJVU3hIUVVGSExFMUJRVTBzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4SlFVRkpMRVZCUVVVc1JVRkJSVHRaUVVOMFF5eEpRVUZKTEU5QlFVOHNRMEZCUXl4UFFVRlBMRXRCUVVzc1MwRkJTenRuUWtGQlJTeFBRVUZQTEV0QlFVc3NRMEZCUXp0WlFVTTFReXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEVsQlFVazdaMEpCUVVVc1QwRkJUeXhKUVVGSkxFTkJRVU03V1VGREwwSXNUMEZCVHl4TlFVRk5MRU5CUVVNc1QwRkJUeXhEUVVGRExFOUJRVThzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4TFFVRkxMRU5CUTNaRExFTkJRVU1zUTBGQlF5eEhRVUZITEVWQlFVVXNTMEZCU3l4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1MwRkJTeXhMUVVGTExFTkJRemRETEVOQlFVTTdVVUZEU2l4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVWSUxFMUJRVTBzVFVGQlRTeEhRVUZITEU5QlFVOHNRMEZCUXl4TlFVRk5MRWxCUVVrc1EwRkJReXhEUVVGRE8xRkJRMjVETEUxQlFVMHNSMEZCUnl4SFFVTlFMRTlCUVU4c1QwRkJUeXhEUVVGRExFdEJRVXNzUzBGQlN5eFJRVUZSTEVOQlFVTXNRMEZCUXl4RFFVRkRMRTFCUVUwc1IwRkJSeXhQUVVGUExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4VFFVRlRMRU5CUVVNN1VVRkRla1VzVDBGQlR5eFJRVUZSTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTFCUVUwc1JVRkJSU3hIUVVGSExFTkJRVU1zUTBGQlF6dEpRVU55UXl4RFFVRkRPMGxCUlVRc1MwRkJTeXhEUVVGRExGRkJRVkVzUTBGRFdpeFRRVUYxUXl4RlFVTjJReXhWUVVGcFF5eEZRVUZGTEVWQlEyNURMRWRCUVVjc1NVRkJOa0k3VVVGRmFFTXNUVUZCVFN4RlFVRkZMRWRCUVVjc1JVRkJSU3hIUVVGSExFTkJRVU1zVFVGQlRTeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1JVRkJSU3hWUVVGVkxFVkJRVVVzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUXpkRUxFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlEyUXNRMEZCUXp0UlFVTkdMRTFCUVUwc1JVRkJSU3hKUVVGSkxFVkJRVVVzVTBGQlV5eEZRVUZGTEU5QlFVOHNSVUZCUlN4SFFVRkhMRWxCUVVrc1EwRkJReXhuUWtGQlowSXNRMEZEZUVRc1UwRkJVeXhGUVVOVUxFOUJRVThzUTBGRFVpeERRVUZETzFGQlEwWXNSMEZCUnl4RFFVRkRMRTlCUVU4c1EwRkJReXdyUWtGQkswSXNTVUZCU1N4cFFrRkJhVUlzVTBGQlV5eEZRVUZGTEVOQlFVTXNRMEZCUXp0UlFVVTNSU3hKUVVGSkxFTkJRVU03V1VGRFNDeE5RVUZOTEUxQlFVMHNSMEZCUnl4TlFVRk5MRWxCUVVrc1EwRkJReXhWUVVGVkxFTkJRVU1zU1VGQlNTeEZRVUZGTEZOQlFWTXNRMEZCUXl4RFFVRkRPMWxCUTNSRUxFbEJRVWtzUTBGQlF5eGhRVUZoTEVOQlFVTXNUVUZCVFN4RlFVRkZMRTlCUVU4c1EwRkJReXhEUVVGRE8xbEJRM0JETEU5QlFVOHNTVUZCU1N4RFFVRkRMRlZCUVZVc1EwRkJReXhOUVVGTkxFVkJRVVVzVTBGQlV5eERRVUZETEVOQlFVTTdVVUZETlVNc1EwRkJRenRSUVVGRExFOUJRVThzUzBGQlN5eEZRVUZGTEVOQlFVTTdXVUZEWml4SlFVRkpMRXRCUVVzc1dVRkJXU3hoUVVGaE8yZENRVUZGTEU5QlFVOHNVMEZCVXl4RFFVRkRPMWxCUTNKRUxFMUJRVTBzUzBGQlN5eERRVUZETzFGQlEyUXNRMEZCUXp0SlFVTklMRU5CUVVNN1NVRkZSQ3hMUVVGTExFTkJRVU1zVFVGQlRTeERRVU5XTEZOQlFYVkRMRVZCUTNaRExFdEJRVkVzUlVGRFVpeFZRVUVyUWl4RlFVRkZMRVZCUTJwRExFZEJRVWNzU1VGQk5rSTdVVUZGYUVNc1RVRkJUU3hGUVVGRkxFbEJRVWtzUlVGQlJTeFRRVUZUTEVWQlFVVXNSMEZCUnl4SlFVRkpMRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNVMEZCVXl4RlFVRkZMRTlCUVU4c1EwRkJReXhEUVVGRE8xRkJRM1JGTEU5QlFVOHNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkRaaXhKUVVGSkxFVkJRMG9zUzBGQlN5eEZRVU5NTEVWQlFVVXNUMEZCVHl4RlFVRkZMRTlCUVU4c1EwRkJReXhWUVVGVkxFVkJRVVVzVTBGQlV5eEZRVUZGTEVWQlF6RkRMRWRCUVVjc1NVRkJTU3hEUVVOU0xFTkJRVU03U1VGRFNpeERRVUZETzBsQlJVOHNaVUZCWlN4RFFVRkRMRTFCUVhGRE8xRkJRek5FTEUxQlFVMHNWVUZCVlN4SFFVRkhMRWxCUVVrc1ZVRkJWU3hGUVVGRkxFTkJRVU03VVVGRGNFTXNTVUZCU1N4RFFVRkRPMWxCUTBnc1NVRkJTU3hOUVVGTkxFTkJRVU1zWTBGQll5eEZRVUZGTEVOQlFVTTdaMEpCUXpGQ0xGVkJRVlVzUTBGQlF5eGxRVUZsTEVWQlFVVXNRMEZCUXp0WlFVTXZRaXhEUVVGRE8ybENRVUZOTEVsQlFVa3NUVUZCVFN4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRE8yZENRVU42UWl4TlFVRk5MRmRCUVZjc1IwRkJSeXhsUVVGbExFTkJRVU03WjBKQlEzQkRMRTFCUVUwc1VVRkJVU3hIUVVGSExGbEJRVmtzUTBGQlF6dG5Ra0ZET1VJc1RVRkJUU3hYUVVGWExFZEJRVWNzWlVGQlpTeERRVUZETzJkQ1FVTndReXhWUVVGVkxFTkJRVU1zWlVGQlpTeERRVUZETzI5Q1FVTjZRaXhSUVVGUkxFVkJRVVU3ZDBKQlExSTdORUpCUTBVc1NVRkJTU3hGUVVGRkxGZEJRVmM3TkVKQlEycENMRTFCUVUwc1JVRkJSU3hOUVVGTkxFTkJRVU1zVFVGQlRUczBRa0ZEY2tJc1RVRkJUU3hGUVVGRkxFMUJRVTBzUTBGQlF5eE5RVUZOT3pSQ1FVTnlRaXhOUVVGTkxFVkJRVVVzVFVGQlRTeERRVUZETEUxQlFVMDdORUpCUTNKQ0xHRkJRV0VzUlVGQlJTeE5RVUZOTEVOQlFVTXNZVUZCWVR0NVFrRkRjRU03Y1VKQlEwWTdiMEpCUTBRc1MwRkJTeXhGUVVGRk8zZENRVU5NT3pSQ1FVTkZMRWxCUVVrc1JVRkJSU3hSUVVGUk96UkNRVU5rTEV0QlFVc3NSVUZCUlN4TlFVRk5MRU5CUVVNc1MwRkJTenMwUWtGRGJrSXNVMEZCVXl4RlFVRkZMRTFCUVUwc1EwRkJReXhUUVVGVE96UkNRVU16UWl4UlFVRlJMRVZCUVVVc1RVRkJUU3hEUVVGRExGRkJRVkU3TkVKQlEzcENMRkZCUVZFc1JVRkJSU3hOUVVGTkxFTkJRVU1zVVVGQlVUczBRa0ZEZWtJc1QwRkJUeXhGUVVGRkxFMUJRVTBzUTBGQlF5eFBRVUZQT3pSQ1FVTjJRaXhQUVVGUExFVkJRVVVzVFVGQlRTeERRVUZETEU5QlFVODdlVUpCUTNoQ08zRkNRVU5HTzI5Q1FVTkVMRkZCUVZFc1JVRkJSVHQzUWtGRFVqczBRa0ZEUlN4SlFVRkpMRVZCUVVVc1YwRkJWenMwUWtGRGFrSXNUMEZCVHl4RlFVRkZMRmRCUVZjN05FSkJRM0JDTEVsQlFVa3NSVUZCUlN4UlFVRlJPelJDUVVOa0xGTkJRVk1zUlVGQlJTeE5RVUZOTEVOQlFVTXNVMEZCVXp0NVFrRkROVUk3Y1VKQlEwWTdiMEpCUTBRc1kwRkJZeXhGUVVGRkxGZEJRVmM3YVVKQlF6VkNMRU5CUVVNc1EwRkJRenRaUVVOTUxFTkJRVU03YVVKQlFVMHNTVUZCU1N4TlFVRk5MRU5CUVVNc1ZVRkJWU3hGUVVGRkxFTkJRVU03WjBKQlF6ZENMRlZCUVZVc1EwRkJReXhaUVVGWkxFTkJRVU1zVFVGQlRTeERRVUZETEZWQlFWVXNRMEZCUXl4RFFVRkRPMWxCUXpkRExFTkJRVU03YVVKQlFVMHNRMEZCUXp0blFrRkRUaXhWUVVGVkxFTkJRVU1zWlVGQlpTeEZRVUZGTEVOQlFVTTdXVUZETDBJc1EwRkJRenRaUVVWRUxFbEJRVWtzVFVGQlRTeERRVUZETEU5QlFVOHNSVUZCUlN4RFFVRkRPMmRDUVVOdVFpeFZRVUZWTEVOQlFVTXNhVUpCUVdsQ0xFTkJRVU1zVFVGQlRTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPMWxCUXk5RExFTkJRVU03VVVGRFNDeERRVUZETzFGQlFVTXNUMEZCVHl4TFFVRkxMRVZCUVVVc1EwRkJRenRaUVVObUxFMUJRVTBzU1VGQlNTeERRVUZETEZWQlFWVXNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRSUVVNdlFpeERRVUZETzFGQlEwUXNUMEZCVHl4VlFVRlZMRU5CUVVNN1NVRkRjRUlzUTBGQlF6dEpRVVZQTEdkQ1FVRm5RaXhEUVVOMFFpeE5RVUZ4UXl4RlFVTnlReXhWUVVGelFqdFJRVVYwUWl4TlFVRk5MRk5CUVZNc1IwRkRZaXhOUVVGTkxFTkJRVU1zVTBGQlV6dFpRVU5vUWl4VlFVRlZMRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNWVUZCVlN4RFFVRkRMR2xDUVVGcFFpeEZRVUZGTEVOQlFVTXNSVUZCUlN4VFFVRlRPMWxCUTNSRkxGTkJRVk1zUTBGQlF6dFJRVU5hTEhsQ1FVRjVRaXhEUVVGRExGTkJRVk1zUTBGQlF5eERRVUZETzFGQlEzSkRMRTlCUVU4c1UwRkJVeXhEUVVGRE8wbEJRMjVDTEVOQlFVTTdTVUZGVHl4elFrRkJjMElzUTBGQlF5eFRRVUZyUWp0UlFVTXZReXhOUVVGTkxGRkJRVkVzUjBGQlJ5eFRRVUZUTEVsQlFVa3NTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhUUVVGVExFbEJRVWtzVTBGQlV5eERRVUZETzFGQlEycEZMSGxDUVVGNVFpeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRPMUZCUTNCRExFOUJRVThzVVVGQlVTeERRVUZETzBsQlEyeENMRU5CUVVNN1NVRkZUeXhuUWtGQlowSXNRMEZEZEVJc1UwRkJkVU1zUlVGRGRrTXNUMEZIUXp0UlFVVkVMRTFCUVUwc1NVRkJTU3hIUVVOU0xFOUJRVThzVTBGQlV5eExRVUZMTEZGQlFWRXNRMEZCUXl4RFFVRkRMRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU1zUTBGQlF5eFRRVUZUTEVOQlFVTXNTVUZCU1N4RFFVRkRPMUZCUXpkRUxFMUJRVTBzVTBGQlV5eEhRVU5pTEU5QlFVOHNRMEZCUXl4VFFVRlRPMWxCUTJwQ0xFTkJRVU1zVDBGQlR5eFRRVUZUTEV0QlFVc3NVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF5eERRVUZETEZOQlFWTXNRMEZCUXl4VFFVRlRMRU5CUVVNN1dVRkRha1VzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4VFFVRlRPMWxCUTNKQ0xGTkJRVk1zUTBGQlF6dFJRVU5hTEhsQ1FVRjVRaXhEUVVGRExGTkJRVk1zUTBGQlF5eERRVUZETzFGQlEzSkRMRTFCUVUwc1QwRkJUeXhIUVVOWUxFOUJRVThzUTBGQlF5eFBRVUZQTzFsQlEyWXNRMEZCUXl4UFFVRlBMRk5CUVZNc1MwRkJTeXhSUVVGUkxFTkJRVU1zUTBGQlF5eERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1UwRkJVeXhEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETzFGQlEyeEZMRTlCUVU4c1JVRkJSU3hKUVVGSkxFVkJRVVVzU1VGQlNTeERRVUZETEdGQlFXRXNRMEZCUXl4SlFVRkpMRU5CUVVNc1JVRkJSU3hUUVVGVExFVkJRVVVzVDBGQlR5eEZRVUZGTEVOQlFVTTdTVUZEYUVVc1EwRkJRenRKUVVWUExHRkJRV0VzUTBGQlF5eEpRVUZaTzFGQlEyaERMRWxCUVVrc1EwRkJRenRaUVVOSUxHdENRVUZyUWl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8xRkJRek5DTEVOQlFVTTdVVUZCUXl4UFFVRlBMRXRCUVVzc1JVRkJSU3hEUVVGRE8xbEJRMllzVFVGQlRTeEpRVUZKTEVOQlFVTXNWVUZCVlN4RFFVRkRMRXRCUVdNc1EwRkJReXhEUVVGRE8xRkJRM2hETEVOQlFVTTdVVUZEUkN4TlFVRk5MR05CUVdNc1IwRkJSeXh0UWtGQmJVSXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRSUVVOcVJDeHZRa0ZCYjBJc1EwRkJReXhqUVVGakxFTkJRVU1zUTBGQlF6dFJRVU55UXl4UFFVRlBMR05CUVdNc1EwRkJRenRKUVVONFFpeERRVUZETzBsQlJVOHNWMEZCVnl4RFFVTnFRaXhKUVVGWkxFVkJRMW9zVTBGQmFVSXNSVUZEYWtJc1ZVRkJiVU1zUlVGRGJrTXNUMEZCTWtJN1VVRkZNMElzVFVGQlRTeFhRVUZYTEVkQlFUSkNPMWxCUXpGRExFTkJRVU1zYlVKQlFXMUNMRU5CUVVNc1JVRkJSU3hWUVVGVkxFTkJRVU1zVVVGQlVUdFpRVU14UXl4RFFVRkRMSEZDUVVGeFFpeERRVUZETEVWQlFVVXNTVUZCU1N4SlFVRkpMRVZCUVVVc1EwRkJReXhYUVVGWExFVkJRVVU3VTBGRGJFUXNRMEZCUXp0UlFVVkdMRWxCUVVrc1QwRkJUeXhEUVVGRExGZEJRVmNzUlVGQlJTeERRVUZETzFsQlEzaENMRmRCUVZjc1EwRkJReXgxUWtGQmRVSXNRMEZCUXl4SFFVRkhMRTlCUVU4c1EwRkJReXhYUVVGWExFTkJRVU03VVVGRE4wUXNRMEZCUXp0UlFVTkVMRWxCUVVrc1QwRkJUeXhEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZETzFsQlEycENMRmRCUVZjc1EwRkJReXhsUVVGbExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRTlCUVU4c1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dFJRVU01UkN4RFFVRkRPMUZCUTBRc1NVRkJTU3hQUVVGUExFTkJRVU1zVDBGQlR5eEZRVUZGTEVOQlFVTTdXVUZEY0VJc1YwRkJWeXhEUVVGRExHdENRVUZyUWl4RFFVRkRMRWRCUVVjc1QwRkJUeXhEUVVGRExFOUJRVThzUTBGQlF6dFJRVU53UkN4RFFVRkRPMUZCUTBRc1NVRkJTU3hQUVVGUExFTkJRVU1zVVVGQlVTeEZRVUZGTEVOQlFVTTdXVUZEY2tJc1YwRkJWeXhEUVVGRExHbENRVUZwUWl4RFFVRkRMRWRCUVVjc1QwRkJUeXhEUVVGRExGRkJRVkVzUTBGQlF6dFJRVU53UkN4RFFVRkRPMUZCUTBRc1NVRkJTU3hQUVVGUExFTkJRVU1zVTBGQlV5eEZRVUZGTEVOQlFVTTdXVUZEZEVJc1YwRkJWeXhEUVVGRExHMUNRVUZ0UWl4RFFVRkRMRWRCUVVjc1QwRkJUeXhEUVVGRExGTkJRVk1zUTBGQlF6dFJRVU4yUkN4RFFVRkRPMUZCUTBRc1NVRkJTU3hQUVVGUExFTkJRVU1zWjBKQlFXZENMRVZCUVVVc1EwRkJRenRaUVVNM1FpeFhRVUZYTEVOQlFVTXNaMEpCUVdkQ0xFTkJRVU1zUjBGQlJ5eFBRVUZQTEVOQlFVTXNaMEpCUVdkQ0xFTkJRVU03VVVGRE0wUXNRMEZCUXp0UlFVVkVMRTlCUVU4N1dVRkRUQ3hWUVVGVkxFVkJRVVVzU1VGQlNUdFpRVU5vUWl4SlFVRkpMRVZCUVVVc1VVRkJVVHRaUVVOa0xFbEJRVWtzUlVGQlJTeFJRVUZSTzFsQlEyUXNVVUZCVVN4RlFVRkZPMmRDUVVOU0xFbEJRVWs3WjBKQlEwb3NVMEZCVXp0blFrRkRWQ3hOUVVGTkxFVkJRVVU3YjBKQlEwNHNRMEZCUXl4aFFVRmhMRU5CUVVNc1JVRkJSU3hOUVVGTk8ybENRVU40UWp0blFrRkRSQ3hYUVVGWE8yRkJRMW83V1VGRFJDeFZRVUZWTEVWQlFVVTdaMEpCUTFZc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4RlFVRkZMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zVlVGQlZTeERRVUZETzJGQlF5OURPMU5CUTBZc1EwRkJRenRKUVVOS0xFTkJRVU03U1VGRlR5eExRVUZMTEVOQlFVTXNWVUZCVlN4RFFVTjBRaXhKUVVGWkxFVkJRMW9zVTBGQmFVSTdVVUZGYWtJc1NVRkJTU3hEUVVGRE8xbEJRMGdzVDBGQlR5eE5RVUZOTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc2IwSkJRVzlDTEVOQlFVTXNSVUZCUlN4SlFVRkpMRVZCUVVVc1UwRkJVeXhGUVVGRkxFTkJRVU1zUTBGQlF6dFJRVU55UlN4RFFVRkRPMUZCUVVNc1QwRkJUeXhMUVVGTExFVkJRVVVzUTBGQlF6dFpRVU5tTEUxQlFVMHNTVUZCU1N4RFFVRkRMRlZCUVZVc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6dFJRVU12UWl4RFFVRkRPMGxCUTBnc1EwRkJRenRKUVVWUExHRkJRV0VzUTBGQlF5eE5RVUZuUWl4RlFVRkZMRTlCUVdkQ08xRkJRM1JFTEVsQlFVa3NRMEZCUXl4UFFVRlBPMWxCUVVVc1QwRkJUenRSUVVOeVFpeE5RVUZOTEUxQlFVMHNSMEZCUnl4TlFVRk5MRU5CUVVNc1VVRkJVU3hGUVVGRkxGZEJRVmNzUlVGQlJTeERRVUZETEd0Q1FVRnJRaXhEUVVGRExFTkJRVU03VVVGRGJFVXNTVUZCU1N4TlFVRk5MRXRCUVVzc1QwRkJUeXhGUVVGRkxFTkJRVU03V1VGRGRrSXNUVUZCVFN4SlFVRkpMR0ZCUVdFc1EwRkRja0lzVjBGQlZ5eE5RVUZOTEVOQlFVTXNVVUZCVVN4RlFVRkZMRWxCUVVrc1kwRkJZeXhQUVVGUExHRkJRV0VzUTBGRGJrVXNRMEZCUXp0UlFVTktMRU5CUVVNN1NVRkRTQ3hEUVVGRE8wbEJSVThzVlVGQlZTeERRVUZETEUxQlFXZENMRVZCUVVVc1UwRkJhVUk3VVVGRGNFUXNUVUZCVFN4WFFVRlhMRWRCUVVjc1RVRkJUU3hEUVVGRExGRkJRVkVzUlVGQlJTeFhRVUZYTEVsQlFVa3NSVUZCUlN4RFFVRkRPMUZCUTNaRUxFMUJRVTBzVTBGQlV5eEhRVUZITEZkQlFWY3NRMEZCUXl4eFFrRkJjVUlzUTBGQlF5eERRVUZETzFGQlEzSkVMRTFCUVUwc1NVRkJTU3hIUVVGSExFMUJRVTBzUTBGQlF5eFJRVUZSTEVWQlFVVXNTVUZCU1N4SlFVRkpMRVZCUVVVc1EwRkJRenRSUVVONlF5eFBRVUZQTzFsQlEwd3NVVUZCVVN4RlFVRkZMRWxCUVVrc1EwRkJReXhSUVVGUk8xbEJRM1pDTEVsQlFVazdXVUZEU2l4UFFVRlBMRVZCUVVVc1YwRkJWeXhEUVVGRExHdENRVUZyUWl4RFFVRkRPMWxCUTNoRExGTkJRVk1zUlVGQlJTeE5RVUZOTEVOQlFVTXNUVUZCVFN4RFFVRkRMRkZCUVZFc1JVRkJSU3hwUWtGQmFVSXNRMEZCUXp0WlFVTnlSQ3hUUVVGVExFVkJRVVVzVTBGQlV6dG5Ra0ZEYkVJc1EwRkJReXhEUVVGRExFbEJRVWtzU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXp0blFrRkRja0lzUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNc1VVRkJVU3hGUVVGRkxHbENRVUZwUWl4RFFVRkRPMWxCUXpsRExFOUJRVThzUlVGQlJTeEpRVUZKTzFsQlEySXNWMEZCVnl4RlFVRkZMRmRCUVZjc1EwRkJReXgxUWtGQmRVSXNRMEZCUXp0WlFVTnFSQ3hKUVVGSkxFVkJRVVVzVTBGQlV5eERRVUZETEZkQlFWY3NRMEZCUXl4bFFVRmxMRU5CUVVNc1EwRkJRenRaUVVNM1F5eFZRVUZWTEVWQlFVVXNUVUZCVFN4RFFVRkRMRkZCUVZFc1JVRkJSU3hIUVVGSE8xbEJRMmhETEVkQlFVY3NSVUZCUlN4blFrRkJaMElzVTBGQlV5eEpRVUZKTEVsQlFVa3NSVUZCUlR0VFFVTjZReXhEUVVGRE8wbEJRMG9zUTBGQlF6dEpRVVZQTEZGQlFWRXNRMEZCUXl4TFFVRmpPMUZCUXpkQ0xFbEJRVWtzUzBGQlN5eFpRVUZaTEZsQlFWazdXVUZCUlN4UFFVRlBMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU03VVVGRGNrUXNUVUZCVFN4VFFVRlRMRWRCUVVjc1MwRkJhVVFzUTBGQlF6dFJRVU53UlN4SlFVRkpMRTlCUVU4c1UwRkJVeXhGUVVGRkxFbEJRVWtzUzBGQlN5eFJRVUZSTzFsQlFVVXNUMEZCVHl4VFFVRlRMRU5CUVVNc1NVRkJTU3hEUVVGRE8xRkJReTlFTEVsQlFVa3NUMEZCVHl4VFFVRlRMRVZCUVVVc1ZVRkJWU3hMUVVGTExGRkJRVkVzUlVGQlJTeERRVUZETzFsQlF6bERMRTlCUVU4c1UwRkJVeXhEUVVGRExGVkJRVlVzUTBGQlF6dFJRVU01UWl4RFFVRkRPMUZCUTBRc1QwRkJUeXhUUVVGVExFTkJRVU03U1VGRGJrSXNRMEZCUXp0SlFVVlBMRk5CUVZNc1EwRkJReXhMUVVGak8xRkJRemxDTEUxQlFVMHNSMEZCUnl4SFFVRkhMRXRCU1Znc1EwRkJRenRSUVVOR0xFOUJRVThzUjBGQlJ5eEZRVUZGTEVsQlFVa3NSVUZCUlN4UFFVRlBMRWxCUVVrc1IwRkJSeXhGUVVGRkxFbEJRVWtzUlVGQlJTeE5RVUZOTEVsQlFVa3NSMEZCUnl4RlFVRkZMRTlCUVU4c1NVRkJTU3hIUVVGSExFVkJRVVVzU1VGQlNTeEpRVUZKTEdWQlFXVXNRMEZCUXp0SlFVTnFSeXhEUVVGRE8wbEJSVk1zVlVGQlZTeERRVUZETEV0QlFXTTdVVUZEYWtNc1NVRkJTU3hMUVVGTExGbEJRVmtzVTBGQlV6dFpRVUZGTEU5QlFVOHNTMEZCU3l4RFFVRkRPMUZCUXpkRExFMUJRVTBzVFVGQlRTeEhRVUZITEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03VVVGRGNFTXNUVUZCVFN4UFFVRlBMRWRCUVVjc1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXp0UlFVTjBReXhOUVVGTkxGbEJRVmtzUjBGQlJ5eFBRVUZQTEVOQlFVTXNWMEZCVnl4RlFVRkZMRU5CUVVNN1VVRkZNME1zU1VGRFJTeE5RVUZOTEV0QlFVc3NSMEZCUnp0WlFVTmtMRmxCUVZrc1EwRkJReXhSUVVGUkxFTkJRVU1zVjBGQlZ5eERRVUZETzFsQlEyeERMRmxCUVZrc1EwRkJReXhSUVVGUkxFTkJRVU1zUzBGQlN5eERRVUZETEVWQlF6VkNMRU5CUVVNN1dVRkRSQ3hQUVVGUExFbEJRVWtzWVVGQllTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPMUZCUTNCRExFTkJRVU03VVVGRlJDeEpRVU5GTEUxQlFVMHNTMEZCU3l4SFFVRkhPMWxCUTJRc1dVRkJXU3hEUVVGRExGRkJRVkVzUTBGQlF5eG5Ra0ZCWjBJc1EwRkJRenRaUVVOMlF5eFpRVUZaTEVOQlFVTXNVVUZCVVN4RFFVRkRMRlZCUVZVc1EwRkJRenRaUVVOcVF5eFpRVUZaTEVOQlFVTXNVVUZCVVN4RFFVRkRMRXRCUVVzc1EwRkJReXhGUVVNMVFpeERRVUZETzFsQlEwUXNUMEZCVHl4SlFVRkpMR0ZCUVdFc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF6dFJRVU53UXl4RFFVRkRPMUZCUlVRc1NVRkJTU3hOUVVGTkxFdEJRVXNzUjBGQlJ5eEpRVUZKTEZsQlFWa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1kwRkJZeXhEUVVGRExFVkJRVVVzUTBGQlF6dFpRVU0xUkN4UFFVRlBMRWxCUVVrc2EwSkJRV3RDTEVOQlFVTXNNRUpCUVRCQ0xFOUJRVThzUlVGQlJTeERRVUZETEVOQlFVTTdVVUZEY2tVc1EwRkJRenRSUVVWRUxFbEJRVWtzVFVGQlRTeExRVUZMTEVkQlFVY3NTVUZCU1N4WlFVRlpMRU5CUVVNc1VVRkJVU3hEUVVGRExGZEJRVmNzUTBGQlF5eEZRVUZGTEVOQlFVTTdXVUZEZWtRc1QwRkJUeXhKUVVGSkxHdENRVUZyUWl4RFFVRkRMSE5DUVVGelFpeFBRVUZQTEVWQlFVVXNRMEZCUXl4RFFVRkRPMUZCUTJwRkxFTkJRVU03VVVGRlJDeEpRVU5GTEUxQlFVMHNTMEZCU3l4SFFVRkhPMWxCUTJRc1RVRkJUU3hMUVVGTExFZEJRVWM3V1VGRFpDeFpRVUZaTEVOQlFVTXNVVUZCVVN4RFFVRkRMR0ZCUVdFc1EwRkJReXhGUVVOd1F5eERRVUZETzFsQlEwUXNUMEZCVHl4SlFVRkpMR1ZCUVdVc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF6dFJRVU4wUXl4RFFVRkRPMUZCUlVRc1NVRkJTU3hOUVVGTkxFdEJRVXNzUjBGQlJ5eEpRVUZKTEZsQlFWa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1dVRkJXU3hEUVVGRExFVkJRVVVzUTBGQlF6dFpRVU14UkN4UFFVRlBMRWxCUVVrc1YwRkJWeXhEUVVOd1FpdzRRa0ZCT0VJc1JVRkRPVUlzYVVKQlFXbENMRTlCUVU4c1JVRkJSU3hGUVVNeFFpeExRVUZqTEVOQlEyWXNRMEZCUXp0UlFVTktMRU5CUVVNN1VVRkZSQ3hKUVVORkxFMUJRVTBzUzBGQlN5eFRRVUZUTzFsQlEzQkNMRU5CUVVNc1RVRkJUU3hMUVVGTExGTkJRVk1zU1VGQlNTeE5RVUZOTEVsQlFVa3NSMEZCUnl4RFFVRkRPMWxCUTNaRExGbEJRVmtzUTBGQlF5eFJRVUZSTEVOQlFVTXNXVUZCV1N4RFFVRkRPMWxCUTI1RExGbEJRVmtzUTBGQlF5eFJRVUZSTEVOQlFVTXNVMEZCVXl4RFFVRkRPMWxCUTJoRExGbEJRVmtzUTBGQlF5eFJRVUZSTEVOQlFVTXNZVUZCWVN4RFFVRkRMRVZCUTNCRExFTkJRVU03V1VGRFJDeFBRVUZQTEVsQlFVa3NWMEZCVnl4RFFVTndRaXcyUWtGQk5rSXNSVUZETjBJc2VVSkJRWGxDTEU5QlFVOHNSVUZCUlN4RlFVTnNReXhMUVVGakxFTkJRMllzUTBGQlF6dFJRVU5LTEVOQlFVTTdVVUZGUkN4UFFVRlBMRWxCUVVrc1lVRkJZU3hEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETzBsQlEzQkRMRU5CUVVNN1EwRkRSaUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0I3WEc0Z0lFRndhVVY0WTJWd2RHbHZiaXhjYmlBZ1EyOXlaVll4UVhCcExGeHVJQ0JMZFdKbFEyOXVabWxuTEZ4dUlDQjBlWEJsSUZZeFUyVmpjbVYwTEZ4dWZTQm1jbTl0SUZ3aVFHdDFZbVZ5Ym1WMFpYTXZZMnhwWlc1MExXNXZaR1ZjSWp0Y2JtbHRjRzl5ZENCN0lFRjFkR2h2Y21sNllYUnBiMjVGY25KdmNpd2dkSGx3WlNCTllYbGlaVU52Ym5SbGVIUjFZV3hCY21jZ2ZTQm1jbTl0SUZ3aVFHUmxZMkZtTFhSekwyTnZjbVZjSWp0Y2JtbHRjRzl5ZENCN1hHNGdJRU5zYVdWdWRFSmhjMlZrVTJWamNtVjBVMlZ5ZG1salpTeGNiaUFnVTJWamNtVjBSWEp5YjNJc1hHNGdJRk5sWTNKbGRGQnliM1pwWkdWeUxGeHVJQ0JUWldOeVpYUk9ZVzFsTEZ4dUlDQlRaV055WlhSUVlYbHNiMkZrTEZ4dUlDQlRaV055WlhSU1pXWmxjbVZ1WTJVc1hHNGdJRk5sWTNKbGRFMWxkR0ZrWVhSaExGeHVmU0JtY205dElGd2lMaTR2TGk0dmMyVmpjbVYwY3k5amIzSmxYQ0k3WEc1cGJYQnZjblFnZTF4dUlDQlRkRzl5WlZObFkzSmxkRTl3ZEdsdmJuTXNYRzRnSUZKbGRISnBaWFpsVTJWamNtVjBUM0IwYVc5dWN5eGNiaUFnUkdWc1pYUmxVMlZqY21WMFQzQjBhVzl1Y3l4Y2JpQWdSWGhwYzNSelUyVmpjbVYwVDNCMGFXOXVjeXhjYmlBZ1RHbHpkRk5sWTNKbGRITlBjSFJwYjI1ekxGeHVJQ0JUWldOeVpYUk5aWFJoWkdGMFlVOXdkR2x2Ym5Nc1hHNGdJRkp2ZEdGMFpWTmxZM0psZEU5d2RHbHZibk1zWEc1OUlHWnliMjBnWENJdUxpOHVMaTl6WldOeVpYUnpMMk52Y21WY0lqdGNibWx0Y0c5eWRDQjdJSFpoYkdsa1lYUmxVMlZqY21WMFRtRnRaU3dnYm05eWJXRnNhWHBsVTJWamNtVjBUbUZ0WlNCOUlHWnliMjBnWENJdUxpOHVMaTl6WldOeVpYUnpMMk52Y21WY0lqdGNibWx0Y0c5eWRDQjdYRzRnSUhObGNtbGhiR2w2WlZObFkzSmxkRkJoZVd4dllXUXNYRzRnSUdSbGMyVnlhV0ZzYVhwbFUyVmpjbVYwVUdGNWJHOWhaQ3hjYmlBZ2RIbHdaU0JUWlhKcFlXeHBlbVZrVTJWamNtVjBVR0Y1Ykc5aFpDeGNibjBnWm5KdmJTQmNJaTR1THk0dUwzTmxZM0psZEhNdlkyOXlaVndpTzF4dWFXMXdiM0owSUhzZ1MzVmlaWEp1WlhSbGMxTmxZM0psZEZObGNuWnBZMlZEYjI1bWFXY2dmU0JtY205dElGd2lMaTlMZFdKbGNtNWxkR1Z6VTJWamNtVjBVMlZ5ZG1salpVTnZibVpwWjF3aU8xeHVhVzF3YjNKMElIc2dTM1ZpWlhKdVpYUmxjMU5sWTNKbGRFVnVkbWx5YjI1dFpXNTBJSDBnWm5KdmJTQmNJaTR2UzNWaVpYSnVaWFJsYzFObFkzSmxkRVZ1ZG1seWIyNXRaVzUwWENJN1hHNXBiWEJ2Y25RZ2V5QmxiblpDYjI5c1pXRnVMQ0JsYm5aVGRISnBibWNnZlNCbWNtOXRJRndpTGk0dkxpNHZjMmhoY21Wa0wyVnVkbWx5YjI1dFpXNTBWbUZzZFdWY0lqdGNibWx0Y0c5eWRDQjdYRzRnSUVKaFpGSmxjWFZsYzNSRmNuSnZjaXhjYmlBZ1FtRnpaVVZ5Y205eUxGeHVJQ0JEYjI1bWJHbGpkRVZ5Y205eUxGeHVJQ0JKYm5SbGNtNWhiRVZ5Y205eUxGeHVJQ0JPYjNSR2IzVnVaRVZ5Y205eUxGeHVmU0JtY205dElGd2lRR1JsWTJGbUxYUnpMMlJpTFdSbFkyOXlZWFJ2Y25OY0lqdGNibHh1WTI5dWMzUWdVRUZaVEU5QlJGOUVRVlJCWDB0RldTQTlJRndpY0dGNWJHOWhaRndpTzF4dVkyOXVjM1FnVFVGT1FVZEZSRjlNUVVKRlRDQTlJRndpWkdWallXWXRkSE11YVc4dmJXRnVZV2RsWkZ3aU8xeHVZMjl1YzNRZ1FVNU9UMVJCVkVsUFRsOVFVa1ZHU1ZnZ1BTQmNJbVJsWTJGbUxYUnpMbWx2TDF3aU8xeHVZMjl1YzNRZ1JVNURUMFJKVGtkZlFVNU9UMVJCVkVsUFRpQTlJR0FrZTBGT1RrOVVRVlJKVDA1ZlVGSkZSa2xZZldWdVkyOWthVzVuWUR0Y2JtTnZibk4wSUVOUFRsUkZUbFJmVkZsUVJWOUJUazVQVkVGVVNVOU9JRDBnWUNSN1FVNU9UMVJCVkVsUFRsOVFVa1ZHU1ZoOVkyOXVkR1Z1ZEMxMGVYQmxZRHRjYm1OdmJuTjBJRlJCUjFOZlFVNU9UMVJCVkVsUFRpQTlJR0FrZTBGT1RrOVVRVlJKVDA1ZlVGSkZSa2xZZlhSaFozTmdPMXh1WTI5dWMzUWdWa1ZTVTBsUFRsOUJUazVQVkVGVVNVOU9JRDBnWUNSN1FVNU9UMVJCVkVsUFRsOVFVa1ZHU1ZoOWRtVnljMmx2Ym1BN1hHNWpiMjV6ZENCVlVFUkJWRVZFWDBGVVgwRk9UazlVUVZSSlQwNGdQU0JnSkh0QlRrNVBWRUZVU1U5T1gxQlNSVVpKV0gxMWNHUmhkR1ZrTFdGMFlEdGNibU52Ym5OMElGUkZUa0ZPVkY5QlRrNVBWRUZVU1U5T0lEMGdZQ1I3UVU1T1QxUkJWRWxQVGw5UVVrVkdTVmg5ZEdWdVlXNTBMV2xrWUR0Y2JtTnZibk4wSUU5U1IxOVZUa2xVWDBGT1RrOVVRVlJKVDA0Z1BTQmdKSHRCVGs1UFZFRlVTVTlPWDFCU1JVWkpXSDF2Y21jdGRXNXBkQzFwWkdBN1hHNWpiMjV6ZENCUFYwNUZVbDlCVGs1UFZFRlVTVTlPSUQwZ1lDUjdRVTVPVDFSQlZFbFBUbDlRVWtWR1NWaDliM2R1WlhJdGNISnBibU5wY0dGc0xXbGtZRHRjYmx4dVkyOXVjM1FnUkU1VFgxTlZRa1JQVFVGSlRsOVFRVlJVUlZKT0lEMWNiaUFnTDE1YllTMTZNQzA1WFNoYkxXRXRlakF0T1M1ZEtsdGhMWG93TFRsZEtUOGtMenRjYm1OdmJuTjBJRVJPVTE5TVFVSkZURjlRUVZSVVJWSk9JRDBnTDE1YllTMTZNQzA1WFNoYkxXRXRlakF0T1YwcVcyRXRlakF0T1YwcFB5UXZPMXh1WEc1bWRXNWpkR2x2YmlCaGMzTmxjblJMZFdKbGNtNWxkR1Z6VG1GdFpTaHVZVzFsT2lCemRISnBibWNwT2lCMmIybGtJSHRjYmlBZ2FXWWdLRzVoYldVdWJHVnVaM1JvSUQ0Z01qVXpJSHg4SUNGRVRsTmZVMVZDUkU5TlFVbE9YMUJCVkZSRlVrNHVkR1Z6ZENodVlXMWxLU2tnZTF4dUlDQWdJSFJvY205M0lHNWxkeUJUWldOeVpYUkZjbkp2Y2loY2JpQWdJQ0FnSUZ3aVUwVkRVa1ZVWDBsT1ZrRk1TVVJmVGtGTlJWd2lMRnh1SUNBZ0lDQWdZRWx1ZG1Gc2FXUWdTM1ZpWlhKdVpYUmxjeUJ6WldOeVpYUWdibUZ0WlRvZ1hDSWtlMjVoYldWOVhDSXVJRTVoYldWeklHMTFjM1FnWW1VZ2JHOTNaWEpqWVhObElFUk9VeTB4TVRJeklITjFZbVJ2YldGcGJuTWdLR3hsZEhSbGNuTXNJR1JwWjJsMGN5d2dKeTBuTENCaGJtUWdKeTRuS1M1Z1hHNGdJQ0FnS1R0Y2JpQWdmVnh1ZlZ4dVhHNW1kVzVqZEdsdmJpQmhjM05sY25STGRXSmxjbTVsZEdWelRtRnRaWE53WVdObEtHNWhiV1Z6Y0dGalpUb2djM1J5YVc1bktUb2dkbTlwWkNCN1hHNGdJR2xtSUNodVlXMWxjM0JoWTJVdWJHVnVaM1JvSUQ0Z05qTWdmSHdnSVVST1UxOU1RVUpGVEY5UVFWUlVSVkpPTG5SbGMzUW9ibUZ0WlhOd1lXTmxLU2tnZTF4dUlDQWdJSFJvY205M0lHNWxkeUJUWldOeVpYUkZjbkp2Y2loY2JpQWdJQ0FnSUZ3aVUwVkRVa1ZVWDBsT1ZrRk1TVVJmVGtGTlJWd2lMRnh1SUNBZ0lDQWdZRWx1ZG1Gc2FXUWdTM1ZpWlhKdVpYUmxjeUJ1WVcxbGMzQmhZMlU2SUZ3aUpIdHVZVzFsYzNCaFkyVjlYQ0l1SUU1aGJXVnpjR0ZqWlhNZ2JYVnpkQ0JpWlNCc2IzZGxjbU5oYzJVZ1JFNVRMVEV4TWpNZ2JHRmlaV3h6TG1CY2JpQWdJQ0FwTzF4dUlDQjlYRzU5WEc1Y2JtWjFibU4wYVc5dUlIUnZSR0YwWlNoMllXeDFaVG9nUkdGMFpTQjhJSE4wY21sdVp5QjhJSFZ1WkdWbWFXNWxaQ2s2SUVSaGRHVWdmQ0IxYm1SbFptbHVaV1FnZTF4dUlDQnBaaUFvSVhaaGJIVmxLU0J5WlhSMWNtNGdkVzVrWldacGJtVmtPMXh1SUNCamIyNXpkQ0JrWVhSbElEMGdkbUZzZFdVZ2FXNXpkR0Z1WTJWdlppQkVZWFJsSUQ4Z2RtRnNkV1VnT2lCdVpYY2dSR0YwWlNoMllXeDFaU2s3WEc0Z0lISmxkSFZ5YmlCT2RXMWlaWEl1YVhOT1lVNG9aR0YwWlM1blpYUlVhVzFsS0NrcElEOGdkVzVrWldacGJtVmtJRG9nWkdGMFpUdGNibjFjYmx4dVpuVnVZM1JwYjI0Z2NHRnljMlZVWVdkektISmhkem9nYzNSeWFXNW5JSHdnZFc1a1pXWnBibVZrS1RvZ1VtVmpiM0prUEhOMGNtbHVaeXdnYzNSeWFXNW5QaUI4SUhWdVpHVm1hVzVsWkNCN1hHNGdJR2xtSUNnaGNtRjNLU0J5WlhSMWNtNGdkVzVrWldacGJtVmtPMXh1SUNCMGNua2dlMXh1SUNBZ0lHTnZibk4wSUhCaGNuTmxaQ0E5SUVwVFQwNHVjR0Z5YzJVb2NtRjNLVHRjYmlBZ0lDQnlaWFIxY200Z2NHRnljMlZrSUNZbUlIUjVjR1Z2WmlCd1lYSnpaV1FnUFQwOUlGd2liMkpxWldOMFhDSmNiaUFnSUNBZ0lEOGdLSEJoY25ObFpDQmhjeUJTWldOdmNtUThjM1J5YVc1bkxDQnpkSEpwYm1jK0tWeHVJQ0FnSUNBZ09pQjFibVJsWm1sdVpXUTdYRzRnSUgwZ1kyRjBZMmdnZTF4dUlDQWdJSEpsZEhWeWJpQjFibVJsWm1sdVpXUTdYRzRnSUgxY2JuMWNibHh1THlvcVhHNGdLaUJBWTJ4aGMzTWdTM1ZpWlhKdVpYUmxjMU5sWTNKbGRGTmxjblpwWTJWY2JpQXFJRUJ6ZFcxdFlYSjVJRTVoZEdsMlpTQkxkV0psY201bGRHVnpJRk5sWTNKbGRITWdZbUZqYTJWdVpDNWNiaUFxSUVCa1pYTmpjbWx3ZEdsdmJpQkpiWEJzWlcxbGJuUnpJSFJvWlNCN1FHeHBibXNnVTJWamNtVjBVMlZ5ZG1salpYMGdZMjl1ZEhKaFkzUWdiMjRnZEc5d0lHOW1YRzRnS2lCdVlXMWxjM0JoWTJWa0lFdDFZbVZ5Ym1WMFpYTWdZRk5sWTNKbGRHQWdiMkpxWldOMGN5NGdSV0ZqYUNCRVJVTkJSaUJ6WldOeVpYUWdhWE1nYzNSdmNtVmtJR0Z6SUdGdVhHNGdLaUJnVDNCaGNYVmxZQ0JUWldOeVpYUWdkMmh2YzJVZ1lIQmhlV3h2WVdSZ0lHUmhkR0VnYTJWNUlHaHZiR1J6SUhSb1pTQnpaWEpwWVd4cGVtVmtYRzRnS2lCN1FHeHBibXNnVTJWeWFXRnNhWHBsWkZObFkzSmxkRkJoZVd4dllXUjlJR1Z1ZG1Wc2IzQmxMQ0IzYUdsc1pTQmxibU52WkdsdVp5d2dZMjl1ZEdWdWRDQjBlWEJsTENCMFlXZHpMRnh1SUNvZ2JHOW5hV05oYkNCMlpYSnphVzl1TENCaGJtUWdiM2R1WlhKemFHbHdJR2hwYm5SeklHeHBkbVVnYVc0Z1lHUmxZMkZtTFhSekxtbHZMeXBnSUdGdWJtOTBZWFJwYjI1ekxseHVJQ3BjYmlBcUlFRjFkR2hsYm5ScFkyRjBhVzl1SUhWelpYTWdkR2hsSUhOMFlXNWtZWEprSUV0MVltVnlibVYwWlhNZ1kyeHBaVzUwSUhKbGMyOXNkWFJwYjI0Z2IzSmtaWEk2WEc0Z0tpQmxlSEJzYVdOcGRDQmdjMlZ5ZG1WeVlDQmpjbVZrWlc1MGFXRnNjeXdnWVc0Z1pYaHdiR2xqYVhRZ1lHdDFZbVZqYjI1bWFXZGdJSEJoZEdnc0lHQkxWVUpGUTA5T1JrbEhZQ3hjYmlBcUlHQitMeTVyZFdKbEwyTnZibVpwWjJBc0lHRnVaQ0JtYVc1aGJHeDVJSFJvWlNCcGJpMWpiSFZ6ZEdWeUlITmxjblpwWTJVZ1lXTmpiM1Z1ZEM1Y2JpQXFMMXh1Wlhod2IzSjBJR05zWVhOeklFdDFZbVZ5Ym1WMFpYTlRaV055WlhSVFpYSjJhV05sSUdWNGRHVnVaSE1nUTJ4cFpXNTBRbUZ6WldSVFpXTnlaWFJUWlhKMmFXTmxQRnh1SUNCRGIzSmxWakZCY0drc1hHNGdJRXQxWW1WeWJtVjBaWE5UWldOeVpYUlRaWEoyYVdObFEyOXVabWxuWEc0K0lIdGNiaUFnY21WaFpHOXViSGtnY0hKdmRtbGtaWEk2SUZObFkzSmxkRkJ5YjNacFpHVnlJRDBnWENKcmRXSmxjbTVsZEdWelhDSTdYRzVjYmlBZ2NISnZkR1ZqZEdWa0lHTnZibVpwWjBaeWIyMUZiblpwY205dWJXVnVkQ2dwT2x4dUlDQWdJSHdnUzNWaVpYSnVaWFJsYzFObFkzSmxkRk5sY25acFkyVkRiMjVtYVdkY2JpQWdJQ0I4SUhWdVpHVm1hVzVsWkNCN1hHNGdJQ0FnWTI5dWMzUWdaVzUySUQwZ1MzVmlaWEp1WlhSbGMxTmxZM0psZEVWdWRtbHliMjV0Wlc1MExuTmxZM0psZEhNdWEzVmlaWEp1WlhSbGN6dGNiaUFnSUNCamIyNXpkQ0J1WVcxbGMzQmhZMlVnUFNCbGJuWlRkSEpwYm1jb1pXNTJQeTV1WVcxbGMzQmhZMlVwTzF4dUlDQWdJR052Ym5OMElHdDFZbVZqYjI1bWFXY2dQU0JsYm5aVGRISnBibWNvWlc1MlB5NXJkV0psWTI5dVptbG5LVHRjYmlBZ0lDQmpiMjV6ZENCamIyNTBaWGgwSUQwZ1pXNTJVM1J5YVc1bktHVnVkajh1WTI5dWRHVjRkQ2s3WEc0Z0lDQWdZMjl1YzNRZ2MyVnlkbVZ5SUQwZ1pXNTJVM1J5YVc1bktHVnVkajh1YzJWeWRtVnlLVHRjYmlBZ0lDQnBaaUFvSVc1aGJXVnpjR0ZqWlNBbUppQWhhM1ZpWldOdmJtWnBaeUFtSmlBaFkyOXVkR1Y0ZENBbUppQWhjMlZ5ZG1WeUtTQnlaWFIxY200Z2RXNWtaV1pwYm1Wa08xeHVJQ0FnSUhKbGRIVnliaUI3WEc0Z0lDQWdJQ0J3Y205MmFXUmxjam9nWENKcmRXSmxjbTVsZEdWelhDSXNYRzRnSUNBZ0lDQnVZVzFsYzNCaFkyVXNYRzRnSUNBZ0lDQnJkV0psWTI5dVptbG5MRnh1SUNBZ0lDQWdZMjl1ZEdWNGRDeGNiaUFnSUNBZ0lITmxjblpsY2l4Y2JpQWdJQ0FnSUhSdmEyVnVPaUJsYm5aVGRISnBibWNvWlc1MkxuUnZhMlZ1S1N4Y2JpQWdJQ0FnSUhSdmEyVnVSbWxzWlRvZ1pXNTJVM1J5YVc1bktHVnVkaTUwYjJ0bGJrWnBiR1VwTEZ4dUlDQWdJQ0FnWTJGR2FXeGxPaUJsYm5aVGRISnBibWNvWlc1MkxtTmhSbWxzWlNrc1hHNGdJQ0FnSUNCallVUmhkR0U2SUdWdWRsTjBjbWx1WnlobGJuWXVZMkZFWVhSaEtTeGNiaUFnSUNBZ0lHTmxjblJHYVd4bE9pQmxiblpUZEhKcGJtY29aVzUyTG1ObGNuUkdhV3hsS1N4Y2JpQWdJQ0FnSUd0bGVVWnBiR1U2SUdWdWRsTjBjbWx1WnlobGJuWXVhMlY1Um1sc1pTa3NYRzRnSUNBZ0lDQmpaWEowUkdGMFlUb2daVzUyVTNSeWFXNW5LR1Z1ZGk1alpYSjBSR0YwWVNrc1hHNGdJQ0FnSUNCclpYbEVZWFJoT2lCbGJuWlRkSEpwYm1jb1pXNTJMbXRsZVVSaGRHRXBMRnh1SUNBZ0lDQWdjMnRwY0ZSTVUxWmxjbWxtZVRvZ1pXNTJRbTl2YkdWaGJpaGxibll1YzJ0cGNGUk1VMVpsY21sbWVTa3NYRzRnSUNBZ0lDQnpaWEoyYVdObFFXTmpiM1Z1ZERvZ1pXNTJRbTl2YkdWaGJpaGxibll1YzJWeWRtbGpaVUZqWTI5MWJuUXBMRnh1SUNBZ0lIMDdYRzRnSUgxY2JseHVJQ0JoYzNsdVl5QnBibWwwYVdGc2FYcGxLRnh1SUNBZ0lDNHVMbUZ5WjNNNklFMWhlV0psUTI5dWRHVjRkSFZoYkVGeVp6eGhibmsrWEc0Z0lDazZJRkJ5YjIxcGMyVThleUJqYjI1bWFXYzZJRXQxWW1WeWJtVjBaWE5UWldOeVpYUlRaWEoyYVdObFEyOXVabWxuT3lCamJHbGxiblE2SUVOdmNtVldNVUZ3YVNCOVBpQjdYRzRnSUNBZ1kyOXVjM1FnZXlCc2IyY2dmU0E5SUNoaGQyRnBkQ0IwYUdsekxteHZaME4wZUNoaGNtZHpMQ0JjSW1sdWFYUnBZV3hwZW1WY0lpd2dkSEoxWlNrcExtWnZjaWhjYmlBZ0lDQWdJSFJvYVhNdWFXNXBkR2xoYkdsNlpWeHVJQ0FnSUNrN1hHNGdJQ0FnWTI5dWMzUWdZMjl1Wm1sbklEMWNiaUFnSUNBZ0lIUm9hWE11WjJWMFEyOXVabWxuUm5KdmJVRnlaM004UzNWaVpYSnVaWFJsYzFObFkzSmxkRk5sY25acFkyVkRiMjVtYVdjK0tDNHVMbUZ5WjNNcE8xeHVJQ0FnSUdOdmJuTjBJR3QxWW1WRGIyNW1hV2NnUFNCMGFHbHpMbUoxYVd4a1MzVmlaVU52Ym1acFp5aGpiMjVtYVdjcE8xeHVJQ0FnSUdOdmJuTjBJRzVoYldWemNHRmpaU0E5SUhSb2FYTXVjbVZ6YjJ4MlpVNWhiV1Z6Y0dGalpTaGpiMjVtYVdjc0lHdDFZbVZEYjI1bWFXY3BPMXh1SUNBZ0lHTnZibk4wSUhKbGMyOXNkbVZrT2lCTGRXSmxjbTVsZEdWelUyVmpjbVYwVTJWeWRtbGpaVU52Ym1acFp5QTlJSHNnTGk0dVkyOXVabWxuTENCdVlXMWxjM0JoWTJVZ2ZUdGNiaUFnSUNCamIyNXpkQ0JqYkdsbGJuUWdQU0JyZFdKbFEyOXVabWxuTG0xaGEyVkJjR2xEYkdsbGJuUW9RMjl5WlZZeFFYQnBLVHRjYmlBZ0lDQjBhR2x6TGw5amIyNW1hV2NnUFNCeVpYTnZiSFpsWkR0Y2JpQWdJQ0IwYUdsekxsOWpiR2xsYm5RZ1BTQmpiR2xsYm5RN1hHNGdJQ0FnYkc5bkxuWmxjbUp2YzJVb1hHNGdJQ0FnSUNCZ1NXNXBkR2xoYkdsNlpXUWdTM1ZpWlhKdVpYUmxjeUJ6WldOeVpYUWdjMlZ5ZG1salpTQm1iM0lnYm1GdFpYTndZV05sSUZ3aUpIdHVZVzFsYzNCaFkyVjlYQ0pnWEc0Z0lDQWdLVHRjYmlBZ0lDQnlaWFIxY200Z2V5QmpiMjVtYVdjNklISmxjMjlzZG1Wa0xDQmpiR2xsYm5RZ2ZUdGNiaUFnZlZ4dVhHNGdJR0Z6ZVc1aklITjBiM0psUEZRZ1pYaDBaVzVrY3lCVFpXTnlaWFJRWVhsc2IyRmtJRDBnVTJWamNtVjBVR0Y1Ykc5aFpENG9YRzRnSUNBZ2JtRnRaVG9nVTJWamNtVjBUbUZ0WlN4Y2JpQWdJQ0IyWVd4MVpUb2dWQ3hjYmlBZ0lDQnZjSFJwYjI1ek9pQlRkRzl5WlZObFkzSmxkRTl3ZEdsdmJuTWdQU0I3ZlN4Y2JpQWdJQ0F1TGk1aGNtZHpPaUJOWVhsaVpVTnZiblJsZUhSMVlXeEJjbWM4WVc1NVBseHVJQ0FwT2lCUWNtOXRhWE5sUEZObFkzSmxkRkpsWm1WeVpXNWpaVDRnZTF4dUlDQWdJR052Ym5OMElIc2diRzluSUgwZ1BTQW9ZWGRoYVhRZ2RHaHBjeTVzYjJkRGRIZ29ZWEpuY3l3Z1hDSnpkRzl5WlZ3aUxDQjBjblZsS1NrdVptOXlLSFJvYVhNdWMzUnZjbVVwTzF4dUlDQWdJR052Ym5OMElHNXZjbTFoYkdsNlpXUk9ZVzFsSUQwZ2RHaHBjeTV1YjNKdFlXeHBlbVZPWVcxbEtHNWhiV1VwTzF4dUlDQWdJR052Ym5OMElHNWhiV1Z6Y0dGalpTQTlJSFJvYVhNdWNtVnpiMngyWlU1aGJXVnpjR0ZqWlU5d2RHbHZiaWh2Y0hScGIyNXpMbTVoYldWemNHRmpaU2s3WEc0Z0lDQWdiRzluTG5abGNtSnZjMlVvWUZOMGIzSnBibWNnYzJWamNtVjBJQ1I3Ym05eWJXRnNhWHBsWkU1aGJXVjlJR2x1SUc1aGJXVnpjR0ZqWlNBa2UyNWhiV1Z6Y0dGalpYMWdLVHRjYmx4dUlDQWdJR052Ym5OMElITmxjbWxoYkdsNlpXUWdQU0J6WlhKcFlXeHBlbVZUWldOeVpYUlFZWGxzYjJGa0tIWmhiSFZsS1R0Y2JpQWdJQ0JqYjI1emRDQmliMlI1SUQwZ2RHaHBjeTVpZFdsc1pGTmxZM0psZENodWIzSnRZV3hwZW1Wa1RtRnRaU3dnYm1GdFpYTndZV05sTENCelpYSnBZV3hwZW1Wa0xDQnZjSFJwYjI1ektUdGNibHh1SUNBZ0lIUnllU0I3WEc0Z0lDQWdJQ0JoZDJGcGRDQjBhR2x6TG1Oc2FXVnVkQzVqY21WaGRHVk9ZVzFsYzNCaFkyVmtVMlZqY21WMEtIc2dibUZ0WlhOd1lXTmxMQ0JpYjJSNUlIMHBPMXh1SUNBZ0lIMGdZMkYwWTJnZ0tHVnljbTl5S1NCN1hHNGdJQ0FnSUNCcFppQW9kR2hwY3k1emRHRjBkWE5QWmlobGNuSnZjaWtnUFQwOUlEUXdPU2tnZTF4dUlDQWdJQ0FnSUNCMGNua2dlMXh1SUNBZ0lDQWdJQ0FnSUdOdmJuTjBJR1Y0YVhOMGFXNW5JRDBnWVhkaGFYUWdkR2hwY3k1amJHbGxiblF1Y21WaFpFNWhiV1Z6Y0dGalpXUlRaV055WlhRb2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYm1GdFpUb2dibTl5YldGc2FYcGxaRTVoYldVc1hHNGdJQ0FnSUNBZ0lDQWdJQ0J1WVcxbGMzQmhZMlVzWEc0Z0lDQWdJQ0FnSUNBZ2ZTazdYRzRnSUNBZ0lDQWdJQ0FnWW05a2VTNXRaWFJoWkdGMFlTQTlJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDNHVMaWhpYjJSNUxtMWxkR0ZrWVhSaElIeDhJSHQ5S1N4Y2JpQWdJQ0FnSUNBZ0lDQWdJSEpsYzI5MWNtTmxWbVZ5YzJsdmJqb2daWGhwYzNScGJtY3ViV1YwWVdSaGRHRS9MbkpsYzI5MWNtTmxWbVZ5YzJsdmJpeGNiaUFnSUNBZ0lDQWdJQ0I5TzF4dUlDQWdJQ0FnSUNBZ0lHRjNZV2wwSUhSb2FYTXVZMnhwWlc1MExuSmxjR3hoWTJWT1lXMWxjM0JoWTJWa1UyVmpjbVYwS0h0Y2JpQWdJQ0FnSUNBZ0lDQWdJRzVoYldVNklHNXZjbTFoYkdsNlpXUk9ZVzFsTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdibUZ0WlhOd1lXTmxMRnh1SUNBZ0lDQWdJQ0FnSUNBZ1ltOWtlU3hjYmlBZ0lDQWdJQ0FnSUNCOUtUdGNiaUFnSUNBZ0lDQWdmU0JqWVhSamFDQW9jbVZ3YkdGalpVVnljbTl5S1NCN1hHNGdJQ0FnSUNBZ0lDQWdkR2h5YjNjZ2RHaHBjeTV3WVhKelpVVnljbTl5S0hKbGNHeGhZMlZGY25KdmNpazdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJSFJvY205M0lIUm9hWE11Y0dGeWMyVkZjbkp2Y2lobGNuSnZjaWs3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1WEc0Z0lDQWdjbVYwZFhKdUlIdGNiaUFnSUNBZ0lIQnliM1pwWkdWeU9pQjBhR2x6TG5CeWIzWnBaR1Z5TEZ4dUlDQWdJQ0FnYm1GdFpUb2dibTl5YldGc2FYcGxaRTVoYldVc1hHNGdJQ0FnSUNCdVlXMWxjM0JoWTJVc1hHNGdJQ0FnSUNCMlpYSnphVzl1T2lCdmNIUnBiMjV6TG5abGNuTnBiMjRzWEc0Z0lDQWdJQ0IxY21rNklHQnJkV0psY201bGRHVnpPaTh2Skh0dVlXMWxjM0JoWTJWOUx5UjdibTl5YldGc2FYcGxaRTVoYldWOVlDeGNiaUFnSUNCOU8xeHVJQ0I5WEc1Y2JpQWdZWE41Ym1NZ2NtVjBjbWxsZG1VOFZDQmxlSFJsYm1SeklGTmxZM0psZEZCaGVXeHZZV1FnUFNCVFpXTnlaWFJRWVhsc2IyRmtQaWhjYmlBZ0lDQnVZVzFsVDNKU1pXWTZJRk5sWTNKbGRFNWhiV1VnZkNCVFpXTnlaWFJTWldabGNtVnVZMlVzWEc0Z0lDQWdiM0IwYVc5dWN6b2dVbVYwY21sbGRtVlRaV055WlhSUGNIUnBiMjV6SUQwZ2UzMHNYRzRnSUNBZ0xpNHVZWEpuY3pvZ1RXRjVZbVZEYjI1MFpYaDBkV0ZzUVhKblBHRnVlVDVjYmlBZ0tUb2dVSEp2YldselpUeFVQaUI3WEc0Z0lDQWdZMjl1YzNRZ2V5QnNiMmNnZlNBOUlDaGhkMkZwZENCMGFHbHpMbXh2WjBOMGVDaGhjbWR6TENCY0luSmxkSEpwWlhabFhDSXNJSFJ5ZFdVcEtTNW1iM0lvWEc0Z0lDQWdJQ0IwYUdsekxuSmxkSEpwWlhabFhHNGdJQ0FnS1R0Y2JpQWdJQ0JqYjI1emRDQjdJRzVoYldVc0lHNWhiV1Z6Y0dGalpTd2dkbVZ5YzJsdmJpQjlJRDBnZEdocGN5NXlaWE52YkhabFVtVm1aWEpsYm1ObEtGeHVJQ0FnSUNBZ2JtRnRaVTl5VW1WbUxGeHVJQ0FnSUNBZ2IzQjBhVzl1YzF4dUlDQWdJQ2s3WEc0Z0lDQWdiRzluTG5abGNtSnZjMlVvWUZKbGRISnBaWFpwYm1jZ2MyVmpjbVYwSUNSN2JtRnRaWDBnWm5KdmJTQnVZVzFsYzNCaFkyVWdKSHR1WVcxbGMzQmhZMlY5WUNrN1hHNWNiaUFnSUNCamIyNXpkQ0J6WldOeVpYUWdQU0JoZDJGcGRDQjBhR2x6TG5KbFlXUlRaV055WlhRb2JtRnRaU3dnYm1GdFpYTndZV05sS1R0Y2JpQWdJQ0IwYUdsekxtRnpjMlZ5ZEZabGNuTnBiMjRvYzJWamNtVjBMQ0IyWlhKemFXOXVLVHRjYmx4dUlDQWdJR052Ym5OMElISmhkeUE5SUhObFkzSmxkQzVrWVhSaFB5NWJVRUZaVEU5QlJGOUVRVlJCWDB0RldWMDdYRzRnSUNBZ2FXWWdLQ0Z5WVhjcElIdGNiaUFnSUNBZ0lIUm9jbTkzSUc1bGR5Qk9iM1JHYjNWdVpFVnljbTl5S0Z4dUlDQWdJQ0FnSUNCZ1RtOGdjMlZqY21WMElIWmhiSFZsSUdadmRXNWtJR1p2Y2lCY0lpUjdibUZ0WlgxY0lpQnBiaUJ1WVcxbGMzQmhZMlVnWENJa2UyNWhiV1Z6Y0dGalpYMWNJbUJjYmlBZ0lDQWdJQ2s3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdiR1YwSUhCaGVXeHZZV1E2SUZObGNtbGhiR2w2WldSVFpXTnlaWFJRWVhsc2IyRmtPMXh1SUNBZ0lIUnllU0I3WEc0Z0lDQWdJQ0J3WVhsc2IyRmtJRDBnU2xOUFRpNXdZWEp6WlNoY2JpQWdJQ0FnSUNBZ1FuVm1abVZ5TG1aeWIyMG9jbUYzTENCY0ltSmhjMlUyTkZ3aUtTNTBiMU4wY21sdVp5aGNJblYwWmpoY0lpbGNiaUFnSUNBZ0lDa2dZWE1nVTJWeWFXRnNhWHBsWkZObFkzSmxkRkJoZVd4dllXUTdYRzRnSUNBZ2ZTQmpZWFJqYUNBb1pYSnliM0lwSUh0Y2JpQWdJQ0FnSUhSb2NtOTNJRzVsZHlCVFpXTnlaWFJGY25KdmNpaGNiaUFnSUNBZ0lDQWdYQ0pUUlVOU1JWUmZSRVZUUlZKSlFVeEpXa0ZVU1U5T1gwWkJTVXhGUkZ3aUxGeHVJQ0FnSUNBZ0lDQmdSbUZwYkdWa0lIUnZJSEJoY25ObElITmxZM0psZENCd1lYbHNiMkZrSUdadmNpQmNJaVI3Ym1GdFpYMWNJam9nSkhzb1pYSnliM0lnWVhNZ1JYSnliM0lwTG0xbGMzTmhaMlY5WUN4Y2JpQWdJQ0FnSUNBZ1pYSnliM0lnWVhNZ1JYSnliM0pjYmlBZ0lDQWdJQ2s3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdjbVYwZFhKdUlHUmxjMlZ5YVdGc2FYcGxVMlZqY21WMFVHRjViRzloWkNod1lYbHNiMkZrS1NCaGN5QlVPMXh1SUNCOVhHNWNiaUFnWVhONWJtTWdaR1ZzWlhSbEtGeHVJQ0FnSUc1aGJXVlBjbEpsWmpvZ1UyVmpjbVYwVG1GdFpTQjhJRk5sWTNKbGRGSmxabVZ5Wlc1alpTeGNiaUFnSUNCdmNIUnBiMjV6T2lCRVpXeGxkR1ZUWldOeVpYUlBjSFJwYjI1eklEMGdlMzBzWEc0Z0lDQWdMaTR1WVhKbmN6b2dUV0Y1WW1WRGIyNTBaWGgwZFdGc1FYSm5QR0Z1ZVQ1Y2JpQWdLVG9nVUhKdmJXbHpaVHgyYjJsa1BpQjdYRzRnSUNBZ1kyOXVjM1FnZXlCc2IyY2dmU0E5SUNoaGQyRnBkQ0IwYUdsekxteHZaME4wZUNoaGNtZHpMQ0JjSW1SbGJHVjBaVndpTENCMGNuVmxLU2t1Wm05eUtIUm9hWE11WkdWc1pYUmxLVHRjYmlBZ0lDQmpiMjV6ZENCN0lHNWhiV1VzSUc1aGJXVnpjR0ZqWlN3Z2RtVnljMmx2YmlCOUlEMGdkR2hwY3k1eVpYTnZiSFpsVW1WbVpYSmxibU5sS0Z4dUlDQWdJQ0FnYm1GdFpVOXlVbVZtTEZ4dUlDQWdJQ0FnYjNCMGFXOXVjMXh1SUNBZ0lDazdYRzRnSUNBZ2JHOW5MblpsY21KdmMyVW9ZRVJsYkdWMGFXNW5JSE5sWTNKbGRDQWtlMjVoYldWOUlHWnliMjBnYm1GdFpYTndZV05sSUNSN2JtRnRaWE53WVdObGZXQXBPMXh1WEc0Z0lDQWdhV1lnS0habGNuTnBiMjRwSUh0Y2JpQWdJQ0FnSUdOdmJuTjBJSE5sWTNKbGRDQTlJR0YzWVdsMElIUm9hWE11Y21WaFpGTmxZM0psZENodVlXMWxMQ0J1WVcxbGMzQmhZMlVwTzF4dUlDQWdJQ0FnZEdocGN5NWhjM05sY25SV1pYSnphVzl1S0hObFkzSmxkQ3dnZG1WeWMybHZiaWs3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdkSEo1SUh0Y2JpQWdJQ0FnSUdGM1lXbDBJSFJvYVhNdVkyeHBaVzUwTG1SbGJHVjBaVTVoYldWemNHRmpaV1JUWldOeVpYUW9leUJ1WVcxbExDQnVZVzFsYzNCaFkyVWdmU2s3WEc0Z0lDQWdmU0JqWVhSamFDQW9aWEp5YjNJcElIdGNiaUFnSUNBZ0lIUm9jbTkzSUhSb2FYTXVjR0Z5YzJWRmNuSnZjaWhsY25KdmNpazdYRzRnSUNBZ2ZWeHVJQ0I5WEc1Y2JpQWdZWE41Ym1NZ1pYaHBjM1J6S0Z4dUlDQWdJRzVoYldWUGNsSmxaam9nVTJWamNtVjBUbUZ0WlNCOElGTmxZM0psZEZKbFptVnlaVzVqWlN4Y2JpQWdJQ0J2Y0hScGIyNXpPaUJGZUdsemRITlRaV055WlhSUGNIUnBiMjV6SUQwZ2UzMHNYRzRnSUNBZ0xpNHVZWEpuY3pvZ1RXRjVZbVZEYjI1MFpYaDBkV0ZzUVhKblBHRnVlVDVjYmlBZ0tUb2dVSEp2YldselpUeGliMjlzWldGdVBpQjdYRzRnSUNBZ1kyOXVjM1FnZXlCc2IyY2dmU0E5SUNoaGQyRnBkQ0IwYUdsekxteHZaME4wZUNoaGNtZHpMQ0JjSW1WNGFYTjBjMXdpTENCMGNuVmxLU2t1Wm05eUtIUm9hWE11WlhocGMzUnpLVHRjYmlBZ0lDQmpiMjV6ZENCN0lHNWhiV1VzSUc1aGJXVnpjR0ZqWlN3Z2RtVnljMmx2YmlCOUlEMGdkR2hwY3k1eVpYTnZiSFpsVW1WbVpYSmxibU5sS0Z4dUlDQWdJQ0FnYm1GdFpVOXlVbVZtTEZ4dUlDQWdJQ0FnYjNCMGFXOXVjMXh1SUNBZ0lDazdYRzRnSUNBZ2JHOW5MblpsY21KdmMyVW9ZRU5vWldOcmFXNW5JR2xtSUhObFkzSmxkQ0FrZTI1aGJXVjlJR1Y0YVhOMGN5QnBiaUJ1WVcxbGMzQmhZMlVnSkh0dVlXMWxjM0JoWTJWOVlDazdYRzVjYmlBZ0lDQjBjbmtnZTF4dUlDQWdJQ0FnWTI5dWMzUWdjMlZqY21WMElEMGdZWGRoYVhRZ2RHaHBjeTV5WldGa1UyVmpjbVYwS0c1aGJXVXNJRzVoYldWemNHRmpaU2s3WEc0Z0lDQWdJQ0IwYUdsekxtRnpjMlZ5ZEZabGNuTnBiMjRvYzJWamNtVjBMQ0IyWlhKemFXOXVLVHRjYmlBZ0lDQWdJSEpsZEhWeWJpQjBjblZsTzF4dUlDQWdJSDBnWTJGMFkyZ2dLR1Z5Y205eUtTQjdYRzRnSUNBZ0lDQnBaaUFvWlhKeWIzSWdhVzV6ZEdGdVkyVnZaaUJPYjNSR2IzVnVaRVZ5Y205eUtTQnlaWFIxY200Z1ptRnNjMlU3WEc0Z0lDQWdJQ0IwYUhKdmR5Qmxjbkp2Y2p0Y2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNCaGMzbHVZeUJzYVhOMEtGeHVJQ0FnSUc5d2RHbHZibk02SUV4cGMzUlRaV055WlhSelQzQjBhVzl1Y3lBOUlIdDlMRnh1SUNBZ0lDNHVMbUZ5WjNNNklFMWhlV0psUTI5dWRHVjRkSFZoYkVGeVp6eGhibmsrWEc0Z0lDazZJRkJ5YjIxcGMyVThVMlZqY21WMFRXVjBZV1JoZEdGYlhUNGdlMXh1SUNBZ0lHTnZibk4wSUhzZ2JHOW5JSDBnUFNBb1lYZGhhWFFnZEdocGN5NXNiMmREZEhnb1lYSm5jeXdnWENKc2FYTjBYQ0lzSUhSeWRXVXBLUzVtYjNJb2RHaHBjeTVzYVhOMEtUdGNiaUFnSUNCamIyNXpkQ0J1WVcxbGMzQmhZMlVnUFNCMGFHbHpMbkpsYzI5c2RtVk9ZVzFsYzNCaFkyVlBjSFJwYjI0b2IzQjBhVzl1Y3k1dVlXMWxjM0JoWTJVcE8xeHVJQ0FnSUd4dlp5NTJaWEppYjNObEtHQk1hWE4wYVc1bklITmxZM0psZEhNZ2FXNGdibUZ0WlhOd1lXTmxJQ1I3Ym1GdFpYTndZV05sZldBcE8xeHVYRzRnSUNBZ1kyOXVjM1FnY21WemRXeDBPaUJUWldOeVpYUk5aWFJoWkdGMFlWdGRJRDBnVzEwN1hHNGdJQ0FnYkdWMElHTnZiblJwYm5WbFZHOXJaVzQ2SUhOMGNtbHVaeUI4SUhWdVpHVm1hVzVsWkR0Y2JseHVJQ0FnSUhSeWVTQjdYRzRnSUNBZ0lDQmtieUI3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJSEpsYzNCdmJuTmxJRDBnWVhkaGFYUWdkR2hwY3k1amJHbGxiblF1YkdsemRFNWhiV1Z6Y0dGalpXUlRaV055WlhRb2UxeHVJQ0FnSUNBZ0lDQWdJRzVoYldWemNHRmpaU3hjYmlBZ0lDQWdJQ0FnSUNCc1lXSmxiRk5sYkdWamRHOXlPaUJnSkh0TlFVNUJSMFZFWDB4QlFrVk1mVDEwY25WbFlDeGNiaUFnSUNBZ0lDQWdJQ0JzYVcxcGREb2dNVEF3TEZ4dUlDQWdJQ0FnSUNBZ0lGOWpiMjUwYVc1MVpUb2dZMjl1ZEdsdWRXVlViMnRsYml4Y2JpQWdJQ0FnSUNBZ2ZTazdYRzVjYmlBZ0lDQWdJQ0FnWm05eUlDaGpiMjV6ZENCelpXTnlaWFFnYjJZZ2NtVnpjRzl1YzJVdWFYUmxiWE1nZkh3Z1cxMHBJSHRjYmlBZ0lDQWdJQ0FnSUNCeVpYTjFiSFF1Y0hWemFDaDBhR2x6TG5SdlRXVjBZV1JoZEdFb2MyVmpjbVYwTENCdVlXMWxjM0JoWTJVcEtUdGNiaUFnSUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0FnSUdOdmJuUnBiblZsVkc5clpXNGdQU0J5WlhOd2IyNXpaUzV0WlhSaFpHRjBZVDh1WDJOdmJuUnBiblZsTzF4dUlDQWdJQ0FnZlNCM2FHbHNaU0FvWTI5dWRHbHVkV1ZVYjJ0bGJpazdYRzRnSUNBZ2ZTQmpZWFJqYUNBb1pYSnliM0lwSUh0Y2JpQWdJQ0FnSUhSb2NtOTNJSFJvYVhNdWNHRnljMlZGY25KdmNpaGxjbkp2Y2lrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnWTI5dWMzUWdabWxzZEdWeVpXUWdQU0J5WlhOMWJIUXVabWxzZEdWeUtDaHRaWFJoS1NBOVBpQjdYRzRnSUNBZ0lDQnBaaUFvYjNCMGFXOXVjeTVsYm1GaWJHVmtJRDA5UFNCbVlXeHpaU2tnY21WMGRYSnVJR1poYkhObE8xeHVJQ0FnSUNBZ2FXWWdLQ0Z2Y0hScGIyNXpMblJoWjNNcElISmxkSFZ5YmlCMGNuVmxPMXh1SUNBZ0lDQWdjbVYwZFhKdUlFOWlhbVZqZEM1bGJuUnlhV1Z6S0c5d2RHbHZibk11ZEdGbmN5a3VaWFpsY25rb1hHNGdJQ0FnSUNBZ0lDaGJhMlY1TENCMllXeDFaVjBwSUQwK0lHMWxkR0V1ZEdGbmN6OHVXMnRsZVYwZ1BUMDlJSFpoYkhWbFhHNGdJQ0FnSUNBcE8xeHVJQ0FnSUgwcE8xeHVYRzRnSUNBZ1kyOXVjM1FnYjJabWMyVjBJRDBnYjNCMGFXOXVjeTV2Wm1aelpYUWdQejhnTUR0Y2JpQWdJQ0JqYjI1emRDQmxibVFnUFZ4dUlDQWdJQ0FnZEhsd1pXOW1JRzl3ZEdsdmJuTXViR2x0YVhRZ1BUMDlJRndpYm5WdFltVnlYQ0lnUHlCdlptWnpaWFFnS3lCdmNIUnBiMjV6TG14cGJXbDBJRG9nZFc1a1pXWnBibVZrTzF4dUlDQWdJSEpsZEhWeWJpQm1hV3gwWlhKbFpDNXpiR2xqWlNodlptWnpaWFFzSUdWdVpDazdYRzRnSUgxY2JseHVJQ0JoYzNsdVl5QnRaWFJoWkdGMFlTaGNiaUFnSUNCdVlXMWxUM0pTWldZNklGTmxZM0psZEU1aGJXVWdmQ0JUWldOeVpYUlNaV1psY21WdVkyVXNYRzRnSUNBZ2IzQjBhVzl1Y3pvZ1UyVmpjbVYwVFdWMFlXUmhkR0ZQY0hScGIyNXpJRDBnZTMwc1hHNGdJQ0FnTGk0dVlYSm5jem9nVFdGNVltVkRiMjUwWlhoMGRXRnNRWEpuUEdGdWVUNWNiaUFnS1RvZ1VISnZiV2x6WlR4VFpXTnlaWFJOWlhSaFpHRjBZU0I4SUhWdVpHVm1hVzVsWkQ0Z2UxeHVJQ0FnSUdOdmJuTjBJSHNnYkc5bklIMGdQU0FvWVhkaGFYUWdkR2hwY3k1c2IyZERkSGdvWVhKbmN5d2dYQ0p0WlhSaFpHRjBZVndpTENCMGNuVmxLU2t1Wm05eUtGeHVJQ0FnSUNBZ2RHaHBjeTV0WlhSaFpHRjBZVnh1SUNBZ0lDazdYRzRnSUNBZ1kyOXVjM1FnZXlCdVlXMWxMQ0J1WVcxbGMzQmhZMlVzSUhabGNuTnBiMjRnZlNBOUlIUm9hWE11Y21WemIyeDJaVkpsWm1WeVpXNWpaU2hjYmlBZ0lDQWdJRzVoYldWUGNsSmxaaXhjYmlBZ0lDQWdJRzl3ZEdsdmJuTmNiaUFnSUNBcE8xeHVJQ0FnSUd4dlp5NTJaWEppYjNObEtHQkhaWFIwYVc1bklHMWxkR0ZrWVhSaElHWnZjaUJ6WldOeVpYUWdKSHR1WVcxbGZTQnBiaUJ1WVcxbGMzQmhZMlVnSkh0dVlXMWxjM0JoWTJWOVlDazdYRzVjYmlBZ0lDQjBjbmtnZTF4dUlDQWdJQ0FnWTI5dWMzUWdjMlZqY21WMElEMGdZWGRoYVhRZ2RHaHBjeTV5WldGa1UyVmpjbVYwS0c1aGJXVXNJRzVoYldWemNHRmpaU2s3WEc0Z0lDQWdJQ0IwYUdsekxtRnpjMlZ5ZEZabGNuTnBiMjRvYzJWamNtVjBMQ0IyWlhKemFXOXVLVHRjYmlBZ0lDQWdJSEpsZEhWeWJpQjBhR2x6TG5SdlRXVjBZV1JoZEdFb2MyVmpjbVYwTENCdVlXMWxjM0JoWTJVcE8xeHVJQ0FnSUgwZ1kyRjBZMmdnS0dWeWNtOXlLU0I3WEc0Z0lDQWdJQ0JwWmlBb1pYSnliM0lnYVc1emRHRnVZMlZ2WmlCT2IzUkdiM1Z1WkVWeWNtOXlLU0J5WlhSMWNtNGdkVzVrWldacGJtVmtPMXh1SUNBZ0lDQWdkR2h5YjNjZ1pYSnliM0k3WEc0Z0lDQWdmVnh1SUNCOVhHNWNiaUFnWVhONWJtTWdjbTkwWVhSbFBGUWdaWGgwWlc1a2N5QlRaV055WlhSUVlYbHNiMkZrSUQwZ1UyVmpjbVYwVUdGNWJHOWhaRDRvWEc0Z0lDQWdibUZ0WlU5eVVtVm1PaUJUWldOeVpYUk9ZVzFsSUh3Z1UyVmpjbVYwVW1WbVpYSmxibU5sTEZ4dUlDQWdJSFpoYkhWbE9pQlVMRnh1SUNBZ0lHOXdkR2x2Ym5NNklGSnZkR0YwWlZObFkzSmxkRTl3ZEdsdmJuTWdQU0I3ZlN4Y2JpQWdJQ0F1TGk1aGNtZHpPaUJOWVhsaVpVTnZiblJsZUhSMVlXeEJjbWM4WVc1NVBseHVJQ0FwT2lCUWNtOXRhWE5sUEZObFkzSmxkRkpsWm1WeVpXNWpaVDRnZTF4dUlDQWdJR052Ym5OMElIc2dibUZ0WlN3Z2JtRnRaWE53WVdObElIMGdQU0IwYUdsekxuSmxjMjlzZG1WU1pXWmxjbVZ1WTJVb2JtRnRaVTl5VW1WbUxDQnZjSFJwYjI1ektUdGNiaUFnSUNCeVpYUjFjbTRnZEdocGN5NXpkRzl5WlNoY2JpQWdJQ0FnSUc1aGJXVXNYRzRnSUNBZ0lDQjJZV3gxWlN4Y2JpQWdJQ0FnSUhzZ2RtVnljMmx2YmpvZ2IzQjBhVzl1Y3k1dVpYZFdaWEp6YVc5dUxDQnVZVzFsYzNCaFkyVWdmU3hjYmlBZ0lDQWdJQzR1TG1GeVozTmNiaUFnSUNBcE8xeHVJQ0I5WEc1Y2JpQWdjSEpwZG1GMFpTQmlkV2xzWkV0MVltVkRiMjVtYVdjb1kyOXVabWxuT2lCTGRXSmxjbTVsZEdWelUyVmpjbVYwVTJWeWRtbGpaVU52Ym1acFp5azZJRXQxWW1WRGIyNW1hV2NnZTF4dUlDQWdJR052Ym5OMElHdDFZbVZEYjI1bWFXY2dQU0J1WlhjZ1MzVmlaVU52Ym1acFp5Z3BPMXh1SUNBZ0lIUnllU0I3WEc0Z0lDQWdJQ0JwWmlBb1kyOXVabWxuTG5ObGNuWnBZMlZCWTJOdmRXNTBLU0I3WEc0Z0lDQWdJQ0FnSUd0MVltVkRiMjVtYVdjdWJHOWhaRVp5YjIxRGJIVnpkR1Z5S0NrN1hHNGdJQ0FnSUNCOUlHVnNjMlVnYVdZZ0tHTnZibVpwWnk1elpYSjJaWElwSUh0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnWTJ4MWMzUmxjazVoYldVZ1BTQmNJbVJsWTJGbUxXTnNkWE4wWlhKY0lqdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2RYTmxjazVoYldVZ1BTQmNJbVJsWTJGbUxYVnpaWEpjSWp0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnWTI5dWRHVjRkRTVoYldVZ1BTQmNJbVJsWTJGbUxXTnZiblJsZUhSY0lqdGNiaUFnSUNBZ0lDQWdhM1ZpWlVOdmJtWnBaeTVzYjJGa1JuSnZiVTl3ZEdsdmJuTW9lMXh1SUNBZ0lDQWdJQ0FnSUdOc2RYTjBaWEp6T2lCYlhHNGdJQ0FnSUNBZ0lDQWdJQ0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJRzVoYldVNklHTnNkWE4wWlhKT1lXMWxMRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQnpaWEoyWlhJNklHTnZibVpwWnk1elpYSjJaWElzWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJR05oUkdGMFlUb2dZMjl1Wm1sbkxtTmhSR0YwWVN4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnWTJGR2FXeGxPaUJqYjI1bWFXY3VZMkZHYVd4bExGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCemEybHdWRXhUVm1WeWFXWjVPaUJqYjI1bWFXY3VjMnRwY0ZSTVUxWmxjbWxtZVN4Y2JpQWdJQ0FnSUNBZ0lDQWdJSDBzWEc0Z0lDQWdJQ0FnSUNBZ1hTeGNiaUFnSUNBZ0lDQWdJQ0IxYzJWeWN6b2dXMXh1SUNBZ0lDQWdJQ0FnSUNBZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCdVlXMWxPaUIxYzJWeVRtRnRaU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdkRzlyWlc0NklHTnZibVpwWnk1MGIydGxiaXhjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdkRzlyWlc1R2FXeGxPaUJqYjI1bWFXY3VkRzlyWlc1R2FXeGxMRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQmpaWEowUkdGMFlUb2dZMjl1Wm1sbkxtTmxjblJFWVhSaExGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCalpYSjBSbWxzWlRvZ1kyOXVabWxuTG1ObGNuUkdhV3hsTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0JyWlhsRVlYUmhPaUJqYjI1bWFXY3VhMlY1UkdGMFlTeGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2EyVjVSbWxzWlRvZ1kyOXVabWxuTG10bGVVWnBiR1VzWEc0Z0lDQWdJQ0FnSUNBZ0lDQjlMRnh1SUNBZ0lDQWdJQ0FnSUYwc1hHNGdJQ0FnSUNBZ0lDQWdZMjl1ZEdWNGRITTZJRnRjYmlBZ0lDQWdJQ0FnSUNBZ0lIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2JtRnRaVG9nWTI5dWRHVjRkRTVoYldVc1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUdOc2RYTjBaWEk2SUdOc2RYTjBaWEpPWVcxbExGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCMWMyVnlPaUIxYzJWeVRtRnRaU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdibUZ0WlhOd1lXTmxPaUJqYjI1bWFXY3VibUZ0WlhOd1lXTmxMRnh1SUNBZ0lDQWdJQ0FnSUNBZ2ZTeGNiaUFnSUNBZ0lDQWdJQ0JkTEZ4dUlDQWdJQ0FnSUNBZ0lHTjFjbkpsYm5SRGIyNTBaWGgwT2lCamIyNTBaWGgwVG1GdFpTeGNiaUFnSUNBZ0lDQWdmU2s3WEc0Z0lDQWdJQ0I5SUdWc2MyVWdhV1lnS0dOdmJtWnBaeTVyZFdKbFkyOXVabWxuS1NCN1hHNGdJQ0FnSUNBZ0lHdDFZbVZEYjI1bWFXY3ViRzloWkVaeWIyMUdhV3hsS0dOdmJtWnBaeTVyZFdKbFkyOXVabWxuS1R0Y2JpQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUd0MVltVkRiMjVtYVdjdWJHOWhaRVp5YjIxRVpXWmhkV3gwS0NrN1hHNGdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lHbG1JQ2hqYjI1bWFXY3VZMjl1ZEdWNGRDa2dlMXh1SUNBZ0lDQWdJQ0JyZFdKbFEyOXVabWxuTG5ObGRFTjFjbkpsYm5SRGIyNTBaWGgwS0dOdmJtWnBaeTVqYjI1MFpYaDBLVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlJR05oZEdOb0lDaGxjbkp2Y2lrZ2UxeHVJQ0FnSUNBZ2RHaHliM2NnZEdocGN5NXdZWEp6WlVWeWNtOXlLR1Z5Y205eUtUdGNiaUFnSUNCOVhHNGdJQ0FnY21WMGRYSnVJR3QxWW1WRGIyNW1hV2M3WEc0Z0lIMWNibHh1SUNCd2NtbDJZWFJsSUhKbGMyOXNkbVZPWVcxbGMzQmhZMlVvWEc0Z0lDQWdZMjl1Wm1sbk9pQkxkV0psY201bGRHVnpVMlZqY21WMFUyVnlkbWxqWlVOdmJtWnBaeXhjYmlBZ0lDQnJkV0psUTI5dVptbG5PaUJMZFdKbFEyOXVabWxuWEc0Z0lDazZJSE4wY21sdVp5QjdYRzRnSUNBZ1kyOXVjM1FnYm1GdFpYTndZV05sSUQxY2JpQWdJQ0FnSUdOdmJtWnBaeTV1WVcxbGMzQmhZMlVnZkh4Y2JpQWdJQ0FnSUd0MVltVkRiMjVtYVdjdVoyVjBRMjl1ZEdWNGRFOWlhbVZqZENocmRXSmxRMjl1Wm1sbkxtZGxkRU4xY25KbGJuUkRiMjUwWlhoMEtDa3BQeTV1WVcxbGMzQmhZMlVnZkh4Y2JpQWdJQ0FnSUZ3aVpHVm1ZWFZzZEZ3aU8xeHVJQ0FnSUdGemMyVnlkRXQxWW1WeWJtVjBaWE5PWVcxbGMzQmhZMlVvYm1GdFpYTndZV05sS1R0Y2JpQWdJQ0J5WlhSMWNtNGdibUZ0WlhOd1lXTmxPMXh1SUNCOVhHNWNiaUFnY0hKcGRtRjBaU0J5WlhOdmJIWmxUbUZ0WlhOd1lXTmxUM0IwYVc5dUtHNWhiV1Z6Y0dGalpUODZJSE4wY21sdVp5azZJSE4wY21sdVp5QjdYRzRnSUNBZ1kyOXVjM1FnY21WemIyeDJaV1FnUFNCdVlXMWxjM0JoWTJVZ2ZId2dkR2hwY3k1amIyNW1hV2N1Ym1GdFpYTndZV05sSUh4OElGd2laR1ZtWVhWc2RGd2lPMXh1SUNBZ0lHRnpjMlZ5ZEV0MVltVnlibVYwWlhOT1lXMWxjM0JoWTJVb2NtVnpiMngyWldRcE8xeHVJQ0FnSUhKbGRIVnliaUJ5WlhOdmJIWmxaRHRjYmlBZ2ZWeHVYRzRnSUhCeWFYWmhkR1VnY21WemIyeDJaVkpsWm1WeVpXNWpaU2hjYmlBZ0lDQnVZVzFsVDNKU1pXWTZJRk5sWTNKbGRFNWhiV1VnZkNCVFpXTnlaWFJTWldabGNtVnVZMlVzWEc0Z0lDQWdiM0IwYVc5dWN6b2dlMXh1SUNBZ0lDQWdibUZ0WlhOd1lXTmxQem9nYzNSeWFXNW5PMXh1SUNBZ0lDQWdkbVZ5YzJsdmJqODZJSE4wY21sdVp6dGNiaUFnSUNCOVhHNGdJQ2s2SUhzZ2JtRnRaVG9nYzNSeWFXNW5PeUJ1WVcxbGMzQmhZMlU2SUhOMGNtbHVaenNnZG1WeWMybHZiajg2SUhOMGNtbHVaeUI5SUh0Y2JpQWdJQ0JqYjI1emRDQnVZVzFsSUQxY2JpQWdJQ0FnSUhSNWNHVnZaaUJ1WVcxbFQzSlNaV1lnUFQwOUlGd2ljM1J5YVc1blhDSWdQeUJ1WVcxbFQzSlNaV1lnT2lCdVlXMWxUM0pTWldZdWJtRnRaVHRjYmlBZ0lDQmpiMjV6ZENCdVlXMWxjM0JoWTJVZ1BWeHVJQ0FnSUNBZ2IzQjBhVzl1Y3k1dVlXMWxjM0JoWTJVZ2ZIeGNiaUFnSUNBZ0lDaDBlWEJsYjJZZ2JtRnRaVTl5VW1WbUlEMDlQU0JjSW5OMGNtbHVaMXdpSUQ4Z2RXNWtaV1pwYm1Wa0lEb2dibUZ0WlU5eVVtVm1MbTVoYldWemNHRmpaU2tnZkh4Y2JpQWdJQ0FnSUhSb2FYTXVZMjl1Wm1sbkxtNWhiV1Z6Y0dGalpTQjhmRnh1SUNBZ0lDQWdYQ0prWldaaGRXeDBYQ0k3WEc0Z0lDQWdZWE56WlhKMFMzVmlaWEp1WlhSbGMwNWhiV1Z6Y0dGalpTaHVZVzFsYzNCaFkyVXBPMXh1SUNBZ0lHTnZibk4wSUhabGNuTnBiMjRnUFZ4dUlDQWdJQ0FnYjNCMGFXOXVjeTUyWlhKemFXOXVJSHg4WEc0Z0lDQWdJQ0FvZEhsd1pXOW1JRzVoYldWUGNsSmxaaUE5UFQwZ1hDSnpkSEpwYm1kY0lpQS9JSFZ1WkdWbWFXNWxaQ0E2SUc1aGJXVlBjbEpsWmk1MlpYSnphVzl1S1R0Y2JpQWdJQ0J5WlhSMWNtNGdleUJ1WVcxbE9pQjBhR2x6TG01dmNtMWhiR2w2WlU1aGJXVW9ibUZ0WlNrc0lHNWhiV1Z6Y0dGalpTd2dkbVZ5YzJsdmJpQjlPMXh1SUNCOVhHNWNiaUFnY0hKcGRtRjBaU0J1YjNKdFlXeHBlbVZPWVcxbEtHNWhiV1U2SUhOMGNtbHVaeWs2SUhOMGNtbHVaeUI3WEc0Z0lDQWdkSEo1SUh0Y2JpQWdJQ0FnSUhaaGJHbGtZWFJsVTJWamNtVjBUbUZ0WlNodVlXMWxLVHRjYmlBZ0lDQjlJR05oZEdOb0lDaGxjbkp2Y2lrZ2UxeHVJQ0FnSUNBZ2RHaHliM2NnZEdocGN5NXdZWEp6WlVWeWNtOXlLR1Z5Y205eUlHRnpJRVZ5Y205eUtUdGNiaUFnSUNCOVhHNGdJQ0FnWTI5dWMzUWdibTl5YldGc2FYcGxaRTVoYldVZ1BTQnViM0p0WVd4cGVtVlRaV055WlhST1lXMWxLRzVoYldVcE8xeHVJQ0FnSUdGemMyVnlkRXQxWW1WeWJtVjBaWE5PWVcxbEtHNXZjbTFoYkdsNlpXUk9ZVzFsS1R0Y2JpQWdJQ0J5WlhSMWNtNGdibTl5YldGc2FYcGxaRTVoYldVN1hHNGdJSDFjYmx4dUlDQndjbWwyWVhSbElHSjFhV3hrVTJWamNtVjBLRnh1SUNBZ0lHNWhiV1U2SUhOMGNtbHVaeXhjYmlBZ0lDQnVZVzFsYzNCaFkyVTZJSE4wY21sdVp5eGNiaUFnSUNCelpYSnBZV3hwZW1Wa09pQlRaWEpwWVd4cGVtVmtVMlZqY21WMFVHRjViRzloWkN4Y2JpQWdJQ0J2Y0hScGIyNXpPaUJUZEc5eVpWTmxZM0psZEU5d2RHbHZibk5jYmlBZ0tUb2dWakZUWldOeVpYUWdlMXh1SUNBZ0lHTnZibk4wSUdGdWJtOTBZWFJwYjI1ek9pQlNaV052Y21ROGMzUnlhVzVuTENCemRISnBibWMrSUQwZ2UxeHVJQ0FnSUNBZ1cwVk9RMDlFU1U1SFgwRk9UazlVUVZSSlQwNWRPaUJ6WlhKcFlXeHBlbVZrTG1WdVkyOWthVzVuTEZ4dUlDQWdJQ0FnVzFWUVJFRlVSVVJmUVZSZlFVNU9UMVJCVkVsUFRsMDZJRzVsZHlCRVlYUmxLQ2t1ZEc5SlUwOVRkSEpwYm1jb0tTeGNiaUFnSUNCOU8xeHVYRzRnSUNBZ2FXWWdLRzl3ZEdsdmJuTXVZMjl1ZEdWdWRGUjVjR1VwSUh0Y2JpQWdJQ0FnSUdGdWJtOTBZWFJwYjI1elcwTlBUbFJGVGxSZlZGbFFSVjlCVGs1UFZFRlVTVTlPWFNBOUlHOXdkR2x2Ym5NdVkyOXVkR1Z1ZEZSNWNHVTdYRzRnSUNBZ2ZWeHVJQ0FnSUdsbUlDaHZjSFJwYjI1ekxuUmhaM01wSUh0Y2JpQWdJQ0FnSUdGdWJtOTBZWFJwYjI1elcxUkJSMU5mUVU1T1QxUkJWRWxQVGwwZ1BTQktVMDlPTG5OMGNtbHVaMmxtZVNodmNIUnBiMjV6TG5SaFozTXBPMXh1SUNBZ0lIMWNiaUFnSUNCcFppQW9iM0IwYVc5dWN5NTJaWEp6YVc5dUtTQjdYRzRnSUNBZ0lDQmhibTV2ZEdGMGFXOXVjMXRXUlZKVFNVOU9YMEZPVGs5VVFWUkpUMDVkSUQwZ2IzQjBhVzl1Y3k1MlpYSnphVzl1TzF4dUlDQWdJSDFjYmlBZ0lDQnBaaUFvYjNCMGFXOXVjeTUwWlc1aGJuUkpaQ2tnZTF4dUlDQWdJQ0FnWVc1dWIzUmhkR2x2Ym5OYlZFVk9RVTVVWDBGT1RrOVVRVlJKVDA1ZElEMGdiM0IwYVc5dWN5NTBaVzVoYm5SSlpEdGNiaUFnSUNCOVhHNGdJQ0FnYVdZZ0tHOXdkR2x2Ym5NdWIzSm5WVzVwZEVsa0tTQjdYRzRnSUNBZ0lDQmhibTV2ZEdGMGFXOXVjMXRQVWtkZlZVNUpWRjlCVGs1UFZFRlVTVTlPWFNBOUlHOXdkR2x2Ym5NdWIzSm5WVzVwZEVsa08xeHVJQ0FnSUgxY2JpQWdJQ0JwWmlBb2IzQjBhVzl1Y3k1dmQyNWxjbEJ5YVc1amFYQmhiRWxrS1NCN1hHNGdJQ0FnSUNCaGJtNXZkR0YwYVc5dWMxdFBWMDVGVWw5QlRrNVBWRUZVU1U5T1hTQTlJRzl3ZEdsdmJuTXViM2R1WlhKUWNtbHVZMmx3WVd4SlpEdGNiaUFnSUNCOVhHNWNiaUFnSUNCeVpYUjFjbTRnZTF4dUlDQWdJQ0FnWVhCcFZtVnljMmx2YmpvZ1hDSjJNVndpTEZ4dUlDQWdJQ0FnYTJsdVpEb2dYQ0pUWldOeVpYUmNJaXhjYmlBZ0lDQWdJSFI1Y0dVNklGd2lUM0JoY1hWbFhDSXNYRzRnSUNBZ0lDQnRaWFJoWkdGMFlUb2dlMXh1SUNBZ0lDQWdJQ0J1WVcxbExGeHVJQ0FnSUNBZ0lDQnVZVzFsYzNCaFkyVXNYRzRnSUNBZ0lDQWdJR3hoWW1Wc2N6b2dlMXh1SUNBZ0lDQWdJQ0FnSUZ0TlFVNUJSMFZFWDB4QlFrVk1YVG9nWENKMGNuVmxYQ0lzWEc0Z0lDQWdJQ0FnSUgwc1hHNGdJQ0FnSUNBZ0lHRnVibTkwWVhScGIyNXpMRnh1SUNBZ0lDQWdmU3hjYmlBZ0lDQWdJSE4wY21sdVowUmhkR0U2SUh0Y2JpQWdJQ0FnSUNBZ1cxQkJXVXhQUVVSZlJFRlVRVjlMUlZsZE9pQktVMDlPTG5OMGNtbHVaMmxtZVNoelpYSnBZV3hwZW1Wa0tTeGNiaUFnSUNBZ0lIMHNYRzRnSUNBZ2ZUdGNiaUFnZlZ4dVhHNGdJSEJ5YVhaaGRHVWdZWE41Ym1NZ2NtVmhaRk5sWTNKbGRDaGNiaUFnSUNCdVlXMWxPaUJ6ZEhKcGJtY3NYRzRnSUNBZ2JtRnRaWE53WVdObE9pQnpkSEpwYm1kY2JpQWdLVG9nVUhKdmJXbHpaVHhXTVZObFkzSmxkRDRnZTF4dUlDQWdJSFJ5ZVNCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnWVhkaGFYUWdkR2hwY3k1amJHbGxiblF1Y21WaFpFNWhiV1Z6Y0dGalpXUlRaV055WlhRb2V5QnVZVzFsTENCdVlXMWxjM0JoWTJVZ2ZTazdYRzRnSUNBZ2ZTQmpZWFJqYUNBb1pYSnliM0lwSUh0Y2JpQWdJQ0FnSUhSb2NtOTNJSFJvYVhNdWNHRnljMlZGY25KdmNpaGxjbkp2Y2lrN1hHNGdJQ0FnZlZ4dUlDQjlYRzVjYmlBZ2NISnBkbUYwWlNCaGMzTmxjblJXWlhKemFXOXVLSE5sWTNKbGREb2dWakZUWldOeVpYUXNJSFpsY25OcGIyNC9PaUJ6ZEhKcGJtY3BPaUIyYjJsa0lIdGNiaUFnSUNCcFppQW9JWFpsY25OcGIyNHBJSEpsZEhWeWJqdGNiaUFnSUNCamIyNXpkQ0J6ZEc5eVpXUWdQU0J6WldOeVpYUXViV1YwWVdSaGRHRS9MbUZ1Ym05MFlYUnBiMjV6UHk1YlZrVlNVMGxQVGw5QlRrNVBWRUZVU1U5T1hUdGNiaUFnSUNCcFppQW9jM1J2Y21Wa0lDRTlQU0IyWlhKemFXOXVLU0I3WEc0Z0lDQWdJQ0IwYUhKdmR5QnVaWGNnVG05MFJtOTFibVJGY25KdmNpaGNiaUFnSUNBZ0lDQWdZRk5sWTNKbGRDQmNJaVI3YzJWamNtVjBMbTFsZEdGa1lYUmhQeTV1WVcxbGZWd2lJSFpsY25OcGIyNGdYQ0lrZTNabGNuTnBiMjU5WENJZ2JtOTBJR1p2ZFc1a1lGeHVJQ0FnSUNBZ0tUdGNiaUFnSUNCOVhHNGdJSDFjYmx4dUlDQndjbWwyWVhSbElIUnZUV1YwWVdSaGRHRW9jMlZqY21WME9pQldNVk5sWTNKbGRDd2dibUZ0WlhOd1lXTmxPaUJ6ZEhKcGJtY3BPaUJUWldOeVpYUk5aWFJoWkdGMFlTQjdYRzRnSUNBZ1kyOXVjM1FnWVc1dWIzUmhkR2x2Ym5NZ1BTQnpaV055WlhRdWJXVjBZV1JoZEdFL0xtRnVibTkwWVhScGIyNXpJSHg4SUh0OU8xeHVJQ0FnSUdOdmJuTjBJSFZ3WkdGMFpXUkJkQ0E5SUdGdWJtOTBZWFJwYjI1elcxVlFSRUZVUlVSZlFWUmZRVTVPVDFSQlZFbFBUbDA3WEc0Z0lDQWdZMjl1YzNRZ2JtRnRaU0E5SUhObFkzSmxkQzV0WlhSaFpHRjBZVDh1Ym1GdFpTQjhmQ0JjSWx3aU8xeHVJQ0FnSUhKbGRIVnliaUI3WEc0Z0lDQWdJQ0J3Y205MmFXUmxjam9nZEdocGN5NXdjbTkyYVdSbGNpeGNiaUFnSUNBZ0lHNWhiV1VzWEc0Z0lDQWdJQ0IyWlhKemFXOXVPaUJoYm01dmRHRjBhVzl1YzF0V1JWSlRTVTlPWDBGT1RrOVVRVlJKVDA1ZExGeHVJQ0FnSUNBZ1kzSmxZWFJsWkVGME9pQjBiMFJoZEdVb2MyVmpjbVYwTG0xbGRHRmtZWFJoUHk1amNtVmhkR2x2YmxScGJXVnpkR0Z0Y0Nrc1hHNGdJQ0FnSUNCMWNHUmhkR1ZrUVhRNklIVndaR0YwWldSQmRGeHVJQ0FnSUNBZ0lDQS9JRzVsZHlCRVlYUmxLSFZ3WkdGMFpXUkJkQ2xjYmlBZ0lDQWdJQ0FnT2lCMGIwUmhkR1VvYzJWamNtVjBMbTFsZEdGa1lYUmhQeTVqY21WaGRHbHZibFJwYldWemRHRnRjQ2tzWEc0Z0lDQWdJQ0JsYm1GaWJHVmtPaUIwY25WbExGeHVJQ0FnSUNBZ1kyOXVkR1Z1ZEZSNWNHVTZJR0Z1Ym05MFlYUnBiMjV6VzBOUFRsUkZUbFJmVkZsUVJWOUJUazVQVkVGVVNVOU9YU3hjYmlBZ0lDQWdJSFJoWjNNNklIQmhjbk5sVkdGbmN5aGhibTV2ZEdGMGFXOXVjMXRVUVVkVFgwRk9UazlVUVZSSlQwNWRLU3hjYmlBZ0lDQWdJR1Y0ZEdWeWJtRnNTV1E2SUhObFkzSmxkQzV0WlhSaFpHRjBZVDh1ZFdsa0xGeHVJQ0FnSUNBZ2RYSnBPaUJnYTNWaVpYSnVaWFJsY3pvdkx5UjdibUZ0WlhOd1lXTmxmUzhrZTI1aGJXVjlZQ3hjYmlBZ0lDQjlPMXh1SUNCOVhHNWNiaUFnY0hKcGRtRjBaU0J6ZEdGMGRYTlBaaWhsY25KdmNqb2dkVzVyYm05M2JpazZJRzUxYldKbGNpQjhJSFZ1WkdWbWFXNWxaQ0I3WEc0Z0lDQWdhV1lnS0dWeWNtOXlJR2x1YzNSaGJtTmxiMllnUVhCcFJYaGpaWEIwYVc5dUtTQnlaWFIxY200Z1pYSnliM0l1WTI5a1pUdGNiaUFnSUNCamIyNXpkQ0JqWVc1a2FXUmhkR1VnUFNCbGNuSnZjaUJoY3lCN0lHTnZaR1UvT2lCMWJtdHViM2R1T3lCemRHRjBkWE5EYjJSbFB6b2dkVzVyYm05M2JpQjlPMXh1SUNBZ0lHbG1JQ2gwZVhCbGIyWWdZMkZ1Wkdsa1lYUmxQeTVqYjJSbElEMDlQU0JjSW01MWJXSmxjbHdpS1NCeVpYUjFjbTRnWTJGdVpHbGtZWFJsTG1OdlpHVTdYRzRnSUNBZ2FXWWdLSFI1Y0dWdlppQmpZVzVrYVdSaGRHVS9Mbk4wWVhSMWMwTnZaR1VnUFQwOUlGd2liblZ0WW1WeVhDSXBJSHRjYmlBZ0lDQWdJSEpsZEhWeWJpQmpZVzVrYVdSaGRHVXVjM1JoZEhWelEyOWtaVHRjYmlBZ0lDQjlYRzRnSUNBZ2NtVjBkWEp1SUhWdVpHVm1hVzVsWkR0Y2JpQWdmVnh1WEc0Z0lIQnlhWFpoZEdVZ2JXVnpjMkZuWlU5bUtHVnljbTl5T2lCMWJtdHViM2R1S1RvZ2MzUnlhVzVuSUh0Y2JpQWdJQ0JqYjI1emRDQmxjbklnUFNCbGNuSnZjaUJoY3lCN1hHNGdJQ0FnSUNCdFpYTnpZV2RsUHpvZ2MzUnlhVzVuTzF4dUlDQWdJQ0FnYm1GdFpUODZJSE4wY21sdVp6dGNiaUFnSUNBZ0lHSnZaSGsvT2lCN0lHMWxjM05oWjJVL09pQnpkSEpwYm1jN0lISmxZWE52Ymo4NklITjBjbWx1WnlCOU8xeHVJQ0FnSUgwN1hHNGdJQ0FnY21WMGRYSnVJR1Z5Y2o4dVltOWtlVDh1YldWemMyRm5aU0I4ZkNCbGNuSS9MbUp2WkhrL0xuSmxZWE52YmlCOGZDQmxjbkkvTG0xbGMzTmhaMlVnZkh3Z1pYSnlQeTV1WVcxbElIeDhJRndpVlc1cmJtOTNiaUJsY25KdmNsd2lPMXh1SUNCOVhHNWNiaUFnY0hKdmRHVmpkR1ZrSUhCaGNuTmxSWEp5YjNJb1pYSnliM0k2SUhWdWEyNXZkMjRwT2lCRmNuSnZjaUI3WEc0Z0lDQWdhV1lnS0dWeWNtOXlJR2x1YzNSaGJtTmxiMllnUW1GelpVVnljbTl5S1NCeVpYUjFjbTRnWlhKeWIzSTdYRzRnSUNBZ1kyOXVjM1FnYzNSaGRIVnpJRDBnZEdocGN5NXpkR0YwZFhOUFppaGxjbkp2Y2lrN1hHNGdJQ0FnWTI5dWMzUWdiV1Z6YzJGblpTQTlJSFJvYVhNdWJXVnpjMkZuWlU5bUtHVnljbTl5S1R0Y2JpQWdJQ0JqYjI1emRDQnNiM2RsY2sxbGMzTmhaMlVnUFNCdFpYTnpZV2RsTG5SdlRHOTNaWEpEWVhObEtDazdYRzVjYmlBZ0lDQnBaaUFvWEc0Z0lDQWdJQ0J6ZEdGMGRYTWdQVDA5SURRd05DQjhmRnh1SUNBZ0lDQWdiRzkzWlhKTlpYTnpZV2RsTG1sdVkyeDFaR1Z6S0Z3aWJtOTBJR1p2ZFc1a1hDSXBJSHg4WEc0Z0lDQWdJQ0JzYjNkbGNrMWxjM05oWjJVdWFXNWpiSFZrWlhNb1hDSTBNRFJjSWlsY2JpQWdJQ0FwSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUJ1WlhjZ1RtOTBSbTkxYm1SRmNuSnZjaWh0WlhOellXZGxLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnBaaUFvWEc0Z0lDQWdJQ0J6ZEdGMGRYTWdQVDA5SURRd09TQjhmRnh1SUNBZ0lDQWdiRzkzWlhKTlpYTnpZV2RsTG1sdVkyeDFaR1Z6S0Z3aVlXeHlaV0ZrZVNCbGVHbHpkSE5jSWlrZ2ZIeGNiaUFnSUNBZ0lHeHZkMlZ5VFdWemMyRm5aUzVwYm1Oc2RXUmxjeWhjSW1OdmJtWnNhV04wWENJcElIeDhYRzRnSUNBZ0lDQnNiM2RsY2sxbGMzTmhaMlV1YVc1amJIVmtaWE1vWENJME1EbGNJaWxjYmlBZ0lDQXBJSHRjYmlBZ0lDQWdJSEpsZEhWeWJpQnVaWGNnUTI5dVpteHBZM1JGY25KdmNpaHRaWE56WVdkbEtUdGNiaUFnSUNCOVhHNWNiaUFnSUNCcFppQW9jM1JoZEhWeklEMDlQU0EwTURFZ2ZId2diRzkzWlhKTlpYTnpZV2RsTG1sdVkyeDFaR1Z6S0Z3aWRXNWhkWFJvYjNKcGVtVmtYQ0lwS1NCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnYm1WM0lFRjFkR2h2Y21sNllYUnBiMjVGY25KdmNpaGdRWFYwYUdWdWRHbGpZWFJwYjI0Z1ptRnBiR1ZrT2lBa2UyMWxjM05oWjJWOVlDazdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2FXWWdLSE4wWVhSMWN5QTlQVDBnTkRBeklIeDhJR3h2ZDJWeVRXVnpjMkZuWlM1cGJtTnNkV1JsY3loY0ltWnZjbUpwWkdSbGJsd2lLU2tnZTF4dUlDQWdJQ0FnY21WMGRYSnVJRzVsZHlCQmRYUm9iM0pwZW1GMGFXOXVSWEp5YjNJb1lGQmxjbTFwYzNOcGIyNGdaR1Z1YVdWa09pQWtlMjFsYzNOaFoyVjlZQ2s3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdhV1lnS0Z4dUlDQWdJQ0FnYzNSaGRIVnpJRDA5UFNBME1EQWdmSHhjYmlBZ0lDQWdJSE4wWVhSMWN5QTlQVDBnTkRJeUlIeDhYRzRnSUNBZ0lDQnNiM2RsY2sxbGMzTmhaMlV1YVc1amJIVmtaWE1vWENKaVlXUWdjbVZ4ZFdWemRGd2lLVnh1SUNBZ0lDa2dlMXh1SUNBZ0lDQWdjbVYwZFhKdUlHNWxkeUJDWVdSU1pYRjFaWE4wUlhKeWIzSW9iV1Z6YzJGblpTazdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2FXWWdLSE4wWVhSMWN5QTlQVDBnTkRJNUlIeDhJR3h2ZDJWeVRXVnpjMkZuWlM1cGJtTnNkV1JsY3loY0luSmhkR1VnYkdsdGFYUmNJaWtwSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUJ1WlhjZ1UyVmpjbVYwUlhKeWIzSW9YRzRnSUNBZ0lDQWdJRndpVTBWRFVrVlVYMUJTVDFaSlJFVlNYMUpCVkVWZlRFbE5TVlJGUkZ3aUxGeHVJQ0FnSUNBZ0lDQmdVbUYwWlNCc2FXMXBkR1ZrT2lBa2UyMWxjM05oWjJWOVlDeGNiaUFnSUNBZ0lDQWdaWEp5YjNJZ1lYTWdSWEp5YjNKY2JpQWdJQ0FnSUNrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnYVdZZ0tGeHVJQ0FnSUNBZ2MzUmhkSFZ6SUQwOVBTQjFibVJsWm1sdVpXUWdmSHhjYmlBZ0lDQWdJQ2h6ZEdGMGRYTWdJVDA5SUhWdVpHVm1hVzVsWkNBbUppQnpkR0YwZFhNZ1BqMGdOVEF3S1NCOGZGeHVJQ0FnSUNBZ2JHOTNaWEpOWlhOellXZGxMbWx1WTJ4MVpHVnpLRndpWTI5dWJtVmpkR2x2Ymx3aUtTQjhmRnh1SUNBZ0lDQWdiRzkzWlhKTlpYTnpZV2RsTG1sdVkyeDFaR1Z6S0Z3aWRHbHRaVzkxZEZ3aUtTQjhmRnh1SUNBZ0lDQWdiRzkzWlhKTlpYTnpZV2RsTG1sdVkyeDFaR1Z6S0Z3aWRXNWhkbUZwYkdGaWJHVmNJaWxjYmlBZ0lDQXBJSHRjYmlBZ0lDQWdJSEpsZEhWeWJpQnVaWGNnVTJWamNtVjBSWEp5YjNJb1hHNGdJQ0FnSUNBZ0lGd2lVMFZEVWtWVVgxQlNUMVpKUkVWU1gxVk9RVlpCU1V4QlFreEZYQ0lzWEc0Z0lDQWdJQ0FnSUdCUWNtOTJhV1JsY2lCMWJtRjJZV2xzWVdKc1pUb2dKSHR0WlhOellXZGxmV0FzWEc0Z0lDQWdJQ0FnSUdWeWNtOXlJR0Z6SUVWeWNtOXlYRzRnSUNBZ0lDQXBPMXh1SUNBZ0lIMWNibHh1SUNBZ0lISmxkSFZ5YmlCdVpYY2dTVzUwWlhKdVlXeEZjbkp2Y2lodFpYTnpZV2RsS1R0Y2JpQWdmVnh1ZlZ4dUlsMTkiXX0=
|