VYPR
Critical severityNVD Advisory· Published Sep 7, 2023· Updated Sep 26, 2024

Cluster secret might leak in cluster details page in Argo CD

CVE-2023-40029

Description

Argo CD is a declarative continuous deployment for Kubernetes. Argo CD Cluster secrets might be managed declaratively using Argo CD / kubectl apply. As a result, the full secret body is stored inkubectl.kubernetes.io/last-applied-configuration annotation. pull request #7139 introduced the ability to manage cluster labels and annotations. Since clusters are stored as secrets it also exposes the kubectl.kubernetes.io/last-applied-configuration annotation which includes full secret body. In order to view the cluster annotations via the Argo CD API, the user must have clusters, get RBAC access. Note: In many cases, cluster secrets do not contain any actually-secret information. But sometimes, as in bearer-token auth, the contents might be very sensitive. The bug has been patched in versions 2.8.3, 2.7.14, and 2.6.15. Users are advised to upgrade. Users unable to upgrade should update/deploy cluster secret with server-side-apply flag which does not use or rely on kubectl.kubernetes.io/last-applied-configuration annotation. Note: annotation for existing secrets will require manual removal.

Affected packages

Versions sourced from the GitHub Security Advisory.

PackageAffected versionsPatched versions
github.com/argoproj/argo-cd/v2Go
>= 2.2.0, < 2.6.152.6.15
github.com/argoproj/argo-cd/v2Go
>= 2.7.0, < 2.7.142.7.14
github.com/argoproj/argo-cd/v2Go
>= 2.8.0, < 2.8.32.8.3

Affected products

1

Patches

3
4b2e5b06bff2

Merge pull request from GHSA-fwr2-64vr-xv9m

