From 9a1973591898d29ddda6b56e3c7839981057d7c9 Mon Sep 17 00:00:00 2001 From: Allan Yung Date: Thu, 16 Apr 2026 16:16:47 +0100 Subject: [PATCH] feat: Support Azure Service Principal authentication for Azure DevOps repositories (#25324) Signed-off-by: Allan Yung Co-authored-by: Dan Garfield --- assets/swagger.json | 80 + cmd/argocd/commands/repo.go | 56 +- cmd/argocd/commands/repocreds.go | 10 + cmd/util/repo.go | 50 +- common/common.go | 5 + .../repo-add-azure-service-principal.png | Bin 0 -> 76894 bytes docs/operator-manual/declarative-setup.md | 35 +- .../argocd_admin_repo_generate-spec.md | 58 +- docs/user-guide/commands/argocd_repo_add.md | 64 +- .../commands/argocd_repocreds_add.md | 46 +- docs/user-guide/private-repositories.md | 30 + pkg/apiclient/repository/repository.pb.go | 405 +++- pkg/apis/application/v1alpha1/generated.pb.go | 1917 ++++++++++------- pkg/apis/application/v1alpha1/generated.proto | 24 + .../application/v1alpha1/repository_types.go | 85 +- .../v1alpha1/repository_types_test.go | 63 +- server/repository/repository.go | 82 +- server/repository/repository.proto | 8 + server/repository/repository_test.go | 13 + .../components/repos-list/repos-list.tsx | 166 +- ui/src/app/shared/models.ts | 4 + ui/src/app/shared/services/repo-service.ts | 49 + .../app/shared/services/repocreds-service.ts | 24 + util/db/repository_secrets.go | 72 +- util/git/client.go | 7 + util/git/creds.go | 152 +- util/settings/settings.go | 16 + 27 files changed, 2414 insertions(+), 1107 deletions(-) create mode 100644 docs/assets/repo-add-azure-service-principal.png diff --git a/assets/swagger.json b/assets/swagger.json index 13d4203509..43b23e2a74 100644 --- a/assets/swagger.json +++ b/assets/swagger.json @@ -4039,6 +4039,30 @@ "description": "Whether https should be disabled for an OCI repo.", "name": "insecureOciForceHttp", "in": "query" + }, + { + "type": "string", + "description": "Azure Service Principal Client ID.", + "name": "azureServicePrincipalClientId", + "in": "query" + }, + { + "type": "string", + "description": "Azure Service Principal Client Secret.", + "name": "azureServicePrincipalClientSecret", + "in": "query" + }, + { + "type": "string", + "description": "Azure Service Principal Tenant ID.", + "name": "azureServicePrincipalTenantId", + "in": "query" + }, + { + "type": "string", + "description": "Azure Active Directory Endpoint.", + "name": "azureActiveDirectoryEndpoint", + "in": "query" } ], "responses": { @@ -4946,6 +4970,30 @@ "description": "Whether https should be disabled for an OCI repo.", "name": "insecureOciForceHttp", "in": "query" + }, + { + "type": "string", + "description": "Azure Service Principal Client ID.", + "name": "azureServicePrincipalClientId", + "in": "query" + }, + { + "type": "string", + "description": "Azure Service Principal Client Secret.", + "name": "azureServicePrincipalClientSecret", + "in": "query" + }, + { + "type": "string", + "description": "Azure Service Principal Tenant ID.", + "name": "azureServicePrincipalTenantId", + "in": "query" + }, + { + "type": "string", + "description": "Azure Active Directory Endpoint.", + "name": "azureActiveDirectoryEndpoint", + "in": "query" } ], "responses": { @@ -9519,6 +9567,22 @@ "type": "object", "title": "RepoCreds holds the definition for repository credentials", "properties": { + "azureActiveDirectoryEndpoint": { + "type": "string", + "title": "AzureActiveDirectoryEndpoint specifies the Azure Active Directory endpoint used for Service Principal authentication. If empty will default to https://login.microsoftonline.com" + }, + "azureServicePrincipalClientId": { + "type": "string", + "title": "AzureServicePrincipalClientId specifies the client ID of the Azure Service Principal used to access the repo" + }, + "azureServicePrincipalClientSecret": { + "type": "string", + "title": "AzureServicePrincipalClientSecret specifies the client secret of the Azure Service Principal used to access the repo" + }, + "azureServicePrincipalTenantId": { + "type": "string", + "title": "AzureServicePrincipalTenantId specifies the tenant ID of the Azure Service Principal used to access the repo" + }, "bearerToken": { "type": "string", "title": "BearerToken contains the bearer token used for Git BitBucket Data Center auth at the repo server" @@ -9618,6 +9682,22 @@ "type": "object", "title": "Repository is a repository holding application configurations", "properties": { + "azureActiveDirectoryEndpoint": { + "type": "string", + "title": "AzureActiveDirectoryEndpoint specifies the Azure Active Directory endpoint used for Service Principal authentication. If empty will default to https://login.microsoftonline.com" + }, + "azureServicePrincipalClientId": { + "type": "string", + "title": "AzureServicePrincipalClientId specifies the client ID of the Azure Service Principal used to access the repo" + }, + "azureServicePrincipalClientSecret": { + "type": "string", + "title": "AzureServicePrincipalClientSecret specifies the client secret of the Azure Service Principal used to access the repo" + }, + "azureServicePrincipalTenantId": { + "type": "string", + "title": "AzureServicePrincipalTenantId specifies the tenant ID of the Azure Service Principal used to access the repo" + }, "bearerToken": { "type": "string", "title": "BearerToken contains the bearer token used for Git BitBucket Data Center auth at the repo server" diff --git a/cmd/argocd/commands/repo.go b/cmd/argocd/commands/repo.go index 34ad584145..1067ecbe73 100644 --- a/cmd/argocd/commands/repo.go +++ b/cmd/argocd/commands/repo.go @@ -102,6 +102,12 @@ func NewRepoAddCommand(clientOpts *argocdclient.ClientOptions) *cobra.Command { # Add a private Git repository on Google Cloud Sources via GCP service account credentials argocd repo add https://source.developers.google.com/p/my-google-cloud-project/r/my-repo --gcp-service-account-key-path service-account-key.json + + # Add a private Git repository on Azure Devops via Azure Service Principal credentials + argocd repo add https://dev.azure.com/my-devops-organization/my-devops-project/_git/my-devops-repo --azure-service-principal-client-id 12345678-1234-1234-1234-123456789012 --azure-service-principal-client-secret test --azure-service-principal-tenant-id 12345678-1234-1234-1234-123456789012 + + # Add a private Git repository on Azure Devops via Azure Service Principal credentials when not using default Azure public cloud + argocd repo add https://dev.azure.com/my-devops-organization/my-devops-project/_git/my-devops-repo --azure-service-principal-client-id 12345678-1234-1234-1234-123456789012 --azure-service-principal-client-secret test --azure-service-principal-tenant-id 12345678-1234-1234-1234-123456789012 --azure-active-directory-endpoint https://login.microsoftonline.de ` command := &cobra.Command{ @@ -191,6 +197,10 @@ func NewRepoAddCommand(clientOpts *argocdclient.ClientOptions) *cobra.Command { repoOpts.Repo.NoProxy = repoOpts.NoProxy repoOpts.Repo.ForceHttpBasicAuth = repoOpts.ForceHttpBasicAuth repoOpts.Repo.UseAzureWorkloadIdentity = repoOpts.UseAzureWorkloadIdentity + repoOpts.Repo.AzureServicePrincipalTenantId = repoOpts.AzureServicePrincipalTenantId + repoOpts.Repo.AzureServicePrincipalClientId = repoOpts.AzureServicePrincipalClientId + repoOpts.Repo.AzureServicePrincipalClientSecret = repoOpts.AzureServicePrincipalClientSecret + repoOpts.Repo.AzureActiveDirectoryEndpoint = repoOpts.AzureActiveDirectoryEndpoint repoOpts.Repo.Depth = repoOpts.Depth repoOpts.Repo.WebhookManifestCacheWarmDisabled = repoOpts.WebhookManifestCacheWarmDisabled @@ -226,27 +236,31 @@ func NewRepoAddCommand(clientOpts *argocdclient.ClientOptions) *cobra.Command { // are high that we do not have the given URL pointing to a valid Git // repo anyway. repoAccessReq := repositorypkg.RepoAccessQuery{ - Repo: repoOpts.Repo.Repo, - Type: repoOpts.Repo.Type, - Name: repoOpts.Repo.Name, - Username: repoOpts.Repo.Username, - Password: repoOpts.Repo.Password, - BearerToken: repoOpts.Repo.BearerToken, - SshPrivateKey: repoOpts.Repo.SSHPrivateKey, - TlsClientCertData: repoOpts.Repo.TLSClientCertData, - TlsClientCertKey: repoOpts.Repo.TLSClientCertKey, - Insecure: repoOpts.Repo.IsInsecure(), - EnableOci: repoOpts.Repo.EnableOCI, - GithubAppPrivateKey: repoOpts.Repo.GithubAppPrivateKey, - GithubAppID: repoOpts.Repo.GithubAppId, - GithubAppInstallationID: repoOpts.Repo.GithubAppInstallationId, - GithubAppEnterpriseBaseUrl: repoOpts.Repo.GitHubAppEnterpriseBaseURL, - Proxy: repoOpts.Proxy, - Project: repoOpts.Repo.Project, - GcpServiceAccountKey: repoOpts.Repo.GCPServiceAccountKey, - ForceHttpBasicAuth: repoOpts.Repo.ForceHttpBasicAuth, - UseAzureWorkloadIdentity: repoOpts.Repo.UseAzureWorkloadIdentity, - InsecureOciForceHttp: repoOpts.Repo.InsecureOCIForceHttp, + Repo: repoOpts.Repo.Repo, + Type: repoOpts.Repo.Type, + Name: repoOpts.Repo.Name, + Username: repoOpts.Repo.Username, + Password: repoOpts.Repo.Password, + BearerToken: repoOpts.Repo.BearerToken, + SshPrivateKey: repoOpts.Repo.SSHPrivateKey, + TlsClientCertData: repoOpts.Repo.TLSClientCertData, + TlsClientCertKey: repoOpts.Repo.TLSClientCertKey, + Insecure: repoOpts.Repo.IsInsecure(), + EnableOci: repoOpts.Repo.EnableOCI, + GithubAppPrivateKey: repoOpts.Repo.GithubAppPrivateKey, + GithubAppID: repoOpts.Repo.GithubAppId, + GithubAppInstallationID: repoOpts.Repo.GithubAppInstallationId, + GithubAppEnterpriseBaseUrl: repoOpts.Repo.GitHubAppEnterpriseBaseURL, + Proxy: repoOpts.Proxy, + Project: repoOpts.Repo.Project, + GcpServiceAccountKey: repoOpts.Repo.GCPServiceAccountKey, + ForceHttpBasicAuth: repoOpts.Repo.ForceHttpBasicAuth, + UseAzureWorkloadIdentity: repoOpts.Repo.UseAzureWorkloadIdentity, + InsecureOciForceHttp: repoOpts.Repo.InsecureOCIForceHttp, + AzureServicePrincipalTenantId: repoOpts.Repo.AzureServicePrincipalTenantId, + AzureServicePrincipalClientId: repoOpts.Repo.AzureServicePrincipalClientId, + AzureServicePrincipalClientSecret: repoOpts.Repo.AzureServicePrincipalClientSecret, + AzureActiveDirectoryEndpoint: repoOpts.Repo.AzureActiveDirectoryEndpoint, } _, err = repoIf.ValidateAccess(ctx, &repoAccessReq) errors.CheckError(err) diff --git a/cmd/argocd/commands/repocreds.go b/cmd/argocd/commands/repocreds.go index ed6892f857..4de0a20e85 100644 --- a/cmd/argocd/commands/repocreds.go +++ b/cmd/argocd/commands/repocreds.go @@ -83,6 +83,12 @@ func NewRepoCredsAddCommand(clientOpts *argocdclient.ClientOptions) *cobra.Comma # Add credentials with GCP credentials for all repositories under https://source.developers.google.com/p/my-google-cloud-project/r/ argocd repocreds add https://source.developers.google.com/p/my-google-cloud-project/r/ --gcp-service-account-key-path service-account-key.json + + # Add credentials with Azure Service Principal to use for all repositories under https://dev.azure.com/my-devops-organization + argocd repocreds add https://dev.azure.com/my-devops-organization --azure-service-principal-client-id 12345678-1234-1234-1234-123456789012 --azure-service-principal-client-secret test --azure-service-principal-tenant-id 12345678-1234-1234-1234-123456789012 + + # Add credentials with Azure Service Principal to use for all repositories under https://dev.azure.com/my-devops-organization when not using default Azure public cloud + argocd repocreds add https://dev.azure.com/my-devops-organization --azure-service-principal-client-id 12345678-1234-1234-1234-123456789012 --azure-service-principal-client-secret test --azure-service-principal-tenant-id 12345678-1234-1234-1234-123456789012 --azure-active-directory-endpoint https://login.microsoftonline.de ` command := &cobra.Command{ @@ -201,6 +207,10 @@ func NewRepoCredsAddCommand(clientOpts *argocdclient.ClientOptions) *cobra.Comma command.Flags().BoolVar(&repo.ForceHttpBasicAuth, "force-http-basic-auth", false, "whether to force basic auth when connecting via HTTP") command.Flags().BoolVar(&repo.UseAzureWorkloadIdentity, "use-azure-workload-identity", false, "whether to use azure workload identity for authentication") command.Flags().StringVar(&repo.Proxy, "proxy-url", "", "If provided, this URL will be used to connect via proxy") + command.Flags().StringVar(&repo.AzureServicePrincipalClientId, "azure-service-principal-client-id", "", "client id of the Azure Service Principal") + command.Flags().StringVar(&repo.AzureServicePrincipalClientSecret, "azure-service-principal-client-secret", "", "client secret of the Azure Service Principal") + command.Flags().StringVar(&repo.AzureServicePrincipalTenantId, "azure-service-principal-tenant-id", "", "tenant id of the Azure Service Principal") + command.Flags().StringVar(&repo.AzureActiveDirectoryEndpoint, "azure-active-directory-endpoint", "", "Active Directory endpoint when not using default Azure public cloud (e.g. https://login.microsoftonline.de)") return command } diff --git a/cmd/util/repo.go b/cmd/util/repo.go index 18cb896ca8..101f0c459e 100644 --- a/cmd/util/repo.go +++ b/cmd/util/repo.go @@ -8,27 +8,31 @@ import ( ) type RepoOptions struct { - Repo appsv1.Repository - Upsert bool - SshPrivateKeyPath string //nolint:revive //FIXME(var-naming) - InsecureOCIForceHTTP bool - InsecureIgnoreHostKey bool - InsecureSkipServerVerification bool - TlsClientCertPath string //nolint:revive //FIXME(var-naming) - TlsClientCertKeyPath string //nolint:revive //FIXME(var-naming) - EnableLfs bool - EnableOci bool - GithubAppId int64 - GithubAppInstallationId int64 - GithubAppPrivateKeyPath string - GitHubAppEnterpriseBaseURL string - Proxy string - NoProxy string - GCPServiceAccountKeyPath string - ForceHttpBasicAuth bool //nolint:revive //FIXME(var-naming) - UseAzureWorkloadIdentity bool - Depth int64 - WebhookManifestCacheWarmDisabled bool + Repo appsv1.Repository + Upsert bool + SshPrivateKeyPath string //nolint:revive //FIXME(var-naming) + InsecureOCIForceHTTP bool + InsecureIgnoreHostKey bool + InsecureSkipServerVerification bool + TlsClientCertPath string //nolint:revive //FIXME(var-naming) + TlsClientCertKeyPath string //nolint:revive //FIXME(var-naming) + EnableLfs bool + EnableOci bool + GithubAppId int64 + GithubAppInstallationId int64 + GithubAppPrivateKeyPath string + GitHubAppEnterpriseBaseURL string + Proxy string + NoProxy string + GCPServiceAccountKeyPath string + ForceHttpBasicAuth bool //nolint:revive //FIXME(var-naming) + UseAzureWorkloadIdentity bool + Depth int64 + WebhookManifestCacheWarmDisabled bool + AzureServicePrincipalTenantId string + AzureServicePrincipalClientId string + AzureServicePrincipalClientSecret string + AzureActiveDirectoryEndpoint string } func AddRepoFlags(command *cobra.Command, opts *RepoOptions) { @@ -57,4 +61,8 @@ func AddRepoFlags(command *cobra.Command, opts *RepoOptions) { command.Flags().BoolVar(&opts.InsecureOCIForceHTTP, "insecure-oci-force-http", false, "Use http when accessing an OCI repository") command.Flags().Int64Var(&opts.Depth, "depth", 0, "Specify a custom depth for git clone operations. Unless specified, a full clone is performed using the depth of 0") command.Flags().BoolVar(&opts.WebhookManifestCacheWarmDisabled, "webhook-manifest-cache-warm-disabled", false, "disable manifest cache warming during webhook processing for this repository (recommended for large monorepos with plain YAML manifests)") + command.Flags().StringVar(&opts.AzureServicePrincipalTenantId, "azure-service-principal-tenant-id", "", "tenant id of the Azure Service Principal") + command.Flags().StringVar(&opts.AzureServicePrincipalClientId, "azure-service-principal-client-id", "", "client id of the Azure Service Principal") + command.Flags().StringVar(&opts.AzureServicePrincipalClientSecret, "azure-service-principal-client-secret", "", "client secret of the Azure Service Principal") + command.Flags().StringVar(&opts.AzureActiveDirectoryEndpoint, "azure-active-directory-endpoint", "", "Active Directory endpoint when not using default Azure public cloud (e.g. https://login.microsoftonline.de)") } diff --git a/common/common.go b/common/common.go index 350b97c302..4406da6ef9 100644 --- a/common/common.go +++ b/common/common.go @@ -137,6 +137,9 @@ const ( ChangePasswordSSOTokenMaxAge = time.Minute * 5 // GithubAppCredsExpirationDuration is the default time used to cache the GitHub app credentials GithubAppCredsExpirationDuration = time.Minute * 60 + // AzureServicePrincipalCredsExpirationDuration is the default time used to cache the Azure service principal credentials + // SP tokens are valid for 60 minutes, so cache for 59 minutes to avoid issues with token expiration when taking the cleanup interval of 1 minute into account + AzureServicePrincipalCredsExpirationDuration = time.Minute * 59 // PasswordPatten is the default password patten PasswordPatten = `^.{8,32}$` @@ -297,6 +300,8 @@ const ( EnvEnableGRPCTimeHistogramEnv = "ARGOCD_ENABLE_GRPC_TIME_HISTOGRAM" // EnvGithubAppCredsExpirationDuration controls the caching of Github app credentials. This value is in minutes (default: 60) EnvGithubAppCredsExpirationDuration = "ARGOCD_GITHUB_APP_CREDS_EXPIRATION_DURATION" + // EnvAzureServicePrincipalCredsExpirationDuration controls the caching of Azure service principal credentials. This value is in minutes (default: 59). Any value greater than 59 will be set to 59 minutes + EnvAzureServicePrincipalCredsExpirationDuration = "ARGOCD_AZURE_SERVICE_PRINCIPAL_CREDS_EXPIRATION_DURATION" // EnvHelmIndexCacheDuration controls how the helm repository index file is cached for (default: 0) EnvHelmIndexCacheDuration = "ARGOCD_HELM_INDEX_CACHE_DURATION" // EnvAppConfigPath allows to override the configuration path for repo server diff --git a/docs/assets/repo-add-azure-service-principal.png b/docs/assets/repo-add-azure-service-principal.png new file mode 100644 index 0000000000000000000000000000000000000000..ac1f07e0acb1155e4173fed1ac92049586e43268 GIT binary patch literal 76894 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%0D(t~h%gRcjiAHpB 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 %I2BtaZ0>Z(Z?YV2Q36{Ek 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 y [!WARNING] @@ -296,6 +296,39 @@ Example for Azure Container Registry/ Azure Devops repositories using Azure work Refer to [Azure Container Registry/Azure Repos using Azure Workload Identity](../user-guide/private-repositories.md#azure-container-registryazure-repos-using-azure-workload-identity) +Example for Azure Service Principal: + +```yaml +apiVersion: v1 +kind: Secret +metadata: + name: service-principal-for-azure-public-cloud + namespace: argocd + labels: + argocd.argoproj.io/secret-type: repository +stringData: + type: git + url: https://dev.azure.com/my-devops-organization/my-devops-project/_git/my-devops-repo + azureServicePrincipalClientId: 12345678-1234-1234-1234-123456789012 + azureServicePrincipalTenantId: 12345678-1234-1234-1234-123456789012 + azureServicePrincipalClientSecret: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +--- +apiVersion: v1 +kind: Secret +metadata: + name: service-principal-for-azure-other-cloud + namespace: argocd + labels: + argocd.argoproj.io/secret-type: repository +stringData: + type: git + url: https://dev.azure.com/my-devops-organization/my-devops-project/_git/my-devops-repo + azureActiveDirectoryEndpoint: https://login.microsoftonline.de + azureServicePrincipalClientId: 12345678-1234-1234-1234-123456789012 + azureServicePrincipalTenantId: 12345678-1234-1234-1234-123456789012 + azureServicePrincipalClientSecret: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +``` + ### Repository Credentials If you want to use the same credentials for multiple repositories, you can configure credential templates. Credential templates can carry the same credentials information as repositories. diff --git a/docs/user-guide/commands/argocd_admin_repo_generate-spec.md b/docs/user-guide/commands/argocd_admin_repo_generate-spec.md index f3e99e75c7..76351e4f69 100644 --- a/docs/user-guide/commands/argocd_admin_repo_generate-spec.md +++ b/docs/user-guide/commands/argocd_admin_repo_generate-spec.md @@ -59,33 +59,37 @@ argocd admin repo generate-spec REPOURL [flags] ### Options ``` - --bearer-token string bearer token to the Git BitBucket Data Center repository - --depth int Specify a custom depth for git clone operations. Unless specified, a full clone is performed using the depth of 0 - --enable-lfs enable git-lfs (Large File Support) on this repository - --enable-oci enable helm-oci (Helm OCI-Based Repository) (only valid for helm type repositories) - --force-http-basic-auth whether to force use of basic auth when connecting repository via HTTP - --gcp-service-account-key-path string service account key for the Google Cloud Platform - --github-app-enterprise-base-url string base url to use when using GitHub Enterprise (e.g. https://ghe.example.com/api/v3 - --github-app-id int id of the GitHub Application - --github-app-installation-id int installation id of the GitHub Application (optional, will be auto-discovered if not provided) - --github-app-private-key-path string private key of the GitHub Application - -h, --help help for generate-spec - --insecure-ignore-host-key disables SSH strict host key checking (deprecated, use --insecure-skip-server-verification instead) - --insecure-oci-force-http Use http when accessing an OCI repository - --insecure-skip-server-verification disables server certificate and host key checks - --name string name of the repository, mandatory for repositories of type helm - --no-proxy string don't access these targets via proxy - -o, --output string Output format. One of: json|yaml (default "yaml") - --password string password to the repository - --project string project of the repository - --proxy string use proxy to access repository - --ssh-private-key-path string path to the private ssh key (e.g. ~/.ssh/id_rsa) - --tls-client-cert-key-path string path to the TLS client cert's key (must be PEM format) - --tls-client-cert-path string path to the TLS client cert (must be PEM format) - --type string type of the repository, "git", "oci" or "helm" (default "git") - --use-azure-workload-identity whether to use azure workload identity for authentication - --username string username to the repository - --webhook-manifest-cache-warm-disabled disable manifest cache warming during webhook processing for this repository (recommended for large monorepos with plain YAML manifests) + --azure-active-directory-endpoint string Active Directory endpoint when not using default Azure public cloud (e.g. https://login.microsoftonline.de) + --azure-service-principal-client-id string client id of the Azure Service Principal + --azure-service-principal-client-secret string client secret of the Azure Service Principal + --azure-service-principal-tenant-id string tenant id of the Azure Service Principal + --bearer-token string bearer token to the Git BitBucket Data Center repository + --depth int Specify a custom depth for git clone operations. Unless specified, a full clone is performed using the depth of 0 + --enable-lfs enable git-lfs (Large File Support) on this repository + --enable-oci enable helm-oci (Helm OCI-Based Repository) (only valid for helm type repositories) + --force-http-basic-auth whether to force use of basic auth when connecting repository via HTTP + --gcp-service-account-key-path string service account key for the Google Cloud Platform + --github-app-enterprise-base-url string base url to use when using GitHub Enterprise (e.g. https://ghe.example.com/api/v3 + --github-app-id int id of the GitHub Application + --github-app-installation-id int installation id of the GitHub Application (optional, will be auto-discovered if not provided) + --github-app-private-key-path string private key of the GitHub Application + -h, --help help for generate-spec + --insecure-ignore-host-key disables SSH strict host key checking (deprecated, use --insecure-skip-server-verification instead) + --insecure-oci-force-http Use http when accessing an OCI repository + --insecure-skip-server-verification disables server certificate and host key checks + --name string name of the repository, mandatory for repositories of type helm + --no-proxy string don't access these targets via proxy + -o, --output string Output format. One of: json|yaml (default "yaml") + --password string password to the repository + --project string project of the repository + --proxy string use proxy to access repository + --ssh-private-key-path string path to the private ssh key (e.g. ~/.ssh/id_rsa) + --tls-client-cert-key-path string path to the TLS client cert's key (must be PEM format) + --tls-client-cert-path string path to the TLS client cert (must be PEM format) + --type string type of the repository, "git", "oci" or "helm" (default "git") + --use-azure-workload-identity whether to use azure workload identity for authentication + --username string username to the repository + --webhook-manifest-cache-warm-disabled disable manifest cache warming during webhook processing for this repository (recommended for large monorepos with plain YAML manifests) ``` ### Options inherited from parent commands diff --git a/docs/user-guide/commands/argocd_repo_add.md b/docs/user-guide/commands/argocd_repo_add.md index 29287b40d7..0c58c1e028 100644 --- a/docs/user-guide/commands/argocd_repo_add.md +++ b/docs/user-guide/commands/argocd_repo_add.md @@ -56,38 +56,48 @@ argocd repo add REPOURL [flags] # Add a private Git repository on Google Cloud Sources via GCP service account credentials argocd repo add https://source.developers.google.com/p/my-google-cloud-project/r/my-repo --gcp-service-account-key-path service-account-key.json + # Add a private Git repository on Azure Devops via Azure Service Principal credentials + argocd repo add https://dev.azure.com/my-devops-organization/my-devops-project/_git/my-devops-repo --azure-service-principal-client-id 12345678-1234-1234-1234-123456789012 --azure-service-principal-client-secret test --azure-service-principal-tenant-id 12345678-1234-1234-1234-123456789012 + + # Add a private Git repository on Azure Devops via Azure Service Principal credentials when not using default Azure public cloud + argocd repo add https://dev.azure.com/my-devops-organization/my-devops-project/_git/my-devops-repo --azure-service-principal-client-id 12345678-1234-1234-1234-123456789012 --azure-service-principal-client-secret test --azure-service-principal-tenant-id 12345678-1234-1234-1234-123456789012 --azure-active-directory-endpoint https://login.microsoftonline.de + ``` ### Options ``` - --bearer-token string bearer token to the Git BitBucket Data Center repository - --depth int Specify a custom depth for git clone operations. Unless specified, a full clone is performed using the depth of 0 - --enable-lfs enable git-lfs (Large File Support) on this repository - --enable-oci enable helm-oci (Helm OCI-Based Repository) (only valid for helm type repositories) - --force-http-basic-auth whether to force use of basic auth when connecting repository via HTTP - --gcp-service-account-key-path string service account key for the Google Cloud Platform - --github-app-enterprise-base-url string base url to use when using GitHub Enterprise (e.g. https://ghe.example.com/api/v3 - --github-app-id int id of the GitHub Application - --github-app-installation-id int installation id of the GitHub Application (optional, will be auto-discovered if not provided) - --github-app-private-key-path string private key of the GitHub Application - -h, --help help for add - --insecure-ignore-host-key disables SSH strict host key checking (deprecated, use --insecure-skip-server-verification instead) - --insecure-oci-force-http Use http when accessing an OCI repository - --insecure-skip-server-verification disables server certificate and host key checks - --name string name of the repository, mandatory for repositories of type helm - --no-proxy string don't access these targets via proxy - --password string password to the repository - --project string project of the repository - --proxy string use proxy to access repository - --ssh-private-key-path string path to the private ssh key (e.g. ~/.ssh/id_rsa) - --tls-client-cert-key-path string path to the TLS client cert's key (must be PEM format) - --tls-client-cert-path string path to the TLS client cert (must be PEM format) - --type string type of the repository, "git", "oci" or "helm" (default "git") - --upsert Override an existing repository with the same name even if the spec differs - --use-azure-workload-identity whether to use azure workload identity for authentication - --username string username to the repository - --webhook-manifest-cache-warm-disabled disable manifest cache warming during webhook processing for this repository (recommended for large monorepos with plain YAML manifests) + --azure-active-directory-endpoint string Active Directory endpoint when not using default Azure public cloud (e.g. https://login.microsoftonline.de) + --azure-service-principal-client-id string client id of the Azure Service Principal + --azure-service-principal-client-secret string client secret of the Azure Service Principal + --azure-service-principal-tenant-id string tenant id of the Azure Service Principal + --bearer-token string bearer token to the Git BitBucket Data Center repository + --depth int Specify a custom depth for git clone operations. Unless specified, a full clone is performed using the depth of 0 + --enable-lfs enable git-lfs (Large File Support) on this repository + --enable-oci enable helm-oci (Helm OCI-Based Repository) (only valid for helm type repositories) + --force-http-basic-auth whether to force use of basic auth when connecting repository via HTTP + --gcp-service-account-key-path string service account key for the Google Cloud Platform + --github-app-enterprise-base-url string base url to use when using GitHub Enterprise (e.g. https://ghe.example.com/api/v3 + --github-app-id int id of the GitHub Application + --github-app-installation-id int installation id of the GitHub Application (optional, will be auto-discovered if not provided) + --github-app-private-key-path string private key of the GitHub Application + -h, --help help for add + --insecure-ignore-host-key disables SSH strict host key checking (deprecated, use --insecure-skip-server-verification instead) + --insecure-oci-force-http Use http when accessing an OCI repository + --insecure-skip-server-verification disables server certificate and host key checks + --name string name of the repository, mandatory for repositories of type helm + --no-proxy string don't access these targets via proxy + --password string password to the repository + --project string project of the repository + --proxy string use proxy to access repository + --ssh-private-key-path string path to the private ssh key (e.g. ~/.ssh/id_rsa) + --tls-client-cert-key-path string path to the TLS client cert's key (must be PEM format) + --tls-client-cert-path string path to the TLS client cert (must be PEM format) + --type string type of the repository, "git", "oci" or "helm" (default "git") + --upsert Override an existing repository with the same name even if the spec differs + --use-azure-workload-identity whether to use azure workload identity for authentication + --username string username to the repository + --webhook-manifest-cache-warm-disabled disable manifest cache warming during webhook processing for this repository (recommended for large monorepos with plain YAML manifests) ``` ### Options inherited from parent commands diff --git a/docs/user-guide/commands/argocd_repocreds_add.md b/docs/user-guide/commands/argocd_repocreds_add.md index 0b67135d99..40cd5e6017 100644 --- a/docs/user-guide/commands/argocd_repocreds_add.md +++ b/docs/user-guide/commands/argocd_repocreds_add.md @@ -32,29 +32,39 @@ argocd repocreds add REPOURL [flags] # Add credentials with GCP credentials for all repositories under https://source.developers.google.com/p/my-google-cloud-project/r/ argocd repocreds add https://source.developers.google.com/p/my-google-cloud-project/r/ --gcp-service-account-key-path service-account-key.json + # Add credentials with Azure Service Principal to use for all repositories under https://dev.azure.com/my-devops-organization + argocd repocreds add https://dev.azure.com/my-devops-organization --azure-service-principal-client-id 12345678-1234-1234-1234-123456789012 --azure-service-principal-client-secret test --azure-service-principal-tenant-id 12345678-1234-1234-1234-123456789012 + + # Add credentials with Azure Service Principal to use for all repositories under https://dev.azure.com/my-devops-organization when not using default Azure public cloud + argocd repocreds add https://dev.azure.com/my-devops-organization --azure-service-principal-client-id 12345678-1234-1234-1234-123456789012 --azure-service-principal-client-secret test --azure-service-principal-tenant-id 12345678-1234-1234-1234-123456789012 --azure-active-directory-endpoint https://login.microsoftonline.de + ``` ### Options ``` - --bearer-token string bearer token to the Git repository - --enable-oci Specifies whether helm-oci support should be enabled for this repo - --force-http-basic-auth whether to force basic auth when connecting via HTTP - --gcp-service-account-key-path string service account key for the Google Cloud Platform - --github-app-enterprise-base-url string base url to use when using GitHub Enterprise (e.g. https://ghe.example.com/api/v3 - --github-app-id int id of the GitHub Application - --github-app-installation-id int installation id of the GitHub Application (optional, will be auto-discovered if not provided) - --github-app-private-key-path string private key of the GitHub Application - -h, --help help for add - --password string password to the repository - --proxy-url string If provided, this URL will be used to connect via proxy - --ssh-private-key-path string path to the private ssh key (e.g. ~/.ssh/id_rsa) - --tls-client-cert-key-path string path to the TLS client cert's key (must be PEM format) - --tls-client-cert-path string path to the TLS client cert (must be PEM format) - --type string type of the repository, "git" or "helm" (default "git") - --upsert Override an existing repository with the same name even if the spec differs - --use-azure-workload-identity whether to use azure workload identity for authentication - --username string username to the repository + --azure-active-directory-endpoint string Active Directory endpoint when not using default Azure public cloud (e.g. https://login.microsoftonline.de) + --azure-service-principal-client-id string client id of the Azure Service Principal + --azure-service-principal-client-secret string client secret of the Azure Service Principal + --azure-service-principal-tenant-id string tenant id of the Azure Service Principal + --bearer-token string bearer token to the Git repository + --enable-oci Specifies whether helm-oci support should be enabled for this repo + --force-http-basic-auth whether to force basic auth when connecting via HTTP + --gcp-service-account-key-path string service account key for the Google Cloud Platform + --github-app-enterprise-base-url string base url to use when using GitHub Enterprise (e.g. https://ghe.example.com/api/v3 + --github-app-id int id of the GitHub Application + --github-app-installation-id int installation id of the GitHub Application (optional, will be auto-discovered if not provided) + --github-app-private-key-path string private key of the GitHub Application + -h, --help help for add + --password string password to the repository + --proxy-url string If provided, this URL will be used to connect via proxy + --ssh-private-key-path string path to the private ssh key (e.g. ~/.ssh/id_rsa) + --tls-client-cert-key-path string path to the TLS client cert's key (must be PEM format) + --tls-client-cert-path string path to the TLS client cert (must be PEM format) + --type string type of the repository, "git" or "helm" (default "git") + --upsert Override an existing repository with the same name even if the spec differs + --use-azure-workload-identity whether to use azure workload identity for authentication + --username string username to the repository ``` ### Options inherited from parent commands diff --git a/docs/user-guide/private-repositories.md b/docs/user-guide/private-repositories.md index 0db3a284b3..d789cd5a60 100644 --- a/docs/user-guide/private-repositories.md +++ b/docs/user-guide/private-repositories.md @@ -242,6 +242,36 @@ stringData: useAzureWorkloadIdentity: "true" ``` +### Azure Devops using Service Principal + +Azure DevOps repositories can be accessed using credentials from a Service Principal. Refer to steps 1,2 and 3 from the [Use service principals and managed identities in Azure DevOps](https://learn.microsoft.com/en-us/azure/devops/integrate/get-started/authentication/service-principal-managed-identity?view=azure-devops) documentation on how to create a service principal and configure access to Azure DevOps. + +> [!NOTE] +> Ensure your service principal has at least `Project Readers` permissions to the `Project` that contains the repository. This is the minimum requirement. + +You can configure access to your Git repository hosted on Azure DevOps with Service Principal by either using the CLI or the UI. + +Using the CLI: + +``` +argocd repo add https://dev.azure.com/my-devops-organization/my-devops-project/_git/my-devops-repo --azure-service-principal-tenant-id 12345678-1234-1234-1234-123456789012 --azure-service-principal-client-id 12345678-1234-1234-1234-123456789012 --azure-service-principal-client-secret test +``` + +> [!NOTE] +> To use an Azure cloud other than the default public cloud using the CLI add `--azure-active-directory-endpoint https://login.microsoftonline.de` flag. + +Using the UI: + +1. Navigate to `Settings/Repositories` + + ![connect repo overview](../assets/repo-add-overview.png) + +2. Click `Connect Repo` button, choose connection method: `Via Azure Service Principal`, enter the URL, Tenant Id, Client Id, Client Secret, and Active Directory Endpoint if not using default Azure public cloud. + + ![connect repo](../assets/repo-add-azure-service-principal.png) + +3. Click `Connect` to test the connection and have the repository added + ## Credential templates You can also set up credentials to serve as templates for connecting repositories, without having to repeat credential configuration. For example, if you setup credential templates for the URL prefix `https://github.com/argoproj`, these credentials will be used for all repositories with this URL as prefix (e.g. `https://github.com/argoproj/argocd-example-apps`) that do not have their own credentials configured. diff --git a/pkg/apiclient/repository/repository.pb.go b/pkg/apiclient/repository/repository.pb.go index f9d9d6a417..d9bce8314b 100644 --- a/pkg/apiclient/repository/repository.pb.go +++ b/pkg/apiclient/repository/repository.pb.go @@ -401,10 +401,18 @@ type RepoAccessQuery struct { // BearerToken contains the bearer token used for Git auth at the repo server BearerToken string `protobuf:"bytes,21,opt,name=bearerToken,proto3" json:"bearerToken,omitempty"` // Whether https should be disabled for an OCI repo - InsecureOciForceHttp bool `protobuf:"varint,22,opt,name=insecureOciForceHttp,proto3" json:"insecureOciForceHttp,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + InsecureOciForceHttp bool `protobuf:"varint,22,opt,name=insecureOciForceHttp,proto3" json:"insecureOciForceHttp,omitempty"` + // Azure Service Principal Client ID + AzureServicePrincipalClientId string `protobuf:"bytes,23,opt,name=azureServicePrincipalClientId,proto3" json:"azureServicePrincipalClientId,omitempty"` + // Azure Service Principal Client Secret + AzureServicePrincipalClientSecret string `protobuf:"bytes,24,opt,name=azureServicePrincipalClientSecret,proto3" json:"azureServicePrincipalClientSecret,omitempty"` + // Azure Service Principal Tenant ID + AzureServicePrincipalTenantId string `protobuf:"bytes,25,opt,name=azureServicePrincipalTenantId,proto3" json:"azureServicePrincipalTenantId,omitempty"` + // Azure Active Directory Endpoint + AzureActiveDirectoryEndpoint string `protobuf:"bytes,26,opt,name=azureActiveDirectoryEndpoint,proto3" json:"azureActiveDirectoryEndpoint,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *RepoAccessQuery) Reset() { *m = RepoAccessQuery{} } @@ -587,6 +595,34 @@ func (m *RepoAccessQuery) GetInsecureOciForceHttp() bool { return false } +func (m *RepoAccessQuery) GetAzureServicePrincipalClientId() string { + if m != nil { + return m.AzureServicePrincipalClientId + } + return "" +} + +func (m *RepoAccessQuery) GetAzureServicePrincipalClientSecret() string { + if m != nil { + return m.AzureServicePrincipalClientSecret + } + return "" +} + +func (m *RepoAccessQuery) GetAzureServicePrincipalTenantId() string { + if m != nil { + return m.AzureServicePrincipalTenantId + } + return "" +} + +func (m *RepoAccessQuery) GetAzureActiveDirectoryEndpoint() string { + if m != nil { + return m.AzureActiveDirectoryEndpoint + } + return "" +} + type RepoResponse struct { XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -757,94 +793,99 @@ func init() { } var fileDescriptor_8d38260443475705 = []byte{ - // 1392 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0xdf, 0x6e, 0x1b, 0xc5, - 0x17, 0xd6, 0x26, 0x8d, 0x9b, 0x4c, 0x9a, 0xd6, 0x9d, 0x24, 0xed, 0xfe, 0xdc, 0x34, 0xcd, 0x6f, - 0x5b, 0xa2, 0x34, 0x6a, 0xd7, 0x4d, 0x0a, 0xa2, 0x2a, 0x02, 0xc9, 0x4d, 0x4a, 0x6b, 0x11, 0x91, - 0xb2, 0x6d, 0xa9, 0x84, 0x40, 0x68, 0xb2, 0x3e, 0xb1, 0xb7, 0xd9, 0xec, 0x4e, 0x67, 0xc6, 0x6e, - 0x4d, 0xd5, 0x1b, 0x84, 0x10, 0x12, 0xdc, 0x20, 0x04, 0xe2, 0x0e, 0x2e, 0x90, 0x90, 0xe0, 0x12, - 0x89, 0x67, 0xe0, 0x12, 0x89, 0x17, 0x40, 0x15, 0x0f, 0xc1, 0x25, 0x9a, 0x33, 0xeb, 0xf5, 0x3a, - 0xf1, 0x9f, 0x44, 0x4d, 0x73, 0x37, 0x73, 0xce, 0xec, 0xf9, 0xbe, 0xf3, 0xcd, 0x99, 0x33, 0x63, - 0x13, 0x47, 0x82, 0x68, 0x80, 0x28, 0x0a, 0xe0, 0xb1, 0x0c, 0x54, 0x2c, 0x9a, 0x99, 0xa1, 0xcb, - 0x45, 0xac, 0x62, 0x4a, 0xda, 0x96, 0xc2, 0x4c, 0x35, 0x8e, 0xab, 0x21, 0x14, 0x19, 0x0f, 0x8a, - 0x2c, 0x8a, 0x62, 0xc5, 0x54, 0x10, 0x47, 0xd2, 0xac, 0x2c, 0xac, 0x55, 0x03, 0x55, 0xab, 0x6f, - 0xb8, 0x7e, 0xbc, 0x5d, 0x64, 0xa2, 0x1a, 0x73, 0x11, 0x3f, 0xc4, 0xc1, 0x65, 0xbf, 0x52, 0x6c, - 0x5c, 0x2d, 0xf2, 0xad, 0xaa, 0xfe, 0x52, 0x16, 0x19, 0xe7, 0x61, 0xe0, 0xe3, 0xb7, 0xc5, 0xc6, - 0x12, 0x0b, 0x79, 0x8d, 0x2d, 0x15, 0xab, 0x10, 0x81, 0x60, 0x0a, 0x2a, 0x49, 0xb4, 0x9b, 0x03, - 0xa2, 0x21, 0xad, 0x81, 0xf4, 0x9d, 0x26, 0x99, 0xf0, 0x80, 0xc7, 0x25, 0xce, 0xe5, 0x7b, 0x75, - 0x10, 0x4d, 0x4a, 0xc9, 0x11, 0xbd, 0xc8, 0xb6, 0xe6, 0xac, 0x85, 0x31, 0x0f, 0xc7, 0xb4, 0x40, - 0x46, 0x05, 0x34, 0x02, 0x19, 0xc4, 0x91, 0x3d, 0x84, 0xf6, 0x74, 0x4e, 0x6d, 0x72, 0x94, 0x71, - 0xfe, 0x2e, 0xdb, 0x06, 0x7b, 0x18, 0x5d, 0xad, 0x29, 0x9d, 0x25, 0x84, 0x71, 0x7e, 0x47, 0xc4, - 0x0f, 0xc1, 0x57, 0xf6, 0x11, 0x74, 0x66, 0x2c, 0xce, 0x12, 0x39, 0x5a, 0xe2, 0xbc, 0x1c, 0x6d, - 0xc6, 0x1a, 0x54, 0x35, 0x39, 0xb4, 0x40, 0xf5, 0x58, 0xdb, 0x38, 0x53, 0xb5, 0x04, 0x10, 0xc7, - 0xce, 0xbf, 0x16, 0x99, 0x4c, 0xe8, 0xae, 0x82, 0x62, 0x41, 0x98, 0x90, 0xae, 0x92, 0x9c, 0x8c, - 0xeb, 0xc2, 0x37, 0x11, 0xc6, 0x97, 0xd7, 0xdd, 0xb6, 0x3a, 0x6e, 0x4b, 0x1d, 0x1c, 0x7c, 0xec, - 0x57, 0xdc, 0xc6, 0x55, 0x97, 0x6f, 0x55, 0x5d, 0xad, 0xb5, 0x9b, 0xd1, 0xda, 0x6d, 0x69, 0xed, - 0x96, 0xda, 0xc6, 0xbb, 0x18, 0xd6, 0x4b, 0xc2, 0x67, 0xb3, 0x1d, 0xea, 0x97, 0xed, 0xf0, 0xce, - 0x6c, 0xe9, 0x1c, 0x19, 0x37, 0x31, 0xca, 0x51, 0x05, 0x9e, 0xa0, 0x1c, 0x23, 0x5e, 0xd6, 0x44, - 0x67, 0xc8, 0x58, 0x03, 0x84, 0x16, 0xb5, 0x5c, 0xb1, 0x47, 0xd0, 0xdf, 0x36, 0x38, 0x6f, 0x92, - 0x7c, 0x6b, 0xa3, 0x3c, 0x90, 0x3c, 0x8e, 0x24, 0xd0, 0x8b, 0x64, 0x24, 0x50, 0xb0, 0x2d, 0x6d, - 0x6b, 0x6e, 0x78, 0x61, 0x7c, 0x79, 0xd2, 0xcd, 0x6c, 0x6f, 0x22, 0xad, 0x67, 0x56, 0x38, 0x3e, - 0x19, 0xd3, 0x9f, 0xf7, 0xde, 0x63, 0x87, 0x1c, 0xdb, 0x8c, 0x75, 0xaa, 0xb0, 0x29, 0x40, 0x1a, - 0xd9, 0x47, 0xbd, 0x0e, 0xdb, 0xa0, 0x1c, 0x9d, 0xdf, 0x72, 0xe4, 0x04, 0x92, 0xf4, 0x7d, 0x90, - 0xfd, 0xeb, 0xa9, 0x2e, 0x41, 0x44, 0x6d, 0x19, 0xd3, 0xb9, 0xf6, 0x71, 0x26, 0xe5, 0xe3, 0x58, - 0x54, 0x12, 0x84, 0x74, 0x4e, 0x2f, 0x90, 0x09, 0x29, 0x6b, 0x77, 0x44, 0xd0, 0x60, 0x0a, 0xde, - 0x81, 0x66, 0x52, 0x54, 0x9d, 0x46, 0x1d, 0x21, 0x88, 0x24, 0xf8, 0x75, 0x01, 0x28, 0xe3, 0xa8, - 0x97, 0xce, 0xe9, 0x25, 0x72, 0x52, 0x85, 0x72, 0x25, 0x0c, 0x20, 0x52, 0x2b, 0x20, 0xd4, 0x2a, - 0x53, 0xcc, 0xce, 0x61, 0x94, 0xdd, 0x0e, 0xba, 0x48, 0xf2, 0x1d, 0x46, 0x0d, 0x79, 0x14, 0x17, - 0xef, 0xb2, 0xa7, 0x25, 0x3c, 0xd6, 0x59, 0xc2, 0x98, 0x23, 0x31, 0x36, 0xcc, 0x6f, 0x86, 0x8c, - 0x41, 0xc4, 0x36, 0x42, 0x58, 0xf7, 0x03, 0x7b, 0x1c, 0xe9, 0xb5, 0x0d, 0xf4, 0x0a, 0x99, 0x34, - 0x95, 0x5b, 0xd2, 0xaa, 0xa6, 0x79, 0x1e, 0xc3, 0x00, 0xdd, 0x5c, 0xba, 0xae, 0x52, 0x73, 0x79, - 0xd5, 0x9e, 0x98, 0xb3, 0x16, 0x86, 0xbd, 0xac, 0x89, 0x5e, 0x23, 0xa7, 0xdb, 0xd3, 0x48, 0x2a, - 0x16, 0x86, 0x58, 0xda, 0xe5, 0x55, 0xfb, 0x38, 0xae, 0xee, 0xe5, 0xa6, 0x6f, 0x91, 0x42, 0xea, - 0xba, 0x19, 0x29, 0x10, 0x5c, 0x04, 0x12, 0x6e, 0x30, 0x09, 0xf7, 0x45, 0x68, 0x9f, 0x40, 0x52, - 0x7d, 0x56, 0xd0, 0x29, 0x32, 0xc2, 0x45, 0xfc, 0xa4, 0x69, 0xe7, 0x71, 0xa9, 0x99, 0xe8, 0x33, - 0xc4, 0x93, 0x12, 0x3a, 0x69, 0xce, 0x50, 0x32, 0xa5, 0xcb, 0x64, 0xaa, 0xea, 0xf3, 0xbb, 0x20, - 0x1a, 0x81, 0x0f, 0x25, 0xdf, 0x8f, 0xeb, 0x11, 0x6a, 0x4e, 0x71, 0x59, 0x57, 0x1f, 0x75, 0x09, - 0xc5, 0x1a, 0xbd, 0xad, 0x14, 0xbf, 0xc1, 0x64, 0xe0, 0x97, 0xea, 0xaa, 0x66, 0x4f, 0xa2, 0xb0, - 0x5d, 0x3c, 0xf4, 0x3a, 0xb1, 0xeb, 0x12, 0x4a, 0x9f, 0xd4, 0x05, 0x3c, 0x88, 0xc5, 0x56, 0x18, - 0xb3, 0x4a, 0xb9, 0x02, 0x91, 0x0a, 0x54, 0xd3, 0x9e, 0xc2, 0xaf, 0x7a, 0xfa, 0xb5, 0xd6, 0x1b, - 0xc0, 0x04, 0x88, 0x7b, 0xf1, 0x16, 0x44, 0xf6, 0x34, 0xd2, 0xca, 0x9a, 0x74, 0x06, 0xad, 0x5a, - 0x5b, 0xf7, 0x83, 0xb7, 0x5b, 0xf0, 0xf6, 0x29, 0x8c, 0xdc, 0xd5, 0xe7, 0x1c, 0x27, 0xc7, 0xf4, - 0xa1, 0x69, 0x9d, 0x6a, 0xe7, 0x67, 0x8b, 0x9c, 0xd4, 0x86, 0x15, 0x01, 0x4c, 0x81, 0x07, 0x8f, - 0xea, 0x20, 0x15, 0xfd, 0x30, 0x73, 0x8e, 0xc6, 0x97, 0x6f, 0xbf, 0x58, 0x83, 0xf3, 0xd2, 0x3e, - 0x91, 0x9c, 0xc8, 0x53, 0x24, 0x57, 0xe7, 0x12, 0x84, 0x4a, 0xce, 0x7d, 0x32, 0xd3, 0xd5, 0xea, - 0x0b, 0xa8, 0xc8, 0xf5, 0x28, 0x6c, 0xe2, 0x71, 0x1c, 0xf5, 0xda, 0x06, 0xe7, 0x91, 0x21, 0x7a, - 0x9f, 0x57, 0x0e, 0x8b, 0xe8, 0xf2, 0x67, 0xa7, 0x0d, 0xa6, 0x31, 0x26, 0xe5, 0x40, 0xbf, 0xb2, - 0xc8, 0x91, 0xb5, 0x40, 0x2a, 0x3a, 0x9d, 0x6d, 0x81, 0x69, 0xc3, 0x2b, 0xac, 0x1d, 0x14, 0x0b, - 0x0d, 0xe2, 0x9c, 0xfb, 0xf4, 0xaf, 0x7f, 0xbe, 0x19, 0x3a, 0x45, 0xa7, 0xf0, 0xa2, 0x6f, 0x2c, - 0xb5, 0x6f, 0xd5, 0x00, 0xe4, 0x17, 0x43, 0x16, 0xfd, 0xd2, 0x22, 0xc3, 0xb7, 0xa0, 0x27, 0x9b, - 0x03, 0xd3, 0xc4, 0x39, 0x8f, 0x4c, 0xce, 0xd2, 0x33, 0xdd, 0x98, 0x14, 0x9f, 0xea, 0xd9, 0x33, - 0xfa, 0x9d, 0x45, 0x46, 0x6f, 0x81, 0x7a, 0x20, 0x02, 0x05, 0x2f, 0x9f, 0xd2, 0x45, 0xa4, 0x74, - 0x9e, 0xfe, 0xbf, 0x45, 0xe9, 0xb1, 0xc6, 0xbd, 0xdc, 0x8d, 0xd8, 0xb7, 0x16, 0xc9, 0x6b, 0x41, - 0xbd, 0x8c, 0xef, 0x70, 0x76, 0x70, 0xa6, 0xdf, 0x0e, 0xd2, 0x1f, 0x2d, 0x32, 0xad, 0x97, 0xa1, - 0x62, 0x87, 0x4f, 0xce, 0x41, 0x72, 0x33, 0xb4, 0xd0, 0x5b, 0x41, 0xfa, 0x11, 0x19, 0x35, 0xca, - 0x6d, 0xf6, 0x24, 0x95, 0xef, 0x34, 0x6f, 0x4a, 0x67, 0x01, 0x03, 0x3b, 0x74, 0xae, 0x4f, 0xb5, - 0x14, 0x85, 0x0e, 0x59, 0x21, 0xe3, 0x3a, 0xfc, 0xfa, 0x4a, 0xf9, 0x1e, 0xab, 0xee, 0x03, 0xe1, - 0x12, 0x22, 0xcc, 0xd3, 0x0b, 0xfd, 0x10, 0x62, 0x3f, 0xb8, 0xac, 0x74, 0xd8, 0x6d, 0x93, 0x84, - 0x7e, 0xd2, 0xd0, 0xff, 0xed, 0x84, 0x48, 0x5f, 0xa4, 0x85, 0x99, 0x6e, 0xae, 0xb4, 0x5b, 0xee, - 0x29, 0x29, 0xa6, 0x21, 0xbe, 0xb6, 0xc8, 0xc4, 0x2d, 0x50, 0xed, 0xb7, 0x23, 0x3d, 0xd7, 0x25, - 0x72, 0xf6, 0x5d, 0x59, 0x70, 0x7a, 0x2f, 0x48, 0x09, 0xbc, 0x81, 0x04, 0x5e, 0x73, 0xae, 0x74, - 0x27, 0x60, 0x5e, 0x78, 0x18, 0xe7, 0xbe, 0xb7, 0x86, 0x54, 0x2a, 0x26, 0xc2, 0x75, 0x6b, 0x91, - 0x36, 0x90, 0xd2, 0x6d, 0x08, 0xb7, 0x57, 0x6a, 0x4c, 0xa8, 0x9e, 0x52, 0xcf, 0x66, 0xcd, 0xed, - 0xe5, 0x29, 0x09, 0x17, 0x49, 0x2c, 0xd0, 0xf9, 0x7e, 0x2a, 0xd4, 0x20, 0xdc, 0xf6, 0x0d, 0xcc, - 0xf7, 0x16, 0xc9, 0x99, 0xfb, 0x85, 0x9e, 0xdd, 0x89, 0xd8, 0x71, 0xef, 0x1c, 0x60, 0x67, 0x78, - 0xc5, 0xd4, 0xb5, 0xd3, 0xf5, 0xd0, 0x5d, 0xc7, 0xf6, 0xae, 0x9b, 0xe7, 0x0f, 0x16, 0xc9, 0xb7, - 0x28, 0xb4, 0xbe, 0x3d, 0x3c, 0x92, 0xce, 0x60, 0x92, 0xf4, 0x17, 0x8b, 0x4c, 0x1b, 0xfc, 0xce, - 0x0e, 0x71, 0x88, 0x34, 0x93, 0xaa, 0x77, 0xfa, 0xf4, 0x88, 0x84, 0xec, 0x4f, 0x16, 0xc9, 0x99, - 0x0b, 0x7a, 0x37, 0xbb, 0x8e, 0x8b, 0xfb, 0x00, 0xd9, 0x2d, 0x99, 0x6a, 0x2c, 0xf4, 0x39, 0x93, - 0x48, 0xe5, 0x59, 0x7b, 0xd7, 0x7f, 0xb5, 0x48, 0xbe, 0x45, 0xa7, 0xb7, 0x9c, 0x2f, 0x8b, 0xb0, - 0xbb, 0x3f, 0xc2, 0xf4, 0x77, 0x8b, 0x4c, 0x1b, 0x2e, 0x03, 0x2b, 0xe0, 0x65, 0x51, 0x7e, 0x15, - 0x29, 0xbb, 0x85, 0xf9, 0x41, 0xf7, 0x6c, 0x07, 0x71, 0x46, 0x72, 0xab, 0x10, 0x42, 0xef, 0x87, - 0x80, 0xbd, 0xd3, 0x9c, 0xb6, 0x98, 0x79, 0xf3, 0xd6, 0x58, 0xec, 0xf7, 0xd6, 0xd0, 0x3b, 0x59, - 0x23, 0x79, 0x03, 0x91, 0x51, 0x65, 0xdf, 0x60, 0xe7, 0xf7, 0x00, 0x46, 0x25, 0x99, 0x36, 0x48, - 0x3b, 0x37, 0x61, 0xdf, 0x70, 0xc9, 0xa3, 0x65, 0x71, 0x0f, 0x8f, 0x96, 0xa7, 0xe4, 0xf8, 0xfb, - 0x2c, 0x0c, 0xf4, 0xa6, 0x9a, 0x9f, 0xb9, 0xf4, 0xcc, 0xae, 0x4b, 0xa2, 0xfd, 0xf3, 0xb7, 0x0f, - 0xe6, 0x32, 0x62, 0x5e, 0x72, 0xfa, 0xde, 0x95, 0x8d, 0x04, 0x2a, 0xd9, 0xbe, 0xcf, 0x2d, 0x32, - 0xd9, 0x42, 0xc7, 0xa4, 0x5f, 0x8c, 0xc2, 0x35, 0xa4, 0xb0, 0xec, 0x2c, 0x0e, 0x4c, 0x7b, 0x07, - 0x91, 0x1b, 0x37, 0xff, 0x78, 0x3e, 0x6b, 0xfd, 0xf9, 0x7c, 0xd6, 0xfa, 0xfb, 0xf9, 0xac, 0xf5, - 0xc1, 0xeb, 0x7b, 0xfb, 0x67, 0xcb, 0xc7, 0x1f, 0xcc, 0x99, 0xff, 0xa0, 0x36, 0x72, 0xf8, 0x27, - 0xd4, 0xd5, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0xbc, 0x0b, 0xd2, 0x3f, 0x69, 0x13, 0x00, 0x00, + // 1471 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0x5f, 0x6f, 0x13, 0xc7, + 0x16, 0xd7, 0x26, 0x24, 0x24, 0x13, 0x02, 0x66, 0x92, 0xc0, 0x62, 0x42, 0x08, 0x0b, 0x37, 0x0a, + 0x11, 0xac, 0x49, 0xb8, 0x57, 0x17, 0x71, 0x75, 0x2b, 0x39, 0x7f, 0x0a, 0x56, 0xa3, 0x86, 0x1a, + 0x28, 0x52, 0xd5, 0xaa, 0x9a, 0xac, 0x4f, 0xec, 0x25, 0x9b, 0xdd, 0x61, 0x66, 0x6c, 0x70, 0x11, + 0x2f, 0x55, 0x55, 0x55, 0x6a, 0x5f, 0xaa, 0xaa, 0x55, 0xdf, 0xda, 0x87, 0x4a, 0x95, 0xda, 0xf7, + 0x7e, 0x86, 0x3e, 0xb6, 0xea, 0x17, 0xa8, 0x50, 0x3f, 0x44, 0x1f, 0xab, 0x39, 0xb3, 0x5e, 0xaf, + 0x13, 0x7b, 0x9d, 0x88, 0x90, 0xb7, 0x9d, 0x73, 0x8e, 0xcf, 0xef, 0x77, 0x7e, 0x73, 0xf6, 0xcc, + 0x78, 0x89, 0x23, 0x41, 0x34, 0x40, 0x14, 0x04, 0xf0, 0x48, 0xfa, 0x2a, 0x12, 0xcd, 0xd4, 0xa3, + 0xcb, 0x45, 0xa4, 0x22, 0x4a, 0xda, 0x96, 0xfc, 0x74, 0x35, 0x8a, 0xaa, 0x01, 0x14, 0x18, 0xf7, + 0x0b, 0x2c, 0x0c, 0x23, 0xc5, 0x94, 0x1f, 0x85, 0xd2, 0x44, 0xe6, 0xd7, 0xab, 0xbe, 0xaa, 0xd5, + 0x37, 0x5d, 0x2f, 0xda, 0x29, 0x30, 0x51, 0x8d, 0xb8, 0x88, 0x1e, 0xe3, 0xc3, 0x75, 0xaf, 0x52, + 0x68, 0xdc, 0x2c, 0xf0, 0xed, 0xaa, 0xfe, 0xa5, 0x2c, 0x30, 0xce, 0x03, 0xdf, 0xc3, 0xdf, 0x16, + 0x1a, 0x8b, 0x2c, 0xe0, 0x35, 0xb6, 0x58, 0xa8, 0x42, 0x08, 0x82, 0x29, 0xa8, 0xc4, 0xd9, 0xd6, + 0xfa, 0x64, 0x43, 0x5a, 0x7d, 0xe9, 0x3b, 0x4d, 0x32, 0x5e, 0x06, 0x1e, 0x15, 0x39, 0x97, 0xef, + 0xd4, 0x41, 0x34, 0x29, 0x25, 0xc7, 0x74, 0x90, 0x6d, 0xcd, 0x5a, 0xf3, 0xa3, 0x65, 0x7c, 0xa6, + 0x79, 0x32, 0x22, 0xa0, 0xe1, 0x4b, 0x3f, 0x0a, 0xed, 0x01, 0xb4, 0x27, 0x6b, 0x6a, 0x93, 0xe3, + 0x8c, 0xf3, 0xb7, 0xd9, 0x0e, 0xd8, 0x83, 0xe8, 0x6a, 0x2d, 0xe9, 0x0c, 0x21, 0x8c, 0xf3, 0x7b, + 0x22, 0x7a, 0x0c, 0x9e, 0xb2, 0x8f, 0xa1, 0x33, 0x65, 0x71, 0x16, 0xc9, 0xf1, 0x22, 0xe7, 0xa5, + 0x70, 0x2b, 0xd2, 0xa0, 0xaa, 0xc9, 0xa1, 0x05, 0xaa, 0x9f, 0xb5, 0x8d, 0x33, 0x55, 0x8b, 0x01, + 0xf1, 0xd9, 0xf9, 0xdb, 0x22, 0x13, 0x31, 0xdd, 0x55, 0x50, 0xcc, 0x0f, 0x62, 0xd2, 0x55, 0x32, + 0x2c, 0xa3, 0xba, 0xf0, 0x4c, 0x86, 0xb1, 0xa5, 0x0d, 0xb7, 0xad, 0x8e, 0xdb, 0x52, 0x07, 0x1f, + 0x3e, 0xf4, 0x2a, 0x6e, 0xe3, 0xa6, 0xcb, 0xb7, 0xab, 0xae, 0xd6, 0xda, 0x4d, 0x69, 0xed, 0xb6, + 0xb4, 0x76, 0x8b, 0x6d, 0xe3, 0x7d, 0x4c, 0x5b, 0x8e, 0xd3, 0xa7, 0xab, 0x1d, 0xc8, 0xaa, 0x76, + 0x70, 0x77, 0xb5, 0x74, 0x96, 0x8c, 0x99, 0x1c, 0xa5, 0xb0, 0x02, 0xcf, 0x50, 0x8e, 0xa1, 0x72, + 0xda, 0x44, 0xa7, 0xc9, 0x68, 0x03, 0x84, 0x16, 0xb5, 0x54, 0xb1, 0x87, 0xd0, 0xdf, 0x36, 0x38, + 0xff, 0x27, 0xb9, 0xd6, 0x46, 0x95, 0x41, 0xf2, 0x28, 0x94, 0x40, 0xaf, 0x92, 0x21, 0x5f, 0xc1, + 0x8e, 0xb4, 0xad, 0xd9, 0xc1, 0xf9, 0xb1, 0xa5, 0x09, 0x37, 0xb5, 0xbd, 0xb1, 0xb4, 0x65, 0x13, + 0xe1, 0x78, 0x64, 0x54, 0xff, 0xbc, 0xf7, 0x1e, 0x3b, 0xe4, 0xc4, 0x56, 0xa4, 0x4b, 0x85, 0x2d, + 0x01, 0xd2, 0xc8, 0x3e, 0x52, 0xee, 0xb0, 0xf5, 0xab, 0xd1, 0xf9, 0x7d, 0x84, 0x9c, 0x42, 0x92, + 0x9e, 0x07, 0x32, 0xbb, 0x9f, 0xea, 0x12, 0x44, 0xd8, 0x96, 0x31, 0x59, 0x6b, 0x1f, 0x67, 0x52, + 0x3e, 0x8d, 0x44, 0x25, 0x46, 0x48, 0xd6, 0xf4, 0x0a, 0x19, 0x97, 0xb2, 0x76, 0x4f, 0xf8, 0x0d, + 0xa6, 0xe0, 0x2d, 0x68, 0xc6, 0x4d, 0xd5, 0x69, 0xd4, 0x19, 0xfc, 0x50, 0x82, 0x57, 0x17, 0x80, + 0x32, 0x8e, 0x94, 0x93, 0x35, 0xbd, 0x46, 0x4e, 0xab, 0x40, 0xae, 0x04, 0x3e, 0x84, 0x6a, 0x05, + 0x84, 0x5a, 0x65, 0x8a, 0xd9, 0xc3, 0x98, 0x65, 0xaf, 0x83, 0x2e, 0x90, 0x5c, 0x87, 0x51, 0x43, + 0x1e, 0xc7, 0xe0, 0x3d, 0xf6, 0xa4, 0x85, 0x47, 0x3b, 0x5b, 0x18, 0x6b, 0x24, 0xc6, 0x86, 0xf5, + 0x4d, 0x93, 0x51, 0x08, 0xd9, 0x66, 0x00, 0x1b, 0x9e, 0x6f, 0x8f, 0x21, 0xbd, 0xb6, 0x81, 0xde, + 0x20, 0x13, 0xa6, 0x73, 0x8b, 0x5a, 0xd5, 0xa4, 0xce, 0x13, 0x98, 0xa0, 0x9b, 0x4b, 0xf7, 0x55, + 0x62, 0x2e, 0xad, 0xda, 0xe3, 0xb3, 0xd6, 0xfc, 0x60, 0x39, 0x6d, 0xa2, 0xb7, 0xc8, 0xd9, 0xf6, + 0x32, 0x94, 0x8a, 0x05, 0x01, 0xb6, 0x76, 0x69, 0xd5, 0x3e, 0x89, 0xd1, 0xbd, 0xdc, 0xf4, 0x0d, + 0x92, 0x4f, 0x5c, 0x6b, 0xa1, 0x02, 0xc1, 0x85, 0x2f, 0x61, 0x99, 0x49, 0x78, 0x28, 0x02, 0xfb, + 0x14, 0x92, 0xca, 0x88, 0xa0, 0x93, 0x64, 0x88, 0x8b, 0xe8, 0x59, 0xd3, 0xce, 0x61, 0xa8, 0x59, + 0xe8, 0x77, 0x88, 0xc7, 0x2d, 0x74, 0xda, 0xbc, 0x43, 0xf1, 0x92, 0x2e, 0x91, 0xc9, 0xaa, 0xc7, + 0xef, 0x83, 0x68, 0xf8, 0x1e, 0x14, 0x3d, 0x2f, 0xaa, 0x87, 0xa8, 0x39, 0xc5, 0xb0, 0xae, 0x3e, + 0xea, 0x12, 0x8a, 0x3d, 0x7a, 0x57, 0x29, 0xbe, 0xcc, 0xa4, 0xef, 0x15, 0xeb, 0xaa, 0x66, 0x4f, + 0xa0, 0xb0, 0x5d, 0x3c, 0xf4, 0x36, 0xb1, 0xeb, 0x12, 0x8a, 0x1f, 0xd5, 0x05, 0x3c, 0x8a, 0xc4, + 0x76, 0x10, 0xb1, 0x4a, 0xa9, 0x02, 0xa1, 0xf2, 0x55, 0xd3, 0x9e, 0xc4, 0x5f, 0xf5, 0xf4, 0x6b, + 0xad, 0x37, 0x81, 0x09, 0x10, 0x0f, 0xa2, 0x6d, 0x08, 0xed, 0x29, 0xa4, 0x95, 0x36, 0xe9, 0x0a, + 0x5a, 0xbd, 0xb6, 0xe1, 0xf9, 0x6f, 0xb6, 0xe0, 0xed, 0x33, 0x98, 0xb9, 0xab, 0x8f, 0xae, 0x92, + 0x0b, 0x4c, 0xc3, 0xc5, 0xb5, 0xdd, 0x13, 0x7e, 0xe8, 0xf9, 0x9c, 0x05, 0xa6, 0xbf, 0x4a, 0x15, + 0xfb, 0x2c, 0xe2, 0x64, 0x07, 0xd1, 0x75, 0x72, 0x29, 0x23, 0xe0, 0x3e, 0x78, 0x02, 0x94, 0x6d, + 0x63, 0xa6, 0xfe, 0x81, 0x3d, 0x39, 0x3d, 0x80, 0x90, 0x21, 0xa7, 0x73, 0x19, 0x9c, 0x5a, 0x41, + 0x74, 0x99, 0x4c, 0x63, 0x40, 0xd1, 0x53, 0x7e, 0x03, 0x56, 0x7d, 0x01, 0x9e, 0x9e, 0x4d, 0x6b, + 0x61, 0x85, 0x47, 0x7e, 0xa8, 0xec, 0x3c, 0x26, 0xc9, 0x8c, 0x71, 0x4e, 0x92, 0x13, 0x7a, 0xa4, + 0xb4, 0x66, 0x9e, 0xf3, 0xa3, 0x45, 0x4e, 0x6b, 0xc3, 0x8a, 0x00, 0xa6, 0xa0, 0x0c, 0x4f, 0xea, + 0x20, 0x15, 0x7d, 0x3f, 0x35, 0x65, 0xc6, 0x96, 0xee, 0xbe, 0xda, 0xf8, 0x2f, 0x27, 0x53, 0x34, + 0x9e, 0x57, 0x67, 0xc8, 0x70, 0x9d, 0x4b, 0x10, 0x2a, 0x9e, 0x8a, 0xf1, 0x4a, 0xbf, 0xcb, 0x9e, + 0x80, 0x8a, 0xdc, 0x08, 0x83, 0x26, 0x0e, 0xab, 0x91, 0x72, 0xdb, 0xe0, 0x3c, 0x31, 0x44, 0x1f, + 0xf2, 0xca, 0x51, 0x11, 0x5d, 0xfa, 0xe4, 0xac, 0xc1, 0x34, 0xc6, 0x78, 0x5f, 0xe8, 0x17, 0x16, + 0x39, 0xb6, 0xee, 0x4b, 0x45, 0xa7, 0xd2, 0x07, 0x44, 0x72, 0x1c, 0xe4, 0xd7, 0x0f, 0x8b, 0x85, + 0x06, 0x71, 0x2e, 0x7e, 0xfc, 0xc7, 0x5f, 0x5f, 0x0d, 0x9c, 0xa1, 0x93, 0x78, 0x0d, 0x6a, 0x2c, + 0xb6, 0xef, 0x1c, 0x3e, 0xc8, 0xcf, 0x06, 0x2c, 0xfa, 0xb9, 0x45, 0x06, 0xef, 0x40, 0x4f, 0x36, + 0x87, 0xa6, 0x89, 0x73, 0x19, 0x99, 0x5c, 0xa0, 0xe7, 0xbb, 0x31, 0x29, 0x3c, 0xd7, 0xab, 0x17, + 0xf4, 0x1b, 0x8b, 0x8c, 0xdc, 0x01, 0xf5, 0x48, 0xf8, 0x0a, 0x5e, 0x3f, 0xa5, 0xab, 0x48, 0xe9, + 0x32, 0xbd, 0xd4, 0xa2, 0xf4, 0x54, 0xe3, 0x5e, 0xef, 0x46, 0xec, 0x6b, 0x8b, 0xe4, 0xb4, 0xa0, + 0xe5, 0x94, 0xef, 0x68, 0x76, 0x70, 0x3a, 0x6b, 0x07, 0xe9, 0xf7, 0x16, 0x99, 0xd2, 0x61, 0xa8, + 0xd8, 0xd1, 0x93, 0x73, 0x90, 0xdc, 0x34, 0xcd, 0xf7, 0x56, 0x90, 0x7e, 0x40, 0x46, 0x8c, 0x72, + 0x5b, 0x3d, 0x49, 0xe5, 0x3a, 0xcd, 0x5b, 0xd2, 0x99, 0xc7, 0xc4, 0x0e, 0x9d, 0xcd, 0xe8, 0x96, + 0x82, 0xd0, 0x29, 0x2b, 0x64, 0x4c, 0xa7, 0xdf, 0x58, 0x29, 0x3d, 0x60, 0xd5, 0x03, 0x20, 0x5c, + 0x43, 0x84, 0x39, 0x7a, 0x25, 0x0b, 0x21, 0xf2, 0xfc, 0xeb, 0x4a, 0xa7, 0xdd, 0x31, 0x45, 0xe8, + 0x0b, 0x1f, 0x3d, 0xb7, 0x1b, 0x22, 0xb9, 0xaf, 0xe7, 0xa7, 0xbb, 0xb9, 0x92, 0x69, 0xb9, 0xaf, + 0xa2, 0x98, 0x86, 0xf8, 0xd2, 0x22, 0xe3, 0x77, 0x40, 0xb5, 0x6f, 0xd6, 0xf4, 0x62, 0x97, 0xcc, + 0xe9, 0x5b, 0x77, 0xde, 0xe9, 0x1d, 0x90, 0x10, 0xf8, 0x1f, 0x12, 0xf8, 0x8f, 0x73, 0xa3, 0x3b, + 0x01, 0x73, 0xff, 0xc5, 0x3c, 0x0f, 0xcb, 0xeb, 0x48, 0xa5, 0x62, 0x32, 0xdc, 0xb6, 0x16, 0x68, + 0x03, 0x29, 0xdd, 0x85, 0x60, 0x67, 0xa5, 0xc6, 0x84, 0xea, 0x29, 0xf5, 0x4c, 0xda, 0xdc, 0x0e, + 0x4f, 0x48, 0xb8, 0x48, 0x62, 0x9e, 0xce, 0x65, 0xa9, 0x50, 0x83, 0x60, 0xc7, 0x33, 0x30, 0xdf, + 0x5a, 0x64, 0xd8, 0x9c, 0x2f, 0xf4, 0xc2, 0x6e, 0xc4, 0x8e, 0x73, 0xe7, 0x10, 0x27, 0xc3, 0xbf, + 0x4c, 0x5f, 0x3b, 0x5d, 0x5f, 0xba, 0xdb, 0x38, 0xde, 0xf5, 0xf0, 0xfc, 0xce, 0x22, 0xb9, 0x16, + 0x85, 0xd6, 0x6f, 0x8f, 0x8e, 0xa4, 0xd3, 0x9f, 0x24, 0xfd, 0xc9, 0x22, 0x53, 0x06, 0xbf, 0x73, + 0x42, 0x1c, 0x21, 0xcd, 0xb8, 0xeb, 0x9d, 0x8c, 0x19, 0x11, 0x93, 0xfd, 0xc1, 0x22, 0xc3, 0xe6, + 0x80, 0xde, 0xcb, 0xae, 0xe3, 0xe0, 0x3e, 0x44, 0x76, 0x8b, 0xa6, 0x1b, 0xf3, 0x19, 0xef, 0x24, + 0x52, 0x79, 0xd1, 0xde, 0xf5, 0x9f, 0x2d, 0x92, 0x6b, 0xd1, 0xe9, 0x2d, 0xe7, 0xeb, 0x22, 0xec, + 0x1e, 0x8c, 0x30, 0xfd, 0xc5, 0x22, 0x53, 0x86, 0x4b, 0xdf, 0x0e, 0x78, 0x5d, 0x94, 0xff, 0x8d, + 0x94, 0xdd, 0xfc, 0x5c, 0xbf, 0x73, 0xb6, 0x83, 0x38, 0x23, 0xc3, 0xab, 0x10, 0x40, 0xef, 0x8b, + 0x80, 0xbd, 0xdb, 0x9c, 0x8c, 0x98, 0x39, 0x73, 0xd7, 0x58, 0xc8, 0xba, 0x6b, 0xe8, 0x9d, 0xac, + 0x91, 0x9c, 0x81, 0x48, 0xa9, 0x72, 0x60, 0xb0, 0xcb, 0xfb, 0x00, 0xa3, 0x92, 0x4c, 0x19, 0xa4, + 0xdd, 0x9b, 0x70, 0x60, 0xb8, 0xf8, 0xd2, 0xb2, 0xb0, 0x8f, 0x4b, 0xcb, 0x73, 0x72, 0xf2, 0x5d, + 0x16, 0xf8, 0x7a, 0x53, 0xcd, 0x47, 0x00, 0x7a, 0x7e, 0xcf, 0x21, 0xd1, 0xfe, 0x38, 0x90, 0x81, + 0xb9, 0x84, 0x98, 0xd7, 0x9c, 0xcc, 0xb3, 0xb2, 0x11, 0x43, 0xc5, 0xdb, 0xf7, 0xa9, 0x45, 0x26, + 0x5a, 0xe8, 0x58, 0xf4, 0xab, 0x51, 0xb8, 0x85, 0x14, 0x96, 0x9c, 0x85, 0xbe, 0x65, 0xef, 0x22, + 0xb2, 0xbc, 0xf6, 0xeb, 0xcb, 0x19, 0xeb, 0xb7, 0x97, 0x33, 0xd6, 0x9f, 0x2f, 0x67, 0xac, 0xf7, + 0xfe, 0xbb, 0xbf, 0xef, 0x7e, 0x1e, 0xfe, 0xff, 0x4a, 0x7d, 0xa1, 0xdb, 0x1c, 0xc6, 0x4f, 0x74, + 0x37, 0xff, 0x09, 0x00, 0x00, 0xff, 0xff, 0xff, 0x54, 0xba, 0x9b, 0x87, 0x14, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -1964,6 +2005,42 @@ func (m *RepoAccessQuery) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } + if len(m.AzureActiveDirectoryEndpoint) > 0 { + i -= len(m.AzureActiveDirectoryEndpoint) + copy(dAtA[i:], m.AzureActiveDirectoryEndpoint) + i = encodeVarintRepository(dAtA, i, uint64(len(m.AzureActiveDirectoryEndpoint))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xd2 + } + if len(m.AzureServicePrincipalTenantId) > 0 { + i -= len(m.AzureServicePrincipalTenantId) + copy(dAtA[i:], m.AzureServicePrincipalTenantId) + i = encodeVarintRepository(dAtA, i, uint64(len(m.AzureServicePrincipalTenantId))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xca + } + if len(m.AzureServicePrincipalClientSecret) > 0 { + i -= len(m.AzureServicePrincipalClientSecret) + copy(dAtA[i:], m.AzureServicePrincipalClientSecret) + i = encodeVarintRepository(dAtA, i, uint64(len(m.AzureServicePrincipalClientSecret))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xc2 + } + if len(m.AzureServicePrincipalClientId) > 0 { + i -= len(m.AzureServicePrincipalClientId) + copy(dAtA[i:], m.AzureServicePrincipalClientId) + i = encodeVarintRepository(dAtA, i, uint64(len(m.AzureServicePrincipalClientId))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xba + } if m.InsecureOciForceHttp { i-- if m.InsecureOciForceHttp { @@ -2477,6 +2554,22 @@ func (m *RepoAccessQuery) Size() (n int) { if m.InsecureOciForceHttp { n += 3 } + l = len(m.AzureServicePrincipalClientId) + if l > 0 { + n += 2 + l + sovRepository(uint64(l)) + } + l = len(m.AzureServicePrincipalClientSecret) + if l > 0 { + n += 2 + l + sovRepository(uint64(l)) + } + l = len(m.AzureServicePrincipalTenantId) + if l > 0 { + n += 2 + l + sovRepository(uint64(l)) + } + l = len(m.AzureActiveDirectoryEndpoint) + if l > 0 { + n += 2 + l + sovRepository(uint64(l)) + } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } @@ -3857,6 +3950,134 @@ func (m *RepoAccessQuery) Unmarshal(dAtA []byte) error { } } m.InsecureOciForceHttp = bool(v != 0) + case 23: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AzureServicePrincipalClientId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRepository + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRepository + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthRepository + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AzureServicePrincipalClientId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 24: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AzureServicePrincipalClientSecret", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRepository + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRepository + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthRepository + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AzureServicePrincipalClientSecret = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 25: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AzureServicePrincipalTenantId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRepository + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRepository + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthRepository + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AzureServicePrincipalTenantId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 26: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AzureActiveDirectoryEndpoint", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRepository + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRepository + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthRepository + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AzureActiveDirectoryEndpoint = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipRepository(dAtA[iNdEx:]) diff --git a/pkg/apis/application/v1alpha1/generated.pb.go b/pkg/apis/application/v1alpha1/generated.pb.go index 644c1fb19a..f7430a79aa 100644 --- a/pkg/apis/application/v1alpha1/generated.pb.go +++ b/pkg/apis/application/v1alpha1/generated.pb.go @@ -4972,792 +4972,801 @@ func init() { } var fileDescriptor_c078c3c476799f44 = []byte{ - // 12552 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x7d, 0x70, 0x64, 0xd9, - 0x55, 0x18, 0xee, 0xd7, 0xad, 0x96, 0xba, 0x8f, 0x3e, 0x66, 0x74, 0x67, 0x66, 0x57, 0x33, 0x3b, - 0xbb, 0x1a, 0xde, 0xc2, 0x7a, 0xf9, 0x79, 0xad, 0xc1, 0x63, 0xaf, 0xd9, 0x1f, 0x0b, 0x26, 0x6a, - 0x69, 0x3e, 0x34, 0x23, 0x8d, 0xe4, 0xdb, 0x9a, 0x19, 0x7f, 0xad, 0xed, 0xa7, 0xee, 0x2b, 0xe9, - 0x8d, 0x5e, 0xbf, 0xd7, 0xfb, 0xde, 0x6b, 0x8d, 0x7a, 0x31, 0xc6, 0xc6, 0x36, 0x18, 0x6c, 0xec, - 0x0d, 0xa4, 0x82, 0x49, 0x62, 0xc7, 0x04, 0xf2, 0x51, 0x95, 0xa2, 0x20, 0xf0, 0x07, 0x54, 0x80, - 0xa2, 0x02, 0x14, 0x05, 0x15, 0x12, 0x08, 0x45, 0x80, 0x04, 0x50, 0xec, 0x49, 0x52, 0x50, 0xa9, - 0x0a, 0x55, 0x24, 0xa9, 0x54, 0x6a, 0x92, 0x50, 0xa9, 0xfb, 0x7d, 0xdf, 0x47, 0x4b, 0xad, 0xd1, - 0x93, 0x66, 0x6c, 0xf6, 0xbf, 0xee, 0x7b, 0xce, 0x3b, 0xe7, 0xbe, 0xfb, 0xee, 0x3d, 0xe7, 0xdc, - 0x73, 0xcf, 0x39, 0x17, 0x16, 0x37, 0xdc, 0x78, 0xb3, 0xbb, 0x36, 0xd3, 0x0c, 0xda, 0x17, 0x9d, - 0x70, 0x23, 0xe8, 0x84, 0xc1, 0x5d, 0xf6, 0xe3, 0xad, 0xcd, 0xd6, 0xc5, 0xed, 0xb7, 0x5f, 0xec, - 0x6c, 0x6d, 0x5c, 0x74, 0x3a, 0x6e, 0x74, 0xd1, 0xe9, 0x74, 0x3c, 0xb7, 0xe9, 0xc4, 0x6e, 0xe0, - 0x5f, 0xdc, 0x7e, 0x9b, 0xe3, 0x75, 0x36, 0x9d, 0xb7, 0x5d, 0xdc, 0x20, 0x3e, 0x09, 0x9d, 0x98, - 0xb4, 0x66, 0x3a, 0x61, 0x10, 0x07, 0xe8, 0xdb, 0x35, 0xb5, 0x19, 0x49, 0x8d, 0xfd, 0xf8, 0x50, - 0xb3, 0x35, 0xb3, 0xfd, 0xf6, 0x99, 0xce, 0xd6, 0xc6, 0x0c, 0xa5, 0x36, 0x63, 0x50, 0x9b, 0x91, - 0xd4, 0xce, 0xbd, 0xd5, 0xe8, 0xcb, 0x46, 0xb0, 0x11, 0x5c, 0x64, 0x44, 0xd7, 0xba, 0xeb, 0xec, - 0x1f, 0xfb, 0xc3, 0x7e, 0x71, 0x66, 0xe7, 0xec, 0xad, 0x97, 0xa2, 0x19, 0x37, 0xa0, 0xdd, 0xbb, - 0xd8, 0x0c, 0x42, 0x72, 0x71, 0x3b, 0xd3, 0xa1, 0x73, 0xd7, 0x34, 0x0e, 0xd9, 0x89, 0x89, 0x1f, - 0xb9, 0x81, 0x1f, 0xbd, 0x95, 0x76, 0x81, 0x84, 0xdb, 0x24, 0x34, 0x5f, 0xcf, 0x40, 0xc8, 0xa3, - 0xf4, 0x0e, 0x4d, 0xa9, 0xed, 0x34, 0x37, 0x5d, 0x9f, 0x84, 0x3d, 0xfd, 0x78, 0x9b, 0xc4, 0x4e, - 0xde, 0x53, 0x17, 0xfb, 0x3d, 0x15, 0x76, 0xfd, 0xd8, 0x6d, 0x93, 0xcc, 0x03, 0xef, 0xdc, 0xef, - 0x81, 0xa8, 0xb9, 0x49, 0xda, 0x4e, 0xe6, 0xb9, 0xb7, 0xf7, 0x7b, 0xae, 0x1b, 0xbb, 0xde, 0x45, - 0xd7, 0x8f, 0xa3, 0x38, 0x4c, 0x3f, 0x64, 0xff, 0x3d, 0x0b, 0xc6, 0x67, 0xef, 0x34, 0x66, 0xbb, - 0xf1, 0xe6, 0x5c, 0xe0, 0xaf, 0xbb, 0x1b, 0xe8, 0x45, 0x18, 0x6d, 0x7a, 0xdd, 0x28, 0x26, 0xe1, - 0x4d, 0xa7, 0x4d, 0xa6, 0xac, 0x0b, 0xd6, 0xf3, 0xb5, 0xfa, 0xa9, 0xdf, 0xdc, 0x9d, 0x7e, 0xd3, - 0xfd, 0xdd, 0xe9, 0xd1, 0x39, 0x0d, 0xc2, 0x26, 0x1e, 0xfa, 0x66, 0x18, 0x09, 0x03, 0x8f, 0xcc, - 0xe2, 0x9b, 0x53, 0x25, 0xf6, 0xc8, 0x09, 0xf1, 0xc8, 0x08, 0xe6, 0xcd, 0x58, 0xc2, 0x29, 0x6a, - 0x27, 0x0c, 0xd6, 0x5d, 0x8f, 0x4c, 0x95, 0x93, 0xa8, 0x2b, 0xbc, 0x19, 0x4b, 0xb8, 0xfd, 0xe3, - 0x25, 0x38, 0x31, 0xdb, 0xe9, 0x5c, 0x23, 0x8e, 0x17, 0x6f, 0x36, 0x62, 0x27, 0xee, 0x46, 0x28, - 0x80, 0xe1, 0x88, 0xfd, 0x12, 0x7d, 0xbb, 0x23, 0x9e, 0x1e, 0xe6, 0xf0, 0x07, 0xbb, 0xd3, 0x97, - 0xf7, 0x9a, 0xd1, 0x1b, 0x6e, 0x1c, 0x74, 0xa2, 0xb7, 0x12, 0x7f, 0xc3, 0xf5, 0x09, 0x1b, 0x9f, - 0x4d, 0x46, 0x7d, 0xc6, 0x64, 0x32, 0x17, 0xb4, 0x08, 0x16, 0x6c, 0x68, 0x7f, 0xdb, 0x24, 0x8a, - 0x9c, 0x0d, 0x92, 0x7e, 0xb5, 0x25, 0xde, 0x8c, 0x25, 0x1c, 0x85, 0x80, 0x3c, 0x27, 0x8a, 0x57, - 0x43, 0xc7, 0x8f, 0x5c, 0x3a, 0xb5, 0x57, 0xdd, 0x36, 0x7f, 0xcb, 0xd1, 0x4b, 0xff, 0xdf, 0x0c, - 0xff, 0x40, 0x33, 0xe6, 0x07, 0xd2, 0xeb, 0x81, 0xce, 0x9f, 0x99, 0xed, 0xb7, 0xcd, 0xd0, 0x27, - 0xea, 0x4f, 0xdc, 0xdf, 0x9d, 0x46, 0x8b, 0x19, 0x4a, 0x38, 0x87, 0xba, 0xfd, 0x07, 0x25, 0x80, - 0xd9, 0x4e, 0x67, 0x25, 0x0c, 0xee, 0x92, 0x66, 0x8c, 0x3e, 0x0c, 0x55, 0x4a, 0xaa, 0xe5, 0xc4, - 0x0e, 0x1b, 0xa0, 0xd1, 0x4b, 0xdf, 0x32, 0x18, 0xe3, 0xe5, 0x35, 0xfa, 0xfc, 0x12, 0x89, 0x9d, - 0x3a, 0x12, 0x2f, 0x08, 0xba, 0x0d, 0x2b, 0xaa, 0xc8, 0x87, 0xa1, 0xa8, 0x43, 0x9a, 0x6c, 0x30, - 0x46, 0x2f, 0x2d, 0xce, 0x1c, 0x66, 0xc5, 0xcf, 0xe8, 0x9e, 0x37, 0x3a, 0xa4, 0x59, 0x1f, 0x13, - 0x9c, 0x87, 0xe8, 0x3f, 0xcc, 0xf8, 0xa0, 0x6d, 0xf5, 0xc1, 0xf9, 0x40, 0xde, 0x2c, 0x8c, 0x23, - 0xa3, 0x5a, 0x9f, 0x48, 0x4e, 0x20, 0xf9, 0xdd, 0xed, 0x3f, 0xb5, 0x60, 0x42, 0x23, 0x2f, 0xba, - 0x51, 0x8c, 0x3e, 0x90, 0x19, 0xdc, 0x99, 0xc1, 0x06, 0x97, 0x3e, 0xcd, 0x86, 0xf6, 0xa4, 0x60, - 0x56, 0x95, 0x2d, 0xc6, 0xc0, 0xb6, 0xa1, 0xe2, 0xc6, 0xa4, 0x1d, 0x4d, 0x95, 0x2e, 0x94, 0x9f, - 0x1f, 0xbd, 0x74, 0xad, 0xa8, 0xf7, 0xac, 0x8f, 0x0b, 0xa6, 0x95, 0x05, 0x4a, 0x1e, 0x73, 0x2e, - 0xf6, 0x6f, 0x4f, 0x98, 0xef, 0x47, 0x07, 0x1c, 0xbd, 0x0d, 0x46, 0xa3, 0xa0, 0x1b, 0x36, 0x09, - 0x26, 0x9d, 0x80, 0x2e, 0xb0, 0x32, 0x9d, 0xee, 0x74, 0xe1, 0x37, 0x74, 0x33, 0x36, 0x71, 0xd0, - 0xe7, 0x2c, 0x18, 0x6b, 0x91, 0x28, 0x76, 0x7d, 0xc6, 0x5f, 0x76, 0x7e, 0xf5, 0xd0, 0x9d, 0x97, - 0x8d, 0xf3, 0x9a, 0x78, 0xfd, 0xb4, 0x78, 0x91, 0x31, 0xa3, 0x31, 0xc2, 0x09, 0xfe, 0x54, 0x80, - 0xb5, 0x48, 0xd4, 0x0c, 0xdd, 0x0e, 0xfd, 0x2f, 0x44, 0x8c, 0x12, 0x60, 0xf3, 0x1a, 0x84, 0x4d, - 0x3c, 0xe4, 0x43, 0x85, 0x0a, 0xa8, 0x68, 0x6a, 0x88, 0xf5, 0x7f, 0xe1, 0x70, 0xfd, 0x17, 0x83, - 0x4a, 0x65, 0x9f, 0x1e, 0x7d, 0xfa, 0x2f, 0xc2, 0x9c, 0x0d, 0xfa, 0xe7, 0x16, 0x4c, 0x09, 0x01, - 0x8a, 0x09, 0x1f, 0xd0, 0x3b, 0x9b, 0x6e, 0x4c, 0x3c, 0x37, 0x8a, 0xa7, 0x2a, 0xac, 0x0f, 0x1f, - 0x38, 0x5c, 0x1f, 0xe6, 0x92, 0xd4, 0x31, 0x89, 0xe2, 0xd0, 0x6d, 0x52, 0x1c, 0x3a, 0x0d, 0xea, - 0x17, 0x44, 0xb7, 0xa6, 0xe6, 0xfa, 0xf4, 0x02, 0xf7, 0xed, 0x1f, 0xfa, 0x11, 0x0b, 0xce, 0xf9, - 0x4e, 0x9b, 0x44, 0x1d, 0x87, 0x11, 0x66, 0xe0, 0xba, 0xe7, 0x34, 0xb7, 0x58, 0xf7, 0x87, 0x59, - 0xf7, 0x2f, 0x0e, 0xb6, 0x34, 0xae, 0x86, 0x41, 0xb7, 0x73, 0xc3, 0xf5, 0x5b, 0x75, 0x5b, 0xf4, - 0xe8, 0xdc, 0xcd, 0xbe, 0xa4, 0xf1, 0x1e, 0x6c, 0xd1, 0x4f, 0x58, 0x30, 0x19, 0x84, 0x9d, 0x4d, - 0xc7, 0x27, 0x2d, 0x09, 0x8d, 0xa6, 0x46, 0xd8, 0x3a, 0xfd, 0xe0, 0xe1, 0xc6, 0x72, 0x39, 0x4d, - 0x76, 0x29, 0xf0, 0xdd, 0x38, 0x08, 0x1b, 0x24, 0x8e, 0x5d, 0x7f, 0x23, 0xaa, 0x9f, 0xb9, 0xbf, - 0x3b, 0x3d, 0x99, 0xc1, 0xc2, 0xd9, 0xfe, 0xa0, 0xef, 0x82, 0xd1, 0xa8, 0xe7, 0x37, 0xef, 0xb8, - 0x7e, 0x2b, 0xb8, 0x17, 0x4d, 0x55, 0x8b, 0x58, 0xeb, 0x0d, 0x45, 0x50, 0xac, 0x56, 0xcd, 0x00, - 0x9b, 0xdc, 0xf2, 0x3f, 0x9c, 0x9e, 0x77, 0xb5, 0xa2, 0x3f, 0x9c, 0x9e, 0x4c, 0x7b, 0xb0, 0x45, - 0xdf, 0x6f, 0xc1, 0x78, 0xe4, 0x6e, 0xf8, 0x4e, 0xdc, 0x0d, 0xc9, 0x0d, 0xd2, 0x8b, 0xa6, 0x80, - 0x75, 0xe4, 0xfa, 0x21, 0x47, 0xc5, 0x20, 0x59, 0x3f, 0x23, 0xfa, 0x38, 0x6e, 0xb6, 0x46, 0x38, - 0xc9, 0x37, 0x6f, 0x55, 0xea, 0x69, 0x3d, 0xfa, 0x08, 0x57, 0xa5, 0x5e, 0x01, 0x7d, 0xfb, 0x87, - 0xfe, 0x06, 0x9c, 0xe4, 0x4d, 0xea, 0x33, 0x44, 0x53, 0x63, 0x4c, 0x84, 0x9f, 0xbe, 0xbf, 0x3b, - 0x7d, 0xb2, 0x91, 0x82, 0xe1, 0x0c, 0x36, 0x7a, 0x15, 0xa6, 0x3b, 0x24, 0x6c, 0xbb, 0xf1, 0xb2, - 0xef, 0xf5, 0xa4, 0x62, 0x68, 0x06, 0x1d, 0xd2, 0x12, 0xdd, 0x89, 0xa6, 0xc6, 0x2f, 0x58, 0xcf, - 0x57, 0xeb, 0x6f, 0x16, 0xdd, 0x9c, 0x5e, 0xd9, 0x1b, 0x1d, 0xef, 0x47, 0x0f, 0xfd, 0x86, 0x05, - 0xe7, 0x0c, 0xf9, 0xdd, 0x20, 0xe1, 0xb6, 0xdb, 0x24, 0xb3, 0xcd, 0x66, 0xd0, 0xf5, 0xe3, 0x68, - 0x6a, 0x82, 0x8d, 0xf9, 0xda, 0x51, 0x68, 0x93, 0x24, 0x2b, 0x3d, 0x89, 0xfb, 0xa2, 0x44, 0x78, - 0x8f, 0x9e, 0xda, 0xbf, 0x55, 0x82, 0x93, 0x69, 0xdb, 0x02, 0xfd, 0x23, 0x0b, 0x4e, 0xdc, 0xbd, - 0x17, 0xaf, 0x06, 0x5b, 0xc4, 0x8f, 0xea, 0x3d, 0xaa, 0x01, 0x98, 0x56, 0x1d, 0xbd, 0xd4, 0x2c, - 0xd6, 0x8a, 0x99, 0xb9, 0x9e, 0xe4, 0x72, 0xd9, 0x8f, 0xc3, 0x5e, 0xfd, 0x49, 0xf1, 0x4e, 0x27, - 0xae, 0xdf, 0x59, 0x35, 0xa1, 0x38, 0xdd, 0xa9, 0x73, 0x9f, 0xb1, 0xe0, 0x74, 0x1e, 0x09, 0x74, - 0x12, 0xca, 0x5b, 0xa4, 0xc7, 0x6d, 0x6d, 0x4c, 0x7f, 0xa2, 0x57, 0xa0, 0xb2, 0xed, 0x78, 0x5d, - 0x22, 0x0c, 0xc0, 0xab, 0x87, 0x7b, 0x11, 0xd5, 0x33, 0xcc, 0xa9, 0x7e, 0x5b, 0xe9, 0x25, 0xcb, - 0xfe, 0x9d, 0x32, 0x8c, 0x1a, 0x1f, 0xed, 0x18, 0x8c, 0xda, 0x20, 0x61, 0xd4, 0x2e, 0x15, 0x36, - 0xdf, 0xfa, 0x5a, 0xb5, 0xf7, 0x52, 0x56, 0xed, 0x72, 0x71, 0x2c, 0xf7, 0x34, 0x6b, 0x51, 0x0c, - 0xb5, 0xa0, 0x43, 0x37, 0x81, 0xd4, 0x3a, 0x1a, 0x2a, 0xe2, 0x13, 0x2e, 0x4b, 0x72, 0xf5, 0xf1, - 0xfb, 0xbb, 0xd3, 0x35, 0xf5, 0x17, 0x6b, 0x46, 0xf6, 0x1f, 0x5a, 0x70, 0xda, 0xe8, 0xe3, 0x5c, - 0xe0, 0xb7, 0xd8, 0x16, 0x06, 0x5d, 0x80, 0xa1, 0xb8, 0xd7, 0x91, 0x1b, 0x4d, 0x35, 0x52, 0xab, - 0xbd, 0x0e, 0xc1, 0x0c, 0xf2, 0xb8, 0xef, 0xbf, 0x7e, 0xc4, 0x82, 0x27, 0xf2, 0x05, 0x0c, 0x7a, - 0x0e, 0x86, 0xb9, 0x97, 0x41, 0xbc, 0x9d, 0xfe, 0x24, 0xac, 0x15, 0x0b, 0x28, 0xba, 0x08, 0x35, - 0xa5, 0x1d, 0xc5, 0x3b, 0x4e, 0x0a, 0xd4, 0x9a, 0x56, 0xa9, 0x1a, 0x87, 0x0e, 0x1a, 0xfd, 0x23, - 0x8c, 0x5b, 0x35, 0x68, 0x6c, 0x5b, 0xce, 0x20, 0xf6, 0xef, 0x5b, 0xf0, 0x8d, 0x83, 0x88, 0xbd, - 0xa3, 0xeb, 0x63, 0x03, 0xce, 0xb4, 0xc8, 0xba, 0xd3, 0xf5, 0xe2, 0x24, 0x47, 0xd1, 0xe9, 0xa7, - 0xc5, 0xc3, 0x67, 0xe6, 0xf3, 0x90, 0x70, 0xfe, 0xb3, 0xf6, 0x7f, 0xb0, 0x98, 0x43, 0x40, 0xbe, - 0xd6, 0x31, 0x6c, 0xca, 0xfc, 0xe4, 0xa6, 0x6c, 0xa1, 0xb0, 0x65, 0xda, 0x67, 0x57, 0xf6, 0x43, - 0x16, 0x9c, 0x33, 0xb0, 0x96, 0x9c, 0xb8, 0xb9, 0x79, 0x79, 0xa7, 0x13, 0x92, 0x28, 0xa2, 0x53, - 0xea, 0x69, 0x43, 0x1c, 0xd7, 0x47, 0x05, 0x85, 0xf2, 0x0d, 0xd2, 0xe3, 0xb2, 0xf9, 0x05, 0xa8, - 0xf2, 0x35, 0x17, 0x84, 0xe2, 0x23, 0xa9, 0x77, 0x5b, 0x16, 0xed, 0x58, 0x61, 0x20, 0x1b, 0x86, - 0x99, 0xcc, 0xa5, 0x32, 0x88, 0x9a, 0x09, 0x40, 0xbf, 0xfb, 0x6d, 0xd6, 0x82, 0x05, 0xc4, 0x8e, - 0x12, 0xdd, 0x59, 0x09, 0x09, 0x9b, 0x0f, 0xad, 0x2b, 0x2e, 0xf1, 0x5a, 0x11, 0xdd, 0x30, 0x3a, - 0xbe, 0x1f, 0xc4, 0x62, 0xef, 0x67, 0x6c, 0x18, 0x67, 0x75, 0x33, 0x36, 0x71, 0x28, 0x53, 0xcf, - 0x59, 0x23, 0x1e, 0x1f, 0x51, 0xc1, 0x74, 0x91, 0xb5, 0x60, 0x01, 0xb1, 0xef, 0x97, 0xd8, 0xd6, - 0x54, 0x49, 0x34, 0x72, 0x1c, 0x7e, 0x8d, 0x30, 0xa1, 0x02, 0x56, 0x8a, 0x93, 0xc7, 0xa4, 0xbf, - 0x6f, 0xe3, 0xb5, 0x94, 0x16, 0xc0, 0x85, 0x72, 0xdd, 0xdb, 0xbf, 0xf1, 0xc5, 0x32, 0x4c, 0x27, - 0x1f, 0xc8, 0x28, 0x11, 0xba, 0x99, 0x36, 0x18, 0xa5, 0xbd, 0x81, 0x06, 0x3e, 0x36, 0xf1, 0xfa, - 0xc8, 0xe1, 0xd2, 0x51, 0xca, 0x61, 0x53, 0x4d, 0x94, 0xf7, 0x51, 0x13, 0x73, 0x6a, 0xd4, 0x87, - 0x18, 0xe6, 0x5b, 0x32, 0x2e, 0xc4, 0xb3, 0x2b, 0x61, 0xb0, 0xc1, 0xd6, 0xdc, 0x36, 0xa1, 0x9b, - 0xa9, 0x1c, 0xb7, 0xe0, 0x05, 0x18, 0x8a, 0x62, 0xd2, 0x99, 0xaa, 0x24, 0x65, 0x70, 0x23, 0x26, - 0x1d, 0xcc, 0x20, 0xe8, 0x3b, 0xe0, 0x44, 0xec, 0x84, 0x1b, 0x24, 0x0e, 0xc9, 0xb6, 0xcb, 0xdc, - 0xca, 0x6c, 0x67, 0x5c, 0xab, 0x9f, 0xa2, 0x26, 0xd9, 0x2a, 0x03, 0x61, 0x09, 0xc2, 0x69, 0x5c, - 0xfb, 0xbf, 0x94, 0xe0, 0xc9, 0xe4, 0xf7, 0xd1, 0x5a, 0xf3, 0x3b, 0x13, 0x5a, 0xf3, 0x2d, 0xa6, - 0xd6, 0x7c, 0xb0, 0x3b, 0xfd, 0x54, 0x9f, 0xc7, 0xbe, 0x66, 0x94, 0x2a, 0xba, 0x9a, 0xfa, 0x42, - 0x17, 0x33, 0x5f, 0xe8, 0xe9, 0x3e, 0xef, 0x98, 0xb2, 0x76, 0x9e, 0x83, 0xe1, 0x90, 0x38, 0x51, - 0xe0, 0x8b, 0xef, 0xa4, 0x16, 0x03, 0x66, 0xad, 0x58, 0x40, 0xed, 0xdf, 0xab, 0xa5, 0x07, 0xfb, - 0x2a, 0x77, 0x95, 0x07, 0x21, 0x72, 0x61, 0x88, 0xed, 0xff, 0xb8, 0xd8, 0xb9, 0x71, 0xb8, 0x25, - 0x4a, 0x55, 0x8c, 0x22, 0x5d, 0xaf, 0xd2, 0xaf, 0x46, 0x9b, 0x30, 0x63, 0x81, 0x76, 0xa0, 0xda, - 0x94, 0x3b, 0xad, 0x52, 0x11, 0xde, 0x4e, 0xb1, 0xcf, 0xd2, 0x1c, 0xc7, 0xa8, 0x2e, 0x50, 0xdb, - 0x33, 0xc5, 0x0d, 0x11, 0x28, 0x6f, 0xb8, 0xb1, 0xf8, 0xac, 0x87, 0xdc, 0x78, 0x5f, 0x75, 0x8d, - 0x57, 0x1c, 0xa1, 0x0a, 0xea, 0xaa, 0x1b, 0x63, 0x4a, 0x1f, 0x7d, 0xca, 0x82, 0xd1, 0xa8, 0xd9, - 0x5e, 0x09, 0x83, 0x6d, 0xb7, 0x45, 0x42, 0x61, 0x80, 0x1e, 0x52, 0xec, 0x35, 0xe6, 0x96, 0x24, - 0x41, 0xcd, 0x97, 0x3b, 0x42, 0x34, 0x04, 0x9b, 0x7c, 0xe9, 0xc6, 0xec, 0x49, 0xf1, 0xee, 0xf3, - 0xa4, 0xc9, 0x56, 0x9c, 0xdc, 0x50, 0xb3, 0x99, 0x72, 0x68, 0x83, 0x7c, 0xbe, 0xdb, 0xdc, 0xa2, - 0xeb, 0x4d, 0x77, 0xe8, 0xa9, 0xfb, 0xbb, 0xd3, 0x4f, 0xce, 0xe5, 0xf3, 0xc4, 0xfd, 0x3a, 0xc3, - 0x06, 0xac, 0xd3, 0xf5, 0x3c, 0x4c, 0x5e, 0xed, 0x12, 0xe6, 0x5b, 0x2b, 0x60, 0xc0, 0x56, 0x34, - 0xc1, 0xd4, 0x80, 0x19, 0x10, 0x6c, 0xf2, 0x45, 0xaf, 0xc2, 0x70, 0xdb, 0x89, 0x43, 0x77, 0x47, - 0x38, 0xd4, 0x0e, 0xb9, 0x45, 0x5a, 0x62, 0xb4, 0x34, 0x73, 0x66, 0x05, 0xf0, 0x46, 0x2c, 0x18, - 0xa1, 0x36, 0x54, 0xda, 0x24, 0xdc, 0x20, 0x53, 0xd5, 0x22, 0x4e, 0x1a, 0x96, 0x28, 0x29, 0xcd, - 0xb0, 0x46, 0x2d, 0x2f, 0xd6, 0x86, 0x39, 0x17, 0xf4, 0x0a, 0x54, 0x23, 0xe2, 0x91, 0x26, 0xb5, - 0x9d, 0x6a, 0x8c, 0xe3, 0xdb, 0x07, 0xb4, 0x23, 0xa9, 0xd1, 0xd2, 0x10, 0x8f, 0xf2, 0x05, 0x26, - 0xff, 0x61, 0x45, 0x92, 0x0e, 0x60, 0xc7, 0xeb, 0x6e, 0xb8, 0xfe, 0x14, 0x14, 0x31, 0x80, 0x2b, - 0x8c, 0x56, 0x6a, 0x00, 0x79, 0x23, 0x16, 0x8c, 0xec, 0xff, 0x6c, 0x01, 0x4a, 0x0a, 0xb5, 0x63, - 0x30, 0x98, 0x5f, 0x4d, 0x1a, 0xcc, 0x8b, 0x45, 0x5a, 0x34, 0x7d, 0x6c, 0xe6, 0x5f, 0xac, 0x41, - 0x4a, 0x1d, 0xdc, 0x24, 0x51, 0x4c, 0x5a, 0x6f, 0x88, 0xf0, 0x37, 0x44, 0xf8, 0x1b, 0x22, 0x5c, - 0x89, 0xf0, 0xb5, 0x94, 0x08, 0x7f, 0x97, 0xb1, 0xea, 0x75, 0xe8, 0xc3, 0x87, 0x54, 0x6c, 0x84, - 0xd9, 0x03, 0x03, 0x81, 0x4a, 0x82, 0xeb, 0x8d, 0xe5, 0x9b, 0xb9, 0x32, 0xfb, 0x43, 0x49, 0x99, - 0x7d, 0x58, 0x16, 0x7f, 0x1d, 0xa4, 0xf4, 0x6f, 0x58, 0xf0, 0xe6, 0xa4, 0xf4, 0x92, 0x33, 0x67, - 0x61, 0xc3, 0x0f, 0x42, 0x32, 0xef, 0xae, 0xaf, 0x93, 0x90, 0xf8, 0x4d, 0x12, 0x29, 0xc7, 0x8f, - 0xd5, 0xcf, 0xf1, 0x83, 0xde, 0x01, 0x63, 0x77, 0xa3, 0xc0, 0x5f, 0x09, 0x5c, 0x5f, 0x88, 0x20, - 0xba, 0xe3, 0x38, 0x79, 0x7f, 0x77, 0x7a, 0x8c, 0x8e, 0xa8, 0x6c, 0xc7, 0x09, 0x2c, 0x34, 0x07, - 0x93, 0x77, 0x5f, 0x5d, 0x71, 0x62, 0xc3, 0xd5, 0x20, 0x9d, 0x02, 0xec, 0x64, 0xeb, 0xfa, 0xbb, - 0x53, 0x40, 0x9c, 0xc5, 0xb7, 0xff, 0x6e, 0x09, 0xce, 0xa6, 0x5e, 0x24, 0xf0, 0xbc, 0xa0, 0x1b, - 0xd3, 0x3d, 0x11, 0xfa, 0x92, 0x05, 0x27, 0xdb, 0x49, 0x6f, 0x46, 0x24, 0x7c, 0xe1, 0xef, 0x29, - 0x4c, 0x47, 0xa4, 0xdc, 0x25, 0xf5, 0x29, 0x31, 0x42, 0x27, 0x53, 0x80, 0x08, 0x67, 0xfa, 0x82, - 0x5e, 0x81, 0x5a, 0xdb, 0xd9, 0xb9, 0xd5, 0x69, 0x39, 0xb1, 0xdc, 0xab, 0xf6, 0x77, 0x31, 0x74, - 0x63, 0xd7, 0x9b, 0xe1, 0x41, 0x35, 0x33, 0x0b, 0x7e, 0xbc, 0x1c, 0x36, 0xe2, 0xd0, 0xf5, 0x37, - 0xb8, 0x07, 0x74, 0x49, 0x92, 0xc1, 0x9a, 0xa2, 0xfd, 0x45, 0x2b, 0xad, 0xa4, 0xd4, 0xe8, 0x84, - 0x4e, 0x4c, 0x36, 0x7a, 0xe8, 0x23, 0x50, 0xa1, 0xfb, 0x46, 0x39, 0x2a, 0x77, 0x8a, 0xd4, 0x9c, - 0xc6, 0x97, 0xd0, 0x4a, 0x94, 0xfe, 0x8b, 0x30, 0x67, 0x6a, 0x7f, 0xa9, 0x96, 0x36, 0x16, 0x58, - 0x48, 0xc0, 0x25, 0x80, 0x8d, 0x60, 0x95, 0xb4, 0x3b, 0x1e, 0x1d, 0x16, 0x8b, 0x9d, 0xfe, 0x28, - 0x3f, 0xca, 0x55, 0x05, 0xc1, 0x06, 0x16, 0xfa, 0x01, 0x0b, 0x60, 0x43, 0xce, 0x79, 0x69, 0x08, - 0xdc, 0x2a, 0xf2, 0x75, 0xf4, 0x8a, 0xd2, 0x7d, 0x51, 0x0c, 0xb1, 0xc1, 0x1c, 0x7d, 0xaf, 0x05, - 0xd5, 0x58, 0x76, 0x9f, 0xab, 0xc6, 0xd5, 0x22, 0x7b, 0x22, 0x5f, 0x5a, 0xdb, 0x44, 0x6a, 0x48, - 0x14, 0x5f, 0xf4, 0x7d, 0x16, 0x40, 0xd4, 0xf3, 0x9b, 0x2b, 0x81, 0xe7, 0x36, 0x7b, 0x42, 0x63, - 0xde, 0x2e, 0xd4, 0xd7, 0xa3, 0xa8, 0xd7, 0x27, 0xe8, 0x68, 0xe8, 0xff, 0xd8, 0xe0, 0x8c, 0x3e, - 0x0a, 0xd5, 0x48, 0x4c, 0x37, 0xa1, 0x23, 0x57, 0x8b, 0xf5, 0x38, 0x71, 0xda, 0x42, 0xbc, 0x8a, - 0x7f, 0x58, 0xf1, 0x44, 0x3f, 0x6a, 0xc1, 0x89, 0x4e, 0xd2, 0x87, 0x28, 0xd4, 0x61, 0x71, 0x32, - 0x20, 0xe5, 0xa3, 0xe4, 0xde, 0x96, 0x54, 0x23, 0x4e, 0xf7, 0x82, 0x4a, 0x40, 0x3d, 0x83, 0x97, - 0x3b, 0xdc, 0x9f, 0x39, 0xa2, 0x25, 0xe0, 0xd5, 0x34, 0x10, 0x67, 0xf1, 0xd1, 0x0a, 0x9c, 0xa6, - 0xbd, 0xeb, 0x71, 0xf3, 0x53, 0xaa, 0x97, 0x88, 0x29, 0xc3, 0x6a, 0xfd, 0xbc, 0x98, 0x21, 0xec, - 0x20, 0x24, 0x8d, 0x83, 0x73, 0x9f, 0x44, 0xbf, 0x63, 0xc1, 0x79, 0x97, 0xa9, 0x01, 0xd3, 0x9b, - 0xaf, 0x35, 0x82, 0x38, 0xb2, 0x27, 0x85, 0xca, 0x8a, 0x7e, 0xea, 0xa7, 0xfe, 0x8d, 0xe2, 0x0d, - 0xce, 0x2f, 0xec, 0xd1, 0x25, 0xbc, 0x67, 0x87, 0xd1, 0xb7, 0xc2, 0xb8, 0x5c, 0x17, 0x2b, 0x54, - 0x04, 0x33, 0x45, 0x5b, 0xab, 0x4f, 0xde, 0xdf, 0x9d, 0x1e, 0x5f, 0x35, 0x01, 0x38, 0x89, 0x67, - 0xff, 0xd5, 0x50, 0xe2, 0x08, 0x49, 0x39, 0x38, 0x99, 0xb8, 0x69, 0x4a, 0xff, 0x8f, 0x94, 0x9e, - 0x85, 0x8a, 0x1b, 0xe5, 0x5d, 0xd2, 0xe2, 0x46, 0x35, 0x45, 0xd8, 0x60, 0x4e, 0x8d, 0xd2, 0x49, - 0x27, 0xed, 0x46, 0x15, 0x12, 0xf0, 0x95, 0x22, 0xbb, 0x94, 0x3d, 0xf0, 0x3b, 0x2b, 0xba, 0x36, - 0x99, 0x01, 0xe1, 0x6c, 0x97, 0xd0, 0x77, 0x43, 0x2d, 0x54, 0x31, 0x32, 0xe5, 0x22, 0xb6, 0x6a, - 0x72, 0xda, 0x88, 0xee, 0xa8, 0xd3, 0x21, 0x1d, 0x0d, 0xa3, 0x39, 0xa2, 0x77, 0xc1, 0x84, 0xfa, - 0x33, 0xc7, 0x8e, 0x85, 0xa8, 0x50, 0x2c, 0xd7, 0x9f, 0x10, 0x4f, 0x4d, 0xe0, 0x04, 0x14, 0xa7, - 0xb0, 0x51, 0x08, 0xc3, 0x3c, 0x6e, 0x53, 0x88, 0xb1, 0x43, 0x6e, 0x77, 0xcc, 0xe0, 0x4f, 0xed, - 0x23, 0xe4, 0xad, 0x58, 0x70, 0xb2, 0x3f, 0x5d, 0x4a, 0x9c, 0xf4, 0x19, 0xf2, 0x6e, 0x80, 0x53, - 0xcc, 0xcf, 0x59, 0x30, 0x1a, 0x06, 0x9e, 0xe7, 0xfa, 0x1b, 0x54, 0x36, 0x0b, 0x03, 0xe3, 0xfd, - 0x47, 0xa2, 0xe3, 0x85, 0x10, 0x66, 0xbb, 0x01, 0xac, 0x79, 0x62, 0xb3, 0x03, 0xe8, 0x65, 0x18, - 0x6f, 0x11, 0x8f, 0xd0, 0x67, 0x97, 0x43, 0xba, 0x8f, 0xe3, 0x5e, 0x73, 0x15, 0x27, 0x33, 0x6f, - 0x02, 0x71, 0x12, 0xd7, 0xfe, 0x53, 0x0b, 0xa6, 0xfa, 0x29, 0x20, 0x44, 0xe0, 0x29, 0x29, 0x5d, - 0xd5, 0x57, 0x5c, 0xf6, 0x25, 0x3d, 0x61, 0x43, 0x3c, 0x2b, 0xf8, 0x3c, 0xb5, 0xd2, 0x1f, 0x15, - 0xef, 0x45, 0x07, 0xbd, 0x0f, 0x4e, 0x1a, 0x83, 0x12, 0xa9, 0x51, 0xad, 0xd5, 0x67, 0xa8, 0xc5, - 0x37, 0x9b, 0x82, 0x3d, 0xd8, 0x9d, 0x7e, 0x22, 0xdd, 0x26, 0x34, 0x64, 0x86, 0x8e, 0xfd, 0x93, - 0x99, 0x4f, 0xad, 0x8c, 0x9b, 0x2f, 0x58, 0x19, 0xf7, 0xc9, 0x7b, 0x8e, 0xc2, 0xa0, 0x60, 0x8e, - 0x16, 0x15, 0x94, 0xd2, 0x1f, 0xe7, 0x11, 0x06, 0x31, 0xd8, 0xbf, 0x3d, 0x04, 0x7b, 0xf4, 0x6c, - 0x80, 0xdd, 0xca, 0x81, 0x4f, 0x95, 0x3f, 0x6b, 0xa9, 0xe3, 0x43, 0x2e, 0xb4, 0x5a, 0x47, 0x35, - 0xf6, 0x7c, 0xc3, 0x18, 0xf1, 0x40, 0x1a, 0x25, 0x12, 0x92, 0x07, 0x95, 0xe8, 0xcb, 0x56, 0xf2, - 0x00, 0x94, 0x07, 0x8f, 0xba, 0x47, 0xd6, 0x27, 0xe3, 0x54, 0x95, 0x77, 0x4c, 0x9f, 0xc5, 0xf5, - 0x3b, 0x6f, 0x9d, 0x01, 0x58, 0x77, 0x7d, 0xc7, 0x73, 0x5f, 0xa3, 0xdb, 0xc1, 0x0a, 0xb3, 0x68, - 0x98, 0x89, 0x78, 0x45, 0xb5, 0x62, 0x03, 0xe3, 0xdc, 0xff, 0x0f, 0xa3, 0xc6, 0x9b, 0xe7, 0xc4, - 0xff, 0x9c, 0x36, 0xe3, 0x7f, 0x6a, 0x46, 0xd8, 0xce, 0xb9, 0x77, 0xc1, 0xc9, 0x74, 0x07, 0x0f, - 0xf2, 0xbc, 0xfd, 0xbf, 0x46, 0xd2, 0x27, 0x92, 0xab, 0x24, 0x6c, 0xd3, 0xae, 0xbd, 0xe1, 0xc9, - 0x7b, 0xc3, 0x93, 0xf7, 0x86, 0x27, 0xcf, 0x3c, 0x8c, 0x11, 0x5e, 0xaa, 0x91, 0x63, 0xf2, 0x52, - 0x25, 0xfc, 0x6e, 0xd5, 0xc2, 0xfd, 0x6e, 0xf6, 0xa7, 0x32, 0x47, 0x15, 0xab, 0x21, 0x21, 0x28, - 0x80, 0x8a, 0x1f, 0xb4, 0x88, 0x34, 0xea, 0xaf, 0x17, 0x63, 0xa1, 0xde, 0x0c, 0x5a, 0x46, 0x58, - 0x3e, 0xfd, 0x17, 0x61, 0xce, 0xc7, 0xfe, 0x9f, 0x19, 0xc3, 0xe6, 0x0e, 0xf3, 0x13, 0x6d, 0x13, - 0x3f, 0x46, 0x37, 0x12, 0x56, 0xde, 0xb7, 0xa6, 0x4e, 0xdd, 0xdf, 0xdc, 0x2f, 0x01, 0xeb, 0x1e, - 0xa5, 0x30, 0xc3, 0x48, 0x18, 0x06, 0xe1, 0x67, 0x2d, 0x98, 0x70, 0x12, 0x9c, 0x0a, 0xcb, 0xa8, - 0x31, 0x4f, 0x4c, 0x94, 0x41, 0x9d, 0xb2, 0x15, 0x53, 0xbc, 0xed, 0x4f, 0x0e, 0x43, 0x62, 0xe3, - 0xc0, 0x27, 0xfc, 0x37, 0xc3, 0x48, 0x48, 0x3a, 0xc1, 0x2d, 0xbc, 0x28, 0x5e, 0x5a, 0xa7, 0x75, - 0xf1, 0x66, 0x2c, 0xe1, 0x54, 0xd9, 0x77, 0x9c, 0x78, 0x53, 0x68, 0x71, 0xa5, 0xec, 0x57, 0x9c, - 0x78, 0x13, 0x33, 0x08, 0xb5, 0xf9, 0xe3, 0x44, 0xd0, 0x83, 0x38, 0xdc, 0x57, 0x5d, 0x4c, 0x86, - 0x44, 0xe0, 0x14, 0x36, 0x7a, 0x15, 0x86, 0x36, 0x89, 0xd7, 0x16, 0x73, 0xbe, 0x51, 0xdc, 0x30, - 0xb1, 0x77, 0xbd, 0x46, 0xbc, 0x36, 0x57, 0x01, 0xf4, 0x17, 0x66, 0xac, 0xe8, 0x82, 0xaf, 0x6d, - 0x75, 0xa3, 0x38, 0x68, 0xbb, 0xaf, 0x49, 0x9f, 0xf6, 0x7b, 0x0a, 0x66, 0x7c, 0x43, 0xd2, 0xe7, - 0xce, 0x43, 0xf5, 0x17, 0x6b, 0xce, 0xac, 0x1f, 0x2d, 0x37, 0x64, 0x6b, 0xa5, 0x27, 0x5c, 0xd3, - 0x45, 0xf7, 0x63, 0x5e, 0xd2, 0xe7, 0xfd, 0x50, 0x7f, 0xb1, 0xe6, 0x8c, 0x7a, 0x4a, 0xf0, 0x8c, - 0xb2, 0x3e, 0xdc, 0x2a, 0xb8, 0x0f, 0x5c, 0xe8, 0xe4, 0x0a, 0xa0, 0x67, 0xa1, 0xd2, 0xdc, 0x74, - 0xc2, 0x78, 0x6a, 0x8c, 0x4d, 0x1a, 0xb5, 0x7c, 0xe7, 0x68, 0x23, 0xe6, 0x30, 0xf4, 0x34, 0x94, - 0x43, 0xb2, 0xce, 0x82, 0xd4, 0x8d, 0xf0, 0x38, 0x4c, 0xd6, 0x31, 0x6d, 0x57, 0x06, 0xe9, 0x44, - 0xdf, 0xb8, 0xc9, 0x1f, 0x2f, 0x25, 0x2d, 0xda, 0xe4, 0xc8, 0xf0, 0xf5, 0xd0, 0xec, 0x86, 0x91, - 0x74, 0x85, 0x1a, 0xeb, 0x81, 0x35, 0x63, 0x09, 0x47, 0x1f, 0xb7, 0x60, 0xe4, 0x6e, 0x14, 0xf8, - 0xbe, 0x5a, 0xd8, 0xb7, 0x0b, 0x1e, 0xac, 0xeb, 0x9c, 0xba, 0xee, 0x83, 0x68, 0xc0, 0x92, 0x2f, - 0xed, 0x2e, 0xd9, 0x69, 0x7a, 0xdd, 0x56, 0x26, 0x26, 0xea, 0x32, 0x6f, 0xc6, 0x12, 0x4e, 0x51, - 0x5d, 0x9f, 0xa3, 0x0e, 0x25, 0x51, 0x17, 0x7c, 0x81, 0x2a, 0xe0, 0xf6, 0xcf, 0x55, 0xe1, 0x4c, - 0xee, 0xf2, 0xa1, 0xb6, 0x26, 0xb3, 0xe6, 0xae, 0xb8, 0x1e, 0x91, 0xd1, 0x80, 0xcc, 0xd6, 0xbc, - 0xad, 0x5a, 0xb1, 0x81, 0x81, 0xbe, 0x07, 0xa0, 0xe3, 0x84, 0x4e, 0x9b, 0xa8, 0xa3, 0x8a, 0x43, - 0x9b, 0x74, 0xb4, 0x1f, 0x2b, 0x92, 0xa6, 0x76, 0xd7, 0xa8, 0xa6, 0x08, 0x1b, 0x2c, 0xd1, 0x8b, - 0x30, 0x1a, 0x12, 0x8f, 0x38, 0x11, 0xcb, 0x82, 0x48, 0x27, 0x8b, 0x61, 0x0d, 0xc2, 0x26, 0x1e, - 0x7a, 0x4e, 0x05, 0x4e, 0x0e, 0x25, 0xa3, 0x8a, 0x92, 0xc1, 0x93, 0xe8, 0xf3, 0x16, 0x4c, 0xac, - 0xbb, 0x1e, 0xd1, 0xdc, 0x45, 0x6a, 0xd7, 0xf2, 0xe1, 0x5f, 0xf2, 0x8a, 0x49, 0x57, 0xcb, 0xd0, - 0x44, 0x73, 0x84, 0x53, 0xec, 0xe9, 0x67, 0xde, 0x26, 0x21, 0x13, 0xbe, 0xc3, 0xc9, 0xcf, 0x7c, - 0x9b, 0x37, 0x63, 0x09, 0x47, 0xb3, 0x70, 0xa2, 0xe3, 0x44, 0xd1, 0x5c, 0x48, 0x5a, 0xc4, 0x8f, - 0x5d, 0xc7, 0xe3, 0xb9, 0x54, 0x55, 0x9d, 0x55, 0xb0, 0x92, 0x04, 0xe3, 0x34, 0x3e, 0x7a, 0x2f, - 0x3c, 0xc9, 0x7d, 0x81, 0x4b, 0x6e, 0x14, 0xb9, 0xfe, 0x86, 0x9e, 0x06, 0xc2, 0x25, 0x3a, 0x2d, - 0x48, 0x3d, 0xb9, 0x90, 0x8f, 0x86, 0xfb, 0x3d, 0x8f, 0x5e, 0x80, 0x6a, 0xb4, 0xe5, 0x76, 0xe6, - 0xc2, 0x56, 0xc4, 0xce, 0x01, 0xab, 0xda, 0x01, 0xdf, 0x10, 0xed, 0x58, 0x61, 0xa0, 0x26, 0x8c, - 0xf1, 0x4f, 0xc2, 0x23, 0x3f, 0x85, 0x04, 0x7d, 0x6b, 0x5f, 0x0b, 0x46, 0xe4, 0x5a, 0xcf, 0x60, - 0xe7, 0xde, 0x65, 0x79, 0x2a, 0xc9, 0x0f, 0xd1, 0x6e, 0x1b, 0x64, 0x70, 0x82, 0x68, 0x72, 0x33, - 0x3b, 0x3a, 0xc0, 0x66, 0xf6, 0x45, 0x18, 0xdd, 0xea, 0xae, 0x11, 0x31, 0xf2, 0x42, 0xb0, 0xa9, - 0xd9, 0x77, 0x43, 0x83, 0xb0, 0x89, 0xc7, 0x82, 0x6e, 0x3b, 0xae, 0xf8, 0x17, 0x4d, 0x8d, 0x1b, - 0x41, 0xb7, 0x2b, 0x0b, 0xb2, 0x19, 0x9b, 0x38, 0xb4, 0x6b, 0x74, 0x2c, 0x56, 0x49, 0xc4, 0x72, - 0x6a, 0xe8, 0x70, 0xa9, 0xae, 0x35, 0x24, 0x00, 0x6b, 0x1c, 0xb4, 0x02, 0xa7, 0xe9, 0x9f, 0x06, - 0xcb, 0x35, 0xbf, 0xed, 0x78, 0x6e, 0x8b, 0x47, 0x80, 0x9e, 0x48, 0x7a, 0xb2, 0x1b, 0x39, 0x38, - 0x38, 0xf7, 0x49, 0xfb, 0xc7, 0x4a, 0x49, 0xcb, 0xca, 0x14, 0x61, 0x28, 0xa2, 0x82, 0x2a, 0xbe, - 0xed, 0x84, 0xd2, 0xd2, 0x3b, 0x64, 0x42, 0x9c, 0xa0, 0x7b, 0xdb, 0x09, 0x4d, 0x91, 0xc7, 0x18, - 0x60, 0xc9, 0x09, 0xdd, 0x85, 0xa1, 0xd8, 0x73, 0x0a, 0x4a, 0xb7, 0x35, 0x38, 0x6a, 0xf7, 0xdf, - 0xe2, 0x6c, 0x84, 0x19, 0x0f, 0x74, 0x9e, 0x6e, 0x5b, 0xd7, 0xe4, 0x99, 0xaa, 0xd8, 0x69, 0xae, - 0x45, 0x98, 0xb5, 0xda, 0x7f, 0x6b, 0x3c, 0x47, 0xeb, 0x28, 0x43, 0x00, 0x5d, 0x02, 0xa0, 0x93, - 0x66, 0x25, 0x24, 0xeb, 0xee, 0x8e, 0x30, 0xc4, 0x94, 0x64, 0xbb, 0xa9, 0x20, 0xd8, 0xc0, 0x92, - 0xcf, 0x34, 0xba, 0xeb, 0xf4, 0x99, 0x52, 0xf6, 0x19, 0x0e, 0xc1, 0x06, 0x16, 0x7a, 0x07, 0x0c, - 0xbb, 0x6d, 0x67, 0x43, 0xc5, 0x83, 0x9f, 0xa7, 0x22, 0x6d, 0x81, 0xb5, 0x3c, 0xd8, 0x9d, 0x9e, - 0x50, 0x1d, 0x62, 0x4d, 0x58, 0xe0, 0xa2, 0x9f, 0xb4, 0x60, 0xac, 0x19, 0xb4, 0xdb, 0x81, 0xcf, - 0xfd, 0x06, 0xc2, 0x09, 0x72, 0xf7, 0xa8, 0xcc, 0xa4, 0x99, 0x39, 0x83, 0x19, 0xf7, 0x82, 0xa8, - 0xbc, 0x60, 0x13, 0x84, 0x13, 0xbd, 0x32, 0x25, 0x5f, 0x65, 0x1f, 0xc9, 0xf7, 0x0b, 0x16, 0x4c, - 0xf2, 0x67, 0x0d, 0x77, 0x86, 0xc8, 0x6a, 0x0d, 0x8e, 0xf8, 0xb5, 0x32, 0x1e, 0x1e, 0xe5, 0xd6, - 0xcf, 0xc0, 0x71, 0xb6, 0x93, 0xe8, 0x2a, 0x4c, 0xae, 0x07, 0x61, 0x93, 0x98, 0x03, 0x21, 0xc4, - 0xb6, 0x22, 0x74, 0x25, 0x8d, 0x80, 0xb3, 0xcf, 0xa0, 0xdb, 0xf0, 0x84, 0xd1, 0x68, 0x8e, 0x03, - 0x97, 0xdc, 0xcf, 0x08, 0x6a, 0x4f, 0x5c, 0xc9, 0xc5, 0xc2, 0x7d, 0x9e, 0x4e, 0x0a, 0xc9, 0xda, - 0x00, 0x42, 0xf2, 0x43, 0x70, 0xb6, 0x99, 0x1d, 0x99, 0xed, 0xa8, 0xbb, 0x16, 0x71, 0x39, 0x5e, - 0xad, 0x7f, 0x83, 0x20, 0x70, 0x76, 0xae, 0x1f, 0x22, 0xee, 0x4f, 0x03, 0x7d, 0x04, 0xaa, 0x21, - 0x61, 0x5f, 0x25, 0x12, 0x29, 0x9e, 0x87, 0x74, 0xf3, 0x68, 0x0b, 0x9e, 0x93, 0xd5, 0x9a, 0x49, - 0x34, 0x44, 0x58, 0x71, 0x44, 0xf7, 0x60, 0xa4, 0x43, 0xf7, 0x87, 0x22, 0x57, 0xf3, 0xd0, 0xdb, - 0x3f, 0xc5, 0x9c, 0x1d, 0x9a, 0x19, 0xb5, 0x35, 0x38, 0x13, 0x2c, 0xb9, 0x51, 0x5b, 0xad, 0x19, - 0xb4, 0x3b, 0x81, 0x4f, 0xfc, 0x58, 0x2a, 0x91, 0x09, 0x7e, 0xb2, 0x25, 0x5b, 0xb1, 0x81, 0x91, - 0xd1, 0xe5, 0x1a, 0x6d, 0x6a, 0x72, 0x0f, 0x5d, 0x6e, 0x50, 0xeb, 0xf7, 0x3c, 0x55, 0x36, 0xcc, - 0x9f, 0x7a, 0xc7, 0x8d, 0x37, 0x83, 0x6e, 0x2c, 0xdd, 0x03, 0x42, 0x51, 0x29, 0x65, 0xb3, 0x98, - 0x83, 0x83, 0x73, 0x9f, 0x4c, 0x6b, 0xd6, 0x13, 0x0f, 0xa7, 0x59, 0x4f, 0x0e, 0xa0, 0x59, 0x1b, - 0x70, 0x86, 0xf5, 0x40, 0x58, 0xc9, 0xd2, 0x5b, 0x1b, 0x4d, 0x21, 0xd6, 0x79, 0x95, 0xe6, 0xb4, - 0x98, 0x87, 0x84, 0xf3, 0x9f, 0x3d, 0xf7, 0x9d, 0x30, 0x99, 0x11, 0x72, 0x07, 0xf2, 0xc4, 0xce, - 0xc3, 0x13, 0xf9, 0xe2, 0xe4, 0x40, 0xfe, 0xd8, 0x9f, 0x4b, 0x65, 0x20, 0x18, 0x5b, 0xb4, 0x01, - 0x7c, 0xfb, 0x0e, 0x94, 0x89, 0xbf, 0x2d, 0xb4, 0xeb, 0x95, 0xc3, 0xcd, 0xea, 0xcb, 0xfe, 0x36, - 0x97, 0x86, 0xcc, 0x81, 0x79, 0xd9, 0xdf, 0xc6, 0x94, 0x36, 0xfa, 0x61, 0x2b, 0xb1, 0x81, 0xe0, - 0x27, 0x02, 0x1f, 0x3c, 0x92, 0x3d, 0xe9, 0xc0, 0x7b, 0x0a, 0xfb, 0x5f, 0x95, 0xe0, 0xc2, 0x7e, - 0x44, 0x06, 0x18, 0xbe, 0x67, 0x61, 0x38, 0x62, 0x31, 0x45, 0x42, 0x5d, 0x8d, 0xd2, 0x55, 0xcc, - 0xa3, 0x8c, 0x3e, 0x84, 0x05, 0x08, 0x79, 0x50, 0x6e, 0x3b, 0x1d, 0xe1, 0x28, 0x5e, 0x38, 0x6c, - 0x1a, 0x27, 0xfd, 0xef, 0x78, 0x4b, 0x4e, 0x87, 0xcf, 0x79, 0xa3, 0x01, 0x53, 0x36, 0x28, 0x86, - 0x8a, 0x13, 0x86, 0x8e, 0x0c, 0x60, 0xb9, 0x51, 0x0c, 0xbf, 0x59, 0x4a, 0x92, 0x9f, 0xff, 0x27, - 0x9a, 0x30, 0x67, 0x66, 0xff, 0x68, 0x35, 0x91, 0xf3, 0xc7, 0xa2, 0x92, 0x22, 0x18, 0x16, 0xfe, - 0x61, 0xab, 0xe8, 0xec, 0x59, 0x9e, 0x54, 0xcf, 0x3c, 0x10, 0xa2, 0xe8, 0x89, 0x60, 0x85, 0x3e, - 0x63, 0xb1, 0xd2, 0x22, 0x32, 0x91, 0x52, 0xec, 0xea, 0x8f, 0xa6, 0xd2, 0x89, 0x59, 0xb0, 0x44, - 0x36, 0x62, 0x93, 0xbb, 0x28, 0xa3, 0xc4, 0x76, 0x33, 0xd9, 0x32, 0x4a, 0x6c, 0x77, 0x22, 0xe1, - 0x68, 0x27, 0x27, 0xfa, 0xa8, 0x80, 0x8a, 0x13, 0x03, 0xc4, 0x1b, 0x7d, 0xd9, 0x82, 0x49, 0x37, - 0x1d, 0x46, 0x22, 0xf6, 0xc0, 0x77, 0x8a, 0x71, 0xe6, 0x66, 0xa3, 0x54, 0x94, 0xa1, 0x93, 0x01, - 0xe1, 0x6c, 0x67, 0x50, 0x0b, 0x86, 0x5c, 0x7f, 0x3d, 0x10, 0xe6, 0x5d, 0xfd, 0x70, 0x9d, 0x5a, - 0xf0, 0xd7, 0x03, 0xbd, 0x9a, 0xe9, 0x3f, 0xcc, 0xa8, 0xa3, 0x45, 0x38, 0x2d, 0x33, 0xbb, 0xae, - 0xb9, 0x51, 0x1c, 0x84, 0xbd, 0x45, 0xb7, 0xed, 0xc6, 0xcc, 0x34, 0x2b, 0xd7, 0xa7, 0xa8, 0x7a, - 0xc3, 0x39, 0x70, 0x9c, 0xfb, 0x14, 0x7a, 0x0d, 0x46, 0x64, 0xe8, 0x46, 0xb5, 0x08, 0x7f, 0x42, - 0x76, 0xfe, 0xab, 0xc9, 0xd4, 0x10, 0xb1, 0x1b, 0x92, 0x21, 0xfa, 0xb4, 0x05, 0x13, 0xfc, 0xf7, - 0xb5, 0x5e, 0x8b, 0x67, 0x9a, 0xd6, 0x8a, 0xf0, 0x5b, 0x37, 0x12, 0x34, 0xeb, 0xe8, 0xfe, 0xee, - 0xf4, 0x44, 0xb2, 0x0d, 0xa7, 0xf8, 0xda, 0xff, 0x78, 0x0c, 0xb2, 0xc1, 0x2e, 0xc9, 0xc8, 0x16, - 0xeb, 0xd8, 0x23, 0x5b, 0xee, 0xc2, 0x50, 0xa4, 0x03, 0x3c, 0x0a, 0x58, 0x66, 0x82, 0xab, 0x3e, - 0x7f, 0xef, 0xf9, 0x4d, 0xcc, 0x78, 0xa0, 0xae, 0x8a, 0x82, 0x29, 0x17, 0x74, 0xe4, 0x3f, 0x48, - 0x20, 0x0c, 0xda, 0x81, 0x91, 0x4d, 0x3e, 0x1d, 0xc5, 0x5e, 0x6f, 0xe9, 0xb0, 0xe3, 0x9b, 0x98, - 0xe3, 0x7a, 0xf2, 0x89, 0x06, 0x2c, 0xd9, 0xb1, 0x40, 0x4a, 0x23, 0xd4, 0x8b, 0x0b, 0x92, 0xe2, - 0x92, 0x66, 0x07, 0x8f, 0xf3, 0xfa, 0x30, 0x8c, 0x85, 0xa4, 0x19, 0xf8, 0x4d, 0xd7, 0x23, 0xad, - 0x59, 0x79, 0x12, 0x78, 0x90, 0x74, 0x48, 0xe6, 0x4d, 0xc2, 0x06, 0x0d, 0x9c, 0xa0, 0xc8, 0xd6, - 0x99, 0xaa, 0x9f, 0x40, 0x3f, 0x08, 0x11, 0x07, 0x1f, 0x8b, 0x05, 0x55, 0x6b, 0x60, 0x34, 0xf9, - 0x3a, 0x4b, 0xb6, 0xe1, 0x14, 0x5f, 0xf4, 0x3e, 0x80, 0x60, 0x8d, 0x47, 0x4b, 0xce, 0xc6, 0xe2, - 0x14, 0xe4, 0x20, 0xaf, 0x3a, 0xc1, 0x73, 0xae, 0x25, 0x05, 0x6c, 0x50, 0x43, 0x37, 0x00, 0xf8, - 0xca, 0x59, 0xed, 0x75, 0xe4, 0x86, 0x50, 0xe6, 0xb3, 0x42, 0x43, 0x41, 0x1e, 0xec, 0x4e, 0x67, - 0x7d, 0xce, 0xec, 0x34, 0xcd, 0x78, 0x1c, 0x7d, 0x17, 0x8c, 0x44, 0xdd, 0x76, 0xdb, 0x51, 0x67, - 0x24, 0x05, 0x66, 0x71, 0x73, 0xba, 0x86, 0x60, 0xe4, 0x0d, 0x58, 0x72, 0x44, 0x77, 0xa9, 0x88, - 0x17, 0x12, 0x8a, 0xaf, 0x22, 0x6e, 0xa1, 0x70, 0x4f, 0xe0, 0x3b, 0xe5, 0x2e, 0x06, 0xe7, 0xe0, - 0x3c, 0xd8, 0x9d, 0x7e, 0x22, 0xd9, 0xbe, 0x18, 0x88, 0xbc, 0xea, 0x5c, 0x9a, 0xe8, 0xba, 0x2c, - 0xd4, 0x46, 0x5f, 0x5b, 0x56, 0xf9, 0x79, 0x5e, 0x17, 0x6a, 0x63, 0xcd, 0xfd, 0xc7, 0xcc, 0x7c, - 0x18, 0x2d, 0xc1, 0xa9, 0x66, 0xe0, 0xc7, 0x61, 0xe0, 0x79, 0xbc, 0x98, 0x23, 0xdf, 0x9b, 0xf3, - 0x33, 0x94, 0xa7, 0x44, 0xb7, 0x4f, 0xcd, 0x65, 0x51, 0x70, 0xde, 0x73, 0xd4, 0x26, 0x4f, 0xeb, - 0x87, 0x89, 0x42, 0xe2, 0x0a, 0x12, 0x34, 0x85, 0x84, 0x52, 0x6e, 0xef, 0x7d, 0x34, 0x85, 0x9f, - 0x3c, 0x5d, 0x16, 0x5f, 0xec, 0x1d, 0x30, 0x46, 0x76, 0x62, 0x12, 0xfa, 0x8e, 0x77, 0x0b, 0x2f, - 0xca, 0x03, 0x0b, 0xb6, 0x30, 0x2f, 0x1b, 0xed, 0x38, 0x81, 0x85, 0x6c, 0xe5, 0x25, 0x33, 0x0a, - 0x18, 0x70, 0x2f, 0x99, 0xf4, 0x89, 0xd9, 0x3f, 0x53, 0x4e, 0xd8, 0xac, 0x8f, 0xe4, 0x2c, 0x9b, - 0x95, 0xd5, 0x92, 0xf5, 0xc7, 0x18, 0x40, 0xec, 0xc5, 0x8a, 0xe4, 0xac, 0xc2, 0x05, 0x97, 0x4d, - 0x46, 0x38, 0xc9, 0x17, 0x6d, 0x41, 0x65, 0x33, 0x88, 0x62, 0xb9, 0x43, 0x3b, 0xe4, 0x66, 0xf0, - 0x5a, 0x10, 0xc5, 0xcc, 0xd0, 0x52, 0xaf, 0x4d, 0x5b, 0x22, 0xcc, 0x79, 0xd0, 0xbd, 0x7f, 0xb4, - 0xe9, 0x84, 0xad, 0x44, 0x5c, 0xa9, 0xb2, 0xa7, 0x1b, 0x1a, 0x84, 0x4d, 0x3c, 0xfb, 0xcf, 0xac, - 0xc4, 0xa9, 0xd6, 0x51, 0x1d, 0xfb, 0x7f, 0xcc, 0x4a, 0x96, 0x54, 0x28, 0x15, 0xb1, 0x75, 0x33, - 0xcb, 0x8a, 0xec, 0x5b, 0x9d, 0xc1, 0xfe, 0x61, 0x0b, 0x46, 0xea, 0x4e, 0x73, 0x2b, 0x58, 0x5f, - 0x47, 0x2f, 0x40, 0xb5, 0xd5, 0x0d, 0xcd, 0xea, 0x0e, 0xca, 0x59, 0x35, 0x2f, 0xda, 0xb1, 0xc2, - 0xa0, 0x53, 0x7f, 0xdd, 0x69, 0xca, 0xe2, 0x22, 0x65, 0x3e, 0xf5, 0xaf, 0xb0, 0x16, 0x2c, 0x20, - 0x74, 0xf8, 0xdb, 0xce, 0x8e, 0x7c, 0x38, 0x7d, 0xa4, 0xb6, 0xa4, 0x41, 0xd8, 0xc4, 0xb3, 0x7f, - 0xdd, 0x82, 0xa9, 0xba, 0x13, 0xb9, 0xcd, 0xd9, 0x6e, 0xbc, 0x59, 0x77, 0xe3, 0xb5, 0x6e, 0x73, - 0x8b, 0xc4, 0xbc, 0x08, 0x0d, 0xed, 0x65, 0x37, 0xa2, 0x2b, 0x50, 0xed, 0x98, 0x55, 0x2f, 0x6f, - 0x89, 0x76, 0xac, 0x30, 0xd0, 0x6b, 0x30, 0xda, 0x71, 0xa2, 0xe8, 0x5e, 0x10, 0xb6, 0x30, 0x59, - 0x2f, 0xa6, 0x4c, 0x55, 0x83, 0x34, 0x43, 0x12, 0x63, 0xb2, 0x2e, 0x22, 0x73, 0x34, 0x7d, 0x6c, - 0x32, 0xb3, 0x7f, 0xc0, 0x82, 0xd3, 0x75, 0xe2, 0x84, 0x24, 0x64, 0x55, 0xad, 0xd4, 0x8b, 0xa0, - 0x57, 0xa1, 0x1a, 0xd3, 0x16, 0xda, 0x23, 0xab, 0xd8, 0x1e, 0xb1, 0x98, 0x9a, 0x55, 0x41, 0x1c, - 0x2b, 0x36, 0xf6, 0xe7, 0x2c, 0x38, 0x9b, 0xd7, 0x97, 0x39, 0x2f, 0xe8, 0xb6, 0x1e, 0x45, 0x87, - 0xfe, 0x8e, 0x05, 0x63, 0xec, 0xb8, 0x7e, 0x9e, 0xc4, 0x8e, 0xeb, 0x65, 0x6a, 0x75, 0x5a, 0x03, - 0xd6, 0xea, 0xbc, 0x00, 0x43, 0x9b, 0x41, 0x9b, 0xa4, 0x43, 0x4d, 0xae, 0x05, 0x6d, 0x82, 0x19, - 0x04, 0xbd, 0x8d, 0x4e, 0x42, 0xd7, 0x8f, 0x1d, 0xba, 0x1c, 0xe5, 0x71, 0xc6, 0x09, 0x3e, 0x01, - 0x55, 0x33, 0x36, 0x71, 0xec, 0x7f, 0x51, 0x83, 0x11, 0x11, 0x10, 0x36, 0x70, 0x51, 0x24, 0xe9, - 0xc5, 0x29, 0xf5, 0xf5, 0xe2, 0x44, 0x30, 0xdc, 0x64, 0x85, 0x95, 0x85, 0x85, 0x7e, 0xa3, 0x90, - 0x08, 0x42, 0x5e, 0xab, 0x59, 0x77, 0x8b, 0xff, 0xc7, 0x82, 0x15, 0x7a, 0xdd, 0x82, 0x13, 0xcd, - 0xc0, 0xf7, 0x49, 0x53, 0xdb, 0x8e, 0x43, 0x45, 0x6c, 0x10, 0xe6, 0x92, 0x44, 0xf5, 0x49, 0x70, - 0x0a, 0x80, 0xd3, 0xec, 0xd1, 0xcb, 0x30, 0xce, 0xc7, 0xec, 0x76, 0xe2, 0x0c, 0x46, 0x57, 0x65, - 0x34, 0x81, 0x38, 0x89, 0x8b, 0x66, 0xf8, 0x59, 0x96, 0x28, 0x69, 0x38, 0xac, 0x5d, 0xd5, 0x46, - 0x31, 0x43, 0x03, 0x03, 0x85, 0x80, 0x42, 0xb2, 0x1e, 0x92, 0x68, 0x53, 0x04, 0xcc, 0x31, 0xbb, - 0x75, 0xe4, 0xe1, 0x2a, 0x96, 0xe0, 0x0c, 0x25, 0x9c, 0x43, 0x1d, 0x6d, 0x09, 0x37, 0x42, 0xb5, - 0x08, 0x79, 0x2e, 0x3e, 0x73, 0x5f, 0x6f, 0xc2, 0x34, 0x54, 0x98, 0xea, 0x62, 0xf6, 0x72, 0x99, - 0x67, 0xc9, 0x32, 0xc5, 0x86, 0x79, 0x3b, 0x9a, 0x87, 0x93, 0xa9, 0x32, 0x91, 0x91, 0x38, 0x2b, - 0x51, 0x19, 0x91, 0xa9, 0x02, 0x93, 0x11, 0xce, 0x3c, 0x61, 0xba, 0x98, 0x46, 0xf7, 0x71, 0x31, - 0xf5, 0x54, 0x58, 0x36, 0x3f, 0xc5, 0x78, 0x77, 0x21, 0x03, 0x30, 0x50, 0x0c, 0xf6, 0x0f, 0xa5, - 0x62, 0xb0, 0xc7, 0x59, 0x07, 0x6e, 0x17, 0xd3, 0x81, 0x83, 0x07, 0x5c, 0x3f, 0xca, 0x00, 0xea, - 0xff, 0x61, 0x81, 0xfc, 0xae, 0x73, 0x4e, 0x73, 0x93, 0xd0, 0x29, 0x93, 0x93, 0x6a, 0x63, 0x1d, - 0x28, 0xd5, 0xe6, 0x22, 0xd4, 0xe8, 0x38, 0xf1, 0x47, 0xb9, 0xde, 0x57, 0x1e, 0x90, 0xd9, 0x95, - 0x05, 0xf1, 0x94, 0xc6, 0x41, 0x01, 0x4c, 0x7a, 0x4e, 0x14, 0xb3, 0x1e, 0x34, 0x7a, 0x7e, 0xf3, - 0x21, 0xeb, 0x05, 0xb1, 0xb4, 0xbb, 0xc5, 0x34, 0x21, 0x9c, 0xa5, 0x6d, 0xff, 0x9b, 0x0a, 0x8c, - 0x27, 0x24, 0xe3, 0x01, 0x0d, 0x86, 0x17, 0xa0, 0x2a, 0x75, 0x78, 0xba, 0x6a, 0x9a, 0x52, 0xf4, - 0x0a, 0x83, 0x2a, 0xad, 0x35, 0xad, 0x55, 0xd3, 0x06, 0x8e, 0xa1, 0x70, 0xb1, 0x89, 0xc7, 0x84, - 0x72, 0xec, 0x45, 0x73, 0x9e, 0x4b, 0xfc, 0x98, 0x77, 0xb3, 0x18, 0xa1, 0xbc, 0xba, 0xd8, 0x30, - 0x89, 0x6a, 0xa1, 0x9c, 0x02, 0xe0, 0x34, 0x7b, 0xf4, 0x49, 0x0b, 0xc6, 0x9d, 0x7b, 0x91, 0xae, - 0xfe, 0x2f, 0xa2, 0xad, 0x0f, 0xa9, 0xa4, 0x12, 0x17, 0x0a, 0x70, 0xc7, 0x7e, 0xa2, 0x09, 0x27, - 0x99, 0xa2, 0x2f, 0x58, 0x80, 0xc8, 0x0e, 0x69, 0xca, 0x78, 0x70, 0xd1, 0x97, 0xe1, 0x22, 0x76, - 0xf0, 0x97, 0x33, 0x74, 0xb9, 0x54, 0xcf, 0xb6, 0xe3, 0x9c, 0x3e, 0xa0, 0xeb, 0x80, 0x5a, 0x6e, - 0xe4, 0xac, 0x79, 0x64, 0x2e, 0x68, 0xcb, 0x54, 0x71, 0x71, 0x9e, 0x7e, 0x4e, 0x8c, 0x33, 0x9a, - 0xcf, 0x60, 0xe0, 0x9c, 0xa7, 0xd8, 0x2c, 0x0b, 0x83, 0x9d, 0xde, 0xad, 0xd0, 0x63, 0x5a, 0xc2, - 0x9c, 0x65, 0xa2, 0x1d, 0x2b, 0x0c, 0xfb, 0xcf, 0xcb, 0x6a, 0x29, 0xeb, 0xe4, 0x07, 0xc7, 0x08, - 0xc2, 0xb6, 0x1e, 0x3e, 0x08, 0x5b, 0x47, 0x4a, 0x65, 0x0b, 0x20, 0x24, 0xf2, 0xa5, 0x4b, 0x8f, - 0x28, 0x5f, 0xfa, 0x7b, 0xad, 0x44, 0x65, 0xc2, 0xd1, 0x4b, 0xef, 0x2b, 0x36, 0xf1, 0x62, 0x86, - 0x47, 0x71, 0xa5, 0xf4, 0x4a, 0x2a, 0x78, 0xef, 0x05, 0xa8, 0xae, 0x7b, 0x0e, 0x2b, 0x99, 0xc3, - 0x16, 0xaa, 0x11, 0x61, 0x76, 0x45, 0xb4, 0x63, 0x85, 0x41, 0xa5, 0xbe, 0x41, 0xf4, 0x40, 0x52, - 0xfb, 0xdf, 0x97, 0x61, 0xd4, 0xd0, 0xf8, 0xb9, 0xe6, 0x9b, 0xf5, 0x98, 0x99, 0x6f, 0xa5, 0x03, - 0x98, 0x6f, 0xdf, 0x03, 0xb5, 0xa6, 0xd4, 0x46, 0xc5, 0xdc, 0xe1, 0x90, 0xd6, 0x71, 0x5a, 0x21, - 0xa9, 0x26, 0xac, 0x79, 0xa2, 0xab, 0x89, 0x9c, 0xdc, 0x84, 0x5f, 0x20, 0x2f, 0x69, 0x56, 0x68, - 0xb4, 0xec, 0x33, 0xe9, 0xf8, 0x80, 0xca, 0xfe, 0xf1, 0x01, 0xf6, 0x1f, 0x5a, 0xea, 0xe3, 0x1e, - 0x43, 0xf1, 0xa5, 0xbb, 0xc9, 0xe2, 0x4b, 0x97, 0x0b, 0x19, 0xe6, 0x3e, 0x55, 0x97, 0x7e, 0xc0, - 0x82, 0x67, 0xf6, 0xae, 0x66, 0x8e, 0x9e, 0x85, 0xca, 0x46, 0x18, 0x74, 0x3b, 0x42, 0x07, 0x2b, - 0x3a, 0xac, 0x74, 0x3c, 0xe6, 0x30, 0xba, 0x89, 0xda, 0x72, 0xfd, 0x56, 0x7a, 0x13, 0x75, 0xc3, - 0xf5, 0x5b, 0x98, 0x41, 0x06, 0x28, 0x77, 0x7b, 0x13, 0x46, 0xe6, 0x82, 0x76, 0xdb, 0xf1, 0x5b, - 0xe8, 0x9b, 0x60, 0xa4, 0xc9, 0x7f, 0x0a, 0x7f, 0x1e, 0x3b, 0x38, 0x17, 0x50, 0x2c, 0x61, 0xe8, - 0x3c, 0x0c, 0x39, 0xe1, 0x86, 0xf4, 0xe1, 0xb1, 0x80, 0xbc, 0xd9, 0x70, 0x23, 0xc2, 0xac, 0xd5, - 0xfe, 0x4b, 0x0b, 0x26, 0xe8, 0x23, 0x2e, 0x1b, 0x60, 0x36, 0xb4, 0xcf, 0xc1, 0xb0, 0xd3, 0x8d, - 0x37, 0x83, 0xcc, 0x9e, 0x70, 0x96, 0xb5, 0x62, 0x01, 0xa5, 0x9d, 0x55, 0x15, 0x44, 0x8c, 0xce, - 0xce, 0xd3, 0x75, 0xc5, 0x20, 0xd4, 0xac, 0x8e, 0xba, 0x6b, 0x79, 0x27, 0xb7, 0x0d, 0xde, 0x8c, - 0x25, 0x9c, 0x12, 0x5b, 0x0b, 0x5a, 0x3d, 0x11, 0x66, 0xac, 0x88, 0xd5, 0x83, 0x56, 0x0f, 0x33, - 0x08, 0x7a, 0x1a, 0xca, 0xd1, 0xa6, 0x23, 0x63, 0x04, 0x64, 0xc4, 0x7b, 0xe3, 0xda, 0x2c, 0xa6, - 0xed, 0x2a, 0x81, 0x23, 0xf4, 0xd2, 0xf1, 0xbe, 0xc9, 0x04, 0x8e, 0xd0, 0xb3, 0x7f, 0x76, 0x08, - 0x58, 0xec, 0x8f, 0x13, 0x92, 0xd6, 0x6a, 0xc0, 0x0a, 0x54, 0x1f, 0xe9, 0x11, 0xbb, 0xde, 0x54, - 0x3f, 0xce, 0xc7, 0xec, 0xc6, 0x51, 0x6b, 0xf9, 0xb8, 0x8f, 0x5a, 0xf3, 0x4f, 0xcf, 0x87, 0x1e, - 0xa3, 0xd3, 0x73, 0xfb, 0xb3, 0x16, 0x20, 0x15, 0xc9, 0xa5, 0xc3, 0x5b, 0x2e, 0x42, 0x4d, 0x85, - 0x8e, 0x89, 0xf5, 0xa2, 0x45, 0xb4, 0x04, 0x60, 0x8d, 0x33, 0x80, 0x27, 0xe5, 0x59, 0xa9, 0x3f, - 0xcb, 0x49, 0x59, 0xc2, 0xb4, 0xae, 0x50, 0xa7, 0xf6, 0xaf, 0x96, 0xe0, 0x09, 0x6e, 0xba, 0x2d, - 0x39, 0xbe, 0xb3, 0x41, 0xda, 0xb4, 0x57, 0x83, 0x06, 0x2c, 0x35, 0xe9, 0x16, 0xde, 0x95, 0xd9, - 0x1a, 0x87, 0x95, 0x9d, 0x5c, 0xce, 0x70, 0xc9, 0xb2, 0xe0, 0xbb, 0x31, 0x66, 0xc4, 0x51, 0x04, - 0x55, 0x79, 0x09, 0x97, 0xd0, 0x85, 0x05, 0x31, 0x52, 0x6a, 0x41, 0x58, 0x39, 0x04, 0x2b, 0x46, - 0xd4, 0x94, 0xf1, 0x82, 0xe6, 0x16, 0x5d, 0xf2, 0x69, 0x53, 0x66, 0x51, 0xb4, 0x63, 0x85, 0x61, - 0xb7, 0xe1, 0x84, 0x1c, 0xc3, 0xce, 0x0d, 0xd2, 0xc3, 0x64, 0x9d, 0xea, 0xff, 0xa6, 0x6c, 0x32, - 0xee, 0x05, 0x53, 0xfa, 0x7f, 0xce, 0x04, 0xe2, 0x24, 0xae, 0xac, 0x59, 0x5d, 0xca, 0xaf, 0x59, - 0x6d, 0xff, 0xaa, 0x05, 0x69, 0x03, 0x84, 0x39, 0xe0, 0xcc, 0x4b, 0xbe, 0xfa, 0x15, 0xb3, 0x3f, - 0x40, 0x19, 0xdb, 0x0f, 0xc0, 0xa8, 0x13, 0x53, 0x0b, 0x93, 0x7b, 0x83, 0xca, 0x0f, 0x77, 0x8a, - 0xb9, 0x14, 0xb4, 0xdc, 0x75, 0x97, 0x79, 0x81, 0x4c, 0x72, 0xf6, 0xdf, 0xae, 0x40, 0x6d, 0x3e, - 0xec, 0x1d, 0x3c, 0x6d, 0x2e, 0x9b, 0x14, 0x57, 0x3a, 0x50, 0x52, 0x9c, 0x4c, 0xbb, 0x2b, 0xf7, - 0x4d, 0xbb, 0x93, 0x69, 0x73, 0x43, 0x8f, 0x2a, 0x6d, 0xae, 0xf2, 0x98, 0xa4, 0xcd, 0x0d, 0x3f, - 0x06, 0x69, 0x73, 0x23, 0xc7, 0x9c, 0x36, 0x67, 0xff, 0xb7, 0x21, 0x98, 0xcc, 0xa4, 0x3f, 0xa3, - 0x97, 0x60, 0x4c, 0xad, 0x51, 0x79, 0x00, 0x50, 0x33, 0xc3, 0xe8, 0x35, 0x0c, 0x27, 0x30, 0x07, - 0x10, 0xd4, 0x0b, 0x70, 0x2a, 0x24, 0xaf, 0x76, 0x49, 0x97, 0xcc, 0xae, 0xc7, 0x24, 0x6c, 0x90, - 0x66, 0xe0, 0xb7, 0x78, 0x81, 0xf3, 0x72, 0xfd, 0xc9, 0xfb, 0xbb, 0xd3, 0xa7, 0x70, 0x16, 0x8c, - 0xf3, 0x9e, 0x41, 0x1d, 0x18, 0xf7, 0xcc, 0x9d, 0xab, 0x98, 0xc3, 0x0f, 0xb5, 0xe9, 0x55, 0xb2, - 0x2a, 0xd1, 0x8c, 0x93, 0x0c, 0x92, 0xdb, 0xdf, 0xca, 0x23, 0xda, 0xfe, 0x7e, 0x42, 0x6f, 0x7f, - 0x79, 0x54, 0xda, 0xfb, 0x0b, 0x4e, 0x7f, 0x1f, 0x64, 0xff, 0x7b, 0x98, 0x1d, 0xed, 0xbb, 0xa1, - 0x2a, 0x23, 0x76, 0x07, 0x8a, 0x74, 0x35, 0xe9, 0xf4, 0xd1, 0xec, 0x0f, 0x4a, 0x90, 0xe3, 0xb4, - 0xa1, 0x92, 0x56, 0x5b, 0xfb, 0x09, 0x49, 0x7b, 0x30, 0x8b, 0x1f, 0xed, 0xf0, 0x68, 0x65, 0x6e, - 0xe3, 0xbd, 0xb7, 0x68, 0xa7, 0x93, 0x0e, 0x60, 0x56, 0xfa, 0x4f, 0x05, 0x31, 0x5f, 0x02, 0xd0, - 0x1b, 0x46, 0x61, 0xe9, 0xab, 0xf0, 0x23, 0xbd, 0xaf, 0xc4, 0x06, 0x16, 0x7a, 0x11, 0x46, 0x5d, - 0x3f, 0x8a, 0x1d, 0xcf, 0xbb, 0xe6, 0xfa, 0xb1, 0xb0, 0xfe, 0x95, 0x31, 0xbb, 0xa0, 0x41, 0xd8, - 0xc4, 0x3b, 0xf7, 0x4e, 0xe3, 0xbb, 0x1c, 0xe4, 0x7b, 0x6e, 0xc2, 0xd9, 0xab, 0x6e, 0xac, 0x44, - 0x9b, 0x9a, 0x47, 0x6c, 0x93, 0x27, 0x35, 0x90, 0xd5, 0x57, 0x03, 0x19, 0x69, 0xa8, 0xa5, 0x64, - 0xd6, 0x6c, 0x3a, 0x0d, 0xd5, 0x6e, 0xc2, 0xe9, 0xab, 0x6e, 0x7c, 0xc5, 0xf5, 0xc8, 0x11, 0x32, - 0xf9, 0x95, 0x61, 0x18, 0x33, 0xcb, 0x62, 0x1c, 0x44, 0x5f, 0x7f, 0x8e, 0xee, 0x4e, 0xc4, 0x40, - 0xb8, 0x2a, 0xa4, 0xe2, 0xce, 0xa1, 0x6b, 0x74, 0xe4, 0x0f, 0xae, 0xb1, 0x41, 0xd1, 0x3c, 0xb1, - 0xd9, 0x01, 0x74, 0x0f, 0x2a, 0xeb, 0x2c, 0xa3, 0xb2, 0x5c, 0x44, 0x30, 0x5c, 0xde, 0xe0, 0xeb, - 0x15, 0xc9, 0x73, 0x32, 0x39, 0x3f, 0x6a, 0x54, 0x86, 0xc9, 0x44, 0x7e, 0x23, 0xcf, 0x45, 0x58, - 0x2b, 0x0a, 0xa3, 0x9f, 0x56, 0xa8, 0x3c, 0x84, 0x56, 0x48, 0xc8, 0xe8, 0xe1, 0x47, 0x24, 0xa3, - 0x59, 0x76, 0x6c, 0xbc, 0xc9, 0xb6, 0x3c, 0x22, 0x31, 0x6f, 0x84, 0x0d, 0x82, 0x91, 0x1d, 0x9b, - 0x00, 0xe3, 0x34, 0x3e, 0xfa, 0xa8, 0x92, 0xf2, 0xd5, 0x22, 0x8e, 0xac, 0xcc, 0x19, 0x7d, 0xd4, - 0x02, 0xfe, 0xb3, 0x25, 0x98, 0xb8, 0xea, 0x77, 0x57, 0xae, 0xae, 0x74, 0xd7, 0x3c, 0xb7, 0x79, - 0x83, 0xf4, 0xa8, 0x14, 0xdf, 0x22, 0xbd, 0x85, 0xf9, 0xb4, 0xaf, 0xe7, 0x06, 0x6d, 0xc4, 0x1c, - 0x46, 0xe5, 0xd6, 0xba, 0xeb, 0x6f, 0x90, 0xb0, 0x13, 0xba, 0xe2, 0x34, 0xc9, 0x90, 0x5b, 0x57, - 0x34, 0x08, 0x9b, 0x78, 0x94, 0x76, 0x70, 0xcf, 0x57, 0x35, 0xca, 0x14, 0xed, 0x65, 0xda, 0x88, - 0x39, 0x8c, 0x22, 0xc5, 0x61, 0x57, 0x38, 0x6b, 0x0d, 0xa4, 0x55, 0xda, 0x88, 0x39, 0x4c, 0xf8, - 0x5e, 0x58, 0xac, 0x61, 0x25, 0xe3, 0x7b, 0x61, 0x61, 0x3a, 0x12, 0x4e, 0x51, 0xb7, 0x48, 0x6f, - 0xde, 0x89, 0x9d, 0xb4, 0xeb, 0xe4, 0x06, 0x6f, 0xc6, 0x12, 0xce, 0x0a, 0xad, 0x27, 0x87, 0xe3, - 0x6b, 0xae, 0xd0, 0x7a, 0xb2, 0xfb, 0x7d, 0x5c, 0x7e, 0x5f, 0x2a, 0xc1, 0xd8, 0x1b, 0x97, 0x31, - 0xef, 0x71, 0x19, 0xd8, 0x1d, 0x98, 0xcc, 0xe4, 0xe6, 0x0f, 0x60, 0x01, 0xed, 0x5b, 0x3b, 0xc5, - 0xc6, 0x30, 0x4a, 0x09, 0xcb, 0x42, 0xa3, 0x73, 0x30, 0xc9, 0x17, 0x31, 0xe5, 0xc4, 0x52, 0xad, - 0x55, 0xbd, 0x05, 0x76, 0x6c, 0x7a, 0x3b, 0x0d, 0xc4, 0x59, 0x7c, 0xfb, 0x87, 0x2c, 0x18, 0x4f, - 0x94, 0x4b, 0x28, 0xc8, 0x56, 0x63, 0xab, 0x3c, 0x60, 0xf1, 0xf2, 0x2c, 0x7f, 0xa9, 0xcc, 0xd4, - 0xb1, 0x5e, 0xe5, 0x1a, 0x84, 0x4d, 0x3c, 0xfb, 0xb7, 0xca, 0x50, 0x95, 0xb1, 0x7d, 0x03, 0x74, - 0xe5, 0x33, 0x16, 0x8c, 0xab, 0xa3, 0x6a, 0x76, 0xb6, 0x50, 0x2a, 0x22, 0x7b, 0x93, 0xf6, 0x40, - 0x79, 0xc7, 0xfc, 0xf5, 0x40, 0x6f, 0x1c, 0xb0, 0xc9, 0x0c, 0x27, 0x79, 0xa3, 0xdb, 0x00, 0x51, - 0x2f, 0x8a, 0x49, 0xdb, 0x38, 0xe5, 0xb0, 0x8d, 0x59, 0x36, 0xd3, 0x0c, 0x42, 0x42, 0xe7, 0xd4, - 0xcd, 0xa0, 0x45, 0x1a, 0x0a, 0x53, 0x5b, 0x7a, 0xba, 0x0d, 0x1b, 0x94, 0xd0, 0x6b, 0x2a, 0xb0, - 0x62, 0xa8, 0x08, 0xfd, 0x2e, 0xc7, 0x77, 0x90, 0xc8, 0x8a, 0x43, 0x44, 0x32, 0xd8, 0x3f, 0x5d, - 0x82, 0x93, 0xe9, 0x91, 0x44, 0xef, 0x87, 0x31, 0x39, 0x68, 0x86, 0x13, 0x49, 0x06, 0x54, 0x8e, - 0x61, 0x03, 0xf6, 0x60, 0x77, 0x7a, 0x3a, 0x7b, 0xbb, 0xff, 0x8c, 0x89, 0x82, 0x13, 0xc4, 0x78, - 0x98, 0x83, 0x88, 0xc7, 0xa9, 0xf7, 0x66, 0x3b, 0x1d, 0x11, 0xab, 0x60, 0x84, 0x39, 0x98, 0x50, - 0x9c, 0xc2, 0x46, 0x2b, 0x70, 0xda, 0x68, 0xb9, 0x49, 0xdc, 0x8d, 0xcd, 0xb5, 0x20, 0x94, 0xfb, - 0xd6, 0xf3, 0x3a, 0x7c, 0x3b, 0x8b, 0x83, 0x73, 0x9f, 0xa4, 0x06, 0x52, 0xd3, 0xe9, 0x38, 0x4d, - 0x37, 0xee, 0x89, 0xd3, 0x26, 0x25, 0xce, 0xe7, 0x44, 0x3b, 0x56, 0x18, 0xf6, 0x3f, 0x18, 0x82, - 0x93, 0x3c, 0x5e, 0x99, 0xa8, 0x70, 0x7c, 0xf4, 0x7e, 0xa8, 0x45, 0xb1, 0x13, 0x72, 0x97, 0x95, - 0x75, 0x60, 0xd1, 0xa5, 0x6b, 0x3c, 0x48, 0x22, 0x58, 0xd3, 0x43, 0xef, 0x63, 0x95, 0x01, 0xdd, - 0x68, 0x93, 0x51, 0x2f, 0x3d, 0x9c, 0x43, 0xec, 0x8a, 0xa2, 0x80, 0x0d, 0x6a, 0xe8, 0xdb, 0xa1, - 0xd2, 0xd9, 0x74, 0x22, 0xe9, 0xad, 0x7d, 0x4e, 0xca, 0x89, 0x15, 0xda, 0xf8, 0x60, 0x77, 0xfa, - 0x4c, 0xfa, 0x55, 0x19, 0x00, 0xf3, 0x87, 0x4c, 0x29, 0x3f, 0xb4, 0x8f, 0x94, 0x7f, 0x0e, 0x86, - 0x5b, 0x61, 0xaf, 0x71, 0x6d, 0x36, 0x7d, 0xc1, 0xd3, 0x3c, 0x6b, 0xc5, 0x02, 0x4a, 0x65, 0xd2, - 0x26, 0x67, 0xd9, 0xa2, 0xc8, 0xc3, 0x49, 0xcb, 0xe3, 0x9a, 0x06, 0x61, 0x13, 0x8f, 0x55, 0xe9, - 0x4a, 0x45, 0xb3, 0x8f, 0x1c, 0x41, 0xb6, 0xd3, 0xa0, 0x71, 0xec, 0x97, 0xa1, 0x26, 0xba, 0xba, - 0x1a, 0xa0, 0x97, 0x60, 0x8c, 0x3b, 0x03, 0xeb, 0xa1, 0xe3, 0x37, 0x37, 0xd3, 0x4e, 0x9c, 0x55, - 0x03, 0x86, 0x13, 0x98, 0xf6, 0x12, 0x0c, 0x0d, 0x28, 0x64, 0x07, 0xda, 0x9b, 0xbf, 0x1b, 0xaa, - 0x94, 0x9c, 0xdc, 0xa8, 0x15, 0x41, 0x32, 0x80, 0xaa, 0xbc, 0x19, 0x16, 0xd9, 0x50, 0x76, 0x1d, - 0x19, 0xb5, 0xa4, 0x96, 0xd0, 0x42, 0x14, 0x75, 0xd9, 0xb4, 0xa3, 0x40, 0xf4, 0x2c, 0x94, 0xc9, - 0x4e, 0x27, 0x1d, 0x9e, 0x74, 0x79, 0xa7, 0xe3, 0x86, 0x24, 0xa2, 0x48, 0x64, 0xa7, 0x83, 0xce, - 0x41, 0xc9, 0x6d, 0x89, 0x19, 0x09, 0x02, 0xa7, 0xb4, 0x30, 0x8f, 0x4b, 0x6e, 0xcb, 0xde, 0x81, - 0x9a, 0xba, 0x8a, 0x16, 0x6d, 0x49, 0xd3, 0xca, 0x2a, 0x22, 0x5e, 0x5d, 0xd2, 0xed, 0x63, 0x54, - 0x75, 0x01, 0x74, 0xf1, 0x90, 0xa2, 0x54, 0xf0, 0x05, 0x18, 0x6a, 0x06, 0xa2, 0xec, 0x53, 0x55, - 0x93, 0x61, 0xb6, 0x14, 0x83, 0xd8, 0x77, 0x60, 0xe2, 0x86, 0x1f, 0xdc, 0x63, 0x97, 0xc2, 0xb1, - 0x1a, 0xe8, 0x94, 0xf0, 0x3a, 0xfd, 0x91, 0xb6, 0xe0, 0x19, 0x14, 0x73, 0x98, 0xaa, 0x74, 0x5c, - 0xea, 0x57, 0xe9, 0xd8, 0xfe, 0x98, 0x05, 0x63, 0xca, 0x1b, 0x7b, 0x75, 0x7b, 0x6b, 0xb0, 0x53, - 0x60, 0xa3, 0x3c, 0x47, 0x69, 0x9f, 0xf2, 0x1c, 0xf2, 0xc0, 0xb8, 0xdc, 0xef, 0xc0, 0xd8, 0xfe, - 0x2b, 0x0b, 0x4e, 0xaa, 0x2e, 0x48, 0x9b, 0xe9, 0x25, 0x18, 0x5b, 0xeb, 0xba, 0x5e, 0x4b, 0x16, - 0x77, 0x4f, 0x2d, 0x97, 0xba, 0x01, 0xc3, 0x09, 0x4c, 0x74, 0x09, 0x60, 0xcd, 0xf5, 0x9d, 0xb0, - 0xb7, 0xa2, 0x8d, 0x34, 0xa5, 0xb7, 0xeb, 0x0a, 0x82, 0x0d, 0x2c, 0xf4, 0x11, 0xa8, 0x6e, 0xcb, - 0x38, 0x81, 0x72, 0xa1, 0x55, 0x25, 0xc4, 0x78, 0xe8, 0x95, 0xa0, 0x02, 0x0f, 0x14, 0x47, 0xfb, - 0xf3, 0x65, 0x98, 0x48, 0x56, 0x82, 0x18, 0xc0, 0x83, 0xf2, 0x2c, 0x54, 0x58, 0x71, 0x88, 0xf4, - 0xc4, 0xe2, 0xd5, 0xd8, 0x39, 0x0c, 0x45, 0x30, 0xcc, 0x45, 0x49, 0x31, 0xf7, 0x16, 0xab, 0x4e, - 0x2a, 0x3f, 0x2d, 0x73, 0x62, 0x8b, 0x43, 0x0f, 0xc1, 0x0a, 0x7d, 0xd2, 0x82, 0x91, 0xa0, 0x63, - 0x96, 0xd8, 0x7d, 0x6f, 0x91, 0x55, 0x32, 0x44, 0x2a, 0xba, 0xb0, 0x86, 0xd4, 0xc4, 0x93, 0x93, - 0x41, 0xb2, 0x3e, 0xf7, 0x6d, 0x30, 0x66, 0x62, 0xee, 0x67, 0x10, 0x55, 0x4d, 0x83, 0xe8, 0x33, - 0xe6, 0x94, 0x14, 0x75, 0x40, 0x06, 0x58, 0xec, 0xb7, 0xa0, 0xd2, 0x54, 0x81, 0x97, 0x0f, 0x75, - 0x21, 0x89, 0xaa, 0x93, 0xc7, 0x82, 0x5a, 0x38, 0x35, 0xfb, 0x0f, 0x2d, 0x63, 0x7e, 0x60, 0x12, - 0x2d, 0xb4, 0x50, 0x08, 0xe5, 0x8d, 0xed, 0x2d, 0x61, 0x64, 0x5c, 0x2f, 0x68, 0x78, 0xaf, 0x6e, - 0x6f, 0xe9, 0x15, 0x66, 0xb6, 0x62, 0xca, 0x6c, 0x80, 0xc3, 0x84, 0x44, 0xb9, 0x98, 0xf2, 0xfe, - 0xe5, 0x62, 0xec, 0x2f, 0x94, 0x60, 0x32, 0x33, 0xa9, 0xd0, 0x6b, 0x50, 0x09, 0xe9, 0x5b, 0x8a, - 0xd7, 0x5b, 0x2c, 0xac, 0xc0, 0x4b, 0xb4, 0xd0, 0xd2, 0xca, 0x3b, 0xd9, 0x8e, 0x39, 0x4b, 0x74, - 0x1d, 0x90, 0x0e, 0x0f, 0x56, 0x27, 0x19, 0xfc, 0x95, 0x55, 0x0c, 0xe1, 0x6c, 0x06, 0x03, 0xe7, - 0x3c, 0x85, 0x5e, 0x4e, 0x1f, 0x88, 0xa4, 0x8a, 0xb6, 0xef, 0x75, 0xb6, 0x61, 0xbf, 0x6e, 0x4e, - 0xc1, 0xdb, 0x5a, 0x98, 0x1e, 0x76, 0x73, 0x9a, 0x91, 0xac, 0xe5, 0x41, 0x25, 0xab, 0xfd, 0x4b, - 0x25, 0x18, 0x4f, 0x14, 0x61, 0x46, 0x1e, 0x54, 0x89, 0xc7, 0xce, 0xed, 0xa5, 0xf6, 0x3d, 0xec, - 0x1d, 0x52, 0x4a, 0x4e, 0x5e, 0x16, 0x74, 0xb1, 0xe2, 0xf0, 0x78, 0x44, 0x3b, 0xbe, 0x04, 0x63, - 0xb2, 0x43, 0xef, 0x75, 0xda, 0x5e, 0x7a, 0xf8, 0x2e, 0x1b, 0x30, 0x9c, 0xc0, 0xb4, 0x7f, 0xad, - 0x0c, 0x53, 0x3c, 0xd0, 0xa1, 0xa5, 0x16, 0x83, 0x0a, 0x58, 0xfa, 0x41, 0x5d, 0x2a, 0x9d, 0x0f, - 0xe4, 0xda, 0x61, 0xaf, 0x6c, 0xcc, 0x67, 0x34, 0x50, 0x90, 0xfe, 0x97, 0x52, 0x41, 0xfa, 0x7c, - 0xab, 0xbe, 0x71, 0x44, 0x3d, 0xfa, 0xda, 0x8a, 0xda, 0xff, 0x27, 0x25, 0x38, 0x91, 0xba, 0x0f, - 0x13, 0x7d, 0x3e, 0x79, 0x85, 0x92, 0x55, 0xc4, 0x31, 0xe0, 0x9e, 0x57, 0x24, 0x1e, 0xec, 0x22, - 0xa5, 0x47, 0xb4, 0x54, 0xec, 0xdf, 0x2f, 0xc1, 0x44, 0xf2, 0x22, 0xcf, 0xc7, 0x70, 0xa4, 0xde, - 0x02, 0x35, 0x76, 0x57, 0xdd, 0x0d, 0xd2, 0x93, 0xa7, 0x8d, 0xfc, 0x5a, 0x30, 0xd9, 0x88, 0x35, - 0xfc, 0xb1, 0xb8, 0x9f, 0xca, 0xfe, 0xa7, 0x16, 0x9c, 0xe1, 0x6f, 0x99, 0x9e, 0x87, 0x7f, 0x33, - 0x6f, 0x74, 0x5f, 0x29, 0xb6, 0x83, 0xa9, 0x12, 0xff, 0xfb, 0x8d, 0x2f, 0x35, 0x5e, 0x4e, 0x8b, - 0xde, 0x26, 0xa7, 0xc2, 0x63, 0xd8, 0xd9, 0x03, 0x4d, 0x06, 0xfb, 0xdf, 0x96, 0x60, 0x74, 0x79, - 0x6e, 0x41, 0x89, 0xf0, 0x8b, 0x50, 0x6b, 0x86, 0xc4, 0xd1, 0xee, 0x1f, 0x33, 0x8c, 0x4e, 0x02, - 0xb0, 0xc6, 0xa1, 0xbb, 0x28, 0x1e, 0x86, 0x1a, 0xa5, 0x77, 0x51, 0x3c, 0x4a, 0x35, 0xc2, 0x12, - 0x8e, 0x5e, 0x80, 0x2a, 0x4b, 0x56, 0xbf, 0x15, 0x4a, 0x8d, 0xa3, 0xb7, 0xd6, 0xac, 0x1d, 0x2f, - 0x62, 0x85, 0x41, 0x09, 0xb7, 0x82, 0x66, 0x44, 0x91, 0x53, 0x1e, 0x99, 0x79, 0xda, 0x8c, 0x17, - 0xb1, 0x84, 0xb3, 0x5a, 0xa3, 0xcc, 0x6b, 0x41, 0x91, 0x2b, 0xc9, 0x4e, 0x73, 0xf7, 0x06, 0x45, - 0xd7, 0x38, 0x07, 0xa9, 0x49, 0x9b, 0x4a, 0x18, 0x1d, 0x19, 0x2c, 0x61, 0xd4, 0xfe, 0xfd, 0x32, - 0xd4, 0xb4, 0x53, 0xcd, 0x15, 0x15, 0x5a, 0x0a, 0xb9, 0x42, 0xa2, 0xd1, 0xf3, 0x9b, 0x8a, 0x34, - 0x8f, 0x2a, 0x30, 0x0a, 0xb4, 0x7c, 0xbf, 0x05, 0xa3, 0xae, 0xef, 0xc6, 0xae, 0xc3, 0x7c, 0x83, - 0x42, 0x6e, 0xae, 0x14, 0x54, 0xc1, 0x63, 0x81, 0x53, 0x0e, 0x42, 0xf3, 0xe8, 0x5f, 0x31, 0xc3, - 0x26, 0x67, 0xf4, 0x61, 0x91, 0x9f, 0x58, 0x2e, 0xac, 0xcc, 0x51, 0x35, 0x95, 0x94, 0xd8, 0xa1, - 0x36, 0x76, 0x1c, 0x16, 0x54, 0x1d, 0x0c, 0x53, 0x52, 0xea, 0x2a, 0x23, 0xb5, 0x8b, 0x61, 0xcd, - 0x98, 0x33, 0xb2, 0x23, 0x40, 0xd9, 0xb1, 0x38, 0x60, 0xee, 0xd7, 0x45, 0xa8, 0x39, 0xdd, 0x38, - 0x68, 0xd3, 0x61, 0x12, 0x81, 0x03, 0x3a, 0xbb, 0x4d, 0x02, 0xb0, 0xc6, 0xb1, 0x7f, 0xb4, 0x02, - 0xa9, 0x7a, 0x29, 0x68, 0x07, 0x6a, 0xaa, 0x62, 0x4a, 0x31, 0xb9, 0xd4, 0x7a, 0x46, 0xa9, 0xce, - 0xa8, 0x26, 0xac, 0x99, 0xa1, 0x40, 0xba, 0x59, 0xf9, 0x6a, 0x7f, 0x6f, 0xda, 0xcd, 0x7a, 0xed, - 0x60, 0xa7, 0x6f, 0x74, 0xce, 0x5e, 0xe4, 0x95, 0x32, 0x67, 0xf6, 0xf5, 0xcc, 0x96, 0xf7, 0xf1, - 0xcc, 0x7e, 0x5c, 0x5c, 0x7a, 0x88, 0x49, 0xd4, 0xf5, 0x62, 0x31, 0x2b, 0xde, 0x5d, 0xe0, 0x6a, - 0xe3, 0x84, 0x75, 0xfd, 0x31, 0xfe, 0x1f, 0x1b, 0x4c, 0x93, 0xfe, 0xf3, 0xe1, 0x23, 0xf5, 0x9f, - 0x8f, 0x14, 0xea, 0x3f, 0xbf, 0x04, 0xc0, 0xe6, 0x38, 0xcf, 0x55, 0xa9, 0x32, 0xb7, 0xa6, 0x52, - 0x35, 0x58, 0x41, 0xb0, 0x81, 0x65, 0x7f, 0x0b, 0x24, 0x0b, 0xe8, 0xa1, 0x69, 0x59, 0xaf, 0x8f, - 0x9f, 0x0c, 0xb2, 0x34, 0xe1, 0x44, 0x69, 0xbd, 0x5f, 0xb0, 0xc0, 0xac, 0xf2, 0x87, 0x5e, 0xe5, - 0xe5, 0x04, 0xad, 0x22, 0x4e, 0x9a, 0x0c, 0xba, 0x33, 0x4b, 0x4e, 0x27, 0x15, 0xfd, 0x24, 0x6b, - 0x0a, 0x9e, 0x7b, 0x27, 0x54, 0x25, 0xf4, 0x40, 0x46, 0xf3, 0x47, 0xe1, 0x94, 0x2c, 0x39, 0x22, - 0x0f, 0x85, 0x44, 0x14, 0xc2, 0xf1, 0x64, 0x9c, 0xfc, 0xa2, 0x05, 0x17, 0xd2, 0x1d, 0x88, 0x96, - 0x02, 0xdf, 0x8d, 0x83, 0xb0, 0x41, 0xe2, 0xd8, 0xf5, 0x37, 0x58, 0xd5, 0xe7, 0x7b, 0x4e, 0x28, - 0xaf, 0x3c, 0x63, 0x02, 0xf3, 0x8e, 0x13, 0xfa, 0x98, 0xb5, 0xa2, 0x1e, 0x0c, 0xf3, 0x80, 0x7a, - 0xb1, 0x1b, 0x3a, 0xe4, 0xda, 0xc8, 0x19, 0x0e, 0xbd, 0x1d, 0xe3, 0xc1, 0xfc, 0x58, 0x30, 0xb4, - 0xbf, 0x62, 0x01, 0x5a, 0xde, 0x26, 0x61, 0xe8, 0xb6, 0x8c, 0x14, 0x00, 0x76, 0x79, 0xb0, 0x71, - 0x49, 0xb0, 0x59, 0x10, 0x27, 0x75, 0x79, 0xb0, 0xf1, 0x2f, 0xff, 0xf2, 0xe0, 0xd2, 0xc1, 0x2e, - 0x0f, 0x46, 0xcb, 0x70, 0xa6, 0xcd, 0xb7, 0x73, 0xfc, 0x42, 0x4e, 0xbe, 0xb7, 0x53, 0xb5, 0x1b, - 0xce, 0xde, 0xdf, 0x9d, 0x3e, 0xb3, 0x94, 0x87, 0x80, 0xf3, 0x9f, 0xb3, 0xdf, 0x09, 0x88, 0x87, - 0xc2, 0xce, 0xe5, 0x85, 0xaf, 0xf6, 0x75, 0x77, 0xd8, 0x5f, 0xac, 0xc0, 0x89, 0xd4, 0x85, 0x38, - 0x74, 0x2b, 0x9d, 0x8d, 0x97, 0x3d, 0xb4, 0x1e, 0xcf, 0x76, 0x6f, 0xa0, 0x08, 0x5c, 0x1f, 0x2a, - 0xae, 0xdf, 0xe9, 0xc6, 0xc5, 0x94, 0x8e, 0xe1, 0x9d, 0x58, 0xa0, 0x04, 0x8d, 0xf3, 0x09, 0xfa, - 0x17, 0x73, 0x36, 0x45, 0xc6, 0xf3, 0x26, 0x36, 0x3b, 0x43, 0x8f, 0xc8, 0xdd, 0xf2, 0x71, 0x1d, - 0x5d, 0x5b, 0x29, 0xc2, 0x97, 0x9c, 0x9a, 0x2c, 0x47, 0x1d, 0x7a, 0xf5, 0x33, 0x25, 0x18, 0x35, - 0x3e, 0x1a, 0xfa, 0xf1, 0x64, 0x0d, 0x5c, 0xab, 0xb8, 0x57, 0x62, 0xf4, 0x67, 0x74, 0x95, 0x5b, - 0xfe, 0x4a, 0xcf, 0x65, 0xcb, 0xdf, 0x3e, 0xd8, 0x9d, 0x3e, 0x99, 0x2a, 0x70, 0x9b, 0x28, 0x89, - 0x7b, 0xee, 0xbb, 0xe1, 0x44, 0x8a, 0x4c, 0xce, 0x2b, 0xaf, 0x9a, 0xaf, 0x7c, 0x68, 0xb7, 0x9f, - 0x39, 0x64, 0x3f, 0x45, 0x87, 0x4c, 0x54, 0xac, 0x08, 0x3c, 0x32, 0x80, 0xcf, 0x33, 0xb5, 0xcf, - 0x28, 0x0d, 0x58, 0x98, 0xe6, 0x79, 0xa8, 0x76, 0x02, 0xcf, 0x6d, 0xba, 0xaa, 0x84, 0x3e, 0x2b, - 0x85, 0xb3, 0x22, 0xda, 0xb0, 0x82, 0xa2, 0x7b, 0x50, 0xbb, 0x7b, 0x2f, 0xe6, 0xc7, 0x8d, 0xe2, - 0x48, 0xa3, 0xa8, 0x53, 0x46, 0x65, 0xb4, 0xa8, 0xf3, 0x4c, 0xac, 0x79, 0x21, 0x1b, 0x86, 0x99, - 0x12, 0x94, 0xd9, 0xab, 0xec, 0xb8, 0x85, 0x69, 0xc7, 0x08, 0x0b, 0x88, 0xfd, 0xaf, 0x47, 0xe1, - 0x74, 0xde, 0xad, 0x64, 0xe8, 0x23, 0x30, 0xcc, 0xfb, 0x58, 0xcc, 0xc5, 0x97, 0x79, 0x3c, 0xae, - 0x32, 0x82, 0xa2, 0x5b, 0xec, 0x37, 0x16, 0x3c, 0x05, 0x77, 0xcf, 0x59, 0x13, 0x33, 0xe4, 0x68, - 0xb8, 0x2f, 0x3a, 0x9a, 0xfb, 0xa2, 0xc3, 0xb9, 0x7b, 0xce, 0x1a, 0xda, 0x81, 0xca, 0x86, 0x1b, - 0x13, 0x47, 0x38, 0x69, 0xee, 0x1c, 0x09, 0x73, 0xe2, 0x70, 0x2b, 0x8d, 0xfd, 0xc4, 0x9c, 0x21, - 0xfa, 0xb2, 0x05, 0x27, 0xd6, 0x92, 0x15, 0xb1, 0x84, 0xf0, 0x74, 0x8e, 0xe0, 0xe6, 0xb9, 0x24, - 0x23, 0x7e, 0x7b, 0x76, 0xaa, 0x11, 0xa7, 0xbb, 0x83, 0x3e, 0x61, 0xc1, 0xc8, 0xba, 0xeb, 0x19, - 0x37, 0xdc, 0x1c, 0xc1, 0xc7, 0xb9, 0xc2, 0x18, 0xe8, 0x1d, 0x07, 0xff, 0x1f, 0x61, 0xc9, 0xb9, - 0x9f, 0xa6, 0x1a, 0x3e, 0xac, 0xa6, 0x1a, 0x79, 0x44, 0x9a, 0xea, 0xd3, 0x16, 0xd4, 0xd4, 0x48, - 0x8b, 0xca, 0x42, 0xef, 0x3f, 0xc2, 0x4f, 0xce, 0x3d, 0x53, 0xea, 0x2f, 0xd6, 0xcc, 0xd1, 0xeb, - 0x16, 0x8c, 0x3a, 0xaf, 0x75, 0x43, 0xd2, 0x22, 0xdb, 0x41, 0x27, 0x12, 0x25, 0x7f, 0x5f, 0x29, - 0xbe, 0x33, 0xb3, 0x94, 0xc9, 0x3c, 0xd9, 0x5e, 0xee, 0x44, 0x22, 0xb3, 0x5e, 0x37, 0x60, 0xb3, - 0x0b, 0xe8, 0xfb, 0xb4, 0x1e, 0x87, 0x22, 0x0a, 0xbf, 0xe7, 0xf5, 0x66, 0xa0, 0x42, 0x11, 0x04, - 0x9e, 0x6a, 0x06, 0x7e, 0xec, 0xfa, 0x5d, 0xb2, 0xec, 0x63, 0xd2, 0x09, 0x6e, 0x06, 0xf1, 0x95, - 0xa0, 0xeb, 0xb7, 0x2e, 0x87, 0x61, 0x10, 0xb2, 0xd2, 0x49, 0xc6, 0x7d, 0xc7, 0x73, 0xfd, 0x51, - 0xf1, 0x5e, 0x74, 0x0e, 0x63, 0x33, 0xec, 0x96, 0x60, 0x7a, 0x9f, 0xc1, 0x46, 0x2f, 0xc1, 0x58, - 0x10, 0x6e, 0x38, 0xbe, 0xfb, 0x9a, 0x59, 0x0d, 0x50, 0x19, 0xa4, 0xcb, 0x06, 0x0c, 0x27, 0x30, - 0xcd, 0x32, 0x51, 0xa5, 0x7d, 0xca, 0x44, 0x5d, 0x80, 0xa1, 0x90, 0x74, 0x82, 0xf4, 0xbe, 0x8a, - 0x25, 0xa0, 0x32, 0x08, 0x7a, 0x1a, 0xca, 0x4e, 0xc7, 0x15, 0x4e, 0x46, 0xb5, 0x5d, 0x9c, 0x5d, - 0x59, 0xc0, 0xb4, 0x3d, 0x51, 0xb5, 0xae, 0x72, 0x2c, 0x55, 0xeb, 0xa8, 0xc6, 0x14, 0xc7, 0x68, - 0xc3, 0x5a, 0x63, 0x26, 0x8f, 0xb7, 0xec, 0x2f, 0x94, 0xe1, 0xe9, 0x3d, 0x97, 0x96, 0x0e, 0x61, - 0xb7, 0xf6, 0x08, 0x61, 0x97, 0xc3, 0x53, 0xda, 0x6f, 0x78, 0xca, 0x7d, 0x86, 0xe7, 0x13, 0x54, - 0x62, 0xc8, 0x2a, 0x8a, 0x42, 0x49, 0x1c, 0x32, 0xad, 0xa0, 0x5f, 0x51, 0x46, 0x21, 0x2c, 0x24, - 0x14, 0x6b, 0xbe, 0x74, 0xbb, 0x94, 0x28, 0x91, 0x54, 0x29, 0x42, 0x63, 0xf6, 0xad, 0x64, 0xc8, - 0xc5, 0x44, 0xbf, 0xba, 0x4b, 0xf6, 0x2f, 0x0f, 0xc1, 0xb3, 0x03, 0x28, 0x3a, 0x73, 0x16, 0x5b, - 0x03, 0xce, 0xe2, 0xaf, 0xf1, 0xcf, 0xf4, 0xa9, 0xdc, 0xcf, 0x84, 0x8b, 0xff, 0x4c, 0x7b, 0x7f, - 0x21, 0x76, 0x12, 0xe1, 0x47, 0xa4, 0xd9, 0x0d, 0x79, 0x3a, 0x8f, 0x91, 0x9d, 0xbe, 0x20, 0xda, - 0xb1, 0xc2, 0xa0, 0xdb, 0xdf, 0xa6, 0x43, 0x97, 0xff, 0x48, 0x41, 0x25, 0x71, 0xcc, 0x44, 0x77, - 0x6e, 0x7d, 0xcd, 0xcd, 0x52, 0x09, 0xc0, 0xd9, 0xd8, 0xbf, 0x6e, 0xc1, 0xb9, 0xfe, 0xd6, 0x08, - 0x7a, 0x1b, 0x8c, 0xae, 0xb1, 0xa0, 0xca, 0x25, 0x16, 0x3a, 0x25, 0xa6, 0x0e, 0x7b, 0x5f, 0xdd, - 0x8c, 0x4d, 0x1c, 0x34, 0x07, 0x93, 0x66, 0x34, 0xe6, 0x92, 0x11, 0x73, 0xc5, 0xfc, 0x25, 0xab, - 0x69, 0x20, 0xce, 0xe2, 0xa3, 0x19, 0x80, 0xd8, 0x8d, 0x3d, 0xc2, 0x9f, 0xe6, 0x13, 0x8d, 0x39, - 0x14, 0x57, 0x55, 0x2b, 0x36, 0x30, 0xec, 0xaf, 0x96, 0xf3, 0x5f, 0x83, 0x5b, 0xb9, 0x07, 0x99, - 0xfd, 0x62, 0x6e, 0x97, 0x06, 0x90, 0xd0, 0xe5, 0xe3, 0x96, 0xd0, 0x43, 0xfd, 0x24, 0x34, 0x9a, - 0x87, 0x93, 0xc6, 0x0d, 0xca, 0xbc, 0xa8, 0x12, 0x3f, 0x9c, 0x52, 0x15, 0x11, 0x57, 0x52, 0x70, - 0x9c, 0x79, 0xe2, 0x31, 0x9f, 0xaa, 0xbf, 0x51, 0x82, 0xb3, 0x7d, 0x37, 0x16, 0xc7, 0xa4, 0x81, - 0xcc, 0xcf, 0x3f, 0x74, 0x3c, 0x9f, 0xdf, 0xfc, 0x28, 0x95, 0x7d, 0x3f, 0xca, 0x20, 0xea, 0xfc, - 0x0f, 0x4a, 0x7d, 0x17, 0x0b, 0xdd, 0x88, 0x7e, 0xdd, 0x8e, 0xe4, 0xcb, 0x30, 0xee, 0x74, 0x3a, - 0x1c, 0x8f, 0x65, 0x68, 0xa4, 0xaa, 0xb4, 0xce, 0x9a, 0x40, 0x9c, 0xc4, 0x1d, 0x68, 0x60, 0xff, - 0xc4, 0x82, 0x1a, 0x26, 0xeb, 0x5c, 0xc2, 0xa1, 0xbb, 0x62, 0x88, 0xac, 0x22, 0xae, 0xca, 0xa0, - 0x03, 0x1b, 0xb9, 0xac, 0x10, 0x43, 0xde, 0x60, 0x1f, 0xb6, 0xce, 0x86, 0xba, 0x7e, 0xb8, 0xdc, - 0xff, 0xfa, 0x61, 0xfb, 0x57, 0x6a, 0xf4, 0xf5, 0x3a, 0xc1, 0x5c, 0x48, 0x5a, 0x11, 0xfd, 0xbe, - 0xdd, 0xd0, 0x13, 0x93, 0x44, 0x7d, 0xdf, 0x5b, 0x78, 0x11, 0xd3, 0xf6, 0xc4, 0x39, 0x65, 0xe9, - 0x40, 0x35, 0x2a, 0xcb, 0xfb, 0xd6, 0xa8, 0x7c, 0x19, 0xc6, 0xa3, 0x68, 0x73, 0x25, 0x74, 0xb7, - 0x9d, 0x98, 0xdc, 0x20, 0xb2, 0x80, 0x94, 0xae, 0xd7, 0xd6, 0xb8, 0xa6, 0x81, 0x38, 0x89, 0x8b, - 0xae, 0xc2, 0xa4, 0xae, 0x14, 0x49, 0xc2, 0x98, 0xa5, 0x40, 0xf2, 0x99, 0xa0, 0x8a, 0x03, 0xe9, - 0xda, 0x92, 0x02, 0x01, 0x67, 0x9f, 0xa1, 0x32, 0x37, 0xd1, 0x48, 0x3b, 0x32, 0x9c, 0x94, 0xb9, - 0x09, 0x3a, 0xb4, 0x2f, 0x99, 0x27, 0xd0, 0x12, 0x9c, 0xe2, 0x13, 0x63, 0xb6, 0xd3, 0x31, 0xde, - 0x68, 0x24, 0x79, 0x3f, 0xc1, 0xd5, 0x2c, 0x0a, 0xce, 0x7b, 0x0e, 0xbd, 0x08, 0xa3, 0xaa, 0x79, - 0x61, 0x5e, 0x1c, 0xad, 0x29, 0xd7, 0x9e, 0x22, 0xb3, 0xd0, 0xc2, 0x26, 0x1e, 0x7a, 0x2f, 0x3c, - 0xa9, 0xff, 0xf2, 0x94, 0x7a, 0x7e, 0xee, 0x3c, 0x2f, 0x8a, 0xf0, 0xaa, 0xeb, 0xef, 0xae, 0xe6, - 0xa2, 0xb5, 0x70, 0xbf, 0xe7, 0xd1, 0x1a, 0x9c, 0x53, 0xa0, 0xcb, 0x7e, 0xcc, 0x92, 0x5e, 0x23, - 0x52, 0x77, 0x22, 0x16, 0x41, 0x01, 0xec, 0x3d, 0x6d, 0x41, 0xfd, 0xdc, 0x55, 0x37, 0xbe, 0x96, - 0x87, 0x89, 0x17, 0xf1, 0x1e, 0x54, 0xd0, 0x45, 0xa8, 0x11, 0xdf, 0x59, 0xf3, 0xc8, 0xf2, 0xdc, - 0x82, 0xd8, 0x91, 0xea, 0x2c, 0x09, 0x09, 0xc0, 0x1a, 0x47, 0xc5, 0xf9, 0x8f, 0xf5, 0x8b, 0xf3, - 0x47, 0x2b, 0x70, 0x7a, 0xa3, 0xd9, 0xa1, 0x56, 0xa6, 0xdb, 0x24, 0xb3, 0x4d, 0x16, 0x58, 0x4c, - 0x3f, 0x0c, 0xbf, 0x38, 0x42, 0x25, 0x4c, 0x5d, 0x9d, 0x5b, 0xc9, 0xe0, 0xe0, 0xdc, 0x27, 0x59, - 0x00, 0x7a, 0x18, 0xec, 0xf4, 0xa6, 0x4e, 0xa5, 0x02, 0xd0, 0x69, 0x23, 0xe6, 0x30, 0x74, 0x1d, - 0x10, 0x4b, 0x1a, 0xbc, 0x16, 0xc7, 0x1d, 0x65, 0xd6, 0x4e, 0x9d, 0x4e, 0x96, 0xe4, 0xbc, 0x92, - 0xc1, 0xc0, 0x39, 0x4f, 0x51, 0xab, 0xc7, 0x0f, 0x18, 0xf5, 0xa9, 0x27, 0x93, 0x56, 0xcf, 0x4d, - 0xde, 0x8c, 0x25, 0x1c, 0x7d, 0x00, 0xa6, 0xba, 0x11, 0x61, 0x1b, 0xe6, 0x3b, 0x41, 0xb8, 0xe5, - 0x05, 0x4e, 0x6b, 0x81, 0xdd, 0x73, 0x1c, 0xf7, 0xa6, 0xa6, 0x18, 0xf3, 0x0b, 0xe2, 0xd9, 0xa9, - 0x5b, 0x7d, 0xf0, 0x70, 0x5f, 0x0a, 0xe9, 0x9a, 0xb2, 0x67, 0x07, 0xac, 0x29, 0xbb, 0x02, 0xa7, - 0xa5, 0x5e, 0x5b, 0x9e, 0x5b, 0x50, 0x2f, 0x3d, 0x75, 0x2e, 0x79, 0x71, 0xe2, 0x42, 0x0e, 0x0e, - 0xce, 0x7d, 0xd2, 0xfe, 0x63, 0x0b, 0xc6, 0x95, 0x04, 0x3b, 0x86, 0x24, 0x66, 0x2f, 0x99, 0xc4, - 0x7c, 0xf5, 0xf0, 0x3a, 0x80, 0xf5, 0xbc, 0x4f, 0xaa, 0xcd, 0xcf, 0x4e, 0x00, 0x68, 0x3d, 0xa1, - 0x54, 0xb4, 0xd5, 0x57, 0x45, 0x3f, 0xb6, 0x32, 0x3a, 0xaf, 0x46, 0x68, 0xe5, 0xd1, 0xd6, 0x08, - 0x6d, 0xc0, 0x19, 0x39, 0xa5, 0xf8, 0x91, 0xf2, 0xb5, 0x20, 0x52, 0x22, 0xdf, 0xb8, 0x09, 0x73, - 0x21, 0x0f, 0x09, 0xe7, 0x3f, 0x9b, 0xb0, 0xed, 0x46, 0xf6, 0xb5, 0xed, 0x94, 0x94, 0x5b, 0x5c, - 0x97, 0xf7, 0xd4, 0xa6, 0xa4, 0xdc, 0xe2, 0x95, 0x06, 0xd6, 0x38, 0xf9, 0xaa, 0xae, 0x56, 0x90, - 0xaa, 0x83, 0x03, 0xab, 0x3a, 0x29, 0x74, 0x47, 0xfb, 0x0a, 0x5d, 0x79, 0x74, 0x35, 0xd6, 0xf7, - 0xe8, 0xea, 0x5d, 0x30, 0xe1, 0xfa, 0x9b, 0x24, 0x74, 0x63, 0xd2, 0x62, 0x6b, 0x81, 0x09, 0xe4, - 0xaa, 0x36, 0x74, 0x16, 0x12, 0x50, 0x9c, 0xc2, 0x4e, 0x6a, 0x8a, 0x89, 0x01, 0x34, 0x45, 0x1f, - 0xfd, 0x7c, 0xa2, 0x18, 0xfd, 0x7c, 0xf2, 0xf0, 0xfa, 0x79, 0xf2, 0x48, 0xf5, 0x33, 0x2a, 0x44, - 0x3f, 0x0f, 0xa4, 0xfa, 0x8c, 0x4d, 0xfa, 0xe9, 0x7d, 0x36, 0xe9, 0xfd, 0x94, 0xf3, 0x99, 0x87, - 0x56, 0xce, 0xf9, 0x7a, 0xf7, 0x89, 0x37, 0xf4, 0x6e, 0x11, 0x7a, 0x97, 0x7e, 0xff, 0x16, 0xe9, - 0xc4, 0x9b, 0x53, 0x4f, 0xb1, 0xc9, 0xaa, 0xbe, 0xff, 0x3c, 0x6d, 0xc4, 0x1c, 0x86, 0x62, 0xb8, - 0x70, 0x8f, 0xac, 0x6d, 0x06, 0xc1, 0xd6, 0x92, 0xe3, 0xbb, 0xeb, 0x44, 0xd4, 0xc1, 0xbf, 0xe3, - 0x84, 0x6d, 0x51, 0x83, 0xbc, 0x35, 0x75, 0x9e, 0x75, 0xe1, 0x79, 0xf1, 0xfc, 0x85, 0x3b, 0xfb, - 0xe0, 0xe3, 0x7d, 0x29, 0xda, 0x9f, 0x2e, 0xc1, 0x19, 0xad, 0x34, 0xa9, 0xa8, 0x72, 0xd7, 0xa9, - 0xda, 0x60, 0xf7, 0xd2, 0xf3, 0xb3, 0x78, 0x23, 0x9b, 0x5f, 0xd7, 0x33, 0x50, 0x10, 0x6c, 0x60, - 0xb1, 0xa4, 0x78, 0x12, 0xb2, 0x1b, 0x91, 0xd2, 0x1a, 0x75, 0x4e, 0xb4, 0x63, 0x85, 0x41, 0xbf, - 0x0f, 0xfd, 0x2d, 0x6a, 0xb3, 0xa4, 0x6b, 0xed, 0xcf, 0x69, 0x10, 0x36, 0xf1, 0xd0, 0xf3, 0x9c, - 0x09, 0x93, 0xe6, 0x54, 0xab, 0x8e, 0xf1, 0x1d, 0xaf, 0x12, 0xe0, 0x0a, 0x2a, 0xbb, 0xc3, 0x8a, - 0x36, 0x54, 0xb2, 0xdd, 0x61, 0xe1, 0xad, 0x0a, 0xc3, 0xfe, 0xef, 0x16, 0x9c, 0xcd, 0x1d, 0x8a, - 0x63, 0xb0, 0x94, 0x76, 0x92, 0x96, 0x52, 0xa3, 0xa8, 0xdd, 0xb2, 0xf1, 0x16, 0x7d, 0xac, 0xa6, - 0x7f, 0x67, 0xc1, 0x84, 0xc6, 0x3f, 0x86, 0x57, 0x75, 0x93, 0xaf, 0x5a, 0x9c, 0x63, 0xa0, 0x96, - 0x79, 0xb7, 0x5f, 0x2b, 0x81, 0xba, 0xff, 0x62, 0xb6, 0x19, 0x0f, 0x96, 0x11, 0xd7, 0x83, 0x61, - 0x16, 0xdc, 0x12, 0x15, 0x13, 0xb8, 0x97, 0xe4, 0xcf, 0x02, 0x65, 0xf4, 0x59, 0x23, 0xfb, 0x1b, - 0x61, 0xc1, 0x90, 0xdd, 0xd7, 0x25, 0x97, 0x7a, 0x39, 0x69, 0x0f, 0xa9, 0x25, 0xad, 0x30, 0xa8, - 0x2e, 0x77, 0x9b, 0x81, 0x3f, 0xe7, 0x39, 0x51, 0x24, 0xcc, 0x4b, 0xa5, 0xcb, 0x17, 0x24, 0x00, - 0x6b, 0x1c, 0x16, 0xf7, 0xe2, 0x46, 0x1d, 0xcf, 0xe9, 0x19, 0xee, 0x1f, 0xa3, 0x06, 0x99, 0x02, - 0x61, 0x13, 0xcf, 0x6e, 0xc3, 0x54, 0xf2, 0x25, 0xe6, 0xc9, 0x3a, 0x0b, 0x3e, 0x1f, 0x68, 0x38, - 0x2f, 0x42, 0xcd, 0x61, 0x4f, 0x2d, 0x76, 0x1d, 0x21, 0x13, 0x74, 0x08, 0xb6, 0x04, 0x60, 0x8d, - 0x63, 0x7f, 0x2b, 0x9c, 0xca, 0x19, 0xb3, 0x01, 0x62, 0xfb, 0x7e, 0xa9, 0x04, 0x27, 0x92, 0x4f, - 0x46, 0x2c, 0x3d, 0x93, 0xf7, 0xd9, 0x8d, 0x9a, 0xc1, 0x36, 0x09, 0x7b, 0xb4, 0x1b, 0x56, 0x2a, - 0x3d, 0x33, 0x83, 0x81, 0x73, 0x9e, 0x62, 0x57, 0xd1, 0xb4, 0xd4, 0xab, 0xcb, 0xe9, 0x71, 0xbb, - 0xc8, 0xe9, 0xa1, 0x47, 0xd6, 0x8c, 0x47, 0x52, 0x2c, 0xb1, 0xc9, 0x9f, 0x9a, 0x66, 0x2c, 0xb9, - 0xa4, 0xde, 0x75, 0xbd, 0xd8, 0xf5, 0xc5, 0x2b, 0x8b, 0x89, 0xa3, 0x4c, 0xb3, 0xa5, 0x2c, 0x0a, - 0xce, 0x7b, 0xce, 0xfe, 0xca, 0x10, 0xa8, 0x22, 0x2d, 0x2c, 0x5e, 0xb4, 0xa0, 0x68, 0xdb, 0x83, - 0x26, 0xf9, 0xaa, 0x2f, 0x3d, 0xb4, 0x57, 0x00, 0x17, 0x77, 0xe0, 0x99, 0x9e, 0x7e, 0x35, 0x60, - 0xab, 0x1a, 0x84, 0x4d, 0x3c, 0xda, 0x13, 0xcf, 0xdd, 0x26, 0xfc, 0xa1, 0xe1, 0x64, 0x4f, 0x16, - 0x25, 0x00, 0x6b, 0x1c, 0x56, 0xed, 0xdd, 0x5d, 0x5f, 0x17, 0xde, 0x28, 0x5d, 0xed, 0xdd, 0x5d, - 0x5f, 0xc7, 0x0c, 0xc2, 0x2f, 0x2b, 0x0b, 0xb6, 0xc4, 0x76, 0xc4, 0xb8, 0xac, 0x2c, 0xd8, 0xc2, - 0x0c, 0x42, 0xbf, 0x92, 0x1f, 0x84, 0x6d, 0xc7, 0x73, 0x5f, 0x23, 0x2d, 0xc5, 0x45, 0x6c, 0x43, - 0xd4, 0x57, 0xba, 0x99, 0x45, 0xc1, 0x79, 0xcf, 0xd1, 0x09, 0xdd, 0x09, 0x49, 0xcb, 0x6d, 0xc6, - 0x26, 0x35, 0x48, 0x4e, 0xe8, 0x95, 0x0c, 0x06, 0xce, 0x79, 0x0a, 0xcd, 0xc2, 0x09, 0x59, 0x64, - 0x47, 0x16, 0xa8, 0x1c, 0x4d, 0x56, 0xb9, 0xc3, 0x49, 0x30, 0x4e, 0xe3, 0x53, 0x89, 0xd5, 0x16, - 0x45, 0x93, 0xd9, 0xae, 0xc5, 0x90, 0x58, 0xb2, 0x98, 0x32, 0x56, 0x18, 0xf6, 0xc7, 0xcb, 0x54, - 0xc3, 0xf6, 0xa9, 0x4d, 0x7e, 0x6c, 0xd1, 0xdd, 0xc9, 0x19, 0x39, 0x34, 0xc0, 0x8c, 0x7c, 0x07, - 0x8c, 0xdd, 0x8d, 0x02, 0x5f, 0x45, 0x4e, 0x57, 0xfa, 0x46, 0x4e, 0x1b, 0x58, 0xf9, 0x91, 0xd3, - 0xc3, 0x45, 0x45, 0x4e, 0x8f, 0x3c, 0x64, 0xe4, 0xf4, 0xbf, 0xac, 0x80, 0xba, 0x8d, 0xf6, 0x26, - 0x89, 0xef, 0x05, 0xe1, 0x96, 0xeb, 0x6f, 0xb0, 0x82, 0x31, 0x5f, 0xb6, 0x64, 0xcd, 0x99, 0x45, - 0x33, 0xb3, 0x78, 0xbd, 0xa0, 0x1b, 0x45, 0x13, 0xcc, 0x66, 0x56, 0x0d, 0x46, 0x3c, 0x02, 0x27, - 0x55, 0xdb, 0x46, 0x1c, 0x2e, 0x24, 0x7a, 0x84, 0xbe, 0x1b, 0x40, 0xba, 0xee, 0xd7, 0xa5, 0x04, - 0x5e, 0x28, 0xa6, 0x7f, 0x98, 0xac, 0x6b, 0xfb, 0x76, 0x55, 0x31, 0xc1, 0x06, 0x43, 0xf4, 0x69, - 0x9d, 0x75, 0xcd, 0x53, 0xad, 0x3e, 0x7c, 0x24, 0x63, 0x33, 0x48, 0xce, 0x35, 0x86, 0x11, 0xd7, - 0xdf, 0xa0, 0xf3, 0x44, 0x44, 0x98, 0xbe, 0x39, 0xaf, 0x1e, 0xd9, 0x62, 0xe0, 0xb4, 0xea, 0x8e, - 0xe7, 0xf8, 0x4d, 0x12, 0x2e, 0x70, 0x74, 0xbd, 0x1d, 0x13, 0x0d, 0x58, 0x12, 0xca, 0x5c, 0x99, - 0x5b, 0x19, 0xe4, 0xca, 0xdc, 0x73, 0xdf, 0x09, 0x93, 0x99, 0x8f, 0x79, 0xa0, 0x14, 0xeb, 0x43, - 0x54, 0x22, 0xfb, 0xe5, 0x61, 0xad, 0xb4, 0x6e, 0x06, 0x2d, 0x7e, 0x03, 0x6b, 0xa8, 0xbf, 0xa8, - 0xb0, 0x5f, 0x0b, 0x9c, 0x22, 0x4a, 0xcd, 0x18, 0x8d, 0xd8, 0x64, 0x49, 0xe7, 0x68, 0xc7, 0x09, - 0x89, 0x7f, 0xd4, 0x73, 0x74, 0x45, 0x31, 0xc1, 0x06, 0x43, 0xb4, 0x99, 0xc8, 0x05, 0xbc, 0x72, - 0xf8, 0x5c, 0x40, 0x56, 0x25, 0x36, 0xef, 0xa2, 0xc2, 0xd7, 0x2d, 0x98, 0xf0, 0x13, 0x33, 0xb7, - 0x98, 0xb0, 0xff, 0xfc, 0x55, 0xc1, 0x2f, 0x33, 0x4f, 0xb6, 0xe1, 0x14, 0xff, 0x3c, 0x95, 0x56, - 0x39, 0xa0, 0x4a, 0xd3, 0x37, 0x40, 0x0f, 0xf7, 0xbb, 0x01, 0x1a, 0xf9, 0xea, 0x6a, 0xfe, 0x91, - 0x22, 0x2a, 0xaa, 0x24, 0xee, 0xe5, 0x87, 0x9c, 0x3b, 0xf9, 0xef, 0x98, 0xa9, 0xc2, 0x07, 0xbf, - 0xa2, 0x7d, 0xbc, 0x5f, 0x4a, 0xb1, 0xfd, 0xbf, 0x87, 0xe0, 0xa4, 0x1c, 0x11, 0x99, 0x32, 0x44, - 0xf5, 0x23, 0xe7, 0xab, 0x6d, 0x65, 0xa5, 0x1f, 0xaf, 0x49, 0x00, 0xd6, 0x38, 0xd4, 0x1e, 0xeb, - 0x46, 0x64, 0xb9, 0x43, 0xfc, 0x45, 0x77, 0x2d, 0x12, 0xc7, 0xf4, 0x6a, 0xa1, 0xdc, 0xd2, 0x20, - 0x6c, 0xe2, 0xb1, 0x7c, 0xe6, 0xa6, 0x59, 0x54, 0x44, 0xe7, 0x33, 0x0b, 0x43, 0x55, 0xc2, 0xd1, - 0x8f, 0xe5, 0x5e, 0x96, 0x52, 0x4c, 0xc2, 0x6d, 0x26, 0x53, 0xea, 0x60, 0xb7, 0xa4, 0xa0, 0x7f, - 0x68, 0xc1, 0x19, 0xde, 0x2a, 0x47, 0xf2, 0x56, 0xa7, 0xe5, 0xc4, 0x24, 0x2a, 0xe6, 0x92, 0xbb, - 0x9c, 0xfe, 0x69, 0x6f, 0x7b, 0x1e, 0x5b, 0x9c, 0xdf, 0x1b, 0xf4, 0x79, 0x0b, 0x4e, 0x6c, 0x25, - 0x8a, 0x82, 0x49, 0xd5, 0x71, 0xd8, 0x8a, 0x39, 0x09, 0xa2, 0x7a, 0xa9, 0x25, 0xdb, 0x23, 0x9c, - 0xe6, 0x6e, 0xff, 0xa5, 0x05, 0xa6, 0x18, 0x3d, 0xfe, 0x5a, 0x62, 0x07, 0x37, 0x05, 0xa5, 0x75, - 0x59, 0xe9, 0x6b, 0x5d, 0x3e, 0x0d, 0xe5, 0xae, 0xdb, 0x12, 0xfb, 0x0b, 0x1d, 0x18, 0xb0, 0x30, - 0x8f, 0x69, 0xbb, 0xfd, 0x7f, 0x2b, 0xda, 0x27, 0x21, 0xf2, 0x58, 0xbf, 0x2e, 0x5e, 0xdb, 0x57, - 0xc5, 0x82, 0xf9, 0x9b, 0xdf, 0xce, 0x14, 0x0b, 0x9e, 0x7f, 0xf8, 0x74, 0x65, 0x3e, 0x50, 0xfd, - 0x6a, 0x05, 0x8f, 0xec, 0x5b, 0x2b, 0xb8, 0x4a, 0xb7, 0x62, 0xcc, 0xc9, 0x58, 0x4d, 0x74, 0xae, - 0x7a, 0x4d, 0xb4, 0x3f, 0xd8, 0x9d, 0xae, 0x3f, 0x7c, 0xf7, 0x24, 0x15, 0xac, 0xf8, 0xa0, 0xef, - 0x82, 0x1a, 0xfd, 0xcd, 0xd2, 0xab, 0xc5, 0x66, 0xef, 0x15, 0x25, 0x43, 0x25, 0xa0, 0xd0, 0x1c, - 0x6e, 0xcd, 0x0f, 0x6d, 0x43, 0x8d, 0x22, 0x72, 0xe6, 0x7c, 0x6f, 0xf8, 0x1e, 0x95, 0xec, 0x2c, - 0x01, 0x0f, 0x76, 0xa7, 0xe7, 0x1e, 0x9e, 0xb9, 0x22, 0x83, 0x35, 0x2b, 0x43, 0x75, 0x8e, 0xf6, - 0x53, 0x9d, 0xf6, 0xff, 0x19, 0xd2, 0xf3, 0x5f, 0xd4, 0x99, 0xfe, 0xba, 0x98, 0xff, 0x2f, 0xa5, - 0xe6, 0xff, 0x85, 0xcc, 0xfc, 0x9f, 0xa0, 0x63, 0x96, 0x53, 0xf5, 0xfa, 0xb8, 0x8d, 0x89, 0xfd, - 0x7d, 0x16, 0xcc, 0x8a, 0x7a, 0xb5, 0xeb, 0x86, 0x24, 0x5a, 0x09, 0xbb, 0xbe, 0xeb, 0x6f, 0xb0, - 0x29, 0x5c, 0x35, 0xad, 0xa8, 0x04, 0x18, 0xa7, 0xf1, 0xd1, 0x0b, 0x50, 0xa5, 0xf3, 0xe2, 0x8e, - 0xb3, 0xcd, 0x67, 0xa0, 0x51, 0xdb, 0xb3, 0x21, 0xda, 0xb1, 0xc2, 0x40, 0x9b, 0x70, 0x5e, 0x12, - 0x98, 0x27, 0x1e, 0xa1, 0x2f, 0xc4, 0x02, 0x22, 0xc3, 0x36, 0x4f, 0x57, 0xe0, 0x31, 0x2d, 0xdf, - 0x28, 0x28, 0x9c, 0xc7, 0x7b, 0xe0, 0xe2, 0x3d, 0x29, 0xd9, 0x7f, 0xc4, 0x42, 0x20, 0x8c, 0xea, - 0x13, 0x74, 0xf6, 0x79, 0x6e, 0xdb, 0x95, 0x25, 0x48, 0xd5, 0xec, 0x5b, 0xa4, 0x8d, 0x98, 0xc3, - 0xd0, 0x3d, 0x18, 0x59, 0x73, 0x9a, 0x5b, 0xc1, 0xfa, 0x7a, 0x31, 0x17, 0x88, 0xd5, 0x39, 0x31, - 0x56, 0x7e, 0x7c, 0x44, 0xfc, 0x79, 0xa0, 0x7f, 0x62, 0xc9, 0x8d, 0x5f, 0x5e, 0xc1, 0xee, 0x23, - 0x17, 0x8e, 0x3d, 0xe3, 0xf2, 0x0a, 0x7e, 0x4d, 0xb9, 0x84, 0xdb, 0xbf, 0x57, 0x81, 0x13, 0x32, - 0xa2, 0xed, 0x9a, 0x1b, 0xb1, 0x20, 0x08, 0xf3, 0x1a, 0x87, 0xd2, 0xbe, 0xd7, 0x38, 0x7c, 0x10, - 0xa0, 0x45, 0x3a, 0x5e, 0xd0, 0x63, 0x76, 0xe6, 0xd0, 0x81, 0xed, 0x4c, 0xb5, 0x35, 0x99, 0x57, - 0x54, 0xb0, 0x41, 0x51, 0x94, 0x68, 0xe5, 0xb7, 0x42, 0xa4, 0x4a, 0xb4, 0x1a, 0x37, 0x12, 0x0e, - 0x1f, 0xef, 0x8d, 0x84, 0x2e, 0x9c, 0xe0, 0x5d, 0x54, 0x65, 0x20, 0x1e, 0xa2, 0xda, 0x03, 0x4b, - 0xa4, 0x9b, 0x4f, 0x92, 0xc1, 0x69, 0xba, 0xe6, 0x75, 0x83, 0xd5, 0xe3, 0xbe, 0x6e, 0xf0, 0x2d, - 0x50, 0x93, 0xdf, 0x39, 0x9a, 0xaa, 0xe9, 0x52, 0x45, 0x72, 0x1a, 0x44, 0x58, 0xc3, 0x33, 0x95, - 0x6d, 0xe0, 0x51, 0x55, 0xb6, 0xb1, 0x5f, 0x2f, 0xd3, 0x0d, 0x0a, 0xef, 0xd7, 0x81, 0x6f, 0xeb, - 0xbc, 0x66, 0xdc, 0xd6, 0x79, 0xb0, 0xef, 0x59, 0x4d, 0xdd, 0xea, 0x79, 0x1e, 0x86, 0x62, 0x67, - 0x43, 0xe6, 0xfd, 0x32, 0xe8, 0xaa, 0xb3, 0x11, 0x61, 0xd6, 0x7a, 0x90, 0x8a, 0xd6, 0x2f, 0xc3, - 0x78, 0xe4, 0x6e, 0xf8, 0x4e, 0xdc, 0x0d, 0x89, 0x71, 0x2e, 0xa9, 0xe3, 0x82, 0x4c, 0x20, 0x4e, - 0xe2, 0xa2, 0x4f, 0x58, 0x00, 0x21, 0x51, 0xdb, 0x9f, 0xe1, 0x22, 0xe6, 0x90, 0x12, 0x03, 0x92, - 0xae, 0x59, 0x89, 0x44, 0x6d, 0x7b, 0x0c, 0xb6, 0xf6, 0xa7, 0x2c, 0x98, 0xcc, 0x3c, 0x85, 0x3a, - 0x30, 0xdc, 0x64, 0x77, 0xaa, 0x16, 0x53, 0x85, 0x33, 0x79, 0x3f, 0x2b, 0xd7, 0x63, 0xbc, 0x0d, - 0x0b, 0x3e, 0xf6, 0xaf, 0x8c, 0xc1, 0xe9, 0xc6, 0xdc, 0x92, 0xbc, 0x8b, 0xe9, 0xc8, 0x12, 0x99, - 0xf3, 0x78, 0x1c, 0x5f, 0x22, 0x73, 0x1f, 0xee, 0x9e, 0x91, 0xc8, 0xec, 0x19, 0x89, 0xcc, 0xc9, - 0xac, 0xd2, 0x72, 0x11, 0x59, 0xa5, 0x79, 0x3d, 0x18, 0x24, 0xab, 0xf4, 0xc8, 0x32, 0x9b, 0xf7, - 0xec, 0xd0, 0x81, 0x32, 0x9b, 0x55, 0xda, 0x77, 0x21, 0x49, 0x6c, 0x7d, 0x3e, 0x55, 0x6e, 0xda, - 0xb7, 0x4a, 0xb9, 0xe5, 0x09, 0x9a, 0x42, 0xe9, 0xbd, 0x52, 0x7c, 0x07, 0x06, 0x48, 0xb9, 0x15, - 0x39, 0xa2, 0x66, 0x9a, 0xf7, 0x48, 0x11, 0x69, 0xde, 0x79, 0xdd, 0xd9, 0x37, 0xcd, 0xfb, 0x65, - 0x18, 0x6f, 0x7a, 0x81, 0x4f, 0x56, 0xc2, 0x20, 0x0e, 0x9a, 0x81, 0xbc, 0x4d, 0x5f, 0x5f, 0x46, - 0x6a, 0x02, 0x71, 0x12, 0xb7, 0x5f, 0x8e, 0x78, 0xed, 0xb0, 0x39, 0xe2, 0xf0, 0x88, 0x72, 0xc4, - 0x8d, 0x2c, 0xe8, 0xd1, 0x22, 0xb2, 0xa0, 0xf3, 0xbe, 0xc8, 0x40, 0x59, 0xd0, 0x5f, 0xb0, 0x60, - 0xdc, 0xb9, 0xc7, 0xf6, 0x2d, 0x5c, 0x0a, 0xb3, 0xd3, 0xbe, 0xd1, 0x4b, 0x1f, 0x3a, 0x82, 0x09, - 0x7b, 0xa7, 0xa1, 0xd9, 0xd4, 0x27, 0x59, 0x66, 0x8a, 0xd9, 0x84, 0x93, 0x1d, 0x39, 0x4c, 0xe6, - 0xf4, 0x17, 0x4b, 0xf0, 0x0d, 0xfb, 0x76, 0x01, 0xdd, 0x03, 0x88, 0x9d, 0x0d, 0x31, 0x51, 0xc5, - 0x99, 0xd8, 0x21, 0x43, 0x99, 0x57, 0x25, 0x3d, 0x91, 0xd5, 0xa7, 0xc8, 0x63, 0x83, 0x15, 0x8b, - 0x60, 0x0e, 0xbc, 0x4c, 0x01, 0x6d, 0x1c, 0x78, 0x04, 0x33, 0x08, 0x35, 0x84, 0x42, 0xb2, 0x41, - 0x8d, 0xfb, 0x72, 0xd2, 0x10, 0xc2, 0xac, 0x15, 0x0b, 0x28, 0x7a, 0x11, 0x46, 0x1d, 0xcf, 0xe3, - 0x19, 0x86, 0x24, 0x12, 0xb7, 0x04, 0xeb, 0xb2, 0xb9, 0x1a, 0x84, 0x4d, 0x3c, 0xfb, 0x2f, 0x4a, - 0x30, 0xbd, 0x8f, 0x4c, 0xc9, 0x64, 0x96, 0x57, 0x06, 0xce, 0x2c, 0x17, 0x19, 0x52, 0xc3, 0x7d, - 0x32, 0xa4, 0x5e, 0x84, 0xd1, 0x98, 0x38, 0x6d, 0x11, 0xfc, 0x98, 0xae, 0x06, 0xb9, 0xaa, 0x41, - 0xd8, 0xc4, 0xa3, 0x52, 0x6c, 0xc2, 0x69, 0x36, 0x49, 0x14, 0xc9, 0x14, 0x28, 0xe1, 0x30, 0x2f, - 0x2c, 0xbf, 0x8a, 0x9d, 0x43, 0xcc, 0x26, 0x58, 0xe0, 0x14, 0xcb, 0xf4, 0x80, 0xd7, 0x06, 0x1c, - 0xf0, 0x9f, 0x28, 0xc1, 0xd3, 0x7b, 0x6a, 0xb7, 0x81, 0xb3, 0xd3, 0xba, 0x11, 0x09, 0xd3, 0x13, - 0xe7, 0x56, 0x44, 0x42, 0xcc, 0x20, 0x7c, 0x94, 0x3a, 0x1d, 0x15, 0xb8, 0x5e, 0x7c, 0x3a, 0x27, - 0x1f, 0xa5, 0x04, 0x0b, 0x9c, 0x62, 0xf9, 0xb0, 0xd3, 0xf2, 0xf7, 0x86, 0xe0, 0xd9, 0x01, 0x6c, - 0x80, 0x02, 0xd3, 0x5e, 0x93, 0x29, 0xdd, 0xe5, 0x47, 0x94, 0xd2, 0xfd, 0x70, 0xc3, 0xf5, 0x46, - 0x26, 0xf8, 0x40, 0xe9, 0xb5, 0x3f, 0x55, 0x82, 0x73, 0xfd, 0x0d, 0x16, 0xf4, 0x1d, 0x70, 0x22, - 0x54, 0xa1, 0x86, 0x66, 0x36, 0xf8, 0x29, 0xee, 0x0e, 0x4b, 0x80, 0x70, 0x1a, 0x17, 0xcd, 0x00, - 0x74, 0x9c, 0x78, 0x33, 0xba, 0xbc, 0xe3, 0x46, 0xb1, 0x28, 0x9f, 0x37, 0xc1, 0x0f, 0x71, 0x65, - 0x2b, 0x36, 0x30, 0x28, 0x3b, 0xf6, 0x6f, 0x3e, 0xb8, 0x19, 0xc4, 0xfc, 0x21, 0xbe, 0xf5, 0x3c, - 0x25, 0x2f, 0x9f, 0x34, 0x40, 0x38, 0x8d, 0x4b, 0xd9, 0xb1, 0x30, 0x01, 0xde, 0xd1, 0x21, 0x9d, - 0x3f, 0xbe, 0xa8, 0x5a, 0xb1, 0x81, 0x91, 0xce, 0x73, 0xaf, 0xec, 0x9f, 0xe7, 0x6e, 0xff, 0x7c, - 0x09, 0xce, 0xf6, 0x35, 0x78, 0x07, 0x13, 0x53, 0x8f, 0x5f, 0xae, 0xf9, 0x43, 0xae, 0xb0, 0x03, - 0xe5, 0x28, 0xdb, 0x7f, 0xd2, 0x67, 0xa6, 0x89, 0xfc, 0xe3, 0x87, 0x2f, 0xd5, 0xf2, 0xf8, 0x8d, - 0x67, 0x26, 0xe5, 0x78, 0xe8, 0x00, 0x29, 0xc7, 0xa9, 0x8f, 0x51, 0x19, 0x50, 0x3b, 0xfc, 0xa7, - 0xa1, 0xbe, 0xc3, 0x4b, 0x37, 0xc8, 0x03, 0x1d, 0x36, 0xcc, 0xc3, 0x49, 0xd7, 0x67, 0xd7, 0x09, - 0x37, 0xba, 0x6b, 0xa2, 0xa2, 0x1a, 0x2f, 0x1f, 0xac, 0x12, 0x7e, 0x16, 0x52, 0x70, 0x9c, 0x79, - 0xe2, 0x31, 0x4c, 0x01, 0x7f, 0xb8, 0x21, 0x3d, 0xa0, 0xe4, 0x5e, 0x86, 0x33, 0x72, 0x28, 0x36, - 0x9d, 0x90, 0xb4, 0x84, 0xb2, 0x8d, 0x44, 0x8a, 0xd7, 0x59, 0x9e, 0x26, 0x96, 0x83, 0x80, 0xf3, - 0x9f, 0x63, 0x77, 0xbf, 0x06, 0x1d, 0xb7, 0x29, 0xb6, 0x82, 0xfa, 0xee, 0x57, 0xda, 0x88, 0x39, - 0x4c, 0xeb, 0x8b, 0xda, 0xf1, 0xe8, 0x8b, 0x0f, 0x42, 0x4d, 0x8d, 0x37, 0xcf, 0x95, 0x50, 0x93, - 0x3c, 0x93, 0x2b, 0xa1, 0x66, 0xb8, 0x81, 0x45, 0x67, 0x07, 0xdd, 0xa8, 0xa4, 0x56, 0x2b, 0xe5, - 0x47, 0xdb, 0xed, 0xb7, 0xc3, 0x98, 0xf2, 0x05, 0x0e, 0x7a, 0x03, 0xaf, 0xfd, 0x57, 0x25, 0x48, - 0x5d, 0x32, 0x87, 0x76, 0xa0, 0xd6, 0x0a, 0x7b, 0xbc, 0xb1, 0x98, 0xf2, 0xd5, 0xf3, 0x92, 0x9c, - 0x3e, 0x33, 0x53, 0x4d, 0x58, 0x33, 0x43, 0x1f, 0xe1, 0x15, 0xa2, 0x05, 0xeb, 0x52, 0x11, 0x65, - 0x00, 0x1a, 0x8a, 0x9e, 0x79, 0xb5, 0xa6, 0x6c, 0xc3, 0x06, 0x3f, 0x14, 0x43, 0x6d, 0x53, 0x5e, - 0xa6, 0x57, 0x8c, 0xb8, 0x53, 0x77, 0xf3, 0x71, 0x13, 0x4d, 0xfd, 0xc5, 0x9a, 0x91, 0xfd, 0xc7, - 0x25, 0x38, 0x9d, 0xfc, 0x00, 0xe2, 0x8c, 0xf3, 0xa7, 0x2d, 0x78, 0xd2, 0x73, 0xa2, 0xb8, 0xd1, - 0x65, 0x1b, 0x85, 0xf5, 0xae, 0xb7, 0x9c, 0x2a, 0x2a, 0x7e, 0x58, 0x67, 0x8b, 0x22, 0x9c, 0xbe, - 0x7c, 0xb1, 0xfe, 0xd4, 0xfd, 0xdd, 0xe9, 0x27, 0x17, 0xf3, 0x99, 0xe3, 0x7e, 0xbd, 0x42, 0xaf, - 0x5b, 0x70, 0xb2, 0xd9, 0x0d, 0x43, 0xe2, 0xc7, 0xba, 0xab, 0xfc, 0x2b, 0xde, 0x2c, 0x64, 0x20, - 0x75, 0x07, 0x4f, 0x53, 0x81, 0x3a, 0x97, 0xe2, 0x85, 0x33, 0xdc, 0xed, 0x1f, 0xa4, 0x9a, 0xb3, - 0xef, 0x7b, 0xfe, 0x35, 0xbb, 0x2d, 0xf2, 0xcf, 0x86, 0x61, 0x3c, 0x51, 0x31, 0x3d, 0x71, 0xd8, - 0x67, 0xed, 0x7b, 0xd8, 0xc7, 0x92, 0x12, 0xbb, 0xbe, 0xbc, 0x50, 0xdf, 0x48, 0x4a, 0xec, 0xfa, - 0x04, 0x73, 0x98, 0x18, 0x52, 0xdc, 0xf5, 0xc5, 0xe9, 0xa3, 0x39, 0xa4, 0xb8, 0xeb, 0x63, 0x01, - 0x45, 0x1f, 0xb3, 0x60, 0x8c, 0x2d, 0x3e, 0x71, 0xaa, 0x2a, 0x14, 0xda, 0xf5, 0x02, 0x96, 0xbb, - 0xbc, 0x25, 0x80, 0x85, 0xa1, 0x9a, 0x2d, 0x38, 0xc1, 0x11, 0x7d, 0xd2, 0x82, 0x9a, 0xba, 0xb5, - 0x57, 0x9c, 0x8d, 0x34, 0x8a, 0x2d, 0x48, 0x9f, 0x92, 0x7a, 0xaa, 0x32, 0x38, 0xd6, 0x8c, 0x51, - 0xa4, 0xce, 0x31, 0x47, 0x8e, 0xe6, 0x1c, 0x13, 0x72, 0xce, 0x30, 0xdf, 0x02, 0xb5, 0xb6, 0x48, - 0xf1, 0xe3, 0x47, 0x8b, 0xf2, 0x1e, 0x12, 0xd9, 0x88, 0x35, 0x9c, 0x1a, 0xfb, 0x11, 0x7b, 0xb1, - 0xd8, 0x38, 0x0b, 0x64, 0xc6, 0x7e, 0x43, 0x37, 0x63, 0x13, 0xc7, 0x3c, 0xb8, 0x84, 0x47, 0x7a, - 0x70, 0x39, 0xba, 0xcf, 0xc1, 0x65, 0x03, 0xce, 0x38, 0xdd, 0x38, 0xb8, 0x46, 0x1c, 0x6f, 0x36, - 0x8e, 0x49, 0xbb, 0x13, 0x47, 0xbc, 0xc8, 0xfe, 0x18, 0x73, 0x01, 0xab, 0xc0, 0xb9, 0x06, 0xf1, - 0xd6, 0x33, 0x48, 0x38, 0xff, 0x59, 0xfb, 0x9f, 0x59, 0x70, 0x26, 0x77, 0x2a, 0x3c, 0xbe, 0x29, - 0x0b, 0xf6, 0x8f, 0x54, 0xe0, 0x54, 0xce, 0x7d, 0x0a, 0xa8, 0x67, 0x2e, 0x12, 0xab, 0x88, 0xe8, - 0xbf, 0x64, 0x30, 0x9b, 0xfc, 0x36, 0x39, 0x2b, 0xe3, 0x60, 0xb1, 0x08, 0x3a, 0x1e, 0xa0, 0x7c, - 0xbc, 0xf1, 0x00, 0xc6, 0x5c, 0x1f, 0x7a, 0xa4, 0x73, 0xbd, 0xb2, 0xcf, 0x5c, 0xff, 0x19, 0x0b, - 0xa6, 0xda, 0x7d, 0x2e, 0x49, 0x13, 0xe7, 0x49, 0xb7, 0x8f, 0xe6, 0x0a, 0xb6, 0xfa, 0xf9, 0xfb, - 0xbb, 0xd3, 0x7d, 0xef, 0xa6, 0xc3, 0x7d, 0x7b, 0x65, 0x7f, 0xa5, 0x0c, 0xcc, 0x5e, 0x63, 0x35, - 0xb3, 0x7b, 0xe8, 0xa3, 0xe6, 0xf5, 0x2c, 0x56, 0x51, 0x57, 0x88, 0x70, 0xe2, 0xea, 0x7a, 0x17, - 0x3e, 0x82, 0x79, 0xb7, 0xbd, 0xa4, 0x25, 0x61, 0x69, 0x00, 0x49, 0xe8, 0xc9, 0x7b, 0x70, 0xca, - 0xc5, 0xdf, 0x83, 0x53, 0x4b, 0xdf, 0x81, 0xb3, 0xf7, 0x27, 0x1e, 0x7a, 0x2c, 0x3f, 0xf1, 0xcf, - 0x5b, 0x5c, 0xf0, 0xa4, 0xbe, 0x02, 0x9a, 0x96, 0xe6, 0x06, 0xbf, 0x2e, 0xa3, 0x96, 0x31, 0x35, - 0x9e, 0x87, 0x6a, 0x24, 0xa4, 0xb2, 0x30, 0x49, 0xd8, 0x2e, 0x56, 0x4a, 0x6a, 0xac, 0xa0, 0x68, - 0x06, 0xc0, 0xf1, 0xbc, 0xe0, 0xde, 0xe5, 0x76, 0x27, 0xee, 0x49, 0xc3, 0x84, 0x6e, 0x05, 0x66, - 0x55, 0x2b, 0x36, 0x30, 0xd0, 0x37, 0xc1, 0x08, 0x2f, 0x68, 0xd1, 0x12, 0x1e, 0x9d, 0x51, 0xba, - 0xf8, 0x78, 0xb9, 0x8b, 0x16, 0x96, 0x30, 0x7b, 0x13, 0x8c, 0xbd, 0xc4, 0xc3, 0xdf, 0xbf, 0xbd, - 0xff, 0x95, 0x9a, 0xf6, 0xdf, 0x2f, 0x09, 0x56, 0x7c, 0x6f, 0xa0, 0x43, 0x07, 0xad, 0x03, 0x86, - 0x0e, 0x7e, 0x04, 0xa0, 0x19, 0xb4, 0x3b, 0x74, 0xb7, 0xbc, 0x1a, 0x14, 0xb3, 0xc5, 0x9a, 0x53, - 0xf4, 0xf4, 0x16, 0x4b, 0xb7, 0x61, 0x83, 0x5f, 0x42, 0xa0, 0x97, 0xf7, 0x15, 0xe8, 0x09, 0xd9, - 0x36, 0xb4, 0xb7, 0x6c, 0xb3, 0xff, 0xc2, 0x82, 0x84, 0xad, 0x87, 0x3a, 0x50, 0xa1, 0xdd, 0xed, - 0x09, 0x31, 0xb1, 0x5c, 0x9c, 0x61, 0x49, 0xe5, 0xb3, 0x58, 0x7b, 0xec, 0x27, 0xe6, 0x8c, 0x90, - 0x27, 0xc2, 0x24, 0x0b, 0xd9, 0xf2, 0x98, 0x0c, 0xaf, 0x05, 0xc1, 0x16, 0x0f, 0x21, 0xd2, 0x21, - 0x97, 0xf6, 0x4b, 0x30, 0x99, 0xe9, 0x14, 0xbb, 0xb3, 0x3b, 0x90, 0xfb, 0x76, 0xc3, 0x44, 0x67, - 0x95, 0x25, 0x30, 0x87, 0xd9, 0x3f, 0x65, 0xc1, 0xc9, 0x34, 0x79, 0xf4, 0x05, 0x0b, 0x26, 0xa3, - 0x34, 0xbd, 0xa3, 0x1a, 0x3b, 0x95, 0x2e, 0x91, 0x01, 0xe1, 0x6c, 0x27, 0xec, 0xff, 0x2a, 0x74, - 0xc0, 0x1d, 0xd7, 0x6f, 0x05, 0xf7, 0x94, 0x75, 0x64, 0xf5, 0xb5, 0x8e, 0x5e, 0x80, 0x6a, 0xd4, - 0xdc, 0x24, 0xad, 0xae, 0x97, 0x29, 0x2a, 0xd1, 0x10, 0xed, 0x58, 0x61, 0xb0, 0x1c, 0xfa, 0xae, - 0xd8, 0xad, 0xa6, 0x26, 0xe5, 0xbc, 0x68, 0xc7, 0x0a, 0x03, 0xbd, 0x03, 0xc6, 0x8c, 0x97, 0x94, - 0xf3, 0x92, 0x6d, 0x35, 0x0c, 0xbd, 0x1d, 0xe1, 0x04, 0x16, 0x15, 0x40, 0xca, 0xd2, 0x92, 0x7a, - 0x9a, 0x09, 0x20, 0x25, 0x0e, 0x23, 0x6c, 0x60, 0xb0, 0x8a, 0x15, 0x5e, 0x37, 0x62, 0xe7, 0xc7, - 0xc3, 0xfa, 0xe6, 0x88, 0x39, 0xd1, 0x86, 0x15, 0x14, 0x5d, 0x02, 0x68, 0x3b, 0x7e, 0xd7, 0xf1, - 0xe8, 0x08, 0x09, 0x87, 0x99, 0x5a, 0x86, 0x4b, 0x0a, 0x82, 0x0d, 0x2c, 0xfa, 0xc6, 0xb1, 0xdb, - 0x26, 0xef, 0x0b, 0x7c, 0x19, 0xde, 0xae, 0x43, 0x0a, 0x44, 0x3b, 0x56, 0x18, 0xe8, 0x25, 0x18, - 0x75, 0xfc, 0x16, 0x37, 0x0b, 0x83, 0x50, 0x9c, 0x4c, 0xaa, 0x3d, 0xe7, 0xad, 0x88, 0xcc, 0x6a, - 0x28, 0x36, 0x51, 0xd3, 0xd7, 0x66, 0xc0, 0x80, 0xd7, 0xf3, 0xfd, 0xb9, 0x05, 0x27, 0x74, 0x75, - 0x24, 0xe6, 0x57, 0x4b, 0x38, 0x14, 0xad, 0x7d, 0x1d, 0x8a, 0xc9, 0x4a, 0x24, 0xa5, 0x81, 0x2a, - 0x91, 0x98, 0x45, 0x42, 0xca, 0x7b, 0x16, 0x09, 0xf9, 0x26, 0x18, 0xd9, 0x22, 0x3d, 0xa3, 0x9a, - 0x08, 0xd3, 0x0e, 0x37, 0x78, 0x13, 0x96, 0x30, 0x64, 0xc3, 0x70, 0xd3, 0x51, 0xc5, 0x12, 0xc7, - 0x44, 0x44, 0xda, 0x2c, 0x43, 0x12, 0x10, 0x7b, 0x19, 0x6a, 0xea, 0x28, 0x5f, 0xfa, 0xf7, 0xac, - 0x7c, 0xff, 0xde, 0x40, 0x17, 0xfd, 0xd7, 0xd7, 0x7e, 0xf3, 0xab, 0xcf, 0xbc, 0xe9, 0x77, 0xbf, - 0xfa, 0xcc, 0x9b, 0xfe, 0xe8, 0xab, 0xcf, 0xbc, 0xe9, 0x63, 0xf7, 0x9f, 0xb1, 0x7e, 0xf3, 0xfe, - 0x33, 0xd6, 0xef, 0xde, 0x7f, 0xc6, 0xfa, 0xa3, 0xfb, 0xcf, 0x58, 0x5f, 0xb9, 0xff, 0x8c, 0xf5, - 0xfa, 0x7f, 0x7c, 0xe6, 0x4d, 0xef, 0xfb, 0xf6, 0xbd, 0xc2, 0xf8, 0xb7, 0xdf, 0xce, 0x62, 0xf7, - 0xe9, 0x7a, 0xbe, 0x68, 0x4c, 0xe2, 0x8b, 0x72, 0x3d, 0xff, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, - 0x4a, 0xf5, 0xfb, 0xe6, 0x23, 0x06, 0x01, 0x00, + // 12691 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x6d, 0x70, 0x25, 0xd9, + 0x55, 0x98, 0xfb, 0x3d, 0x3d, 0xe9, 0xbd, 0xa3, 0x8f, 0x19, 0xdd, 0x99, 0xd9, 0xd5, 0xcc, 0xce, + 0x8e, 0xc6, 0xbd, 0x78, 0xbd, 0xc4, 0x6b, 0x0d, 0x1e, 0x7b, 0xcd, 0x86, 0x05, 0x13, 0x3d, 0x69, + 0x3e, 0x34, 0x23, 0x8d, 0xe4, 0xfb, 0x34, 0x33, 0xfe, 0x5a, 0xdb, 0xad, 0x7e, 0x57, 0x52, 0x8f, + 0xfa, 0x75, 0xbf, 0xed, 0xee, 0xa7, 0x99, 0xb7, 0x18, 0x63, 0x63, 0x1b, 0x0c, 0x36, 0xf6, 0x06, + 0x52, 0x61, 0x49, 0x62, 0xc7, 0x04, 0xf2, 0x51, 0x95, 0xa2, 0x20, 0xe1, 0x07, 0x54, 0x80, 0xa2, + 0x02, 0x14, 0x05, 0x15, 0x12, 0x08, 0x45, 0x80, 0x04, 0x50, 0xec, 0x49, 0x52, 0x50, 0xa9, 0x0a, + 0x29, 0x92, 0x54, 0x2a, 0x35, 0x21, 0x54, 0xea, 0x7e, 0xdf, 0xee, 0xd7, 0x4f, 0x7a, 0x1a, 0xb5, + 0x34, 0x63, 0xd8, 0x7f, 0xef, 0xdd, 0x73, 0xfa, 0x9c, 0xdb, 0xb7, 0xef, 0x3d, 0xe7, 0xdc, 0x73, + 0xcf, 0x39, 0x17, 0x16, 0x37, 0xbc, 0x64, 0xb3, 0xb3, 0x36, 0xe3, 0x86, 0xad, 0x0b, 0x4e, 0xb4, + 0x11, 0xb6, 0xa3, 0xf0, 0x0e, 0xfb, 0xf1, 0x76, 0xb7, 0x79, 0x61, 0xfb, 0x9d, 0x17, 0xda, 0x5b, + 0x1b, 0x17, 0x9c, 0xb6, 0x17, 0x5f, 0x70, 0xda, 0x6d, 0xdf, 0x73, 0x9d, 0xc4, 0x0b, 0x83, 0x0b, + 0xdb, 0xef, 0x70, 0xfc, 0xf6, 0xa6, 0xf3, 0x8e, 0x0b, 0x1b, 0x24, 0x20, 0x91, 0x93, 0x90, 0xe6, + 0x4c, 0x3b, 0x0a, 0x93, 0x10, 0x7d, 0xab, 0xa6, 0x36, 0x23, 0xa9, 0xb1, 0x1f, 0x1f, 0x71, 0x9b, + 0x33, 0xdb, 0xef, 0x9c, 0x69, 0x6f, 0x6d, 0xcc, 0x50, 0x6a, 0x33, 0x06, 0xb5, 0x19, 0x49, 0xed, + 0xcc, 0xdb, 0x8d, 0xbe, 0x6c, 0x84, 0x1b, 0xe1, 0x05, 0x46, 0x74, 0xad, 0xb3, 0xce, 0xfe, 0xb1, + 0x3f, 0xec, 0x17, 0x67, 0x76, 0xc6, 0xde, 0x7a, 0x31, 0x9e, 0xf1, 0x42, 0xda, 0xbd, 0x0b, 0x6e, + 0x18, 0x91, 0x0b, 0xdb, 0x3d, 0x1d, 0x3a, 0x73, 0x55, 0xe3, 0x90, 0x7b, 0x09, 0x09, 0x62, 0x2f, + 0x0c, 0xe2, 0xb7, 0xd3, 0x2e, 0x90, 0x68, 0x9b, 0x44, 0xe6, 0xeb, 0x19, 0x08, 0x79, 0x94, 0xde, + 0xa5, 0x29, 0xb5, 0x1c, 0x77, 0xd3, 0x0b, 0x48, 0xd4, 0xd5, 0x8f, 0xb7, 0x48, 0xe2, 0xe4, 0x3d, + 0x75, 0xa1, 0xdf, 0x53, 0x51, 0x27, 0x48, 0xbc, 0x16, 0xe9, 0x79, 0xe0, 0xdd, 0x7b, 0x3d, 0x10, + 0xbb, 0x9b, 0xa4, 0xe5, 0xf4, 0x3c, 0xf7, 0xce, 0x7e, 0xcf, 0x75, 0x12, 0xcf, 0xbf, 0xe0, 0x05, + 0x49, 0x9c, 0x44, 0xd9, 0x87, 0xec, 0xbf, 0x67, 0xc1, 0xf8, 0xec, 0xed, 0xc6, 0x6c, 0x27, 0xd9, + 0x9c, 0x0b, 0x83, 0x75, 0x6f, 0x03, 0xbd, 0x00, 0xa3, 0xae, 0xdf, 0x89, 0x13, 0x12, 0xdd, 0x70, + 0x5a, 0x64, 0xca, 0x3a, 0x6f, 0x3d, 0x57, 0xab, 0x9f, 0xf8, 0xb5, 0x9d, 0xe9, 0x37, 0xdd, 0xdf, + 0x99, 0x1e, 0x9d, 0xd3, 0x20, 0x6c, 0xe2, 0xa1, 0x6f, 0x84, 0x91, 0x28, 0xf4, 0xc9, 0x2c, 0xbe, + 0x31, 0x55, 0x62, 0x8f, 0x1c, 0x13, 0x8f, 0x8c, 0x60, 0xde, 0x8c, 0x25, 0x9c, 0xa2, 0xb6, 0xa3, + 0x70, 0xdd, 0xf3, 0xc9, 0x54, 0x39, 0x8d, 0xba, 0xc2, 0x9b, 0xb1, 0x84, 0xdb, 0x3f, 0x5a, 0x82, + 0x63, 0xb3, 0xed, 0xf6, 0x55, 0xe2, 0xf8, 0xc9, 0x66, 0x23, 0x71, 0x92, 0x4e, 0x8c, 0x42, 0x18, + 0x8e, 0xd9, 0x2f, 0xd1, 0xb7, 0xdb, 0xe2, 0xe9, 0x61, 0x0e, 0x7f, 0xb0, 0x33, 0x7d, 0x69, 0xb7, + 0x19, 0xbd, 0xe1, 0x25, 0x61, 0x3b, 0x7e, 0x3b, 0x09, 0x36, 0xbc, 0x80, 0xb0, 0xf1, 0xd9, 0x64, + 0xd4, 0x67, 0x4c, 0x26, 0x73, 0x61, 0x93, 0x60, 0xc1, 0x86, 0xf6, 0xb7, 0x45, 0xe2, 0xd8, 0xd9, + 0x20, 0xd9, 0x57, 0x5b, 0xe2, 0xcd, 0x58, 0xc2, 0x51, 0x04, 0xc8, 0x77, 0xe2, 0x64, 0x35, 0x72, + 0x82, 0xd8, 0xa3, 0x53, 0x7b, 0xd5, 0x6b, 0xf1, 0xb7, 0x1c, 0xbd, 0xf8, 0xd7, 0x66, 0xf8, 0x07, + 0x9a, 0x31, 0x3f, 0x90, 0x5e, 0x0f, 0x74, 0xfe, 0xcc, 0x6c, 0xbf, 0x63, 0x86, 0x3e, 0x51, 0x7f, + 0xe2, 0xfe, 0xce, 0x34, 0x5a, 0xec, 0xa1, 0x84, 0x73, 0xa8, 0xdb, 0xbf, 0x5b, 0x02, 0x98, 0x6d, + 0xb7, 0x57, 0xa2, 0xf0, 0x0e, 0x71, 0x13, 0xf4, 0x51, 0xa8, 0x52, 0x52, 0x4d, 0x27, 0x71, 0xd8, + 0x00, 0x8d, 0x5e, 0xfc, 0xa6, 0xc1, 0x18, 0x2f, 0xaf, 0xd1, 0xe7, 0x97, 0x48, 0xe2, 0xd4, 0x91, + 0x78, 0x41, 0xd0, 0x6d, 0x58, 0x51, 0x45, 0x01, 0x0c, 0xc5, 0x6d, 0xe2, 0xb2, 0xc1, 0x18, 0xbd, + 0xb8, 0x38, 0x73, 0x90, 0x15, 0x3f, 0xa3, 0x7b, 0xde, 0x68, 0x13, 0xb7, 0x3e, 0x26, 0x38, 0x0f, + 0xd1, 0x7f, 0x98, 0xf1, 0x41, 0xdb, 0xea, 0x83, 0xf3, 0x81, 0xbc, 0x51, 0x18, 0x47, 0x46, 0xb5, + 0x3e, 0x91, 0x9e, 0x40, 0xf2, 0xbb, 0xdb, 0x7f, 0x64, 0xc1, 0x84, 0x46, 0x5e, 0xf4, 0xe2, 0x04, + 0x7d, 0xa8, 0x67, 0x70, 0x67, 0x06, 0x1b, 0x5c, 0xfa, 0x34, 0x1b, 0xda, 0xe3, 0x82, 0x59, 0x55, + 0xb6, 0x18, 0x03, 0xdb, 0x82, 0x8a, 0x97, 0x90, 0x56, 0x3c, 0x55, 0x3a, 0x5f, 0x7e, 0x6e, 0xf4, + 0xe2, 0xd5, 0xa2, 0xde, 0xb3, 0x3e, 0x2e, 0x98, 0x56, 0x16, 0x28, 0x79, 0xcc, 0xb9, 0xd8, 0xbf, + 0x31, 0x61, 0xbe, 0x1f, 0x1d, 0x70, 0xf4, 0x0e, 0x18, 0x8d, 0xc3, 0x4e, 0xe4, 0x12, 0x4c, 0xda, + 0x21, 0x5d, 0x60, 0x65, 0x3a, 0xdd, 0xe9, 0xc2, 0x6f, 0xe8, 0x66, 0x6c, 0xe2, 0xa0, 0x2f, 0x58, + 0x30, 0xd6, 0x24, 0x71, 0xe2, 0x05, 0x8c, 0xbf, 0xec, 0xfc, 0xea, 0x81, 0x3b, 0x2f, 0x1b, 0xe7, + 0x35, 0xf1, 0xfa, 0x49, 0xf1, 0x22, 0x63, 0x46, 0x63, 0x8c, 0x53, 0xfc, 0xa9, 0x00, 0x6b, 0x92, + 0xd8, 0x8d, 0xbc, 0x36, 0xfd, 0x2f, 0x44, 0x8c, 0x12, 0x60, 0xf3, 0x1a, 0x84, 0x4d, 0x3c, 0x14, + 0x40, 0x85, 0x0a, 0xa8, 0x78, 0x6a, 0x88, 0xf5, 0x7f, 0xe1, 0x60, 0xfd, 0x17, 0x83, 0x4a, 0x65, + 0x9f, 0x1e, 0x7d, 0xfa, 0x2f, 0xc6, 0x9c, 0x0d, 0xfa, 0x17, 0x16, 0x4c, 0x09, 0x01, 0x8a, 0x09, + 0x1f, 0xd0, 0xdb, 0x9b, 0x5e, 0x42, 0x7c, 0x2f, 0x4e, 0xa6, 0x2a, 0xac, 0x0f, 0x1f, 0x3a, 0x58, + 0x1f, 0xe6, 0xd2, 0xd4, 0x31, 0x89, 0x93, 0xc8, 0x73, 0x29, 0x0e, 0x9d, 0x06, 0xf5, 0xf3, 0xa2, + 0x5b, 0x53, 0x73, 0x7d, 0x7a, 0x81, 0xfb, 0xf6, 0x0f, 0xfd, 0x90, 0x05, 0x67, 0x02, 0xa7, 0x45, + 0xe2, 0xb6, 0xc3, 0x08, 0x33, 0x70, 0xdd, 0x77, 0xdc, 0x2d, 0xd6, 0xfd, 0x61, 0xd6, 0xfd, 0x0b, + 0x83, 0x2d, 0x8d, 0x2b, 0x51, 0xd8, 0x69, 0x5f, 0xf7, 0x82, 0x66, 0xdd, 0x16, 0x3d, 0x3a, 0x73, + 0xa3, 0x2f, 0x69, 0xbc, 0x0b, 0x5b, 0xf4, 0x63, 0x16, 0x4c, 0x86, 0x51, 0x7b, 0xd3, 0x09, 0x48, + 0x53, 0x42, 0xe3, 0xa9, 0x11, 0xb6, 0x4e, 0x3f, 0x7c, 0xb0, 0xb1, 0x5c, 0xce, 0x92, 0x5d, 0x0a, + 0x03, 0x2f, 0x09, 0xa3, 0x06, 0x49, 0x12, 0x2f, 0xd8, 0x88, 0xeb, 0xa7, 0xee, 0xef, 0x4c, 0x4f, + 0xf6, 0x60, 0xe1, 0xde, 0xfe, 0xa0, 0xef, 0x80, 0xd1, 0xb8, 0x1b, 0xb8, 0xb7, 0xbd, 0xa0, 0x19, + 0xde, 0x8d, 0xa7, 0xaa, 0x45, 0xac, 0xf5, 0x86, 0x22, 0x28, 0x56, 0xab, 0x66, 0x80, 0x4d, 0x6e, + 0xf9, 0x1f, 0x4e, 0xcf, 0xbb, 0x5a, 0xd1, 0x1f, 0x4e, 0x4f, 0xa6, 0x5d, 0xd8, 0xa2, 0xef, 0xb5, + 0x60, 0x3c, 0xf6, 0x36, 0x02, 0x27, 0xe9, 0x44, 0xe4, 0x3a, 0xe9, 0xc6, 0x53, 0xc0, 0x3a, 0x72, + 0xed, 0x80, 0xa3, 0x62, 0x90, 0xac, 0x9f, 0x12, 0x7d, 0x1c, 0x37, 0x5b, 0x63, 0x9c, 0xe6, 0x9b, + 0xb7, 0x2a, 0xf5, 0xb4, 0x1e, 0x7d, 0x84, 0xab, 0x52, 0xaf, 0x80, 0xbe, 0xfd, 0x43, 0x7f, 0x03, + 0x8e, 0xf3, 0x26, 0xf5, 0x19, 0xe2, 0xa9, 0x31, 0x26, 0xc2, 0x4f, 0xde, 0xdf, 0x99, 0x3e, 0xde, + 0xc8, 0xc0, 0x70, 0x0f, 0x36, 0x7a, 0x05, 0xa6, 0xdb, 0x24, 0x6a, 0x79, 0xc9, 0x72, 0xe0, 0x77, + 0xa5, 0x62, 0x70, 0xc3, 0x36, 0x69, 0x8a, 0xee, 0xc4, 0x53, 0xe3, 0xe7, 0xad, 0xe7, 0xaa, 0xf5, + 0xb7, 0x8a, 0x6e, 0x4e, 0xaf, 0xec, 0x8e, 0x8e, 0xf7, 0xa2, 0x87, 0x7e, 0xd5, 0x82, 0x33, 0x86, + 0xfc, 0x6e, 0x90, 0x68, 0xdb, 0x73, 0xc9, 0xac, 0xeb, 0x86, 0x9d, 0x20, 0x89, 0xa7, 0x26, 0xd8, + 0x98, 0xaf, 0x1d, 0x86, 0x36, 0x49, 0xb3, 0xd2, 0x93, 0xb8, 0x2f, 0x4a, 0x8c, 0x77, 0xe9, 0xa9, + 0xfd, 0xeb, 0x25, 0x38, 0x9e, 0xb5, 0x2d, 0xd0, 0x3f, 0xb2, 0xe0, 0xd8, 0x9d, 0xbb, 0xc9, 0x6a, + 0xb8, 0x45, 0x82, 0xb8, 0xde, 0xa5, 0x1a, 0x80, 0x69, 0xd5, 0xd1, 0x8b, 0x6e, 0xb1, 0x56, 0xcc, + 0xcc, 0xb5, 0x34, 0x97, 0x4b, 0x41, 0x12, 0x75, 0xeb, 0x4f, 0x8a, 0x77, 0x3a, 0x76, 0xed, 0xf6, + 0xaa, 0x09, 0xc5, 0xd9, 0x4e, 0x9d, 0xf9, 0x9c, 0x05, 0x27, 0xf3, 0x48, 0xa0, 0xe3, 0x50, 0xde, + 0x22, 0x5d, 0x6e, 0x6b, 0x63, 0xfa, 0x13, 0xbd, 0x0c, 0x95, 0x6d, 0xc7, 0xef, 0x10, 0x61, 0x00, + 0x5e, 0x39, 0xd8, 0x8b, 0xa8, 0x9e, 0x61, 0x4e, 0xf5, 0x5b, 0x4a, 0x2f, 0x5a, 0xf6, 0x6f, 0x96, + 0x61, 0xd4, 0xf8, 0x68, 0x47, 0x60, 0xd4, 0x86, 0x29, 0xa3, 0x76, 0xa9, 0xb0, 0xf9, 0xd6, 0xd7, + 0xaa, 0xbd, 0x9b, 0xb1, 0x6a, 0x97, 0x8b, 0x63, 0xb9, 0xab, 0x59, 0x8b, 0x12, 0xa8, 0x85, 0x6d, + 0xba, 0x09, 0xa4, 0xd6, 0xd1, 0x50, 0x11, 0x9f, 0x70, 0x59, 0x92, 0xab, 0x8f, 0xdf, 0xdf, 0x99, + 0xae, 0xa9, 0xbf, 0x58, 0x33, 0xb2, 0x7f, 0xcf, 0x82, 0x93, 0x46, 0x1f, 0xe7, 0xc2, 0xa0, 0xc9, + 0xb6, 0x30, 0xe8, 0x3c, 0x0c, 0x25, 0xdd, 0xb6, 0xdc, 0x68, 0xaa, 0x91, 0x5a, 0xed, 0xb6, 0x09, + 0x66, 0x90, 0xc7, 0x7d, 0xff, 0xf5, 0x43, 0x16, 0x3c, 0x91, 0x2f, 0x60, 0xd0, 0xb3, 0x30, 0xcc, + 0xbd, 0x0c, 0xe2, 0xed, 0xf4, 0x27, 0x61, 0xad, 0x58, 0x40, 0xd1, 0x05, 0xa8, 0x29, 0xed, 0x28, + 0xde, 0x71, 0x52, 0xa0, 0xd6, 0xb4, 0x4a, 0xd5, 0x38, 0x74, 0xd0, 0xe8, 0x1f, 0x61, 0xdc, 0xaa, + 0x41, 0x63, 0xdb, 0x72, 0x06, 0xb1, 0x7f, 0xc7, 0x82, 0x6f, 0x18, 0x44, 0xec, 0x1d, 0x5e, 0x1f, + 0x1b, 0x70, 0xaa, 0x49, 0xd6, 0x9d, 0x8e, 0x9f, 0xa4, 0x39, 0x8a, 0x4e, 0x3f, 0x2d, 0x1e, 0x3e, + 0x35, 0x9f, 0x87, 0x84, 0xf3, 0x9f, 0xb5, 0xff, 0xa3, 0xc5, 0x1c, 0x02, 0xf2, 0xb5, 0x8e, 0x60, + 0x53, 0x16, 0xa4, 0x37, 0x65, 0x0b, 0x85, 0x2d, 0xd3, 0x3e, 0xbb, 0xb2, 0x1f, 0xb0, 0xe0, 0x8c, + 0x81, 0xb5, 0xe4, 0x24, 0xee, 0xe6, 0xa5, 0x7b, 0xed, 0x88, 0xc4, 0x31, 0x9d, 0x52, 0x4f, 0x1b, + 0xe2, 0xb8, 0x3e, 0x2a, 0x28, 0x94, 0xaf, 0x93, 0x2e, 0x97, 0xcd, 0xcf, 0x43, 0x95, 0xaf, 0xb9, + 0x30, 0x12, 0x1f, 0x49, 0xbd, 0xdb, 0xb2, 0x68, 0xc7, 0x0a, 0x03, 0xd9, 0x30, 0xcc, 0x64, 0x2e, + 0x95, 0x41, 0xd4, 0x4c, 0x00, 0xfa, 0xdd, 0x6f, 0xb1, 0x16, 0x2c, 0x20, 0x76, 0x9c, 0xea, 0xce, + 0x4a, 0x44, 0xd8, 0x7c, 0x68, 0x5e, 0xf6, 0x88, 0xdf, 0x8c, 0xe9, 0x86, 0xd1, 0x09, 0x82, 0x30, + 0x11, 0x7b, 0x3f, 0x63, 0xc3, 0x38, 0xab, 0x9b, 0xb1, 0x89, 0x43, 0x99, 0xfa, 0xce, 0x1a, 0xf1, + 0xf9, 0x88, 0x0a, 0xa6, 0x8b, 0xac, 0x05, 0x0b, 0x88, 0x7d, 0xbf, 0xc4, 0xb6, 0xa6, 0x4a, 0xa2, + 0x91, 0xa3, 0xf0, 0x6b, 0x44, 0x29, 0x15, 0xb0, 0x52, 0x9c, 0x3c, 0x26, 0xfd, 0x7d, 0x1b, 0xaf, + 0x66, 0xb4, 0x00, 0x2e, 0x94, 0xeb, 0xee, 0xfe, 0x8d, 0x2f, 0x95, 0x61, 0x3a, 0xfd, 0x40, 0x8f, + 0x12, 0xa1, 0x9b, 0x69, 0x83, 0x51, 0xd6, 0x1b, 0x68, 0xe0, 0x63, 0x13, 0xaf, 0x8f, 0x1c, 0x2e, + 0x1d, 0xa6, 0x1c, 0x36, 0xd5, 0x44, 0x79, 0x0f, 0x35, 0x31, 0xa7, 0x46, 0x7d, 0x88, 0x61, 0xbe, + 0xad, 0xc7, 0x85, 0x78, 0x7a, 0x25, 0x0a, 0x37, 0xd8, 0x9a, 0xdb, 0x26, 0x74, 0x33, 0x95, 0xe3, + 0x16, 0x3c, 0x0f, 0x43, 0x71, 0x42, 0xda, 0x53, 0x95, 0xb4, 0x0c, 0x6e, 0x24, 0xa4, 0x8d, 0x19, + 0x04, 0x7d, 0x1b, 0x1c, 0x4b, 0x9c, 0x68, 0x83, 0x24, 0x11, 0xd9, 0xf6, 0x98, 0x5b, 0x99, 0xed, + 0x8c, 0x6b, 0xf5, 0x13, 0xd4, 0x24, 0x5b, 0x65, 0x20, 0x2c, 0x41, 0x38, 0x8b, 0x6b, 0xff, 0xd7, + 0x12, 0x3c, 0x99, 0xfe, 0x3e, 0x5a, 0x6b, 0x7e, 0x7b, 0x4a, 0x6b, 0xbe, 0xcd, 0xd4, 0x9a, 0x0f, + 0x76, 0xa6, 0x9f, 0xea, 0xf3, 0xd8, 0xd7, 0x8d, 0x52, 0x45, 0x57, 0x32, 0x5f, 0xe8, 0x42, 0xcf, + 0x17, 0x7a, 0xba, 0xcf, 0x3b, 0x66, 0xac, 0x9d, 0x67, 0x61, 0x38, 0x22, 0x4e, 0x1c, 0x06, 0xe2, + 0x3b, 0xa9, 0xc5, 0x80, 0x59, 0x2b, 0x16, 0x50, 0xfb, 0xb7, 0x6b, 0xd9, 0xc1, 0xbe, 0xc2, 0x5d, + 0xe5, 0x61, 0x84, 0x3c, 0x18, 0x62, 0xfb, 0x3f, 0x2e, 0x76, 0xae, 0x1f, 0x6c, 0x89, 0x52, 0x15, + 0xa3, 0x48, 0xd7, 0xab, 0xf4, 0xab, 0xd1, 0x26, 0xcc, 0x58, 0xa0, 0x7b, 0x50, 0x75, 0xe5, 0x4e, + 0xab, 0x54, 0x84, 0xb7, 0x53, 0xec, 0xb3, 0x34, 0xc7, 0x31, 0xaa, 0x0b, 0xd4, 0xf6, 0x4c, 0x71, + 0x43, 0x04, 0xca, 0x1b, 0x5e, 0x22, 0x3e, 0xeb, 0x01, 0x37, 0xde, 0x57, 0x3c, 0xe3, 0x15, 0x47, + 0xa8, 0x82, 0xba, 0xe2, 0x25, 0x98, 0xd2, 0x47, 0x9f, 0xb1, 0x60, 0x34, 0x76, 0x5b, 0x2b, 0x51, + 0xb8, 0xed, 0x35, 0x49, 0x24, 0x0c, 0xd0, 0x03, 0x8a, 0xbd, 0xc6, 0xdc, 0x92, 0x24, 0xa8, 0xf9, + 0x72, 0x47, 0x88, 0x86, 0x60, 0x93, 0x2f, 0xdd, 0x98, 0x3d, 0x29, 0xde, 0x7d, 0x9e, 0xb8, 0x6c, + 0xc5, 0xc9, 0x0d, 0x35, 0x9b, 0x29, 0x07, 0x36, 0xc8, 0xe7, 0x3b, 0xee, 0x16, 0x5d, 0x6f, 0xba, + 0x43, 0x4f, 0xdd, 0xdf, 0x99, 0x7e, 0x72, 0x2e, 0x9f, 0x27, 0xee, 0xd7, 0x19, 0x36, 0x60, 0xed, + 0x8e, 0xef, 0x63, 0xf2, 0x4a, 0x87, 0x30, 0xdf, 0x5a, 0x01, 0x03, 0xb6, 0xa2, 0x09, 0x66, 0x06, + 0xcc, 0x80, 0x60, 0x93, 0x2f, 0x7a, 0x05, 0x86, 0x5b, 0x4e, 0x12, 0x79, 0xf7, 0x84, 0x43, 0xed, + 0x80, 0x5b, 0xa4, 0x25, 0x46, 0x4b, 0x33, 0x67, 0x56, 0x00, 0x6f, 0xc4, 0x82, 0x11, 0x6a, 0x41, + 0xa5, 0x45, 0xa2, 0x0d, 0x32, 0x55, 0x2d, 0xe2, 0xa4, 0x61, 0x89, 0x92, 0xd2, 0x0c, 0x6b, 0xd4, + 0xf2, 0x62, 0x6d, 0x98, 0x73, 0x41, 0x2f, 0x43, 0x35, 0x26, 0x3e, 0x71, 0xa9, 0xed, 0x54, 0x63, + 0x1c, 0xdf, 0x39, 0xa0, 0x1d, 0x49, 0x8d, 0x96, 0x86, 0x78, 0x94, 0x2f, 0x30, 0xf9, 0x0f, 0x2b, + 0x92, 0x74, 0x00, 0xdb, 0x7e, 0x67, 0xc3, 0x0b, 0xa6, 0xa0, 0x88, 0x01, 0x5c, 0x61, 0xb4, 0x32, + 0x03, 0xc8, 0x1b, 0xb1, 0x60, 0x64, 0xff, 0x17, 0x0b, 0x50, 0x5a, 0xa8, 0x1d, 0x81, 0xc1, 0xfc, + 0x4a, 0xda, 0x60, 0x5e, 0x2c, 0xd2, 0xa2, 0xe9, 0x63, 0x33, 0xff, 0x5c, 0x0d, 0x32, 0xea, 0xe0, + 0x06, 0x89, 0x13, 0xd2, 0x7c, 0x43, 0x84, 0xbf, 0x21, 0xc2, 0xdf, 0x10, 0xe1, 0x4a, 0x84, 0xaf, + 0x65, 0x44, 0xf8, 0x7b, 0x8c, 0x55, 0xaf, 0x43, 0x1f, 0x3e, 0xa2, 0x62, 0x23, 0xcc, 0x1e, 0x18, + 0x08, 0x54, 0x12, 0x5c, 0x6b, 0x2c, 0xdf, 0xc8, 0x95, 0xd9, 0x1f, 0x49, 0xcb, 0xec, 0x83, 0xb2, + 0xf8, 0xab, 0x20, 0xa5, 0x7f, 0xd5, 0x82, 0xb7, 0xa6, 0xa5, 0x97, 0x9c, 0x39, 0x0b, 0x1b, 0x41, + 0x18, 0x91, 0x79, 0x6f, 0x7d, 0x9d, 0x44, 0x24, 0x70, 0x49, 0xac, 0x1c, 0x3f, 0x56, 0x3f, 0xc7, + 0x0f, 0x7a, 0x17, 0x8c, 0xdd, 0x89, 0xc3, 0x60, 0x25, 0xf4, 0x02, 0x21, 0x82, 0xe8, 0x8e, 0xe3, + 0xf8, 0xfd, 0x9d, 0xe9, 0x31, 0x3a, 0xa2, 0xb2, 0x1d, 0xa7, 0xb0, 0xd0, 0x1c, 0x4c, 0xde, 0x79, + 0x65, 0xc5, 0x49, 0x0c, 0x57, 0x83, 0x74, 0x0a, 0xb0, 0x93, 0xad, 0x6b, 0xef, 0xcd, 0x00, 0x71, + 0x2f, 0xbe, 0xfd, 0x77, 0x4b, 0x70, 0x3a, 0xf3, 0x22, 0xa1, 0xef, 0x87, 0x9d, 0x84, 0xee, 0x89, + 0xd0, 0x97, 0x2d, 0x38, 0xde, 0x4a, 0x7b, 0x33, 0x62, 0xe1, 0x0b, 0x7f, 0x5f, 0x61, 0x3a, 0x22, + 0xe3, 0x2e, 0xa9, 0x4f, 0x89, 0x11, 0x3a, 0x9e, 0x01, 0xc4, 0xb8, 0xa7, 0x2f, 0xe8, 0x65, 0xa8, + 0xb5, 0x9c, 0x7b, 0x37, 0xdb, 0x4d, 0x27, 0x91, 0x7b, 0xd5, 0xfe, 0x2e, 0x86, 0x4e, 0xe2, 0xf9, + 0x33, 0x3c, 0xa8, 0x66, 0x66, 0x21, 0x48, 0x96, 0xa3, 0x46, 0x12, 0x79, 0xc1, 0x06, 0xf7, 0x80, + 0x2e, 0x49, 0x32, 0x58, 0x53, 0xb4, 0xbf, 0x64, 0x65, 0x95, 0x94, 0x1a, 0x9d, 0xc8, 0x49, 0xc8, + 0x46, 0x17, 0x7d, 0x0c, 0x2a, 0x74, 0xdf, 0x28, 0x47, 0xe5, 0x76, 0x91, 0x9a, 0xd3, 0xf8, 0x12, + 0x5a, 0x89, 0xd2, 0x7f, 0x31, 0xe6, 0x4c, 0xed, 0x2f, 0xd7, 0xb2, 0xc6, 0x02, 0x0b, 0x09, 0xb8, + 0x08, 0xb0, 0x11, 0xae, 0x92, 0x56, 0xdb, 0xa7, 0xc3, 0x62, 0xb1, 0xd3, 0x1f, 0xe5, 0x47, 0xb9, + 0xa2, 0x20, 0xd8, 0xc0, 0x42, 0xdf, 0x67, 0x01, 0x6c, 0xc8, 0x39, 0x2f, 0x0d, 0x81, 0x9b, 0x45, + 0xbe, 0x8e, 0x5e, 0x51, 0xba, 0x2f, 0x8a, 0x21, 0x36, 0x98, 0xa3, 0xef, 0xb6, 0xa0, 0x9a, 0xc8, + 0xee, 0x73, 0xd5, 0xb8, 0x5a, 0x64, 0x4f, 0xe4, 0x4b, 0x6b, 0x9b, 0x48, 0x0d, 0x89, 0xe2, 0x8b, + 0xbe, 0xc7, 0x02, 0x88, 0xbb, 0x81, 0xbb, 0x12, 0xfa, 0x9e, 0xdb, 0x15, 0x1a, 0xf3, 0x56, 0xa1, + 0xbe, 0x1e, 0x45, 0xbd, 0x3e, 0x41, 0x47, 0x43, 0xff, 0xc7, 0x06, 0x67, 0xf4, 0x71, 0xa8, 0xc6, + 0x62, 0xba, 0x09, 0x1d, 0xb9, 0x5a, 0xac, 0xc7, 0x89, 0xd3, 0x16, 0xe2, 0x55, 0xfc, 0xc3, 0x8a, + 0x27, 0xfa, 0x61, 0x0b, 0x8e, 0xb5, 0xd3, 0x3e, 0x44, 0xa1, 0x0e, 0x8b, 0x93, 0x01, 0x19, 0x1f, + 0x25, 0xf7, 0xb6, 0x64, 0x1a, 0x71, 0xb6, 0x17, 0x54, 0x02, 0xea, 0x19, 0xbc, 0xdc, 0xe6, 0xfe, + 0xcc, 0x11, 0x2d, 0x01, 0xaf, 0x64, 0x81, 0xb8, 0x17, 0x1f, 0xad, 0xc0, 0x49, 0xda, 0xbb, 0x2e, + 0x37, 0x3f, 0xa5, 0x7a, 0x89, 0x99, 0x32, 0xac, 0xd6, 0xcf, 0x8a, 0x19, 0xc2, 0x0e, 0x42, 0xb2, + 0x38, 0x38, 0xf7, 0x49, 0xf4, 0x9b, 0x16, 0x9c, 0xf5, 0x98, 0x1a, 0x30, 0xbd, 0xf9, 0x5a, 0x23, + 0x88, 0x23, 0x7b, 0x52, 0xa8, 0xac, 0xe8, 0xa7, 0x7e, 0xea, 0xdf, 0x20, 0xde, 0xe0, 0xec, 0xc2, + 0x2e, 0x5d, 0xc2, 0xbb, 0x76, 0x18, 0x7d, 0x33, 0x8c, 0xcb, 0x75, 0xb1, 0x42, 0x45, 0x30, 0x53, + 0xb4, 0xb5, 0xfa, 0xe4, 0xfd, 0x9d, 0xe9, 0xf1, 0x55, 0x13, 0x80, 0xd3, 0x78, 0xf6, 0x5f, 0x0c, + 0xa5, 0x8e, 0x90, 0x94, 0x83, 0x93, 0x89, 0x1b, 0x57, 0xfa, 0x7f, 0xa4, 0xf4, 0x2c, 0x54, 0xdc, + 0x28, 0xef, 0x92, 0x16, 0x37, 0xaa, 0x29, 0xc6, 0x06, 0x73, 0x6a, 0x94, 0x4e, 0x3a, 0x59, 0x37, + 0xaa, 0x90, 0x80, 0x2f, 0x17, 0xd9, 0xa5, 0xde, 0x03, 0xbf, 0xd3, 0xa2, 0x6b, 0x93, 0x3d, 0x20, + 0xdc, 0xdb, 0x25, 0xf4, 0x9d, 0x50, 0x8b, 0x54, 0x8c, 0x4c, 0xb9, 0x88, 0xad, 0x9a, 0x9c, 0x36, + 0xa2, 0x3b, 0xea, 0x74, 0x48, 0x47, 0xc3, 0x68, 0x8e, 0xe8, 0x3d, 0x30, 0xa1, 0xfe, 0xcc, 0xb1, + 0x63, 0x21, 0x2a, 0x14, 0xcb, 0xf5, 0x27, 0xc4, 0x53, 0x13, 0x38, 0x05, 0xc5, 0x19, 0x6c, 0x14, + 0xc1, 0x30, 0x8f, 0xdb, 0x14, 0x62, 0xec, 0x80, 0xdb, 0x1d, 0x33, 0xf8, 0x53, 0xfb, 0x08, 0x79, + 0x2b, 0x16, 0x9c, 0xec, 0xcf, 0x96, 0x52, 0x27, 0x7d, 0x86, 0xbc, 0x1b, 0xe0, 0x14, 0xf3, 0x0b, + 0x16, 0x8c, 0x46, 0xa1, 0xef, 0x7b, 0xc1, 0x06, 0x95, 0xcd, 0xc2, 0xc0, 0xf8, 0xe0, 0xa1, 0xe8, + 0x78, 0x21, 0x84, 0xd9, 0x6e, 0x00, 0x6b, 0x9e, 0xd8, 0xec, 0x00, 0x7a, 0x09, 0xc6, 0x9b, 0xc4, + 0x27, 0xf4, 0xd9, 0xe5, 0x88, 0xee, 0xe3, 0xb8, 0xd7, 0x5c, 0xc5, 0xc9, 0xcc, 0x9b, 0x40, 0x9c, + 0xc6, 0xb5, 0xff, 0xc8, 0x82, 0xa9, 0x7e, 0x0a, 0x08, 0x11, 0x78, 0x4a, 0x4a, 0x57, 0xf5, 0x15, + 0x97, 0x03, 0x49, 0x4f, 0xd8, 0x10, 0xcf, 0x08, 0x3e, 0x4f, 0xad, 0xf4, 0x47, 0xc5, 0xbb, 0xd1, + 0x41, 0x1f, 0x80, 0xe3, 0xc6, 0xa0, 0xc4, 0x6a, 0x54, 0x6b, 0xf5, 0x19, 0x6a, 0xf1, 0xcd, 0x66, + 0x60, 0x0f, 0x76, 0xa6, 0x9f, 0xc8, 0xb6, 0x09, 0x0d, 0xd9, 0x43, 0xc7, 0xfe, 0xf1, 0x9e, 0x4f, + 0xad, 0x8c, 0x9b, 0xd7, 0xad, 0x1e, 0xf7, 0xc9, 0xfb, 0x0e, 0xc3, 0xa0, 0x60, 0x8e, 0x16, 0x15, + 0x94, 0xd2, 0x1f, 0xe7, 0x11, 0x06, 0x31, 0xd8, 0xbf, 0x31, 0x04, 0xbb, 0xf4, 0x6c, 0x80, 0xdd, + 0xca, 0xbe, 0x4f, 0x95, 0x3f, 0x6f, 0xa9, 0xe3, 0x43, 0x2e, 0xb4, 0x9a, 0x87, 0x35, 0xf6, 0x7c, + 0xc3, 0x18, 0xf3, 0x40, 0x1a, 0x25, 0x12, 0xd2, 0x07, 0x95, 0xe8, 0x2b, 0x56, 0xfa, 0x00, 0x94, + 0x07, 0x8f, 0x7a, 0x87, 0xd6, 0x27, 0xe3, 0x54, 0x95, 0x77, 0x4c, 0x9f, 0xc5, 0xf5, 0x3b, 0x6f, + 0x9d, 0x01, 0x58, 0xf7, 0x02, 0xc7, 0xf7, 0x5e, 0xa5, 0xdb, 0xc1, 0x0a, 0xb3, 0x68, 0x98, 0x89, + 0x78, 0x59, 0xb5, 0x62, 0x03, 0xe3, 0xcc, 0x5f, 0x87, 0x51, 0xe3, 0xcd, 0x73, 0xe2, 0x7f, 0x4e, + 0x9a, 0xf1, 0x3f, 0x35, 0x23, 0x6c, 0xe7, 0xcc, 0x7b, 0xe0, 0x78, 0xb6, 0x83, 0xfb, 0x79, 0xde, + 0xfe, 0x3f, 0x23, 0xd9, 0x13, 0xc9, 0x55, 0x12, 0xb5, 0x68, 0xd7, 0xde, 0xf0, 0xe4, 0xbd, 0xe1, + 0xc9, 0x7b, 0xc3, 0x93, 0x67, 0x1e, 0xc6, 0x08, 0x2f, 0xd5, 0xc8, 0x11, 0x79, 0xa9, 0x52, 0x7e, + 0xb7, 0x6a, 0xe1, 0x7e, 0x37, 0xfb, 0x33, 0x3d, 0x47, 0x15, 0xab, 0x11, 0x21, 0x28, 0x84, 0x4a, + 0x10, 0x36, 0x89, 0x34, 0xea, 0xaf, 0x15, 0x63, 0xa1, 0xde, 0x08, 0x9b, 0x46, 0x58, 0x3e, 0xfd, + 0x17, 0x63, 0xce, 0xc7, 0xfe, 0xdf, 0x3d, 0x86, 0xcd, 0x6d, 0xe6, 0x27, 0xda, 0x26, 0x41, 0x82, + 0xae, 0xa7, 0xac, 0xbc, 0x6f, 0xce, 0x9c, 0xba, 0xbf, 0xb5, 0x5f, 0x02, 0xd6, 0x5d, 0x4a, 0x61, + 0x86, 0x91, 0x30, 0x0c, 0xc2, 0xcf, 0x5b, 0x30, 0xe1, 0xa4, 0x38, 0x15, 0x96, 0x51, 0x63, 0x9e, + 0x98, 0x28, 0x83, 0x3a, 0x63, 0x2b, 0x66, 0x78, 0xdb, 0x9f, 0x1e, 0x86, 0xd4, 0xc6, 0x81, 0x4f, + 0xf8, 0x6f, 0x84, 0x91, 0x88, 0xb4, 0xc3, 0x9b, 0x78, 0x51, 0xbc, 0xb4, 0x4e, 0xeb, 0xe2, 0xcd, + 0x58, 0xc2, 0xa9, 0xb2, 0x6f, 0x3b, 0xc9, 0xa6, 0xd0, 0xe2, 0x4a, 0xd9, 0xaf, 0x38, 0xc9, 0x26, + 0x66, 0x10, 0x6a, 0xf3, 0x27, 0xa9, 0xa0, 0x07, 0x71, 0xb8, 0xaf, 0xba, 0x98, 0x0e, 0x89, 0xc0, + 0x19, 0x6c, 0xf4, 0x0a, 0x0c, 0x6d, 0x12, 0xbf, 0x25, 0xe6, 0x7c, 0xa3, 0xb8, 0x61, 0x62, 0xef, + 0x7a, 0x95, 0xf8, 0x2d, 0xae, 0x02, 0xe8, 0x2f, 0xcc, 0x58, 0xd1, 0x05, 0x5f, 0xdb, 0xea, 0xc4, + 0x49, 0xd8, 0xf2, 0x5e, 0x95, 0x3e, 0xed, 0xf7, 0x15, 0xcc, 0xf8, 0xba, 0xa4, 0xcf, 0x9d, 0x87, + 0xea, 0x2f, 0xd6, 0x9c, 0x59, 0x3f, 0x9a, 0x5e, 0xc4, 0xd6, 0x4a, 0x57, 0xb8, 0xa6, 0x8b, 0xee, + 0xc7, 0xbc, 0xa4, 0xcf, 0xfb, 0xa1, 0xfe, 0x62, 0xcd, 0x19, 0x75, 0x95, 0xe0, 0x19, 0x65, 0x7d, + 0xb8, 0x59, 0x70, 0x1f, 0xb8, 0xd0, 0xc9, 0x15, 0x40, 0xcf, 0x40, 0xc5, 0xdd, 0x74, 0xa2, 0x64, + 0x6a, 0x8c, 0x4d, 0x1a, 0xb5, 0x7c, 0xe7, 0x68, 0x23, 0xe6, 0x30, 0xf4, 0x34, 0x94, 0x23, 0xb2, + 0xce, 0x82, 0xd4, 0x8d, 0xf0, 0x38, 0x4c, 0xd6, 0x31, 0x6d, 0x57, 0x06, 0xe9, 0x44, 0xdf, 0xb8, + 0xc9, 0x1f, 0x2d, 0xa5, 0x2d, 0xda, 0xf4, 0xc8, 0xf0, 0xf5, 0xe0, 0x76, 0xa2, 0x58, 0xba, 0x42, + 0x8d, 0xf5, 0xc0, 0x9a, 0xb1, 0x84, 0xa3, 0x4f, 0x5a, 0x30, 0x72, 0x27, 0x0e, 0x83, 0x40, 0x2d, + 0xec, 0x5b, 0x05, 0x0f, 0xd6, 0x35, 0x4e, 0x5d, 0xf7, 0x41, 0x34, 0x60, 0xc9, 0x97, 0x76, 0x97, + 0xdc, 0x73, 0xfd, 0x4e, 0xb3, 0x27, 0x26, 0xea, 0x12, 0x6f, 0xc6, 0x12, 0x4e, 0x51, 0xbd, 0x80, + 0xa3, 0x0e, 0xa5, 0x51, 0x17, 0x02, 0x81, 0x2a, 0xe0, 0xf6, 0x4f, 0x57, 0xe1, 0x54, 0xee, 0xf2, + 0xa1, 0xb6, 0x26, 0xb3, 0xe6, 0x2e, 0x7b, 0x3e, 0x91, 0xd1, 0x80, 0xcc, 0xd6, 0xbc, 0xa5, 0x5a, + 0xb1, 0x81, 0x81, 0xbe, 0x0b, 0xa0, 0xed, 0x44, 0x4e, 0x8b, 0xa8, 0xa3, 0x8a, 0x03, 0x9b, 0x74, + 0xb4, 0x1f, 0x2b, 0x92, 0xa6, 0x76, 0xd7, 0xa8, 0xa6, 0x18, 0x1b, 0x2c, 0xd1, 0x0b, 0x30, 0x1a, + 0x11, 0x9f, 0x38, 0x31, 0xcb, 0x82, 0xc8, 0x26, 0x8b, 0x61, 0x0d, 0xc2, 0x26, 0x1e, 0x7a, 0x56, + 0x05, 0x4e, 0x0e, 0xa5, 0xa3, 0x8a, 0xd2, 0xc1, 0x93, 0xe8, 0x8b, 0x16, 0x4c, 0xac, 0x7b, 0x3e, + 0xd1, 0xdc, 0x45, 0x6a, 0xd7, 0xf2, 0xc1, 0x5f, 0xf2, 0xb2, 0x49, 0x57, 0xcb, 0xd0, 0x54, 0x73, + 0x8c, 0x33, 0xec, 0xe9, 0x67, 0xde, 0x26, 0x11, 0x13, 0xbe, 0xc3, 0xe9, 0xcf, 0x7c, 0x8b, 0x37, + 0x63, 0x09, 0x47, 0xb3, 0x70, 0xac, 0xed, 0xc4, 0xf1, 0x5c, 0x44, 0x9a, 0x24, 0x48, 0x3c, 0xc7, + 0xe7, 0xb9, 0x54, 0x55, 0x9d, 0x55, 0xb0, 0x92, 0x06, 0xe3, 0x2c, 0x3e, 0x7a, 0x3f, 0x3c, 0xc9, + 0x7d, 0x81, 0x4b, 0x5e, 0x1c, 0x7b, 0xc1, 0x86, 0x9e, 0x06, 0xc2, 0x25, 0x3a, 0x2d, 0x48, 0x3d, + 0xb9, 0x90, 0x8f, 0x86, 0xfb, 0x3d, 0x8f, 0x9e, 0x87, 0x6a, 0xbc, 0xe5, 0xb5, 0xe7, 0xa2, 0x66, + 0xcc, 0xce, 0x01, 0xab, 0xda, 0x01, 0xdf, 0x10, 0xed, 0x58, 0x61, 0x20, 0x17, 0xc6, 0xf8, 0x27, + 0xe1, 0x91, 0x9f, 0x42, 0x82, 0xbe, 0xbd, 0xaf, 0x05, 0x23, 0x72, 0xad, 0x67, 0xb0, 0x73, 0xf7, + 0x92, 0x3c, 0x95, 0xe4, 0x87, 0x68, 0xb7, 0x0c, 0x32, 0x38, 0x45, 0x34, 0xbd, 0x99, 0x1d, 0x1d, + 0x60, 0x33, 0xfb, 0x02, 0x8c, 0x6e, 0x75, 0xd6, 0x88, 0x18, 0x79, 0x21, 0xd8, 0xd4, 0xec, 0xbb, + 0xae, 0x41, 0xd8, 0xc4, 0x63, 0x41, 0xb7, 0x6d, 0x4f, 0xfc, 0x8b, 0xa7, 0xc6, 0x8d, 0xa0, 0xdb, + 0x95, 0x05, 0xd9, 0x8c, 0x4d, 0x1c, 0xda, 0x35, 0x3a, 0x16, 0xab, 0x24, 0x66, 0x39, 0x35, 0x74, + 0xb8, 0x54, 0xd7, 0x1a, 0x12, 0x80, 0x35, 0x0e, 0x5a, 0x81, 0x93, 0xf4, 0x4f, 0x83, 0xe5, 0x9a, + 0xdf, 0x72, 0x7c, 0xaf, 0xc9, 0x23, 0x40, 0x8f, 0xa5, 0x3d, 0xd9, 0x8d, 0x1c, 0x1c, 0x9c, 0xfb, + 0xa4, 0xfd, 0x23, 0xa5, 0xb4, 0x65, 0x65, 0x8a, 0x30, 0x14, 0x53, 0x41, 0x95, 0xdc, 0x72, 0x22, + 0x69, 0xe9, 0x1d, 0x30, 0x21, 0x4e, 0xd0, 0xbd, 0xe5, 0x44, 0xa6, 0xc8, 0x63, 0x0c, 0xb0, 0xe4, + 0x84, 0xee, 0xc0, 0x50, 0xe2, 0x3b, 0x05, 0xa5, 0xdb, 0x1a, 0x1c, 0xb5, 0xfb, 0x6f, 0x71, 0x36, + 0xc6, 0x8c, 0x07, 0x3a, 0x4b, 0xb7, 0xad, 0x6b, 0xf2, 0x4c, 0x55, 0xec, 0x34, 0xd7, 0x62, 0xcc, + 0x5a, 0xed, 0xbf, 0x35, 0x9e, 0xa3, 0x75, 0x94, 0x21, 0x80, 0x2e, 0x02, 0xd0, 0x49, 0xb3, 0x12, + 0x91, 0x75, 0xef, 0x9e, 0x30, 0xc4, 0x94, 0x64, 0xbb, 0xa1, 0x20, 0xd8, 0xc0, 0x92, 0xcf, 0x34, + 0x3a, 0xeb, 0xf4, 0x99, 0x52, 0xef, 0x33, 0x1c, 0x82, 0x0d, 0x2c, 0xf4, 0x2e, 0x18, 0xf6, 0x5a, + 0xce, 0x86, 0x8a, 0x07, 0x3f, 0x4b, 0x45, 0xda, 0x02, 0x6b, 0x79, 0xb0, 0x33, 0x3d, 0xa1, 0x3a, + 0xc4, 0x9a, 0xb0, 0xc0, 0x45, 0x3f, 0x6e, 0xc1, 0x98, 0x1b, 0xb6, 0x5a, 0x61, 0xc0, 0xfd, 0x06, + 0xc2, 0x09, 0x72, 0xe7, 0xb0, 0xcc, 0xa4, 0x99, 0x39, 0x83, 0x19, 0xf7, 0x82, 0xa8, 0xbc, 0x60, + 0x13, 0x84, 0x53, 0xbd, 0x32, 0x25, 0x5f, 0x65, 0x0f, 0xc9, 0xf7, 0xb3, 0x16, 0x4c, 0xf2, 0x67, + 0x0d, 0x77, 0x86, 0xc8, 0x6a, 0x0d, 0x0f, 0xf9, 0xb5, 0x7a, 0x3c, 0x3c, 0xca, 0xad, 0xdf, 0x03, + 0xc7, 0xbd, 0x9d, 0x44, 0x57, 0x60, 0x72, 0x3d, 0x8c, 0x5c, 0x62, 0x0e, 0x84, 0x10, 0xdb, 0x8a, + 0xd0, 0xe5, 0x2c, 0x02, 0xee, 0x7d, 0x06, 0xdd, 0x82, 0x27, 0x8c, 0x46, 0x73, 0x1c, 0xb8, 0xe4, + 0x3e, 0x27, 0xa8, 0x3d, 0x71, 0x39, 0x17, 0x0b, 0xf7, 0x79, 0x3a, 0x2d, 0x24, 0x6b, 0x03, 0x08, + 0xc9, 0x8f, 0xc0, 0x69, 0xb7, 0x77, 0x64, 0xb6, 0xe3, 0xce, 0x5a, 0xcc, 0xe5, 0x78, 0xb5, 0xfe, + 0x66, 0x41, 0xe0, 0xf4, 0x5c, 0x3f, 0x44, 0xdc, 0x9f, 0x06, 0xfa, 0x18, 0x54, 0x23, 0xc2, 0xbe, + 0x4a, 0x2c, 0x52, 0x3c, 0x0f, 0xe8, 0xe6, 0xd1, 0x16, 0x3c, 0x27, 0xab, 0x35, 0x93, 0x68, 0x88, + 0xb1, 0xe2, 0x88, 0xee, 0xc2, 0x48, 0x9b, 0xee, 0x0f, 0x45, 0xae, 0xe6, 0x81, 0xb7, 0x7f, 0x8a, + 0x39, 0x3b, 0x34, 0x33, 0x6a, 0x6b, 0x70, 0x26, 0x58, 0x72, 0xa3, 0xb6, 0x9a, 0x1b, 0xb6, 0xda, + 0x61, 0x40, 0x82, 0x44, 0x2a, 0x91, 0x09, 0x7e, 0xb2, 0x25, 0x5b, 0xb1, 0x81, 0xd1, 0xa3, 0xcb, + 0x35, 0xda, 0xd4, 0xe4, 0x2e, 0xba, 0xdc, 0xa0, 0xd6, 0xef, 0x79, 0xaa, 0x6c, 0x98, 0x3f, 0xf5, + 0xb6, 0x97, 0x6c, 0x86, 0x9d, 0x44, 0xba, 0x07, 0x84, 0xa2, 0x52, 0xca, 0x66, 0x31, 0x07, 0x07, + 0xe7, 0x3e, 0x99, 0xd5, 0xac, 0xc7, 0x1e, 0x4e, 0xb3, 0x1e, 0x1f, 0x40, 0xb3, 0x36, 0xe0, 0x14, + 0xeb, 0x81, 0xb0, 0x92, 0xa5, 0xb7, 0x36, 0x9e, 0x42, 0xac, 0xf3, 0x2a, 0xcd, 0x69, 0x31, 0x0f, + 0x09, 0xe7, 0x3f, 0x7b, 0xe6, 0xdb, 0x61, 0xb2, 0x47, 0xc8, 0xed, 0xcb, 0x13, 0x3b, 0x0f, 0x4f, + 0xe4, 0x8b, 0x93, 0x7d, 0xf9, 0x63, 0x7f, 0x3a, 0x93, 0x81, 0x60, 0x6c, 0xd1, 0x06, 0xf0, 0xed, + 0x3b, 0x50, 0x26, 0xc1, 0xb6, 0xd0, 0xae, 0x97, 0x0f, 0x36, 0xab, 0x2f, 0x05, 0xdb, 0x5c, 0x1a, + 0x32, 0x07, 0xe6, 0xa5, 0x60, 0x1b, 0x53, 0xda, 0xe8, 0x07, 0xad, 0xd4, 0x06, 0x82, 0x9f, 0x08, + 0x7c, 0xf8, 0x50, 0xf6, 0xa4, 0x03, 0xef, 0x29, 0xec, 0x7f, 0x5d, 0x82, 0xf3, 0x7b, 0x11, 0x19, + 0x60, 0xf8, 0x9e, 0x81, 0xe1, 0x98, 0xc5, 0x14, 0x09, 0x75, 0x35, 0x4a, 0x57, 0x31, 0x8f, 0x32, + 0xfa, 0x08, 0x16, 0x20, 0xe4, 0x43, 0xb9, 0xe5, 0xb4, 0x85, 0xa3, 0x78, 0xe1, 0xa0, 0x69, 0x9c, + 0xf4, 0xbf, 0xe3, 0x2f, 0x39, 0x6d, 0x3e, 0xe7, 0x8d, 0x06, 0x4c, 0xd9, 0xa0, 0x04, 0x2a, 0x4e, + 0x14, 0x39, 0x32, 0x80, 0xe5, 0x7a, 0x31, 0xfc, 0x66, 0x29, 0x49, 0x7e, 0xfe, 0x9f, 0x6a, 0xc2, + 0x9c, 0x99, 0xfd, 0xc3, 0xd5, 0x54, 0xce, 0x1f, 0x8b, 0x4a, 0x8a, 0x61, 0x58, 0xf8, 0x87, 0xad, + 0xa2, 0xb3, 0x67, 0x79, 0x52, 0x3d, 0xf3, 0x40, 0x88, 0xa2, 0x27, 0x82, 0x15, 0xfa, 0x9c, 0xc5, + 0x4a, 0x8b, 0xc8, 0x44, 0x4a, 0xb1, 0xab, 0x3f, 0x9c, 0x4a, 0x27, 0x66, 0xc1, 0x12, 0xd9, 0x88, + 0x4d, 0xee, 0xa2, 0x8c, 0x12, 0xdb, 0xcd, 0xf4, 0x96, 0x51, 0x62, 0xbb, 0x13, 0x09, 0x47, 0xf7, + 0x72, 0xa2, 0x8f, 0x0a, 0xa8, 0x38, 0x31, 0x40, 0xbc, 0xd1, 0x57, 0x2c, 0x98, 0xf4, 0xb2, 0x61, + 0x24, 0x62, 0x0f, 0x7c, 0xbb, 0x18, 0x67, 0x6e, 0x6f, 0x94, 0x8a, 0x32, 0x74, 0x7a, 0x40, 0xb8, + 0xb7, 0x33, 0xa8, 0x09, 0x43, 0x5e, 0xb0, 0x1e, 0x0a, 0xf3, 0xae, 0x7e, 0xb0, 0x4e, 0x2d, 0x04, + 0xeb, 0xa1, 0x5e, 0xcd, 0xf4, 0x1f, 0x66, 0xd4, 0xd1, 0x22, 0x9c, 0x94, 0x99, 0x5d, 0x57, 0xbd, + 0x38, 0x09, 0xa3, 0xee, 0xa2, 0xd7, 0xf2, 0x12, 0x66, 0x9a, 0x95, 0xeb, 0x53, 0x54, 0xbd, 0xe1, + 0x1c, 0x38, 0xce, 0x7d, 0x0a, 0xbd, 0x0a, 0x23, 0x32, 0x74, 0xa3, 0x5a, 0x84, 0x3f, 0xa1, 0x77, + 0xfe, 0xab, 0xc9, 0xd4, 0x10, 0xb1, 0x1b, 0x92, 0x21, 0xfa, 0xac, 0x05, 0x13, 0xfc, 0xf7, 0xd5, + 0x6e, 0x93, 0x67, 0x9a, 0xd6, 0x8a, 0xf0, 0x5b, 0x37, 0x52, 0x34, 0xeb, 0xe8, 0xfe, 0xce, 0xf4, + 0x44, 0xba, 0x0d, 0x67, 0xf8, 0xda, 0xff, 0x78, 0x0c, 0x7a, 0x83, 0x5d, 0xd2, 0x91, 0x2d, 0xd6, + 0x91, 0x47, 0xb6, 0xdc, 0x81, 0xa1, 0x58, 0x07, 0x78, 0x14, 0xb0, 0xcc, 0x04, 0x57, 0x7d, 0xfe, + 0xde, 0x0d, 0x5c, 0xcc, 0x78, 0xa0, 0x8e, 0x8a, 0x82, 0x29, 0x17, 0x74, 0xe4, 0x3f, 0x48, 0x20, + 0x0c, 0xba, 0x07, 0x23, 0x9b, 0x7c, 0x3a, 0x8a, 0xbd, 0xde, 0xd2, 0x41, 0xc7, 0x37, 0x35, 0xc7, + 0xf5, 0xe4, 0x13, 0x0d, 0x58, 0xb2, 0x63, 0x81, 0x94, 0x46, 0xa8, 0x17, 0x17, 0x24, 0xc5, 0x25, + 0xcd, 0x0e, 0x1e, 0xe7, 0xf5, 0x51, 0x18, 0x8b, 0x88, 0x1b, 0x06, 0xae, 0xe7, 0x93, 0xe6, 0xac, + 0x3c, 0x09, 0xdc, 0x4f, 0x3a, 0x24, 0xf3, 0x26, 0x61, 0x83, 0x06, 0x4e, 0x51, 0x64, 0xeb, 0x4c, + 0xd5, 0x4f, 0xa0, 0x1f, 0x84, 0x88, 0x83, 0x8f, 0xc5, 0x82, 0xaa, 0x35, 0x30, 0x9a, 0x7c, 0x9d, + 0xa5, 0xdb, 0x70, 0x86, 0x2f, 0xfa, 0x00, 0x40, 0xb8, 0xc6, 0xa3, 0x25, 0x67, 0x13, 0x71, 0x0a, + 0xb2, 0x9f, 0x57, 0x9d, 0xe0, 0x39, 0xd7, 0x92, 0x02, 0x36, 0xa8, 0xa1, 0xeb, 0x00, 0x7c, 0xe5, + 0xac, 0x76, 0xdb, 0x72, 0x43, 0x28, 0xf3, 0x59, 0xa1, 0xa1, 0x20, 0x0f, 0x76, 0xa6, 0x7b, 0x7d, + 0xce, 0xec, 0x34, 0xcd, 0x78, 0x1c, 0x7d, 0x07, 0x8c, 0xc4, 0x9d, 0x56, 0xcb, 0x51, 0x67, 0x24, + 0x05, 0x66, 0x71, 0x73, 0xba, 0x86, 0x60, 0xe4, 0x0d, 0x58, 0x72, 0x44, 0x77, 0xa8, 0x88, 0x17, + 0x12, 0x8a, 0xaf, 0x22, 0x6e, 0xa1, 0x70, 0x4f, 0xe0, 0xbb, 0xe5, 0x2e, 0x06, 0xe7, 0xe0, 0x3c, + 0xd8, 0x99, 0x7e, 0x22, 0xdd, 0xbe, 0x18, 0x8a, 0xbc, 0xea, 0x5c, 0x9a, 0xe8, 0x9a, 0x2c, 0xd4, + 0x46, 0x5f, 0x5b, 0x56, 0xf9, 0x79, 0x4e, 0x17, 0x6a, 0x63, 0xcd, 0xfd, 0xc7, 0xcc, 0x7c, 0x18, + 0x2d, 0xc1, 0x09, 0x37, 0x0c, 0x92, 0x28, 0xf4, 0x7d, 0x5e, 0xcc, 0x91, 0xef, 0xcd, 0xf9, 0x19, + 0xca, 0x53, 0xa2, 0xdb, 0x27, 0xe6, 0x7a, 0x51, 0x70, 0xde, 0x73, 0xd4, 0x26, 0xcf, 0xea, 0x87, + 0x89, 0x42, 0xe2, 0x0a, 0x52, 0x34, 0x85, 0x84, 0x52, 0x6e, 0xef, 0x3d, 0x34, 0x45, 0x90, 0x3e, + 0x5d, 0x16, 0x5f, 0xec, 0x5d, 0x30, 0x46, 0xee, 0x25, 0x24, 0x0a, 0x1c, 0xff, 0x26, 0x5e, 0x94, + 0x07, 0x16, 0x6c, 0x61, 0x5e, 0x32, 0xda, 0x71, 0x0a, 0x0b, 0xd9, 0xca, 0x4b, 0x66, 0x14, 0x30, + 0xe0, 0x5e, 0x32, 0xe9, 0x13, 0xb3, 0x7f, 0xaa, 0x9c, 0xb2, 0x59, 0x1f, 0xc9, 0x59, 0x36, 0x2b, + 0xab, 0x25, 0xeb, 0x8f, 0x31, 0x80, 0xd8, 0x8b, 0x15, 0xc9, 0x59, 0x85, 0x0b, 0x2e, 0x9b, 0x8c, + 0x70, 0x9a, 0x2f, 0xda, 0x82, 0xca, 0x66, 0x18, 0x27, 0x72, 0x87, 0x76, 0xc0, 0xcd, 0xe0, 0xd5, + 0x30, 0x4e, 0x98, 0xa1, 0xa5, 0x5e, 0x9b, 0xb6, 0xc4, 0x98, 0xf3, 0xa0, 0x7b, 0xff, 0x78, 0xd3, + 0x89, 0x9a, 0xa9, 0xb8, 0x52, 0x65, 0x4f, 0x37, 0x34, 0x08, 0x9b, 0x78, 0xf6, 0x1f, 0x5b, 0xa9, + 0x53, 0xad, 0xc3, 0x3a, 0xf6, 0xff, 0x84, 0x95, 0x2e, 0xa9, 0x50, 0x2a, 0x62, 0xeb, 0x66, 0x96, + 0x15, 0xd9, 0xb3, 0x3a, 0x83, 0xfd, 0x83, 0x16, 0x8c, 0xd4, 0x1d, 0x77, 0x2b, 0x5c, 0x5f, 0x47, + 0xcf, 0x43, 0xb5, 0xd9, 0x89, 0xcc, 0xea, 0x0e, 0xca, 0x59, 0x35, 0x2f, 0xda, 0xb1, 0xc2, 0xa0, + 0x53, 0x7f, 0xdd, 0x71, 0x65, 0x71, 0x91, 0x32, 0x9f, 0xfa, 0x97, 0x59, 0x0b, 0x16, 0x10, 0x3a, + 0xfc, 0x2d, 0xe7, 0x9e, 0x7c, 0x38, 0x7b, 0xa4, 0xb6, 0xa4, 0x41, 0xd8, 0xc4, 0xb3, 0x7f, 0xc5, + 0x82, 0xa9, 0xba, 0x13, 0x7b, 0xee, 0x6c, 0x27, 0xd9, 0xac, 0x7b, 0xc9, 0x5a, 0xc7, 0xdd, 0x22, + 0x09, 0x2f, 0x42, 0x43, 0x7b, 0xd9, 0x89, 0xe9, 0x0a, 0x54, 0x3b, 0x66, 0xd5, 0xcb, 0x9b, 0xa2, + 0x1d, 0x2b, 0x0c, 0xf4, 0x2a, 0x8c, 0xb6, 0x9d, 0x38, 0xbe, 0x1b, 0x46, 0x4d, 0x4c, 0xd6, 0x8b, + 0x29, 0x53, 0xd5, 0x20, 0x6e, 0x44, 0x12, 0x4c, 0xd6, 0x45, 0x64, 0x8e, 0xa6, 0x8f, 0x4d, 0x66, + 0xf6, 0xf7, 0x59, 0x70, 0xb2, 0x4e, 0x9c, 0x88, 0x44, 0xac, 0xaa, 0x95, 0x7a, 0x11, 0xf4, 0x0a, + 0x54, 0x13, 0xda, 0x42, 0x7b, 0x64, 0x15, 0xdb, 0x23, 0x16, 0x53, 0xb3, 0x2a, 0x88, 0x63, 0xc5, + 0xc6, 0xfe, 0x82, 0x05, 0xa7, 0xf3, 0xfa, 0x32, 0xe7, 0x87, 0x9d, 0xe6, 0xa3, 0xe8, 0xd0, 0xdf, + 0xb1, 0x60, 0x8c, 0x1d, 0xd7, 0xcf, 0x93, 0xc4, 0xf1, 0xfc, 0x9e, 0x5a, 0x9d, 0xd6, 0x80, 0xb5, + 0x3a, 0xcf, 0xc3, 0xd0, 0x66, 0xd8, 0x22, 0xd9, 0x50, 0x93, 0xab, 0x61, 0x8b, 0x60, 0x06, 0x41, + 0xef, 0xa0, 0x93, 0xd0, 0x0b, 0x12, 0x87, 0x2e, 0x47, 0x79, 0x9c, 0x71, 0x8c, 0x4f, 0x40, 0xd5, + 0x8c, 0x4d, 0x1c, 0xfb, 0x5f, 0xd6, 0x60, 0x44, 0x04, 0x84, 0x0d, 0x5c, 0x14, 0x49, 0x7a, 0x71, + 0x4a, 0x7d, 0xbd, 0x38, 0x31, 0x0c, 0xbb, 0xac, 0xb0, 0xb2, 0xb0, 0xd0, 0xaf, 0x17, 0x12, 0x41, + 0xc8, 0x6b, 0x35, 0xeb, 0x6e, 0xf1, 0xff, 0x58, 0xb0, 0x42, 0xaf, 0x59, 0x70, 0xcc, 0x0d, 0x83, + 0x80, 0xb8, 0xda, 0x76, 0x1c, 0x2a, 0x62, 0x83, 0x30, 0x97, 0x26, 0xaa, 0x4f, 0x82, 0x33, 0x00, + 0x9c, 0x65, 0x8f, 0x5e, 0x82, 0x71, 0x3e, 0x66, 0xb7, 0x52, 0x67, 0x30, 0xba, 0x2a, 0xa3, 0x09, + 0xc4, 0x69, 0x5c, 0x34, 0xc3, 0xcf, 0xb2, 0x44, 0x49, 0xc3, 0x61, 0xed, 0xaa, 0x36, 0x8a, 0x19, + 0x1a, 0x18, 0x28, 0x02, 0x14, 0x91, 0xf5, 0x88, 0xc4, 0x9b, 0x22, 0x60, 0x8e, 0xd9, 0xad, 0x23, + 0x0f, 0x57, 0xb1, 0x04, 0xf7, 0x50, 0xc2, 0x39, 0xd4, 0xd1, 0x96, 0x70, 0x23, 0x54, 0x8b, 0x90, + 0xe7, 0xe2, 0x33, 0xf7, 0xf5, 0x26, 0x4c, 0x43, 0x85, 0xa9, 0x2e, 0x66, 0x2f, 0x97, 0x79, 0x96, + 0x2c, 0x53, 0x6c, 0x98, 0xb7, 0xa3, 0x79, 0x38, 0x9e, 0x29, 0x13, 0x19, 0x8b, 0xb3, 0x12, 0x95, + 0x11, 0x99, 0x29, 0x30, 0x19, 0xe3, 0x9e, 0x27, 0x4c, 0x17, 0xd3, 0xe8, 0x1e, 0x2e, 0xa6, 0xae, + 0x0a, 0xcb, 0xe6, 0xa7, 0x18, 0xef, 0x2d, 0x64, 0x00, 0x06, 0x8a, 0xc1, 0xfe, 0x81, 0x4c, 0x0c, + 0xf6, 0x38, 0xeb, 0xc0, 0xad, 0x62, 0x3a, 0xb0, 0xff, 0x80, 0xeb, 0x47, 0x19, 0x40, 0xfd, 0xbf, + 0x2c, 0x90, 0xdf, 0x75, 0xce, 0x71, 0x37, 0x09, 0x9d, 0x32, 0x39, 0xa9, 0x36, 0xd6, 0xbe, 0x52, + 0x6d, 0x2e, 0x40, 0x8d, 0x8e, 0x13, 0x7f, 0x94, 0xeb, 0x7d, 0xe5, 0x01, 0x99, 0x5d, 0x59, 0x10, + 0x4f, 0x69, 0x1c, 0x14, 0xc2, 0xa4, 0xef, 0xc4, 0x09, 0xeb, 0x41, 0xa3, 0x1b, 0xb8, 0x0f, 0x59, + 0x2f, 0x88, 0xa5, 0xdd, 0x2d, 0x66, 0x09, 0xe1, 0x5e, 0xda, 0xf6, 0xbf, 0xad, 0xc0, 0x78, 0x4a, + 0x32, 0xee, 0xd3, 0x60, 0x78, 0x1e, 0xaa, 0x52, 0x87, 0x67, 0xab, 0xa6, 0x29, 0x45, 0xaf, 0x30, + 0xa8, 0xd2, 0x5a, 0xd3, 0x5a, 0x35, 0x6b, 0xe0, 0x18, 0x0a, 0x17, 0x9b, 0x78, 0x4c, 0x28, 0x27, + 0x7e, 0x3c, 0xe7, 0x7b, 0x24, 0x48, 0x78, 0x37, 0x8b, 0x11, 0xca, 0xab, 0x8b, 0x0d, 0x93, 0xa8, + 0x16, 0xca, 0x19, 0x00, 0xce, 0xb2, 0x47, 0x9f, 0xb6, 0x60, 0xdc, 0xb9, 0x1b, 0xeb, 0xea, 0xff, + 0x22, 0xda, 0xfa, 0x80, 0x4a, 0x2a, 0x75, 0xa1, 0x00, 0x77, 0xec, 0xa7, 0x9a, 0x70, 0x9a, 0x29, + 0x7a, 0xdd, 0x02, 0x44, 0xee, 0x11, 0x57, 0xc6, 0x83, 0x8b, 0xbe, 0x0c, 0x17, 0xb1, 0x83, 0xbf, + 0xd4, 0x43, 0x97, 0x4b, 0xf5, 0xde, 0x76, 0x9c, 0xd3, 0x07, 0x74, 0x0d, 0x50, 0xd3, 0x8b, 0x9d, + 0x35, 0x9f, 0xcc, 0x85, 0x2d, 0x99, 0x2a, 0x2e, 0xce, 0xd3, 0xcf, 0x88, 0x71, 0x46, 0xf3, 0x3d, + 0x18, 0x38, 0xe7, 0x29, 0x36, 0xcb, 0xa2, 0xf0, 0x5e, 0xf7, 0x66, 0xe4, 0x33, 0x2d, 0x61, 0xce, + 0x32, 0xd1, 0x8e, 0x15, 0x86, 0xfd, 0x27, 0x65, 0xb5, 0x94, 0x75, 0xf2, 0x83, 0x63, 0x04, 0x61, + 0x5b, 0x0f, 0x1f, 0x84, 0xad, 0x23, 0xa5, 0x7a, 0x0b, 0x20, 0xa4, 0xf2, 0xa5, 0x4b, 0x8f, 0x28, + 0x5f, 0xfa, 0xbb, 0xad, 0x54, 0x65, 0xc2, 0xd1, 0x8b, 0x1f, 0x28, 0x36, 0xf1, 0x62, 0x86, 0x47, + 0x71, 0x65, 0xf4, 0x4a, 0x26, 0x78, 0xef, 0x79, 0xa8, 0xae, 0xfb, 0x0e, 0x2b, 0x99, 0xc3, 0x16, + 0xaa, 0x11, 0x61, 0x76, 0x59, 0xb4, 0x63, 0x85, 0x41, 0xa5, 0xbe, 0x41, 0x74, 0x5f, 0x52, 0xfb, + 0x3f, 0x94, 0x61, 0xd4, 0xd0, 0xf8, 0xb9, 0xe6, 0x9b, 0xf5, 0x98, 0x99, 0x6f, 0xa5, 0x7d, 0x98, + 0x6f, 0xdf, 0x05, 0x35, 0x57, 0x6a, 0xa3, 0x62, 0xee, 0x70, 0xc8, 0xea, 0x38, 0xad, 0x90, 0x54, + 0x13, 0xd6, 0x3c, 0xd1, 0x95, 0x54, 0x4e, 0x6e, 0xca, 0x2f, 0x90, 0x97, 0x34, 0x2b, 0x34, 0x5a, + 0xef, 0x33, 0xd9, 0xf8, 0x80, 0xca, 0xde, 0xf1, 0x01, 0xf6, 0xef, 0x59, 0xea, 0xe3, 0x1e, 0x41, + 0xf1, 0xa5, 0x3b, 0xe9, 0xe2, 0x4b, 0x97, 0x0a, 0x19, 0xe6, 0x3e, 0x55, 0x97, 0xbe, 0xcf, 0x82, + 0x73, 0xbb, 0x57, 0x33, 0x47, 0xcf, 0x40, 0x65, 0x23, 0x0a, 0x3b, 0x6d, 0xa1, 0x83, 0x15, 0x1d, + 0x56, 0x3a, 0x1e, 0x73, 0x18, 0xdd, 0x44, 0x6d, 0x79, 0x41, 0x33, 0xbb, 0x89, 0xba, 0xee, 0x05, + 0x4d, 0xcc, 0x20, 0x03, 0x94, 0xbb, 0xbd, 0x01, 0x23, 0x73, 0x61, 0xab, 0xe5, 0x04, 0x4d, 0xf4, + 0x16, 0x18, 0x71, 0xf9, 0x4f, 0xe1, 0xcf, 0x63, 0x07, 0xe7, 0x02, 0x8a, 0x25, 0x0c, 0x9d, 0x85, + 0x21, 0x27, 0xda, 0x90, 0x3e, 0x3c, 0x16, 0x90, 0x37, 0x1b, 0x6d, 0xc4, 0x98, 0xb5, 0xda, 0x7f, + 0x66, 0xc1, 0x04, 0x7d, 0xc4, 0x63, 0x03, 0xcc, 0x86, 0xf6, 0x59, 0x18, 0x76, 0x3a, 0xc9, 0x66, + 0xd8, 0xb3, 0x27, 0x9c, 0x65, 0xad, 0x58, 0x40, 0x69, 0x67, 0x55, 0x05, 0x11, 0xa3, 0xb3, 0xf3, + 0x74, 0x5d, 0x31, 0x08, 0x35, 0xab, 0xe3, 0xce, 0x5a, 0xde, 0xc9, 0x6d, 0x83, 0x37, 0x63, 0x09, + 0xa7, 0xc4, 0xd6, 0xc2, 0x66, 0x57, 0x84, 0x19, 0x2b, 0x62, 0xf5, 0xb0, 0xd9, 0xc5, 0x0c, 0x82, + 0x9e, 0x86, 0x72, 0xbc, 0xe9, 0xc8, 0x18, 0x01, 0x19, 0xf1, 0xde, 0xb8, 0x3a, 0x8b, 0x69, 0xbb, + 0x4a, 0xe0, 0x88, 0xfc, 0x6c, 0xbc, 0x6f, 0x3a, 0x81, 0x23, 0xf2, 0xed, 0x7f, 0x3e, 0x04, 0x2c, + 0xf6, 0xc7, 0x89, 0x48, 0x73, 0x35, 0x64, 0x05, 0xaa, 0x0f, 0xf5, 0x88, 0x5d, 0x6f, 0xaa, 0x1f, + 0xe7, 0x63, 0x76, 0xe3, 0xa8, 0xb5, 0x7c, 0xd4, 0x47, 0xad, 0xf9, 0xa7, 0xe7, 0x43, 0x8f, 0xd1, + 0xe9, 0xb9, 0xfd, 0x79, 0x0b, 0x90, 0x8a, 0xe4, 0xd2, 0xe1, 0x2d, 0x17, 0xa0, 0xa6, 0x42, 0xc7, + 0xc4, 0x7a, 0xd1, 0x22, 0x5a, 0x02, 0xb0, 0xc6, 0x19, 0xc0, 0x93, 0xf2, 0x8c, 0xd4, 0x9f, 0xe5, + 0xb4, 0x2c, 0x61, 0x5a, 0x57, 0xa8, 0x53, 0xfb, 0x97, 0x4a, 0xf0, 0x04, 0x37, 0xdd, 0x96, 0x9c, + 0xc0, 0xd9, 0x20, 0x2d, 0xda, 0xab, 0x41, 0x03, 0x96, 0x5c, 0xba, 0x85, 0xf7, 0x64, 0xb6, 0xc6, + 0x41, 0x65, 0x27, 0x97, 0x33, 0x5c, 0xb2, 0x2c, 0x04, 0x5e, 0x82, 0x19, 0x71, 0x14, 0x43, 0x55, + 0x5e, 0xc2, 0x25, 0x74, 0x61, 0x41, 0x8c, 0x94, 0x5a, 0x10, 0x56, 0x0e, 0xc1, 0x8a, 0x11, 0x35, + 0x65, 0xfc, 0xd0, 0xdd, 0xa2, 0x4b, 0x3e, 0x6b, 0xca, 0x2c, 0x8a, 0x76, 0xac, 0x30, 0xec, 0x16, + 0x1c, 0x93, 0x63, 0xd8, 0xbe, 0x4e, 0xba, 0x98, 0xac, 0x53, 0xfd, 0xef, 0xca, 0x26, 0xe3, 0x5e, + 0x30, 0xa5, 0xff, 0xe7, 0x4c, 0x20, 0x4e, 0xe3, 0xca, 0x9a, 0xd5, 0xa5, 0xfc, 0x9a, 0xd5, 0xf6, + 0x2f, 0x59, 0x90, 0x35, 0x40, 0x98, 0x03, 0xce, 0xbc, 0xe4, 0xab, 0x5f, 0x31, 0xfb, 0x7d, 0x94, + 0xb1, 0xfd, 0x10, 0x8c, 0x3a, 0x09, 0xb5, 0x30, 0xb9, 0x37, 0xa8, 0xfc, 0x70, 0xa7, 0x98, 0x4b, + 0x61, 0xd3, 0x5b, 0xf7, 0x98, 0x17, 0xc8, 0x24, 0x67, 0xff, 0xed, 0x0a, 0xd4, 0xe6, 0xa3, 0xee, + 0xfe, 0xd3, 0xe6, 0x7a, 0x93, 0xe2, 0x4a, 0xfb, 0x4a, 0x8a, 0x93, 0x69, 0x77, 0xe5, 0xbe, 0x69, + 0x77, 0x32, 0x6d, 0x6e, 0xe8, 0x51, 0xa5, 0xcd, 0x55, 0x1e, 0x93, 0xb4, 0xb9, 0xe1, 0xc7, 0x20, + 0x6d, 0x6e, 0xe4, 0x88, 0xd3, 0xe6, 0xec, 0xff, 0x31, 0x04, 0x93, 0x3d, 0xe9, 0xcf, 0xe8, 0x45, + 0x18, 0x53, 0x6b, 0x54, 0x1e, 0x00, 0xd4, 0xcc, 0x30, 0x7a, 0x0d, 0xc3, 0x29, 0xcc, 0x01, 0x04, + 0xf5, 0x02, 0x9c, 0x88, 0xc8, 0x2b, 0x1d, 0xd2, 0x21, 0xb3, 0xeb, 0x09, 0x89, 0x1a, 0xc4, 0x0d, + 0x83, 0x26, 0x2f, 0x70, 0x5e, 0xae, 0x3f, 0x79, 0x7f, 0x67, 0xfa, 0x04, 0xee, 0x05, 0xe3, 0xbc, + 0x67, 0x50, 0x1b, 0xc6, 0x7d, 0x73, 0xe7, 0x2a, 0xe6, 0xf0, 0x43, 0x6d, 0x7a, 0x95, 0xac, 0x4a, + 0x35, 0xe3, 0x34, 0x83, 0xf4, 0xf6, 0xb7, 0xf2, 0x88, 0xb6, 0xbf, 0x9f, 0xd2, 0xdb, 0x5f, 0x1e, + 0x95, 0xf6, 0xc1, 0x82, 0xd3, 0xdf, 0x07, 0xd9, 0xff, 0x1e, 0x64, 0x47, 0xfb, 0x5e, 0xa8, 0xca, + 0x88, 0xdd, 0x81, 0x22, 0x5d, 0x4d, 0x3a, 0x7d, 0x34, 0xfb, 0x83, 0x12, 0xe4, 0x38, 0x6d, 0xa8, + 0xa4, 0xd5, 0xd6, 0x7e, 0x4a, 0xd2, 0xee, 0xcf, 0xe2, 0x47, 0xf7, 0x78, 0xb4, 0x32, 0xb7, 0xf1, + 0xde, 0x5f, 0xb4, 0xd3, 0x49, 0x07, 0x30, 0x2b, 0xfd, 0xa7, 0x82, 0x98, 0x2f, 0x02, 0xe8, 0x0d, + 0xa3, 0xb0, 0xf4, 0x55, 0xf8, 0x91, 0xde, 0x57, 0x62, 0x03, 0x0b, 0xbd, 0x00, 0xa3, 0x5e, 0x10, + 0x27, 0x8e, 0xef, 0x5f, 0xf5, 0x82, 0x44, 0x58, 0xff, 0xca, 0x98, 0x5d, 0xd0, 0x20, 0x6c, 0xe2, + 0x9d, 0x79, 0xb7, 0xf1, 0x5d, 0xf6, 0xf3, 0x3d, 0x37, 0xe1, 0xf4, 0x15, 0x2f, 0x51, 0xa2, 0x4d, + 0xcd, 0x23, 0xb6, 0xc9, 0x93, 0x1a, 0xc8, 0xea, 0xab, 0x81, 0x8c, 0x34, 0xd4, 0x52, 0x3a, 0x6b, + 0x36, 0x9b, 0x86, 0x6a, 0xbb, 0x70, 0xf2, 0x8a, 0x97, 0x5c, 0xf6, 0x7c, 0x72, 0x88, 0x4c, 0x7e, + 0x71, 0x18, 0xc6, 0xcc, 0xb2, 0x18, 0xfb, 0xd1, 0xd7, 0x5f, 0xa0, 0xbb, 0x13, 0x31, 0x10, 0x9e, + 0x0a, 0xa9, 0xb8, 0x7d, 0xe0, 0x1a, 0x1d, 0xf9, 0x83, 0x6b, 0x6c, 0x50, 0x34, 0x4f, 0x6c, 0x76, + 0x00, 0xdd, 0x85, 0xca, 0x3a, 0xcb, 0xa8, 0x2c, 0x17, 0x11, 0x0c, 0x97, 0x37, 0xf8, 0x7a, 0x45, + 0xf2, 0x9c, 0x4c, 0xce, 0x8f, 0x1a, 0x95, 0x51, 0x3a, 0x91, 0xdf, 0xc8, 0x73, 0x11, 0xd6, 0x8a, + 0xc2, 0xe8, 0xa7, 0x15, 0x2a, 0x0f, 0xa1, 0x15, 0x52, 0x32, 0x7a, 0xf8, 0x11, 0xc9, 0x68, 0x96, + 0x1d, 0x9b, 0x6c, 0xb2, 0x2d, 0x8f, 0x48, 0xcc, 0x1b, 0x61, 0x83, 0x60, 0x64, 0xc7, 0xa6, 0xc0, + 0x38, 0x8b, 0x8f, 0x3e, 0xae, 0xa4, 0x7c, 0xb5, 0x88, 0x23, 0x2b, 0x73, 0x46, 0x1f, 0xb6, 0x80, + 0xff, 0x7c, 0x09, 0x26, 0xae, 0x04, 0x9d, 0x95, 0x2b, 0x2b, 0x9d, 0x35, 0xdf, 0x73, 0xaf, 0x93, + 0x2e, 0x95, 0xe2, 0x5b, 0xa4, 0xbb, 0x30, 0x9f, 0xf5, 0xf5, 0x5c, 0xa7, 0x8d, 0x98, 0xc3, 0xa8, + 0xdc, 0x5a, 0xf7, 0x82, 0x0d, 0x12, 0xb5, 0x23, 0x4f, 0x9c, 0x26, 0x19, 0x72, 0xeb, 0xb2, 0x06, + 0x61, 0x13, 0x8f, 0xd2, 0x0e, 0xef, 0x06, 0xaa, 0x46, 0x99, 0xa2, 0xbd, 0x4c, 0x1b, 0x31, 0x87, + 0x51, 0xa4, 0x24, 0xea, 0x08, 0x67, 0xad, 0x81, 0xb4, 0x4a, 0x1b, 0x31, 0x87, 0x09, 0xdf, 0x0b, + 0x8b, 0x35, 0xac, 0xf4, 0xf8, 0x5e, 0x58, 0x98, 0x8e, 0x84, 0x53, 0xd4, 0x2d, 0xd2, 0x9d, 0x77, + 0x12, 0x27, 0xeb, 0x3a, 0xb9, 0xce, 0x9b, 0xb1, 0x84, 0xb3, 0x42, 0xeb, 0xe9, 0xe1, 0xf8, 0xba, + 0x2b, 0xb4, 0x9e, 0xee, 0x7e, 0x1f, 0x97, 0xdf, 0x97, 0x4b, 0x30, 0xf6, 0xc6, 0x65, 0xcc, 0xbb, + 0x5c, 0x06, 0x76, 0x1b, 0x26, 0x7b, 0x72, 0xf3, 0x07, 0xb0, 0x80, 0xf6, 0xac, 0x9d, 0x62, 0x63, + 0x18, 0xa5, 0x84, 0x65, 0xa1, 0xd1, 0x39, 0x98, 0xe4, 0x8b, 0x98, 0x72, 0x62, 0xa9, 0xd6, 0xaa, + 0xde, 0x02, 0x3b, 0x36, 0xbd, 0x95, 0x05, 0xe2, 0x5e, 0x7c, 0xfb, 0x07, 0x2c, 0x18, 0x4f, 0x95, + 0x4b, 0x28, 0xc8, 0x56, 0x63, 0xab, 0x3c, 0x64, 0xf1, 0xf2, 0x2c, 0x7f, 0xa9, 0xcc, 0xd4, 0xb1, + 0x5e, 0xe5, 0x1a, 0x84, 0x4d, 0x3c, 0xfb, 0xd7, 0xcb, 0x50, 0x95, 0xb1, 0x7d, 0x03, 0x74, 0xe5, + 0x73, 0x16, 0x8c, 0xab, 0xa3, 0x6a, 0x76, 0xb6, 0x50, 0x2a, 0x22, 0x7b, 0x93, 0xf6, 0x40, 0x79, + 0xc7, 0x82, 0xf5, 0x50, 0x6f, 0x1c, 0xb0, 0xc9, 0x0c, 0xa7, 0x79, 0xa3, 0x5b, 0x00, 0x71, 0x37, + 0x4e, 0x48, 0xcb, 0x38, 0xe5, 0xb0, 0x8d, 0x59, 0x36, 0xe3, 0x86, 0x11, 0xa1, 0x73, 0xea, 0x46, + 0xd8, 0x24, 0x0d, 0x85, 0xa9, 0x2d, 0x3d, 0xdd, 0x86, 0x0d, 0x4a, 0xe8, 0x55, 0x15, 0x58, 0x31, + 0x54, 0x84, 0x7e, 0x97, 0xe3, 0x3b, 0x48, 0x64, 0xc5, 0x01, 0x22, 0x19, 0xec, 0x9f, 0x2c, 0xc1, + 0xf1, 0xec, 0x48, 0xa2, 0x0f, 0xc2, 0x98, 0x1c, 0x34, 0xc3, 0x89, 0x24, 0x03, 0x2a, 0xc7, 0xb0, + 0x01, 0x7b, 0xb0, 0x33, 0x3d, 0xdd, 0x7b, 0xbb, 0xff, 0x8c, 0x89, 0x82, 0x53, 0xc4, 0x78, 0x98, + 0x83, 0x88, 0xc7, 0xa9, 0x77, 0x67, 0xdb, 0x6d, 0x11, 0xab, 0x60, 0x84, 0x39, 0x98, 0x50, 0x9c, + 0xc1, 0x46, 0x2b, 0x70, 0xd2, 0x68, 0xb9, 0x41, 0xbc, 0x8d, 0xcd, 0xb5, 0x30, 0x92, 0xfb, 0xd6, + 0xb3, 0x3a, 0x7c, 0xbb, 0x17, 0x07, 0xe7, 0x3e, 0x49, 0x0d, 0x24, 0xd7, 0x69, 0x3b, 0xae, 0x97, + 0x74, 0xc5, 0x69, 0x93, 0x12, 0xe7, 0x73, 0xa2, 0x1d, 0x2b, 0x0c, 0xfb, 0x1f, 0x0c, 0xc1, 0x71, + 0x1e, 0xaf, 0x4c, 0x54, 0x38, 0x3e, 0xfa, 0x20, 0xd4, 0xe2, 0xc4, 0x89, 0xb8, 0xcb, 0xca, 0xda, + 0xb7, 0xe8, 0xd2, 0x35, 0x1e, 0x24, 0x11, 0xac, 0xe9, 0xa1, 0x0f, 0xb0, 0xca, 0x80, 0x5e, 0xbc, + 0xc9, 0xa8, 0x97, 0x1e, 0xce, 0x21, 0x76, 0x59, 0x51, 0xc0, 0x06, 0x35, 0xf4, 0xad, 0x50, 0x69, + 0x6f, 0x3a, 0xb1, 0xf4, 0xd6, 0x3e, 0x2b, 0xe5, 0xc4, 0x0a, 0x6d, 0x7c, 0xb0, 0x33, 0x7d, 0x2a, + 0xfb, 0xaa, 0x0c, 0x80, 0xf9, 0x43, 0xa6, 0x94, 0x1f, 0xda, 0x43, 0xca, 0x3f, 0x0b, 0xc3, 0xcd, + 0xa8, 0xdb, 0xb8, 0x3a, 0x9b, 0xbd, 0xe0, 0x69, 0x9e, 0xb5, 0x62, 0x01, 0xa5, 0x32, 0x69, 0x93, + 0xb3, 0x6c, 0x52, 0xe4, 0xe1, 0xb4, 0xe5, 0x71, 0x55, 0x83, 0xb0, 0x89, 0xc7, 0xaa, 0x74, 0x65, + 0xa2, 0xd9, 0x47, 0x0e, 0x21, 0xdb, 0x69, 0xd0, 0x38, 0xf6, 0x4b, 0x50, 0x13, 0x5d, 0x5d, 0x0d, + 0xd1, 0x8b, 0x30, 0xc6, 0x9d, 0x81, 0xf5, 0xc8, 0x09, 0xdc, 0xcd, 0xac, 0x13, 0x67, 0xd5, 0x80, + 0xe1, 0x14, 0xa6, 0xbd, 0x04, 0x43, 0x03, 0x0a, 0xd9, 0x81, 0xf6, 0xe6, 0xef, 0x85, 0x2a, 0x25, + 0x27, 0x37, 0x6a, 0x45, 0x90, 0x0c, 0xa1, 0x2a, 0x6f, 0x86, 0x45, 0x36, 0x94, 0x3d, 0x47, 0x46, + 0x2d, 0xa9, 0x25, 0xb4, 0x10, 0xc7, 0x1d, 0x36, 0xed, 0x28, 0x10, 0x3d, 0x03, 0x65, 0x72, 0xaf, + 0x9d, 0x0d, 0x4f, 0xba, 0x74, 0xaf, 0xed, 0x45, 0x24, 0xa6, 0x48, 0xe4, 0x5e, 0x1b, 0x9d, 0x81, + 0x92, 0xd7, 0x14, 0x33, 0x12, 0x04, 0x4e, 0x69, 0x61, 0x1e, 0x97, 0xbc, 0xa6, 0x7d, 0x0f, 0x6a, + 0xea, 0x2a, 0x5a, 0xb4, 0x25, 0x4d, 0x2b, 0xab, 0x88, 0x78, 0x75, 0x49, 0xb7, 0x8f, 0x51, 0xd5, + 0x01, 0xd0, 0xc5, 0x43, 0x8a, 0x52, 0xc1, 0xe7, 0x61, 0xc8, 0x0d, 0x45, 0xd9, 0xa7, 0xaa, 0x26, + 0xc3, 0x6c, 0x29, 0x06, 0xb1, 0x6f, 0xc3, 0xc4, 0xf5, 0x20, 0xbc, 0xcb, 0x2e, 0x85, 0x63, 0x35, + 0xd0, 0x29, 0xe1, 0x75, 0xfa, 0x23, 0x6b, 0xc1, 0x33, 0x28, 0xe6, 0x30, 0x55, 0xe9, 0xb8, 0xd4, + 0xaf, 0xd2, 0xb1, 0xfd, 0x09, 0x0b, 0xc6, 0x94, 0x37, 0xf6, 0xca, 0xf6, 0xd6, 0x60, 0xa7, 0xc0, + 0x46, 0x79, 0x8e, 0xd2, 0x1e, 0xe5, 0x39, 0xe4, 0x81, 0x71, 0xb9, 0xdf, 0x81, 0xb1, 0xfd, 0x17, + 0x16, 0x1c, 0x57, 0x5d, 0x90, 0x36, 0xd3, 0x8b, 0x30, 0xb6, 0xd6, 0xf1, 0xfc, 0xa6, 0x2c, 0xee, + 0x9e, 0x59, 0x2e, 0x75, 0x03, 0x86, 0x53, 0x98, 0xe8, 0x22, 0xc0, 0x9a, 0x17, 0x38, 0x51, 0x77, + 0x45, 0x1b, 0x69, 0x4a, 0x6f, 0xd7, 0x15, 0x04, 0x1b, 0x58, 0xe8, 0x63, 0x50, 0xdd, 0x96, 0x71, + 0x02, 0xe5, 0x42, 0xab, 0x4a, 0x88, 0xf1, 0xd0, 0x2b, 0x41, 0x05, 0x1e, 0x28, 0x8e, 0xf6, 0x17, + 0xcb, 0x30, 0x91, 0xae, 0x04, 0x31, 0x80, 0x07, 0xe5, 0x19, 0xa8, 0xb0, 0xe2, 0x10, 0xd9, 0x89, + 0xc5, 0xab, 0xb1, 0x73, 0x18, 0x8a, 0x61, 0x98, 0x8b, 0x92, 0x62, 0xee, 0x2d, 0x56, 0x9d, 0x54, + 0x7e, 0x5a, 0xe6, 0xc4, 0x16, 0x87, 0x1e, 0x82, 0x15, 0xfa, 0xb4, 0x05, 0x23, 0x61, 0xdb, 0x2c, + 0xb1, 0xfb, 0xfe, 0x22, 0xab, 0x64, 0x88, 0x54, 0x74, 0x61, 0x0d, 0xa9, 0x89, 0x27, 0x27, 0x83, + 0x64, 0x7d, 0xe6, 0x5b, 0x60, 0xcc, 0xc4, 0xdc, 0xcb, 0x20, 0xaa, 0x9a, 0x06, 0xd1, 0xe7, 0xcc, + 0x29, 0x29, 0xea, 0x80, 0x0c, 0xb0, 0xd8, 0x6f, 0x42, 0xc5, 0x55, 0x81, 0x97, 0x0f, 0x75, 0x21, + 0x89, 0xaa, 0x93, 0xc7, 0x82, 0x5a, 0x38, 0x35, 0xfb, 0xf7, 0x2c, 0x63, 0x7e, 0x60, 0x12, 0x2f, + 0x34, 0x51, 0x04, 0xe5, 0x8d, 0xed, 0x2d, 0x61, 0x64, 0x5c, 0x2b, 0x68, 0x78, 0xaf, 0x6c, 0x6f, + 0xe9, 0x15, 0x66, 0xb6, 0x62, 0xca, 0x6c, 0x80, 0xc3, 0x84, 0x54, 0xb9, 0x98, 0xf2, 0xde, 0xe5, + 0x62, 0xec, 0xd7, 0x4b, 0x30, 0xd9, 0x33, 0xa9, 0xd0, 0xab, 0x50, 0x89, 0xe8, 0x5b, 0x8a, 0xd7, + 0x5b, 0x2c, 0xac, 0xc0, 0x4b, 0xbc, 0xd0, 0xd4, 0xca, 0x3b, 0xdd, 0x8e, 0x39, 0x4b, 0x74, 0x0d, + 0x90, 0x0e, 0x0f, 0x56, 0x27, 0x19, 0xfc, 0x95, 0x55, 0x0c, 0xe1, 0x6c, 0x0f, 0x06, 0xce, 0x79, + 0x0a, 0xbd, 0x94, 0x3d, 0x10, 0xc9, 0x14, 0x6d, 0xdf, 0xed, 0x6c, 0xc3, 0x7e, 0xcd, 0x9c, 0x82, + 0xb7, 0xb4, 0x30, 0x3d, 0xe8, 0xe6, 0xb4, 0x47, 0xb2, 0x96, 0x07, 0x95, 0xac, 0xf6, 0xcf, 0x97, + 0x60, 0x3c, 0x55, 0x84, 0x19, 0xf9, 0x50, 0x25, 0x3e, 0x3b, 0xb7, 0x97, 0xda, 0xf7, 0xa0, 0x77, + 0x48, 0x29, 0x39, 0x79, 0x49, 0xd0, 0xc5, 0x8a, 0xc3, 0xe3, 0x11, 0xed, 0xf8, 0x22, 0x8c, 0xc9, + 0x0e, 0xbd, 0xdf, 0x69, 0xf9, 0xd9, 0xe1, 0xbb, 0x64, 0xc0, 0x70, 0x0a, 0xd3, 0xfe, 0xe5, 0x32, + 0x4c, 0xf1, 0x40, 0x87, 0xa6, 0x5a, 0x0c, 0x2a, 0x60, 0xe9, 0xfb, 0x75, 0xa9, 0x74, 0x3e, 0x90, + 0x6b, 0x07, 0xbd, 0xb2, 0x31, 0x9f, 0xd1, 0x40, 0x41, 0xfa, 0x5f, 0xce, 0x04, 0xe9, 0xf3, 0xad, + 0xfa, 0xc6, 0x21, 0xf5, 0xe8, 0xeb, 0x2b, 0x6a, 0xff, 0x9f, 0x94, 0xe0, 0x58, 0xe6, 0x3e, 0x4c, + 0xf4, 0xc5, 0xf4, 0x15, 0x4a, 0x56, 0x11, 0xc7, 0x80, 0xbb, 0x5e, 0x91, 0xb8, 0xbf, 0x8b, 0x94, + 0x1e, 0xd1, 0x52, 0xb1, 0x7f, 0xa7, 0x04, 0x13, 0xe9, 0x8b, 0x3c, 0x1f, 0xc3, 0x91, 0x7a, 0x1b, + 0xd4, 0xd8, 0x5d, 0x75, 0xd7, 0x49, 0x57, 0x9e, 0x36, 0xf2, 0x6b, 0xc1, 0x64, 0x23, 0xd6, 0xf0, + 0xc7, 0xe2, 0x7e, 0x2a, 0xfb, 0x9f, 0x5a, 0x70, 0x8a, 0xbf, 0x65, 0x76, 0x1e, 0xfe, 0xcd, 0xbc, + 0xd1, 0x7d, 0xb9, 0xd8, 0x0e, 0x66, 0x4a, 0xfc, 0xef, 0x35, 0xbe, 0xd4, 0x78, 0x39, 0x29, 0x7a, + 0x9b, 0x9e, 0x0a, 0x8f, 0x61, 0x67, 0xf7, 0x35, 0x19, 0xec, 0x7f, 0x57, 0x82, 0xd1, 0xe5, 0xb9, + 0x05, 0x25, 0xc2, 0x2f, 0x40, 0xcd, 0x8d, 0x88, 0xa3, 0xdd, 0x3f, 0x66, 0x18, 0x9d, 0x04, 0x60, + 0x8d, 0x43, 0x77, 0x51, 0x3c, 0x0c, 0x35, 0xce, 0xee, 0xa2, 0x78, 0x94, 0x6a, 0x8c, 0x25, 0x1c, + 0x3d, 0x0f, 0x55, 0x96, 0xac, 0x7e, 0x33, 0x92, 0x1a, 0x47, 0x6f, 0xad, 0x59, 0x3b, 0x5e, 0xc4, + 0x0a, 0x83, 0x12, 0x6e, 0x86, 0x6e, 0x4c, 0x91, 0x33, 0x1e, 0x99, 0x79, 0xda, 0x8c, 0x17, 0xb1, + 0x84, 0xb3, 0x5a, 0xa3, 0xcc, 0x6b, 0x41, 0x91, 0x2b, 0xe9, 0x4e, 0x73, 0xf7, 0x06, 0x45, 0xd7, + 0x38, 0xfb, 0xa9, 0x49, 0x9b, 0x49, 0x18, 0x1d, 0x19, 0x2c, 0x61, 0xd4, 0xfe, 0x9d, 0x32, 0xd4, + 0xb4, 0x53, 0xcd, 0x13, 0x15, 0x5a, 0x0a, 0xb9, 0x42, 0xa2, 0xd1, 0x0d, 0x5c, 0x45, 0x9a, 0x47, + 0x15, 0x18, 0x05, 0x5a, 0xbe, 0xd7, 0x82, 0x51, 0x2f, 0xf0, 0x12, 0xcf, 0x61, 0xbe, 0x41, 0x21, + 0x37, 0x57, 0x0a, 0xaa, 0xe0, 0xb1, 0xc0, 0x29, 0x87, 0x91, 0x79, 0xf4, 0xaf, 0x98, 0x61, 0x93, + 0x33, 0xfa, 0xa8, 0xc8, 0x4f, 0x2c, 0x17, 0x56, 0xe6, 0xa8, 0x9a, 0x49, 0x4a, 0x6c, 0x53, 0x1b, + 0x3b, 0x89, 0x0a, 0xaa, 0x0e, 0x86, 0x29, 0x29, 0x75, 0x95, 0x91, 0xda, 0xc5, 0xb0, 0x66, 0xcc, + 0x19, 0xd9, 0x31, 0xa0, 0xde, 0xb1, 0xd8, 0x67, 0xee, 0xd7, 0x05, 0xa8, 0x39, 0x9d, 0x24, 0x6c, + 0xd1, 0x61, 0x12, 0x81, 0x03, 0x3a, 0xbb, 0x4d, 0x02, 0xb0, 0xc6, 0xb1, 0x7f, 0xb8, 0x02, 0x99, + 0x7a, 0x29, 0xe8, 0x1e, 0xd4, 0x54, 0xc5, 0x94, 0x62, 0x72, 0xa9, 0xf5, 0x8c, 0x52, 0x9d, 0x51, + 0x4d, 0x58, 0x33, 0x43, 0xa1, 0x74, 0xb3, 0xf2, 0xd5, 0xfe, 0xfe, 0xac, 0x9b, 0xf5, 0xea, 0xfe, + 0x4e, 0xdf, 0xe8, 0x9c, 0xbd, 0xc0, 0x2b, 0x65, 0xce, 0xec, 0xe9, 0x99, 0x2d, 0xef, 0xe1, 0x99, + 0xfd, 0xa4, 0xb8, 0xf4, 0x10, 0x93, 0xb8, 0xe3, 0x27, 0x62, 0x56, 0xbc, 0xb7, 0xc0, 0xd5, 0xc6, + 0x09, 0xeb, 0xfa, 0x63, 0xfc, 0x3f, 0x36, 0x98, 0xa6, 0xfd, 0xe7, 0xc3, 0x87, 0xea, 0x3f, 0x1f, + 0x29, 0xd4, 0x7f, 0x7e, 0x11, 0x80, 0xcd, 0x71, 0x9e, 0xab, 0x52, 0x65, 0x6e, 0x4d, 0xa5, 0x6a, + 0xb0, 0x82, 0x60, 0x03, 0xcb, 0xfe, 0x26, 0x48, 0x17, 0xd0, 0x43, 0xd3, 0xb2, 0x5e, 0x1f, 0x3f, + 0x19, 0x64, 0x69, 0xc2, 0xa9, 0xd2, 0x7a, 0x3f, 0x6b, 0x81, 0x59, 0xe5, 0x0f, 0xbd, 0xc2, 0xcb, + 0x09, 0x5a, 0x45, 0x9c, 0x34, 0x19, 0x74, 0x67, 0x96, 0x9c, 0x76, 0x26, 0xfa, 0x49, 0xd6, 0x14, + 0x3c, 0xf3, 0x6e, 0xa8, 0x4a, 0xe8, 0xbe, 0x8c, 0xe6, 0x8f, 0xc3, 0x09, 0x59, 0x72, 0x44, 0x1e, + 0x0a, 0x89, 0x28, 0x84, 0xa3, 0xc9, 0x38, 0xf9, 0x39, 0x0b, 0xce, 0x67, 0x3b, 0x10, 0x2f, 0x85, + 0x81, 0x97, 0x84, 0x51, 0x83, 0x24, 0x89, 0x17, 0x6c, 0xb0, 0xaa, 0xcf, 0x77, 0x9d, 0x48, 0x5e, + 0x79, 0xc6, 0x04, 0xe6, 0x6d, 0x27, 0x0a, 0x30, 0x6b, 0x45, 0x5d, 0x18, 0xe6, 0x01, 0xf5, 0x62, + 0x37, 0x74, 0xc0, 0xb5, 0x91, 0x33, 0x1c, 0x7a, 0x3b, 0xc6, 0x83, 0xf9, 0xb1, 0x60, 0x68, 0x7f, + 0xd5, 0x02, 0xb4, 0xbc, 0x4d, 0xa2, 0xc8, 0x6b, 0x1a, 0x29, 0x00, 0xec, 0xf2, 0x60, 0xe3, 0x92, + 0x60, 0xb3, 0x20, 0x4e, 0xe6, 0xf2, 0x60, 0xe3, 0x5f, 0xfe, 0xe5, 0xc1, 0xa5, 0xfd, 0x5d, 0x1e, + 0x8c, 0x96, 0xe1, 0x54, 0x8b, 0x6f, 0xe7, 0xf8, 0x85, 0x9c, 0x7c, 0x6f, 0xa7, 0x6a, 0x37, 0x9c, + 0xbe, 0xbf, 0x33, 0x7d, 0x6a, 0x29, 0x0f, 0x01, 0xe7, 0x3f, 0x67, 0xbf, 0x1b, 0x10, 0x0f, 0x85, + 0x9d, 0xcb, 0x0b, 0x5f, 0xed, 0xeb, 0xee, 0xb0, 0xbf, 0x54, 0x81, 0x63, 0x99, 0x0b, 0x71, 0xe8, + 0x56, 0xba, 0x37, 0x5e, 0xf6, 0xc0, 0x7a, 0xbc, 0xb7, 0x7b, 0x03, 0x45, 0xe0, 0x06, 0x50, 0xf1, + 0x82, 0x76, 0x27, 0x29, 0xa6, 0x74, 0x0c, 0xef, 0xc4, 0x02, 0x25, 0x68, 0x9c, 0x4f, 0xd0, 0xbf, + 0x98, 0xb3, 0x29, 0x32, 0x9e, 0x37, 0xb5, 0xd9, 0x19, 0x7a, 0x44, 0xee, 0x96, 0x4f, 0xea, 0xe8, + 0xda, 0x4a, 0x11, 0xbe, 0xe4, 0xcc, 0x64, 0x39, 0xec, 0xd0, 0xab, 0x9f, 0x2a, 0xc1, 0xa8, 0xf1, + 0xd1, 0xd0, 0x8f, 0xa6, 0x6b, 0xe0, 0x5a, 0xc5, 0xbd, 0x12, 0xa3, 0x3f, 0xa3, 0xab, 0xdc, 0xf2, + 0x57, 0x7a, 0xb6, 0xb7, 0xfc, 0xed, 0x83, 0x9d, 0xe9, 0xe3, 0x99, 0x02, 0xb7, 0xa9, 0x92, 0xb8, + 0x67, 0xbe, 0x13, 0x8e, 0x65, 0xc8, 0xe4, 0xbc, 0xf2, 0xaa, 0xf9, 0xca, 0x07, 0x76, 0xfb, 0x99, + 0x43, 0xf6, 0x13, 0x74, 0xc8, 0x44, 0xc5, 0x8a, 0xd0, 0x27, 0x03, 0xf8, 0x3c, 0x33, 0xfb, 0x8c, + 0xd2, 0x80, 0x85, 0x69, 0x9e, 0x83, 0x6a, 0x3b, 0xf4, 0x3d, 0xd7, 0x53, 0x25, 0xf4, 0x59, 0x29, + 0x9c, 0x15, 0xd1, 0x86, 0x15, 0x14, 0xdd, 0x85, 0xda, 0x9d, 0xbb, 0x09, 0x3f, 0x6e, 0x14, 0x47, + 0x1a, 0x45, 0x9d, 0x32, 0x2a, 0xa3, 0x45, 0x9d, 0x67, 0x62, 0xcd, 0x0b, 0xd9, 0x30, 0xcc, 0x94, + 0xa0, 0xcc, 0x5e, 0x65, 0xc7, 0x2d, 0x4c, 0x3b, 0xc6, 0x58, 0x40, 0xec, 0x7f, 0x33, 0x0a, 0x27, + 0xf3, 0x6e, 0x25, 0x43, 0x1f, 0x83, 0x61, 0xde, 0xc7, 0x62, 0x2e, 0xbe, 0xcc, 0xe3, 0x71, 0x85, + 0x11, 0x14, 0xdd, 0x62, 0xbf, 0xb1, 0xe0, 0x29, 0xb8, 0xfb, 0xce, 0x9a, 0x98, 0x21, 0x87, 0xc3, + 0x7d, 0xd1, 0xd1, 0xdc, 0x17, 0x1d, 0xce, 0xdd, 0x77, 0xd6, 0xd0, 0x3d, 0xa8, 0x6c, 0x78, 0x09, + 0x71, 0x84, 0x93, 0xe6, 0xf6, 0xa1, 0x30, 0x27, 0x0e, 0xb7, 0xd2, 0xd8, 0x4f, 0xcc, 0x19, 0xa2, + 0xaf, 0x58, 0x70, 0x6c, 0x2d, 0x5d, 0x11, 0x4b, 0x08, 0x4f, 0xe7, 0x10, 0x6e, 0x9e, 0x4b, 0x33, + 0xe2, 0xb7, 0x67, 0x67, 0x1a, 0x71, 0xb6, 0x3b, 0xe8, 0x53, 0x16, 0x8c, 0xac, 0x7b, 0xbe, 0x71, + 0xc3, 0xcd, 0x21, 0x7c, 0x9c, 0xcb, 0x8c, 0x81, 0xde, 0x71, 0xf0, 0xff, 0x31, 0x96, 0x9c, 0xfb, + 0x69, 0xaa, 0xe1, 0x83, 0x6a, 0xaa, 0x91, 0x47, 0xa4, 0xa9, 0x3e, 0x6b, 0x41, 0x4d, 0x8d, 0xb4, + 0xa8, 0x2c, 0xf4, 0xc1, 0x43, 0xfc, 0xe4, 0xdc, 0x33, 0xa5, 0xfe, 0x62, 0xcd, 0x1c, 0xbd, 0x66, + 0xc1, 0xa8, 0xf3, 0x6a, 0x27, 0x22, 0x4d, 0xb2, 0x1d, 0xb6, 0x63, 0x51, 0xf2, 0xf7, 0xe5, 0xe2, + 0x3b, 0x33, 0x4b, 0x99, 0xcc, 0x93, 0xed, 0xe5, 0x76, 0x2c, 0x32, 0xeb, 0x75, 0x03, 0x36, 0xbb, + 0x80, 0xbe, 0x47, 0xeb, 0x71, 0x28, 0xa2, 0xf0, 0x7b, 0x5e, 0x6f, 0x06, 0x2a, 0x14, 0x41, 0xe0, + 0x29, 0x37, 0x0c, 0x12, 0x2f, 0xe8, 0x90, 0xe5, 0x00, 0x93, 0x76, 0x78, 0x23, 0x4c, 0x2e, 0x87, + 0x9d, 0xa0, 0x79, 0x29, 0x8a, 0xc2, 0x88, 0x95, 0x4e, 0x32, 0xee, 0x3b, 0x9e, 0xeb, 0x8f, 0x8a, + 0x77, 0xa3, 0x73, 0x10, 0x9b, 0x61, 0xa7, 0x04, 0xd3, 0x7b, 0x0c, 0x36, 0x7a, 0x11, 0xc6, 0xc2, + 0x68, 0xc3, 0x09, 0xbc, 0x57, 0xcd, 0x6a, 0x80, 0xca, 0x20, 0x5d, 0x36, 0x60, 0x38, 0x85, 0x69, + 0x96, 0x89, 0x2a, 0xed, 0x51, 0x26, 0xea, 0x3c, 0x0c, 0x45, 0xa4, 0x1d, 0x66, 0xf7, 0x55, 0x2c, + 0x01, 0x95, 0x41, 0xd0, 0xd3, 0x50, 0x76, 0xda, 0x9e, 0x70, 0x32, 0xaa, 0xed, 0xe2, 0xec, 0xca, + 0x02, 0xa6, 0xed, 0xa9, 0xaa, 0x75, 0x95, 0x23, 0xa9, 0x5a, 0x47, 0x35, 0xa6, 0x38, 0x46, 0x1b, + 0xd6, 0x1a, 0x33, 0x7d, 0xbc, 0x65, 0xbf, 0x5e, 0x86, 0xa7, 0x77, 0x5d, 0x5a, 0x3a, 0x84, 0xdd, + 0xda, 0x25, 0x84, 0x5d, 0x0e, 0x4f, 0x69, 0xaf, 0xe1, 0x29, 0xf7, 0x19, 0x9e, 0x4f, 0x51, 0x89, + 0x21, 0xab, 0x28, 0x0a, 0x25, 0x71, 0xc0, 0xb4, 0x82, 0x7e, 0x45, 0x19, 0x85, 0xb0, 0x90, 0x50, + 0xac, 0xf9, 0xd2, 0xed, 0x52, 0xaa, 0x44, 0x52, 0xa5, 0x08, 0x8d, 0xd9, 0xb7, 0x92, 0x21, 0x17, + 0x13, 0xfd, 0xea, 0x2e, 0xd9, 0xbf, 0x30, 0x04, 0xcf, 0x0c, 0xa0, 0xe8, 0xcc, 0x59, 0x6c, 0x0d, + 0x38, 0x8b, 0xbf, 0xce, 0x3f, 0xd3, 0x67, 0x72, 0x3f, 0x13, 0x2e, 0xfe, 0x33, 0xed, 0xfe, 0x85, + 0xd8, 0x49, 0x44, 0x10, 0x13, 0xb7, 0x13, 0xf1, 0x74, 0x1e, 0x23, 0x3b, 0x7d, 0x41, 0xb4, 0x63, + 0x85, 0x41, 0xb7, 0xbf, 0xae, 0x43, 0x97, 0xff, 0x48, 0x41, 0x25, 0x71, 0xcc, 0x44, 0x77, 0x6e, + 0x7d, 0xcd, 0xcd, 0x52, 0x09, 0xc0, 0xd9, 0xd8, 0xbf, 0x62, 0xc1, 0x99, 0xfe, 0xd6, 0x08, 0x7a, + 0x07, 0x8c, 0xae, 0xb1, 0xa0, 0xca, 0x25, 0x16, 0x3a, 0x25, 0xa6, 0x0e, 0x7b, 0x5f, 0xdd, 0x8c, + 0x4d, 0x1c, 0x34, 0x07, 0x93, 0x66, 0x34, 0xe6, 0x92, 0x11, 0x73, 0xc5, 0xfc, 0x25, 0xab, 0x59, + 0x20, 0xee, 0xc5, 0x47, 0x33, 0x00, 0x89, 0x97, 0xf8, 0x84, 0x3f, 0xcd, 0x27, 0x1a, 0x73, 0x28, + 0xae, 0xaa, 0x56, 0x6c, 0x60, 0xd8, 0x5f, 0x2b, 0xe7, 0xbf, 0x06, 0xb7, 0x72, 0xf7, 0x33, 0xfb, + 0xc5, 0xdc, 0x2e, 0x0d, 0x20, 0xa1, 0xcb, 0x47, 0x2d, 0xa1, 0x87, 0xfa, 0x49, 0x68, 0x34, 0x0f, + 0xc7, 0x8d, 0x1b, 0x94, 0x79, 0x51, 0x25, 0x7e, 0x38, 0xa5, 0x2a, 0x22, 0xae, 0x64, 0xe0, 0xb8, + 0xe7, 0x89, 0xc7, 0x7c, 0xaa, 0xfe, 0x6a, 0x09, 0x4e, 0xf7, 0xdd, 0x58, 0x1c, 0x91, 0x06, 0x32, + 0x3f, 0xff, 0xd0, 0xd1, 0x7c, 0x7e, 0xf3, 0xa3, 0x54, 0xf6, 0xfc, 0x28, 0x83, 0xa8, 0xf3, 0xdf, + 0x2d, 0xf5, 0x5d, 0x2c, 0x74, 0x23, 0xfa, 0x97, 0x76, 0x24, 0x5f, 0x82, 0x71, 0xa7, 0xdd, 0xe6, + 0x78, 0x2c, 0x43, 0x23, 0x53, 0xa5, 0x75, 0xd6, 0x04, 0xe2, 0x34, 0xee, 0x40, 0x03, 0xfb, 0x87, + 0x16, 0xd4, 0x30, 0x59, 0xe7, 0x12, 0x0e, 0xdd, 0x11, 0x43, 0x64, 0x15, 0x71, 0x55, 0x06, 0x1d, + 0xd8, 0xd8, 0x63, 0x85, 0x18, 0xf2, 0x06, 0xfb, 0xa0, 0x75, 0x36, 0xd4, 0xf5, 0xc3, 0xe5, 0xfe, + 0xd7, 0x0f, 0xdb, 0x7f, 0x3e, 0x46, 0x5f, 0xaf, 0x1d, 0xce, 0x45, 0xa4, 0x19, 0xd3, 0xef, 0xdb, + 0x89, 0x7c, 0x31, 0x49, 0xd4, 0xf7, 0xbd, 0x89, 0x17, 0x31, 0x6d, 0x4f, 0x9d, 0x53, 0x96, 0xf6, + 0x55, 0xa3, 0xb2, 0xbc, 0x67, 0x8d, 0xca, 0x97, 0x60, 0x3c, 0x8e, 0x37, 0x57, 0x22, 0x6f, 0xdb, + 0x49, 0xc8, 0x75, 0x22, 0x0b, 0x48, 0xe9, 0x7a, 0x6d, 0x8d, 0xab, 0x1a, 0x88, 0xd3, 0xb8, 0xe8, + 0x0a, 0x4c, 0xea, 0x4a, 0x91, 0x24, 0x4a, 0x58, 0x0a, 0x24, 0x9f, 0x09, 0xaa, 0x38, 0x90, 0xae, + 0x2d, 0x29, 0x10, 0x70, 0xef, 0x33, 0x54, 0xe6, 0xa6, 0x1a, 0x69, 0x47, 0x86, 0xd3, 0x32, 0x37, + 0x45, 0x87, 0xf6, 0xa5, 0xe7, 0x09, 0xb4, 0x04, 0x27, 0xf8, 0xc4, 0x98, 0x6d, 0xb7, 0x8d, 0x37, + 0x1a, 0x49, 0xdf, 0x4f, 0x70, 0xa5, 0x17, 0x05, 0xe7, 0x3d, 0x87, 0x5e, 0x80, 0x51, 0xd5, 0xbc, + 0x30, 0x2f, 0x8e, 0xd6, 0x94, 0x6b, 0x4f, 0x91, 0x59, 0x68, 0x62, 0x13, 0x0f, 0xbd, 0x1f, 0x9e, + 0xd4, 0x7f, 0x79, 0x4a, 0x3d, 0x3f, 0x77, 0x9e, 0x17, 0x45, 0x78, 0xd5, 0xf5, 0x77, 0x57, 0x72, + 0xd1, 0x9a, 0xb8, 0xdf, 0xf3, 0x68, 0x0d, 0xce, 0x28, 0xd0, 0xa5, 0x20, 0x61, 0x49, 0xaf, 0x31, + 0xa9, 0x3b, 0x31, 0x8b, 0xa0, 0x00, 0xf6, 0x9e, 0xb6, 0xa0, 0x7e, 0xe6, 0x8a, 0x97, 0x5c, 0xcd, + 0xc3, 0xc4, 0x8b, 0x78, 0x17, 0x2a, 0xe8, 0x02, 0xd4, 0x48, 0xe0, 0xac, 0xf9, 0x64, 0x79, 0x6e, + 0x41, 0xec, 0x48, 0x75, 0x96, 0x84, 0x04, 0x60, 0x8d, 0xa3, 0xe2, 0xfc, 0xc7, 0xfa, 0xc5, 0xf9, + 0xa3, 0x15, 0x38, 0xb9, 0xe1, 0xb6, 0xa9, 0x95, 0xe9, 0xb9, 0x64, 0xd6, 0x65, 0x81, 0xc5, 0xf4, + 0xc3, 0xf0, 0x8b, 0x23, 0x54, 0xc2, 0xd4, 0x95, 0xb9, 0x95, 0x1e, 0x1c, 0x9c, 0xfb, 0x24, 0x0b, + 0x40, 0x8f, 0xc2, 0x7b, 0xdd, 0xa9, 0x13, 0x99, 0x00, 0x74, 0xda, 0x88, 0x39, 0x0c, 0x5d, 0x03, + 0xc4, 0x92, 0x06, 0xaf, 0x26, 0x49, 0x5b, 0x99, 0xb5, 0x53, 0x27, 0xd3, 0x25, 0x39, 0x2f, 0xf7, + 0x60, 0xe0, 0x9c, 0xa7, 0xa8, 0xd5, 0x13, 0x84, 0x8c, 0xfa, 0xd4, 0x93, 0x69, 0xab, 0xe7, 0x06, + 0x6f, 0xc6, 0x12, 0x8e, 0x3e, 0x04, 0x53, 0x9d, 0x98, 0xb0, 0x0d, 0xf3, 0xed, 0x30, 0xda, 0xf2, + 0x43, 0xa7, 0xb9, 0xc0, 0xee, 0x39, 0x4e, 0xba, 0x53, 0x53, 0x8c, 0xf9, 0x79, 0xf1, 0xec, 0xd4, + 0xcd, 0x3e, 0x78, 0xb8, 0x2f, 0x85, 0x6c, 0x4d, 0xd9, 0xd3, 0x03, 0xd6, 0x94, 0x5d, 0x81, 0x93, + 0x52, 0xaf, 0x2d, 0xcf, 0x2d, 0xa8, 0x97, 0x9e, 0x3a, 0x93, 0xbe, 0x38, 0x71, 0x21, 0x07, 0x07, + 0xe7, 0x3e, 0x89, 0xb6, 0xe0, 0x69, 0xe6, 0x63, 0x11, 0x1f, 0x67, 0x25, 0xf2, 0x02, 0xd7, 0x6b, + 0x3b, 0x3e, 0x5f, 0x92, 0x0b, 0xcd, 0xa9, 0xa7, 0x59, 0xd7, 0xde, 0x22, 0x48, 0x3f, 0x3d, 0xbb, + 0x1b, 0x32, 0xde, 0x9d, 0x16, 0xba, 0x0b, 0x6f, 0xde, 0x05, 0x81, 0xab, 0x96, 0xa9, 0x73, 0x8c, + 0xe1, 0x37, 0x0a, 0x86, 0x6f, 0x9e, 0xdd, 0xeb, 0x01, 0xbc, 0x37, 0xcd, 0xbe, 0x6f, 0xb9, 0x4a, + 0x02, 0x87, 0xbd, 0xe5, 0xf4, 0x00, 0x6f, 0x29, 0x91, 0xf1, 0xee, 0xb4, 0xd0, 0x26, 0x9c, 0x65, + 0x08, 0xb3, 0x6e, 0xe2, 0x6d, 0xeb, 0x72, 0x41, 0x97, 0x82, 0x66, 0x3b, 0xf4, 0x82, 0x64, 0xea, + 0x3c, 0xe3, 0xf5, 0x0d, 0x82, 0xd7, 0xd9, 0xd9, 0x5d, 0x70, 0xf1, 0xae, 0x94, 0xec, 0x3f, 0xb0, + 0x60, 0x5c, 0xa9, 0x9f, 0x23, 0xc8, 0x40, 0xf7, 0xd3, 0x19, 0xe8, 0x57, 0x0e, 0xae, 0xc0, 0x59, + 0xcf, 0xfb, 0xe4, 0x49, 0xfd, 0xf7, 0x49, 0x00, 0xad, 0xe4, 0x95, 0x7d, 0x65, 0xf5, 0xb5, 0xaf, + 0x1e, 0x5b, 0x05, 0x9b, 0x57, 0xe0, 0xb5, 0xf2, 0x68, 0x0b, 0xbc, 0x36, 0xe0, 0x94, 0x94, 0x07, + 0x3c, 0x1e, 0xe0, 0x6a, 0x18, 0x2b, 0x7d, 0x6d, 0x5c, 0x63, 0xba, 0x90, 0x87, 0x84, 0xf3, 0x9f, + 0x4d, 0x19, 0xe6, 0x23, 0x7b, 0x1a, 0xe6, 0x4a, 0x45, 0x2d, 0xae, 0xcb, 0x4b, 0x86, 0x33, 0x2a, + 0x6a, 0xf1, 0x72, 0x03, 0x6b, 0x9c, 0x7c, 0x3b, 0xa5, 0x56, 0x90, 0x9d, 0x02, 0xfb, 0xb6, 0x53, + 0xa4, 0xc6, 0x1c, 0xed, 0xab, 0x31, 0xe5, 0xb9, 0xe3, 0x58, 0xdf, 0x73, 0xc7, 0xf7, 0xc0, 0x84, + 0x17, 0x6c, 0x92, 0xc8, 0x4b, 0x48, 0x93, 0xad, 0x05, 0xa6, 0x4d, 0xab, 0xda, 0x4a, 0x5d, 0x48, + 0x41, 0x71, 0x06, 0x3b, 0xad, 0xe6, 0x27, 0x06, 0x50, 0xf3, 0x7d, 0x8c, 0xab, 0x63, 0xc5, 0x18, + 0x57, 0xc7, 0x0f, 0x6e, 0x5c, 0x4d, 0x1e, 0xaa, 0x71, 0x85, 0x0a, 0x31, 0xae, 0x06, 0xb2, 0x5b, + 0x0c, 0x0f, 0xcb, 0xc9, 0x3d, 0x3c, 0x2c, 0xfd, 0x2c, 0xab, 0x53, 0x0f, 0x6d, 0x59, 0xe5, 0x1b, + 0x4d, 0x4f, 0xbc, 0x61, 0x34, 0x15, 0x62, 0x34, 0x3d, 0x03, 0x95, 0x26, 0x69, 0x27, 0x9b, 0x53, + 0x4f, 0xb1, 0xc9, 0xaa, 0xbe, 0xff, 0x3c, 0x6d, 0xc4, 0x1c, 0x86, 0x12, 0x38, 0x7f, 0x97, 0xac, + 0x6d, 0x86, 0xe1, 0xd6, 0x92, 0x13, 0x78, 0xeb, 0x44, 0x5c, 0x62, 0x70, 0xdb, 0x89, 0x5a, 0xa2, + 0x80, 0x7c, 0x73, 0xea, 0x2c, 0xeb, 0xc2, 0x73, 0xe2, 0xf9, 0xf3, 0xb7, 0xf7, 0xc0, 0xc7, 0x7b, + 0x52, 0x7c, 0xc3, 0x9e, 0xfb, 0x7a, 0xb6, 0xe7, 0x3e, 0x5b, 0x82, 0x53, 0xda, 0xe2, 0xa1, 0x7a, + 0xc6, 0x5b, 0xa7, 0x3a, 0x9f, 0xa0, 0x8b, 0x00, 0x3c, 0x0a, 0xc6, 0xa8, 0xa3, 0xa1, 0x2b, 0x89, + 0x28, 0x08, 0x36, 0xb0, 0x58, 0x39, 0x0a, 0x12, 0xb1, 0xbb, 0xc8, 0xb2, 0xe6, 0xd0, 0x9c, 0x68, + 0xc7, 0x0a, 0x83, 0x2e, 0x2e, 0xfa, 0x5b, 0x54, 0x45, 0xca, 0xde, 0x72, 0x31, 0xa7, 0x41, 0xd8, + 0xc4, 0x43, 0xcf, 0x71, 0x26, 0x4c, 0x15, 0x53, 0x93, 0x68, 0x8c, 0xfb, 0x9a, 0x94, 0xf6, 0x55, + 0x50, 0xd9, 0x1d, 0x56, 0x2e, 0xa5, 0xd2, 0xdb, 0x1d, 0x16, 0x58, 0xae, 0x30, 0xec, 0xff, 0x69, + 0xc1, 0xe9, 0xdc, 0xa1, 0x38, 0x02, 0x33, 0xf7, 0x5e, 0xda, 0xcc, 0x6d, 0x14, 0xe5, 0xa7, 0x32, + 0xde, 0xa2, 0x8f, 0xc9, 0xfb, 0xef, 0x2d, 0x98, 0xd0, 0xf8, 0x47, 0xf0, 0xaa, 0x5e, 0xfa, 0x55, + 0x8b, 0x73, 0xc9, 0xd5, 0x7a, 0xde, 0xed, 0x97, 0x4b, 0xa0, 0x6e, 0x9e, 0x99, 0x75, 0x93, 0xc1, + 0x72, 0x51, 0xbb, 0x30, 0xcc, 0xc2, 0xca, 0xe2, 0x62, 0x42, 0x66, 0xd3, 0xfc, 0x59, 0x88, 0x9a, + 0x3e, 0xe5, 0x67, 0x7f, 0x63, 0x2c, 0x18, 0xb2, 0x9b, 0xf2, 0xa4, 0x9c, 0x2e, 0xa7, 0x8d, 0x59, + 0x25, 0x8f, 0x15, 0x06, 0x35, 0xc4, 0x3c, 0x37, 0x0c, 0xe6, 0x7c, 0x27, 0x8e, 0xc5, 0xde, 0x40, + 0x19, 0x62, 0x0b, 0x12, 0x80, 0x35, 0x0e, 0x8b, 0x38, 0xf3, 0xe2, 0xb6, 0xef, 0x74, 0x0d, 0xc7, + 0xab, 0x51, 0xfd, 0x4f, 0x81, 0xb0, 0x89, 0x67, 0xb7, 0x60, 0x2a, 0xfd, 0x12, 0xf3, 0x64, 0x9d, + 0xa5, 0x7d, 0x0c, 0x34, 0x9c, 0x17, 0xa0, 0xe6, 0xb0, 0xa7, 0x16, 0x3b, 0x8e, 0x90, 0x09, 0x3a, + 0xf9, 0x41, 0x02, 0xb0, 0xc6, 0xb1, 0xbf, 0x19, 0x4e, 0xe4, 0x8c, 0xd9, 0x00, 0x51, 0xb5, 0x3f, + 0x5f, 0x82, 0x63, 0xe9, 0x27, 0x63, 0x96, 0x18, 0xcd, 0xfb, 0xec, 0xc5, 0x6e, 0xb8, 0x4d, 0xa2, + 0x2e, 0xed, 0x86, 0x95, 0x49, 0x8c, 0xee, 0xc1, 0xc0, 0x39, 0x4f, 0xb1, 0x4b, 0xa0, 0x9a, 0xea, + 0xd5, 0xe5, 0xf4, 0xb8, 0x55, 0xe4, 0xf4, 0xd0, 0x23, 0x6b, 0x46, 0x02, 0x2a, 0x96, 0xd8, 0xe4, + 0x4f, 0xed, 0x6a, 0x96, 0xd6, 0x55, 0xef, 0x78, 0x7e, 0xe2, 0x05, 0xe2, 0x95, 0xc5, 0xc4, 0x51, + 0x76, 0xf5, 0x52, 0x2f, 0x0a, 0xce, 0x7b, 0xce, 0xfe, 0xea, 0x10, 0xa8, 0xf2, 0x48, 0x2c, 0x52, + 0xbb, 0xa0, 0x38, 0xf7, 0xfd, 0xa6, 0xd7, 0xab, 0x2f, 0x3d, 0xb4, 0x5b, 0xe8, 0x24, 0x77, 0x9d, + 0x9b, 0x67, 0x6c, 0x6a, 0xc0, 0x56, 0x35, 0x08, 0x9b, 0x78, 0xb4, 0x27, 0xbe, 0xb7, 0x4d, 0xf8, + 0x43, 0xc3, 0xe9, 0x9e, 0x2c, 0x4a, 0x00, 0xd6, 0x38, 0xec, 0x9e, 0x05, 0x6f, 0x7d, 0x5d, 0xf8, + 0x81, 0xf5, 0x3d, 0x0b, 0xde, 0xfa, 0x3a, 0x66, 0x10, 0x7e, 0x4d, 0x60, 0xb8, 0x25, 0xf6, 0x92, + 0xc6, 0x35, 0x81, 0xe1, 0x16, 0x66, 0x10, 0xfa, 0x95, 0x82, 0x30, 0x6a, 0x39, 0xbe, 0xf7, 0x2a, + 0x69, 0x2a, 0x2e, 0x62, 0x0f, 0xa9, 0xbe, 0xd2, 0x8d, 0x5e, 0x14, 0x9c, 0xf7, 0x1c, 0x9d, 0xd0, + 0xed, 0x88, 0x34, 0x3d, 0x37, 0x31, 0xa9, 0x41, 0x7a, 0x42, 0xaf, 0xf4, 0x60, 0xe0, 0x9c, 0xa7, + 0xd0, 0x2c, 0x1c, 0x93, 0xe5, 0xad, 0x64, 0x69, 0xd8, 0xd1, 0x74, 0x7d, 0x49, 0x9c, 0x06, 0xe3, + 0x2c, 0x3e, 0x95, 0x58, 0x2d, 0x51, 0xae, 0x9c, 0x6d, 0x39, 0x0d, 0x89, 0x25, 0xcb, 0x98, 0x63, + 0x85, 0x61, 0x7f, 0xb2, 0x4c, 0x35, 0x6c, 0x9f, 0x5b, 0x01, 0x8e, 0x2c, 0xaf, 0x22, 0x3d, 0x23, + 0x87, 0x06, 0x98, 0x91, 0xef, 0x82, 0xb1, 0x3b, 0x71, 0x18, 0xa8, 0x9c, 0x85, 0x4a, 0xdf, 0x9c, + 0x05, 0x03, 0x2b, 0x3f, 0x67, 0x61, 0xb8, 0xa8, 0x9c, 0x85, 0x91, 0x87, 0xcc, 0x59, 0xf8, 0x57, + 0x15, 0x50, 0xf7, 0x40, 0xdf, 0x20, 0xc9, 0xdd, 0x30, 0xda, 0xf2, 0x82, 0x0d, 0x56, 0xaa, 0xe9, + 0x2b, 0x96, 0xac, 0xf6, 0xb4, 0x68, 0xe6, 0xf4, 0xaf, 0x17, 0x74, 0x97, 0x6f, 0x8a, 0xd9, 0xcc, + 0xaa, 0xc1, 0x88, 0xc7, 0xbe, 0x65, 0xaa, 0x4a, 0x89, 0x63, 0xbd, 0x54, 0x8f, 0xd0, 0x77, 0x02, + 0xc8, 0x43, 0xb3, 0x75, 0x29, 0x81, 0x17, 0x8a, 0xe9, 0x1f, 0x26, 0xeb, 0xda, 0xbe, 0x5d, 0x55, + 0x4c, 0xb0, 0xc1, 0x10, 0x7d, 0x56, 0xd7, 0x3b, 0xe0, 0x49, 0x8e, 0x1f, 0x3d, 0x94, 0xb1, 0x19, + 0xa4, 0xda, 0x01, 0x86, 0x11, 0x2f, 0xd8, 0xa0, 0xf3, 0x44, 0xc4, 0x76, 0xbf, 0x35, 0xaf, 0x12, + 0xe0, 0x62, 0xe8, 0x34, 0xeb, 0x8e, 0xef, 0x04, 0x2e, 0x89, 0x16, 0x38, 0xba, 0xde, 0x4b, 0x8b, + 0x06, 0x2c, 0x09, 0xf5, 0x5c, 0x56, 0x5d, 0x19, 0xe4, 0xb2, 0xea, 0x33, 0xdf, 0x0e, 0x93, 0x3d, + 0x1f, 0x73, 0x5f, 0xc5, 0x0d, 0x0e, 0x50, 0x03, 0xf0, 0x17, 0x86, 0xb5, 0xd2, 0xba, 0x11, 0x36, + 0xf9, 0xdd, 0xc7, 0x91, 0xfe, 0xa2, 0xc2, 0x7e, 0x2d, 0x70, 0x8a, 0x28, 0x35, 0x63, 0x34, 0x62, + 0x93, 0x25, 0x9d, 0xa3, 0x6d, 0x27, 0x22, 0xc1, 0x61, 0xcf, 0xd1, 0x15, 0xc5, 0x04, 0x1b, 0x0c, + 0xd1, 0x66, 0x2a, 0x0b, 0xf7, 0xf2, 0xc1, 0xb3, 0x70, 0x59, 0x7d, 0xe6, 0xbc, 0x2b, 0x42, 0x5f, + 0xb3, 0x60, 0x22, 0x48, 0xcd, 0xdc, 0x62, 0x12, 0x6e, 0xf2, 0x57, 0x45, 0x1d, 0xdd, 0xdf, 0x99, + 0x9e, 0x48, 0xb7, 0xe1, 0x0c, 0xff, 0x3c, 0x95, 0x56, 0xd9, 0xa7, 0x4a, 0xd3, 0x77, 0xaf, 0x0f, + 0xf7, 0xbb, 0x7b, 0x1d, 0x05, 0x30, 0xcc, 0xab, 0xc8, 0x8a, 0xb0, 0x9b, 0x03, 0xd6, 0x32, 0x32, + 0x4b, 0xd1, 0x72, 0x7e, 0xbc, 0x05, 0x0b, 0x2e, 0xe8, 0xb6, 0x99, 0xa4, 0x5f, 0xdd, 0x77, 0x16, + 0xe8, 0x78, 0xbf, 0x64, 0x7e, 0xfb, 0xff, 0x0e, 0xc1, 0x71, 0x39, 0x22, 0x32, 0x59, 0x8f, 0xea, + 0x47, 0xce, 0x57, 0xdb, 0xca, 0x4a, 0x3f, 0x5e, 0x95, 0x00, 0xac, 0x71, 0xa8, 0x3d, 0xd6, 0x89, + 0xc9, 0x72, 0x9b, 0x04, 0x8b, 0xde, 0x5a, 0x2c, 0x02, 0x64, 0xd4, 0x42, 0xb9, 0xa9, 0x41, 0xd8, + 0xc4, 0x63, 0x95, 0x04, 0x5c, 0xb3, 0x9c, 0x8f, 0xae, 0x24, 0x20, 0x0c, 0x55, 0x09, 0x47, 0x3f, + 0x92, 0x7b, 0x4d, 0x51, 0x31, 0xa9, 0xee, 0x3d, 0x39, 0x8a, 0xfb, 0xbb, 0x9f, 0x08, 0xfd, 0x43, + 0x0b, 0x4e, 0xf1, 0x56, 0x39, 0x92, 0x37, 0xdb, 0x4d, 0x27, 0x21, 0x71, 0x31, 0xd7, 0x4b, 0xe6, + 0xf4, 0x4f, 0x1f, 0x95, 0xe4, 0xb1, 0xc5, 0xf9, 0xbd, 0x41, 0x5f, 0xb4, 0xe0, 0xd8, 0x56, 0xaa, + 0x1c, 0x9f, 0x54, 0x1d, 0x07, 0xad, 0x55, 0x95, 0x22, 0xaa, 0x97, 0x5a, 0xba, 0x3d, 0xc6, 0x59, + 0xee, 0xf6, 0x9f, 0x59, 0x60, 0x8a, 0xd1, 0xa3, 0xaf, 0xe2, 0xb7, 0x7f, 0x53, 0x50, 0x5a, 0x97, + 0x95, 0xbe, 0xd6, 0xe5, 0xd3, 0x50, 0xee, 0x78, 0x4d, 0xb1, 0xbf, 0xd0, 0x21, 0x39, 0x0b, 0xf3, + 0x98, 0xb6, 0xdb, 0xff, 0xaf, 0xa2, 0x7d, 0x12, 0x22, 0x83, 0xfc, 0x2f, 0xc5, 0x6b, 0x07, 0xaa, + 0x4c, 0x37, 0x7f, 0xf3, 0x5b, 0x3d, 0x65, 0xba, 0xe7, 0x1f, 0xbe, 0x50, 0x00, 0x1f, 0xa8, 0x7e, + 0x55, 0xba, 0x47, 0xf6, 0xac, 0xd2, 0x5d, 0xa5, 0x5b, 0x31, 0xe6, 0x64, 0xac, 0xa6, 0x3a, 0x57, + 0xbd, 0x2a, 0xda, 0x1f, 0xec, 0x4c, 0xd7, 0x1f, 0xbe, 0x7b, 0x92, 0x0a, 0x56, 0x7c, 0xd0, 0x77, + 0x40, 0x8d, 0xfe, 0x66, 0x85, 0x0d, 0xc4, 0x66, 0xef, 0x65, 0x25, 0x43, 0x25, 0xa0, 0xd0, 0xea, + 0x09, 0x9a, 0x1f, 0xda, 0x86, 0x1a, 0x45, 0xe4, 0xcc, 0xf9, 0xde, 0xf0, 0x7d, 0xaa, 0xcc, 0x80, + 0x04, 0x3c, 0xd8, 0x99, 0x9e, 0x7b, 0x78, 0xe6, 0x8a, 0x0c, 0xd6, 0xac, 0x0c, 0xd5, 0x39, 0xda, + 0x4f, 0x75, 0xda, 0x7f, 0x3e, 0xa4, 0xe7, 0xbf, 0xa8, 0xf0, 0xfe, 0x97, 0x62, 0xfe, 0xbf, 0x98, + 0x99, 0xff, 0xe7, 0x7b, 0xe6, 0xff, 0x04, 0x1d, 0xb3, 0x9c, 0x7a, 0xf3, 0x47, 0x6d, 0x4c, 0xec, + 0xed, 0xb3, 0x60, 0x56, 0xd4, 0x2b, 0x1d, 0x2f, 0x22, 0xf1, 0x4a, 0xd4, 0x09, 0xbc, 0x60, 0x83, + 0x4d, 0xe1, 0xaa, 0x69, 0x45, 0xa5, 0xc0, 0x38, 0x8b, 0x8f, 0x9e, 0x87, 0x2a, 0x9d, 0x17, 0xb7, + 0x9d, 0x6d, 0x3e, 0x03, 0x8d, 0xaa, 0xba, 0x0d, 0xd1, 0x8e, 0x15, 0x06, 0xda, 0x84, 0xb3, 0x92, + 0xc0, 0x3c, 0xf1, 0x09, 0x7d, 0x21, 0x16, 0x8a, 0x1c, 0xb5, 0x78, 0xa2, 0x10, 0x8f, 0x26, 0x53, + 0xe7, 0x1d, 0x78, 0x17, 0x5c, 0xbc, 0x2b, 0x25, 0xfb, 0xf7, 0x59, 0xfc, 0x8a, 0x51, 0xf7, 0x85, + 0xce, 0x3e, 0xdf, 0x6b, 0x79, 0xb2, 0xf8, 0xaf, 0x9a, 0x7d, 0x8b, 0xb4, 0x11, 0x73, 0x18, 0xba, + 0x0b, 0x23, 0x6b, 0x8e, 0xbb, 0x15, 0xae, 0xaf, 0x17, 0x73, 0x75, 0x5f, 0x9d, 0x13, 0x63, 0x85, + 0xff, 0x47, 0xc4, 0x9f, 0x07, 0xfa, 0x27, 0x96, 0xdc, 0xf8, 0xb5, 0x31, 0xeb, 0x11, 0x89, 0x37, + 0x85, 0x63, 0xcf, 0xb8, 0x36, 0x86, 0x35, 0x63, 0x09, 0xb7, 0x7f, 0xbb, 0x02, 0xc7, 0x64, 0x2c, + 0xe9, 0x55, 0x2f, 0x66, 0x11, 0x2c, 0xe6, 0x05, 0x2a, 0xa5, 0x3d, 0x2f, 0x50, 0xf9, 0x30, 0x40, + 0x93, 0xb4, 0xfd, 0xb0, 0xcb, 0xec, 0xcc, 0xa1, 0x7d, 0xdb, 0x99, 0x6a, 0x6b, 0x32, 0xaf, 0xa8, + 0x60, 0x83, 0xa2, 0x28, 0x8e, 0xcc, 0xef, 0x63, 0xc9, 0x14, 0x47, 0x36, 0xee, 0x02, 0x1d, 0x3e, + 0xda, 0xbb, 0x40, 0x3d, 0x38, 0xc6, 0xbb, 0xa8, 0x0a, 0xb0, 0x3c, 0x44, 0x9d, 0x15, 0x96, 0xc2, + 0x3a, 0x9f, 0x26, 0x83, 0xb3, 0x74, 0xcd, 0x8b, 0x3e, 0xab, 0x47, 0x7d, 0xd1, 0xe7, 0xdb, 0xa0, + 0x26, 0xbf, 0x73, 0x3c, 0x55, 0xd3, 0x45, 0xc2, 0xe4, 0x34, 0x88, 0xb1, 0x86, 0xf7, 0xd4, 0x94, + 0x82, 0x47, 0x55, 0x53, 0xca, 0x7e, 0xad, 0x4c, 0x37, 0x28, 0xbc, 0x5f, 0xfb, 0xbe, 0x27, 0xf7, + 0xaa, 0x71, 0x4f, 0xee, 0xfe, 0xbe, 0x67, 0x35, 0x73, 0x9f, 0xee, 0x59, 0x18, 0x4a, 0x9c, 0x0d, + 0x99, 0x71, 0xcf, 0xa0, 0xab, 0xce, 0x46, 0x8c, 0x59, 0xeb, 0x7e, 0x6a, 0xc9, 0xbf, 0x04, 0xe3, + 0xb1, 0xb7, 0x11, 0x38, 0x49, 0x27, 0x22, 0xc6, 0xb9, 0xa4, 0x0e, 0xea, 0x32, 0x81, 0x38, 0x8d, + 0x8b, 0x3e, 0x65, 0x01, 0x44, 0x44, 0x6d, 0x7f, 0x86, 0x8b, 0x98, 0x43, 0x4a, 0x0c, 0x48, 0xba, + 0x66, 0x0d, 0x20, 0xb5, 0xed, 0x31, 0xd8, 0xda, 0x9f, 0xb1, 0x60, 0xb2, 0xe7, 0x29, 0xd4, 0x86, + 0x61, 0x97, 0xdd, 0x66, 0x5c, 0x4c, 0xfd, 0xdb, 0xf4, 0xcd, 0xc8, 0x5c, 0x8f, 0xf1, 0x36, 0x2c, + 0xf8, 0xd8, 0xbf, 0x38, 0x06, 0x27, 0x1b, 0x73, 0x4b, 0xf2, 0x16, 0xb4, 0x43, 0x2b, 0x21, 0x90, + 0xc7, 0xe3, 0xe8, 0x4a, 0x08, 0xf4, 0xe1, 0xee, 0x1b, 0x25, 0x04, 0x7c, 0xa3, 0x84, 0x40, 0x3a, + 0x9f, 0xbb, 0x5c, 0x44, 0x3e, 0x77, 0x5e, 0x0f, 0x06, 0xc9, 0xe7, 0x3e, 0xb4, 0x9a, 0x02, 0xbb, + 0x76, 0x68, 0x5f, 0x35, 0x05, 0x54, 0xc1, 0x85, 0x42, 0xd2, 0x47, 0xfb, 0x7c, 0xaa, 0xdc, 0x82, + 0x0b, 0x2a, 0xd9, 0x9d, 0xa7, 0x46, 0x0b, 0xa5, 0xf7, 0x72, 0xf1, 0x1d, 0x18, 0x20, 0xd9, 0x5d, + 0x64, 0x67, 0x9b, 0x05, 0x16, 0x46, 0x8a, 0x28, 0xb0, 0x90, 0xd7, 0x9d, 0x3d, 0x0b, 0x2c, 0xbc, + 0x04, 0xe3, 0xae, 0x1f, 0x06, 0x64, 0x25, 0x0a, 0x93, 0xd0, 0x0d, 0x7d, 0xb1, 0x63, 0xd3, 0xd7, + 0x00, 0x9b, 0x40, 0x9c, 0xc6, 0xed, 0x57, 0x9d, 0xa1, 0x76, 0xd0, 0xea, 0x0c, 0xf0, 0x88, 0xaa, + 0x33, 0x18, 0xf5, 0x07, 0x46, 0x8b, 0xa8, 0x3f, 0x90, 0xf7, 0x45, 0x06, 0xaa, 0x3f, 0xf0, 0xba, + 0x05, 0xe3, 0xce, 0x5d, 0xb6, 0x6f, 0xe1, 0x52, 0x98, 0x9d, 0xf6, 0x8d, 0x5e, 0xfc, 0xc8, 0x21, + 0x4c, 0xd8, 0xdb, 0x0d, 0xcd, 0xa6, 0x3e, 0xc9, 0x72, 0xc2, 0xcc, 0x26, 0x9c, 0xee, 0xc8, 0x41, + 0x6a, 0x16, 0x7c, 0xa9, 0x04, 0x6f, 0xde, 0xb3, 0x0b, 0xe8, 0x2e, 0x40, 0xe2, 0x6c, 0x88, 0x89, + 0x2a, 0xce, 0xc4, 0x0e, 0x18, 0x87, 0xbe, 0x2a, 0xe9, 0x89, 0x7c, 0x5a, 0x45, 0x1e, 0x1b, 0xac, + 0x58, 0xf8, 0x79, 0xe8, 0xf7, 0x94, 0xae, 0xc7, 0xa1, 0x4f, 0x30, 0x83, 0x50, 0x43, 0x28, 0x22, + 0x1b, 0xd4, 0xb8, 0x2f, 0xa7, 0x0d, 0x21, 0xcc, 0x5a, 0xb1, 0x80, 0xa2, 0x17, 0x60, 0xd4, 0xf1, + 0x7d, 0x9e, 0xdb, 0x4b, 0x62, 0x71, 0x3f, 0xb7, 0x2e, 0x58, 0xad, 0x41, 0xd8, 0xc4, 0xb3, 0xff, + 0xb4, 0x04, 0xd3, 0x7b, 0xc8, 0x94, 0x9e, 0x9a, 0x0e, 0x95, 0x81, 0x6b, 0x3a, 0x88, 0xdc, 0xc4, + 0xe1, 0x3e, 0xb9, 0x89, 0x2f, 0xc0, 0x68, 0x42, 0x9c, 0x96, 0x88, 0x5c, 0xcd, 0xd6, 0x61, 0x5d, + 0xd5, 0x20, 0x6c, 0xe2, 0x51, 0x29, 0x36, 0xe1, 0xb8, 0x2e, 0x89, 0x63, 0x99, 0x7c, 0x28, 0x1c, + 0xe6, 0x85, 0x65, 0x36, 0xb2, 0x73, 0x88, 0xd9, 0x14, 0x0b, 0x9c, 0x61, 0x99, 0x1d, 0xf0, 0xda, + 0x80, 0x03, 0xfe, 0x63, 0x25, 0x78, 0x7a, 0x57, 0xed, 0x36, 0x70, 0x5e, 0x68, 0x27, 0x26, 0x51, + 0x76, 0xe2, 0xdc, 0x8c, 0x49, 0x84, 0x19, 0x84, 0x8f, 0x52, 0xbb, 0xad, 0xb2, 0x0e, 0x8a, 0x4f, + 0xa4, 0xe6, 0xa3, 0x94, 0x62, 0x81, 0x33, 0x2c, 0x1f, 0x76, 0x5a, 0xfe, 0xf6, 0x10, 0x3c, 0x33, + 0x80, 0x0d, 0x50, 0x60, 0xc2, 0x79, 0xba, 0x98, 0x42, 0xf9, 0x11, 0x15, 0x53, 0x78, 0xb8, 0xe1, + 0x7a, 0xa3, 0x06, 0xc3, 0x40, 0x89, 0xed, 0x3f, 0x51, 0x82, 0x33, 0xfd, 0x0d, 0x16, 0xf4, 0x6d, + 0x70, 0x2c, 0x52, 0xa1, 0x86, 0x66, 0x1d, 0x86, 0x13, 0xdc, 0x1d, 0x96, 0x02, 0xe1, 0x2c, 0x2e, + 0x9a, 0x01, 0x68, 0x3b, 0xc9, 0x66, 0x7c, 0xe9, 0x9e, 0x17, 0x27, 0xa2, 0x70, 0xe5, 0x04, 0x3f, + 0xc4, 0x95, 0xad, 0xd8, 0xc0, 0xa0, 0xec, 0xd8, 0xbf, 0xf9, 0xf0, 0x46, 0x98, 0xf0, 0x87, 0xf8, + 0xd6, 0xf3, 0x84, 0xbc, 0xf6, 0xd5, 0x00, 0xe1, 0x2c, 0x2e, 0x65, 0xc7, 0xc2, 0x04, 0x78, 0x47, + 0x87, 0x74, 0xe5, 0x86, 0x45, 0xd5, 0x8a, 0x0d, 0x8c, 0x6c, 0x85, 0x89, 0xca, 0xde, 0x15, 0x26, + 0xec, 0x9f, 0x29, 0xc1, 0xe9, 0xbe, 0x06, 0xef, 0x60, 0x62, 0xea, 0xf1, 0xab, 0xf2, 0xf0, 0x90, + 0x2b, 0x6c, 0x5f, 0xd5, 0x01, 0xec, 0x3f, 0xec, 0x33, 0xd3, 0x44, 0xe6, 0xff, 0xc3, 0x17, 0x49, + 0x7a, 0xfc, 0xc6, 0xb3, 0x27, 0xd9, 0x7f, 0x68, 0x1f, 0xc9, 0xfe, 0x99, 0x8f, 0x51, 0x19, 0x50, + 0x3b, 0xfc, 0xe7, 0xa1, 0xbe, 0xc3, 0x4b, 0x37, 0xc8, 0x03, 0x1d, 0x36, 0xcc, 0xc3, 0x71, 0x2f, + 0x60, 0x17, 0x79, 0x37, 0x3a, 0x6b, 0xa2, 0x96, 0x21, 0x2f, 0xdc, 0xad, 0xb2, 0xb5, 0x16, 0x32, + 0x70, 0xdc, 0xf3, 0xc4, 0x63, 0x58, 0x7c, 0xe1, 0xe1, 0x86, 0x74, 0x9f, 0x92, 0x7b, 0x19, 0x4e, + 0xc9, 0xa1, 0xd8, 0x74, 0x22, 0xd2, 0x14, 0xca, 0x36, 0x16, 0xf9, 0x79, 0xa7, 0x79, 0x8e, 0x5f, + 0x0e, 0x02, 0xce, 0x7f, 0x8e, 0xdd, 0xba, 0x1c, 0xb6, 0x3d, 0x57, 0x6c, 0x05, 0xf5, 0xad, 0xcb, + 0xb4, 0x11, 0x73, 0x98, 0xd6, 0x17, 0xb5, 0xa3, 0xd1, 0x17, 0x1f, 0x86, 0x9a, 0x1a, 0x6f, 0x9e, + 0x2b, 0xa1, 0x26, 0x79, 0x4f, 0xae, 0x84, 0x9a, 0xe1, 0x06, 0x16, 0x9d, 0x1d, 0x74, 0xa3, 0x92, + 0x59, 0xad, 0x94, 0x1f, 0x6d, 0xb7, 0xdf, 0x09, 0x63, 0xca, 0x17, 0x38, 0xe8, 0xdd, 0xd7, 0xf6, + 0x5f, 0x94, 0x20, 0x73, 0xbd, 0x23, 0xba, 0x07, 0xb5, 0x66, 0xd4, 0xe5, 0x8d, 0xc5, 0x14, 0x8e, + 0x9f, 0x97, 0xe4, 0xf4, 0x99, 0x99, 0x6a, 0xc2, 0x9a, 0x19, 0xfa, 0x18, 0xaf, 0xcd, 0x2e, 0x58, + 0x97, 0x8a, 0x28, 0xc0, 0xd1, 0x50, 0xf4, 0xcc, 0x4b, 0x6d, 0x65, 0x1b, 0x36, 0xf8, 0xa1, 0x04, + 0x6a, 0x9b, 0xf2, 0x1a, 0xcb, 0x62, 0xc4, 0x9d, 0xba, 0x15, 0x93, 0x9b, 0x68, 0xea, 0x2f, 0xd6, + 0x8c, 0xec, 0x3f, 0x28, 0xc1, 0xc9, 0xf4, 0x07, 0x10, 0x67, 0x9c, 0x3f, 0x69, 0xc1, 0x93, 0xbe, + 0x13, 0x27, 0x8d, 0x0e, 0xdb, 0x28, 0xac, 0x77, 0xfc, 0xe5, 0x4c, 0x39, 0xff, 0x83, 0x3a, 0x5b, + 0x14, 0xe1, 0xec, 0xb5, 0xa7, 0xf5, 0xa7, 0xee, 0xef, 0x4c, 0x3f, 0xb9, 0x98, 0xcf, 0x1c, 0xf7, + 0xeb, 0x15, 0x7a, 0xcd, 0x82, 0xe3, 0x6e, 0x27, 0x8a, 0x48, 0x90, 0xe8, 0xae, 0xf2, 0xaf, 0x78, + 0xa3, 0x90, 0x81, 0xd4, 0x1d, 0x3c, 0x49, 0x05, 0xea, 0x5c, 0x86, 0x17, 0xee, 0xe1, 0x6e, 0x7f, + 0x3f, 0xd5, 0x9c, 0x7d, 0xdf, 0xf3, 0xaf, 0xd8, 0x3d, 0xad, 0x7f, 0x3c, 0x0c, 0xe3, 0xa9, 0xbb, + 0x0a, 0x52, 0x87, 0x7d, 0xd6, 0x9e, 0x87, 0x7d, 0x2c, 0xa3, 0xb4, 0x13, 0x88, 0x7b, 0x04, 0xcd, + 0x8c, 0xd2, 0x4e, 0x40, 0x30, 0x87, 0x89, 0x21, 0xc5, 0x9d, 0x40, 0x9c, 0x3e, 0x9a, 0x43, 0x8a, + 0x3b, 0x01, 0x16, 0x50, 0xf4, 0x09, 0x0b, 0xc6, 0xd8, 0xe2, 0x13, 0xa7, 0xaa, 0x42, 0xa1, 0x5d, + 0x2b, 0x60, 0xb9, 0xcb, 0xfb, 0x39, 0x58, 0x18, 0xaa, 0xd9, 0x82, 0x53, 0x1c, 0xd1, 0xa7, 0x2d, + 0xa8, 0xa9, 0xfb, 0xb2, 0xc5, 0xd9, 0x48, 0xa3, 0xd8, 0xab, 0x20, 0x32, 0x52, 0x4f, 0xd5, 0xe4, + 0xc7, 0x9a, 0x31, 0x8a, 0xd5, 0x39, 0xe6, 0xc8, 0xe1, 0x9c, 0x63, 0x42, 0xce, 0x19, 0xe6, 0xdb, + 0xa0, 0xd6, 0x12, 0xf9, 0x99, 0xfc, 0x68, 0x51, 0xde, 0x00, 0x24, 0x1b, 0xb1, 0x86, 0x53, 0x63, + 0x3f, 0x66, 0x2f, 0x96, 0x18, 0x67, 0x81, 0xcc, 0xd8, 0x6f, 0xe8, 0x66, 0x6c, 0xe2, 0x98, 0x07, + 0x97, 0xf0, 0x48, 0x0f, 0x2e, 0x47, 0xf7, 0x38, 0xb8, 0x6c, 0xc0, 0x29, 0xa7, 0x93, 0x84, 0x57, + 0x89, 0xe3, 0xcf, 0x26, 0x09, 0x69, 0xb5, 0x93, 0x98, 0x5f, 0x6f, 0x31, 0xc6, 0x5c, 0xc0, 0x2a, + 0x70, 0xae, 0x41, 0xfc, 0xf5, 0x1e, 0x24, 0x9c, 0xff, 0xac, 0xfd, 0xcf, 0x2c, 0x38, 0x95, 0x3b, + 0x15, 0x1e, 0xdf, 0x94, 0x05, 0xfb, 0x87, 0x2a, 0x70, 0x22, 0xe7, 0x26, 0x13, 0xd4, 0x35, 0x17, + 0x89, 0x55, 0x44, 0xf4, 0x5f, 0x3a, 0x98, 0x4d, 0x7e, 0x9b, 0x9c, 0x95, 0xb1, 0xbf, 0x58, 0x04, + 0x1d, 0x0f, 0x50, 0x3e, 0xda, 0x78, 0x00, 0x63, 0xae, 0x0f, 0x3d, 0xd2, 0xb9, 0x5e, 0xd9, 0x63, + 0xae, 0xff, 0x94, 0x05, 0x53, 0xad, 0x3e, 0xd7, 0x13, 0x8a, 0xf3, 0xa4, 0x5b, 0x87, 0x73, 0xf9, + 0x61, 0xfd, 0xec, 0xfd, 0x9d, 0xe9, 0xbe, 0xb7, 0x42, 0xe2, 0xbe, 0xbd, 0xb2, 0xbf, 0x5a, 0x06, + 0x66, 0xaf, 0xb1, 0x6a, 0xf5, 0x5d, 0xf4, 0x71, 0xf3, 0x62, 0x24, 0xab, 0xa8, 0xcb, 0x7b, 0x38, + 0x71, 0x75, 0xb1, 0x12, 0x1f, 0xc1, 0xbc, 0x7b, 0x96, 0xb2, 0x92, 0xb0, 0x34, 0x80, 0x24, 0xf4, + 0xe5, 0x0d, 0x54, 0xe5, 0xe2, 0x6f, 0xa0, 0xaa, 0x65, 0x6f, 0x9f, 0xda, 0xfd, 0x13, 0x0f, 0x3d, + 0x96, 0x9f, 0xf8, 0x67, 0x2c, 0x2e, 0x78, 0x32, 0x5f, 0x01, 0x4d, 0x4b, 0x73, 0x83, 0x5f, 0x54, + 0x53, 0xeb, 0x31, 0x35, 0x9e, 0x83, 0x6a, 0x2c, 0xa4, 0xb2, 0x30, 0x49, 0xd8, 0x2e, 0x56, 0x4a, + 0x6a, 0xac, 0xa0, 0x68, 0x06, 0xc0, 0xf1, 0xfd, 0xf0, 0xee, 0xa5, 0x56, 0x3b, 0xe9, 0x4a, 0xc3, + 0x84, 0x6e, 0x05, 0x66, 0x55, 0x2b, 0x36, 0x30, 0xd0, 0x5b, 0x60, 0x84, 0x57, 0x23, 0x69, 0x0a, + 0x8f, 0xce, 0x28, 0x5d, 0x7c, 0xbc, 0x56, 0x49, 0x13, 0x4b, 0x98, 0xbd, 0x09, 0xc6, 0x5e, 0xe2, + 0xe1, 0x6f, 0xbe, 0xdf, 0xfb, 0x32, 0x5b, 0xfb, 0xef, 0x97, 0x04, 0x2b, 0xbe, 0x37, 0xd0, 0xa1, + 0x83, 0xd6, 0x3e, 0x43, 0x07, 0x3f, 0x06, 0xe0, 0x86, 0xad, 0x36, 0xdd, 0x2d, 0xaf, 0x86, 0xc5, + 0x6c, 0xb1, 0xe6, 0x14, 0x3d, 0xbd, 0xc5, 0xd2, 0x6d, 0xd8, 0xe0, 0x97, 0x12, 0xe8, 0xe5, 0x3d, + 0x05, 0x7a, 0x4a, 0xb6, 0x0d, 0xed, 0x2e, 0xdb, 0xec, 0x3f, 0xb5, 0x20, 0x65, 0xeb, 0xa1, 0x36, + 0x54, 0x68, 0x77, 0xbb, 0x42, 0x4c, 0x2c, 0x17, 0x67, 0x58, 0x52, 0xf9, 0x2c, 0xd6, 0x1e, 0xfb, + 0x89, 0x39, 0x23, 0xe4, 0x8b, 0x30, 0xc9, 0x42, 0xb6, 0x3c, 0x26, 0xc3, 0xab, 0x61, 0xb8, 0xc5, + 0x43, 0x88, 0x74, 0xc8, 0xa5, 0xfd, 0x22, 0x4c, 0xf6, 0x74, 0x8a, 0xdd, 0x96, 0x1f, 0xca, 0x7d, + 0xbb, 0x61, 0xa2, 0xb3, 0xb2, 0x20, 0x98, 0xc3, 0xec, 0x9f, 0xb0, 0xe0, 0x78, 0x96, 0x3c, 0x7a, + 0xdd, 0x82, 0xc9, 0x38, 0x4b, 0xef, 0xb0, 0xc6, 0x4e, 0xa5, 0x4b, 0xf4, 0x80, 0x70, 0x6f, 0x27, + 0xec, 0xff, 0x26, 0x74, 0xc0, 0x6d, 0x2f, 0x68, 0x86, 0x77, 0x95, 0x75, 0x64, 0xf5, 0xb5, 0x8e, + 0x9e, 0x87, 0x6a, 0xec, 0x6e, 0x92, 0x66, 0xc7, 0xef, 0x29, 0x2a, 0xd1, 0x10, 0xed, 0x58, 0x61, + 0xb0, 0x1c, 0xfa, 0x8e, 0xd8, 0xad, 0x66, 0x26, 0xe5, 0xbc, 0x68, 0xc7, 0x0a, 0x03, 0xbd, 0x0b, + 0xc6, 0x8c, 0x97, 0x94, 0xf3, 0x92, 0x6d, 0x35, 0x0c, 0xbd, 0x1d, 0xe3, 0x14, 0x16, 0x15, 0x40, + 0xca, 0xd2, 0x92, 0x7a, 0x9a, 0x09, 0x20, 0x25, 0x0e, 0x63, 0x6c, 0x60, 0xb0, 0x8a, 0x15, 0x7e, + 0x27, 0x66, 0xe7, 0xc7, 0xc3, 0xfa, 0xce, 0x96, 0x39, 0xd1, 0x86, 0x15, 0x14, 0x5d, 0x04, 0x68, + 0x39, 0x41, 0xc7, 0xf1, 0xe9, 0x08, 0x09, 0x87, 0x99, 0x5a, 0x86, 0x4b, 0x0a, 0x82, 0x0d, 0x2c, + 0xfa, 0xc6, 0x89, 0xd7, 0x22, 0x1f, 0x08, 0x03, 0x19, 0xde, 0xae, 0x43, 0x0a, 0x44, 0x3b, 0x56, + 0x18, 0xe8, 0x45, 0x18, 0x75, 0x82, 0x26, 0x37, 0x0b, 0xc3, 0x48, 0x9c, 0x4c, 0xaa, 0x3d, 0xe7, + 0xcd, 0x98, 0xcc, 0x6a, 0x28, 0x36, 0x51, 0xb3, 0x17, 0xd6, 0xc0, 0x80, 0x17, 0x63, 0xfe, 0x89, + 0x05, 0xc7, 0x74, 0x69, 0x2b, 0xe6, 0x57, 0x4b, 0x39, 0x14, 0xad, 0x3d, 0x1d, 0x8a, 0xe9, 0x4a, + 0x24, 0xa5, 0x81, 0x2a, 0x91, 0x98, 0x45, 0x42, 0xca, 0xbb, 0x16, 0x09, 0x79, 0x0b, 0x8c, 0x6c, + 0x91, 0xae, 0x51, 0x4d, 0x84, 0x69, 0x87, 0xeb, 0xbc, 0x09, 0x4b, 0x18, 0xb2, 0x61, 0xd8, 0x75, + 0x54, 0x99, 0xd2, 0x31, 0x11, 0x91, 0x36, 0xcb, 0x90, 0x04, 0xc4, 0x5e, 0x86, 0x9a, 0x3a, 0xca, + 0x97, 0xfe, 0x3d, 0x2b, 0xdf, 0xbf, 0x47, 0xd7, 0xb6, 0x11, 0x95, 0xa0, 0xd7, 0x36, 0x8b, 0x65, + 0x10, 0x41, 0x0a, 0xf5, 0xb5, 0x5f, 0xfb, 0xda, 0xb9, 0x37, 0xfd, 0xd6, 0xd7, 0xce, 0xbd, 0xe9, + 0xf7, 0xbf, 0x76, 0xee, 0x4d, 0x9f, 0xb8, 0x7f, 0xce, 0xfa, 0xb5, 0xfb, 0xe7, 0xac, 0xdf, 0xba, + 0x7f, 0xce, 0xfa, 0xfd, 0xfb, 0xe7, 0xac, 0xaf, 0xde, 0x3f, 0x67, 0xbd, 0xf6, 0x9f, 0xce, 0xbd, + 0xe9, 0x03, 0xdf, 0xba, 0x5b, 0x18, 0xff, 0xf6, 0x3b, 0x59, 0xec, 0x3e, 0x5d, 0xcf, 0x17, 0x8c, + 0x49, 0x7c, 0x41, 0xae, 0xe7, 0xff, 0x1f, 0x00, 0x00, 0xff, 0xff, 0x63, 0x16, 0x6c, 0x4b, 0x9d, + 0x09, 0x01, 0x00, } func (m *AWSAuthConfig) Marshal() (dAtA []byte, err error) { @@ -13018,6 +13027,34 @@ func (m *RepoCreds) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + i -= len(m.AzureActiveDirectoryEndpoint) + copy(dAtA[i:], m.AzureActiveDirectoryEndpoint) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.AzureActiveDirectoryEndpoint))) + i-- + dAtA[i] = 0x2 + i-- + dAtA[i] = 0x82 + i -= len(m.AzureServicePrincipalTenantId) + copy(dAtA[i:], m.AzureServicePrincipalTenantId) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.AzureServicePrincipalTenantId))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xfa + i -= len(m.AzureServicePrincipalClientSecret) + copy(dAtA[i:], m.AzureServicePrincipalClientSecret) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.AzureServicePrincipalClientSecret))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xf2 + i -= len(m.AzureServicePrincipalClientId) + copy(dAtA[i:], m.AzureServicePrincipalClientId) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.AzureServicePrincipalClientId))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xea i-- if m.InsecureOCIForceHttp { dAtA[i] = 1 @@ -13203,6 +13240,34 @@ func (m *Repository) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + i -= len(m.AzureActiveDirectoryEndpoint) + copy(dAtA[i:], m.AzureActiveDirectoryEndpoint) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.AzureActiveDirectoryEndpoint))) + i-- + dAtA[i] = 0x2 + i-- + dAtA[i] = 0x82 + i -= len(m.AzureServicePrincipalTenantId) + copy(dAtA[i:], m.AzureServicePrincipalTenantId) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.AzureServicePrincipalTenantId))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xfa + i -= len(m.AzureServicePrincipalClientSecret) + copy(dAtA[i:], m.AzureServicePrincipalClientSecret) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.AzureServicePrincipalClientSecret))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xf2 + i -= len(m.AzureServicePrincipalClientId) + copy(dAtA[i:], m.AzureServicePrincipalClientId) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.AzureServicePrincipalClientId))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xea i-- if m.WebhookManifestCacheWarmDisabled { dAtA[i] = 1 @@ -19065,6 +19130,14 @@ func (m *RepoCreds) Size() (n int) { l = len(m.BearerToken) n += 2 + l + sovGenerated(uint64(l)) n += 3 + l = len(m.AzureServicePrincipalClientId) + n += 2 + l + sovGenerated(uint64(l)) + l = len(m.AzureServicePrincipalClientSecret) + n += 2 + l + sovGenerated(uint64(l)) + l = len(m.AzureServicePrincipalTenantId) + n += 2 + l + sovGenerated(uint64(l)) + l = len(m.AzureActiveDirectoryEndpoint) + n += 2 + l + sovGenerated(uint64(l)) return n } @@ -19135,6 +19208,14 @@ func (m *Repository) Size() (n int) { n += 3 n += 2 + sovGenerated(uint64(m.Depth)) n += 3 + l = len(m.AzureServicePrincipalClientId) + n += 2 + l + sovGenerated(uint64(l)) + l = len(m.AzureServicePrincipalClientSecret) + n += 2 + l + sovGenerated(uint64(l)) + l = len(m.AzureServicePrincipalTenantId) + n += 2 + l + sovGenerated(uint64(l)) + l = len(m.AzureActiveDirectoryEndpoint) + n += 2 + l + sovGenerated(uint64(l)) return n } @@ -22297,6 +22378,10 @@ func (this *RepoCreds) String() string { `UseAzureWorkloadIdentity:` + fmt.Sprintf("%v", this.UseAzureWorkloadIdentity) + `,`, `BearerToken:` + fmt.Sprintf("%v", this.BearerToken) + `,`, `InsecureOCIForceHttp:` + fmt.Sprintf("%v", this.InsecureOCIForceHttp) + `,`, + `AzureServicePrincipalClientId:` + fmt.Sprintf("%v", this.AzureServicePrincipalClientId) + `,`, + `AzureServicePrincipalClientSecret:` + fmt.Sprintf("%v", this.AzureServicePrincipalClientSecret) + `,`, + `AzureServicePrincipalTenantId:` + fmt.Sprintf("%v", this.AzureServicePrincipalTenantId) + `,`, + `AzureActiveDirectoryEndpoint:` + fmt.Sprintf("%v", this.AzureActiveDirectoryEndpoint) + `,`, `}`, }, "") return s @@ -22350,6 +22435,10 @@ func (this *Repository) String() string { `InsecureOCIForceHttp:` + fmt.Sprintf("%v", this.InsecureOCIForceHttp) + `,`, `Depth:` + fmt.Sprintf("%v", this.Depth) + `,`, `WebhookManifestCacheWarmDisabled:` + fmt.Sprintf("%v", this.WebhookManifestCacheWarmDisabled) + `,`, + `AzureServicePrincipalClientId:` + fmt.Sprintf("%v", this.AzureServicePrincipalClientId) + `,`, + `AzureServicePrincipalClientSecret:` + fmt.Sprintf("%v", this.AzureServicePrincipalClientSecret) + `,`, + `AzureServicePrincipalTenantId:` + fmt.Sprintf("%v", this.AzureServicePrincipalTenantId) + `,`, + `AzureActiveDirectoryEndpoint:` + fmt.Sprintf("%v", this.AzureActiveDirectoryEndpoint) + `,`, `}`, }, "") return s @@ -47222,6 +47311,134 @@ func (m *RepoCreds) Unmarshal(dAtA []byte) error { } } m.InsecureOCIForceHttp = bool(v != 0) + case 29: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AzureServicePrincipalClientId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AzureServicePrincipalClientId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 30: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AzureServicePrincipalClientSecret", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AzureServicePrincipalClientSecret = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 31: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AzureServicePrincipalTenantId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AzureServicePrincipalTenantId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 32: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AzureActiveDirectoryEndpoint", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AzureActiveDirectoryEndpoint = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -48139,6 +48356,134 @@ func (m *Repository) Unmarshal(dAtA []byte) error { } } m.WebhookManifestCacheWarmDisabled = bool(v != 0) + case 29: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AzureServicePrincipalClientId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AzureServicePrincipalClientId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 30: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AzureServicePrincipalClientSecret", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AzureServicePrincipalClientSecret = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 31: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AzureServicePrincipalTenantId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AzureServicePrincipalTenantId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 32: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AzureActiveDirectoryEndpoint", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AzureActiveDirectoryEndpoint = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) diff --git a/pkg/apis/application/v1alpha1/generated.proto b/pkg/apis/application/v1alpha1/generated.proto index 4274934950..2c3813924d 100644 --- a/pkg/apis/application/v1alpha1/generated.proto +++ b/pkg/apis/application/v1alpha1/generated.proto @@ -1876,6 +1876,18 @@ message RepoCreds { // InsecureOCIForceHttp specifies whether the connection to the repository uses TLS at _all_. If true, no TLS. This flag is applicable for OCI repos only. optional bool insecureOCIForceHttp = 26; + + // AzureServicePrincipalClientId specifies the client ID of the Azure Service Principal used to access the repo + optional string azureServicePrincipalClientId = 29; + + // AzureServicePrincipalClientSecret specifies the client secret of the Azure Service Principal used to access the repo + optional string azureServicePrincipalClientSecret = 30; + + // AzureServicePrincipalTenantId specifies the tenant ID of the Azure Service Principal used to access the repo + optional string azureServicePrincipalTenantId = 31; + + // AzureActiveDirectoryEndpoint specifies the Azure Active Directory endpoint used for Service Principal authentication. If empty will default to https://login.microsoftonline.com + optional string azureActiveDirectoryEndpoint = 32; } // RepositoryList is a collection of Repositories. @@ -1973,6 +1985,18 @@ message Repository { // When set, webhook handlers will only trigger reconciliation for affected applications and skip Redis cache // operations for unaffected ones. Recommended for large monorepos with plain YAML manifests. optional bool webhookManifestCacheWarmDisabled = 28; + + // AzureServicePrincipalClientId specifies the client ID of the Azure Service Principal used to access the repo + optional string azureServicePrincipalClientId = 29; + + // AzureServicePrincipalClientSecret specifies the client secret of the Azure Service Principal used to access the repo + optional string azureServicePrincipalClientSecret = 30; + + // AzureServicePrincipalTenantId specifies the tenant ID of the Azure Service Principal used to access the repo + optional string azureServicePrincipalTenantId = 31; + + // AzureActiveDirectoryEndpoint specifies the Azure Active Directory endpoint used for Service Principal authentication. If empty will default to https://login.microsoftonline.com + optional string azureActiveDirectoryEndpoint = 32; } // A RepositoryCertificate is either SSH known hosts entry or TLS certificate diff --git a/pkg/apis/application/v1alpha1/repository_types.go b/pkg/apis/application/v1alpha1/repository_types.go index 18b0170536..33d74f032f 100644 --- a/pkg/apis/application/v1alpha1/repository_types.go +++ b/pkg/apis/application/v1alpha1/repository_types.go @@ -57,6 +57,14 @@ type RepoCreds struct { BearerToken string `json:"bearerToken,omitempty" protobuf:"bytes,25,opt,name=bearerToken"` // InsecureOCIForceHttp specifies whether the connection to the repository uses TLS at _all_. If true, no TLS. This flag is applicable for OCI repos only. InsecureOCIForceHttp bool `json:"insecureOCIForceHttp,omitempty" protobuf:"bytes,26,opt,name=insecureOCIForceHttp"` //nolint:revive //FIXME(var-naming) + // AzureServicePrincipalClientId specifies the client ID of the Azure Service Principal used to access the repo + AzureServicePrincipalClientId string `json:"azureServicePrincipalClientId,omitempty" protobuf:"bytes,29,opt,name=azureServicePrincipalClientId"` + // AzureServicePrincipalClientSecret specifies the client secret of the Azure Service Principal used to access the repo + AzureServicePrincipalClientSecret string `json:"azureServicePrincipalClientSecret,omitempty" protobuf:"bytes,30,opt,name=azureServicePrincipalClientSecret"` + // AzureServicePrincipalTenantId specifies the tenant ID of the Azure Service Principal used to access the repo + AzureServicePrincipalTenantId string `json:"azureServicePrincipalTenantId,omitempty" protobuf:"bytes,31,opt,name=azureServicePrincipalTenantId"` + // AzureActiveDirectoryEndpoint specifies the Azure Active Directory endpoint used for Service Principal authentication. If empty will default to https://login.microsoftonline.com + AzureActiveDirectoryEndpoint string `json:"azureActiveDirectoryEndpoint,omitempty" protobuf:"bytes,32,opt,name=azureActiveDirectoryEndpoint"` } // Repository is a repository holding application configurations @@ -120,6 +128,14 @@ type Repository struct { // When set, webhook handlers will only trigger reconciliation for affected applications and skip Redis cache // operations for unaffected ones. Recommended for large monorepos with plain YAML manifests. WebhookManifestCacheWarmDisabled bool `json:"webhookManifestCacheWarmDisabled,omitempty" protobuf:"varint,28,opt,name=webhookManifestCacheWarmDisabled"` + // AzureServicePrincipalClientId specifies the client ID of the Azure Service Principal used to access the repo + AzureServicePrincipalClientId string `json:"azureServicePrincipalClientId,omitempty" protobuf:"bytes,29,opt,name=azureServicePrincipalClientId"` + // AzureServicePrincipalClientSecret specifies the client secret of the Azure Service Principal used to access the repo + AzureServicePrincipalClientSecret string `json:"azureServicePrincipalClientSecret,omitempty" protobuf:"bytes,30,opt,name=azureServicePrincipalClientSecret"` + // AzureServicePrincipalTenantId specifies the tenant ID of the Azure Service Principal used to access the repo + AzureServicePrincipalTenantId string `json:"azureServicePrincipalTenantId,omitempty" protobuf:"bytes,31,opt,name=azureServicePrincipalTenantId"` + // AzureActiveDirectoryEndpoint specifies the Azure Active Directory endpoint used for Service Principal authentication. If empty will default to https://login.microsoftonline.com + AzureActiveDirectoryEndpoint string `json:"azureActiveDirectoryEndpoint,omitempty" protobuf:"bytes,32,opt,name=azureActiveDirectoryEndpoint"` } // IsInsecure returns true if the repository has been configured to skip server verification or set to HTTP only @@ -134,7 +150,7 @@ func (repo *Repository) IsLFSEnabled() bool { // HasCredentials returns true when the repository has been configured with any credentials func (repo *Repository) HasCredentials() bool { - return repo.Username != "" || repo.Password != "" || repo.BearerToken != "" || repo.SSHPrivateKey != "" || repo.TLSClientCertData != "" || repo.GithubAppPrivateKey != "" || repo.UseAzureWorkloadIdentity + return repo.Username != "" || repo.Password != "" || repo.BearerToken != "" || repo.SSHPrivateKey != "" || repo.TLSClientCertData != "" || repo.GithubAppPrivateKey != "" || repo.UseAzureWorkloadIdentity || repo.AzureServicePrincipalClientSecret != "" } // CopyCredentialsFromRepo copies all credential information from source repository to receiving repository @@ -173,6 +189,18 @@ func (repo *Repository) CopyCredentialsFromRepo(source *Repository) { if repo.GCPServiceAccountKey == "" { repo.GCPServiceAccountKey = source.GCPServiceAccountKey } + if repo.AzureServicePrincipalClientId == "" { + repo.AzureServicePrincipalClientId = source.AzureServicePrincipalClientId + } + if repo.AzureServicePrincipalClientSecret == "" { + repo.AzureServicePrincipalClientSecret = source.AzureServicePrincipalClientSecret + } + if repo.AzureServicePrincipalTenantId == "" { + repo.AzureServicePrincipalTenantId = source.AzureServicePrincipalTenantId + } + if repo.AzureActiveDirectoryEndpoint == "" { + repo.AzureActiveDirectoryEndpoint = source.AzureActiveDirectoryEndpoint + } repo.InsecureOCIForceHttp = source.InsecureOCIForceHttp repo.ForceHttpBasicAuth = source.ForceHttpBasicAuth repo.UseAzureWorkloadIdentity = source.UseAzureWorkloadIdentity @@ -215,6 +243,18 @@ func (repo *Repository) CopyCredentialsFrom(source *RepoCreds) { if repo.GCPServiceAccountKey == "" { repo.GCPServiceAccountKey = source.GCPServiceAccountKey } + if repo.AzureServicePrincipalClientId == "" { + repo.AzureServicePrincipalClientId = source.AzureServicePrincipalClientId + } + if repo.AzureServicePrincipalClientSecret == "" { + repo.AzureServicePrincipalClientSecret = source.AzureServicePrincipalClientSecret + } + if repo.AzureServicePrincipalTenantId == "" { + repo.AzureServicePrincipalTenantId = source.AzureServicePrincipalTenantId + } + if repo.AzureActiveDirectoryEndpoint == "" { + repo.AzureActiveDirectoryEndpoint = source.AzureActiveDirectoryEndpoint + } if repo.Proxy == "" { repo.Proxy = source.Proxy } @@ -252,6 +292,14 @@ func (repo *Repository) GetGitCreds(store git.CredsStore) git.Creds { if repo.UseAzureWorkloadIdentity { return git.NewAzureWorkloadIdentityCreds(store, workloadidentity.NewWorkloadIdentityTokenProvider()) } + if repo.AzureServicePrincipalClientId != "" && repo.AzureServicePrincipalClientSecret != "" && repo.AzureServicePrincipalTenantId != "" { + creds := git.NewAzureServicePrincipalCreds(repo.AzureServicePrincipalTenantId, repo.AzureServicePrincipalClientId, repo.AzureServicePrincipalClientSecret, store). + WithActiveDirectoryEndpoint(repo.AzureActiveDirectoryEndpoint). + WithClientCert(repo.TLSClientCertData, repo.TLSClientCertKey). + WithProxy(repo.Proxy). + WithNoProxy(repo.NoProxy) + return creds + } return git.NopCreds{} } @@ -351,22 +399,25 @@ func (repo *Repository) StringForLogging() string { // Sanitized returns a copy of the Repository with sensitive information removed. func (repo *Repository) Sanitized() *Repository { return &Repository{ - Repo: repo.Repo, - Type: repo.Type, - Name: repo.Name, - Insecure: repo.IsInsecure(), - EnableLFS: repo.EnableLFS, - EnableOCI: repo.EnableOCI, - Proxy: repo.Proxy, - NoProxy: repo.NoProxy, - Project: repo.Project, - ForceHttpBasicAuth: repo.ForceHttpBasicAuth, - InheritedCreds: repo.InheritedCreds, - GithubAppId: repo.GithubAppId, - GithubAppInstallationId: repo.GithubAppInstallationId, - GitHubAppEnterpriseBaseURL: repo.GitHubAppEnterpriseBaseURL, - UseAzureWorkloadIdentity: repo.UseAzureWorkloadIdentity, - Depth: repo.Depth, + Repo: repo.Repo, + Type: repo.Type, + Name: repo.Name, + Insecure: repo.IsInsecure(), + EnableLFS: repo.EnableLFS, + EnableOCI: repo.EnableOCI, + Proxy: repo.Proxy, + NoProxy: repo.NoProxy, + Project: repo.Project, + ForceHttpBasicAuth: repo.ForceHttpBasicAuth, + InheritedCreds: repo.InheritedCreds, + GithubAppId: repo.GithubAppId, + GithubAppInstallationId: repo.GithubAppInstallationId, + GitHubAppEnterpriseBaseURL: repo.GitHubAppEnterpriseBaseURL, + UseAzureWorkloadIdentity: repo.UseAzureWorkloadIdentity, + AzureActiveDirectoryEndpoint: repo.AzureActiveDirectoryEndpoint, + AzureServicePrincipalClientId: repo.AzureServicePrincipalClientId, + AzureServicePrincipalTenantId: repo.AzureServicePrincipalTenantId, + Depth: repo.Depth, } } diff --git a/pkg/apis/application/v1alpha1/repository_types_test.go b/pkg/apis/application/v1alpha1/repository_types_test.go index 116bde08f7..a6bd115110 100644 --- a/pkg/apis/application/v1alpha1/repository_types_test.go +++ b/pkg/apis/application/v1alpha1/repository_types_test.go @@ -87,6 +87,15 @@ func TestGetGitCreds(t *testing.T) { }, expected: git.NewGoogleCloudCreds("gcp-key", nil), }, + { + name: "Azure Service Principal credentials", + repo: &Repository{ + AzureServicePrincipalClientId: "client-id", + AzureServicePrincipalClientSecret: "client-secret", + AzureServicePrincipalTenantId: "tenant-id", + }, + expected: git.NewAzureServicePrincipalCreds("tenant-id", "client-id", "client-secret", nil), + }, { name: "No credentials", repo: &Repository{}, @@ -130,30 +139,33 @@ func TestGetGitCreds_GitHubApp_InstallationNotFound(t *testing.T) { func TestSanitizedRepository(t *testing.T) { repo := &Repository{ - Repo: "https://github.com/argoproj/argo-cd.git", - Type: "git", - Name: "argo-cd", - Username: "admin", - Password: "super-secret-password", - SSHPrivateKey: "-----BEGIN RSA PRIVATE KEY-----", - BearerToken: "eyJhbGciOiJIUzI1NiJ9", - TLSClientCertData: "cert-data", - TLSClientCertKey: "cert-key", - GCPServiceAccountKey: "gcp-key", - GithubAppPrivateKey: "github-app-key", - Insecure: true, - EnableLFS: true, - EnableOCI: true, - Proxy: "http://proxy:8080", - NoProxy: "localhost", - Project: "default", - ForceHttpBasicAuth: true, - InheritedCreds: true, - GithubAppId: 12345, - GithubAppInstallationId: 67890, - GitHubAppEnterpriseBaseURL: "https://ghe.example.com/api/v3", - UseAzureWorkloadIdentity: true, - Depth: 1, + Repo: "https://github.com/argoproj/argo-cd.git", + Type: "git", + Name: "argo-cd", + Username: "admin", + Password: "super-secret-password", + SSHPrivateKey: "-----BEGIN RSA PRIVATE KEY-----", + BearerToken: "eyJhbGciOiJIUzI1NiJ9", + TLSClientCertData: "cert-data", + TLSClientCertKey: "cert-key", + GCPServiceAccountKey: "gcp-key", + GithubAppPrivateKey: "github-app-key", + Insecure: true, + EnableLFS: true, + EnableOCI: true, + Proxy: "http://proxy:8080", + NoProxy: "localhost", + Project: "default", + ForceHttpBasicAuth: true, + InheritedCreds: true, + GithubAppId: 12345, + GithubAppInstallationId: 67890, + GitHubAppEnterpriseBaseURL: "https://ghe.example.com/api/v3", + UseAzureWorkloadIdentity: true, + AzureServicePrincipalClientId: "client-id", + AzureServicePrincipalClientSecret: "client-secret", + AzureServicePrincipalTenantId: "tenant-id", + Depth: 1, } sanitized := repo.Sanitized() @@ -174,6 +186,8 @@ func TestSanitizedRepository(t *testing.T) { assert.Equal(t, repo.GithubAppInstallationId, sanitized.GithubAppInstallationId) assert.Equal(t, repo.GitHubAppEnterpriseBaseURL, sanitized.GitHubAppEnterpriseBaseURL) assert.Equal(t, repo.UseAzureWorkloadIdentity, sanitized.UseAzureWorkloadIdentity) + assert.Equal(t, repo.AzureServicePrincipalClientId, sanitized.AzureServicePrincipalClientId) + assert.Equal(t, repo.AzureServicePrincipalTenantId, sanitized.AzureServicePrincipalTenantId) assert.Equal(t, repo.Depth, sanitized.Depth) // Sensitive fields must be stripped @@ -185,6 +199,7 @@ func TestSanitizedRepository(t *testing.T) { assert.Empty(t, sanitized.TLSClientCertKey) assert.Empty(t, sanitized.GCPServiceAccountKey) assert.Empty(t, sanitized.GithubAppPrivateKey) + assert.Empty(t, sanitized.AzureServicePrincipalClientSecret) } func TestSanitizedRepositoryPreservesDepthZero(t *testing.T) { diff --git a/server/repository/repository.go b/server/repository/repository.go index 30ff87167d..c4a7dd8096 100644 --- a/server/repository/repository.go +++ b/server/repository/repository.go @@ -686,25 +686,29 @@ func (s *Server) ValidateAccess(ctx context.Context, q *repositorypkg.RepoAccess } repo := &v1alpha1.Repository{ - Repo: q.Repo, - Type: q.Type, - Name: q.Name, - Username: q.Username, - Password: q.Password, - BearerToken: q.BearerToken, - SSHPrivateKey: q.SshPrivateKey, - Insecure: q.Insecure, - TLSClientCertData: q.TlsClientCertData, - TLSClientCertKey: q.TlsClientCertKey, - EnableOCI: q.EnableOci, - GithubAppPrivateKey: q.GithubAppPrivateKey, - GithubAppId: q.GithubAppID, - GithubAppInstallationId: q.GithubAppInstallationID, - GitHubAppEnterpriseBaseURL: q.GithubAppEnterpriseBaseUrl, - Proxy: q.Proxy, - GCPServiceAccountKey: q.GcpServiceAccountKey, - InsecureOCIForceHttp: q.InsecureOciForceHttp, - UseAzureWorkloadIdentity: q.UseAzureWorkloadIdentity, + Repo: q.Repo, + Type: q.Type, + Name: q.Name, + Username: q.Username, + Password: q.Password, + BearerToken: q.BearerToken, + SSHPrivateKey: q.SshPrivateKey, + Insecure: q.Insecure, + TLSClientCertData: q.TlsClientCertData, + TLSClientCertKey: q.TlsClientCertKey, + EnableOCI: q.EnableOci, + GithubAppPrivateKey: q.GithubAppPrivateKey, + GithubAppId: q.GithubAppID, + GithubAppInstallationId: q.GithubAppInstallationID, + GitHubAppEnterpriseBaseURL: q.GithubAppEnterpriseBaseUrl, + Proxy: q.Proxy, + GCPServiceAccountKey: q.GcpServiceAccountKey, + InsecureOCIForceHttp: q.InsecureOciForceHttp, + UseAzureWorkloadIdentity: q.UseAzureWorkloadIdentity, + AzureServicePrincipalClientId: q.AzureServicePrincipalClientId, + AzureServicePrincipalClientSecret: q.AzureServicePrincipalClientSecret, + AzureServicePrincipalTenantId: q.AzureServicePrincipalTenantId, + AzureActiveDirectoryEndpoint: q.AzureActiveDirectoryEndpoint, } // If repo does not have credentials, check if there are credentials stored @@ -737,24 +741,28 @@ func (s *Server) ValidateWriteAccess(ctx context.Context, q *repositorypkg.RepoA } repo := &v1alpha1.Repository{ - Repo: q.Repo, - Type: q.Type, - Name: q.Name, - Username: q.Username, - Password: q.Password, - BearerToken: q.BearerToken, - SSHPrivateKey: q.SshPrivateKey, - Insecure: q.Insecure, - TLSClientCertData: q.TlsClientCertData, - TLSClientCertKey: q.TlsClientCertKey, - EnableOCI: q.EnableOci, - GithubAppPrivateKey: q.GithubAppPrivateKey, - GithubAppId: q.GithubAppID, - GithubAppInstallationId: q.GithubAppInstallationID, - GitHubAppEnterpriseBaseURL: q.GithubAppEnterpriseBaseUrl, - Proxy: q.Proxy, - GCPServiceAccountKey: q.GcpServiceAccountKey, - UseAzureWorkloadIdentity: q.UseAzureWorkloadIdentity, + Repo: q.Repo, + Type: q.Type, + Name: q.Name, + Username: q.Username, + Password: q.Password, + BearerToken: q.BearerToken, + SSHPrivateKey: q.SshPrivateKey, + Insecure: q.Insecure, + TLSClientCertData: q.TlsClientCertData, + TLSClientCertKey: q.TlsClientCertKey, + EnableOCI: q.EnableOci, + GithubAppPrivateKey: q.GithubAppPrivateKey, + GithubAppId: q.GithubAppID, + GithubAppInstallationId: q.GithubAppInstallationID, + GitHubAppEnterpriseBaseURL: q.GithubAppEnterpriseBaseUrl, + Proxy: q.Proxy, + GCPServiceAccountKey: q.GcpServiceAccountKey, + UseAzureWorkloadIdentity: q.UseAzureWorkloadIdentity, + AzureServicePrincipalClientId: q.AzureServicePrincipalClientId, + AzureServicePrincipalClientSecret: q.AzureServicePrincipalClientSecret, + AzureServicePrincipalTenantId: q.AzureServicePrincipalTenantId, + AzureActiveDirectoryEndpoint: q.AzureActiveDirectoryEndpoint, } err := s.testRepo(ctx, repo) diff --git a/server/repository/repository.proto b/server/repository/repository.proto index aaffaaa123..a1714cbdab 100644 --- a/server/repository/repository.proto +++ b/server/repository/repository.proto @@ -95,6 +95,14 @@ message RepoAccessQuery { string bearerToken = 21; // Whether https should be disabled for an OCI repo bool insecureOciForceHttp = 22; + // Azure Service Principal Client ID + string azureServicePrincipalClientId = 23; + // Azure Service Principal Client Secret + string azureServicePrincipalClientSecret = 24; + // Azure Service Principal Tenant ID + string azureServicePrincipalTenantId = 25; + // Azure Active Directory Endpoint + string azureActiveDirectoryEndpoint = 26; } message RepoResponse {} diff --git a/server/repository/repository_test.go b/server/repository/repository_test.go index c98ff4088b..026d686a19 100644 --- a/server/repository/repository_test.go +++ b/server/repository/repository_test.go @@ -284,6 +284,19 @@ func TestRepositoryServer(t *testing.T) { require.NoError(t, err) }) + t.Run("Test_validateWriteAccess", func(t *testing.T) { + repoServerClient := &mocks.RepoServerServiceClient{} + repoServerClient.EXPECT().TestRepository(mock.Anything, mock.Anything).Return(&apiclient.TestRepositoryResponse{}, nil) + repoServerClientset := mocks.Clientset{RepoServerServiceClient: repoServerClient} + + s := NewServer(&repoServerClientset, argoDB, enforcer, nil, appLister, projInformer, testNamespace, settingsMgr, true) + url := "https://test" + _, err := s.ValidateWriteAccess(t.Context(), &repository.RepoAccessQuery{ + Repo: url, + }) + require.NoError(t, err) + }) + t.Run("Test_Get", func(t *testing.T) { repoServerClient := &mocks.RepoServerServiceClient{} repoServerClient.EXPECT().TestRepository(mock.Anything, mock.Anything).Return(&apiclient.TestRepositoryResponse{}, nil) diff --git a/ui/src/app/settings/components/repos-list/repos-list.tsx b/ui/src/app/settings/components/repos-list/repos-list.tsx index 8670a2b56e..15176eff73 100644 --- a/ui/src/app/settings/components/repos-list/repos-list.tsx +++ b/ui/src/app/settings/components/repos-list/repos-list.tsx @@ -82,6 +82,21 @@ interface NewGoogleCloudSourceRepoParams { write: boolean; } +interface NewAzureServicePrincipalRepoParams { + type: string; + name: string; + url: string; + azureServicePrincipalClientId: string; + azureServicePrincipalClientSecret: string; + azureServicePrincipalTenantId: string; + azureActiveDirectoryEndpoint: string; + proxy: string; + noProxy: string; + project?: string; + // write should be true if saving as a write credential. + write: boolean; +} + interface NewSSHRepoCredsParams { url: string; sshPrivateKey: string; @@ -128,11 +143,25 @@ interface NewGoogleCloudSourceRepoCredsParams { write: boolean; } +interface NewAzureServicePrincipalRepoCredsParams { + url: string; + azureServicePrincipalClientId: string; + azureServicePrincipalClientSecret: string; + azureServicePrincipalTenantId: string; + azureActiveDirectoryEndpoint: string; + proxy: string; + noProxy: string; + project?: string; + // write should be true if saving as a write credential. + write: boolean; +} + export enum ConnectionMethod { SSH = 'via SSH', HTTPS = 'via HTTP/HTTPS', GITHUBAPP = 'via GitHub App', - GOOGLECLOUD = 'via Google Cloud' + GOOGLECLOUD = 'via Google Cloud', + AZURESERVICEPRINCIPAL = 'via Azure Service Principal' } export const ReposList = ({match, location}: RouteComponentProps) => { @@ -172,8 +201,15 @@ export const ReposList = ({match, location}: RouteComponentProps) => { {method.toUpperCase()}

)} - items={[ConnectionMethod.SSH, ConnectionMethod.HTTPS, ConnectionMethod.GITHUBAPP, ConnectionMethod.GOOGLECLOUD].map( - (connectMethod: ConnectionMethod.SSH | ConnectionMethod.HTTPS | ConnectionMethod.GITHUBAPP | ConnectionMethod.GOOGLECLOUD) => ({ + items={[ConnectionMethod.SSH, ConnectionMethod.HTTPS, ConnectionMethod.GITHUBAPP, ConnectionMethod.GOOGLECLOUD, ConnectionMethod.AZURESERVICEPRINCIPAL].map( + ( + connectMethod: + | ConnectionMethod.SSH + | ConnectionMethod.HTTPS + | ConnectionMethod.GITHUBAPP + | ConnectionMethod.GOOGLECLOUD + | ConnectionMethod.AZURESERVICEPRINCIPAL + ) => ({ title: connectMethod.toUpperCase(), action: () => { onSelection(connectMethod); @@ -191,7 +227,7 @@ export const ReposList = ({match, location}: RouteComponentProps) => { }; const onChooseDefaultValues = (): FormValues => { - return {type: 'git', ghType: 'GitHub', write: false}; + return {type: 'git', ghType: 'GitHub', azureType: 'Azure Public Cloud', write: false}; }; const onValidateErrors = (params: FormValues): FormErrors => { @@ -233,6 +269,16 @@ export const ReposList = ({match, location}: RouteComponentProps) => { gcpServiceAccountKey: !googleCloudValues.gcpServiceAccountKey && 'GCP service account key is required', depth: googleCloudValues.depth != undefined && googleCloudValues.depth < 0 && 'Depth must be a non-negative number' }; + case ConnectionMethod.AZURESERVICEPRINCIPAL: + const azureServicePrincipalValues = params as NewAzureServicePrincipalRepoParams; + return { + url: + (!azureServicePrincipalValues.url && 'Repository URL is required') || + (credsTemplate && !isHTTPOrHTTPSUrl(azureServicePrincipalValues.url) && 'Not a valid HTTP/HTTPS URL'), + azureServicePrincipalClientId: !azureServicePrincipalValues.azureServicePrincipalClientId && 'Azure Service Principal Client ID is required', + azureServicePrincipalClientSecret: !azureServicePrincipalValues.azureServicePrincipalClientSecret && 'Azure Service Principal Client Secret is required', + azureServicePrincipalTenantId: !azureServicePrincipalValues.azureServicePrincipalTenantId && 'Azure Service Principal Tenant ID is required' + }; } }; @@ -283,6 +329,8 @@ export const ReposList = ({match, location}: RouteComponentProps) => { return connectGitHubAppRepo(params as NewGitHubAppRepoParams); case ConnectionMethod.GOOGLECLOUD: return connectGoogleCloudSourceRepo(params as NewGoogleCloudSourceRepoParams); + case ConnectionMethod.AZURESERVICEPRINCIPAL: + return connectAzureServicePrincipalRepo(params as NewAzureServicePrincipalRepoParams); } }; @@ -313,9 +361,9 @@ export const ReposList = ({match, location}: RouteComponentProps) => { return url.replace('https://', '').replace('oci://', ''); }; - // only connections of git type which is not via GitHub App are updatable + // only connections of git type which are not via GitHub App or Azure Service Principal are updatable const isRepoUpdatable = (repo: models.Repository) => { - return isHTTPOrHTTPSUrl(repo.repo) && repo.type === 'git' && !repo.githubAppID; + return isHTTPOrHTTPSUrl(repo.repo) && repo.type === 'git' && !repo.githubAppID && !repo.azureServicePrincipalClientId; }; // Forces a reload of configured repositories, circumventing the cache @@ -466,7 +514,7 @@ export const ReposList = ({match, location}: RouteComponentProps) => { } }; - // Connect a new repository or create a repository credentials for GitHub App repositories + // Connect a new repository or create a repository credentials for Google Cloud Source repositories const connectGoogleCloudSourceRepo = async (params: NewGoogleCloudSourceRepoParams) => { if (credsTemplate.current) { createGoogleCloudSourceCreds({ @@ -495,6 +543,40 @@ export const ReposList = ({match, location}: RouteComponentProps) => { } }; + // Connect a new repository or create a repository credentials for Azure Service Principal repositories + const connectAzureServicePrincipalRepo = async (params: NewAzureServicePrincipalRepoParams) => { + if (credsTemplate.current) { + createAzureServicePrincipalCreds({ + url: params.url, + azureServicePrincipalClientId: params.azureServicePrincipalClientId, + azureServicePrincipalClientSecret: params.azureServicePrincipalClientSecret, + azureServicePrincipalTenantId: params.azureServicePrincipalTenantId, + azureActiveDirectoryEndpoint: params.azureActiveDirectoryEndpoint, + proxy: params.proxy, + noProxy: params.noProxy, + write: params.write + }); + } else { + setConnecting(true); + try { + if (params.write) { + await services.repos.createAzureServicePrincipalWrite(params); + } else { + await services.repos.createAzureServicePrincipal(params); + } + repoLoader.current.reload(); + setConnectRepo(false); + } catch (e) { + ctx.notifications.show({ + content: , + type: NotificationType.Error + }); + } finally { + setConnecting(false); + } + } + }; + const createHTTPSCreds = async (params: NewHTTPSRepoCredsParams) => { try { if (params.write) { @@ -563,6 +645,23 @@ export const ReposList = ({match, location}: RouteComponentProps) => { } }; + const createAzureServicePrincipalCreds = async (params: NewAzureServicePrincipalRepoCredsParams) => { + try { + if (params.write) { + await services.repocreds.createAzureServicePrincipalWrite(params); + } else { + await services.repocreds.createAzureServicePrincipal(params); + } + credsLoader.current.reload(); + setConnectRepo(false); + } catch (e) { + ctx.notifications.show({ + content: , + type: NotificationType.Error + }); + } + }; + // Remove a repository from the configuration const disconnectRepo = async (repo: string, project: string, write: boolean) => { const confirmed = await ctx.popup.confirm('Disconnect repository', `Are you sure you want to disconnect '${repo}'?`); @@ -1322,6 +1421,59 @@ export const ReposList = ({match, location}: RouteComponentProps) => { )} + {method === ConnectionMethod.AZURESERVICEPRINCIPAL && ( +
+

CONNECT REPO USING AZURE SERVICE PRINCIPAL

+
+ +
+ {formApi.getFormState().values.azureType === 'Azure Other Cloud' && ( +
+ +
+ )} +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ + +
+
+ + +
+
+ +
+
+ +
+
+ )} )} diff --git a/ui/src/app/shared/models.ts b/ui/src/app/shared/models.ts index 469ff734bd..e8c7e91a6e 100644 --- a/ui/src/app/shared/models.ts +++ b/ui/src/app/shared/models.ts @@ -677,6 +677,10 @@ export interface Repository { enableOCI: boolean; useAzureWorkloadIdentity: boolean; depth?: number; + azureServicePrincipalClientId?: string; + azureServicePrincipalClientSecret?: string; + azureServicePrincipalTenantId?: string; + azureActiveDirectoryEndpoint?: string; } export interface RepositoryList extends ItemsList {} diff --git a/ui/src/app/shared/services/repo-service.ts b/ui/src/app/shared/services/repo-service.ts index 1718d9b460..9d3d52559a 100644 --- a/ui/src/app/shared/services/repo-service.ts +++ b/ui/src/app/shared/services/repo-service.ts @@ -64,6 +64,19 @@ export interface GoogleCloudSourceQuery { depth?: number; } +export interface AzureServicePrincipalQuery { + type: string; + name: string; + url: string; + azureActiveDirectoryEndpoint: string; + azureServicePrincipalClientId: string; + azureServicePrincipalClientSecret: string; + azureServicePrincipalTenantId: string; + proxy: string; + noProxy: string; + project?: string; +} + export class RepositoriesService { public list(): Promise { return requests @@ -311,6 +324,42 @@ export class RepositoriesService { .then(res => res.body as models.Repository); } + public createAzureServicePrincipal(q: AzureServicePrincipalQuery): Promise { + return requests + .post('/repositories') + .send({ + type: q.type, + name: q.name, + repo: q.url, + azureServicePrincipalClientId: q.azureServicePrincipalClientId, + azureServicePrincipalClientSecret: q.azureServicePrincipalClientSecret, + azureServicePrincipalTenantId: q.azureServicePrincipalTenantId, + azureActiveDirectoryEndpoint: q.azureActiveDirectoryEndpoint, + proxy: q.proxy, + noProxy: q.noProxy, + project: q.project + }) + .then(res => res.body as models.Repository); + } + + public createAzureServicePrincipalWrite(q: AzureServicePrincipalQuery): Promise { + return requests + .post('/write-repositories') + .send({ + type: q.type, + name: q.name, + repo: q.url, + azureServicePrincipalClientId: q.azureServicePrincipalClientId, + azureServicePrincipalClientSecret: q.azureServicePrincipalClientSecret, + azureServicePrincipalTenantId: q.azureServicePrincipalTenantId, + azureActiveDirectoryEndpoint: q.azureActiveDirectoryEndpoint, + proxy: q.proxy, + noProxy: q.noProxy, + project: q.project + }) + .then(res => res.body as models.Repository); + } + public delete(url: string, project: string): Promise { return requests .delete(`/repositories/${encodeURIComponent(url)}?appProject=${project}`) diff --git a/ui/src/app/shared/services/repocreds-service.ts b/ui/src/app/shared/services/repocreds-service.ts index 01da3cf8ba..afae9f417d 100644 --- a/ui/src/app/shared/services/repocreds-service.ts +++ b/ui/src/app/shared/services/repocreds-service.ts @@ -37,6 +37,16 @@ export interface GoogleCloudSourceCreds { gcpServiceAccountKey: string; } +export interface AzureServicePrincipalCreds { + url: string; + azureActiveDirectoryEndpoint: string; + azureServicePrincipalClientId: string; + azureServicePrincipalClientSecret: string; + azureServicePrincipalTenantId: string; + proxy: string; + noProxy: string; +} + export class RepoCredsService { public list(): Promise { return requests @@ -108,6 +118,20 @@ export class RepoCredsService { .then(res => res.body as models.RepoCreds); } + public createAzureServicePrincipal(creds: AzureServicePrincipalCreds): Promise { + return requests + .post('/repocreds') + .send(creds) + .then(res => res.body as models.RepoCreds); + } + + public createAzureServicePrincipalWrite(creds: AzureServicePrincipalCreds): Promise { + return requests + .post('/write-repocreds') + .send(creds) + .then(res => res.body as models.RepoCreds); + } + public delete(url: string): Promise { return requests .delete(`/repocreds/${encodeURIComponent(url)}`) diff --git a/util/db/repository_secrets.go b/util/db/repository_secrets.go index 27ed83d9a7..3939a218e1 100644 --- a/util/db/repository_secrets.go +++ b/util/db/repository_secrets.go @@ -330,21 +330,25 @@ func secretToRepository(secret *corev1.Secret) (*appsv1.Repository, error) { secretCopy := secret.DeepCopy() repository := &appsv1.Repository{ - Name: string(secretCopy.Data["name"]), - Repo: string(secretCopy.Data["url"]), - Username: string(secretCopy.Data["username"]), - Password: string(secretCopy.Data["password"]), - BearerToken: string(secretCopy.Data["bearerToken"]), - SSHPrivateKey: string(secretCopy.Data["sshPrivateKey"]), - TLSClientCertData: string(secretCopy.Data["tlsClientCertData"]), - TLSClientCertKey: string(secretCopy.Data["tlsClientCertKey"]), - Type: string(secretCopy.Data["type"]), - GithubAppPrivateKey: string(secretCopy.Data["githubAppPrivateKey"]), - GitHubAppEnterpriseBaseURL: string(secretCopy.Data["githubAppEnterpriseBaseUrl"]), - Proxy: string(secretCopy.Data["proxy"]), - NoProxy: string(secretCopy.Data["noProxy"]), - Project: string(secretCopy.Data["project"]), - GCPServiceAccountKey: string(secretCopy.Data["gcpServiceAccountKey"]), + Name: string(secretCopy.Data["name"]), + Repo: string(secretCopy.Data["url"]), + Username: string(secretCopy.Data["username"]), + Password: string(secretCopy.Data["password"]), + BearerToken: string(secretCopy.Data["bearerToken"]), + SSHPrivateKey: string(secretCopy.Data["sshPrivateKey"]), + TLSClientCertData: string(secretCopy.Data["tlsClientCertData"]), + TLSClientCertKey: string(secretCopy.Data["tlsClientCertKey"]), + Type: string(secretCopy.Data["type"]), + GithubAppPrivateKey: string(secretCopy.Data["githubAppPrivateKey"]), + GitHubAppEnterpriseBaseURL: string(secretCopy.Data["githubAppEnterpriseBaseUrl"]), + Proxy: string(secretCopy.Data["proxy"]), + NoProxy: string(secretCopy.Data["noProxy"]), + Project: string(secretCopy.Data["project"]), + GCPServiceAccountKey: string(secretCopy.Data["gcpServiceAccountKey"]), + AzureServicePrincipalClientId: string(secretCopy.Data["azureServicePrincipalClientId"]), + AzureServicePrincipalClientSecret: string(secretCopy.Data["azureServicePrincipalClientSecret"]), + AzureServicePrincipalTenantId: string(secretCopy.Data["azureServicePrincipalTenantId"]), + AzureActiveDirectoryEndpoint: string(secretCopy.Data["azureActiveDirectoryEndpoint"]), } insecureIgnoreHostKey, err := boolOrFalse(secretCopy, "insecureIgnoreHostKey") @@ -451,6 +455,10 @@ func (s *secretsRepositoryBackend) repositoryToSecret(repository *appsv1.Reposit updateSecretBool(secretCopy, "useAzureWorkloadIdentity", repository.UseAzureWorkloadIdentity) updateSecretInt(secretCopy, "depth", repository.Depth) updateSecretBool(secretCopy, "webhookManifestCacheWarmDisabled", repository.WebhookManifestCacheWarmDisabled) + updateSecretString(secretCopy, "azureServicePrincipalClientId", repository.AzureServicePrincipalClientId) + updateSecretString(secretCopy, "azureServicePrincipalClientSecret", repository.AzureServicePrincipalClientSecret) + updateSecretString(secretCopy, "azureServicePrincipalTenantId", repository.AzureServicePrincipalTenantId) + updateSecretString(secretCopy, "azureActiveDirectoryEndpoint", repository.AzureActiveDirectoryEndpoint) addSecretMetadata(secretCopy, s.getSecretType()) return secretCopy @@ -460,19 +468,23 @@ func (s *secretsRepositoryBackend) secretToRepoCred(secret *corev1.Secret) (*app secretCopy := secret.DeepCopy() repository := &appsv1.RepoCreds{ - URL: string(secretCopy.Data["url"]), - Username: string(secretCopy.Data["username"]), - Password: string(secretCopy.Data["password"]), - BearerToken: string(secretCopy.Data["bearerToken"]), - SSHPrivateKey: string(secretCopy.Data["sshPrivateKey"]), - TLSClientCertData: string(secretCopy.Data["tlsClientCertData"]), - TLSClientCertKey: string(secretCopy.Data["tlsClientCertKey"]), - Type: string(secretCopy.Data["type"]), - GithubAppPrivateKey: string(secretCopy.Data["githubAppPrivateKey"]), - GitHubAppEnterpriseBaseURL: string(secretCopy.Data["githubAppEnterpriseBaseUrl"]), - GCPServiceAccountKey: string(secretCopy.Data["gcpServiceAccountKey"]), - Proxy: string(secretCopy.Data["proxy"]), - NoProxy: string(secretCopy.Data["noProxy"]), + URL: string(secretCopy.Data["url"]), + Username: string(secretCopy.Data["username"]), + Password: string(secretCopy.Data["password"]), + BearerToken: string(secretCopy.Data["bearerToken"]), + SSHPrivateKey: string(secretCopy.Data["sshPrivateKey"]), + TLSClientCertData: string(secretCopy.Data["tlsClientCertData"]), + TLSClientCertKey: string(secretCopy.Data["tlsClientCertKey"]), + Type: string(secretCopy.Data["type"]), + GithubAppPrivateKey: string(secretCopy.Data["githubAppPrivateKey"]), + GitHubAppEnterpriseBaseURL: string(secretCopy.Data["githubAppEnterpriseBaseUrl"]), + GCPServiceAccountKey: string(secretCopy.Data["gcpServiceAccountKey"]), + Proxy: string(secretCopy.Data["proxy"]), + NoProxy: string(secretCopy.Data["noProxy"]), + AzureServicePrincipalClientId: string(secretCopy.Data["azureServicePrincipalClientID"]), + AzureServicePrincipalClientSecret: string(secretCopy.Data["azureServicePrincipalClientSecret"]), + AzureServicePrincipalTenantId: string(secretCopy.Data["azureServicePrincipalTenantID"]), + AzureActiveDirectoryEndpoint: string(secretCopy.Data["azureActiveDirectoryEndpoint"]), } enableOCI, err := boolOrFalse(secretCopy, "enableOCI") @@ -540,6 +552,10 @@ func (s *secretsRepositoryBackend) repoCredsToSecret(repoCreds *appsv1.RepoCreds updateSecretString(secretCopy, "noProxy", repoCreds.NoProxy) updateSecretBool(secretCopy, "forceHttpBasicAuth", repoCreds.ForceHttpBasicAuth) updateSecretBool(secretCopy, "useAzureWorkloadIdentity", repoCreds.UseAzureWorkloadIdentity) + updateSecretString(secretCopy, "azureServicePrincipalClientID", repoCreds.AzureServicePrincipalClientId) + updateSecretString(secretCopy, "azureServicePrincipalClientSecret", repoCreds.AzureServicePrincipalClientSecret) + updateSecretString(secretCopy, "azureServicePrincipalTenantID", repoCreds.AzureServicePrincipalTenantId) + updateSecretString(secretCopy, "azureActiveDirectoryEndpoint", repoCreds.AzureActiveDirectoryEndpoint) addSecretMetadata(secretCopy, s.getRepoCredSecretType()) return secretCopy diff --git a/util/git/client.go b/util/git/client.go index 7a3f34c495..11f555482f 100644 --- a/util/git/client.go +++ b/util/git/client.go @@ -412,6 +412,13 @@ func newAuth(repoURL string, creds Creds) (transport.AuthMethod, error) { return nil, fmt.Errorf("failed to get access token from creds: %w", err) } + auth := githttp.TokenAuth{Token: token} + return &auth, nil + case AzureServicePrincipalCreds: + token, err := creds.getAccessToken() + if err != nil { + return nil, fmt.Errorf("failed to get access token from creds: %w", err) + } auth := githttp.TokenAuth{Token: token} return &auth, nil } diff --git a/util/git/creds.go b/util/git/creds.go index 239916234d..162c06e6a6 100644 --- a/util/git/creds.go +++ b/util/git/creds.go @@ -18,6 +18,10 @@ import ( "sync" "time" + "github.com/Azure/azure-sdk-for-go/sdk/azcore" + "github.com/Azure/azure-sdk-for-go/sdk/azcore/cloud" + "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" + "github.com/Azure/azure-sdk-for-go/sdk/azidentity" giturls "github.com/chainguard-dev/git-urls" "github.com/google/go-github/v69/github" @@ -50,6 +54,8 @@ var ( // installationIdCache caches installation IDs for organizations to avoid redundant API calls. githubInstallationIdCache *gocache.Cache githubInstallationIdCacheMutex sync.RWMutex // For bulk API call coordination + // In memory cache for storing Azure Service Principal tokens + azureServicePrincipalTokenCache *gocache.Cache ) const ( @@ -64,16 +70,30 @@ const ( func init() { githubAppCredsExp := common.GithubAppCredsExpirationDuration if exp := os.Getenv(common.EnvGithubAppCredsExpirationDuration); exp != "" { - if qps, err := strconv.Atoi(exp); err != nil { + if qps, err := strconv.Atoi(exp); err == nil { githubAppCredsExp = time.Duration(qps) * time.Minute } } + azureServicePrincipalCredsExp := common.AzureServicePrincipalCredsExpirationDuration + if exp := os.Getenv(common.EnvAzureServicePrincipalCredsExpirationDuration); exp != "" { + if qps, err := strconv.Atoi(exp); err == nil { + // Azure service principal tokens are valid for 60 minutes + // the cache has a cleanup interval of 1 minute + // cap the expiration duration to 59 minutes to avoid issues with token expiration + if qps > 59 { + log.Warnf("Value in %s is %d, which is greater than maximum 59 minutes allowed. Setting to 59 minutes", common.EnvAzureServicePrincipalCredsExpirationDuration, qps) + qps = 59 + } + azureServicePrincipalCredsExp = time.Duration(qps) * time.Minute + } + } githubAppTokenCache = gocache.New(githubAppCredsExp, 1*time.Minute) // oauth2.TokenSource handles fetching new Tokens once they are expired. The oauth2.TokenSource itself does not expire. googleCloudTokenSource = gocache.New(gocache.NoExpiration, 0) azureTokenCache = gocache.New(gocache.NoExpiration, 0) githubInstallationIdCache = gocache.New(60*time.Minute, 60*time.Minute) + azureServicePrincipalTokenCache = gocache.New(azureServicePrincipalCredsExp, 1*time.Minute) } type NoopCredsStore struct{} @@ -974,3 +994,133 @@ func (creds AzureWorkloadIdentityCreds) GetAzureDevOpsAccessToken() (string, err accessToken, err := creds.getAccessToken(azureDevopsEntraResourceId) // wellknown resourceid of Azure DevOps return accessToken, err } + +var _ Creds = AzureServicePrincipalCreds{} + +// AzureServicePrincipalCreds to authenticate to Azure DevOps using a Service Principal +type AzureServicePrincipalCreds struct { + tenantID string + clientID string + clientSecret string + activeDirectoryEndpoint string + clientCertData string + clientCertKey string + proxy string + noProxy string + store CredsStore +} + +// NewAzureServicePrincipalCreds creates new Azure Service Principal credentials +func NewAzureServicePrincipalCreds(tenantID string, clientID string, clientSecret string, store CredsStore) AzureServicePrincipalCreds { + return AzureServicePrincipalCreds{tenantID: tenantID, clientID: clientID, clientSecret: clientSecret, store: store} +} + +// WithActiveDirectoryEndpoint sets a custom Active Directory endpoint. When not set, the default Azure public cloud is used. +func (a AzureServicePrincipalCreds) WithActiveDirectoryEndpoint(activeDirectoryEndpoint string) AzureServicePrincipalCreds { + if activeDirectoryEndpoint != "" { + a.activeDirectoryEndpoint = activeDirectoryEndpoint + } + return a +} + +// WithClientCert sets the client certificate data and key +func (a AzureServicePrincipalCreds) WithClientCert(data string, key string) AzureServicePrincipalCreds { + if data != "" && key != "" { + a.clientCertData = data + a.clientCertKey = key + } + return a +} + +// WithProxy sets the HTTP/HTTPS proxy used to access the repo +func (a AzureServicePrincipalCreds) WithProxy(proxy string) AzureServicePrincipalCreds { + if proxy != "" { + a.proxy = proxy + } + return a +} + +// WithNoProxy sets a comma separated list of IPs/hostnames that should not use the proxy +func (a AzureServicePrincipalCreds) WithNoProxy(noProxy string) AzureServicePrincipalCreds { + if noProxy != "" { + a.noProxy = noProxy + } + return a +} + +// GetUserInfo doesn't return any user info as they are not present for Azure Service Principals. +func (a AzureServicePrincipalCreds) GetUserInfo(_ context.Context) (string, string, error) { + return workloadidentity.EmptyGuid, "", nil +} + +func (a AzureServicePrincipalCreds) Environ() (io.Closer, []string, error) { + token, err := a.getAccessToken() + if err != nil { + return NopCloser{}, nil, err + } + nonce := a.store.Add("", token) + env := a.store.Environ(nonce) + env = append(env, fmt.Sprintf("%s=Authorization: Bearer %s", bearerAuthHeaderEnv, token)) + + return utilio.NewCloser(func() error { + a.store.Remove(nonce) + return nil + }), env, nil +} + +func (a AzureServicePrincipalCreds) getAccessToken() (string, error) { + // Override the default active directory endpoint if present + activeDirectoryEndpoint := "https://login.microsoftonline.com" + disableInstanceDiscovery := false + if a.activeDirectoryEndpoint != "" { + activeDirectoryEndpoint = a.activeDirectoryEndpoint + disableInstanceDiscovery = true + } + + // Generate cache key for creds + key, err := argoutils.GenerateCacheKey("%s %s %s %s", a.tenantID, a.clientID, a.clientSecret, activeDirectoryEndpoint) + if err != nil { + return "", fmt.Errorf("failed to get get SHA256 hash for Azure Service Principal credentials: %w", err) + } + + t, found := azureServicePrincipalTokenCache.Get(key) + if found { + return t.(string), nil + } + + ctx, cancel := context.WithTimeout(context.Background(), 15*time.Second) + defer cancel() + + opts := azcore.ClientOptions{} + opts.Cloud = cloud.Configuration{ + ActiveDirectoryAuthorityHost: activeDirectoryEndpoint, + } + // Configure HTTP client with proxy if proxy is set + if a.proxy != "" { + opts.Transport = GetRepoHTTPClient(activeDirectoryEndpoint, false, a, a.proxy, a.noProxy) + } + cred, err := azidentity.NewClientSecretCredential(a.tenantID, a.clientID, a.clientSecret, &azidentity.ClientSecretCredentialOptions{ClientOptions: opts, DisableInstanceDiscovery: disableInstanceDiscovery}) + if err != nil { + return "", fmt.Errorf("failed to create Azure client secret credential: %w", err) + } + token, err := cred.GetToken(ctx, policy.TokenRequestOptions{ + Scopes: []string{azureDevopsEntraResourceId}, + }) + if err != nil { + return "", fmt.Errorf("failed to get Azure access token: %w", err) + } + azureServicePrincipalTokenCache.Set(key, token.Token, 0) + return token.Token, nil +} + +func (a AzureServicePrincipalCreds) HasClientCert() bool { + return a.clientCertData != "" && a.clientCertKey != "" +} + +func (a AzureServicePrincipalCreds) GetClientCertData() string { + return a.clientCertData +} + +func (a AzureServicePrincipalCreds) GetClientCertKey() string { + return a.clientCertKey +} diff --git a/util/settings/settings.go b/util/settings/settings.go index 428c3b8aba..7894404362 100644 --- a/util/settings/settings.go +++ b/util/settings/settings.go @@ -326,6 +326,14 @@ type Repository struct { ForceHttpBasicAuth bool `json:"forceHttpBasicAuth,omitempty"` //nolint:revive //FIXME(var-naming) // UseAzureWorkloadIdentity specifies whether to use Azure Workload Identity for authentication UseAzureWorkloadIdentity bool `json:"useAzureWorkloadIdentity,omitempty"` + // AzureActiveDirectoryEndpoint specifies the Azure Active Directory endpoint used for Service Principal authentication. If empty will default to https://login.microsoftonline.com + AzureActiveDirectoryEndpoint string `json:"azureActiveDirectoryEndpoint,omitempty"` + // AzureServicePrincipalClientId specifies the client ID of the Azure Service Principal used to access the repo + AzureServicePrincipalClientId string `json:"azureServicePrincipalClientId,omitempty"` + // AzureServicePrincipalClientSecret specifies the client secret of the Azure Service Principal used to access the repo + AzureServicePrincipalClientSecret string `json:"azureServicePrincipalClientSecret,omitempty"` + // AzureServicePrincipalTenantId specifies the tenant ID of the Azure Service Principal used to access the repo + AzureServicePrincipalTenantId string `json:"azureServicePrincipalTenantId,omitempty"` } // Credential template for accessing repositories @@ -360,6 +368,14 @@ type RepositoryCredentials struct { ForceHttpBasicAuth bool `json:"forceHttpBasicAuth,omitempty"` //nolint:revive //FIXME(var-naming) // UseAzureWorkloadIdentity specifies whether to use Azure Workload Identity for authentication UseAzureWorkloadIdentity bool `json:"useAzureWorkloadIdentity,omitempty"` + // AzureActiveDirectoryEndpoint specifies the Azure Active Directory endpoint used for Service Principal authentication. If empty will default to https://login.microsoftonline.com + AzureActiveDirectoryEndpoint string `json:"azureActiveDirectoryEndpoint,omitempty"` + // AzureServicePrincipalClientId specifies the client ID of the Azure Service Principal used to access the repo + AzureServicePrincipalClientId string `json:"azureServicePrincipalClientId,omitempty"` + // AzureServicePrincipalClientSecret specifies the client secret of the Azure Service Principal used to access the repo + AzureServicePrincipalClientSecret string `json:"azureServicePrincipalClientSecret,omitempty"` + // AzureServicePrincipalTenantId specifies the tenant ID of the Azure Service Principal used to access the repo + AzureServicePrincipalTenantId string `json:"azureServicePrincipalTenantId,omitempty"` } // DeepLink structure