https://github.com/argoproj/argo-cdAlexander MatyushentsevSep 7, 2023via ghsa
2 files changed · +40 0
  • util/db/cluster.go+5 0 modified
    @@ -345,6 +345,9 @@ func clusterToSecret(c *appv1.Cluster, secret *apiv1.Secret) error {
     	secret.Data = data
     
     	secret.Labels = c.Labels
    +	if c.Annotations != nil && c.Annotations[apiv1.LastAppliedConfigAnnotation] != "" {
    +		return status.Errorf(codes.InvalidArgument, "annotation %s cannot be set", apiv1.LastAppliedConfigAnnotation)
    +	}
     	secret.Annotations = c.Annotations
     
     	if secret.Annotations == nil {
    @@ -403,6 +406,8 @@ func SecretToCluster(s *apiv1.Secret) (*appv1.Cluster, error) {
     	annotations := map[string]string{}
     	if s.Annotations != nil {
     		annotations = collections.CopyStringMap(s.Annotations)
    +		// delete system annotations
    +		delete(annotations, apiv1.LastAppliedConfigAnnotation)
     		delete(annotations, common.AnnotationKeyManagedBy)
     	}
     
    
  • util/db/cluster_test.go+35 0 modified
    @@ -7,6 +7,8 @@ import (
     
     	"github.com/stretchr/testify/assert"
     	"github.com/stretchr/testify/require"
    +	"google.golang.org/grpc/codes"
    +	"google.golang.org/grpc/status"
     	v1 "k8s.io/api/core/v1"
     	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
     	"k8s.io/client-go/kubernetes/fake"
    @@ -56,6 +58,24 @@ func Test_secretToCluster(t *testing.T) {
     	})
     }
     
    +func Test_secretToCluster_LastAppliedConfigurationDropped(t *testing.T) {
    +	secret := &v1.Secret{
    +		ObjectMeta: metav1.ObjectMeta{
    +			Name:        "mycluster",
    +			Namespace:   fakeNamespace,
    +			Annotations: map[string]string{v1.LastAppliedConfigAnnotation: "val2"},
    +		},
    +		Data: map[string][]byte{
    +			"name":   []byte("test"),
    +			"server": []byte("http://mycluster"),
    +			"config": []byte("{\"username\":\"foo\"}"),
    +		},
    +	}
    +	cluster, err := SecretToCluster(secret)
    +	require.NoError(t, err)
    +	assert.Len(t, cluster.Annotations, 0)
    +}
    +
     func TestClusterToSecret(t *testing.T) {
     	cluster := &appv1.Cluster{
     		Server:      "server",
    @@ -78,6 +98,21 @@ func TestClusterToSecret(t *testing.T) {
     	assert.Equal(t, cluster.Labels, s.Labels)
     }
     
    +func TestClusterToSecret_LastAppliedConfigurationRejected(t *testing.T) {
    +	cluster := &appv1.Cluster{
    +		Server:      "server",
    +		Annotations: map[string]string{v1.LastAppliedConfigAnnotation: "val2"},
    +		Name:        "test",
    +		Config:      v1alpha1.ClusterConfig{},
    +		Project:     "project",
    +		Namespaces:  []string{"default"},
    +	}
    +	s := &v1.Secret{}
    +	err := clusterToSecret(cluster, s)
    +	require.Error(t, err)
    +	require.Equal(t, codes.InvalidArgument, status.Code(err))
    +}
    +
     func Test_secretToCluster_NoConfig(t *testing.T) {
     	secret := &v1.Secret{
     		ObjectMeta: metav1.ObjectMeta{
    
44e52c4ae76e

Merge pull request from GHSA-g687-f2gx-6wm8

https://github.com/argoproj/argo-cdpasha-codefreshSep 7, 2023via ghsa
12 files changed · +115 11
  • cmd/argocd-repo-server/commands/argocd_repo_server.go+8 0 modified
    @@ -82,6 +82,8 @@ func NewCommand() *cobra.Command {
     		allowOutOfBoundsSymlinks          bool
     		streamedManifestMaxTarSize        string
     		streamedManifestMaxExtractedSize  string
    +		helmManifestMaxExtractedSize      string
    +		disableManifestMaxExtractedSize   bool
     	)
     	var command = cobra.Command{
     		Use:               cliName,
    @@ -120,6 +122,9 @@ func NewCommand() *cobra.Command {
     			streamedManifestMaxExtractedSizeQuantity, err := resource.ParseQuantity(streamedManifestMaxExtractedSize)
     			errors.CheckError(err)
     
    +			helmManifestMaxExtractedSizeQuantity, err := resource.ParseQuantity(helmManifestMaxExtractedSize)
    +			errors.CheckError(err)
    +
     			askPassServer := askpass.NewServer()
     			metricsServer := metrics.NewMetricsServer()
     			cacheutil.CollectMetrics(redisClient, metricsServer)
    @@ -134,6 +139,7 @@ func NewCommand() *cobra.Command {
     				AllowOutOfBoundsSymlinks:                     allowOutOfBoundsSymlinks,
     				StreamedManifestMaxExtractedSize:             streamedManifestMaxExtractedSizeQuantity.ToDec().Value(),
     				StreamedManifestMaxTarSize:                   streamedManifestMaxTarSizeQuantity.ToDec().Value(),
    +				HelmManifestMaxExtractedSize:                 helmManifestMaxExtractedSizeQuantity.ToDec().Value(),
     			}, askPassServer)
     			errors.CheckError(err)
     
    @@ -216,6 +222,8 @@ func NewCommand() *cobra.Command {
     	command.Flags().BoolVar(&allowOutOfBoundsSymlinks, "allow-oob-symlinks", env.ParseBoolFromEnv("ARGOCD_REPO_SERVER_ALLOW_OUT_OF_BOUNDS_SYMLINKS", false), "Allow out-of-bounds symlinks in repositories (not recommended)")
     	command.Flags().StringVar(&streamedManifestMaxTarSize, "streamed-manifest-max-tar-size", env.StringFromEnv("ARGOCD_REPO_SERVER_STREAMED_MANIFEST_MAX_TAR_SIZE", "100M"), "Maximum size of streamed manifest archives")
     	command.Flags().StringVar(&streamedManifestMaxExtractedSize, "streamed-manifest-max-extracted-size", env.StringFromEnv("ARGOCD_REPO_SERVER_STREAMED_MANIFEST_MAX_EXTRACTED_SIZE", "1G"), "Maximum size of streamed manifest archives when extracted")
    +	command.Flags().StringVar(&helmManifestMaxExtractedSize, "helm-manifest-max-extracted-size", env.StringFromEnv("ARGOCD_REPO_SERVER_HELM_MANIFEST_MAX_EXTRACTED_SIZE", "1G"), "Maximum size of helm manifest archives when extracted")
    +	command.Flags().BoolVar(&disableManifestMaxExtractedSize, "disable-helm-manifest-max-extracted-size", env.ParseBoolFromEnv("ARGOCD_REPO_SERVER_DISABLE_HELM_MANIFEST_MAX_EXTRACTED_SIZE", false), "Disable maximum size of helm manifest archives when extracted")
     	tlsConfigCustomizerSrc = tls.AddTLSFlagsToCmd(&command)
     	cacheSrc = reposervercache.AddCacheFlagsToCmd(&command, func(client *redis.Client) {
     		redisClient = client
    
  • docs/operator-manual/server-commands/argocd-repo-server.md+2 0 modified
    @@ -16,7 +16,9 @@ argocd-repo-server [flags]
           --address string                                 Listen on given address for incoming connections (default "0.0.0.0")
           --allow-oob-symlinks                             Allow out-of-bounds symlinks in repositories (not recommended)
           --default-cache-expiration duration              Cache expiration default (default 24h0m0s)
    +      --disable-helm-manifest-max-extracted-size       Disable maximum size of helm manifest archives when extracted
           --disable-tls                                    Disable TLS on the gRPC endpoint
    +      --helm-manifest-max-extracted-size string        Maximum size of helm manifest archives when extracted (default "1G")
       -h, --help                                           help for argocd-repo-server
           --logformat string                               Set the logging format. One of: text|json (default "text")
           --loglevel string                                Set the logging level. One of: debug|info|warn|error (default "info")
    
  • manifests/base/repo-server/argocd-repo-server-deployment.yaml+12 0 modified
    @@ -150,6 +150,18 @@ spec:
                     key: reposerver.streamed.manifest.max.extracted.size
                     name: argocd-cmd-params-cm
                     optional: true
    +          - name: ARGOCD_REPO_SERVER_HELM_MANIFEST_MAX_EXTRACTED_SIZE
    +            valueFrom:
    +              configMapKeyRef:
    +                key: reposerver.helm.manifest.max.extracted.size
    +                name: argocd-cmd-params-cm
    +                optional: true
    +          - name: ARGOCD_REPO_SERVER_DISABLE_HELM_MANIFEST_MAX_EXTRACTED_SIZE
    +            valueFrom:
    +              configMapKeyRef:
    +                name: argocd-cmd-params-cm
    +                key: reposerver.disable.helm.manifest.max.extracted.size
    +                optional: true
               - name: ARGOCD_GIT_MODULES_ENABLED
                 valueFrom:
                   configMapKeyRef:
    
  • manifests/core-install.yaml+12 0 modified
    @@ -19156,6 +19156,18 @@ spec:
                   key: reposerver.streamed.manifest.max.extracted.size
                   name: argocd-cmd-params-cm
                   optional: true
    +        - name: ARGOCD_REPO_SERVER_HELM_MANIFEST_MAX_EXTRACTED_SIZE
    +          valueFrom:
    +            configMapKeyRef:
    +              key: reposerver.helm.manifest.max.extracted.size
    +              name: argocd-cmd-params-cm
    +              optional: true
    +        - name: ARGOCD_REPO_SERVER_DISABLE_HELM_MANIFEST_MAX_EXTRACTED_SIZE
    +          valueFrom:
    +            configMapKeyRef:
    +              key: reposerver.disable.helm.manifest.max.extracted.size
    +              name: argocd-cmd-params-cm
    +              optional: true
             - name: ARGOCD_GIT_MODULES_ENABLED
               valueFrom:
                 configMapKeyRef:
    
  • manifests/ha/install.yaml+12 0 modified
    @@ -20612,6 +20612,18 @@ spec:
                   key: reposerver.streamed.manifest.max.extracted.size
                   name: argocd-cmd-params-cm
                   optional: true
    +        - name: ARGOCD_REPO_SERVER_HELM_MANIFEST_MAX_EXTRACTED_SIZE
    +          valueFrom:
    +            configMapKeyRef:
    +              key: reposerver.helm.manifest.max.extracted.size
    +              name: argocd-cmd-params-cm
    +              optional: true
    +        - name: ARGOCD_REPO_SERVER_DISABLE_HELM_MANIFEST_MAX_EXTRACTED_SIZE
    +          valueFrom:
    +            configMapKeyRef:
    +              key: reposerver.disable.helm.manifest.max.extracted.size
    +              name: argocd-cmd-params-cm
    +              optional: true
             - name: ARGOCD_GIT_MODULES_ENABLED
               valueFrom:
                 configMapKeyRef:
    
  • manifests/ha/namespace-install.yaml+12 0 modified
    @@ -2130,6 +2130,18 @@ spec:
                   key: reposerver.streamed.manifest.max.extracted.size
                   name: argocd-cmd-params-cm
                   optional: true
    +        - name: ARGOCD_REPO_SERVER_HELM_MANIFEST_MAX_EXTRACTED_SIZE
    +          valueFrom:
    +            configMapKeyRef:
    +              key: reposerver.helm.manifest.max.extracted.size
    +              name: argocd-cmd-params-cm
    +              optional: true
    +        - name: ARGOCD_REPO_SERVER_DISABLE_HELM_MANIFEST_MAX_EXTRACTED_SIZE
    +          valueFrom:
    +            configMapKeyRef:
    +              key: reposerver.disable.helm.manifest.max.extracted.size
    +              name: argocd-cmd-params-cm
    +              optional: true
             - name: ARGOCD_GIT_MODULES_ENABLED
               valueFrom:
                 configMapKeyRef:
    
  • manifests/install.yaml+12 0 modified
    @@ -19669,6 +19669,18 @@ spec:
                   key: reposerver.streamed.manifest.max.extracted.size
                   name: argocd-cmd-params-cm
                   optional: true
    +        - name: ARGOCD_REPO_SERVER_HELM_MANIFEST_MAX_EXTRACTED_SIZE
    +          valueFrom:
    +            configMapKeyRef:
    +              key: reposerver.helm.manifest.max.extracted.size
    +              name: argocd-cmd-params-cm
    +              optional: true
    +        - name: ARGOCD_REPO_SERVER_DISABLE_HELM_MANIFEST_MAX_EXTRACTED_SIZE
    +          valueFrom:
    +            configMapKeyRef:
    +              key: reposerver.disable.helm.manifest.max.extracted.size
    +              name: argocd-cmd-params-cm
    +              optional: true
             - name: ARGOCD_GIT_MODULES_ENABLED
               valueFrom:
                 configMapKeyRef:
    
  • manifests/namespace-install.yaml+12 0 modified
    @@ -1187,6 +1187,18 @@ spec:
                   key: reposerver.streamed.manifest.max.extracted.size
                   name: argocd-cmd-params-cm
                   optional: true
    +        - name: ARGOCD_REPO_SERVER_HELM_MANIFEST_MAX_EXTRACTED_SIZE
    +          valueFrom:
    +            configMapKeyRef:
    +              key: reposerver.helm.manifest.max.extracted.size
    +              name: argocd-cmd-params-cm
    +              optional: true
    +        - name: ARGOCD_REPO_SERVER_DISABLE_HELM_MANIFEST_MAX_EXTRACTED_SIZE
    +          valueFrom:
    +            configMapKeyRef:
    +              key: reposerver.disable.helm.manifest.max.extracted.size
    +              name: argocd-cmd-params-cm
    +              optional: true
             - name: ARGOCD_GIT_MODULES_ENABLED
               valueFrom:
                 configMapKeyRef:
    
  • reposerver/repository/repository.go+4 2 modified
    @@ -107,6 +107,8 @@ type RepoServerInitConstants struct {
     	AllowOutOfBoundsSymlinks                     bool
     	StreamedManifestMaxExtractedSize             int64
     	StreamedManifestMaxTarSize                   int64
    +	HelmManifestMaxExtractedSize                 int64
    +	DisableHelmManifestMaxExtractedSize          bool
     }
     
     // NewService returns a new instance of the Manifest service
    @@ -346,7 +348,7 @@ func (s *Service) runRepoOperation(
     		if source.Helm != nil {
     			helmPassCredentials = source.Helm.PassCredentials
     		}
    -		chartPath, closer, err := helmClient.ExtractChart(source.Chart, revision, helmPassCredentials)
    +		chartPath, closer, err := helmClient.ExtractChart(source.Chart, revision, helmPassCredentials, s.initConstants.HelmManifestMaxExtractedSize, s.initConstants.DisableHelmManifestMaxExtractedSize)
     		if err != nil {
     			return err
     		}
    @@ -2233,7 +2235,7 @@ func (s *Service) GetRevisionChartDetails(ctx context.Context, q *apiclient.Repo
     	if err != nil {
     		return nil, fmt.Errorf("helm client error: %v", err)
     	}
    -	chartPath, closer, err := helmClient.ExtractChart(q.Name, revision, false)
    +	chartPath, closer, err := helmClient.ExtractChart(q.Name, revision, false, s.initConstants.HelmManifestMaxExtractedSize, s.initConstants.DisableHelmManifestMaxExtractedSize)
     	if err != nil {
     		return nil, fmt.Errorf("error extracting chart: %v", err)
     	}
    
  • util/helm/client.go+19 6 modified
    @@ -8,6 +8,7 @@ import (
     	"encoding/json"
     	"errors"
     	"fmt"
    +	executil "github.com/argoproj/argo-cd/v2/util/exec"
     	"io"
     	"net/http"
     	"net/url"
    @@ -25,7 +26,6 @@ import (
     	"oras.land/oras-go/v2/registry/remote/auth"
     
     	"github.com/argoproj/argo-cd/v2/util/cache"
    -	executil "github.com/argoproj/argo-cd/v2/util/exec"
     	argoio "github.com/argoproj/argo-cd/v2/util/io"
     	"github.com/argoproj/argo-cd/v2/util/io/files"
     	"github.com/argoproj/argo-cd/v2/util/proxy"
    @@ -52,7 +52,7 @@ type indexCache interface {
     
     type Client interface {
     	CleanChartCache(chart string, version string) error
    -	ExtractChart(chart string, version string, passCredentials bool) (string, argoio.Closer, error)
    +	ExtractChart(chart string, version string, passCredentials bool, manifestMaxExtractedSize int64, disableManifestMaxExtractedSize bool) (string, argoio.Closer, error)
     	GetIndex(noCache bool) (*Index, error)
     	GetTags(chart string, noCache bool) (*TagsList, error)
     	TestHelmOCI() (bool, error)
    @@ -122,7 +122,21 @@ func (c *nativeHelmChart) CleanChartCache(chart string, version string) error {
     	return os.RemoveAll(cachePath)
     }
     
    -func (c *nativeHelmChart) ExtractChart(chart string, version string, passCredentials bool) (string, argoio.Closer, error) {
    +func untarChart(tempDir string, cachedChartPath string, manifestMaxExtractedSize int64, disableManifestMaxExtractedSize bool) error {
    +	if disableManifestMaxExtractedSize {
    +		cmd := exec.Command("tar", "-zxvf", cachedChartPath)
    +		cmd.Dir = tempDir
    +		_, err := executil.Run(cmd)
    +		return err
    +	}
    +	reader, err := os.Open(cachedChartPath)
    +	if err != nil {
    +		return err
    +	}
    +	return files.Untgz(tempDir, reader, manifestMaxExtractedSize, false)
    +}
    +
    +func (c *nativeHelmChart) ExtractChart(chart string, version string, passCredentials bool, manifestMaxExtractedSize int64, disableManifestMaxExtractedSize bool) (string, argoio.Closer, error) {
     	// always use Helm V3 since we don't have chart content to determine correct Helm version
     	helmCmd, err := NewCmdWithVersion("", HelmV3, c.enableOci, c.proxy)
     
    @@ -196,15 +210,14 @@ func (c *nativeHelmChart) ExtractChart(chart string, version string, passCredent
     		if len(infos) != 1 {
     			return "", nil, fmt.Errorf("expected 1 file, found %v", len(infos))
     		}
    +
     		err = os.Rename(filepath.Join(tempDest, infos[0].Name()), cachedChartPath)
     		if err != nil {
     			return "", nil, err
     		}
     	}
     
    -	cmd := exec.Command("tar", "-zxvf", cachedChartPath)
    -	cmd.Dir = tempDir
    -	_, err = executil.Run(cmd)
    +	err = untarChart(tempDir, cachedChartPath, manifestMaxExtractedSize, disableManifestMaxExtractedSize)
     	if err != nil {
     		_ = os.RemoveAll(tempDir)
     		return "", nil, err
    
  • util/helm/client_test.go+9 2 modified
    @@ -4,6 +4,7 @@ import (
     	"bytes"
     	"encoding/json"
     	"fmt"
    +	"math"
     	"os"
     	"strings"
     	"testing"
    @@ -71,17 +72,23 @@ func TestIndex(t *testing.T) {
     
     func Test_nativeHelmChart_ExtractChart(t *testing.T) {
     	client := NewClient("https://argoproj.github.io/argo-helm", Creds{}, false, "")
    -	path, closer, err := client.ExtractChart("argo-cd", "0.7.1", false)
    +	path, closer, err := client.ExtractChart("argo-cd", "0.7.1", false, math.MaxInt64, true)
     	assert.NoError(t, err)
     	defer io.Close(closer)
     	info, err := os.Stat(path)
     	assert.NoError(t, err)
     	assert.True(t, info.IsDir())
     }
     
    +func Test_nativeHelmChart_ExtractChartWithLimiter(t *testing.T) {
    +	client := NewClient("https://argoproj.github.io/argo-helm", Creds{}, false, "")
    +	_, _, err := client.ExtractChart("argo-cd", "0.7.1", false, 100, false)
    +	assert.Error(t, err, "error while iterating on tar reader: unexpected EOF")
    +}
    +
     func Test_nativeHelmChart_ExtractChart_insecure(t *testing.T) {
     	client := NewClient("https://argoproj.github.io/argo-helm", Creds{InsecureSkipVerify: true}, false, "")
    -	path, closer, err := client.ExtractChart("argo-cd", "0.7.1", false)
    +	path, closer, err := client.ExtractChart("argo-cd", "0.7.1", false, math.MaxInt64, true)
     	assert.NoError(t, err)
     	defer io.Close(closer)
     	info, err := os.Stat(path)
    
  • util/helm/mocks/Client.go+1 1 modified
    @@ -29,7 +29,7 @@ func (_m *Client) CleanChartCache(chart string, version string) error {
     }
     
     // ExtractChart provides a mock function with given fields: chart, version
    -func (_m *Client) ExtractChart(chart string, version string, passCredentials bool) (string, io.Closer, error) {
    +func (_m *Client) ExtractChart(chart string, version string, passCredentials bool, manifestMaxExtractedSize int64, disableManifestMaxExtractedSize bool) (string, io.Closer, error) {
     	ret := _m.Called(chart, version)
     
     	var r0 string
    
7122b83fc346

feat: support adding labels and annotations to cluster secret (#7139)

https://github.com/argoproj/argo-cdChetan BanavikalmuttSep 9, 2021via ghsa
14 files changed · +898 425
  • assets/swagger.json+14 0 modified
    @@ -5166,6 +5166,13 @@
           "type": "object",
           "title": "Cluster is the definition of a cluster resource",
           "properties": {
    +        "annotations": {
    +          "type": "object",
    +          "title": "Annotations for cluster secret metadata",
    +          "additionalProperties": {
    +            "type": "string"
    +          }
    +        },
             "clusterResources": {
               "description": "Indicates if cluster level resources should be managed. This setting is used only if cluster is connected in a namespaced mode.",
               "type": "boolean"
    @@ -5179,6 +5186,13 @@
             "info": {
               "$ref": "#/definitions/v1alpha1ClusterInfo"
             },
    +        "labels": {
    +          "type": "object",
    +          "title": "Labels for cluster secret metadata",
    +          "additionalProperties": {
    +            "type": "string"
    +          }
    +        },
             "name": {
               "type": "string",
               "title": "Name of the cluster. If omitted, will use the server address"
    
  • cmd/argocd/commands/admin/cluster.go+12 1 modified
    @@ -35,6 +35,7 @@ import (
     	"github.com/argoproj/argo-cd/v2/util/glob"
     	kubeutil "github.com/argoproj/argo-cd/v2/util/kube"
     	"github.com/argoproj/argo-cd/v2/util/settings"
    +	"github.com/argoproj/argo-cd/v2/util/text/label"
     )
     
     func NewClusterCommand(pathOpts *clientcmd.PathOptions) *cobra.Command {
    @@ -508,6 +509,8 @@ func NewGenClusterConfigCommand(pathOpts *clientcmd.PathOptions) *cobra.Command
     		bearerToken   string
     		generateToken bool
     		outputFormat  string
    +		labels        []string
    +		annotations   []string
     	)
     	var command = &cobra.Command{
     		Use:   "generate-spec CONTEXT",
    @@ -561,7 +564,13 @@ func NewGenClusterConfigCommand(pathOpts *clientcmd.PathOptions) *cobra.Command
     			if clusterOpts.Name != "" {
     				contextName = clusterOpts.Name
     			}
    -			clst := cmdutil.NewCluster(contextName, clusterOpts.Namespaces, clusterOpts.ClusterResources, conf, bearerToken, awsAuthConf, execProviderConf)
    +
    +			labelsMap, err := label.Parse(labels)
    +			errors.CheckError(err)
    +			annotationsMap, err := label.Parse(annotations)
    +			errors.CheckError(err)
    +
    +			clst := cmdutil.NewCluster(contextName, clusterOpts.Namespaces, clusterOpts.ClusterResources, conf, bearerToken, awsAuthConf, execProviderConf, labelsMap, annotationsMap)
     			if clusterOpts.InCluster {
     				clst.Server = argoappv1.KubernetesInternalAPIServerAddr
     			}
    @@ -590,6 +599,8 @@ func NewGenClusterConfigCommand(pathOpts *clientcmd.PathOptions) *cobra.Command
     	command.Flags().StringVar(&clusterOpts.ServiceAccount, "service-account", "argocd-manager", fmt.Sprintf("System namespace service account to use for kubernetes resource management. If not set then default \"%s\" SA will be used", clusterauth.ArgoCDManagerServiceAccount))
     	command.Flags().StringVar(&clusterOpts.SystemNamespace, "system-namespace", common.DefaultSystemNamespace, "Use different system namespace")
     	command.Flags().StringVarP(&outputFormat, "output", "o", "yaml", "Output format. One of: json|yaml")
    +	command.Flags().StringArrayVar(&labels, "label", nil, "Set metadata labels (e.g. --label key=value)")
    +	command.Flags().StringArrayVar(&annotations, "annotation", nil, "Set metadata annotations (e.g. --annotation key=value)")
     	cmdutil.AddClusterFlags(command, &clusterOpts)
     	return command
     }
    
  • cmd/argocd/commands/cluster.go+12 1 modified
    @@ -12,6 +12,7 @@ import (
     	"k8s.io/client-go/kubernetes"
     
     	"github.com/argoproj/argo-cd/v2/util/cli"
    +	"github.com/argoproj/argo-cd/v2/util/text/label"
     
     	log "github.com/sirupsen/logrus"
     	"github.com/spf13/cobra"
    @@ -63,6 +64,8 @@ func NewClusterAddCommand(clientOpts *argocdclient.ClientOptions, pathOpts *clie
     	var (
     		clusterOpts      cmdutil.ClusterOptions
     		skipConfirmation bool
    +		labels           []string
    +		annotations      []string
     	)
     	var command = &cobra.Command{
     		Use:   "add CONTEXT",
    @@ -125,12 +128,18 @@ func NewClusterAddCommand(clientOpts *argocdclient.ClientOptions, pathOpts *clie
     				}
     				errors.CheckError(err)
     			}
    +
    +			labelsMap, err := label.Parse(labels)
    +			errors.CheckError(err)
    +			annotationsMap, err := label.Parse(annotations)
    +			errors.CheckError(err)
    +
     			conn, clusterIf := argocdclient.NewClientOrDie(clientOpts).NewClusterClientOrDie()
     			defer io.Close(conn)
     			if clusterOpts.Name != "" {
     				contextName = clusterOpts.Name
     			}
    -			clst := cmdutil.NewCluster(contextName, clusterOpts.Namespaces, clusterOpts.ClusterResources, conf, managerBearerToken, awsAuthConf, execProviderConf)
    +			clst := cmdutil.NewCluster(contextName, clusterOpts.Namespaces, clusterOpts.ClusterResources, conf, managerBearerToken, awsAuthConf, execProviderConf, labelsMap, annotationsMap)
     			if clusterOpts.InCluster {
     				clst.Server = argoappv1.KubernetesInternalAPIServerAddr
     			}
    @@ -154,6 +163,8 @@ func NewClusterAddCommand(clientOpts *argocdclient.ClientOptions, pathOpts *clie
     	command.Flags().StringVar(&clusterOpts.ServiceAccount, "service-account", "", fmt.Sprintf("System namespace service account to use for kubernetes resource management. If not set then default \"%s\" SA will be created", clusterauth.ArgoCDManagerServiceAccount))
     	command.Flags().StringVar(&clusterOpts.SystemNamespace, "system-namespace", common.DefaultSystemNamespace, "Use different system namespace")
     	command.Flags().BoolVarP(&skipConfirmation, "yes", "y", false, "Skip explicit confirmation")
    +	command.Flags().StringArrayVar(&labels, "label", nil, "Set metadata labels (e.g. --label key=value)")
    +	command.Flags().StringArrayVar(&annotations, "annotation", nil, "Set metadata annotations (e.g. --annotation key=value)")
     	cmdutil.AddClusterFlags(command, &clusterOpts)
     	return command
     }
    
  • cmd/util/cluster.go+3 1 modified
    @@ -55,7 +55,7 @@ func PrintKubeContexts(ca clientcmd.ConfigAccess) {
     	}
     }
     
    -func NewCluster(name string, namespaces []string, clusterResources bool, conf *rest.Config, managerBearerToken string, awsAuthConf *argoappv1.AWSAuthConfig, execProviderConf *argoappv1.ExecProviderConfig) *argoappv1.Cluster {
    +func NewCluster(name string, namespaces []string, clusterResources bool, conf *rest.Config, managerBearerToken string, awsAuthConf *argoappv1.AWSAuthConfig, execProviderConf *argoappv1.ExecProviderConfig, labels, annotations map[string]string) *argoappv1.Cluster {
     	tlsClientConfig := argoappv1.TLSClientConfig{
     		Insecure:   conf.TLSClientConfig.Insecure,
     		ServerName: conf.TLSClientConfig.ServerName,
    @@ -89,6 +89,8 @@ func NewCluster(name string, namespaces []string, clusterResources bool, conf *r
     			AWSAuthConfig:      awsAuthConf,
     			ExecProviderConfig: execProviderConf,
     		},
    +		Labels:      labels,
    +		Annotations: annotations,
     	}
     
     	// Bearer token will preferentially be used for auth if present,
    
  • cmd/util/cluster_test.go+11 3 modified
    @@ -11,6 +11,8 @@ import (
     )
     
     func Test_newCluster(t *testing.T) {
    +	labels := map[string]string{"key1": "val1"}
    +	annotations := map[string]string{"key2": "val2"}
     	clusterWithData := NewCluster("test-cluster", []string{"test-namespace"}, false, &rest.Config{
     		TLSClientConfig: rest.TLSClientConfig{
     			Insecure:   false,
    @@ -23,11 +25,13 @@ func Test_newCluster(t *testing.T) {
     	},
     		"test-bearer-token",
     		&v1alpha1.AWSAuthConfig{},
    -		&v1alpha1.ExecProviderConfig{})
    +		&v1alpha1.ExecProviderConfig{}, labels, annotations)
     
     	assert.Equal(t, "test-cert-data", string(clusterWithData.Config.CertData))
     	assert.Equal(t, "test-key-data", string(clusterWithData.Config.KeyData))
     	assert.Equal(t, "", clusterWithData.Config.BearerToken)
    +	assert.Equal(t, labels, clusterWithData.Labels)
    +	assert.Equal(t, annotations, clusterWithData.Annotations)
     
     	clusterWithFiles := NewCluster("test-cluster", []string{"test-namespace"}, false, &rest.Config{
     		TLSClientConfig: rest.TLSClientConfig{
    @@ -41,11 +45,13 @@ func Test_newCluster(t *testing.T) {
     	},
     		"test-bearer-token",
     		&v1alpha1.AWSAuthConfig{},
    -		&v1alpha1.ExecProviderConfig{})
    +		&v1alpha1.ExecProviderConfig{}, labels, nil)
     
     	assert.True(t, strings.Contains(string(clusterWithFiles.Config.CertData), "test-cert-data"))
     	assert.True(t, strings.Contains(string(clusterWithFiles.Config.KeyData), "test-key-data"))
     	assert.Equal(t, "", clusterWithFiles.Config.BearerToken)
    +	assert.Equal(t, labels, clusterWithFiles.Labels)
    +	assert.Nil(t, clusterWithFiles.Annotations)
     
     	clusterWithBearerToken := NewCluster("test-cluster", []string{"test-namespace"}, false, &rest.Config{
     		TLSClientConfig: rest.TLSClientConfig{
    @@ -57,7 +63,9 @@ func Test_newCluster(t *testing.T) {
     	},
     		"test-bearer-token",
     		&v1alpha1.AWSAuthConfig{},
    -		&v1alpha1.ExecProviderConfig{})
    +		&v1alpha1.ExecProviderConfig{}, nil, nil)
     
     	assert.Equal(t, "test-bearer-token", clusterWithBearerToken.Config.BearerToken)
    +	assert.Nil(t, clusterWithBearerToken.Labels)
    +	assert.Nil(t, clusterWithBearerToken.Annotations)
     }
    
  • docs/user-guide/commands/argocd_admin_cluster_generate-spec.md+2 0 modified
    @@ -9,6 +9,7 @@ argocd admin cluster generate-spec CONTEXT [flags]
     ### Options
     
     ```
    +      --annotation stringArray             Set metadata annotations (e.g. --annotation key=value)
           --aws-cluster-name string            AWS Cluster name if set then aws cli eks token command will be used to access cluster
           --aws-role-arn string                Optional AWS role arn. If set then AWS IAM Authenticator assumes a role to perform cluster operations instead of the default AWS credential provider chain.
           --bearer-token string                Authentication token that should be used to access K8S API server
    @@ -22,6 +23,7 @@ argocd admin cluster generate-spec CONTEXT [flags]
       -h, --help                               help for generate-spec
           --in-cluster                         Indicates Argo CD resides inside this cluster and should connect using the internal k8s hostname (kubernetes.default.svc)
           --kubeconfig string                  use a particular kubeconfig file
    +      --label stringArray                  Set metadata labels (e.g. --label key=value)
           --name string                        Overwrite the cluster name
           --namespace stringArray              List of namespaces which are allowed to manage
       -o, --output string                      Output format. One of: json|yaml (default "yaml")
    
  • docs/user-guide/commands/argocd_cluster_add.md+2 0 modified
    @@ -9,6 +9,7 @@ argocd cluster add CONTEXT [flags]
     ### Options
     
     ```
    +      --annotation stringArray             Set metadata annotations (e.g. --annotation key=value)
           --aws-cluster-name string            AWS Cluster name if set then aws cli eks token command will be used to access cluster
           --aws-role-arn string                Optional AWS role arn. If set then AWS IAM Authenticator assumes a role to perform cluster operations instead of the default AWS credential provider chain.
           --cluster-resources                  Indicates if cluster level resources should be managed. The setting is used only if list of managed namespaces is not empty.
    @@ -20,6 +21,7 @@ argocd cluster add CONTEXT [flags]
       -h, --help                               help for add
           --in-cluster                         Indicates Argo CD resides inside this cluster and should connect using the internal k8s hostname (kubernetes.default.svc)
           --kubeconfig string                  use a particular kubeconfig file
    +      --label stringArray                  Set metadata labels (e.g. --label key=value)
           --name string                        Overwrite the cluster name
           --namespace stringArray              List of namespaces which are allowed to manage
           --project string                     project of the cluster
    
  • pkg/apis/application/v1alpha1/generated.pb.go+763 417 modified
    @@ -2555,6 +2555,8 @@ func init() {
     	proto.RegisterType((*ApplicationWatchEvent)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.ApplicationWatchEvent")
     	proto.RegisterType((*Backoff)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.Backoff")
     	proto.RegisterType((*Cluster)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.Cluster")
    +	proto.RegisterMapType((map[string]string)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.Cluster.AnnotationsEntry")
    +	proto.RegisterMapType((map[string]string)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.Cluster.LabelsEntry")
     	proto.RegisterType((*ClusterCacheInfo)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.ClusterCacheInfo")
     	proto.RegisterType((*ClusterConfig)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.ClusterConfig")
     	proto.RegisterType((*ClusterInfo)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.ClusterInfo")
    @@ -2631,423 +2633,427 @@ func init() {
     }
     
     var fileDescriptor_030104ce3b95bcac = []byte{
    -	// 6655 bytes of a gzipped FileDescriptorProto
    -	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x3d, 0x5b, 0x6c, 0x24, 0xd9,
    -	0x55, 0x5b, 0xdd, 0x7e, 0x74, 0x1f, 0x3f, 0x66, 0x7c, 0xe7, 0xb1, 0xce, 0xb0, 0x19, 0x8f, 0x6a,
    -	0x95, 0x64, 0x21, 0x89, 0xcd, 0x0e, 0x4b, 0x58, 0xb2, 0x21, 0xc1, 0x6d, 0xcf, 0xc3, 0x33, 0x9e,
    -	0x19, 0xef, 0xb1, 0x67, 0x86, 0x3c, 0x08, 0x5b, 0xae, 0xbe, 0xdd, 0xae, 0x71, 0x77, 0x55, 0x6f,
    -	0x55, 0xb5, 0xc7, 0x9d, 0x90, 0x17, 0x0a, 0x64, 0x45, 0x1e, 0x1b, 0x25, 0xf9, 0x48, 0x24, 0x04,
    -	0xe1, 0x21, 0x24, 0x3e, 0x22, 0xe0, 0x0b, 0x50, 0xc4, 0x4f, 0xbe, 0x82, 0x90, 0x20, 0x12, 0x28,
    -	0x09, 0x44, 0x98, 0x64, 0x08, 0x0a, 0x20, 0x01, 0x02, 0xf2, 0xc3, 0x7c, 0xa1, 0xfb, 0xbe, 0x55,
    -	0xdd, 0x3d, 0xb6, 0xc7, 0x35, 0x93, 0x28, 0xe2, 0xcf, 0x7d, 0xce, 0xa9, 0x73, 0xce, 0x7d, 0x9d,
    -	0x7b, 0xee, 0x39, 0xe7, 0x5e, 0xc3, 0x6a, 0x33, 0x48, 0xb7, 0xba, 0x9b, 0xf3, 0x7e, 0xd4, 0x5e,
    -	0xf0, 0xe2, 0x66, 0xd4, 0x89, 0xa3, 0x3b, 0xfc, 0x8f, 0x37, 0xfb, 0xf5, 0x85, 0x9d, 0xf3, 0x0b,
    -	0x9d, 0xed, 0xe6, 0x82, 0xd7, 0x09, 0x92, 0x05, 0xaf, 0xd3, 0x69, 0x05, 0xbe, 0x97, 0x06, 0x51,
    -	0xb8, 0xb0, 0xf3, 0xac, 0xd7, 0xea, 0x6c, 0x79, 0xcf, 0x2e, 0x34, 0x69, 0x48, 0x63, 0x2f, 0xa5,
    -	0xf5, 0xf9, 0x4e, 0x1c, 0xa5, 0x11, 0x79, 0x9b, 0xe1, 0x36, 0xaf, 0xb8, 0xf1, 0x3f, 0x7e, 0xc9,
    -	0xaf, 0xcf, 0xef, 0x9c, 0x9f, 0xef, 0x6c, 0x37, 0xe7, 0x19, 0xb7, 0x79, 0x8b, 0xdb, 0xbc, 0xe2,
    -	0x76, 0xe6, 0xcd, 0x96, 0x2e, 0xcd, 0xa8, 0x19, 0x2d, 0x70, 0xa6, 0x9b, 0xdd, 0x06, 0xff, 0xc5,
    -	0x7f, 0xf0, 0xbf, 0x84, 0xb0, 0x33, 0xee, 0xf6, 0xf3, 0xc9, 0x7c, 0x10, 0x31, 0xf5, 0x16, 0xfc,
    -	0x28, 0xa6, 0x0b, 0x3b, 0x7d, 0x0a, 0x9d, 0x79, 0xce, 0xd0, 0xb4, 0x3d, 0x7f, 0x2b, 0x08, 0x69,
    -	0xdc, 0x33, 0x6d, 0x6a, 0xd3, 0xd4, 0x1b, 0xf4, 0xd5, 0xc2, 0xb0, 0xaf, 0xe2, 0x6e, 0x98, 0x06,
    -	0x6d, 0xda, 0xf7, 0xc1, 0x5b, 0xf6, 0xfb, 0x20, 0xf1, 0xb7, 0x68, 0xdb, 0xcb, 0x7f, 0xe7, 0xbe,
    -	0x0c, 0x53, 0x8b, 0xb7, 0xd7, 0x17, 0xbb, 0xe9, 0xd6, 0x52, 0x14, 0x36, 0x82, 0x26, 0xf9, 0x69,
    -	0x98, 0xf0, 0x5b, 0xdd, 0x24, 0xa5, 0xf1, 0x75, 0xaf, 0x4d, 0x67, 0x9d, 0x73, 0xce, 0x33, 0xd5,
    -	0xda, 0x89, 0xaf, 0xee, 0xcd, 0x3d, 0x71, 0x6f, 0x6f, 0x6e, 0x62, 0xc9, 0xa0, 0xd0, 0xa6, 0x23,
    -	0x3f, 0x0e, 0xe3, 0x71, 0xd4, 0xa2, 0x8b, 0x78, 0x7d, 0xb6, 0xc4, 0x3f, 0x39, 0x26, 0x3f, 0x19,
    -	0x47, 0x01, 0x46, 0x85, 0x77, 0xbf, 0x5e, 0x02, 0x58, 0xec, 0x74, 0xd6, 0xe2, 0xe8, 0x0e, 0xf5,
    -	0x53, 0xf2, 0x12, 0x54, 0x58, 0x2f, 0xd4, 0xbd, 0xd4, 0xe3, 0xd2, 0x26, 0xce, 0xff, 0xe4, 0xbc,
    -	0x68, 0xcc, 0xbc, 0xdd, 0x18, 0x33, 0x72, 0x8c, 0x7a, 0x7e, 0xe7, 0xd9, 0xf9, 0x1b, 0x9b, 0xec,
    -	0xfb, 0x6b, 0x34, 0xf5, 0x6a, 0x44, 0x0a, 0x03, 0x03, 0x43, 0xcd, 0x95, 0x84, 0x30, 0x92, 0x74,
    -	0xa8, 0xcf, 0x15, 0x9b, 0x38, 0xbf, 0x3a, 0x7f, 0x94, 0x29, 0x32, 0x6f, 0x34, 0x5f, 0xef, 0x50,
    -	0xbf, 0x36, 0x29, 0x25, 0x8f, 0xb0, 0x5f, 0xc8, 0xe5, 0x90, 0x1d, 0x18, 0x4b, 0x52, 0x2f, 0xed,
    -	0x26, 0xb3, 0x65, 0x2e, 0xf1, 0x7a, 0x61, 0x12, 0x39, 0xd7, 0xda, 0xb4, 0x94, 0x39, 0x26, 0x7e,
    -	0xa3, 0x94, 0xe6, 0xfe, 0x83, 0x03, 0xd3, 0x86, 0x78, 0x35, 0x48, 0x52, 0xf2, 0x9e, 0xbe, 0xce,
    -	0x9d, 0x3f, 0x58, 0xe7, 0xb2, 0xaf, 0x79, 0xd7, 0x1e, 0x97, 0xc2, 0x2a, 0x0a, 0x62, 0x75, 0x6c,
    -	0x1b, 0x46, 0x83, 0x94, 0xb6, 0x93, 0xd9, 0xd2, 0xb9, 0xf2, 0x33, 0x13, 0xe7, 0x2f, 0x17, 0xd5,
    -	0xce, 0xda, 0x94, 0x14, 0x3a, 0xba, 0xc2, 0xd8, 0xa3, 0x90, 0xe2, 0x7e, 0x1f, 0xec, 0xf6, 0xb1,
    -	0x0e, 0x27, 0xcf, 0xc2, 0x44, 0x12, 0x75, 0x63, 0x9f, 0x22, 0xed, 0x44, 0xc9, 0xac, 0x73, 0xae,
    -	0xcc, 0xa6, 0x1e, 0x9b, 0xa9, 0xeb, 0x06, 0x8c, 0x36, 0x0d, 0xf9, 0x94, 0x03, 0x93, 0x75, 0x9a,
    -	0xa4, 0x41, 0xc8, 0xe5, 0x2b, 0xe5, 0x37, 0x8e, 0xac, 0xbc, 0x02, 0x2e, 0x1b, 0xe6, 0xb5, 0x93,
    -	0xb2, 0x21, 0x93, 0x16, 0x30, 0xc1, 0x8c, 0x7c, 0xb6, 0xe2, 0xea, 0x34, 0xf1, 0xe3, 0xa0, 0xc3,
    -	0x7e, 0xf3, 0x39, 0x63, 0xad, 0xb8, 0x65, 0x83, 0x42, 0x9b, 0x8e, 0x84, 0x30, 0xca, 0x56, 0x54,
    -	0x32, 0x3b, 0xc2, 0xf5, 0x5f, 0x39, 0x9a, 0xfe, 0xb2, 0x53, 0xd9, 0x62, 0x35, 0xbd, 0xcf, 0x7e,
    -	0x25, 0x28, 0xc4, 0x90, 0x4f, 0x3a, 0x30, 0x2b, 0x57, 0x3c, 0x52, 0xd1, 0xa1, 0xb7, 0xb7, 0x82,
    -	0x94, 0xb6, 0x82, 0x24, 0x9d, 0x1d, 0xe5, 0x3a, 0x2c, 0x1c, 0x6c, 0x6e, 0x5d, 0x8a, 0xa3, 0x6e,
    -	0xe7, 0x6a, 0x10, 0xd6, 0x6b, 0xe7, 0xa4, 0xa4, 0xd9, 0xa5, 0x21, 0x8c, 0x71, 0xa8, 0x48, 0xf2,
    -	0x59, 0x07, 0xce, 0x84, 0x5e, 0x9b, 0x26, 0x1d, 0x8f, 0x0d, 0xad, 0x40, 0xd7, 0x5a, 0x9e, 0xbf,
    -	0xcd, 0x35, 0x1a, 0x7b, 0x38, 0x8d, 0x5c, 0xa9, 0xd1, 0x99, 0xeb, 0x43, 0x59, 0xe3, 0x03, 0xc4,
    -	0x92, 0xdf, 0x75, 0x60, 0x26, 0x8a, 0x3b, 0x5b, 0x5e, 0x48, 0xeb, 0x0a, 0x9b, 0xcc, 0x8e, 0xf3,
    -	0xa5, 0xf7, 0xde, 0xa3, 0x0d, 0xd1, 0x8d, 0x3c, 0xdb, 0x6b, 0x51, 0x18, 0xa4, 0x51, 0xbc, 0x4e,
    -	0xd3, 0x34, 0x08, 0x9b, 0x49, 0xed, 0xd4, 0xbd, 0xbd, 0xb9, 0x99, 0x3e, 0x2a, 0xec, 0xd7, 0x87,
    -	0xbc, 0x1f, 0x26, 0x92, 0x5e, 0xe8, 0xdf, 0x0e, 0xc2, 0x7a, 0x74, 0x37, 0x99, 0xad, 0x14, 0xb1,
    -	0x7c, 0xd7, 0x35, 0x43, 0xb9, 0x00, 0x8d, 0x00, 0xb4, 0xa5, 0x0d, 0x1e, 0x38, 0x33, 0x95, 0xaa,
    -	0x45, 0x0f, 0x9c, 0x99, 0x4c, 0x0f, 0x10, 0x4b, 0x3e, 0xe6, 0xc0, 0x54, 0x12, 0x34, 0x43, 0x2f,
    -	0xed, 0xc6, 0xf4, 0x2a, 0xed, 0x25, 0xb3, 0xc0, 0x15, 0xb9, 0x72, 0xc4, 0x5e, 0xb1, 0x58, 0xd6,
    -	0x4e, 0x49, 0x1d, 0xa7, 0x6c, 0x68, 0x82, 0x59, 0xb9, 0x83, 0x16, 0x9a, 0x99, 0xd6, 0x13, 0xc5,
    -	0x2e, 0x34, 0x33, 0xa9, 0x87, 0x8a, 0x74, 0xff, 0xa2, 0x04, 0xc7, 0xf3, 0x7b, 0x10, 0xf9, 0x7d,
    -	0x07, 0x8e, 0xdd, 0xb9, 0x9b, 0x6e, 0x44, 0xdb, 0x34, 0x4c, 0x6a, 0x3d, 0x66, 0x29, 0xb8, 0xf5,
    -	0x9d, 0x38, 0xef, 0x17, 0xbb, 0xdb, 0xcd, 0x5f, 0xc9, 0x4a, 0xb9, 0x10, 0xa6, 0x71, 0xaf, 0xf6,
    -	0xa4, 0x6c, 0xcf, 0xb1, 0x2b, 0xb7, 0x37, 0x6c, 0x2c, 0xe6, 0x95, 0x3a, 0xf3, 0x71, 0x07, 0x4e,
    -	0x0e, 0x62, 0x41, 0x8e, 0x43, 0x79, 0x9b, 0xf6, 0x84, 0x83, 0x83, 0xec, 0x4f, 0xf2, 0x8b, 0x30,
    -	0xba, 0xe3, 0xb5, 0xba, 0x54, 0x3a, 0x0a, 0x97, 0x8e, 0xd6, 0x10, 0xad, 0x19, 0x0a, 0xae, 0x6f,
    -	0x2d, 0x3d, 0xef, 0xb8, 0x7f, 0x5d, 0x86, 0x09, 0x6b, 0xab, 0x78, 0x0c, 0xce, 0x4f, 0x94, 0x71,
    -	0x7e, 0xae, 0x15, 0xb6, 0xcb, 0x0d, 0xf5, 0x7e, 0xee, 0xe6, 0xbc, 0x9f, 0x1b, 0xc5, 0x89, 0x7c,
    -	0xa0, 0xfb, 0x43, 0x52, 0xa8, 0x46, 0x1d, 0xe6, 0xdc, 0xb2, 0x5d, 0x74, 0xa4, 0x88, 0x21, 0xbc,
    -	0xa1, 0xd8, 0xd5, 0xa6, 0xee, 0xed, 0xcd, 0x55, 0xf5, 0x4f, 0x34, 0x82, 0xdc, 0x6f, 0x38, 0x70,
    -	0xd2, 0xd2, 0x71, 0x29, 0x0a, 0xeb, 0x01, 0x1f, 0xda, 0x73, 0x30, 0x92, 0xf6, 0x3a, 0xca, 0x83,
    -	0xd6, 0x3d, 0xb5, 0xd1, 0xeb, 0x50, 0xe4, 0x18, 0xe6, 0x33, 0xb7, 0x69, 0x92, 0x78, 0x4d, 0x9a,
    -	0xf7, 0x99, 0xaf, 0x09, 0x30, 0x2a, 0x3c, 0x89, 0x81, 0xb4, 0xbc, 0x24, 0xdd, 0x88, 0xbd, 0x30,
    -	0xe1, 0xec, 0x37, 0x82, 0x36, 0x95, 0x1d, 0xfc, 0x13, 0x07, 0x9b, 0x31, 0xec, 0x8b, 0xda, 0xe9,
    -	0x7b, 0x7b, 0x73, 0x64, 0xb5, 0x8f, 0x13, 0x0e, 0xe0, 0xee, 0x7e, 0xd6, 0x81, 0xd3, 0x83, 0xdd,
    -	0x1a, 0xf2, 0x7a, 0x18, 0x4b, 0x68, 0xbc, 0x43, 0x63, 0xd9, 0x3a, 0x33, 0x24, 0x1c, 0x8a, 0x12,
    -	0x4b, 0x16, 0xa0, 0xaa, 0x4d, 0xae, 0x6c, 0xe3, 0x8c, 0x24, 0xad, 0x1a, 0x3b, 0x6d, 0x68, 0x58,
    -	0xa7, 0xb1, 0x1f, 0xd2, 0x09, 0xd2, 0x9d, 0xc6, 0xcf, 0x1b, 0x1c, 0xe3, 0xfe, 0xa3, 0x03, 0xc7,
    -	0x2c, 0xad, 0x1e, 0x83, 0x97, 0x1b, 0x66, 0xbd, 0xdc, 0x95, 0xc2, 0xe6, 0xf3, 0x10, 0x37, 0xf7,
    -	0x2b, 0x63, 0x30, 0x63, 0xcf, 0x7a, 0x6e, 0x8e, 0xf9, 0x01, 0x8b, 0x76, 0xa2, 0x9b, 0xb8, 0x2a,
    -	0xfb, 0xdc, 0x1c, 0xb0, 0x04, 0x18, 0x15, 0x9e, 0x75, 0x62, 0xc7, 0x4b, 0xb7, 0x64, 0x87, 0xeb,
    -	0x4e, 0x5c, 0xf3, 0xd2, 0x2d, 0xe4, 0x18, 0xf2, 0x76, 0x98, 0x4e, 0xbd, 0xb8, 0x49, 0x53, 0xa4,
    -	0x3b, 0x41, 0xa2, 0xd6, 0x4b, 0xb5, 0x76, 0x5a, 0xd2, 0x4e, 0x6f, 0x64, 0xb0, 0x98, 0xa3, 0x26,
    -	0x2f, 0xc3, 0xc8, 0x16, 0x6d, 0xb5, 0xa5, 0x5f, 0xb3, 0x5e, 0xdc, 0x0a, 0xe7, 0x6d, 0xbd, 0x4c,
    -	0x5b, 0xed, 0x5a, 0x85, 0xa9, 0xcc, 0xfe, 0x42, 0x2e, 0x8a, 0xfc, 0xaa, 0x03, 0xd5, 0xed, 0x6e,
    -	0x92, 0x46, 0xed, 0xe0, 0x7d, 0x74, 0xb6, 0xc2, 0x05, 0xff, 0x42, 0xc1, 0x82, 0xaf, 0x2a, 0xfe,
    -	0x62, 0xbd, 0xeb, 0x9f, 0x68, 0x24, 0x93, 0x0f, 0xc0, 0xf8, 0x76, 0x12, 0x85, 0x21, 0x65, 0x9e,
    -	0x0a, 0x53, 0xe2, 0x56, 0xd1, 0x4a, 0x08, 0xee, 0xb5, 0x09, 0x36, 0xb6, 0xf2, 0x07, 0x2a, 0x99,
    -	0xbc, 0x1b, 0xea, 0x41, 0x4c, 0xfd, 0x34, 0x8a, 0x7b, 0xb3, 0xf0, 0x48, 0xba, 0x61, 0x59, 0xf1,
    -	0x17, 0xdd, 0xa0, 0x7f, 0xa2, 0x91, 0x4c, 0x7a, 0x30, 0xd6, 0x69, 0x75, 0x9b, 0x41, 0x38, 0x3b,
    -	0xc1, 0x75, 0xb8, 0x59, 0xb0, 0x0e, 0x6b, 0x9c, 0x79, 0x0d, 0x98, 0x51, 0x11, 0x7f, 0xa3, 0x14,
    -	0x48, 0x9e, 0x86, 0x51, 0x7f, 0xcb, 0x8b, 0xd3, 0xd9, 0x49, 0x3e, 0x67, 0xf5, 0x22, 0x5a, 0x62,
    -	0x40, 0x14, 0x38, 0xf7, 0xb7, 0x4b, 0x70, 0x66, 0x78, 0xc3, 0xc4, 0x6a, 0xf2, 0xbb, 0x71, 0x22,
    -	0xec, 0x73, 0xc5, 0x5e, 0x4d, 0x1c, 0x8c, 0x0a, 0x4f, 0x3e, 0xe2, 0xc0, 0xf8, 0x1d, 0x39, 0xe2,
    -	0xa5, 0x47, 0x32, 0xe2, 0x57, 0xe4, 0x88, 0x6b, 0x1d, 0xae, 0xa8, 0x51, 0x97, 0x72, 0x99, 0xba,
    -	0x74, 0xd7, 0x6f, 0x75, 0xeb, 0xca, 0x32, 0x6a, 0xd2, 0x0b, 0x02, 0x8c, 0x0a, 0xcf, 0x48, 0x83,
    -	0x50, 0x90, 0x8e, 0x64, 0x49, 0x57, 0x42, 0x49, 0x2a, 0xf1, 0xee, 0x77, 0xcb, 0x70, 0x6a, 0xe0,
    -	0xe2, 0x23, 0xf3, 0x00, 0xdc, 0x67, 0xb9, 0x18, 0xb0, 0x03, 0xa6, 0x38, 0x55, 0x4f, 0x33, 0x17,
    -	0xe3, 0x96, 0x86, 0xa2, 0x45, 0x41, 0x3e, 0x04, 0xd0, 0xf1, 0x62, 0xaf, 0x4d, 0x53, 0x1a, 0x2b,
    -	0x3b, 0x79, 0xf5, 0x68, 0xbd, 0xc4, 0xf4, 0x58, 0x53, 0x3c, 0x8d, 0x8f, 0xa3, 0x41, 0x09, 0x5a,
    -	0x22, 0xd9, 0x19, 0x3a, 0xa6, 0x2d, 0xea, 0x25, 0xf4, 0xba, 0xd9, 0x3e, 0xf4, 0x19, 0x1a, 0x0d,
    -	0x0a, 0x6d, 0x3a, 0xb6, 0x8f, 0xf1, 0x56, 0x24, 0xb2, 0xaf, 0xf4, 0x3e, 0xc6, 0xdb, 0x99, 0xa0,
    -	0xc4, 0x92, 0x57, 0x1d, 0x98, 0x6e, 0x04, 0x2d, 0x6a, 0xa4, 0xcb, 0x13, 0xef, 0x8d, 0xa3, 0x37,
    -	0xf2, 0xa2, 0xcd, 0xd7, 0x58, 0xe0, 0x0c, 0x38, 0xc1, 0x9c, 0x78, 0x36, 0xcc, 0x3b, 0x34, 0xe6,
    -	0xa6, 0x7b, 0x2c, 0x3b, 0xcc, 0xb7, 0x04, 0x18, 0x15, 0xde, 0xfd, 0x42, 0x09, 0x66, 0x87, 0xcd,
    -	0x39, 0x92, 0xb0, 0x99, 0x95, 0xde, 0xf2, 0xe2, 0x44, 0xba, 0xef, 0x47, 0x3c, 0x05, 0x4a, 0xbe,
    -	0xb7, 0xbc, 0xd8, 0x9e, 0xa3, 0x5c, 0x00, 0x2a, 0x49, 0xe4, 0x0e, 0x8c, 0xa4, 0x2d, 0xaf, 0xa0,
    -	0xb0, 0x91, 0x25, 0xd1, 0x38, 0x59, 0xab, 0x8b, 0x09, 0x72, 0x19, 0xe4, 0x29, 0x18, 0x69, 0x05,
    -	0x9b, 0xcc, 0x19, 0x65, 0x93, 0x98, 0xef, 0x2a, 0xab, 0xc1, 0x66, 0x82, 0x1c, 0xea, 0x7e, 0xdd,
    -	0x19, 0xd0, 0x37, 0xd2, 0xe8, 0xb2, 0x49, 0x45, 0xc3, 0x9d, 0x20, 0x8e, 0xc2, 0x36, 0x0d, 0xd3,
    -	0x7c, 0x28, 0xf4, 0x82, 0x41, 0xa1, 0x4d, 0x47, 0x7e, 0xc5, 0x19, 0xb0, 0x1a, 0x8e, 0x18, 0x03,
    -	0x94, 0x2a, 0x1d, 0x78, 0x41, 0xb8, 0xff, 0x39, 0x36, 0xc0, 0xfe, 0xe9, 0x0d, 0x8d, 0x9c, 0x07,
    -	0x60, 0xde, 0xd4, 0x5a, 0x4c, 0x1b, 0xc1, 0xae, 0x6c, 0x99, 0x66, 0x79, 0x5d, 0x63, 0xd0, 0xa2,
    -	0x52, 0xdf, 0xac, 0x77, 0x1b, 0xec, 0x9b, 0x52, 0xff, 0x37, 0x02, 0x83, 0x16, 0x15, 0x79, 0x0e,
    -	0xc6, 0x82, 0xb6, 0xd7, 0xa4, 0xaa, 0xff, 0x9f, 0x62, 0x8b, 0x6b, 0x85, 0x43, 0xee, 0xef, 0xcd,
    -	0x4d, 0x6b, 0x85, 0x38, 0x08, 0x25, 0x2d, 0xf9, 0x3d, 0x07, 0x26, 0xfd, 0xa8, 0xdd, 0x8e, 0xc2,
    -	0x55, 0x6f, 0x93, 0xb6, 0x54, 0x88, 0xeb, 0xce, 0xa3, 0xda, 0xee, 0xe7, 0x97, 0x2c, 0x61, 0xe2,
    -	0x80, 0xa9, 0x03, 0x77, 0x36, 0x0a, 0x33, 0x5a, 0xd9, 0x6b, 0x70, 0xf4, 0xc1, 0x6b, 0x90, 0xfc,
    -	0xa9, 0x03, 0x33, 0xe2, 0xdb, 0xc5, 0x30, 0x8c, 0x52, 0x19, 0x79, 0x14, 0x31, 0xaa, 0xe8, 0x11,
    -	0x37, 0xcb, 0x92, 0x28, 0xda, 0xf6, 0x1a, 0xa9, 0xe6, 0x4c, 0x1f, 0x1e, 0xfb, 0x95, 0x24, 0x97,
    -	0x60, 0xa6, 0x11, 0xc5, 0x3e, 0xb5, 0x3b, 0x82, 0x3b, 0x7e, 0x15, 0xc3, 0xe8, 0x62, 0x9e, 0x00,
    -	0xfb, 0xbf, 0x21, 0xb7, 0xe0, 0xb4, 0x05, 0xb4, 0xfb, 0xa1, 0xc2, 0xb9, 0x9d, 0x95, 0xdc, 0x4e,
    -	0x5f, 0x1c, 0x48, 0x85, 0x43, 0xbe, 0x3e, 0xf3, 0x0e, 0x98, 0xe9, 0x1b, 0xbf, 0x01, 0xa7, 0xfb,
    -	0x93, 0xf6, 0xe9, 0xbe, 0x6a, 0x1d, 0xca, 0xcf, 0x2c, 0xc3, 0xe9, 0xc1, 0x3d, 0x75, 0x18, 0x2e,
    -	0xee, 0x6f, 0x3a, 0xf0, 0xe4, 0x10, 0x37, 0x46, 0x1f, 0x6b, 0x9c, 0x61, 0xc7, 0x1a, 0xe2, 0x41,
    -	0x99, 0x86, 0x3b, 0xd2, 0x58, 0x5c, 0x3c, 0xda, 0x8c, 0xb8, 0x10, 0xee, 0x88, 0x81, 0x1e, 0xbf,
    -	0xb7, 0x37, 0x57, 0xbe, 0x10, 0xee, 0x20, 0xe3, 0xed, 0x7e, 0x6e, 0x2c, 0x73, 0x72, 0x5a, 0x57,
    -	0x87, 0x75, 0xae, 0xa8, 0x3c, 0x37, 0xdd, 0x28, 0x78, 0x2e, 0x5a, 0x27, 0x43, 0x11, 0x82, 0x97,
    -	0xe2, 0xc8, 0xc7, 0x1d, 0x1e, 0xf5, 0x56, 0x27, 0x4a, 0xe9, 0x59, 0x3d, 0x9a, 0x20, 0xbc, 0x1d,
    -	0x4b, 0x57, 0x40, 0xb4, 0xa5, 0xb3, 0x95, 0xdc, 0x11, 0x41, 0xa7, 0xbc, 0x7f, 0xa5, 0xe2, 0xe2,
    -	0x0a, 0x4f, 0x76, 0x01, 0x92, 0x5e, 0xe8, 0xaf, 0x45, 0xad, 0xc0, 0xef, 0xc9, 0x30, 0x43, 0x01,
    -	0x91, 0x53, 0xc1, 0x4f, 0x38, 0x59, 0xe6, 0x37, 0x5a, 0xb2, 0xc8, 0x17, 0x1d, 0x98, 0x09, 0x9a,
    -	0x61, 0x14, 0xd3, 0xe5, 0xa0, 0xd1, 0xa0, 0x31, 0x0d, 0x7d, 0xaa, 0xfc, 0x90, 0xdb, 0x47, 0xd3,
    -	0x40, 0x05, 0xfd, 0x56, 0xf2, 0xec, 0xcd, 0x12, 0xef, 0x43, 0x61, 0xbf, 0x32, 0xa4, 0x0e, 0x23,
    -	0x41, 0xd8, 0x88, 0xa4, 0x61, 0xab, 0x1d, 0x4d, 0xa9, 0x95, 0xb0, 0x11, 0x99, 0xb5, 0xc2, 0x7e,
    -	0x21, 0xe7, 0x4e, 0x56, 0xe1, 0x64, 0x2c, 0x4f, 0xa2, 0x97, 0x83, 0x84, 0xf9, 0xf3, 0xab, 0x41,
    -	0x3b, 0x48, 0xb9, 0x51, 0x2a, 0xd7, 0x66, 0xef, 0xed, 0xcd, 0x9d, 0xc4, 0x01, 0x78, 0x1c, 0xf8,
    -	0x95, 0xfb, 0x4a, 0x35, 0x7b, 0xdc, 0x16, 0xc1, 0xa4, 0x0f, 0x40, 0x35, 0xd6, 0xe1, 0x7b, 0xe1,
    -	0x19, 0xad, 0x16, 0xd3, 0xc7, 0x32, 0x8a, 0xa5, 0xe3, 0x20, 0x26, 0x50, 0x6f, 0x24, 0x32, 0x0f,
    -	0x89, 0x8d, 0xbc, 0x5c, 0x16, 0x05, 0xcc, 0x2f, 0x29, 0xd5, 0x04, 0xec, 0x7a, 0xa1, 0x8f, 0x5c,
    -	0x06, 0x89, 0x61, 0x6c, 0x8b, 0x7a, 0xad, 0x74, 0x4b, 0xc6, 0x93, 0xae, 0x1c, 0xd5, 0xa7, 0x65,
    -	0xbc, 0xf2, 0xb1, 0x3a, 0x01, 0x45, 0x29, 0x89, 0xec, 0xc2, 0xf8, 0x96, 0x18, 0x04, 0xb9, 0xb7,
    -	0x5f, 0x3b, 0x6a, 0xe7, 0x66, 0x46, 0xd6, 0xac, 0x5f, 0x09, 0x40, 0x25, 0x8e, 0xfc, 0x9a, 0x03,
    -	0xe0, 0xab, 0x20, 0x9d, 0x5a, 0x3e, 0x58, 0x98, 0xdd, 0xd1, 0xf1, 0x3f, 0xe3, 0x1a, 0x69, 0x50,
    -	0x82, 0x96, 0x64, 0xf2, 0x12, 0x4c, 0xc6, 0xd4, 0x8f, 0x42, 0x3f, 0x68, 0xd1, 0xfa, 0x62, 0xca,
    -	0xdd, 0xf8, 0xc3, 0x05, 0xf3, 0x8e, 0x33, 0xff, 0x04, 0x2d, 0x1e, 0x98, 0xe1, 0x48, 0x5e, 0x71,
    -	0x60, 0x5a, 0x07, 0x2a, 0xd9, 0x80, 0x50, 0x19, 0xb0, 0x59, 0x2d, 0x28, 0x2c, 0xca, 0x79, 0xd6,
    -	0x08, 0x3b, 0xae, 0x64, 0x61, 0x98, 0x93, 0x4b, 0xde, 0x05, 0x10, 0x6d, 0xf2, 0xa0, 0x20, 0x6b,
    -	0x6a, 0xe5, 0xd0, 0x4d, 0x9d, 0x16, 0xf1, 0x6d, 0xc5, 0x01, 0x2d, 0x6e, 0xe4, 0x2a, 0x80, 0x58,
    -	0x36, 0x1b, 0xbd, 0x0e, 0xe5, 0x41, 0x99, 0x6a, 0xed, 0x8d, 0xaa, 0xf3, 0xd7, 0x35, 0xe6, 0xfe,
    -	0xde, 0x5c, 0xff, 0x69, 0x97, 0x47, 0x63, 0xad, 0xcf, 0xc9, 0xfb, 0x61, 0x3c, 0xe9, 0xb6, 0xdb,
    -	0x9e, 0x0e, 0xae, 0xac, 0x15, 0xb7, 0x23, 0x0a, 0xbe, 0x66, 0x6e, 0x4a, 0x00, 0x2a, 0x89, 0x6e,
    -	0x08, 0xa4, 0x9f, 0x9e, 0x3c, 0x07, 0x93, 0x74, 0x37, 0xa5, 0x71, 0xe8, 0xb5, 0x6e, 0xe2, 0xaa,
    -	0x3a, 0x8e, 0xf3, 0xc1, 0xbf, 0x60, 0xc1, 0x31, 0x43, 0x45, 0x5c, 0xed, 0x79, 0x97, 0x38, 0x3d,
    -	0x18, 0xcf, 0x5b, 0xf9, 0xd9, 0xee, 0xff, 0x96, 0x32, 0x1e, 0xc1, 0x46, 0x4c, 0x29, 0x89, 0x60,
    -	0x34, 0x8c, 0xea, 0xda, 0xe8, 0x5d, 0x29, 0xc6, 0xe8, 0x5d, 0x8f, 0xea, 0x56, 0x5e, 0x99, 0xfd,
    -	0x4a, 0x50, 0xc8, 0xe1, 0x89, 0x37, 0x95, 0xa1, 0xe4, 0x08, 0xe9, 0x04, 0x15, 0x29, 0x59, 0x27,
    -	0xde, 0x6e, 0xd8, 0x82, 0x30, 0x2b, 0x97, 0x6c, 0xc3, 0xe8, 0x56, 0x94, 0xa4, 0xe2, 0xac, 0x72,
    -	0x64, 0x2f, 0xec, 0x72, 0x94, 0xa4, 0x7c, 0x0b, 0xd3, 0xcd, 0x66, 0x90, 0x04, 0x85, 0x0c, 0xf7,
    -	0x7b, 0x4e, 0x26, 0xf8, 0x72, 0xdb, 0x4b, 0xfd, 0xad, 0x0b, 0x3b, 0xec, 0xfc, 0x78, 0x35, 0x93,
    -	0x38, 0xf8, 0x19, 0x3b, 0x71, 0x70, 0x7f, 0x6f, 0xee, 0x0d, 0xc3, 0x0a, 0x7d, 0xee, 0x32, 0x0e,
    -	0xf3, 0x9c, 0x85, 0x95, 0x63, 0xf8, 0xb0, 0x03, 0x13, 0x96, 0x7a, 0x72, 0x43, 0x29, 0x30, 0x86,
    -	0xad, 0x9d, 0x2b, 0x0b, 0x88, 0xb6, 0x48, 0xf7, 0x33, 0x0e, 0x8c, 0xd7, 0x3c, 0x7f, 0x3b, 0x6a,
    -	0x34, 0xc8, 0x9b, 0xa0, 0x52, 0xef, 0xca, 0x14, 0x8d, 0x68, 0x9f, 0x8e, 0xbc, 0x2f, 0x4b, 0x38,
    -	0x6a, 0x0a, 0x36, 0x87, 0x1b, 0x9e, 0x9f, 0x46, 0x31, 0x57, 0xbb, 0x2c, 0xe6, 0xf0, 0x45, 0x0e,
    -	0x41, 0x89, 0x61, 0x87, 0xf4, 0xb6, 0xb7, 0xab, 0x3e, 0xce, 0x47, 0x7e, 0xae, 0x19, 0x14, 0xda,
    -	0x74, 0xee, 0x97, 0xc7, 0x60, 0x5c, 0xe6, 0x42, 0x0f, 0x9c, 0xcd, 0x50, 0x5e, 0x7c, 0x69, 0xa8,
    -	0x17, 0x9f, 0xc0, 0x98, 0xcf, 0xcb, 0xa8, 0xe4, 0x56, 0x7a, 0xc4, 0x18, 0x98, 0x54, 0x50, 0x54,
    -	0x66, 0x19, 0xb5, 0xc4, 0x6f, 0x94, 0xa2, 0xc8, 0xa7, 0x1d, 0x38, 0xe6, 0x47, 0x61, 0x48, 0x7d,
    -	0x63, 0xe7, 0x47, 0x8a, 0xc8, 0xf6, 0x2d, 0x65, 0x99, 0x9a, 0xa4, 0x6b, 0x0e, 0x81, 0x79, 0xf1,
    -	0xe4, 0x05, 0x98, 0x12, 0x7d, 0x76, 0x2b, 0x73, 0x3e, 0x36, 0xf9, 0x6f, 0x1b, 0x89, 0x59, 0x5a,
    -	0x32, 0x2f, 0xe2, 0x0c, 0x3c, 0x21, 0x24, 0xce, 0xc8, 0x32, 0xf8, 0xa8, 0x33, 0x46, 0x09, 0x5a,
    -	0x14, 0x24, 0x06, 0x12, 0xd3, 0x46, 0x4c, 0x93, 0x2d, 0xa4, 0x2f, 0x77, 0x69, 0x92, 0xf2, 0x3d,
    -	0x66, 0xfc, 0xe1, 0x72, 0x63, 0xd8, 0xc7, 0x09, 0x07, 0x70, 0x27, 0xdb, 0xd2, 0xd1, 0xad, 0x14,
    -	0xb1, 0x9c, 0xe4, 0x30, 0x0f, 0xf5, 0x77, 0xe7, 0x60, 0x34, 0xd9, 0xf2, 0xe2, 0x3a, 0xdf, 0xdb,
    -	0xca, 0xb5, 0x2a, 0xb3, 0x25, 0xeb, 0x0c, 0x80, 0x02, 0x4e, 0x96, 0xe1, 0x78, 0x2e, 0x7b, 0x9f,
    -	0xf0, 0xdd, 0xab, 0x52, 0x9b, 0x95, 0xec, 0x8e, 0xe7, 0xf2, 0xfe, 0x09, 0xf6, 0x7d, 0x61, 0x1f,
    -	0x82, 0x26, 0x1e, 0x7c, 0x08, 0x72, 0xbf, 0xef, 0x80, 0xe2, 0xb8, 0xe4, 0xf9, 0x5b, 0x94, 0x29,
    -	0x4b, 0xde, 0x0e, 0xd3, 0xda, 0x81, 0x5d, 0x8a, 0xba, 0x32, 0x62, 0x56, 0x36, 0x21, 0x4d, 0xcc,
    -	0x60, 0x31, 0x47, 0x4d, 0x16, 0xa0, 0xca, 0xfa, 0x48, 0x7c, 0x2a, 0x16, 0xbc, 0x76, 0x92, 0x17,
    -	0xd7, 0x56, 0xe4, 0x57, 0x86, 0x86, 0x44, 0x30, 0xd3, 0xf2, 0x92, 0x94, 0x6b, 0xc0, 0xfc, 0xd9,
    -	0x87, 0xcc, 0x89, 0xf2, 0xb2, 0x99, 0xd5, 0x3c, 0x23, 0xec, 0xe7, 0xed, 0x7e, 0x63, 0x04, 0xa6,
    -	0x32, 0x6b, 0x92, 0xd9, 0xb3, 0x6e, 0xc2, 0x36, 0x5d, 0x7d, 0xb8, 0xd7, 0xf6, 0xec, 0xa6, 0x84,
    -	0xa3, 0xa6, 0x60, 0xd4, 0x1d, 0x2f, 0x49, 0xee, 0x46, 0x71, 0x5d, 0x1a, 0x11, 0x4d, 0xbd, 0x26,
    -	0xe1, 0xa8, 0x29, 0x98, 0x65, 0xdb, 0xa4, 0x5e, 0x4c, 0x63, 0x5e, 0x46, 0x90, 0xb7, 0x6c, 0x35,
    -	0x83, 0x42, 0x9b, 0x8e, 0x9b, 0x83, 0xb4, 0x95, 0x2c, 0xb5, 0x02, 0x1a, 0xa6, 0x42, 0xcd, 0x62,
    -	0xcc, 0xc1, 0xc6, 0xea, 0xba, 0xcd, 0xd4, 0x98, 0x83, 0x1c, 0x02, 0xf3, 0xe2, 0xc9, 0x47, 0x1d,
    -	0x98, 0xf2, 0xee, 0x26, 0xa6, 0xca, 0x94, 0xdb, 0x83, 0x23, 0x9b, 0xc7, 0x4c, 0xe1, 0x6a, 0x6d,
    -	0x86, 0x19, 0x96, 0x0c, 0x08, 0xb3, 0x42, 0xc9, 0xe7, 0x1d, 0x20, 0x74, 0x97, 0xfa, 0x6b, 0x71,
    -	0xb4, 0x13, 0xd4, 0xd5, 0x18, 0x4a, 0xc7, 0xfb, 0x88, 0x7e, 0xde, 0x85, 0x3e, 0xbe, 0xc2, 0x9e,
    -	0xf4, 0xc3, 0x71, 0x80, 0x0e, 0xee, 0xdf, 0x97, 0x61, 0xc2, 0x32, 0x03, 0x03, 0x6d, 0xba, 0xf3,
    -	0x43, 0x66, 0xd3, 0x4b, 0x87, 0xb0, 0xe9, 0x1f, 0x82, 0xaa, 0xaf, 0x0c, 0x45, 0x31, 0x55, 0xb1,
    -	0x79, 0xf3, 0x63, 0x6c, 0x85, 0x06, 0xa1, 0x91, 0x49, 0x2e, 0xc1, 0x8c, 0xc5, 0x46, 0x1a, 0x99,
    -	0x11, 0x6e, 0x64, 0x74, 0x88, 0x63, 0x31, 0x4f, 0x80, 0xfd, 0xdf, 0x90, 0x67, 0x99, 0x3f, 0x15,
    -	0xc8, 0x76, 0x89, 0xf3, 0xa3, 0xac, 0x38, 0x5d, 0x5c, 0x5b, 0x51, 0x60, 0xb4, 0x69, 0xdc, 0x6f,
    -	0x38, 0x7a, 0x70, 0x1f, 0x43, 0xb9, 0xc2, 0x9d, 0x6c, 0xb9, 0xc2, 0x85, 0x42, 0xba, 0x79, 0x48,
    -	0xa9, 0xc2, 0x75, 0x18, 0x5f, 0x8a, 0xda, 0x6d, 0x2f, 0xac, 0x93, 0xd7, 0xc1, 0xb8, 0x2f, 0xfe,
    -	0x94, 0x07, 0x14, 0x9e, 0xbf, 0x96, 0x58, 0x54, 0x38, 0xf2, 0x14, 0x8c, 0x78, 0x71, 0x53, 0x1d,
    -	0x4a, 0x78, 0x3a, 0x66, 0x31, 0x6e, 0x26, 0xc8, 0xa1, 0xee, 0x67, 0x4b, 0x00, 0x4b, 0x51, 0xbb,
    -	0xe3, 0xc5, 0xb4, 0xbe, 0x11, 0xfd, 0x7f, 0x74, 0x52, 0xf8, 0xaa, 0x9f, 0x70, 0x80, 0xb0, 0x5e,
    -	0x89, 0x42, 0x1a, 0x9a, 0x14, 0x10, 0xdb, 0x2f, 0x7d, 0x05, 0x95, 0x9b, 0x8f, 0x59, 0x03, 0x0a,
    -	0x81, 0x86, 0xe6, 0x00, 0xfe, 0xeb, 0xd3, 0x2a, 0xba, 0x5d, 0xce, 0xa6, 0xd6, 0x79, 0x3a, 0x54,
    -	0x06, 0xbb, 0xdd, 0xcf, 0x95, 0xe0, 0xb4, 0x30, 0x5b, 0xd7, 0xbc, 0xd0, 0x6b, 0xd2, 0x36, 0xd3,
    -	0xea, 0xa0, 0x71, 0x6e, 0x9f, 0x39, 0x4e, 0x81, 0xca, 0xa4, 0x1f, 0x75, 0x72, 0x8a, 0x49, 0x25,
    -	0xa6, 0xd1, 0x4a, 0x18, 0xa4, 0xc8, 0x99, 0x93, 0x04, 0x2a, 0xea, 0x9e, 0x83, 0x34, 0x36, 0x05,
    -	0x09, 0xd2, 0xeb, 0xee, 0x92, 0x64, 0x8f, 0x5a, 0x90, 0xfb, 0x15, 0x07, 0xf2, 0x46, 0x94, 0x9f,
    -	0x2c, 0x44, 0x2d, 0x5c, 0xfe, 0x64, 0x91, 0x2d, 0x5d, 0x3b, 0x44, 0x25, 0xd8, 0x7b, 0x60, 0xc2,
    -	0x4b, 0x53, 0xda, 0xee, 0x08, 0x37, 0xb7, 0xfc, 0x70, 0xa1, 0x94, 0x6b, 0x51, 0x3d, 0x68, 0x04,
    -	0xdc, 0xbd, 0xb5, 0xd9, 0xb9, 0x2f, 0x42, 0x45, 0x65, 0x0f, 0x0e, 0x30, 0x98, 0x4f, 0x67, 0x92,
    -	0x21, 0x43, 0xa6, 0xcb, 0xfd, 0x12, 0x0c, 0xd8, 0x05, 0x59, 0x93, 0x8d, 0xbd, 0xc8, 0x34, 0xf9,
    -	0x70, 0x36, 0x83, 0xec, 0x8a, 0xcc, 0x89, 0x38, 0xb3, 0xbf, 0xb3, 0xe8, 0x5d, 0xdc, 0x24, 0x53,
    -	0x26, 0xa4, 0x7e, 0x3a, 0xa1, 0x42, 0xce, 0x03, 0x18, 0x33, 0x2f, 0x2b, 0x08, 0x74, 0xd4, 0xcf,
    -	0xec, 0x06, 0x68, 0x51, 0x31, 0xa7, 0x2e, 0x08, 0x93, 0xd4, 0x6b, 0xb5, 0x2e, 0x07, 0x61, 0x2a,
    -	0xcf, 0x45, 0xda, 0x04, 0xac, 0x18, 0x14, 0xda, 0x74, 0x67, 0xde, 0x62, 0x8d, 0xcb, 0x61, 0x92,
    -	0x52, 0x9f, 0x28, 0xc1, 0xf4, 0xa5, 0xb0, 0xbb, 0x76, 0x69, 0xad, 0xbb, 0xd9, 0x0a, 0xfc, 0xab,
    -	0xb4, 0xc7, 0x06, 0x6d, 0x9b, 0xf6, 0x56, 0x96, 0x65, 0xb7, 0xeb, 0x41, 0xbb, 0xca, 0x80, 0x28,
    -	0x70, 0x4c, 0xcd, 0x46, 0x10, 0x36, 0x69, 0xdc, 0x89, 0x03, 0xe9, 0x8d, 0x5b, 0x6a, 0x5e, 0x34,
    -	0x28, 0xb4, 0xe9, 0x18, 0xef, 0xe8, 0x6e, 0x48, 0xe3, 0xbc, 0xfd, 0xb8, 0xc1, 0x80, 0x28, 0x70,
    -	0x8c, 0x28, 0x8d, 0xbb, 0x49, 0x2a, 0x7b, 0x4c, 0x13, 0x6d, 0x30, 0x20, 0x0a, 0x1c, 0x9b, 0x1e,
    -	0x49, 0x77, 0x93, 0x47, 0xf4, 0x72, 0xb9, 0xd5, 0x75, 0x01, 0x46, 0x85, 0x67, 0xa4, 0xdb, 0xb4,
    -	0xb7, 0xcc, 0x76, 0xd3, 0x5c, 0x29, 0xc4, 0x55, 0x01, 0x46, 0x85, 0x77, 0xff, 0xd9, 0x01, 0x92,
    -	0xed, 0x8e, 0xc7, 0xb0, 0x21, 0xbf, 0x9c, 0xdd, 0x90, 0x8f, 0x18, 0x7c, 0xcd, 0xaa, 0x3f, 0x64,
    -	0x5f, 0xfe, 0x1d, 0x07, 0x26, 0xed, 0x38, 0x3c, 0x69, 0xe6, 0x0c, 0xd1, 0x8d, 0xac, 0x21, 0xba,
    -	0xbf, 0x37, 0xf7, 0x73, 0x83, 0xae, 0xe1, 0x35, 0x83, 0x34, 0xea, 0x24, 0x6f, 0xa6, 0x61, 0x33,
    -	0x08, 0x29, 0x8f, 0x32, 0x89, 0xf8, 0x7d, 0x26, 0xc8, 0xbf, 0x14, 0xd5, 0xe9, 0x43, 0x58, 0x32,
    -	0xf7, 0x36, 0xcc, 0xf4, 0xd5, 0xbf, 0x1c, 0xc0, 0xe8, 0xec, 0x5b, 0xdd, 0xe8, 0x7e, 0xd2, 0x81,
    -	0xa9, 0x4c, 0xf9, 0x50, 0x41, 0xa6, 0x8c, 0xaf, 0x8a, 0x88, 0xa7, 0x70, 0xe2, 0x20, 0x14, 0x31,
    -	0x9e, 0x8a, 0xb5, 0x2a, 0x0c, 0x0a, 0x6d, 0x3a, 0xf7, 0x33, 0x25, 0xa8, 0xa8, 0x68, 0xe0, 0x01,
    -	0x54, 0xf9, 0xb8, 0x03, 0x53, 0xfa, 0x68, 0xcc, 0x1d, 0xe6, 0x42, 0x4a, 0x48, 0x98, 0x06, 0x3a,
    -	0xcf, 0xc7, 0x1c, 0x66, 0xed, 0xb9, 0xa3, 0x2d, 0x0c, 0xb3, 0xb2, 0xc9, 0x2d, 0x80, 0xa4, 0x97,
    -	0xa4, 0xb4, 0x6d, 0xb9, 0xee, 0xae, 0xb5, 0x3a, 0xe6, 0xfd, 0x28, 0xa6, 0x6c, 0x2d, 0x5c, 0x8f,
    -	0xea, 0x74, 0x5d, 0x53, 0x1a, 0x43, 0x68, 0x60, 0x68, 0x71, 0x72, 0xff, 0xb0, 0x04, 0xc7, 0xf3,
    -	0x2a, 0x91, 0x77, 0xc3, 0xa4, 0x92, 0x6e, 0xdd, 0x3e, 0x54, 0x21, 0xd0, 0x49, 0xb4, 0x70, 0xf7,
    -	0xf7, 0xe6, 0xe6, 0xfa, 0xaf, 0x5f, 0xce, 0xdb, 0x24, 0x98, 0x61, 0x26, 0xe2, 0x13, 0x32, 0x84,
    -	0x53, 0xeb, 0x2d, 0x76, 0x3a, 0x32, 0xc8, 0x60, 0xc5, 0x27, 0x6c, 0x2c, 0xe6, 0xa8, 0xc9, 0x1a,
    -	0x9c, 0xb4, 0x20, 0xd7, 0x69, 0xd0, 0xdc, 0xda, 0x8c, 0x62, 0x51, 0xe6, 0x5e, 0xae, 0x3d, 0x25,
    -	0xb9, 0x9c, 0xc4, 0x01, 0x34, 0x38, 0xf0, 0x4b, 0xf2, 0x26, 0xa8, 0xf8, 0x5e, 0xc7, 0xf3, 0x83,
    -	0xb4, 0x27, 0xcf, 0x22, 0xda, 0x8e, 0x2c, 0x49, 0x38, 0x6a, 0x0a, 0xf7, 0x1a, 0x8c, 0x1c, 0x70,
    -	0x06, 0x1d, 0x68, 0x5f, 0x7e, 0x11, 0x2a, 0x8c, 0x1d, 0xb3, 0x1b, 0x45, 0xb1, 0x8c, 0xa0, 0xa2,
    -	0x6e, 0x3d, 0x10, 0x17, 0xca, 0x81, 0xa7, 0x42, 0x40, 0xba, 0x59, 0x2b, 0x49, 0xd2, 0xe5, 0x5e,
    -	0x07, 0x43, 0x92, 0xa7, 0xa1, 0x4c, 0x77, 0x3b, 0xf9, 0x58, 0xcf, 0x85, 0xdd, 0x4e, 0x10, 0xd3,
    -	0x84, 0x11, 0xd1, 0xdd, 0x0e, 0x39, 0x03, 0xa5, 0xa0, 0x2e, 0x37, 0x14, 0x90, 0x34, 0xa5, 0x95,
    -	0x65, 0x2c, 0x05, 0x75, 0x77, 0x17, 0xaa, 0xfa, 0x9a, 0x05, 0xd9, 0x56, 0x76, 0xd6, 0x29, 0x22,
    -	0x7c, 0xaf, 0xf8, 0x0e, 0xb1, 0xb0, 0x5d, 0x00, 0x53, 0x78, 0x56, 0x94, 0x7d, 0x39, 0x07, 0x23,
    -	0x7e, 0x24, 0x6b, 0x3c, 0x2b, 0x86, 0x0d, 0x37, 0xb0, 0x1c, 0xe3, 0xde, 0x86, 0xe9, 0xab, 0x61,
    -	0x74, 0x37, 0x64, 0x1b, 0xdf, 0xc5, 0x80, 0xb6, 0xea, 0x8c, 0x71, 0x83, 0xfd, 0x91, 0xdf, 0xce,
    -	0x39, 0x16, 0x05, 0x4e, 0xdf, 0x45, 0x28, 0x0d, 0xbb, 0x8b, 0xe0, 0xfe, 0xba, 0x03, 0xc7, 0xf3,
    -	0x45, 0x66, 0x3f, 0xb0, 0x13, 0xc6, 0x87, 0x99, 0x32, 0xaa, 0x8a, 0xe9, 0x46, 0x47, 0xe4, 0x4b,
    -	0x9f, 0x87, 0xc9, 0xcd, 0x6e, 0xd0, 0xaa, 0xcb, 0xdf, 0x52, 0x1f, 0x5d, 0xa7, 0x55, 0xb3, 0x70,
    -	0x98, 0xa1, 0x64, 0x7e, 0xda, 0x66, 0x10, 0x7a, 0x71, 0x6f, 0xcd, 0xec, 0x1b, 0xda, 0x3c, 0xd5,
    -	0x34, 0x06, 0x2d, 0x2a, 0xf7, 0x6f, 0xcb, 0x60, 0xee, 0x7b, 0x90, 0x40, 0xa6, 0xe3, 0x9d, 0x22,
    -	0xc2, 0x56, 0xeb, 0xbd, 0xd0, 0x37, 0x37, 0x4b, 0x2a, 0xb9, 0x6c, 0xfc, 0xc7, 0x1c, 0xe6, 0x21,
    -	0x06, 0x69, 0xe0, 0x71, 0x63, 0x21, 0x0f, 0x4a, 0x6b, 0x05, 0x65, 0x6c, 0x57, 0x04, 0xe7, 0x28,
    -	0xb6, 0x7d, 0x4e, 0x2d, 0x0c, 0x6d, 0xc9, 0xe4, 0x25, 0x19, 0xe3, 0x2e, 0x17, 0x56, 0xcc, 0x51,
    -	0xc9, 0x05, 0xb6, 0x3b, 0x30, 0x1a, 0xd3, 0x34, 0x56, 0x65, 0x34, 0x57, 0x8f, 0x9a, 0xf1, 0x4b,
    -	0xe3, 0xde, 0x7a, 0xca, 0x0e, 0x63, 0x4d, 0xcb, 0x31, 0xe2, 0x60, 0x14, 0x82, 0xdc, 0x04, 0x48,
    -	0x7f, 0x5f, 0x1c, 0x32, 0x8a, 0xbb, 0x00, 0x55, 0xaf, 0x9b, 0x46, 0x6d, 0xd6, 0x4d, 0x7c, 0x78,
    -	0x2a, 0x56, 0x9c, 0x5a, 0x21, 0xd0, 0xd0, 0xb8, 0xaf, 0x8e, 0x42, 0x2e, 0x3f, 0x4e, 0x76, 0xed,
    -	0xbb, 0x4a, 0x4e, 0xb1, 0x77, 0x95, 0xb4, 0x32, 0x83, 0xee, 0x2b, 0x91, 0x26, 0x8c, 0x76, 0xb6,
    -	0xbc, 0x44, 0xad, 0xd1, 0x17, 0x55, 0x37, 0xad, 0x31, 0xe0, 0xfd, 0xbd, 0xb9, 0x9f, 0x3f, 0x98,
    -	0x1f, 0xc8, 0xe6, 0xea, 0x82, 0x28, 0x16, 0x34, 0xa2, 0x39, 0x0f, 0x14, 0xfc, 0x6d, 0x4f, 0xb0,
    -	0xbc, 0xcf, 0x99, 0xf6, 0x23, 0x8e, 0x28, 0xaa, 0x42, 0x9a, 0x74, 0x5b, 0xa9, 0x9c, 0x0d, 0x2f,
    -	0x16, 0xb8, 0xca, 0x04, 0x63, 0x53, 0x5d, 0x25, 0x7e, 0xa3, 0x25, 0x94, 0xbc, 0x1b, 0xaa, 0x49,
    -	0xea, 0xc5, 0xe9, 0x43, 0xd6, 0x62, 0xe8, 0x4e, 0x5f, 0x57, 0x4c, 0xd0, 0xf0, 0x23, 0xef, 0x02,
    -	0x68, 0x04, 0x61, 0x90, 0x6c, 0x3d, 0x64, 0x6a, 0x8a, 0x2b, 0x7e, 0x51, 0x73, 0x40, 0x8b, 0x1b,
    -	0xb3, 0x6e, 0x7c, 0x6e, 0x8b, 0x90, 0x66, 0x85, 0xef, 0xa5, 0xda, 0xba, 0xa1, 0xc6, 0xa0, 0x45,
    -	0xe5, 0x7e, 0x10, 0x4e, 0xe4, 0xef, 0x09, 0xcb, 0xa3, 0x61, 0x33, 0x8e, 0xba, 0x9d, 0xfc, 0x5e,
    -	0xc2, 0xef, 0x91, 0xa2, 0xc0, 0x31, 0x1b, 0xbf, 0x1d, 0x84, 0xf5, 0xbc, 0x8d, 0xbf, 0x1a, 0x84,
    -	0x75, 0xe4, 0x98, 0x03, 0x5c, 0xe2, 0xfa, 0xb2, 0x03, 0xe7, 0xf6, 0xbb, 0xce, 0xcc, 0x8e, 0xfd,
    -	0x77, 0xbd, 0x38, 0x94, 0x17, 0x34, 0xb8, 0xed, 0xb8, 0xed, 0xc5, 0x21, 0x72, 0x28, 0xe9, 0xc1,
    -	0x98, 0xa8, 0x3f, 0x93, 0xde, 0xf1, 0x8b, 0xc5, 0x5e, 0xae, 0x66, 0x67, 0x2b, 0x1d, 0xad, 0x11,
    -	0xb5, 0x6f, 0x28, 0x05, 0xba, 0xaf, 0x3a, 0x40, 0x6e, 0xec, 0xd0, 0x38, 0x0e, 0xea, 0x56, 0xc5,
    -	0x1c, 0x79, 0x0e, 0x26, 0xef, 0xac, 0xdf, 0xb8, 0xbe, 0x16, 0x05, 0x21, 0x2f, 0xfc, 0xb6, 0xea,
    -	0x34, 0xae, 0x58, 0x70, 0xcc, 0x50, 0x91, 0x25, 0x98, 0xb9, 0xf3, 0x32, 0xdb, 0x72, 0x2e, 0xec,
    -	0x76, 0x62, 0x9a, 0x24, 0xfa, 0x49, 0x82, 0xaa, 0x48, 0x4c, 0x5d, 0x79, 0x31, 0x87, 0xc4, 0x7e,
    -	0x7a, 0xf7, 0x4b, 0x25, 0x98, 0xb0, 0x6e, 0xf0, 0x1f, 0xc0, 0x1f, 0xc9, 0x3d, 0x3a, 0x50, 0x3a,
    -	0xe0, 0xa3, 0x03, 0xcf, 0x40, 0xa5, 0x13, 0xb5, 0x02, 0x3f, 0xd0, 0x15, 0xdd, 0x93, 0x3c, 0x7b,
    -	0x25, 0x61, 0xa8, 0xb1, 0xe4, 0x2e, 0x54, 0xf5, 0x55, 0x5c, 0x59, 0xe3, 0x55, 0x94, 0x47, 0xa6,
    -	0xd7, 0x9a, 0xb9, 0x62, 0x6b, 0x64, 0x11, 0x17, 0xc6, 0xf8, 0x44, 0x55, 0xb1, 0x79, 0x5e, 0x34,
    -	0xc0, 0x67, 0x70, 0x82, 0x12, 0xe3, 0xfe, 0xdb, 0x28, 0x54, 0x91, 0x76, 0xa2, 0xa5, 0x98, 0xd6,
    -	0x13, 0xf2, 0x5a, 0x28, 0x77, 0xe3, 0x96, 0xec, 0x2c, 0x1d, 0xe6, 0xb9, 0x89, 0xab, 0xc8, 0xe0,
    -	0x99, 0xdd, 0xa1, 0x74, 0xa8, 0x1c, 0x5f, 0x79, 0xdf, 0x1c, 0xdf, 0x0b, 0x30, 0x95, 0x24, 0x5b,
    -	0x6b, 0x71, 0xb0, 0xe3, 0xa5, 0x6c, 0xce, 0xc9, 0x98, 0x88, 0x49, 0xaa, 0xac, 0x5f, 0x36, 0x48,
    -	0xcc, 0xd2, 0x92, 0x4b, 0x30, 0x63, 0x32, 0x6d, 0x34, 0x4e, 0x79, 0x08, 0x44, 0x44, 0x4b, 0x74,
    -	0x4e, 0xc3, 0xe4, 0xe6, 0x24, 0x01, 0xf6, 0x7f, 0x43, 0x96, 0xe1, 0x78, 0x06, 0xc8, 0x14, 0x11,
    -	0xa1, 0x14, 0x9d, 0x3f, 0xce, 0xf0, 0x61, 0xba, 0xf4, 0x7d, 0x41, 0xae, 0xc1, 0x09, 0x31, 0xbe,
    -	0xfc, 0x0a, 0xb7, 0x6e, 0xd1, 0x38, 0x67, 0xf4, 0x63, 0x92, 0xd1, 0x89, 0x4b, 0xfd, 0x24, 0x38,
    -	0xe8, 0x3b, 0x36, 0x43, 0x35, 0x78, 0x65, 0x59, 0x1a, 0x36, 0x3d, 0x43, 0x35, 0x9b, 0x95, 0x3a,
    -	0xda, 0x74, 0xe4, 0x9d, 0xf0, 0xa4, 0xf9, 0x29, 0x22, 0x68, 0x62, 0xb7, 0x5f, 0x96, 0xe9, 0xf3,
    -	0x39, 0xc9, 0xe2, 0xc9, 0x4b, 0x03, 0xc9, 0xea, 0x38, 0xec, 0x7b, 0xb2, 0x09, 0x67, 0x34, 0xea,
    -	0x02, 0x5b, 0xbd, 0x9d, 0x38, 0x48, 0x68, 0xcd, 0x4b, 0xe8, 0xcd, 0xb8, 0xc5, 0x13, 0xee, 0x55,
    -	0xf3, 0x0c, 0xc1, 0xa5, 0x20, 0xbd, 0x3c, 0x88, 0x12, 0x57, 0xf1, 0x01, 0x5c, 0x98, 0x73, 0x41,
    -	0x43, 0x6f, 0xb3, 0x45, 0x6f, 0x2c, 0xad, 0xf0, 0x34, 0xbc, 0xe5, 0x5c, 0x5c, 0x50, 0x08, 0x34,
    -	0x34, 0xda, 0xb5, 0x9f, 0x1c, 0xea, 0xda, 0x7f, 0xcb, 0x81, 0x29, 0x3d, 0xd9, 0x1f, 0x43, 0xbc,
    -	0xab, 0x95, 0x8d, 0x77, 0x5d, 0x3a, 0xaa, 0x57, 0x27, 0x35, 0x1f, 0x72, 0x10, 0xfb, 0x5e, 0x15,
    -	0x80, 0x3f, 0xec, 0x12, 0xf0, 0xf2, 0xce, 0x73, 0x30, 0x12, 0xd3, 0x4e, 0x94, 0xb7, 0x7c, 0x8c,
    -	0x02, 0x39, 0xe6, 0x87, 0x77, 0x39, 0x0f, 0xca, 0xf9, 0x8e, 0xfe, 0x60, 0x73, 0xbe, 0xeb, 0x70,
    -	0x2a, 0x08, 0x13, 0xea, 0x77, 0x63, 0xb9, 0xd1, 0x5d, 0x8e, 0x12, 0x6d, 0x1d, 0x2a, 0xb5, 0xd7,
    -	0x4a, 0x46, 0xa7, 0x56, 0x06, 0x11, 0xe1, 0xe0, 0x6f, 0x59, 0x97, 0x2a, 0x84, 0xbc, 0x47, 0x62,
    -	0xc2, 0x03, 0x12, 0x8e, 0x9a, 0xc2, 0x2c, 0x88, 0xd5, 0x86, 0xba, 0x28, 0x92, 0x5b, 0x10, 0xab,
    -	0x17, 0xd7, 0xd1, 0xd0, 0x0c, 0xb6, 0x8a, 0xd5, 0x82, 0xac, 0x22, 0x1c, 0xda, 0x2a, 0xaa, 0xf5,
    -	0x39, 0x31, 0xf4, 0x19, 0x00, 0xb5, 0x59, 0x4f, 0x0e, 0xdd, 0xac, 0xdf, 0x0e, 0xd3, 0x41, 0xb8,
    -	0x45, 0xe3, 0x20, 0xa5, 0x75, 0xbe, 0x16, 0x66, 0xa7, 0x78, 0x47, 0xe8, 0xc8, 0xd5, 0x4a, 0x06,
    -	0x8b, 0x39, 0xea, 0xac, 0x51, 0x99, 0x3e, 0x80, 0x51, 0x19, 0x62, 0xca, 0x8f, 0x15, 0x63, 0xca,
    -	0x8f, 0x1f, 0xdd, 0x94, 0xcf, 0x3c, 0x52, 0x53, 0x4e, 0x0a, 0x31, 0xe5, 0x4f, 0xc3, 0x68, 0x27,
    -	0x8e, 0x76, 0x7b, 0xb3, 0x27, 0xb2, 0xde, 0xf4, 0x1a, 0x03, 0xa2, 0xc0, 0xd9, 0x45, 0x57, 0x27,
    -	0xf7, 0x29, 0xba, 0x7a, 0xa5, 0x04, 0xa7, 0x8c, 0xa5, 0x63, 0xf3, 0x2b, 0x68, 0xb0, 0xb5, 0xce,
    -	0x6f, 0xf3, 0x89, 0x72, 0x0b, 0x2b, 0x68, 0x6a, 0xe2, 0xaf, 0x1a, 0x83, 0x16, 0x15, 0x8f, 0x3d,
    -	0xd2, 0x98, 0x97, 0x8a, 0xe6, 0xcd, 0xe0, 0x92, 0x84, 0xa3, 0xa6, 0xe0, 0xaf, 0xc2, 0xd1, 0x38,
    -	0x95, 0xb9, 0x97, 0x7c, 0x2d, 0xd2, 0x92, 0x41, 0xa1, 0x4d, 0xc7, 0xdc, 0x45, 0x5f, 0x2d, 0x41,
    -	0x66, 0x0a, 0x27, 0x85, 0xbb, 0xa8, 0x57, 0x9d, 0xc6, 0x2a, 0x75, 0x78, 0x90, 0x79, 0xb4, 0x5f,
    -	0x1d, 0x1e, 0x34, 0xd0, 0x14, 0xee, 0xff, 0x38, 0xf0, 0x9a, 0x81, 0x5d, 0xf1, 0x18, 0xb6, 0xb7,
    -	0xdd, 0xec, 0xf6, 0xb6, 0x7e, 0xf4, 0xed, 0xad, 0xaf, 0x15, 0x43, 0xb6, 0xba, 0xbf, 0x73, 0x60,
    -	0xda, 0xd0, 0x3f, 0x86, 0xa6, 0x06, 0x85, 0xbe, 0xef, 0x66, 0x54, 0x17, 0x25, 0x8c, 0x99, 0xb6,
    -	0x7d, 0x8b, 0xb7, 0x4d, 0x9c, 0xbd, 0x16, 0x7d, 0xf5, 0x80, 0xca, 0x3e, 0x87, 0x98, 0x1e, 0x8c,
    -	0xf1, 0x2b, 0xaf, 0x49, 0x31, 0x67, 0xc0, 0xac, 0x7c, 0x1e, 0x06, 0x35, 0x67, 0x40, 0xfe, 0x33,
    -	0x41, 0x29, 0x90, 0x17, 0x32, 0x07, 0x09, 0xb3, 0x97, 0x75, 0x19, 0xae, 0x35, 0x85, 0xcc, 0x12,
    -	0x8e, 0x9a, 0xc2, 0x6d, 0xc3, 0x6c, 0x96, 0xf9, 0x32, 0x6d, 0xf0, 0x50, 0xdb, 0x81, 0x9a, 0xb9,
    -	0x00, 0x55, 0x8f, 0x7f, 0xb5, 0xda, 0xf5, 0xf2, 0xaf, 0xa8, 0x2c, 0x2a, 0x04, 0x1a, 0x1a, 0xf7,
    -	0x0f, 0x1c, 0x38, 0x31, 0xa0, 0x31, 0x05, 0x86, 0xa9, 0x53, 0x63, 0x05, 0x86, 0xbc, 0x6c, 0x53,
    -	0xa7, 0x0d, 0x4f, 0x05, 0x73, 0x2c, 0xab, 0xb6, 0x2c, 0xc0, 0xa8, 0xf0, 0xee, 0xbf, 0x3b, 0x70,
    -	0x2c, 0xab, 0x6b, 0x42, 0xae, 0x00, 0x11, 0x8d, 0x59, 0x0e, 0x12, 0x3f, 0xda, 0xa1, 0x71, 0x8f,
    -	0xb5, 0x5c, 0x68, 0x7d, 0x46, 0x72, 0x22, 0x8b, 0x7d, 0x14, 0x38, 0xe0, 0x2b, 0xf2, 0x49, 0x5e,
    -	0xca, 0xa3, 0x7a, 0x5b, 0xcd, 0x94, 0x5b, 0x45, 0xce, 0x14, 0x33, 0x98, 0xf6, 0x09, 0x5a, 0x8b,
    -	0x44, 0x5b, 0xbe, 0xfb, 0xed, 0x11, 0xd0, 0x79, 0x2c, 0x1e, 0x36, 0x28, 0x28, 0xe8, 0x92, 0x79,
    -	0x6a, 0xa7, 0x7c, 0x88, 0xa7, 0x76, 0x46, 0x1e, 0x14, 0x23, 0x10, 0xef, 0xbe, 0x18, 0x5f, 0xd4,
    -	0x32, 0xfa, 0x1b, 0x06, 0x85, 0x36, 0x1d, 0xd3, 0xa4, 0x15, 0xec, 0x50, 0xf1, 0xd1, 0x58, 0x56,
    -	0x93, 0x55, 0x85, 0x40, 0x43, 0xc3, 0x34, 0xa9, 0x07, 0x8d, 0x86, 0x3c, 0x29, 0x6a, 0x4d, 0x58,
    -	0xef, 0x20, 0xc7, 0x30, 0x8a, 0xad, 0x28, 0xda, 0x96, 0xfe, 0x9f, 0xa6, 0xb8, 0x1c, 0x45, 0xdb,
    -	0xc8, 0x31, 0xcc, 0x63, 0x09, 0xa3, 0xb8, 0xed, 0xb5, 0x82, 0xf7, 0xd1, 0xba, 0x96, 0x22, 0xfd,
    -	0x3e, 0xed, 0xb1, 0x5c, 0xef, 0x27, 0xc1, 0x41, 0xdf, 0xb1, 0x19, 0xd8, 0x89, 0x69, 0x3d, 0xf0,
    -	0x53, 0x9b, 0x1b, 0x64, 0x67, 0xe0, 0x5a, 0x1f, 0x05, 0x0e, 0xf8, 0x8a, 0x2c, 0xc2, 0x31, 0x95,
    -	0x87, 0x54, 0xb5, 0x22, 0xc2, 0x19, 0xd4, 0x7e, 0x38, 0x66, 0xd1, 0x98, 0xa7, 0x67, 0xd6, 0xa6,
    -	0x2d, 0x2b, 0x76, 0xb8, 0x9b, 0x68, 0x59, 0x1b, 0x55, 0xc9, 0x83, 0x9a, 0xc2, 0xfd, 0xa3, 0x12,
    -	0xdb, 0x1d, 0x87, 0xdc, 0xe8, 0x7c, 0x6c, 0x41, 0xbe, 0xec, 0x8c, 0x1c, 0x39, 0xc0, 0x8c, 0x7c,
    -	0x0e, 0x26, 0xef, 0x24, 0x51, 0xa8, 0x03, 0x68, 0xa3, 0x43, 0x03, 0x68, 0x16, 0xd5, 0xe0, 0x00,
    -	0xda, 0xd8, 0x21, 0x03, 0x68, 0x7f, 0x39, 0x0a, 0xa7, 0x75, 0xea, 0x98, 0xa6, 0x77, 0xa3, 0x78,
    -	0x3b, 0x08, 0x9b, 0x3c, 0xdd, 0xfa, 0x45, 0x07, 0x26, 0xc5, 0xf4, 0x96, 0x77, 0xdf, 0x45, 0x7a,
    -	0xb1, 0x51, 0xd0, 0xf5, 0xa4, 0x8c, 0xb0, 0xf9, 0x0d, 0x4b, 0x50, 0xee, 0x21, 0x02, 0x1b, 0x85,
    -	0x19, 0x8d, 0xc8, 0x07, 0x00, 0xd4, 0x03, 0x4d, 0x8d, 0x82, 0x9e, 0xa9, 0x52, 0xfa, 0x21, 0x6d,
    -	0x18, 0x57, 0x72, 0x43, 0x0b, 0x41, 0x4b, 0x20, 0x79, 0xc5, 0x81, 0xb1, 0x96, 0xe8, 0x1b, 0x91,
    -	0x2b, 0x7a, 0xe9, 0x91, 0xf4, 0x8d, 0xdd, 0x2b, 0x7a, 0x5b, 0x96, 0xfd, 0x21, 0xe5, 0x13, 0x84,
    -	0xf1, 0x20, 0x6c, 0xb2, 0x61, 0x95, 0x31, 0xc7, 0x37, 0x0c, 0x2a, 0x55, 0x58, 0x8d, 0xbc, 0x7a,
    -	0xcd, 0x6b, 0x79, 0xa1, 0x4f, 0xe3, 0x15, 0x41, 0x6e, 0x3f, 0x93, 0xc3, 0x01, 0xa8, 0x18, 0xf5,
    -	0xdd, 0xbf, 0x1b, 0x3d, 0xc8, 0xfd, 0xbb, 0x33, 0xef, 0x80, 0x99, 0xbe, 0xc1, 0x3c, 0xd4, 0xab,
    -	0x04, 0x3f, 0x0b, 0x13, 0x0f, 0xf9, 0xa9, 0xfb, 0xe7, 0x63, 0x66, 0x8f, 0xb9, 0x1e, 0xd5, 0xc5,
    -	0x2d, 0xb0, 0xd8, 0x8c, 0xa8, 0x74, 0x15, 0x0b, 0x9c, 0x22, 0xd6, 0x53, 0x3b, 0x1a, 0x88, 0xb6,
    -	0x48, 0x36, 0x47, 0x3b, 0x5e, 0x4c, 0xc3, 0x47, 0x3d, 0x47, 0xd7, 0xb4, 0x10, 0xb4, 0x04, 0x92,
    -	0xad, 0x4c, 0x32, 0xf3, 0xe2, 0xd1, 0x93, 0x99, 0xcc, 0x7b, 0x1d, 0x78, 0x5b, 0xe7, 0xd3, 0x0e,
    -	0x4c, 0x87, 0x99, 0x99, 0x2b, 0x13, 0x5a, 0x1b, 0x8f, 0x62, 0x55, 0x88, 0xdb, 0xb7, 0x59, 0x18,
    -	0xe6, 0xe4, 0x0f, 0xda, 0x81, 0x46, 0x0f, 0xb9, 0x03, 0x99, 0xeb, 0xa4, 0x63, 0xc3, 0xae, 0x93,
    -	0x92, 0x50, 0x5f, 0x24, 0x1f, 0x2f, 0xfc, 0x22, 0x39, 0x0c, 0xb8, 0x44, 0x7e, 0x1b, 0xaa, 0x7e,
    -	0x4c, 0xbd, 0xf4, 0x21, 0xef, 0x14, 0xf3, 0xc7, 0xcd, 0x96, 0x14, 0x03, 0x34, 0xbc, 0xdc, 0xbf,
    -	0x29, 0xc3, 0x71, 0xd5, 0x23, 0x2a, 0xd1, 0xc3, 0xb6, 0x33, 0x21, 0xd7, 0xf8, 0xa2, 0x7a, 0x3b,
    -	0xbb, 0xac, 0x10, 0x68, 0x68, 0x98, 0xfb, 0xd4, 0x4d, 0xe8, 0x8d, 0x0e, 0x0d, 0x57, 0x83, 0xcd,
    -	0x84, 0xf7, 0xb8, 0x55, 0x2d, 0x76, 0xd3, 0xa0, 0xd0, 0xa6, 0x63, 0xbe, 0xb3, 0x70, 0x63, 0x93,
    -	0x7c, 0xde, 0x54, 0xba, 0xc7, 0xa8, 0xf0, 0xe4, 0x0b, 0x03, 0x5f, 0x84, 0x28, 0xa6, 0x62, 0xa0,
    -	0x2f, 0xbf, 0x75, 0xc8, 0xa7, 0x20, 0x5e, 0x75, 0xe0, 0xd8, 0x76, 0xa6, 0x54, 0x45, 0x99, 0xe4,
    -	0x23, 0x16, 0x40, 0x66, 0xeb, 0x5f, 0xcc, 0x14, 0xce, 0xc2, 0x13, 0xcc, 0x4b, 0x77, 0xff, 0xcb,
    -	0x01, 0xdb, 0x3c, 0x1d, 0xcc, 0x11, 0xb2, 0xde, 0xf8, 0x29, 0xed, 0xf3, 0xc6, 0x8f, 0xf2, 0x99,
    -	0xca, 0x07, 0xf3, 0xd1, 0x47, 0x0e, 0xe1, 0xa3, 0x8f, 0x0e, 0x75, 0xb2, 0x5e, 0x0b, 0xe5, 0x6e,
    -	0x50, 0x97, 0x6e, 0xb6, 0xc9, 0x5d, 0xad, 0x2c, 0x23, 0x83, 0xbb, 0x7f, 0x36, 0x6a, 0x8e, 0xd5,
    -	0x32, 0xd1, 0xfd, 0x23, 0xd1, 0xec, 0x86, 0xae, 0x67, 0x15, 0x2d, 0xbf, 0xde, 0x57, 0xcf, 0xfa,
    -	0xb6, 0xc3, 0xd7, 0x31, 0x88, 0x0e, 0x1a, 0x56, 0xce, 0x3a, 0xbe, 0x4f, 0x11, 0xc3, 0x1d, 0xa8,
    -	0xb0, 0x93, 0x08, 0x8f, 0x8f, 0x55, 0x32, 0x4a, 0x55, 0x2e, 0x4b, 0xf8, 0xfd, 0xbd, 0xb9, 0xb7,
    -	0x1e, 0x5e, 0x2d, 0xf5, 0x35, 0x6a, 0xfe, 0x24, 0x81, 0x2a, 0xfb, 0x9b, 0xd7, 0x5b, 0xc8, 0x33,
    -	0xce, 0x4d, 0x6d, 0x8b, 0x14, 0xa2, 0x90, 0x62, 0x0e, 0x23, 0x87, 0x84, 0x50, 0xe5, 0xaf, 0xd1,
    -	0x70, 0xa1, 0xe2, 0x28, 0xb4, 0xa6, 0xab, 0x1e, 0x14, 0xe2, 0xfe, 0xde, 0xdc, 0x0b, 0x87, 0x17,
    -	0xaa, 0x3f, 0x47, 0x23, 0xc2, 0xfd, 0x6e, 0xd9, 0xcc, 0x5d, 0x59, 0xc6, 0xfc, 0x23, 0x31, 0x77,
    -	0x9f, 0xcf, 0xcd, 0xdd, 0x73, 0x7d, 0x73, 0x77, 0xda, 0xbc, 0xd8, 0x92, 0x99, 0x8d, 0x8f, 0x7b,
    -	0x83, 0xdd, 0xff, 0xd8, 0xcd, 0x3d, 0x8b, 0x97, 0xbb, 0x41, 0x4c, 0x93, 0xb5, 0xb8, 0x1b, 0x06,
    -	0x61, 0x93, 0x4f, 0xc7, 0x8a, 0xed, 0x59, 0x64, 0xd0, 0x98, 0xa7, 0x77, 0xbf, 0xc4, 0xd3, 0x93,
    -	0x56, 0xe9, 0x16, 0x1b, 0xe5, 0x16, 0x7f, 0xd0, 0x47, 0x14, 0x8f, 0xea, 0x51, 0x16, 0xaf, 0xf8,
    -	0x08, 0x1c, 0xb9, 0x0b, 0xe3, 0x9b, 0xe2, 0x51, 0x81, 0x62, 0xee, 0x12, 0xc9, 0x17, 0x0a, 0xf8,
    -	0xad, 0x4d, 0xf5, 0x5c, 0xc1, 0x7d, 0xf3, 0x27, 0x2a, 0x69, 0xee, 0x6f, 0x95, 0xe1, 0x58, 0xee,
    -	0xb9, 0x19, 0x76, 0x3e, 0x57, 0x6f, 0x0b, 0xe5, 0x83, 0xe9, 0xfa, 0x0d, 0x5d, 0x4d, 0x41, 0xde,
    -	0x0b, 0x50, 0xa7, 0x9d, 0x56, 0xd4, 0xe3, 0x8e, 0xcb, 0xc8, 0xa1, 0x1d, 0x17, 0xed, 0xeb, 0x2e,
    -	0x6b, 0x2e, 0x68, 0x71, 0x94, 0x15, 0xb3, 0xa3, 0xe2, 0xc9, 0x84, 0x6c, 0xc5, 0xac, 0x75, 0xa5,
    -	0x6e, 0xec, 0xf1, 0x5e, 0xa9, 0x0b, 0xe0, 0x98, 0x50, 0x51, 0x17, 0x48, 0x3d, 0x44, 0x1d, 0xd4,
    -	0x09, 0x36, 0xa3, 0x96, 0xb3, 0x6c, 0x30, 0xcf, 0xd7, 0xfd, 0x54, 0x89, 0xb9, 0x6f, 0xa2, 0xb3,
    -	0xaf, 0xa9, 0x58, 0xf6, 0xeb, 0x61, 0xcc, 0xeb, 0xa6, 0x5b, 0x51, 0xdf, 0x23, 0x0f, 0x8b, 0x1c,
    -	0x8a, 0x12, 0x4b, 0x56, 0x61, 0xa4, 0xee, 0xa5, 0xea, 0x0d, 0xf8, 0xc3, 0x28, 0x67, 0x02, 0x57,
    -	0x5e, 0x4a, 0x91, 0x73, 0x21, 0x4f, 0xc1, 0x48, 0xea, 0x35, 0x33, 0xaf, 0x4f, 0x6e, 0x78, 0xcd,
    -	0x04, 0x39, 0xd4, 0xde, 0x5d, 0x46, 0xf6, 0xd9, 0x5d, 0x5e, 0xb0, 0xfe, 0x3b, 0x81, 0x95, 0x24,
    -	0xe9, 0xff, 0x8f, 0x02, 0xa2, 0x86, 0x3f, 0x43, 0xeb, 0xfe, 0x14, 0x4c, 0xda, 0xff, 0x71, 0xe0,
    -	0x40, 0x57, 0x80, 0xdc, 0x7f, 0x1d, 0x81, 0xa9, 0x4c, 0x11, 0x5d, 0x66, 0x96, 0x3b, 0xfb, 0xce,
    -	0x72, 0x9e, 0xfe, 0xea, 0x86, 0x54, 0x96, 0x48, 0x5a, 0xe9, 0xaf, 0x6e, 0x48, 0x51, 0xe0, 0xd8,
    -	0xa8, 0xd4, 0xe3, 0x1e, 0x76, 0x43, 0x19, 0x44, 0xd7, 0xa3, 0xb2, 0xcc, 0xa1, 0x28, 0xb1, 0xec,
    -	0x00, 0x3b, 0x99, 0x70, 0xa3, 0x28, 0x6c, 0x84, 0x5c, 0x35, 0x57, 0x8a, 0x78, 0x18, 0x4b, 0x16,
    -	0x8c, 0xf2, 0x03, 0xbd, 0x0d, 0xc1, 0x8c, 0x44, 0xf2, 0x51, 0xc7, 0x7e, 0x12, 0x6c, 0xac, 0x88,
    -	0xe4, 0x4f, 0xbe, 0x46, 0x51, 0xac, 0xa0, 0x07, 0xbf, 0x0c, 0x96, 0xe8, 0x05, 0x3c, 0xfe, 0x68,
    -	0x16, 0x30, 0x0c, 0x58, 0xbc, 0x6f, 0x84, 0x6a, 0xdb, 0x0b, 0x83, 0x06, 0x4d, 0x52, 0xf1, 0xdf,
    -	0x42, 0xaa, 0xe2, 0xf4, 0x74, 0x4d, 0x01, 0xd1, 0xe0, 0xf9, 0xff, 0xe4, 0xe1, 0x0d, 0x13, 0x87,
    -	0x98, 0xaa, 0xf5, 0x3f, 0x79, 0x0c, 0x18, 0x6d, 0x1a, 0xf7, 0x8f, 0x1d, 0x38, 0x35, 0xb0, 0x33,
    -	0x7e, 0x78, 0xa3, 0x95, 0xee, 0x9f, 0x94, 0xe0, 0xc4, 0x80, 0x22, 0x53, 0xd2, 0x7b, 0x64, 0x2f,
    -	0xc7, 0xc9, 0x2a, 0xd6, 0xa9, 0xa1, 0x73, 0xe3, 0x70, 0xdb, 0x90, 0xd9, 0x0a, 0xca, 0x8f, 0x75,
    -	0x2b, 0x70, 0xbf, 0x54, 0x02, 0xeb, 0x8d, 0x43, 0xf2, 0x41, 0xbb, 0x9e, 0xda, 0x29, 0xaa, 0xf6,
    -	0x57, 0x30, 0xd7, 0xf5, 0xd8, 0xa2, 0xd7, 0x06, 0x95, 0x67, 0xe7, 0xe7, 0x6b, 0x69, 0xff, 0xf9,
    -	0x4a, 0x5a, 0xaa, 0x70, 0xbd, 0x5c, 0x7c, 0xe1, 0x7a, 0xb5, 0xaf, 0x68, 0xfd, 0x37, 0x1c, 0x31,
    -	0xd3, 0x72, 0x4d, 0x32, 0x16, 0xd6, 0x79, 0x80, 0x85, 0x7d, 0x13, 0x54, 0x12, 0xda, 0x6a, 0x30,
    -	0xcf, 0x4e, 0x5a, 0x62, 0x3d, 0x27, 0xd6, 0x25, 0x1c, 0x35, 0x05, 0xbf, 0xd2, 0xda, 0x6a, 0x45,
    -	0x77, 0x2f, 0xb4, 0x3b, 0x69, 0x4f, 0xda, 0x64, 0x73, 0xa5, 0x55, 0x63, 0xd0, 0xa2, 0x72, 0xff,
    -	0xdb, 0x11, 0xc3, 0x29, 0x7d, 0xf4, 0xe7, 0x73, 0x57, 0x0d, 0x0f, 0xee, 0xde, 0xfe, 0x32, 0x80,
    -	0xaf, 0x2f, 0xff, 0x17, 0xf3, 0xf4, 0xa1, 0x79, 0x4c, 0xc0, 0x7e, 0x8f, 0x4f, 0xc1, 0xd0, 0x92,
    -	0x97, 0x59, 0x3c, 0xe5, 0xfd, 0x16, 0x8f, 0xfb, 0x1f, 0x0e, 0x64, 0x36, 0x0b, 0xd2, 0x81, 0x51,
    -	0xa6, 0x41, 0xaf, 0x98, 0xa7, 0x0a, 0x6c, 0xd6, 0x6c, 0x61, 0xc9, 0x69, 0xc1, 0xff, 0x44, 0x21,
    -	0x88, 0xb4, 0xa4, 0x77, 0x5e, 0x2a, 0xe2, 0x39, 0x0d, 0x5b, 0x20, 0xf3, 0xef, 0xe5, 0xff, 0x5f,
    -	0xd0, 0x9e, 0xbe, 0xfb, 0x3c, 0xcc, 0xf4, 0x29, 0xc5, 0x2f, 0x1f, 0x45, 0xea, 0x7d, 0x06, 0x6b,
    -	0x06, 0xf2, 0xab, 0x90, 0x28, 0x70, 0xcc, 0xc1, 0x3f, 0x9e, 0x67, 0x4f, 0x3e, 0xef, 0xc0, 0x4c,
    -	0x92, 0xe7, 0xf7, 0xa8, 0xfa, 0x4e, 0x47, 0xae, 0xfa, 0x50, 0xd8, 0xaf, 0x84, 0xfb, 0x57, 0xd2,
    -	0x3c, 0x89, 0xff, 0x57, 0xa5, 0x37, 0x17, 0x67, 0xe8, 0xe6, 0xc2, 0x96, 0x98, 0xbf, 0x45, 0xeb,
    -	0xdd, 0x56, 0x5f, 0x29, 0xcd, 0xba, 0x84, 0xa3, 0xa6, 0xc8, 0x3c, 0x81, 0x56, 0xde, 0xf7, 0x09,
    -	0xb4, 0xe7, 0x60, 0xd2, 0x7e, 0x83, 0x84, 0x87, 0xd0, 0x64, 0xf2, 0xc1, 0x7e, 0xae, 0x04, 0x33,
    -	0x54, 0xb9, 0x27, 0xb4, 0x46, 0xf7, 0x7d, 0x42, 0xeb, 0x19, 0xa8, 0xc8, 0xe7, 0xa0, 0x54, 0x7c,
    -	0x57, 0xd4, 0xe9, 0x48, 0x18, 0x6a, 0x2c, 0x33, 0x10, 0x6d, 0x2f, 0xec, 0x7a, 0x2d, 0xd6, 0x43,
    -	0xb2, 0x7c, 0x4f, 0xaf, 0xac, 0x6b, 0x1a, 0x83, 0x16, 0x95, 0xfb, 0x2f, 0x0e, 0xe4, 0xdf, 0x08,
    -	0xca, 0x14, 0x01, 0x3a, 0xfb, 0x16, 0x01, 0x66, 0x0b, 0x9c, 0x4a, 0x07, 0x2a, 0x70, 0xb2, 0x6b,
    -	0x8f, 0xca, 0x0f, 0xac, 0x3d, 0x7a, 0x9d, 0xb9, 0x40, 0x2e, 0x8a, 0x94, 0x26, 0x06, 0x5d, 0x1e,
    -	0x27, 0x2e, 0x8c, 0xf9, 0x9e, 0xae, 0xb1, 0x9e, 0x14, 0x8e, 0xd2, 0xd2, 0x22, 0x27, 0x92, 0x98,
    -	0xda, 0xfc, 0x57, 0xbf, 0x73, 0xf6, 0x89, 0xaf, 0x7d, 0xe7, 0xec, 0x13, 0xdf, 0xfc, 0xce, 0xd9,
    -	0x27, 0x3e, 0x7c, 0xef, 0xac, 0xf3, 0xd5, 0x7b, 0x67, 0x9d, 0xaf, 0xdd, 0x3b, 0xeb, 0x7c, 0xf3,
    -	0xde, 0x59, 0xe7, 0xdb, 0xf7, 0xce, 0x3a, 0x9f, 0xfe, 0xa7, 0xb3, 0x4f, 0xbc, 0xab, 0xa2, 0xe6,
    -	0xea, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0x0b, 0x3e, 0x13, 0x50, 0xfd, 0x74, 0x00, 0x00,
    +	// 6715 bytes of a gzipped FileDescriptorProto
    +	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x5d, 0x6c, 0x24, 0xd9,
    +	0x55, 0xf0, 0x56, 0xb7, 0x7f, 0xba, 0x8f, 0x7f, 0x66, 0x7c, 0x67, 0x76, 0xd6, 0xf1, 0xb7, 0x19,
    +	0x8f, 0x6a, 0x95, 0x64, 0xbf, 0x2f, 0x89, 0xfd, 0xed, 0xb0, 0x84, 0x25, 0x1b, 0x36, 0xb8, 0x6d,
    +	0xcf, 0x8c, 0x67, 0x3c, 0xb6, 0xe7, 0xd8, 0x33, 0x43, 0x7e, 0x08, 0x5b, 0xae, 0xbe, 0xdd, 0x5d,
    +	0xe3, 0xee, 0xaa, 0xde, 0xaa, 0x6a, 0x8f, 0x3b, 0x21, 0x7f, 0x28, 0x90, 0x15, 0xf9, 0xd9, 0x28,
    +	0xc9, 0x43, 0x22, 0x21, 0x08, 0x3f, 0x42, 0xe2, 0x21, 0x02, 0x9e, 0x00, 0x21, 0x1e, 0xc8, 0x53,
    +	0x10, 0x12, 0x44, 0x02, 0x25, 0x81, 0x08, 0x93, 0x0c, 0x41, 0x01, 0x24, 0x40, 0x40, 0x5e, 0x98,
    +	0x27, 0x74, 0x7f, 0xea, 0xde, 0x5b, 0xd5, 0xdd, 0x63, 0x7b, 0xba, 0x66, 0x12, 0x45, 0xbc, 0x75,
    +	0x9d, 0x73, 0xee, 0x39, 0xe7, 0xfe, 0x9d, 0x7b, 0xee, 0xb9, 0xe7, 0xde, 0x86, 0xf5, 0xba, 0x17,
    +	0x37, 0x3a, 0xbb, 0x0b, 0x6e, 0xd0, 0x5a, 0x74, 0xc2, 0x7a, 0xd0, 0x0e, 0x83, 0x3b, 0xfc, 0xc7,
    +	0x5b, 0xdd, 0xea, 0xe2, 0xfe, 0xc5, 0xc5, 0xf6, 0x5e, 0x7d, 0xd1, 0x69, 0x7b, 0xd1, 0xa2, 0xd3,
    +	0x6e, 0x37, 0x3d, 0xd7, 0x89, 0xbd, 0xc0, 0x5f, 0xdc, 0x7f, 0xce, 0x69, 0xb6, 0x1b, 0xce, 0x73,
    +	0x8b, 0x75, 0xea, 0xd3, 0xd0, 0x89, 0x69, 0x75, 0xa1, 0x1d, 0x06, 0x71, 0x40, 0xde, 0xa1, 0xb9,
    +	0x2d, 0x24, 0xdc, 0xf8, 0x8f, 0x9f, 0x73, 0xab, 0x0b, 0xfb, 0x17, 0x17, 0xda, 0x7b, 0xf5, 0x05,
    +	0xc6, 0x6d, 0xc1, 0xe0, 0xb6, 0x90, 0x70, 0x9b, 0x7b, 0xab, 0xa1, 0x4b, 0x3d, 0xa8, 0x07, 0x8b,
    +	0x9c, 0xe9, 0x6e, 0xa7, 0xc6, 0xbf, 0xf8, 0x07, 0xff, 0x25, 0x84, 0xcd, 0xd9, 0x7b, 0x2f, 0x44,
    +	0x0b, 0x5e, 0xc0, 0xd4, 0x5b, 0x74, 0x83, 0x90, 0x2e, 0xee, 0xf7, 0x28, 0x34, 0xf7, 0xbc, 0xa6,
    +	0x69, 0x39, 0x6e, 0xc3, 0xf3, 0x69, 0xd8, 0xd5, 0x75, 0x6a, 0xd1, 0xd8, 0xe9, 0x57, 0x6a, 0x71,
    +	0x50, 0xa9, 0xb0, 0xe3, 0xc7, 0x5e, 0x8b, 0xf6, 0x14, 0x78, 0xdb, 0x51, 0x05, 0x22, 0xb7, 0x41,
    +	0x5b, 0x4e, 0xb6, 0x9c, 0xfd, 0x0a, 0x4c, 0x2d, 0xdd, 0xde, 0x5e, 0xea, 0xc4, 0x8d, 0xe5, 0xc0,
    +	0xaf, 0x79, 0x75, 0xf2, 0xe3, 0x30, 0xe1, 0x36, 0x3b, 0x51, 0x4c, 0xc3, 0x0d, 0xa7, 0x45, 0x67,
    +	0xad, 0x0b, 0xd6, 0xb3, 0xe5, 0xca, 0x99, 0xaf, 0x1e, 0xce, 0x3f, 0x71, 0xef, 0x70, 0x7e, 0x62,
    +	0x59, 0xa3, 0xd0, 0xa4, 0x23, 0xff, 0x17, 0xc6, 0xc3, 0xa0, 0x49, 0x97, 0x70, 0x63, 0xb6, 0xc0,
    +	0x8b, 0x9c, 0x92, 0x45, 0xc6, 0x51, 0x80, 0x31, 0xc1, 0xdb, 0x5f, 0x2f, 0x00, 0x2c, 0xb5, 0xdb,
    +	0x5b, 0x61, 0x70, 0x87, 0xba, 0x31, 0x79, 0x19, 0x4a, 0xac, 0x15, 0xaa, 0x4e, 0xec, 0x70, 0x69,
    +	0x13, 0x17, 0xff, 0xff, 0x82, 0xa8, 0xcc, 0x82, 0x59, 0x19, 0xdd, 0x73, 0x8c, 0x7a, 0x61, 0xff,
    +	0xb9, 0x85, 0xcd, 0x5d, 0x56, 0xfe, 0x3a, 0x8d, 0x9d, 0x0a, 0x91, 0xc2, 0x40, 0xc3, 0x50, 0x71,
    +	0x25, 0x3e, 0x8c, 0x44, 0x6d, 0xea, 0x72, 0xc5, 0x26, 0x2e, 0xae, 0x2f, 0x0c, 0x33, 0x44, 0x16,
    +	0xb4, 0xe6, 0xdb, 0x6d, 0xea, 0x56, 0x26, 0xa5, 0xe4, 0x11, 0xf6, 0x85, 0x5c, 0x0e, 0xd9, 0x87,
    +	0xb1, 0x28, 0x76, 0xe2, 0x4e, 0x34, 0x5b, 0xe4, 0x12, 0x37, 0x72, 0x93, 0xc8, 0xb9, 0x56, 0xa6,
    +	0xa5, 0xcc, 0x31, 0xf1, 0x8d, 0x52, 0x9a, 0xfd, 0x77, 0x16, 0x4c, 0x6b, 0xe2, 0x75, 0x2f, 0x8a,
    +	0xc9, 0x7b, 0x7b, 0x1a, 0x77, 0xe1, 0x78, 0x8d, 0xcb, 0x4a, 0xf3, 0xa6, 0x3d, 0x2d, 0x85, 0x95,
    +	0x12, 0x88, 0xd1, 0xb0, 0x2d, 0x18, 0xf5, 0x62, 0xda, 0x8a, 0x66, 0x0b, 0x17, 0x8a, 0xcf, 0x4e,
    +	0x5c, 0xbc, 0x92, 0x57, 0x3d, 0x2b, 0x53, 0x52, 0xe8, 0xe8, 0x1a, 0x63, 0x8f, 0x42, 0x8a, 0xfd,
    +	0x7d, 0x30, 0xeb, 0xc7, 0x1a, 0x9c, 0x3c, 0x07, 0x13, 0x51, 0xd0, 0x09, 0x5d, 0x8a, 0xb4, 0x1d,
    +	0x44, 0xb3, 0xd6, 0x85, 0x22, 0x1b, 0x7a, 0x6c, 0xa4, 0x6e, 0x6b, 0x30, 0x9a, 0x34, 0xe4, 0xd3,
    +	0x16, 0x4c, 0x56, 0x69, 0x14, 0x7b, 0x3e, 0x97, 0x9f, 0x28, 0xbf, 0x33, 0xb4, 0xf2, 0x09, 0x70,
    +	0x45, 0x33, 0xaf, 0x9c, 0x95, 0x15, 0x99, 0x34, 0x80, 0x11, 0xa6, 0xe4, 0xb3, 0x19, 0x57, 0xa5,
    +	0x91, 0x1b, 0x7a, 0x6d, 0xf6, 0xcd, 0xc7, 0x8c, 0x31, 0xe3, 0x56, 0x34, 0x0a, 0x4d, 0x3a, 0xe2,
    +	0xc3, 0x28, 0x9b, 0x51, 0xd1, 0xec, 0x08, 0xd7, 0x7f, 0x6d, 0x38, 0xfd, 0x65, 0xa3, 0xb2, 0xc9,
    +	0xaa, 0x5b, 0x9f, 0x7d, 0x45, 0x28, 0xc4, 0x90, 0x4f, 0x59, 0x30, 0x2b, 0x67, 0x3c, 0x52, 0xd1,
    +	0xa0, 0xb7, 0x1b, 0x5e, 0x4c, 0x9b, 0x5e, 0x14, 0xcf, 0x8e, 0x72, 0x1d, 0x16, 0x8f, 0x37, 0xb6,
    +	0x2e, 0x87, 0x41, 0xa7, 0x7d, 0xcd, 0xf3, 0xab, 0x95, 0x0b, 0x52, 0xd2, 0xec, 0xf2, 0x00, 0xc6,
    +	0x38, 0x50, 0x24, 0xf9, 0x9c, 0x05, 0x73, 0xbe, 0xd3, 0xa2, 0x51, 0xdb, 0x61, 0x5d, 0x2b, 0xd0,
    +	0x95, 0xa6, 0xe3, 0xee, 0x71, 0x8d, 0xc6, 0x1e, 0x4e, 0x23, 0x5b, 0x6a, 0x34, 0xb7, 0x31, 0x90,
    +	0x35, 0x3e, 0x40, 0x2c, 0xf9, 0x4d, 0x0b, 0x66, 0x82, 0xb0, 0xdd, 0x70, 0x7c, 0x5a, 0x4d, 0xb0,
    +	0xd1, 0xec, 0x38, 0x9f, 0x7a, 0xef, 0x1b, 0xae, 0x8b, 0x36, 0xb3, 0x6c, 0xaf, 0x07, 0xbe, 0x17,
    +	0x07, 0xe1, 0x36, 0x8d, 0x63, 0xcf, 0xaf, 0x47, 0x95, 0x27, 0xef, 0x1d, 0xce, 0xcf, 0xf4, 0x50,
    +	0x61, 0xaf, 0x3e, 0xe4, 0x03, 0x30, 0x11, 0x75, 0x7d, 0xf7, 0xb6, 0xe7, 0x57, 0x83, 0xbb, 0xd1,
    +	0x6c, 0x29, 0x8f, 0xe9, 0xbb, 0xad, 0x18, 0xca, 0x09, 0xa8, 0x05, 0xa0, 0x29, 0xad, 0x7f, 0xc7,
    +	0xe9, 0xa1, 0x54, 0xce, 0xbb, 0xe3, 0xf4, 0x60, 0x7a, 0x80, 0x58, 0xf2, 0x71, 0x0b, 0xa6, 0x22,
    +	0xaf, 0xee, 0x3b, 0x71, 0x27, 0xa4, 0xd7, 0x68, 0x37, 0x9a, 0x05, 0xae, 0xc8, 0xd5, 0x21, 0x5b,
    +	0xc5, 0x60, 0x59, 0x79, 0x52, 0xea, 0x38, 0x65, 0x42, 0x23, 0x4c, 0xcb, 0xed, 0x37, 0xd1, 0xf4,
    +	0xb0, 0x9e, 0xc8, 0x77, 0xa2, 0xe9, 0x41, 0x3d, 0x50, 0xa4, 0xfd, 0x67, 0x05, 0x38, 0x9d, 0x5d,
    +	0x83, 0xc8, 0x6f, 0x5b, 0x70, 0xea, 0xce, 0xdd, 0x78, 0x27, 0xd8, 0xa3, 0x7e, 0x54, 0xe9, 0x32,
    +	0x4b, 0xc1, 0xad, 0xef, 0xc4, 0x45, 0x37, 0xdf, 0xd5, 0x6e, 0xe1, 0x6a, 0x5a, 0xca, 0xaa, 0x1f,
    +	0x87, 0xdd, 0xca, 0x53, 0xb2, 0x3e, 0xa7, 0xae, 0xde, 0xde, 0x31, 0xb1, 0x98, 0x55, 0x6a, 0xee,
    +	0x13, 0x16, 0x9c, 0xed, 0xc7, 0x82, 0x9c, 0x86, 0xe2, 0x1e, 0xed, 0x0a, 0x07, 0x07, 0xd9, 0x4f,
    +	0xf2, 0xb3, 0x30, 0xba, 0xef, 0x34, 0x3b, 0x54, 0x3a, 0x0a, 0x97, 0x87, 0xab, 0x88, 0xd2, 0x0c,
    +	0x05, 0xd7, 0xb7, 0x17, 0x5e, 0xb0, 0xec, 0xbf, 0x2c, 0xc2, 0x84, 0xb1, 0x54, 0x3c, 0x06, 0xe7,
    +	0x27, 0x48, 0x39, 0x3f, 0xd7, 0x73, 0x5b, 0xe5, 0x06, 0x7a, 0x3f, 0x77, 0x33, 0xde, 0xcf, 0x66,
    +	0x7e, 0x22, 0x1f, 0xe8, 0xfe, 0x90, 0x18, 0xca, 0x41, 0x9b, 0x39, 0xb7, 0x6c, 0x15, 0x1d, 0xc9,
    +	0xa3, 0x0b, 0x37, 0x13, 0x76, 0x95, 0xa9, 0x7b, 0x87, 0xf3, 0x65, 0xf5, 0x89, 0x5a, 0x90, 0xfd,
    +	0x0d, 0x0b, 0xce, 0x1a, 0x3a, 0x2e, 0x07, 0x7e, 0xd5, 0xe3, 0x5d, 0x7b, 0x01, 0x46, 0xe2, 0x6e,
    +	0x3b, 0xf1, 0xa0, 0x55, 0x4b, 0xed, 0x74, 0xdb, 0x14, 0x39, 0x86, 0xf9, 0xcc, 0x2d, 0x1a, 0x45,
    +	0x4e, 0x9d, 0x66, 0x7d, 0xe6, 0xeb, 0x02, 0x8c, 0x09, 0x9e, 0x84, 0x40, 0x9a, 0x4e, 0x14, 0xef,
    +	0x84, 0x8e, 0x1f, 0x71, 0xf6, 0x3b, 0x5e, 0x8b, 0xca, 0x06, 0xfe, 0x7f, 0xc7, 0x1b, 0x31, 0xac,
    +	0x44, 0xe5, 0xdc, 0xbd, 0xc3, 0x79, 0xb2, 0xde, 0xc3, 0x09, 0xfb, 0x70, 0xb7, 0x3f, 0x67, 0xc1,
    +	0xb9, 0xfe, 0x6e, 0x0d, 0x79, 0x23, 0x8c, 0x45, 0x34, 0xdc, 0xa7, 0xa1, 0xac, 0x9d, 0xee, 0x12,
    +	0x0e, 0x45, 0x89, 0x25, 0x8b, 0x50, 0x56, 0x26, 0x57, 0xd6, 0x71, 0x46, 0x92, 0x96, 0xb5, 0x9d,
    +	0xd6, 0x34, 0xac, 0xd1, 0xd8, 0x87, 0x74, 0x82, 0x54, 0xa3, 0xf1, 0xfd, 0x06, 0xc7, 0xd8, 0x7f,
    +	0x6f, 0xc1, 0x29, 0x43, 0xab, 0xc7, 0xe0, 0xe5, 0xfa, 0x69, 0x2f, 0x77, 0x2d, 0xb7, 0xf1, 0x3c,
    +	0xc0, 0xcd, 0xfd, 0xca, 0x18, 0xcc, 0x98, 0xa3, 0x9e, 0x9b, 0x63, 0xbe, 0xc1, 0xa2, 0xed, 0xe0,
    +	0x26, 0xae, 0xcb, 0x36, 0xd7, 0x1b, 0x2c, 0x01, 0xc6, 0x04, 0xcf, 0x1a, 0xb1, 0xed, 0xc4, 0x0d,
    +	0xd9, 0xe0, 0xaa, 0x11, 0xb7, 0x9c, 0xb8, 0x81, 0x1c, 0x43, 0x5e, 0x82, 0xe9, 0xd8, 0x09, 0xeb,
    +	0x34, 0x46, 0xba, 0xef, 0x45, 0xc9, 0x7c, 0x29, 0x57, 0xce, 0x49, 0xda, 0xe9, 0x9d, 0x14, 0x16,
    +	0x33, 0xd4, 0xe4, 0x15, 0x18, 0x69, 0xd0, 0x66, 0x4b, 0xfa, 0x35, 0xdb, 0xf9, 0xcd, 0x70, 0x5e,
    +	0xd7, 0x2b, 0xb4, 0xd9, 0xaa, 0x94, 0x98, 0xca, 0xec, 0x17, 0x72, 0x51, 0xe4, 0x17, 0x2d, 0x28,
    +	0xef, 0x75, 0xa2, 0x38, 0x68, 0x79, 0xef, 0xa7, 0xb3, 0x25, 0x2e, 0xf8, 0x67, 0x72, 0x16, 0x7c,
    +	0x2d, 0xe1, 0x2f, 0xe6, 0xbb, 0xfa, 0x44, 0x2d, 0x99, 0x7c, 0x10, 0xc6, 0xf7, 0xa2, 0xc0, 0xf7,
    +	0x29, 0xf3, 0x54, 0x98, 0x12, 0xb7, 0xf2, 0x56, 0x42, 0x70, 0xaf, 0x4c, 0xb0, 0xbe, 0x95, 0x1f,
    +	0x98, 0xc8, 0xe4, 0xcd, 0x50, 0xf5, 0x42, 0xea, 0xc6, 0x41, 0xd8, 0x9d, 0x85, 0x47, 0xd2, 0x0c,
    +	0x2b, 0x09, 0x7f, 0xd1, 0x0c, 0xea, 0x13, 0xb5, 0x64, 0xd2, 0x85, 0xb1, 0x76, 0xb3, 0x53, 0xf7,
    +	0xfc, 0xd9, 0x09, 0xae, 0xc3, 0xcd, 0x9c, 0x75, 0xd8, 0xe2, 0xcc, 0x2b, 0xc0, 0x8c, 0x8a, 0xf8,
    +	0x8d, 0x52, 0x20, 0x79, 0x06, 0x46, 0xdd, 0x86, 0x13, 0xc6, 0xb3, 0x93, 0x7c, 0xcc, 0xaa, 0x49,
    +	0xb4, 0xcc, 0x80, 0x28, 0x70, 0xf6, 0xaf, 0x17, 0x60, 0x6e, 0x70, 0xc5, 0xc4, 0x6c, 0x72, 0x3b,
    +	0x61, 0x24, 0xec, 0x73, 0xc9, 0x9c, 0x4d, 0x1c, 0x8c, 0x09, 0x9e, 0x7c, 0xd4, 0x82, 0xf1, 0x3b,
    +	0xb2, 0xc7, 0x0b, 0x8f, 0xa4, 0xc7, 0xaf, 0xca, 0x1e, 0x57, 0x3a, 0x5c, 0x4d, 0x7a, 0x5d, 0xca,
    +	0x65, 0xea, 0xd2, 0x03, 0xb7, 0xd9, 0xa9, 0x26, 0x96, 0x51, 0x91, 0xae, 0x0a, 0x30, 0x26, 0x78,
    +	0x46, 0xea, 0xf9, 0x82, 0x74, 0x24, 0x4d, 0xba, 0xe6, 0x4b, 0x52, 0x89, 0xb7, 0xbf, 0x5b, 0x84,
    +	0x27, 0xfb, 0x4e, 0x3e, 0xb2, 0x00, 0xc0, 0x7d, 0x96, 0x4b, 0x1e, 0xdb, 0x60, 0x8a, 0x5d, 0xf5,
    +	0x34, 0x73, 0x31, 0x6e, 0x29, 0x28, 0x1a, 0x14, 0xe4, 0xc3, 0x00, 0x6d, 0x27, 0x74, 0x5a, 0x34,
    +	0xa6, 0x61, 0x62, 0x27, 0xaf, 0x0d, 0xd7, 0x4a, 0x4c, 0x8f, 0xad, 0x84, 0xa7, 0xf6, 0x71, 0x14,
    +	0x28, 0x42, 0x43, 0x24, 0xdb, 0x43, 0x87, 0xb4, 0x49, 0x9d, 0x88, 0x6e, 0xe8, 0xe5, 0x43, 0xed,
    +	0xa1, 0x51, 0xa3, 0xd0, 0xa4, 0x63, 0xeb, 0x18, 0xaf, 0x45, 0x24, 0xdb, 0x4a, 0xad, 0x63, 0xbc,
    +	0x9e, 0x11, 0x4a, 0x2c, 0x79, 0xcd, 0x82, 0xe9, 0x9a, 0xd7, 0xa4, 0x5a, 0xba, 0xdc, 0xf1, 0x6e,
    +	0x0e, 0x5f, 0xc9, 0x4b, 0x26, 0x5f, 0x6d, 0x81, 0x53, 0xe0, 0x08, 0x33, 0xe2, 0x59, 0x37, 0xef,
    +	0xd3, 0x90, 0x9b, 0xee, 0xb1, 0x74, 0x37, 0xdf, 0x12, 0x60, 0x4c, 0xf0, 0xf6, 0x17, 0x0b, 0x30,
    +	0x3b, 0x68, 0xcc, 0x91, 0x88, 0x8d, 0xac, 0xf8, 0x96, 0x13, 0x46, 0xd2, 0x7d, 0x1f, 0x72, 0x17,
    +	0x28, 0xf9, 0xde, 0x72, 0x42, 0x73, 0x8c, 0x72, 0x01, 0x98, 0x48, 0x22, 0x77, 0x60, 0x24, 0x6e,
    +	0x3a, 0x39, 0x85, 0x8d, 0x0c, 0x89, 0xda, 0xc9, 0x5a, 0x5f, 0x8a, 0x90, 0xcb, 0x20, 0x4f, 0xc3,
    +	0x48, 0xd3, 0xdb, 0x65, 0xce, 0x28, 0x1b, 0xc4, 0x7c, 0x55, 0x59, 0xf7, 0x76, 0x23, 0xe4, 0x50,
    +	0xfb, 0xeb, 0x56, 0x9f, 0xb6, 0x91, 0x46, 0x97, 0x0d, 0x2a, 0xea, 0xef, 0x7b, 0x61, 0xe0, 0xb7,
    +	0xa8, 0x1f, 0x67, 0x43, 0xa1, 0xab, 0x1a, 0x85, 0x26, 0x1d, 0xf9, 0x05, 0xab, 0xcf, 0x6c, 0x18,
    +	0x32, 0x06, 0x28, 0x55, 0x3a, 0xf6, 0x84, 0xb0, 0xff, 0x7d, 0xac, 0x8f, 0xfd, 0x53, 0x0b, 0x1a,
    +	0xb9, 0x08, 0xc0, 0xbc, 0xa9, 0xad, 0x90, 0xd6, 0xbc, 0x03, 0x59, 0x33, 0xc5, 0x72, 0x43, 0x61,
    +	0xd0, 0xa0, 0x4a, 0xca, 0x6c, 0x77, 0x6a, 0xac, 0x4c, 0xa1, 0xb7, 0x8c, 0xc0, 0xa0, 0x41, 0x45,
    +	0x9e, 0x87, 0x31, 0xaf, 0xe5, 0xd4, 0x69, 0xd2, 0xfe, 0x4f, 0xb3, 0xc9, 0xb5, 0xc6, 0x21, 0xf7,
    +	0x0f, 0xe7, 0xa7, 0x95, 0x42, 0x1c, 0x84, 0x92, 0x96, 0xfc, 0x96, 0x05, 0x93, 0x6e, 0xd0, 0x6a,
    +	0x05, 0xfe, 0xba, 0xb3, 0x4b, 0x9b, 0x49, 0x88, 0xeb, 0xce, 0xa3, 0x5a, 0xee, 0x17, 0x96, 0x0d,
    +	0x61, 0x62, 0x83, 0xa9, 0x02, 0x77, 0x26, 0x0a, 0x53, 0x5a, 0x99, 0x73, 0x70, 0xf4, 0xc1, 0x73,
    +	0x90, 0xfc, 0xa1, 0x05, 0x33, 0xa2, 0xec, 0x92, 0xef, 0x07, 0xb1, 0x8c, 0x3c, 0x8a, 0x18, 0x55,
    +	0xf0, 0x88, 0xab, 0x65, 0x48, 0x14, 0x75, 0x7b, 0x9d, 0x54, 0x73, 0xa6, 0x07, 0x8f, 0xbd, 0x4a,
    +	0x92, 0xcb, 0x30, 0x53, 0x0b, 0x42, 0x97, 0x9a, 0x0d, 0xc1, 0x1d, 0xbf, 0x92, 0x66, 0x74, 0x29,
    +	0x4b, 0x80, 0xbd, 0x65, 0xc8, 0x2d, 0x38, 0x67, 0x00, 0xcd, 0x76, 0x28, 0x71, 0x6e, 0xe7, 0x25,
    +	0xb7, 0x73, 0x97, 0xfa, 0x52, 0xe1, 0x80, 0xd2, 0x73, 0xef, 0x84, 0x99, 0x9e, 0xfe, 0xeb, 0xb3,
    +	0xbb, 0x3f, 0x6b, 0xee, 0xee, 0xcb, 0xc6, 0xa6, 0x7c, 0x6e, 0x05, 0xce, 0xf5, 0x6f, 0xa9, 0x93,
    +	0x70, 0xb1, 0x7f, 0xd5, 0x82, 0xa7, 0x06, 0xb8, 0x31, 0x6a, 0x5b, 0x63, 0x0d, 0xda, 0xd6, 0x10,
    +	0x07, 0x8a, 0xd4, 0xdf, 0x97, 0xc6, 0xe2, 0xd2, 0x70, 0x23, 0x62, 0xd5, 0xdf, 0x17, 0x1d, 0x3d,
    +	0x7e, 0xef, 0x70, 0xbe, 0xb8, 0xea, 0xef, 0x23, 0xe3, 0x6d, 0x7f, 0x7e, 0x2c, 0xb5, 0x73, 0xda,
    +	0x4e, 0x36, 0xeb, 0x5c, 0x51, 0xb9, 0x6f, 0xda, 0xcc, 0x79, 0x2c, 0x1a, 0x3b, 0x43, 0x11, 0x82,
    +	0x97, 0xe2, 0xc8, 0x27, 0x2c, 0x1e, 0xf5, 0x4e, 0x76, 0x94, 0xd2, 0xb3, 0x7a, 0x34, 0x41, 0x78,
    +	0x33, 0x96, 0x9e, 0x00, 0xd1, 0x94, 0xce, 0x66, 0x72, 0x5b, 0x04, 0x9d, 0xb2, 0xfe, 0x55, 0x12,
    +	0x17, 0x4f, 0xf0, 0xe4, 0x00, 0x20, 0xea, 0xfa, 0xee, 0x56, 0xd0, 0xf4, 0xdc, 0xae, 0x0c, 0x33,
    +	0xe4, 0x10, 0x39, 0x15, 0xfc, 0x84, 0x93, 0xa5, 0xbf, 0xd1, 0x90, 0x45, 0xbe, 0x64, 0xc1, 0x8c,
    +	0x57, 0xf7, 0x83, 0x90, 0xae, 0x78, 0xb5, 0x1a, 0x0d, 0xa9, 0xef, 0xd2, 0xc4, 0x0f, 0xb9, 0x3d,
    +	0x9c, 0x06, 0x49, 0xd0, 0x6f, 0x2d, 0xcb, 0x5e, 0x4f, 0xf1, 0x1e, 0x14, 0xf6, 0x2a, 0x43, 0xaa,
    +	0x30, 0xe2, 0xf9, 0xb5, 0x40, 0x1a, 0xb6, 0xca, 0x70, 0x4a, 0xad, 0xf9, 0xb5, 0x40, 0xcf, 0x15,
    +	0xf6, 0x85, 0x9c, 0x3b, 0x59, 0x87, 0xb3, 0xa1, 0xdc, 0x89, 0x5e, 0xf1, 0x22, 0xe6, 0xcf, 0xaf,
    +	0x7b, 0x2d, 0x2f, 0xe6, 0x46, 0xa9, 0x58, 0x99, 0xbd, 0x77, 0x38, 0x7f, 0x16, 0xfb, 0xe0, 0xb1,
    +	0x6f, 0x29, 0xfb, 0xd5, 0x72, 0x7a, 0xbb, 0x2d, 0x82, 0x49, 0x1f, 0x84, 0x72, 0xa8, 0xc2, 0xf7,
    +	0xc2, 0x33, 0x5a, 0xcf, 0xa7, 0x8d, 0x65, 0x14, 0x4b, 0xc5, 0x41, 0x74, 0xa0, 0x5e, 0x4b, 0x64,
    +	0x1e, 0x12, 0xeb, 0x79, 0x39, 0x2d, 0x72, 0x18, 0x5f, 0x52, 0xaa, 0x0e, 0xd8, 0x75, 0x7d, 0x17,
    +	0xb9, 0x0c, 0x12, 0xc2, 0x58, 0x83, 0x3a, 0xcd, 0xb8, 0x21, 0xe3, 0x49, 0x57, 0x87, 0xf5, 0x69,
    +	0x19, 0xaf, 0x6c, 0xac, 0x4e, 0x40, 0x51, 0x4a, 0x22, 0x07, 0x30, 0xde, 0x10, 0x9d, 0x20, 0xd7,
    +	0xf6, 0xeb, 0xc3, 0x36, 0x6e, 0xaa, 0x67, 0xf5, 0xfc, 0x95, 0x00, 0x4c, 0xc4, 0x91, 0x5f, 0xb2,
    +	0x00, 0xdc, 0x24, 0x48, 0x97, 0x4c, 0x1f, 0xcc, 0xcd, 0xee, 0xa8, 0xf8, 0x9f, 0x76, 0x8d, 0x14,
    +	0x28, 0x42, 0x43, 0x32, 0x79, 0x19, 0x26, 0x43, 0xea, 0x06, 0xbe, 0xeb, 0x35, 0x69, 0x75, 0x29,
    +	0xe6, 0x6e, 0xfc, 0xc9, 0x82, 0x79, 0xa7, 0x99, 0x7f, 0x82, 0x06, 0x0f, 0x4c, 0x71, 0x24, 0xaf,
    +	0x5a, 0x30, 0xad, 0x02, 0x95, 0xac, 0x43, 0xa8, 0x0c, 0xd8, 0xac, 0xe7, 0x14, 0x16, 0xe5, 0x3c,
    +	0x2b, 0x84, 0x6d, 0x57, 0xd2, 0x30, 0xcc, 0xc8, 0x25, 0xef, 0x06, 0x08, 0x76, 0x79, 0x50, 0x90,
    +	0x55, 0xb5, 0x74, 0xe2, 0xaa, 0x4e, 0x8b, 0xf8, 0x76, 0xc2, 0x01, 0x0d, 0x6e, 0xe4, 0x1a, 0x80,
    +	0x98, 0x36, 0x3b, 0xdd, 0x36, 0xe5, 0x41, 0x99, 0x72, 0xe5, 0xcd, 0x49, 0xe3, 0x6f, 0x2b, 0xcc,
    +	0xfd, 0xc3, 0xf9, 0xde, 0xdd, 0x2e, 0x8f, 0xc6, 0x1a, 0xc5, 0xc9, 0x07, 0x60, 0x3c, 0xea, 0xb4,
    +	0x5a, 0x8e, 0x0a, 0xae, 0x6c, 0xe5, 0xb7, 0x22, 0x0a, 0xbe, 0x7a, 0x6c, 0x4a, 0x00, 0x26, 0x12,
    +	0x6d, 0x1f, 0x48, 0x2f, 0x3d, 0x79, 0x1e, 0x26, 0xe9, 0x41, 0x4c, 0x43, 0xdf, 0x69, 0xde, 0xc4,
    +	0xf5, 0x64, 0x3b, 0xce, 0x3b, 0x7f, 0xd5, 0x80, 0x63, 0x8a, 0x8a, 0xd8, 0xca, 0xf3, 0x2e, 0x70,
    +	0x7a, 0xd0, 0x9e, 0x77, 0xe2, 0x67, 0xdb, 0xff, 0x5d, 0x48, 0x79, 0x04, 0x3b, 0x21, 0xa5, 0x24,
    +	0x80, 0x51, 0x3f, 0xa8, 0x2a, 0xa3, 0x77, 0x35, 0x1f, 0xa3, 0xb7, 0x11, 0x54, 0x8d, 0x73, 0x65,
    +	0xf6, 0x15, 0xa1, 0x90, 0xc3, 0x0f, 0xde, 0x92, 0x13, 0x4a, 0x8e, 0x90, 0x4e, 0x50, 0x9e, 0x92,
    +	0xd5, 0xc1, 0xdb, 0xa6, 0x29, 0x08, 0xd3, 0x72, 0xc9, 0x1e, 0x8c, 0x36, 0x82, 0x28, 0x16, 0x7b,
    +	0x95, 0xa1, 0xbd, 0xb0, 0x2b, 0x41, 0x14, 0xf3, 0x25, 0x4c, 0x55, 0x9b, 0x41, 0x22, 0x14, 0x32,
    +	0xec, 0xef, 0x59, 0xa9, 0xe0, 0xcb, 0x6d, 0x27, 0x76, 0x1b, 0xab, 0xfb, 0x6c, 0xff, 0x78, 0x2d,
    +	0x75, 0x70, 0xf0, 0x13, 0xe6, 0xc1, 0xc1, 0xfd, 0xc3, 0xf9, 0x37, 0x0d, 0x4a, 0xf4, 0xb9, 0xcb,
    +	0x38, 0x2c, 0x70, 0x16, 0xc6, 0x19, 0xc3, 0x47, 0x2c, 0x98, 0x30, 0xd4, 0x93, 0x0b, 0x4a, 0x8e,
    +	0x31, 0x6c, 0xe5, 0x5c, 0x19, 0x40, 0x34, 0x45, 0xda, 0x9f, 0xb5, 0x60, 0xbc, 0xe2, 0xb8, 0x7b,
    +	0x41, 0xad, 0x46, 0xde, 0x02, 0xa5, 0x6a, 0x47, 0x1e, 0xd1, 0x88, 0xfa, 0xa9, 0xc8, 0xfb, 0x8a,
    +	0x84, 0xa3, 0xa2, 0x60, 0x63, 0xb8, 0xe6, 0xb8, 0x71, 0x10, 0x72, 0xb5, 0x8b, 0x62, 0x0c, 0x5f,
    +	0xe2, 0x10, 0x94, 0x18, 0xb6, 0x49, 0x6f, 0x39, 0x07, 0x49, 0xe1, 0x6c, 0xe4, 0xe7, 0xba, 0x46,
    +	0xa1, 0x49, 0x67, 0xff, 0x69, 0x19, 0xc6, 0xe5, 0x59, 0xe8, 0xb1, 0x4f, 0x33, 0x12, 0x2f, 0xbe,
    +	0x30, 0xd0, 0x8b, 0x8f, 0x60, 0xcc, 0xe5, 0x69, 0x54, 0x72, 0x29, 0x1d, 0x32, 0x06, 0x26, 0x15,
    +	0x14, 0x99, 0x59, 0x5a, 0x2d, 0xf1, 0x8d, 0x52, 0x14, 0xf9, 0x8c, 0x05, 0xa7, 0xdc, 0xc0, 0xf7,
    +	0xa9, 0xab, 0xed, 0xfc, 0x48, 0x1e, 0xa7, 0x7d, 0xcb, 0x69, 0xa6, 0xfa, 0xd0, 0x35, 0x83, 0xc0,
    +	0xac, 0x78, 0xf2, 0x22, 0x4c, 0x89, 0x36, 0xbb, 0x95, 0xda, 0x1f, 0xeb, 0xf3, 0x6f, 0x13, 0x89,
    +	0x69, 0x5a, 0xb2, 0x20, 0xe2, 0x0c, 0xfc, 0x40, 0x48, 0xec, 0x91, 0x65, 0xf0, 0x51, 0x9d, 0x18,
    +	0x45, 0x68, 0x50, 0x90, 0x10, 0x48, 0x48, 0x6b, 0x21, 0x8d, 0x1a, 0x48, 0x5f, 0xe9, 0xd0, 0x28,
    +	0xe6, 0x6b, 0xcc, 0xf8, 0xc3, 0x9d, 0x8d, 0x61, 0x0f, 0x27, 0xec, 0xc3, 0x9d, 0xec, 0x49, 0x47,
    +	0xb7, 0x94, 0xc7, 0x74, 0x92, 0xdd, 0x3c, 0xd0, 0xdf, 0x9d, 0x87, 0xd1, 0xa8, 0xe1, 0x84, 0x55,
    +	0xbe, 0xb6, 0x15, 0x2b, 0x65, 0x66, 0x4b, 0xb6, 0x19, 0x00, 0x05, 0x9c, 0xac, 0xc0, 0xe9, 0xcc,
    +	0xe9, 0x7d, 0xc4, 0x57, 0xaf, 0x52, 0x65, 0x56, 0xb2, 0x3b, 0x9d, 0x39, 0xf7, 0x8f, 0xb0, 0xa7,
    +	0x84, 0xb9, 0x09, 0x9a, 0x38, 0x62, 0x13, 0xd4, 0x85, 0xb1, 0xa6, 0x08, 0x04, 0x4c, 0x72, 0x53,
    +	0x79, 0x23, 0x97, 0x06, 0x58, 0x30, 0x03, 0x30, 0x6a, 0xb4, 0xcb, 0x80, 0x82, 0x14, 0x48, 0x3e,
    +	0xc5, 0x0c, 0x9a, 0x11, 0x3b, 0x98, 0xe2, 0x0a, 0xdc, 0xca, 0x47, 0x81, 0x9e, 0x50, 0x89, 0xb6,
    +	0x6e, 0x46, 0x20, 0xc2, 0x94, 0x3f, 0xf7, 0x93, 0x30, 0xf1, 0xb0, 0x71, 0x87, 0x97, 0xe0, 0xf4,
    +	0x50, 0x11, 0x87, 0xef, 0x5b, 0x90, 0xf4, 0xeb, 0xb2, 0xe3, 0x36, 0x28, 0x1b, 0x32, 0xe4, 0x25,
    +	0x98, 0x56, 0xdb, 0x88, 0xe5, 0xa0, 0x23, 0xe3, 0x96, 0x45, 0x1d, 0x58, 0xc6, 0x14, 0x16, 0x33,
    +	0xd4, 0x64, 0x11, 0xca, 0xac, 0x9d, 0x44, 0x51, 0x61, 0x76, 0xd5, 0x56, 0x65, 0x69, 0x6b, 0x4d,
    +	0x96, 0xd2, 0x34, 0x24, 0x80, 0x99, 0xa6, 0x13, 0xc5, 0x5c, 0x03, 0xb6, 0xab, 0x78, 0xc8, 0x93,
    +	0x69, 0x9e, 0xbc, 0xb4, 0x9e, 0x65, 0x84, 0xbd, 0xbc, 0xed, 0x6f, 0x8c, 0xc0, 0x54, 0xca, 0x32,
    +	0xb2, 0x55, 0xa5, 0x13, 0x31, 0xd7, 0x47, 0x85, 0x58, 0xd4, 0xaa, 0x72, 0x53, 0xc2, 0x51, 0x51,
    +	0x30, 0xea, 0xb6, 0x13, 0x45, 0x77, 0x83, 0xb0, 0x2a, 0x4d, 0xb9, 0xa2, 0xde, 0x92, 0x70, 0x54,
    +	0x14, 0x6c, 0x7d, 0xd9, 0xa5, 0x4e, 0x48, 0x43, 0x9e, 0xcc, 0x91, 0x5d, 0x5f, 0x2a, 0x1a, 0x85,
    +	0x26, 0x1d, 0x37, 0xca, 0x71, 0x33, 0x5a, 0x6e, 0x7a, 0xd4, 0x8f, 0x85, 0x9a, 0xf9, 0x18, 0xe5,
    +	0x9d, 0xf5, 0x6d, 0x93, 0xa9, 0x36, 0xca, 0x19, 0x04, 0x66, 0xc5, 0x93, 0x8f, 0x59, 0x30, 0xe5,
    +	0xdc, 0x8d, 0x74, 0xae, 0x2f, 0xb7, 0xca, 0x43, 0x2f, 0x52, 0xa9, 0xf4, 0xe1, 0xca, 0x0c, 0x33,
    +	0xef, 0x29, 0x10, 0xa6, 0x85, 0x92, 0x2f, 0x58, 0x40, 0xe8, 0x01, 0x75, 0xb7, 0xc2, 0x60, 0xdf,
    +	0xab, 0x26, 0x7d, 0x28, 0xb7, 0x3f, 0x43, 0x7a, 0xdb, 0xab, 0x3d, 0x7c, 0x85, 0x55, 0xef, 0x85,
    +	0x63, 0x1f, 0x1d, 0xec, 0xbf, 0x2d, 0xc2, 0x84, 0x61, 0x8c, 0xfb, 0xae, 0xac, 0xd6, 0x0f, 0xd9,
    +	0xca, 0x5a, 0x38, 0xc1, 0xca, 0xfa, 0x61, 0x28, 0xbb, 0x89, 0xa1, 0xc8, 0x27, 0x37, 0x39, 0x6b,
    +	0x7e, 0xb4, 0xad, 0x50, 0x20, 0xd4, 0x32, 0xc9, 0x65, 0x98, 0x31, 0xd8, 0x48, 0x23, 0x33, 0xc2,
    +	0x8d, 0x8c, 0x0a, 0x34, 0x2d, 0x65, 0x09, 0xb0, 0xb7, 0x0c, 0x79, 0x8e, 0x79, 0xb5, 0x9e, 0xac,
    +	0x97, 0xd8, 0xc5, 0xcb, 0xbc, 0xdf, 0xa5, 0xad, 0xb5, 0x04, 0x8c, 0x26, 0x8d, 0xfd, 0x0d, 0x4b,
    +	0x75, 0xee, 0x63, 0x48, 0x1a, 0xb9, 0x93, 0x4e, 0x1a, 0x59, 0xcd, 0xa5, 0x99, 0x07, 0x24, 0x8c,
    +	0x6c, 0xc0, 0xf8, 0x72, 0xd0, 0x6a, 0x39, 0x7e, 0x95, 0xbc, 0x01, 0xc6, 0x5d, 0xf1, 0x53, 0x6e,
    +	0x13, 0x79, 0x16, 0x81, 0xc4, 0x62, 0x82, 0x23, 0x4f, 0xc3, 0x88, 0x13, 0xd6, 0x93, 0xad, 0x21,
    +	0x3f, 0x14, 0x5b, 0x0a, 0xeb, 0x11, 0x72, 0xa8, 0xfd, 0xb9, 0x02, 0xc0, 0x72, 0xd0, 0x6a, 0x3b,
    +	0x21, 0xad, 0xee, 0x04, 0xff, 0x1b, 0x23, 0x16, 0x3b, 0x86, 0x4f, 0x5a, 0x40, 0x58, 0xab, 0x04,
    +	0x3e, 0xf5, 0xf5, 0x41, 0x1c, 0x5b, 0x2f, 0xdd, 0x04, 0x2a, 0x17, 0x1f, 0x3d, 0x07, 0x12, 0x04,
    +	0x6a, 0x9a, 0x63, 0xec, 0x22, 0x9e, 0x49, 0x56, 0xfc, 0x62, 0x3a, 0xc1, 0x81, 0x1f, 0x4a, 0x4b,
    +	0x07, 0xc0, 0xfe, 0x7c, 0x01, 0xce, 0x09, 0xb3, 0x75, 0xdd, 0xf1, 0x9d, 0x3a, 0x6d, 0x31, 0xad,
    +	0x8e, 0x7b, 0xda, 0xe0, 0x32, 0xf7, 0xd5, 0x4b, 0xf2, 0x19, 0x86, 0x1d, 0x9c, 0x62, 0x50, 0x89,
    +	0x61, 0xb4, 0xe6, 0x7b, 0x31, 0x72, 0xe6, 0x24, 0x82, 0x52, 0x72, 0xdb, 0x44, 0x1a, 0x9b, 0x9c,
    +	0x04, 0xa9, 0x79, 0x77, 0x59, 0xb2, 0x47, 0x25, 0xc8, 0xfe, 0x8a, 0x05, 0x59, 0x23, 0xca, 0xf7,
    +	0x77, 0x22, 0x23, 0x31, 0xbb, 0xbf, 0x4b, 0x27, 0x10, 0x9e, 0x20, 0x1f, 0xef, 0xbd, 0x30, 0xe1,
    +	0xc4, 0x31, 0x6d, 0xb5, 0xc5, 0x66, 0xa3, 0xf8, 0x70, 0x01, 0xad, 0xeb, 0x41, 0xd5, 0xab, 0x79,
    +	0x7c, 0x93, 0x61, 0xb2, 0xb3, 0x6f, 0x40, 0x29, 0x39, 0xc3, 0x39, 0x46, 0x67, 0x3e, 0x93, 0x72,
    +	0x10, 0x07, 0x0c, 0x97, 0xfb, 0x05, 0xe8, 0xb3, 0x0a, 0xb2, 0x2a, 0x6b, 0x7b, 0x91, 0xaa, 0xf2,
    +	0xc9, 0x6c, 0x06, 0x39, 0x10, 0xe7, 0x57, 0x22, 0x72, 0xf2, 0xae, 0xbc, 0x57, 0x71, 0x7d, 0xa4,
    +	0x35, 0x21, 0xf5, 0x53, 0xc7, 0x5a, 0xe4, 0x22, 0x80, 0x36, 0xf3, 0x32, 0x8f, 0x43, 0xc5, 0x5e,
    +	0xf5, 0x6a, 0x80, 0x06, 0x15, 0x73, 0xea, 0x3c, 0x3f, 0x8a, 0x9d, 0x66, 0xf3, 0x8a, 0xe7, 0xc7,
    +	0x72, 0x77, 0xaa, 0x4c, 0xc0, 0x9a, 0x46, 0xa1, 0x49, 0x37, 0xf7, 0x36, 0xa3, 0x5f, 0x4e, 0xe2,
    +	0xa8, 0x7f, 0xb2, 0x00, 0xd3, 0x97, 0xfd, 0xce, 0xd6, 0xe5, 0xad, 0xce, 0x6e, 0xd3, 0x73, 0xaf,
    +	0xd1, 0x2e, 0xeb, 0xb4, 0x3d, 0xda, 0x5d, 0x5b, 0x91, 0xcd, 0xae, 0x3a, 0xed, 0x1a, 0x03, 0xa2,
    +	0xc0, 0x31, 0x35, 0x6b, 0x9e, 0x5f, 0xa7, 0x61, 0x3b, 0xf4, 0xa4, 0x37, 0x6e, 0xa8, 0x79, 0x49,
    +	0xa3, 0xd0, 0xa4, 0x63, 0xbc, 0x83, 0xbb, 0x3e, 0x0d, 0xb3, 0xf6, 0x63, 0x93, 0x01, 0x51, 0xe0,
    +	0x18, 0x51, 0x1c, 0x76, 0xa2, 0x58, 0xb6, 0x98, 0x22, 0xda, 0x61, 0x40, 0x14, 0x38, 0x36, 0x3c,
    +	0xa2, 0xce, 0x2e, 0x8f, 0xab, 0x66, 0x4e, 0xb8, 0xb7, 0x05, 0x18, 0x13, 0x3c, 0x23, 0xdd, 0xa3,
    +	0xdd, 0x15, 0xb6, 0x9a, 0x66, 0x12, 0x52, 0xae, 0x09, 0x30, 0x26, 0x78, 0xfb, 0x1f, 0x2d, 0x20,
    +	0xe9, 0xe6, 0x78, 0x0c, 0x0b, 0xf2, 0x2b, 0xe9, 0x05, 0x79, 0xc8, 0x10, 0x78, 0x5a, 0xfd, 0x01,
    +	0xeb, 0xf2, 0x6f, 0x58, 0x30, 0x69, 0x9e, 0x86, 0x90, 0x7a, 0xc6, 0x10, 0x6d, 0xa6, 0x0d, 0xd1,
    +	0xfd, 0xc3, 0xf9, 0x9f, 0xea, 0x77, 0x19, 0xb2, 0xee, 0xc5, 0x41, 0x3b, 0x7a, 0x2b, 0xf5, 0xeb,
    +	0x9e, 0x4f, 0x79, 0xac, 0x4f, 0x9c, 0xa2, 0xa4, 0x8e, 0x5a, 0x96, 0x83, 0x2a, 0x7d, 0x08, 0x4b,
    +	0x66, 0xdf, 0x86, 0x99, 0x9e, 0x2c, 0xa4, 0x63, 0x18, 0x9d, 0x23, 0x73, 0x4c, 0xed, 0x4f, 0x59,
    +	0x30, 0x95, 0x4a, 0xe2, 0xca, 0xc9, 0x94, 0xf1, 0x59, 0x11, 0xf0, 0x83, 0xb4, 0xd0, 0xf3, 0x45,
    +	0xa4, 0xad, 0x64, 0xcc, 0x0a, 0x8d, 0x42, 0x93, 0xce, 0xfe, 0x6c, 0x01, 0x4a, 0x49, 0x4c, 0xf6,
    +	0x18, 0xaa, 0x7c, 0xc2, 0x82, 0x29, 0xb5, 0x35, 0xe6, 0x0e, 0x73, 0x2e, 0x89, 0x3c, 0x4c, 0x03,
    +	0x75, 0xda, 0xca, 0x1c, 0x66, 0xe5, 0xb9, 0xa3, 0x29, 0x0c, 0xd3, 0xb2, 0xc9, 0x2d, 0x80, 0xa8,
    +	0x1b, 0xc5, 0xb4, 0x65, 0xb8, 0xee, 0xb6, 0x31, 0x3b, 0x16, 0xdc, 0x20, 0xa4, 0x6c, 0x2e, 0x6c,
    +	0x04, 0x55, 0xba, 0xad, 0x28, 0xb5, 0x21, 0xd4, 0x30, 0x34, 0x38, 0xd9, 0xbf, 0x5b, 0x80, 0xd3,
    +	0x59, 0x95, 0xc8, 0x7b, 0x60, 0x32, 0x91, 0x6e, 0xdc, 0x01, 0x4d, 0x02, 0xd1, 0x93, 0x68, 0xe0,
    +	0xee, 0x1f, 0xce, 0xcf, 0xf7, 0x5e, 0x82, 0x5d, 0x30, 0x49, 0x30, 0xc5, 0x4c, 0xc4, 0x27, 0x64,
    +	0x20, 0xad, 0xd2, 0x5d, 0x6a, 0xb7, 0x65, 0x90, 0xc1, 0x88, 0x4f, 0x98, 0x58, 0xcc, 0x50, 0x93,
    +	0x2d, 0x38, 0x6b, 0x40, 0x36, 0xa8, 0x57, 0x6f, 0xec, 0x06, 0xa1, 0xb8, 0x6c, 0x50, 0xac, 0x3c,
    +	0x2d, 0xb9, 0x9c, 0xc5, 0x3e, 0x34, 0xd8, 0xb7, 0x24, 0x79, 0x0b, 0x94, 0x5c, 0xa7, 0xed, 0xb8,
    +	0x5e, 0xdc, 0x95, 0x7b, 0x11, 0x65, 0x47, 0x96, 0x25, 0x1c, 0x15, 0x85, 0x7d, 0x1d, 0x46, 0x8e,
    +	0x39, 0x82, 0x8e, 0xb5, 0x2e, 0xdf, 0x80, 0x12, 0x63, 0xc7, 0xec, 0x46, 0x5e, 0x2c, 0x03, 0x28,
    +	0x25, 0x77, 0x4f, 0x88, 0x0d, 0x45, 0xcf, 0x49, 0x42, 0x40, 0xaa, 0x5a, 0x6b, 0x51, 0xd4, 0xe1,
    +	0x5e, 0x07, 0x43, 0x92, 0x67, 0xa0, 0x48, 0x0f, 0xda, 0xd9, 0x58, 0xcf, 0xea, 0x41, 0xdb, 0x0b,
    +	0x69, 0xc4, 0x88, 0xe8, 0x41, 0x9b, 0xcc, 0x41, 0xc1, 0xab, 0xca, 0x05, 0x05, 0x24, 0x4d, 0x61,
    +	0x6d, 0x05, 0x0b, 0x5e, 0xd5, 0x3e, 0x80, 0xb2, 0xba, 0xec, 0x42, 0xf6, 0x12, 0x3b, 0x6b, 0xe5,
    +	0x71, 0x88, 0x92, 0xf0, 0x1
    ... [truncated]
    
  • pkg/apis/application/v1alpha1/generated.proto+6 0 modified
    @@ -409,6 +409,12 @@ message Cluster {
     
       // Reference between project and cluster that allow you automatically to be added as item inside Destinations project entity
       optional string project = 11;
    +
    +  // Labels for cluster secret metadata
    +  map<string, string> labels = 12;
    +
    +  // Annotations for cluster secret metadata
    +  map<string, string> annotations = 13;
     }
     
     // ClusterCacheInfo contains information about the cluster cache
    
  • pkg/apis/application/v1alpha1/openapi_generated.go+32 0 modified
    @@ -1447,6 +1447,38 @@ func schema_pkg_apis_application_v1alpha1_Cluster(ref common.ReferenceCallback)
     							Format:      "",
     						},
     					},
    +					"labels": {
    +						SchemaProps: spec.SchemaProps{
    +							Description: "Labels for cluster secret metadata",
    +							Type:        []string{"object"},
    +							AdditionalProperties: &spec.SchemaOrBool{
    +								Allows: true,
    +								Schema: &spec.Schema{
    +									SchemaProps: spec.SchemaProps{
    +										Default: "",
    +										Type:    []string{"string"},
    +										Format:  "",
    +									},
    +								},
    +							},
    +						},
    +					},
    +					"annotations": {
    +						SchemaProps: spec.SchemaProps{
    +							Description: "Annotations for cluster secret metadata",
    +							Type:        []string{"object"},
    +							AdditionalProperties: &spec.SchemaOrBool{
    +								Allows: true,
    +								Schema: &spec.Schema{
    +									SchemaProps: spec.SchemaProps{
    +										Default: "",
    +										Type:    []string{"string"},
    +										Format:  "",
    +									},
    +								},
    +							},
    +						},
    +					},
     				},
     				Required: []string{"server", "name", "config"},
     			},
    
  • pkg/apis/application/v1alpha1/types.go+13 0 modified
    @@ -1275,6 +1275,10 @@ type Cluster struct {
     	ClusterResources bool `json:"clusterResources,omitempty" protobuf:"bytes,10,opt,name=clusterResources"`
     	// Reference between project and cluster that allow you automatically to be added as item inside Destinations project entity
     	Project string `json:"project,omitempty" protobuf:"bytes,11,opt,name=project"`
    +	// Labels for cluster secret metadata
    +	Labels map[string]string `json:"labels,omitempty" protobuf:"bytes,12,opt,name=labels"`
    +	// Annotations for cluster secret metadata
    +	Annotations map[string]string `json:"annotations,omitempty" protobuf:"bytes,13,opt,name=annotations"`
     }
     
     // Equals returns true if two cluster objects are considered to be equal
    @@ -1303,6 +1307,15 @@ func (c *Cluster) Equals(other *Cluster) bool {
     	if c.ClusterResources != other.ClusterResources {
     		return false
     	}
    +
    +	if !reflect.DeepEqual(c.Annotations, other.Annotations) {
    +		return false
    +	}
    +
    +	if !reflect.DeepEqual(c.Labels, other.Labels) {
    +		return false
    +	}
    +
     	return reflect.DeepEqual(c.Config, other.Config)
     }
     
    
  • pkg/apis/application/v1alpha1/zz_generated.deepcopy.go+14 0 modified
    @@ -703,6 +703,20 @@ func (in *Cluster) DeepCopyInto(out *Cluster) {
     		*out = new(int64)
     		**out = **in
     	}
    +	if in.Labels != nil {
    +		in, out := &in.Labels, &out.Labels
    +		*out = make(map[string]string, len(*in))
    +		for key, val := range *in {
    +			(*out)[key] = val
    +		}
    +	}
    +	if in.Annotations != nil {
    +		in, out := &in.Annotations, &out.Annotations
    +		*out = make(map[string]string, len(*in))
    +		for key, val := range *in {
    +			(*out)[key] = val
    +		}
    +	}
     	return
     }
     
    
  • util/db/cluster.go+6 0 modified
    @@ -269,9 +269,13 @@ func clusterToSecret(c *appv1.Cluster, secret *apiv1.Secret) error {
     	}
     	secret.Data = data
     
    +	secret.Labels = c.Labels
    +	secret.Annotations = c.Annotations
    +
     	if secret.Annotations == nil {
     		secret.Annotations = make(map[string]string)
     	}
    +
     	if c.RefreshRequestedAt != nil {
     		secret.Annotations[appv1.AnnotationKeyRefresh] = c.RefreshRequestedAt.Format(time.RFC3339)
     	} else {
    @@ -323,6 +327,8 @@ func secretToCluster(s *apiv1.Secret) (*appv1.Cluster, error) {
     		RefreshRequestedAt: refreshRequestedAt,
     		Shard:              shard,
     		Project:            string(s.Data["project"]),
    +		Labels:             s.GetLabels(),
    +		Annotations:        s.GetAnnotations(),
     	}
     	return &cluster, nil
     }
    
  • util/db/cluster_test.go+8 2 modified
    @@ -28,10 +28,14 @@ func Test_URIToSecretName(t *testing.T) {
     }
     
     func Test_secretToCluster(t *testing.T) {
    +	labels := map[string]string{"key1": "val1"}
    +	annotations := map[string]string{"key2": "val2"}
     	secret := &v1.Secret{
     		ObjectMeta: metav1.ObjectMeta{
    -			Name:      "mycluster",
    -			Namespace: fakeNamespace,
    +			Name:        "mycluster",
    +			Namespace:   fakeNamespace,
    +			Labels:      labels,
    +			Annotations: annotations,
     		},
     		Data: map[string][]byte{
     			"name":   []byte("test"),
    @@ -47,6 +51,8 @@ func Test_secretToCluster(t *testing.T) {
     		Config: v1alpha1.ClusterConfig{
     			Username: "foo",
     		},
    +		Labels:      labels,
    +		Annotations: annotations,
     	})
     }
     
    

Vulnerability mechanics

Generated by null/stub on May 9, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.

References

10

News mentions

0

No linked articles in our index yet.