From 037d098d7c368fa937b298d154f98fe80b3d5740 Mon Sep 17 00:00:00 2001 From: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> Date: Mon, 22 Apr 2024 10:47:52 -0400 Subject: [PATCH 01/15] feat: manifest hydrator Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> --- assets/swagger.json | 54 + controller/commit/commit.go | 41 + manifests/core-install.yaml | 909 ++++++ manifests/crds/application-crd.yaml | 45 + manifests/crds/applicationset-crd.yaml | 864 ++++++ manifests/ha/install.yaml | 909 ++++++ manifests/install.yaml | 909 ++++++ pkg/apis/application/v1alpha1/generated.pb.go | 2489 +++++++++++------ pkg/apis/application/v1alpha1/generated.proto | 40 + .../application/v1alpha1/openapi_generated.go | 134 +- pkg/apis/application/v1alpha1/types.go | 35 + .../v1alpha1/zz_generated.deepcopy.go | 68 + 12 files changed, 5708 insertions(+), 789 deletions(-) create mode 100644 controller/commit/commit.go diff --git a/assets/swagger.json b/assets/swagger.json index 878d98410b5a7..f535f0c2f22aa 100644 --- a/assets/swagger.json +++ b/assets/swagger.json @@ -6560,6 +6560,9 @@ "source": { "$ref": "#/definitions/v1alpha1ApplicationSource" }, + "sourceHydrator": { + "$ref": "#/definitions/v1alpha1SourceHydrator" + }, "sources": { "type": "array", "title": "Sources is a reference to the location of the application's manifests or chart", @@ -7006,6 +7009,21 @@ } } }, + "v1alpha1DrySource": { + "description": "DrySource specifies a location for dry \"don't repeat yourself\" manifest source information.", + "type": "object", + "properties": { + "path": { + "type": "string" + }, + "repoURL": { + "type": "string" + }, + "targetRevision": { + "type": "string" + } + } + }, "v1alpha1DuckTypeGenerator": { "description": "DuckType defines a generator to match against clusters registered with ArgoCD.", "type": "object", @@ -7257,6 +7275,15 @@ } } }, + "v1alpha1HydrateTo": { + "description": "HydrateTo specifies a location to which hydrated manifests should be pushed as a \"staging area\" before being moved to\nthe SyncSource. The RepoURL and Path are assumed based on the associated SyncSource config in the SourceHydrator.", + "type": "object", + "properties": { + "targetRevision": { + "type": "string" + } + } + }, "v1alpha1Info": { "type": "object", "properties": { @@ -8867,6 +8894,21 @@ } } }, + "v1alpha1SourceHydrator": { + "description": "SourceHydrator specifies a dry \"don't repeat yourself\" source for manifests, a sync source from which to sync\nhydrated manifests, and an optional hydrateTo location to act as a \"staging\" aread for hydrated manifests.", + "type": "object", + "properties": { + "drySource": { + "$ref": "#/definitions/v1alpha1DrySource" + }, + "hydrateTo": { + "$ref": "#/definitions/v1alpha1HydrateTo" + }, + "syncSource": { + "$ref": "#/definitions/v1alpha1SyncSource" + } + } + }, "v1alpha1SyncOperation": { "description": "SyncOperation contains details about a sync operation.", "type": "object", @@ -9021,6 +9063,18 @@ } } }, + "v1alpha1SyncSource": { + "description": "SyncSource specifies a location from which hydrated manifests may be synced. RepoURL is assumed based on the\nassociated DrySource config in the SourceHydrator.", + "type": "object", + "properties": { + "path": { + "type": "string" + }, + "targetRevision": { + "type": "string" + } + } + }, "v1alpha1SyncStatus": { "type": "object", "title": "SyncStatus contains information about the currently observed live and desired states of an application", diff --git a/controller/commit/commit.go b/controller/commit/commit.go new file mode 100644 index 0000000000000..714cdfd47188b --- /dev/null +++ b/controller/commit/commit.go @@ -0,0 +1,41 @@ +package commit + +import ( + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + "time" +) + +/** +The commit package provides a way for the controller to push manifests to git. +*/ + +type Service interface { + Commit(ManifestsRequest) ManifestsResponse +} + +type ManifestsRequest struct { + RepoURL string + TargetBranch string + DrySHA string + CommitAuthor string + CommitMessage string + CommitTime time.Time + PathDetails +} + +type PathDetails struct { + Path string + Manifests []ManifestDetails + ReadmeDetails +} + +type ManifestDetails struct { + Manifest unstructured.Unstructured +} + +type ReadmeDetails struct { +} + +type ManifestsResponse struct { + RequestId string +} diff --git a/manifests/core-install.yaml b/manifests/core-install.yaml index 3b6431e08fbb7..a407af6a598f9 100644 --- a/manifests/core-install.yaml +++ b/manifests/core-install.yaml @@ -1273,6 +1273,51 @@ spec: required: - repoURL type: object + sourceHydrator: + description: SourceHydrator provides a way to push hydrated manifests + back to git before syncing them to the cluster. + properties: + drySource: + description: DrySource specifies where the dry "don't repeat yourself" + manifest source lives. + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + description: |- + HydrateTo specifies an optional "staging" location to push hydrated manifests to. An external system would then + have to move manifests to the SyncSource, e.g. by pull request. + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + description: SyncSource specifies where to sync hydrated manifests + from. + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: description: Sources is a reference to the location of the application's manifests or chart @@ -5355,6 +5400,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -5947,6 +6028,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -6542,6 +6659,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -7117,6 +7270,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -7715,6 +7904,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -8307,6 +8532,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -8902,6 +9163,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -9477,6 +9774,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -10060,6 +10393,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -10825,6 +11194,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -11585,6 +11990,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -12175,6 +12616,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -12775,6 +13252,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -13367,6 +13880,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -13962,6 +14511,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -14537,6 +15122,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -15120,6 +15741,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -15885,6 +16542,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -16645,6 +17338,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -17239,6 +17968,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -17821,6 +18586,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -18586,6 +19387,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -19346,6 +20183,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -20011,6 +20884,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: diff --git a/manifests/crds/application-crd.yaml b/manifests/crds/application-crd.yaml index 6b67f460587e5..7acc435e97d19 100644 --- a/manifests/crds/application-crd.yaml +++ b/manifests/crds/application-crd.yaml @@ -1272,6 +1272,51 @@ spec: required: - repoURL type: object + sourceHydrator: + description: SourceHydrator provides a way to push hydrated manifests + back to git before syncing them to the cluster. + properties: + drySource: + description: DrySource specifies where the dry "don't repeat yourself" + manifest source lives. + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + description: |- + HydrateTo specifies an optional "staging" location to push hydrated manifests to. An external system would then + have to move manifests to the SyncSource, e.g. by pull request. + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + description: SyncSource specifies where to sync hydrated manifests + from. + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: description: Sources is a reference to the location of the application's manifests or chart diff --git a/manifests/crds/applicationset-crd.yaml b/manifests/crds/applicationset-crd.yaml index b6f62fa930f50..2c5f6b75708f9 100644 --- a/manifests/crds/applicationset-crd.yaml +++ b/manifests/crds/applicationset-crd.yaml @@ -358,6 +358,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -950,6 +986,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -1545,6 +1617,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -2120,6 +2228,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -2718,6 +2862,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -3310,6 +3490,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -3905,6 +4121,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -4480,6 +4732,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -5063,6 +5351,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -5828,6 +6152,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -6588,6 +6948,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -7178,6 +7574,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -7778,6 +8210,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -8370,6 +8838,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -8965,6 +9469,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -9540,6 +10080,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -10123,6 +10699,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -10888,6 +11500,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -11648,6 +12296,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -12242,6 +12926,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -12824,6 +13544,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -13589,6 +14345,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -14349,6 +15141,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -15014,6 +15842,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: diff --git a/manifests/ha/install.yaml b/manifests/ha/install.yaml index 17bcfc89321e0..75e3d1b793cd2 100644 --- a/manifests/ha/install.yaml +++ b/manifests/ha/install.yaml @@ -1273,6 +1273,51 @@ spec: required: - repoURL type: object + sourceHydrator: + description: SourceHydrator provides a way to push hydrated manifests + back to git before syncing them to the cluster. + properties: + drySource: + description: DrySource specifies where the dry "don't repeat yourself" + manifest source lives. + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + description: |- + HydrateTo specifies an optional "staging" location to push hydrated manifests to. An external system would then + have to move manifests to the SyncSource, e.g. by pull request. + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + description: SyncSource specifies where to sync hydrated manifests + from. + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: description: Sources is a reference to the location of the application's manifests or chart @@ -5355,6 +5400,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -5947,6 +6028,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -6542,6 +6659,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -7117,6 +7270,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -7715,6 +7904,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -8307,6 +8532,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -8902,6 +9163,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -9477,6 +9774,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -10060,6 +10393,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -10825,6 +11194,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -11585,6 +11990,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -12175,6 +12616,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -12775,6 +13252,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -13367,6 +13880,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -13962,6 +14511,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -14537,6 +15122,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -15120,6 +15741,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -15885,6 +16542,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -16645,6 +17338,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -17239,6 +17968,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -17821,6 +18586,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -18586,6 +19387,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -19346,6 +20183,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -20011,6 +20884,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: diff --git a/manifests/install.yaml b/manifests/install.yaml index 83d96896cdc6d..64729a3b0f00c 100644 --- a/manifests/install.yaml +++ b/manifests/install.yaml @@ -1273,6 +1273,51 @@ spec: required: - repoURL type: object + sourceHydrator: + description: SourceHydrator provides a way to push hydrated manifests + back to git before syncing them to the cluster. + properties: + drySource: + description: DrySource specifies where the dry "don't repeat yourself" + manifest source lives. + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + description: |- + HydrateTo specifies an optional "staging" location to push hydrated manifests to. An external system would then + have to move manifests to the SyncSource, e.g. by pull request. + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + description: SyncSource specifies where to sync hydrated manifests + from. + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: description: Sources is a reference to the location of the application's manifests or chart @@ -5355,6 +5400,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -5947,6 +6028,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -6542,6 +6659,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -7117,6 +7270,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -7715,6 +7904,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -8307,6 +8532,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -8902,6 +9163,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -9477,6 +9774,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -10060,6 +10393,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -10825,6 +11194,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -11585,6 +11990,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -12175,6 +12616,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -12775,6 +13252,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -13367,6 +13880,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -13962,6 +14511,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -14537,6 +15122,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -15120,6 +15741,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -15885,6 +16542,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -16645,6 +17338,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -17239,6 +17968,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -17821,6 +18586,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -18586,6 +19387,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -19346,6 +20183,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: @@ -20011,6 +20884,42 @@ spec: required: - repoURL type: object + sourceHydrator: + properties: + drySource: + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + hydrateTo: + properties: + targetRevision: + type: string + required: + - targetRevision + type: object + syncSource: + properties: + path: + type: string + targetRevision: + type: string + required: + - path + - targetRevision + type: object + required: + - drySource + - syncSource + type: object sources: items: properties: diff --git a/pkg/apis/application/v1alpha1/generated.pb.go b/pkg/apis/application/v1alpha1/generated.pb.go index aed1ef619b350..da0d1143be9ce 100644 --- a/pkg/apis/application/v1alpha1/generated.pb.go +++ b/pkg/apis/application/v1alpha1/generated.pb.go @@ -1553,10 +1553,38 @@ func (m *ConnectionState) XXX_DiscardUnknown() { var xxx_messageInfo_ConnectionState proto.InternalMessageInfo +func (m *DrySource) Reset() { *m = DrySource{} } +func (*DrySource) ProtoMessage() {} +func (*DrySource) Descriptor() ([]byte, []int) { + return fileDescriptor_030104ce3b95bcac, []int{54} +} +func (m *DrySource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DrySource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DrySource) XXX_Merge(src proto.Message) { + xxx_messageInfo_DrySource.Merge(m, src) +} +func (m *DrySource) XXX_Size() int { + return m.Size() +} +func (m *DrySource) XXX_DiscardUnknown() { + xxx_messageInfo_DrySource.DiscardUnknown(m) +} + +var xxx_messageInfo_DrySource proto.InternalMessageInfo + func (m *DuckTypeGenerator) Reset() { *m = DuckTypeGenerator{} } func (*DuckTypeGenerator) ProtoMessage() {} func (*DuckTypeGenerator) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{54} + return fileDescriptor_030104ce3b95bcac, []int{55} } func (m *DuckTypeGenerator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1584,7 +1612,7 @@ var xxx_messageInfo_DuckTypeGenerator proto.InternalMessageInfo func (m *EnvEntry) Reset() { *m = EnvEntry{} } func (*EnvEntry) ProtoMessage() {} func (*EnvEntry) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{55} + return fileDescriptor_030104ce3b95bcac, []int{56} } func (m *EnvEntry) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1612,7 +1640,7 @@ var xxx_messageInfo_EnvEntry proto.InternalMessageInfo func (m *ErrApplicationNotAllowedToUseProject) Reset() { *m = ErrApplicationNotAllowedToUseProject{} } func (*ErrApplicationNotAllowedToUseProject) ProtoMessage() {} func (*ErrApplicationNotAllowedToUseProject) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{56} + return fileDescriptor_030104ce3b95bcac, []int{57} } func (m *ErrApplicationNotAllowedToUseProject) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1640,7 +1668,7 @@ var xxx_messageInfo_ErrApplicationNotAllowedToUseProject proto.InternalMessageIn func (m *ExecProviderConfig) Reset() { *m = ExecProviderConfig{} } func (*ExecProviderConfig) ProtoMessage() {} func (*ExecProviderConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{57} + return fileDescriptor_030104ce3b95bcac, []int{58} } func (m *ExecProviderConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1668,7 +1696,7 @@ var xxx_messageInfo_ExecProviderConfig proto.InternalMessageInfo func (m *GitDirectoryGeneratorItem) Reset() { *m = GitDirectoryGeneratorItem{} } func (*GitDirectoryGeneratorItem) ProtoMessage() {} func (*GitDirectoryGeneratorItem) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{58} + return fileDescriptor_030104ce3b95bcac, []int{59} } func (m *GitDirectoryGeneratorItem) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1696,7 +1724,7 @@ var xxx_messageInfo_GitDirectoryGeneratorItem proto.InternalMessageInfo func (m *GitFileGeneratorItem) Reset() { *m = GitFileGeneratorItem{} } func (*GitFileGeneratorItem) ProtoMessage() {} func (*GitFileGeneratorItem) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{59} + return fileDescriptor_030104ce3b95bcac, []int{60} } func (m *GitFileGeneratorItem) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1724,7 +1752,7 @@ var xxx_messageInfo_GitFileGeneratorItem proto.InternalMessageInfo func (m *GitGenerator) Reset() { *m = GitGenerator{} } func (*GitGenerator) ProtoMessage() {} func (*GitGenerator) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{60} + return fileDescriptor_030104ce3b95bcac, []int{61} } func (m *GitGenerator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1752,7 +1780,7 @@ var xxx_messageInfo_GitGenerator proto.InternalMessageInfo func (m *GnuPGPublicKey) Reset() { *m = GnuPGPublicKey{} } func (*GnuPGPublicKey) ProtoMessage() {} func (*GnuPGPublicKey) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{61} + return fileDescriptor_030104ce3b95bcac, []int{62} } func (m *GnuPGPublicKey) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1780,7 +1808,7 @@ var xxx_messageInfo_GnuPGPublicKey proto.InternalMessageInfo func (m *GnuPGPublicKeyList) Reset() { *m = GnuPGPublicKeyList{} } func (*GnuPGPublicKeyList) ProtoMessage() {} func (*GnuPGPublicKeyList) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{62} + return fileDescriptor_030104ce3b95bcac, []int{63} } func (m *GnuPGPublicKeyList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1808,7 +1836,7 @@ var xxx_messageInfo_GnuPGPublicKeyList proto.InternalMessageInfo func (m *HealthStatus) Reset() { *m = HealthStatus{} } func (*HealthStatus) ProtoMessage() {} func (*HealthStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{63} + return fileDescriptor_030104ce3b95bcac, []int{64} } func (m *HealthStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1836,7 +1864,7 @@ var xxx_messageInfo_HealthStatus proto.InternalMessageInfo func (m *HelmFileParameter) Reset() { *m = HelmFileParameter{} } func (*HelmFileParameter) ProtoMessage() {} func (*HelmFileParameter) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{64} + return fileDescriptor_030104ce3b95bcac, []int{65} } func (m *HelmFileParameter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1864,7 +1892,7 @@ var xxx_messageInfo_HelmFileParameter proto.InternalMessageInfo func (m *HelmOptions) Reset() { *m = HelmOptions{} } func (*HelmOptions) ProtoMessage() {} func (*HelmOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{65} + return fileDescriptor_030104ce3b95bcac, []int{66} } func (m *HelmOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1892,7 +1920,7 @@ var xxx_messageInfo_HelmOptions proto.InternalMessageInfo func (m *HelmParameter) Reset() { *m = HelmParameter{} } func (*HelmParameter) ProtoMessage() {} func (*HelmParameter) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{66} + return fileDescriptor_030104ce3b95bcac, []int{67} } func (m *HelmParameter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1920,7 +1948,7 @@ var xxx_messageInfo_HelmParameter proto.InternalMessageInfo func (m *HostInfo) Reset() { *m = HostInfo{} } func (*HostInfo) ProtoMessage() {} func (*HostInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{67} + return fileDescriptor_030104ce3b95bcac, []int{68} } func (m *HostInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1948,7 +1976,7 @@ var xxx_messageInfo_HostInfo proto.InternalMessageInfo func (m *HostResourceInfo) Reset() { *m = HostResourceInfo{} } func (*HostResourceInfo) ProtoMessage() {} func (*HostResourceInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{68} + return fileDescriptor_030104ce3b95bcac, []int{69} } func (m *HostResourceInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1973,10 +2001,38 @@ func (m *HostResourceInfo) XXX_DiscardUnknown() { var xxx_messageInfo_HostResourceInfo proto.InternalMessageInfo +func (m *HydrateTo) Reset() { *m = HydrateTo{} } +func (*HydrateTo) ProtoMessage() {} +func (*HydrateTo) Descriptor() ([]byte, []int) { + return fileDescriptor_030104ce3b95bcac, []int{70} +} +func (m *HydrateTo) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *HydrateTo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *HydrateTo) XXX_Merge(src proto.Message) { + xxx_messageInfo_HydrateTo.Merge(m, src) +} +func (m *HydrateTo) XXX_Size() int { + return m.Size() +} +func (m *HydrateTo) XXX_DiscardUnknown() { + xxx_messageInfo_HydrateTo.DiscardUnknown(m) +} + +var xxx_messageInfo_HydrateTo proto.InternalMessageInfo + func (m *Info) Reset() { *m = Info{} } func (*Info) ProtoMessage() {} func (*Info) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{69} + return fileDescriptor_030104ce3b95bcac, []int{71} } func (m *Info) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2004,7 +2060,7 @@ var xxx_messageInfo_Info proto.InternalMessageInfo func (m *InfoItem) Reset() { *m = InfoItem{} } func (*InfoItem) ProtoMessage() {} func (*InfoItem) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{70} + return fileDescriptor_030104ce3b95bcac, []int{72} } func (m *InfoItem) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2032,7 +2088,7 @@ var xxx_messageInfo_InfoItem proto.InternalMessageInfo func (m *JWTToken) Reset() { *m = JWTToken{} } func (*JWTToken) ProtoMessage() {} func (*JWTToken) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{71} + return fileDescriptor_030104ce3b95bcac, []int{73} } func (m *JWTToken) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2060,7 +2116,7 @@ var xxx_messageInfo_JWTToken proto.InternalMessageInfo func (m *JWTTokens) Reset() { *m = JWTTokens{} } func (*JWTTokens) ProtoMessage() {} func (*JWTTokens) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{72} + return fileDescriptor_030104ce3b95bcac, []int{74} } func (m *JWTTokens) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2088,7 +2144,7 @@ var xxx_messageInfo_JWTTokens proto.InternalMessageInfo func (m *JsonnetVar) Reset() { *m = JsonnetVar{} } func (*JsonnetVar) ProtoMessage() {} func (*JsonnetVar) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{73} + return fileDescriptor_030104ce3b95bcac, []int{75} } func (m *JsonnetVar) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2116,7 +2172,7 @@ var xxx_messageInfo_JsonnetVar proto.InternalMessageInfo func (m *KnownTypeField) Reset() { *m = KnownTypeField{} } func (*KnownTypeField) ProtoMessage() {} func (*KnownTypeField) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{74} + return fileDescriptor_030104ce3b95bcac, []int{76} } func (m *KnownTypeField) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2144,7 +2200,7 @@ var xxx_messageInfo_KnownTypeField proto.InternalMessageInfo func (m *KustomizeGvk) Reset() { *m = KustomizeGvk{} } func (*KustomizeGvk) ProtoMessage() {} func (*KustomizeGvk) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{75} + return fileDescriptor_030104ce3b95bcac, []int{77} } func (m *KustomizeGvk) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2172,7 +2228,7 @@ var xxx_messageInfo_KustomizeGvk proto.InternalMessageInfo func (m *KustomizeOptions) Reset() { *m = KustomizeOptions{} } func (*KustomizeOptions) ProtoMessage() {} func (*KustomizeOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{76} + return fileDescriptor_030104ce3b95bcac, []int{78} } func (m *KustomizeOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2200,7 +2256,7 @@ var xxx_messageInfo_KustomizeOptions proto.InternalMessageInfo func (m *KustomizePatch) Reset() { *m = KustomizePatch{} } func (*KustomizePatch) ProtoMessage() {} func (*KustomizePatch) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{77} + return fileDescriptor_030104ce3b95bcac, []int{79} } func (m *KustomizePatch) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2228,7 +2284,7 @@ var xxx_messageInfo_KustomizePatch proto.InternalMessageInfo func (m *KustomizeReplica) Reset() { *m = KustomizeReplica{} } func (*KustomizeReplica) ProtoMessage() {} func (*KustomizeReplica) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{78} + return fileDescriptor_030104ce3b95bcac, []int{80} } func (m *KustomizeReplica) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2256,7 +2312,7 @@ var xxx_messageInfo_KustomizeReplica proto.InternalMessageInfo func (m *KustomizeResId) Reset() { *m = KustomizeResId{} } func (*KustomizeResId) ProtoMessage() {} func (*KustomizeResId) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{79} + return fileDescriptor_030104ce3b95bcac, []int{81} } func (m *KustomizeResId) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2284,7 +2340,7 @@ var xxx_messageInfo_KustomizeResId proto.InternalMessageInfo func (m *KustomizeSelector) Reset() { *m = KustomizeSelector{} } func (*KustomizeSelector) ProtoMessage() {} func (*KustomizeSelector) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{80} + return fileDescriptor_030104ce3b95bcac, []int{82} } func (m *KustomizeSelector) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2312,7 +2368,7 @@ var xxx_messageInfo_KustomizeSelector proto.InternalMessageInfo func (m *ListGenerator) Reset() { *m = ListGenerator{} } func (*ListGenerator) ProtoMessage() {} func (*ListGenerator) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{81} + return fileDescriptor_030104ce3b95bcac, []int{83} } func (m *ListGenerator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2340,7 +2396,7 @@ var xxx_messageInfo_ListGenerator proto.InternalMessageInfo func (m *ManagedNamespaceMetadata) Reset() { *m = ManagedNamespaceMetadata{} } func (*ManagedNamespaceMetadata) ProtoMessage() {} func (*ManagedNamespaceMetadata) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{82} + return fileDescriptor_030104ce3b95bcac, []int{84} } func (m *ManagedNamespaceMetadata) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2368,7 +2424,7 @@ var xxx_messageInfo_ManagedNamespaceMetadata proto.InternalMessageInfo func (m *MatrixGenerator) Reset() { *m = MatrixGenerator{} } func (*MatrixGenerator) ProtoMessage() {} func (*MatrixGenerator) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{83} + return fileDescriptor_030104ce3b95bcac, []int{85} } func (m *MatrixGenerator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2396,7 +2452,7 @@ var xxx_messageInfo_MatrixGenerator proto.InternalMessageInfo func (m *MergeGenerator) Reset() { *m = MergeGenerator{} } func (*MergeGenerator) ProtoMessage() {} func (*MergeGenerator) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{84} + return fileDescriptor_030104ce3b95bcac, []int{86} } func (m *MergeGenerator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2424,7 +2480,7 @@ var xxx_messageInfo_MergeGenerator proto.InternalMessageInfo func (m *NestedMatrixGenerator) Reset() { *m = NestedMatrixGenerator{} } func (*NestedMatrixGenerator) ProtoMessage() {} func (*NestedMatrixGenerator) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{85} + return fileDescriptor_030104ce3b95bcac, []int{87} } func (m *NestedMatrixGenerator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2452,7 +2508,7 @@ var xxx_messageInfo_NestedMatrixGenerator proto.InternalMessageInfo func (m *NestedMergeGenerator) Reset() { *m = NestedMergeGenerator{} } func (*NestedMergeGenerator) ProtoMessage() {} func (*NestedMergeGenerator) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{86} + return fileDescriptor_030104ce3b95bcac, []int{88} } func (m *NestedMergeGenerator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2480,7 +2536,7 @@ var xxx_messageInfo_NestedMergeGenerator proto.InternalMessageInfo func (m *Operation) Reset() { *m = Operation{} } func (*Operation) ProtoMessage() {} func (*Operation) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{87} + return fileDescriptor_030104ce3b95bcac, []int{89} } func (m *Operation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2508,7 +2564,7 @@ var xxx_messageInfo_Operation proto.InternalMessageInfo func (m *OperationInitiator) Reset() { *m = OperationInitiator{} } func (*OperationInitiator) ProtoMessage() {} func (*OperationInitiator) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{88} + return fileDescriptor_030104ce3b95bcac, []int{90} } func (m *OperationInitiator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2536,7 +2592,7 @@ var xxx_messageInfo_OperationInitiator proto.InternalMessageInfo func (m *OperationState) Reset() { *m = OperationState{} } func (*OperationState) ProtoMessage() {} func (*OperationState) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{89} + return fileDescriptor_030104ce3b95bcac, []int{91} } func (m *OperationState) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2564,7 +2620,7 @@ var xxx_messageInfo_OperationState proto.InternalMessageInfo func (m *OptionalArray) Reset() { *m = OptionalArray{} } func (*OptionalArray) ProtoMessage() {} func (*OptionalArray) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{90} + return fileDescriptor_030104ce3b95bcac, []int{92} } func (m *OptionalArray) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2592,7 +2648,7 @@ var xxx_messageInfo_OptionalArray proto.InternalMessageInfo func (m *OptionalMap) Reset() { *m = OptionalMap{} } func (*OptionalMap) ProtoMessage() {} func (*OptionalMap) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{91} + return fileDescriptor_030104ce3b95bcac, []int{93} } func (m *OptionalMap) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2620,7 +2676,7 @@ var xxx_messageInfo_OptionalMap proto.InternalMessageInfo func (m *OrphanedResourceKey) Reset() { *m = OrphanedResourceKey{} } func (*OrphanedResourceKey) ProtoMessage() {} func (*OrphanedResourceKey) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{92} + return fileDescriptor_030104ce3b95bcac, []int{94} } func (m *OrphanedResourceKey) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2648,7 +2704,7 @@ var xxx_messageInfo_OrphanedResourceKey proto.InternalMessageInfo func (m *OrphanedResourcesMonitorSettings) Reset() { *m = OrphanedResourcesMonitorSettings{} } func (*OrphanedResourcesMonitorSettings) ProtoMessage() {} func (*OrphanedResourcesMonitorSettings) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{93} + return fileDescriptor_030104ce3b95bcac, []int{95} } func (m *OrphanedResourcesMonitorSettings) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2676,7 +2732,7 @@ var xxx_messageInfo_OrphanedResourcesMonitorSettings proto.InternalMessageInfo func (m *OverrideIgnoreDiff) Reset() { *m = OverrideIgnoreDiff{} } func (*OverrideIgnoreDiff) ProtoMessage() {} func (*OverrideIgnoreDiff) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{94} + return fileDescriptor_030104ce3b95bcac, []int{96} } func (m *OverrideIgnoreDiff) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2704,7 +2760,7 @@ var xxx_messageInfo_OverrideIgnoreDiff proto.InternalMessageInfo func (m *PluginConfigMapRef) Reset() { *m = PluginConfigMapRef{} } func (*PluginConfigMapRef) ProtoMessage() {} func (*PluginConfigMapRef) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{95} + return fileDescriptor_030104ce3b95bcac, []int{97} } func (m *PluginConfigMapRef) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2732,7 +2788,7 @@ var xxx_messageInfo_PluginConfigMapRef proto.InternalMessageInfo func (m *PluginGenerator) Reset() { *m = PluginGenerator{} } func (*PluginGenerator) ProtoMessage() {} func (*PluginGenerator) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{96} + return fileDescriptor_030104ce3b95bcac, []int{98} } func (m *PluginGenerator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2760,7 +2816,7 @@ var xxx_messageInfo_PluginGenerator proto.InternalMessageInfo func (m *PluginInput) Reset() { *m = PluginInput{} } func (*PluginInput) ProtoMessage() {} func (*PluginInput) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{97} + return fileDescriptor_030104ce3b95bcac, []int{99} } func (m *PluginInput) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2788,7 +2844,7 @@ var xxx_messageInfo_PluginInput proto.InternalMessageInfo func (m *ProjectRole) Reset() { *m = ProjectRole{} } func (*ProjectRole) ProtoMessage() {} func (*ProjectRole) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{98} + return fileDescriptor_030104ce3b95bcac, []int{100} } func (m *ProjectRole) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2816,7 +2872,7 @@ var xxx_messageInfo_ProjectRole proto.InternalMessageInfo func (m *PullRequestGenerator) Reset() { *m = PullRequestGenerator{} } func (*PullRequestGenerator) ProtoMessage() {} func (*PullRequestGenerator) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{99} + return fileDescriptor_030104ce3b95bcac, []int{101} } func (m *PullRequestGenerator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2844,7 +2900,7 @@ var xxx_messageInfo_PullRequestGenerator proto.InternalMessageInfo func (m *PullRequestGeneratorAzureDevOps) Reset() { *m = PullRequestGeneratorAzureDevOps{} } func (*PullRequestGeneratorAzureDevOps) ProtoMessage() {} func (*PullRequestGeneratorAzureDevOps) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{100} + return fileDescriptor_030104ce3b95bcac, []int{102} } func (m *PullRequestGeneratorAzureDevOps) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2872,7 +2928,7 @@ var xxx_messageInfo_PullRequestGeneratorAzureDevOps proto.InternalMessageInfo func (m *PullRequestGeneratorBitbucket) Reset() { *m = PullRequestGeneratorBitbucket{} } func (*PullRequestGeneratorBitbucket) ProtoMessage() {} func (*PullRequestGeneratorBitbucket) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{101} + return fileDescriptor_030104ce3b95bcac, []int{103} } func (m *PullRequestGeneratorBitbucket) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2900,7 +2956,7 @@ var xxx_messageInfo_PullRequestGeneratorBitbucket proto.InternalMessageInfo func (m *PullRequestGeneratorBitbucketServer) Reset() { *m = PullRequestGeneratorBitbucketServer{} } func (*PullRequestGeneratorBitbucketServer) ProtoMessage() {} func (*PullRequestGeneratorBitbucketServer) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{102} + return fileDescriptor_030104ce3b95bcac, []int{104} } func (m *PullRequestGeneratorBitbucketServer) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2928,7 +2984,7 @@ var xxx_messageInfo_PullRequestGeneratorBitbucketServer proto.InternalMessageInf func (m *PullRequestGeneratorFilter) Reset() { *m = PullRequestGeneratorFilter{} } func (*PullRequestGeneratorFilter) ProtoMessage() {} func (*PullRequestGeneratorFilter) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{103} + return fileDescriptor_030104ce3b95bcac, []int{105} } func (m *PullRequestGeneratorFilter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2956,7 +3012,7 @@ var xxx_messageInfo_PullRequestGeneratorFilter proto.InternalMessageInfo func (m *PullRequestGeneratorGitLab) Reset() { *m = PullRequestGeneratorGitLab{} } func (*PullRequestGeneratorGitLab) ProtoMessage() {} func (*PullRequestGeneratorGitLab) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{104} + return fileDescriptor_030104ce3b95bcac, []int{106} } func (m *PullRequestGeneratorGitLab) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2984,7 +3040,7 @@ var xxx_messageInfo_PullRequestGeneratorGitLab proto.InternalMessageInfo func (m *PullRequestGeneratorGitea) Reset() { *m = PullRequestGeneratorGitea{} } func (*PullRequestGeneratorGitea) ProtoMessage() {} func (*PullRequestGeneratorGitea) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{105} + return fileDescriptor_030104ce3b95bcac, []int{107} } func (m *PullRequestGeneratorGitea) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3012,7 +3068,7 @@ var xxx_messageInfo_PullRequestGeneratorGitea proto.InternalMessageInfo func (m *PullRequestGeneratorGithub) Reset() { *m = PullRequestGeneratorGithub{} } func (*PullRequestGeneratorGithub) ProtoMessage() {} func (*PullRequestGeneratorGithub) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{106} + return fileDescriptor_030104ce3b95bcac, []int{108} } func (m *PullRequestGeneratorGithub) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3040,7 +3096,7 @@ var xxx_messageInfo_PullRequestGeneratorGithub proto.InternalMessageInfo func (m *RefTarget) Reset() { *m = RefTarget{} } func (*RefTarget) ProtoMessage() {} func (*RefTarget) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{107} + return fileDescriptor_030104ce3b95bcac, []int{109} } func (m *RefTarget) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3068,7 +3124,7 @@ var xxx_messageInfo_RefTarget proto.InternalMessageInfo func (m *RepoCreds) Reset() { *m = RepoCreds{} } func (*RepoCreds) ProtoMessage() {} func (*RepoCreds) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{108} + return fileDescriptor_030104ce3b95bcac, []int{110} } func (m *RepoCreds) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3096,7 +3152,7 @@ var xxx_messageInfo_RepoCreds proto.InternalMessageInfo func (m *RepoCredsList) Reset() { *m = RepoCredsList{} } func (*RepoCredsList) ProtoMessage() {} func (*RepoCredsList) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{109} + return fileDescriptor_030104ce3b95bcac, []int{111} } func (m *RepoCredsList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3124,7 +3180,7 @@ var xxx_messageInfo_RepoCredsList proto.InternalMessageInfo func (m *Repository) Reset() { *m = Repository{} } func (*Repository) ProtoMessage() {} func (*Repository) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{110} + return fileDescriptor_030104ce3b95bcac, []int{112} } func (m *Repository) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3152,7 +3208,7 @@ var xxx_messageInfo_Repository proto.InternalMessageInfo func (m *RepositoryCertificate) Reset() { *m = RepositoryCertificate{} } func (*RepositoryCertificate) ProtoMessage() {} func (*RepositoryCertificate) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{111} + return fileDescriptor_030104ce3b95bcac, []int{113} } func (m *RepositoryCertificate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3180,7 +3236,7 @@ var xxx_messageInfo_RepositoryCertificate proto.InternalMessageInfo func (m *RepositoryCertificateList) Reset() { *m = RepositoryCertificateList{} } func (*RepositoryCertificateList) ProtoMessage() {} func (*RepositoryCertificateList) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{112} + return fileDescriptor_030104ce3b95bcac, []int{114} } func (m *RepositoryCertificateList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3208,7 +3264,7 @@ var xxx_messageInfo_RepositoryCertificateList proto.InternalMessageInfo func (m *RepositoryList) Reset() { *m = RepositoryList{} } func (*RepositoryList) ProtoMessage() {} func (*RepositoryList) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{113} + return fileDescriptor_030104ce3b95bcac, []int{115} } func (m *RepositoryList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3236,7 +3292,7 @@ var xxx_messageInfo_RepositoryList proto.InternalMessageInfo func (m *ResourceAction) Reset() { *m = ResourceAction{} } func (*ResourceAction) ProtoMessage() {} func (*ResourceAction) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{114} + return fileDescriptor_030104ce3b95bcac, []int{116} } func (m *ResourceAction) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3264,7 +3320,7 @@ var xxx_messageInfo_ResourceAction proto.InternalMessageInfo func (m *ResourceActionDefinition) Reset() { *m = ResourceActionDefinition{} } func (*ResourceActionDefinition) ProtoMessage() {} func (*ResourceActionDefinition) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{115} + return fileDescriptor_030104ce3b95bcac, []int{117} } func (m *ResourceActionDefinition) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3292,7 +3348,7 @@ var xxx_messageInfo_ResourceActionDefinition proto.InternalMessageInfo func (m *ResourceActionParam) Reset() { *m = ResourceActionParam{} } func (*ResourceActionParam) ProtoMessage() {} func (*ResourceActionParam) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{116} + return fileDescriptor_030104ce3b95bcac, []int{118} } func (m *ResourceActionParam) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3320,7 +3376,7 @@ var xxx_messageInfo_ResourceActionParam proto.InternalMessageInfo func (m *ResourceActions) Reset() { *m = ResourceActions{} } func (*ResourceActions) ProtoMessage() {} func (*ResourceActions) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{117} + return fileDescriptor_030104ce3b95bcac, []int{119} } func (m *ResourceActions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3348,7 +3404,7 @@ var xxx_messageInfo_ResourceActions proto.InternalMessageInfo func (m *ResourceDiff) Reset() { *m = ResourceDiff{} } func (*ResourceDiff) ProtoMessage() {} func (*ResourceDiff) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{118} + return fileDescriptor_030104ce3b95bcac, []int{120} } func (m *ResourceDiff) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3376,7 +3432,7 @@ var xxx_messageInfo_ResourceDiff proto.InternalMessageInfo func (m *ResourceIgnoreDifferences) Reset() { *m = ResourceIgnoreDifferences{} } func (*ResourceIgnoreDifferences) ProtoMessage() {} func (*ResourceIgnoreDifferences) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{119} + return fileDescriptor_030104ce3b95bcac, []int{121} } func (m *ResourceIgnoreDifferences) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3404,7 +3460,7 @@ var xxx_messageInfo_ResourceIgnoreDifferences proto.InternalMessageInfo func (m *ResourceNetworkingInfo) Reset() { *m = ResourceNetworkingInfo{} } func (*ResourceNetworkingInfo) ProtoMessage() {} func (*ResourceNetworkingInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{120} + return fileDescriptor_030104ce3b95bcac, []int{122} } func (m *ResourceNetworkingInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3432,7 +3488,7 @@ var xxx_messageInfo_ResourceNetworkingInfo proto.InternalMessageInfo func (m *ResourceNode) Reset() { *m = ResourceNode{} } func (*ResourceNode) ProtoMessage() {} func (*ResourceNode) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{121} + return fileDescriptor_030104ce3b95bcac, []int{123} } func (m *ResourceNode) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3460,7 +3516,7 @@ var xxx_messageInfo_ResourceNode proto.InternalMessageInfo func (m *ResourceOverride) Reset() { *m = ResourceOverride{} } func (*ResourceOverride) ProtoMessage() {} func (*ResourceOverride) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{122} + return fileDescriptor_030104ce3b95bcac, []int{124} } func (m *ResourceOverride) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3488,7 +3544,7 @@ var xxx_messageInfo_ResourceOverride proto.InternalMessageInfo func (m *ResourceRef) Reset() { *m = ResourceRef{} } func (*ResourceRef) ProtoMessage() {} func (*ResourceRef) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{123} + return fileDescriptor_030104ce3b95bcac, []int{125} } func (m *ResourceRef) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3516,7 +3572,7 @@ var xxx_messageInfo_ResourceRef proto.InternalMessageInfo func (m *ResourceResult) Reset() { *m = ResourceResult{} } func (*ResourceResult) ProtoMessage() {} func (*ResourceResult) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{124} + return fileDescriptor_030104ce3b95bcac, []int{126} } func (m *ResourceResult) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3544,7 +3600,7 @@ var xxx_messageInfo_ResourceResult proto.InternalMessageInfo func (m *ResourceStatus) Reset() { *m = ResourceStatus{} } func (*ResourceStatus) ProtoMessage() {} func (*ResourceStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{125} + return fileDescriptor_030104ce3b95bcac, []int{127} } func (m *ResourceStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3572,7 +3628,7 @@ var xxx_messageInfo_ResourceStatus proto.InternalMessageInfo func (m *RetryStrategy) Reset() { *m = RetryStrategy{} } func (*RetryStrategy) ProtoMessage() {} func (*RetryStrategy) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{126} + return fileDescriptor_030104ce3b95bcac, []int{128} } func (m *RetryStrategy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3600,7 +3656,7 @@ var xxx_messageInfo_RetryStrategy proto.InternalMessageInfo func (m *RevisionHistory) Reset() { *m = RevisionHistory{} } func (*RevisionHistory) ProtoMessage() {} func (*RevisionHistory) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{127} + return fileDescriptor_030104ce3b95bcac, []int{129} } func (m *RevisionHistory) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3628,7 +3684,7 @@ var xxx_messageInfo_RevisionHistory proto.InternalMessageInfo func (m *RevisionMetadata) Reset() { *m = RevisionMetadata{} } func (*RevisionMetadata) ProtoMessage() {} func (*RevisionMetadata) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{128} + return fileDescriptor_030104ce3b95bcac, []int{130} } func (m *RevisionMetadata) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3656,7 +3712,7 @@ var xxx_messageInfo_RevisionMetadata proto.InternalMessageInfo func (m *SCMProviderGenerator) Reset() { *m = SCMProviderGenerator{} } func (*SCMProviderGenerator) ProtoMessage() {} func (*SCMProviderGenerator) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{129} + return fileDescriptor_030104ce3b95bcac, []int{131} } func (m *SCMProviderGenerator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3684,7 +3740,7 @@ var xxx_messageInfo_SCMProviderGenerator proto.InternalMessageInfo func (m *SCMProviderGeneratorAWSCodeCommit) Reset() { *m = SCMProviderGeneratorAWSCodeCommit{} } func (*SCMProviderGeneratorAWSCodeCommit) ProtoMessage() {} func (*SCMProviderGeneratorAWSCodeCommit) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{130} + return fileDescriptor_030104ce3b95bcac, []int{132} } func (m *SCMProviderGeneratorAWSCodeCommit) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3712,7 +3768,7 @@ var xxx_messageInfo_SCMProviderGeneratorAWSCodeCommit proto.InternalMessageInfo func (m *SCMProviderGeneratorAzureDevOps) Reset() { *m = SCMProviderGeneratorAzureDevOps{} } func (*SCMProviderGeneratorAzureDevOps) ProtoMessage() {} func (*SCMProviderGeneratorAzureDevOps) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{131} + return fileDescriptor_030104ce3b95bcac, []int{133} } func (m *SCMProviderGeneratorAzureDevOps) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3740,7 +3796,7 @@ var xxx_messageInfo_SCMProviderGeneratorAzureDevOps proto.InternalMessageInfo func (m *SCMProviderGeneratorBitbucket) Reset() { *m = SCMProviderGeneratorBitbucket{} } func (*SCMProviderGeneratorBitbucket) ProtoMessage() {} func (*SCMProviderGeneratorBitbucket) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{132} + return fileDescriptor_030104ce3b95bcac, []int{134} } func (m *SCMProviderGeneratorBitbucket) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3768,7 +3824,7 @@ var xxx_messageInfo_SCMProviderGeneratorBitbucket proto.InternalMessageInfo func (m *SCMProviderGeneratorBitbucketServer) Reset() { *m = SCMProviderGeneratorBitbucketServer{} } func (*SCMProviderGeneratorBitbucketServer) ProtoMessage() {} func (*SCMProviderGeneratorBitbucketServer) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{133} + return fileDescriptor_030104ce3b95bcac, []int{135} } func (m *SCMProviderGeneratorBitbucketServer) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3796,7 +3852,7 @@ var xxx_messageInfo_SCMProviderGeneratorBitbucketServer proto.InternalMessageInf func (m *SCMProviderGeneratorFilter) Reset() { *m = SCMProviderGeneratorFilter{} } func (*SCMProviderGeneratorFilter) ProtoMessage() {} func (*SCMProviderGeneratorFilter) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{134} + return fileDescriptor_030104ce3b95bcac, []int{136} } func (m *SCMProviderGeneratorFilter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3824,7 +3880,7 @@ var xxx_messageInfo_SCMProviderGeneratorFilter proto.InternalMessageInfo func (m *SCMProviderGeneratorGitea) Reset() { *m = SCMProviderGeneratorGitea{} } func (*SCMProviderGeneratorGitea) ProtoMessage() {} func (*SCMProviderGeneratorGitea) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{135} + return fileDescriptor_030104ce3b95bcac, []int{137} } func (m *SCMProviderGeneratorGitea) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3852,7 +3908,7 @@ var xxx_messageInfo_SCMProviderGeneratorGitea proto.InternalMessageInfo func (m *SCMProviderGeneratorGithub) Reset() { *m = SCMProviderGeneratorGithub{} } func (*SCMProviderGeneratorGithub) ProtoMessage() {} func (*SCMProviderGeneratorGithub) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{136} + return fileDescriptor_030104ce3b95bcac, []int{138} } func (m *SCMProviderGeneratorGithub) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3880,7 +3936,7 @@ var xxx_messageInfo_SCMProviderGeneratorGithub proto.InternalMessageInfo func (m *SCMProviderGeneratorGitlab) Reset() { *m = SCMProviderGeneratorGitlab{} } func (*SCMProviderGeneratorGitlab) ProtoMessage() {} func (*SCMProviderGeneratorGitlab) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{137} + return fileDescriptor_030104ce3b95bcac, []int{139} } func (m *SCMProviderGeneratorGitlab) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3908,7 +3964,7 @@ var xxx_messageInfo_SCMProviderGeneratorGitlab proto.InternalMessageInfo func (m *SecretRef) Reset() { *m = SecretRef{} } func (*SecretRef) ProtoMessage() {} func (*SecretRef) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{138} + return fileDescriptor_030104ce3b95bcac, []int{140} } func (m *SecretRef) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3936,7 +3992,7 @@ var xxx_messageInfo_SecretRef proto.InternalMessageInfo func (m *SignatureKey) Reset() { *m = SignatureKey{} } func (*SignatureKey) ProtoMessage() {} func (*SignatureKey) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{139} + return fileDescriptor_030104ce3b95bcac, []int{141} } func (m *SignatureKey) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3961,10 +4017,38 @@ func (m *SignatureKey) XXX_DiscardUnknown() { var xxx_messageInfo_SignatureKey proto.InternalMessageInfo +func (m *SourceHydrator) Reset() { *m = SourceHydrator{} } +func (*SourceHydrator) ProtoMessage() {} +func (*SourceHydrator) Descriptor() ([]byte, []int) { + return fileDescriptor_030104ce3b95bcac, []int{142} +} +func (m *SourceHydrator) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SourceHydrator) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *SourceHydrator) XXX_Merge(src proto.Message) { + xxx_messageInfo_SourceHydrator.Merge(m, src) +} +func (m *SourceHydrator) XXX_Size() int { + return m.Size() +} +func (m *SourceHydrator) XXX_DiscardUnknown() { + xxx_messageInfo_SourceHydrator.DiscardUnknown(m) +} + +var xxx_messageInfo_SourceHydrator proto.InternalMessageInfo + func (m *SyncOperation) Reset() { *m = SyncOperation{} } func (*SyncOperation) ProtoMessage() {} func (*SyncOperation) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{140} + return fileDescriptor_030104ce3b95bcac, []int{143} } func (m *SyncOperation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3992,7 +4076,7 @@ var xxx_messageInfo_SyncOperation proto.InternalMessageInfo func (m *SyncOperationResource) Reset() { *m = SyncOperationResource{} } func (*SyncOperationResource) ProtoMessage() {} func (*SyncOperationResource) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{141} + return fileDescriptor_030104ce3b95bcac, []int{144} } func (m *SyncOperationResource) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4020,7 +4104,7 @@ var xxx_messageInfo_SyncOperationResource proto.InternalMessageInfo func (m *SyncOperationResult) Reset() { *m = SyncOperationResult{} } func (*SyncOperationResult) ProtoMessage() {} func (*SyncOperationResult) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{142} + return fileDescriptor_030104ce3b95bcac, []int{145} } func (m *SyncOperationResult) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4048,7 +4132,7 @@ var xxx_messageInfo_SyncOperationResult proto.InternalMessageInfo func (m *SyncPolicy) Reset() { *m = SyncPolicy{} } func (*SyncPolicy) ProtoMessage() {} func (*SyncPolicy) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{143} + return fileDescriptor_030104ce3b95bcac, []int{146} } func (m *SyncPolicy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4076,7 +4160,7 @@ var xxx_messageInfo_SyncPolicy proto.InternalMessageInfo func (m *SyncPolicyAutomated) Reset() { *m = SyncPolicyAutomated{} } func (*SyncPolicyAutomated) ProtoMessage() {} func (*SyncPolicyAutomated) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{144} + return fileDescriptor_030104ce3b95bcac, []int{147} } func (m *SyncPolicyAutomated) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4101,10 +4185,38 @@ func (m *SyncPolicyAutomated) XXX_DiscardUnknown() { var xxx_messageInfo_SyncPolicyAutomated proto.InternalMessageInfo +func (m *SyncSource) Reset() { *m = SyncSource{} } +func (*SyncSource) ProtoMessage() {} +func (*SyncSource) Descriptor() ([]byte, []int) { + return fileDescriptor_030104ce3b95bcac, []int{148} +} +func (m *SyncSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SyncSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *SyncSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_SyncSource.Merge(m, src) +} +func (m *SyncSource) XXX_Size() int { + return m.Size() +} +func (m *SyncSource) XXX_DiscardUnknown() { + xxx_messageInfo_SyncSource.DiscardUnknown(m) +} + +var xxx_messageInfo_SyncSource proto.InternalMessageInfo + func (m *SyncStatus) Reset() { *m = SyncStatus{} } func (*SyncStatus) ProtoMessage() {} func (*SyncStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{145} + return fileDescriptor_030104ce3b95bcac, []int{149} } func (m *SyncStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4132,7 +4244,7 @@ var xxx_messageInfo_SyncStatus proto.InternalMessageInfo func (m *SyncStrategy) Reset() { *m = SyncStrategy{} } func (*SyncStrategy) ProtoMessage() {} func (*SyncStrategy) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{146} + return fileDescriptor_030104ce3b95bcac, []int{150} } func (m *SyncStrategy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4160,7 +4272,7 @@ var xxx_messageInfo_SyncStrategy proto.InternalMessageInfo func (m *SyncStrategyApply) Reset() { *m = SyncStrategyApply{} } func (*SyncStrategyApply) ProtoMessage() {} func (*SyncStrategyApply) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{147} + return fileDescriptor_030104ce3b95bcac, []int{151} } func (m *SyncStrategyApply) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4188,7 +4300,7 @@ var xxx_messageInfo_SyncStrategyApply proto.InternalMessageInfo func (m *SyncStrategyHook) Reset() { *m = SyncStrategyHook{} } func (*SyncStrategyHook) ProtoMessage() {} func (*SyncStrategyHook) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{148} + return fileDescriptor_030104ce3b95bcac, []int{152} } func (m *SyncStrategyHook) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4216,7 +4328,7 @@ var xxx_messageInfo_SyncStrategyHook proto.InternalMessageInfo func (m *SyncWindow) Reset() { *m = SyncWindow{} } func (*SyncWindow) ProtoMessage() {} func (*SyncWindow) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{149} + return fileDescriptor_030104ce3b95bcac, []int{153} } func (m *SyncWindow) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4244,7 +4356,7 @@ var xxx_messageInfo_SyncWindow proto.InternalMessageInfo func (m *TLSClientConfig) Reset() { *m = TLSClientConfig{} } func (*TLSClientConfig) ProtoMessage() {} func (*TLSClientConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{150} + return fileDescriptor_030104ce3b95bcac, []int{154} } func (m *TLSClientConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4272,7 +4384,7 @@ var xxx_messageInfo_TLSClientConfig proto.InternalMessageInfo func (m *TagFilter) Reset() { *m = TagFilter{} } func (*TagFilter) ProtoMessage() {} func (*TagFilter) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{151} + return fileDescriptor_030104ce3b95bcac, []int{155} } func (m *TagFilter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4360,6 +4472,7 @@ func init() { proto.RegisterType((*ComponentParameter)(nil), "jackfan.us.kg.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.ComponentParameter") proto.RegisterType((*ConfigManagementPlugin)(nil), "jackfan.us.kg.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.ConfigManagementPlugin") proto.RegisterType((*ConnectionState)(nil), "jackfan.us.kg.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.ConnectionState") + proto.RegisterType((*DrySource)(nil), "jackfan.us.kg.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.DrySource") proto.RegisterType((*DuckTypeGenerator)(nil), "jackfan.us.kg.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.DuckTypeGenerator") proto.RegisterMapType((map[string]string)(nil), "jackfan.us.kg.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.DuckTypeGenerator.ValuesEntry") proto.RegisterType((*EnvEntry)(nil), "jackfan.us.kg.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.EnvEntry") @@ -4378,6 +4491,7 @@ func init() { proto.RegisterType((*HelmParameter)(nil), "jackfan.us.kg.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.HelmParameter") proto.RegisterType((*HostInfo)(nil), "jackfan.us.kg.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.HostInfo") proto.RegisterType((*HostResourceInfo)(nil), "jackfan.us.kg.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.HostResourceInfo") + proto.RegisterType((*HydrateTo)(nil), "jackfan.us.kg.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.HydrateTo") proto.RegisterType((*Info)(nil), "jackfan.us.kg.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.Info") proto.RegisterType((*InfoItem)(nil), "jackfan.us.kg.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.InfoItem") proto.RegisterType((*JWTToken)(nil), "jackfan.us.kg.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.JWTToken") @@ -4458,11 +4572,13 @@ func init() { proto.RegisterType((*SCMProviderGeneratorGitlab)(nil), "jackfan.us.kg.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.SCMProviderGeneratorGitlab") proto.RegisterType((*SecretRef)(nil), "jackfan.us.kg.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.SecretRef") proto.RegisterType((*SignatureKey)(nil), "jackfan.us.kg.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.SignatureKey") + proto.RegisterType((*SourceHydrator)(nil), "jackfan.us.kg.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.SourceHydrator") proto.RegisterType((*SyncOperation)(nil), "jackfan.us.kg.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.SyncOperation") proto.RegisterType((*SyncOperationResource)(nil), "jackfan.us.kg.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.SyncOperationResource") proto.RegisterType((*SyncOperationResult)(nil), "jackfan.us.kg.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.SyncOperationResult") proto.RegisterType((*SyncPolicy)(nil), "jackfan.us.kg.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.SyncPolicy") proto.RegisterType((*SyncPolicyAutomated)(nil), "jackfan.us.kg.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.SyncPolicyAutomated") + proto.RegisterType((*SyncSource)(nil), "jackfan.us.kg.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.SyncSource") proto.RegisterType((*SyncStatus)(nil), "jackfan.us.kg.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.SyncStatus") proto.RegisterType((*SyncStrategy)(nil), "jackfan.us.kg.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.SyncStrategy") proto.RegisterType((*SyncStrategyApply)(nil), "jackfan.us.kg.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.SyncStrategyApply") @@ -4477,698 +4593,707 @@ func init() { } var fileDescriptor_030104ce3b95bcac = []byte{ - // 11054 bytes of a gzipped FileDescriptorProto + // 11192 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x6d, 0x70, 0x24, 0xc7, 0x75, 0x98, 0x66, 0x17, 0x0b, 0xec, 0x3e, 0x7c, 0xdc, 0x5d, 0xdf, 0x1d, 0x09, 0x9e, 0x48, 0xe2, - 0x3c, 0xb4, 0x29, 0x2a, 0x22, 0x01, 0xf3, 0x44, 0xca, 0x8c, 0x68, 0x4b, 0xc6, 0x02, 0x77, 0x38, - 0xdc, 0x01, 0x07, 0xb0, 0x81, 0xbb, 0x93, 0x28, 0x53, 0xd4, 0x60, 0xb7, 0xb1, 0x98, 0xc3, 0xec, - 0xcc, 0x70, 0x66, 0x16, 0x07, 0xd0, 0x92, 0x2c, 0x59, 0xb2, 0xad, 0x44, 0x1f, 0x54, 0xa4, 0xa4, - 0x4c, 0x27, 0x96, 0x22, 0x5b, 0x4e, 0x2a, 0xae, 0x44, 0x15, 0x27, 0xf9, 0x11, 0x27, 0x4e, 0xca, - 0x65, 0x3b, 0x95, 0x52, 0x4a, 0x49, 0xd9, 0xe5, 0x72, 0x59, 0x4e, 0x62, 0x23, 0xd2, 0xa5, 0x52, - 0x49, 0xa5, 0x2a, 0xae, 0x72, 0xe2, 0x1f, 0xc9, 0x25, 0x3f, 0x52, 0xfd, 0xdd, 0x33, 0x3b, 0x0b, - 0x2c, 0x80, 0xc1, 0xdd, 0x49, 0xe6, 0xbf, 0xdd, 0x7e, 0x6f, 0xde, 0xeb, 0xe9, 0xe9, 0x7e, 0xef, - 0xf5, 0xeb, 0xf7, 0x5e, 0xc3, 0x42, 0xcb, 0x4d, 0x36, 0x3a, 0x6b, 0x93, 0x8d, 0xa0, 0x3d, 0xe5, - 0x44, 0xad, 0x20, 0x8c, 0x82, 0x5b, 0xec, 0xc7, 0x33, 0x8d, 0xe6, 0xd4, 0xd6, 0x85, 0xa9, 0x70, - 0xb3, 0x35, 0xe5, 0x84, 0x6e, 0x3c, 0xe5, 0x84, 0xa1, 0xe7, 0x36, 0x9c, 0xc4, 0x0d, 0xfc, 0xa9, - 0xad, 0x67, 0x1d, 0x2f, 0xdc, 0x70, 0x9e, 0x9d, 0x6a, 0x11, 0x9f, 0x44, 0x4e, 0x42, 0x9a, 0x93, - 0x61, 0x14, 0x24, 0x01, 0xfa, 0x51, 0x4d, 0x6d, 0x52, 0x52, 0x63, 0x3f, 0x5e, 0x6d, 0x34, 0x27, - 0xb7, 0x2e, 0x4c, 0x86, 0x9b, 0xad, 0x49, 0x4a, 0x6d, 0xd2, 0xa0, 0x36, 0x29, 0xa9, 0x9d, 0x7b, - 0xc6, 0xe8, 0x4b, 0x2b, 0x68, 0x05, 0x53, 0x8c, 0xe8, 0x5a, 0x67, 0x9d, 0xfd, 0x63, 0x7f, 0xd8, - 0x2f, 0xce, 0xec, 0x9c, 0xbd, 0xf9, 0x42, 0x3c, 0xe9, 0x06, 0xb4, 0x7b, 0x53, 0x8d, 0x20, 0x22, - 0x53, 0x5b, 0x5d, 0x1d, 0x3a, 0x77, 0x59, 0xe3, 0x90, 0xed, 0x84, 0xf8, 0xb1, 0x1b, 0xf8, 0xf1, - 0x33, 0xb4, 0x0b, 0x24, 0xda, 0x22, 0x91, 0xf9, 0x7a, 0x06, 0x42, 0x1e, 0xa5, 0xe7, 0x34, 0xa5, - 0xb6, 0xd3, 0xd8, 0x70, 0x7d, 0x12, 0xed, 0xe8, 0xc7, 0xdb, 0x24, 0x71, 0xf2, 0x9e, 0x9a, 0xea, - 0xf5, 0x54, 0xd4, 0xf1, 0x13, 0xb7, 0x4d, 0xba, 0x1e, 0x78, 0xcf, 0x7e, 0x0f, 0xc4, 0x8d, 0x0d, - 0xd2, 0x76, 0xba, 0x9e, 0x7b, 0x77, 0xaf, 0xe7, 0x3a, 0x89, 0xeb, 0x4d, 0xb9, 0x7e, 0x12, 0x27, - 0x51, 0xf6, 0x21, 0xfb, 0x17, 0x2d, 0x18, 0x9d, 0xbe, 0xb9, 0x32, 0xdd, 0x49, 0x36, 0x66, 0x02, - 0x7f, 0xdd, 0x6d, 0xa1, 0xe7, 0x61, 0xb8, 0xe1, 0x75, 0xe2, 0x84, 0x44, 0xd7, 0x9c, 0x36, 0x19, - 0xb7, 0xce, 0x5b, 0x4f, 0xd5, 0xea, 0xa7, 0xbf, 0xb9, 0x3b, 0xf1, 0xb6, 0x3b, 0xbb, 0x13, 0xc3, - 0x33, 0x1a, 0x84, 0x4d, 0x3c, 0xf4, 0x4e, 0x18, 0x8a, 0x02, 0x8f, 0x4c, 0xe3, 0x6b, 0xe3, 0x25, - 0xf6, 0xc8, 0x09, 0xf1, 0xc8, 0x10, 0xe6, 0xcd, 0x58, 0xc2, 0x29, 0x6a, 0x18, 0x05, 0xeb, 0xae, - 0x47, 0xc6, 0xcb, 0x69, 0xd4, 0x65, 0xde, 0x8c, 0x25, 0xdc, 0xfe, 0xc3, 0x12, 0xc0, 0x74, 0x18, - 0x2e, 0x47, 0xc1, 0x2d, 0xd2, 0x48, 0xd0, 0x47, 0xa0, 0x4a, 0x87, 0xb9, 0xe9, 0x24, 0x0e, 0xeb, - 0xd8, 0xf0, 0x85, 0x1f, 0x9e, 0xe4, 0x6f, 0x3d, 0x69, 0xbe, 0xb5, 0x9e, 0x64, 0x14, 0x7b, 0x72, - 0xeb, 0xd9, 0xc9, 0xa5, 0x35, 0xfa, 0xfc, 0x22, 0x49, 0x9c, 0x3a, 0x12, 0xcc, 0x40, 0xb7, 0x61, - 0x45, 0x15, 0xf9, 0x30, 0x10, 0x87, 0xa4, 0xc1, 0xde, 0x61, 0xf8, 0xc2, 0xc2, 0xe4, 0x51, 0x66, - 0xf3, 0xa4, 0xee, 0xf9, 0x4a, 0x48, 0x1a, 0xf5, 0x11, 0xc1, 0x79, 0x80, 0xfe, 0xc3, 0x8c, 0x0f, - 0xda, 0x82, 0xc1, 0x38, 0x71, 0x92, 0x4e, 0xcc, 0x86, 0x62, 0xf8, 0xc2, 0xb5, 0xc2, 0x38, 0x32, - 0xaa, 0xf5, 0x31, 0xc1, 0x73, 0x90, 0xff, 0xc7, 0x82, 0x9b, 0xfd, 0x27, 0x16, 0x8c, 0x69, 0xe4, - 0x05, 0x37, 0x4e, 0xd0, 0x4f, 0x74, 0x0d, 0xee, 0x64, 0x7f, 0x83, 0x4b, 0x9f, 0x66, 0x43, 0x7b, - 0x52, 0x30, 0xab, 0xca, 0x16, 0x63, 0x60, 0xdb, 0x50, 0x71, 0x13, 0xd2, 0x8e, 0xc7, 0x4b, 0xe7, - 0xcb, 0x4f, 0x0d, 0x5f, 0xb8, 0x5c, 0xd4, 0x7b, 0xd6, 0x47, 0x05, 0xd3, 0xca, 0x3c, 0x25, 0x8f, - 0x39, 0x17, 0xfb, 0x57, 0x47, 0xcc, 0xf7, 0xa3, 0x03, 0x8e, 0x9e, 0x85, 0xe1, 0x38, 0xe8, 0x44, - 0x0d, 0x82, 0x49, 0x18, 0xc4, 0xe3, 0xd6, 0xf9, 0x32, 0x9d, 0x7a, 0x74, 0x52, 0xaf, 0xe8, 0x66, - 0x6c, 0xe2, 0xa0, 0x2f, 0x58, 0x30, 0xd2, 0x24, 0x71, 0xe2, 0xfa, 0x8c, 0xbf, 0xec, 0xfc, 0xea, - 0x91, 0x3b, 0x2f, 0x1b, 0x67, 0x35, 0xf1, 0xfa, 0x19, 0xf1, 0x22, 0x23, 0x46, 0x63, 0x8c, 0x53, - 0xfc, 0xe9, 0xe2, 0x6c, 0x92, 0xb8, 0x11, 0xb9, 0x21, 0xfd, 0x2f, 0x96, 0x8f, 0x5a, 0x9c, 0xb3, - 0x1a, 0x84, 0x4d, 0x3c, 0xe4, 0x43, 0x85, 0x2e, 0xbe, 0x78, 0x7c, 0x80, 0xf5, 0x7f, 0xfe, 0x68, - 0xfd, 0x17, 0x83, 0x4a, 0xd7, 0xb5, 0x1e, 0x7d, 0xfa, 0x2f, 0xc6, 0x9c, 0x0d, 0xfa, 0xbc, 0x05, - 0xe3, 0x42, 0x38, 0x60, 0xc2, 0x07, 0xf4, 0xe6, 0x86, 0x9b, 0x10, 0xcf, 0x8d, 0x93, 0xf1, 0x0a, - 0xeb, 0xc3, 0x54, 0x7f, 0x73, 0x6b, 0x2e, 0x0a, 0x3a, 0xe1, 0x55, 0xd7, 0x6f, 0xd6, 0xcf, 0x0b, - 0x4e, 0xe3, 0x33, 0x3d, 0x08, 0xe3, 0x9e, 0x2c, 0xd1, 0x97, 0x2d, 0x38, 0xe7, 0x3b, 0x6d, 0x12, - 0x87, 0x0e, 0xfd, 0xb4, 0x1c, 0x5c, 0xf7, 0x9c, 0xc6, 0x26, 0xeb, 0xd1, 0xe0, 0xe1, 0x7a, 0x64, - 0x8b, 0x1e, 0x9d, 0xbb, 0xd6, 0x93, 0x34, 0xde, 0x83, 0x2d, 0xfa, 0xba, 0x05, 0xa7, 0x82, 0x28, - 0xdc, 0x70, 0x7c, 0xd2, 0x94, 0xd0, 0x78, 0x7c, 0x88, 0x2d, 0xbd, 0x0f, 0x1f, 0xed, 0x13, 0x2d, - 0x65, 0xc9, 0x2e, 0x06, 0xbe, 0x9b, 0x04, 0xd1, 0x0a, 0x49, 0x12, 0xd7, 0x6f, 0xc5, 0xf5, 0xb3, - 0x77, 0x76, 0x27, 0x4e, 0x75, 0x61, 0xe1, 0xee, 0xfe, 0xa0, 0x9f, 0x84, 0xe1, 0x78, 0xc7, 0x6f, - 0xdc, 0x74, 0xfd, 0x66, 0x70, 0x3b, 0x1e, 0xaf, 0x16, 0xb1, 0x7c, 0x57, 0x14, 0x41, 0xb1, 0x00, - 0x35, 0x03, 0x6c, 0x72, 0xcb, 0xff, 0x70, 0x7a, 0x2a, 0xd5, 0x8a, 0xfe, 0x70, 0x7a, 0x32, 0xed, - 0xc1, 0x16, 0xfd, 0x9c, 0x05, 0xa3, 0xb1, 0xdb, 0xf2, 0x9d, 0xa4, 0x13, 0x91, 0xab, 0x64, 0x27, - 0x1e, 0x07, 0xd6, 0x91, 0x2b, 0x47, 0x1c, 0x15, 0x83, 0x64, 0xfd, 0xac, 0xe8, 0xe3, 0xa8, 0xd9, - 0x1a, 0xe3, 0x34, 0xdf, 0xbc, 0x85, 0xa6, 0xa7, 0xf5, 0x70, 0xb1, 0x0b, 0x4d, 0x4f, 0xea, 0x9e, - 0x2c, 0xd1, 0x8f, 0xc3, 0x49, 0xde, 0xa4, 0x46, 0x36, 0x1e, 0x1f, 0x61, 0x82, 0xf6, 0xcc, 0x9d, - 0xdd, 0x89, 0x93, 0x2b, 0x19, 0x18, 0xee, 0xc2, 0x46, 0xaf, 0xc1, 0x44, 0x48, 0xa2, 0xb6, 0x9b, - 0x2c, 0xf9, 0xde, 0x8e, 0x14, 0xdf, 0x8d, 0x20, 0x24, 0x4d, 0xd1, 0x9d, 0x78, 0x7c, 0xf4, 0xbc, - 0xf5, 0x54, 0xb5, 0xfe, 0x0e, 0xd1, 0xcd, 0x89, 0xe5, 0xbd, 0xd1, 0xf1, 0x7e, 0xf4, 0xec, 0x7f, - 0x53, 0x82, 0x93, 0x59, 0xc5, 0x89, 0xfe, 0xae, 0x05, 0x27, 0x6e, 0xdd, 0x4e, 0x56, 0x83, 0x4d, - 0xe2, 0xc7, 0xf5, 0x1d, 0x2a, 0xde, 0x98, 0xca, 0x18, 0xbe, 0xd0, 0x28, 0x56, 0x45, 0x4f, 0x5e, - 0x49, 0x73, 0xb9, 0xe8, 0x27, 0xd1, 0x4e, 0xfd, 0x61, 0xf1, 0x76, 0x27, 0xae, 0xdc, 0x5c, 0x35, - 0xa1, 0x38, 0xdb, 0xa9, 0x73, 0x9f, 0xb5, 0xe0, 0x4c, 0x1e, 0x09, 0x74, 0x12, 0xca, 0x9b, 0x64, - 0x87, 0x1b, 0x70, 0x98, 0xfe, 0x44, 0xaf, 0x40, 0x65, 0xcb, 0xf1, 0x3a, 0x44, 0x58, 0x37, 0x73, - 0x47, 0x7b, 0x11, 0xd5, 0x33, 0xcc, 0xa9, 0xbe, 0xb7, 0xf4, 0x82, 0x65, 0xff, 0x6e, 0x19, 0x86, - 0x0d, 0xfd, 0x76, 0x0f, 0x2c, 0xb6, 0x20, 0x65, 0xb1, 0x2d, 0x16, 0xa6, 0x9a, 0x7b, 0x9a, 0x6c, - 0xb7, 0x33, 0x26, 0xdb, 0x52, 0x71, 0x2c, 0xf7, 0xb4, 0xd9, 0x50, 0x02, 0xb5, 0x20, 0xa4, 0xd6, - 0x3b, 0x55, 0xfd, 0x03, 0x45, 0x7c, 0xc2, 0x25, 0x49, 0xae, 0x3e, 0x7a, 0x67, 0x77, 0xa2, 0xa6, - 0xfe, 0x62, 0xcd, 0xc8, 0xfe, 0xb6, 0x05, 0x67, 0x8c, 0x3e, 0xce, 0x04, 0x7e, 0xd3, 0x65, 0x9f, - 0xf6, 0x3c, 0x0c, 0x24, 0x3b, 0xa1, 0xdc, 0x21, 0xa8, 0x91, 0x5a, 0xdd, 0x09, 0x09, 0x66, 0x10, - 0x6a, 0xe8, 0xb7, 0x49, 0x1c, 0x3b, 0x2d, 0x92, 0xdd, 0x13, 0x2c, 0xf2, 0x66, 0x2c, 0xe1, 0x28, - 0x02, 0xe4, 0x39, 0x71, 0xb2, 0x1a, 0x39, 0x7e, 0xcc, 0xc8, 0xaf, 0xba, 0x6d, 0x22, 0x06, 0xf8, - 0x2f, 0xf5, 0x37, 0x63, 0xe8, 0x13, 0xf5, 0x87, 0xee, 0xec, 0x4e, 0xa0, 0x85, 0x2e, 0x4a, 0x38, - 0x87, 0xba, 0xfd, 0x65, 0x0b, 0x1e, 0xca, 0xb7, 0xc5, 0xd0, 0x93, 0x30, 0xc8, 0xb7, 0x87, 0xe2, - 0xed, 0xf4, 0x27, 0x61, 0xad, 0x58, 0x40, 0xd1, 0x14, 0xd4, 0x94, 0x9e, 0x10, 0xef, 0x78, 0x4a, - 0xa0, 0xd6, 0xb4, 0x72, 0xd1, 0x38, 0x74, 0xd0, 0xe8, 0x1f, 0x61, 0xb9, 0xa9, 0x41, 0x63, 0xfb, - 0x29, 0x06, 0xb1, 0xff, 0x93, 0x05, 0x27, 0x8c, 0x5e, 0xdd, 0x03, 0xd3, 0xdc, 0x4f, 0x9b, 0xe6, - 0xf3, 0x85, 0xcd, 0xe7, 0x1e, 0xb6, 0xf9, 0xe7, 0x2d, 0x38, 0x67, 0x60, 0x2d, 0x3a, 0x49, 0x63, - 0xe3, 0xe2, 0x76, 0x18, 0x91, 0x98, 0x6e, 0xbd, 0xd1, 0x63, 0x86, 0xdc, 0xaa, 0x0f, 0x0b, 0x0a, - 0xe5, 0xab, 0x64, 0x87, 0x0b, 0xb1, 0xa7, 0xa1, 0xca, 0x27, 0x67, 0x10, 0x89, 0x11, 0x57, 0xef, - 0xb6, 0x24, 0xda, 0xb1, 0xc2, 0x40, 0x36, 0x0c, 0x32, 0xe1, 0x44, 0x17, 0x2b, 0x55, 0x43, 0x40, - 0x3f, 0xe2, 0x0d, 0xd6, 0x82, 0x05, 0xc4, 0x8e, 0x53, 0xdd, 0x59, 0x8e, 0x08, 0xfb, 0xb8, 0xcd, - 0x4b, 0x2e, 0xf1, 0x9a, 0x31, 0xdd, 0x36, 0x38, 0xbe, 0x1f, 0x24, 0x62, 0x07, 0x60, 0x6c, 0x1b, - 0xa6, 0x75, 0x33, 0x36, 0x71, 0x28, 0x53, 0xcf, 0x59, 0x23, 0x1e, 0x1f, 0x51, 0xc1, 0x74, 0x81, - 0xb5, 0x60, 0x01, 0xb1, 0xef, 0x94, 0xd8, 0x06, 0x45, 0x2d, 0x7d, 0x72, 0x2f, 0x76, 0xb7, 0x51, - 0x4a, 0x56, 0x2e, 0x17, 0x27, 0xb8, 0x48, 0xef, 0x1d, 0xee, 0xeb, 0x19, 0x71, 0x89, 0x0b, 0xe5, - 0xba, 0xf7, 0x2e, 0xf7, 0xb7, 0x4a, 0x30, 0x91, 0x7e, 0xa0, 0x4b, 0xda, 0xd2, 0x2d, 0x95, 0xc1, - 0x28, 0xeb, 0xef, 0x30, 0xf0, 0xb1, 0x89, 0xd7, 0x43, 0x60, 0x95, 0x8e, 0x53, 0x60, 0x99, 0xf2, - 0xb4, 0xbc, 0x8f, 0x3c, 0x7d, 0x52, 0x8d, 0xfa, 0x40, 0x46, 0x80, 0xa5, 0x75, 0xca, 0x79, 0x18, - 0x88, 0x13, 0x12, 0x8e, 0x57, 0xd2, 0xf2, 0x68, 0x25, 0x21, 0x21, 0x66, 0x10, 0xfb, 0xbf, 0x97, - 0xe0, 0xe1, 0xf4, 0x18, 0x6a, 0x15, 0xf0, 0xfe, 0x94, 0x0a, 0x78, 0x97, 0xa9, 0x02, 0xee, 0xee, - 0x4e, 0xbc, 0xbd, 0xc7, 0x63, 0xdf, 0x33, 0x1a, 0x02, 0xcd, 0x65, 0x46, 0x71, 0x2a, 0x3d, 0x8a, - 0x77, 0x77, 0x27, 0x1e, 0xeb, 0xf1, 0x8e, 0x99, 0x61, 0x7e, 0x12, 0x06, 0x23, 0xe2, 0xc4, 0x81, - 0x2f, 0x06, 0x5a, 0x7d, 0x0e, 0xcc, 0x5a, 0xb1, 0x80, 0xda, 0xbf, 0x5f, 0xcb, 0x0e, 0xf6, 0x1c, - 0x77, 0xd8, 0x05, 0x11, 0x72, 0x61, 0x80, 0x99, 0xf5, 0x5c, 0x34, 0x5c, 0x3d, 0xda, 0x32, 0xa2, - 0x6a, 0x40, 0x91, 0xae, 0x57, 0xe9, 0x57, 0xa3, 0x4d, 0x98, 0xb1, 0x40, 0xdb, 0x50, 0x6d, 0x48, - 0x6b, 0xbb, 0x54, 0x84, 0x5f, 0x4a, 0xd8, 0xda, 0x9a, 0xe3, 0x08, 0x95, 0xd7, 0xca, 0x44, 0x57, - 0xdc, 0x10, 0x81, 0x72, 0xcb, 0x4d, 0xc4, 0x67, 0x3d, 0xe2, 0x7e, 0x6a, 0xce, 0x35, 0x5e, 0x71, - 0x88, 0x2a, 0x91, 0x39, 0x37, 0xc1, 0x94, 0x3e, 0xfa, 0x19, 0x0b, 0x86, 0xe3, 0x46, 0x7b, 0x39, - 0x0a, 0xb6, 0xdc, 0x26, 0x89, 0x84, 0x35, 0x75, 0x44, 0xd1, 0xb4, 0x32, 0xb3, 0x28, 0x09, 0x6a, - 0xbe, 0x7c, 0x7f, 0xab, 0x21, 0xd8, 0xe4, 0x4b, 0x77, 0x19, 0x0f, 0x8b, 0x77, 0x9f, 0x25, 0x0d, - 0x97, 0xea, 0x3f, 0xb9, 0xa9, 0x62, 0x33, 0xe5, 0xc8, 0xd6, 0xe5, 0x6c, 0xa7, 0xb1, 0x49, 0xd7, - 0x9b, 0xee, 0xd0, 0xdb, 0xef, 0xec, 0x4e, 0x3c, 0x3c, 0x93, 0xcf, 0x13, 0xf7, 0xea, 0x0c, 0x1b, - 0xb0, 0xb0, 0xe3, 0x79, 0x98, 0xbc, 0xd6, 0x21, 0xcc, 0x65, 0x52, 0xc0, 0x80, 0x2d, 0x6b, 0x82, - 0x99, 0x01, 0x33, 0x20, 0xd8, 0xe4, 0x8b, 0x5e, 0x83, 0xc1, 0xb6, 0x93, 0x44, 0xee, 0xb6, 0xf0, - 0x93, 0x1c, 0xd1, 0xde, 0x5f, 0x64, 0xb4, 0x34, 0x73, 0xa6, 0xa9, 0x79, 0x23, 0x16, 0x8c, 0x50, - 0x1b, 0x2a, 0x6d, 0x12, 0xb5, 0xc8, 0x78, 0xb5, 0x08, 0x9f, 0xf0, 0x22, 0x25, 0xa5, 0x19, 0xd6, - 0xa8, 0x75, 0xc4, 0xda, 0x30, 0xe7, 0x82, 0x5e, 0x81, 0x6a, 0x4c, 0x3c, 0xd2, 0xa0, 0xf6, 0x4d, - 0x8d, 0x71, 0x7c, 0x77, 0x9f, 0xb6, 0x1e, 0x35, 0x2c, 0x56, 0xc4, 0xa3, 0x7c, 0x81, 0xc9, 0x7f, - 0x58, 0x91, 0xa4, 0x03, 0x18, 0x7a, 0x9d, 0x96, 0xeb, 0x8f, 0x43, 0x11, 0x03, 0xb8, 0xcc, 0x68, - 0x65, 0x06, 0x90, 0x37, 0x62, 0xc1, 0xc8, 0xfe, 0x2f, 0x16, 0xa0, 0xb4, 0x50, 0xbb, 0x07, 0x46, - 0xed, 0x6b, 0x69, 0xa3, 0x76, 0xa1, 0x48, 0xab, 0xa3, 0x87, 0x5d, 0xfb, 0x1b, 0x35, 0xc8, 0xa8, - 0x83, 0x6b, 0x24, 0x4e, 0x48, 0xf3, 0x2d, 0x11, 0xfe, 0x96, 0x08, 0x7f, 0x4b, 0x84, 0x2b, 0x11, - 0xbe, 0x96, 0x11, 0xe1, 0xef, 0x33, 0x56, 0xbd, 0x3e, 0x80, 0x7d, 0x55, 0x9d, 0xd0, 0x9a, 0x3d, - 0x30, 0x10, 0xa8, 0x24, 0xb8, 0xb2, 0xb2, 0x74, 0x2d, 0x57, 0x66, 0xbf, 0x9a, 0x96, 0xd9, 0x47, - 0x65, 0xf1, 0x17, 0x41, 0x4a, 0xff, 0x6b, 0x0b, 0xde, 0x91, 0x96, 0x5e, 0x72, 0xe6, 0xcc, 0xb7, - 0xfc, 0x20, 0x22, 0xb3, 0xee, 0xfa, 0x3a, 0x89, 0x88, 0xdf, 0x20, 0xb1, 0xf2, 0x62, 0x58, 0xbd, - 0xbc, 0x18, 0xe8, 0x39, 0x18, 0xb9, 0x15, 0x07, 0xfe, 0x72, 0xe0, 0xfa, 0x42, 0x04, 0xd1, 0x8d, - 0xf0, 0xc9, 0x3b, 0xbb, 0x13, 0x23, 0x74, 0x44, 0x65, 0x3b, 0x4e, 0x61, 0xa1, 0x19, 0x38, 0x75, - 0xeb, 0xb5, 0x65, 0x27, 0x31, 0xdc, 0x01, 0x72, 0xe3, 0xce, 0x0e, 0x2c, 0xae, 0xbc, 0x94, 0x01, - 0xe2, 0x6e, 0x7c, 0xfb, 0x6f, 0x95, 0xe0, 0x91, 0xcc, 0x8b, 0x04, 0x9e, 0x17, 0x74, 0x12, 0xba, - 0xa9, 0x41, 0x5f, 0xb5, 0xe0, 0x64, 0x3b, 0xed, 0x71, 0x88, 0x85, 0x63, 0xf7, 0x03, 0x85, 0xe9, - 0x88, 0x8c, 0x4b, 0xa3, 0x3e, 0x2e, 0x46, 0xe8, 0x64, 0x06, 0x10, 0xe3, 0xae, 0xbe, 0xa0, 0x57, - 0xa0, 0xd6, 0x76, 0xb6, 0xaf, 0x87, 0x4d, 0x27, 0x91, 0xfb, 0xc9, 0xde, 0x6e, 0x80, 0x4e, 0xe2, - 0x7a, 0x93, 0xfc, 0x68, 0x7f, 0x72, 0xde, 0x4f, 0x96, 0xa2, 0x95, 0x24, 0x72, 0xfd, 0x16, 0x77, - 0xe7, 0x2d, 0x4a, 0x32, 0x58, 0x53, 0xb4, 0xbf, 0x62, 0x65, 0x95, 0x94, 0x1a, 0x9d, 0xc8, 0x49, - 0x48, 0x6b, 0x07, 0x7d, 0x14, 0x2a, 0x74, 0xe3, 0x27, 0x47, 0xe5, 0x66, 0x91, 0x9a, 0xd3, 0xf8, - 0x12, 0x5a, 0x89, 0xd2, 0x7f, 0x31, 0xe6, 0x4c, 0xed, 0xaf, 0xd6, 0xb2, 0xc6, 0x02, 0x3b, 0xbc, - 0xbd, 0x00, 0xd0, 0x0a, 0x56, 0x49, 0x3b, 0xf4, 0xe8, 0xb0, 0x58, 0xec, 0x04, 0x40, 0xf9, 0x3a, - 0xe6, 0x14, 0x04, 0x1b, 0x58, 0xe8, 0xaf, 0x58, 0x00, 0x2d, 0x39, 0xe7, 0xa5, 0x21, 0x70, 0xbd, - 0xc8, 0xd7, 0xd1, 0x2b, 0x4a, 0xf7, 0x45, 0x31, 0xc4, 0x06, 0x73, 0xf4, 0xd3, 0x16, 0x54, 0x13, - 0xd9, 0x7d, 0xae, 0x1a, 0x57, 0x8b, 0xec, 0x89, 0x7c, 0x69, 0x6d, 0x13, 0xa9, 0x21, 0x51, 0x7c, - 0xd1, 0xcf, 0x5a, 0x00, 0xf1, 0x8e, 0xdf, 0x58, 0x0e, 0x3c, 0xb7, 0xb1, 0x23, 0x34, 0xe6, 0x8d, - 0x42, 0xfd, 0x31, 0x8a, 0x7a, 0x7d, 0x8c, 0x8e, 0x86, 0xfe, 0x8f, 0x0d, 0xce, 0xe8, 0xe3, 0x50, - 0x8d, 0xc5, 0x74, 0x13, 0x3a, 0x72, 0xb5, 0x58, 0xaf, 0x10, 0xa7, 0x2d, 0xc4, 0xab, 0xf8, 0x87, - 0x15, 0x4f, 0xf4, 0xf3, 0x16, 0x9c, 0x08, 0xd3, 0x7e, 0x3e, 0xa1, 0x0e, 0x8b, 0x93, 0x01, 0x19, - 0x3f, 0x62, 0xfd, 0xf4, 0x9d, 0xdd, 0x89, 0x13, 0x99, 0x46, 0x9c, 0xed, 0x05, 0x95, 0x80, 0x7a, - 0x06, 0x2f, 0x85, 0xdc, 0xe7, 0x38, 0xa4, 0x25, 0xe0, 0x5c, 0x16, 0x88, 0xbb, 0xf1, 0xd1, 0x32, - 0x9c, 0xa1, 0xbd, 0xdb, 0xe1, 0xe6, 0xa7, 0x54, 0x2f, 0x31, 0x53, 0x86, 0xd5, 0xfa, 0xa3, 0x62, - 0x86, 0x30, 0xaf, 0x7e, 0x16, 0x07, 0xe7, 0x3e, 0x89, 0x7e, 0xd7, 0x82, 0x47, 0x5d, 0xa6, 0x06, - 0x4c, 0x87, 0xb9, 0xd6, 0x08, 0xe2, 0x24, 0x96, 0x14, 0x2a, 0x2b, 0x7a, 0xa9, 0x9f, 0xfa, 0x0f, - 0x8a, 0x37, 0x78, 0x74, 0x7e, 0x8f, 0x2e, 0xe1, 0x3d, 0x3b, 0x8c, 0x7e, 0x04, 0x46, 0xe5, 0xba, - 0x58, 0xa6, 0x22, 0x98, 0x29, 0xda, 0x5a, 0xfd, 0xd4, 0x9d, 0xdd, 0x89, 0xd1, 0x55, 0x13, 0x80, - 0xd3, 0x78, 0xf6, 0xb7, 0x4a, 0xa9, 0xf3, 0x10, 0xe5, 0x84, 0x64, 0xe2, 0xa6, 0x21, 0xfd, 0x3f, - 0x52, 0x7a, 0x16, 0x2a, 0x6e, 0x94, 0x77, 0x49, 0x8b, 0x1b, 0xd5, 0x14, 0x63, 0x83, 0x39, 0x35, - 0x4a, 0x4f, 0x39, 0x59, 0x57, 0xa7, 0x90, 0x80, 0xaf, 0x14, 0xd9, 0xa5, 0xee, 0xd3, 0xab, 0x47, - 0x44, 0xd7, 0x4e, 0x75, 0x81, 0x70, 0x77, 0x97, 0xec, 0x6f, 0xa5, 0xcf, 0x60, 0x8c, 0xc5, 0xdb, - 0xc7, 0xf9, 0xd2, 0x17, 0x2c, 0x18, 0x8e, 0x02, 0xcf, 0x73, 0xfd, 0x16, 0x15, 0x34, 0x42, 0x5b, - 0x7e, 0xe8, 0x58, 0x14, 0x96, 0x90, 0x28, 0xcc, 0xb4, 0xc5, 0x9a, 0x27, 0x36, 0x3b, 0x60, 0xff, - 0x89, 0x05, 0xe3, 0xbd, 0x04, 0x22, 0x22, 0xf0, 0x76, 0xb9, 0xda, 0x55, 0x74, 0xc5, 0x92, 0x3f, - 0x4b, 0x3c, 0xa2, 0x1c, 0xcf, 0xd5, 0xfa, 0x13, 0xe2, 0x35, 0xdf, 0xbe, 0xdc, 0x1b, 0x15, 0xef, - 0x45, 0x07, 0xbd, 0x0c, 0x27, 0x8d, 0xf7, 0x8a, 0xd5, 0xc0, 0xd4, 0xea, 0x93, 0xd4, 0x02, 0x99, - 0xce, 0xc0, 0xee, 0xee, 0x4e, 0x3c, 0x94, 0x6d, 0x13, 0x12, 0xbb, 0x8b, 0x8e, 0xfd, 0x2b, 0xa5, - 0xec, 0xd7, 0x52, 0xca, 0xf6, 0x4d, 0xab, 0x6b, 0x3b, 0xff, 0x81, 0xe3, 0x50, 0x70, 0x6c, 0xe3, - 0xaf, 0x02, 0x38, 0x7a, 0xe3, 0xdc, 0xc7, 0x13, 0x62, 0xfb, 0xdf, 0x0e, 0xc0, 0x1e, 0x3d, 0xeb, - 0xc3, 0x7a, 0x3e, 0xf0, 0xb1, 0xe2, 0xe7, 0x2c, 0x75, 0xe4, 0x54, 0x66, 0x8b, 0xbc, 0x79, 0x5c, - 0x63, 0xcf, 0x37, 0x30, 0x31, 0x8f, 0x52, 0x50, 0x6e, 0xec, 0xf4, 0xe1, 0x16, 0xfa, 0x9a, 0x95, - 0x3e, 0x34, 0xe3, 0x61, 0x67, 0xee, 0xb1, 0xf5, 0xc9, 0x38, 0x89, 0xe3, 0x1d, 0xd3, 0xe7, 0x37, - 0xbd, 0xce, 0xe8, 0x26, 0x01, 0xd6, 0x5d, 0xdf, 0xf1, 0xdc, 0xd7, 0xe9, 0xf6, 0xa4, 0xc2, 0x34, - 0x2c, 0x33, 0x59, 0x2e, 0xa9, 0x56, 0x6c, 0x60, 0x9c, 0xfb, 0xcb, 0x30, 0x6c, 0xbc, 0x79, 0x4e, - 0x70, 0xc5, 0x19, 0x33, 0xb8, 0xa2, 0x66, 0xc4, 0x44, 0x9c, 0x7b, 0x1f, 0x9c, 0xcc, 0x76, 0xf0, - 0x20, 0xcf, 0xdb, 0xff, 0x7b, 0x28, 0x7b, 0x8a, 0xb5, 0x4a, 0xa2, 0x36, 0xed, 0xda, 0x5b, 0x9e, - 0xa5, 0xb7, 0x3c, 0x4b, 0x6f, 0x79, 0x96, 0xcc, 0xc3, 0x01, 0xe1, 0x35, 0x19, 0xba, 0x47, 0x5e, - 0x93, 0x94, 0x1f, 0xa8, 0x5a, 0xb8, 0x1f, 0xc8, 0xbe, 0x53, 0x81, 0x94, 0x1d, 0xc5, 0xc7, 0xfb, - 0x9d, 0x30, 0x14, 0x91, 0x30, 0xb8, 0x8e, 0x17, 0x84, 0x0e, 0xd1, 0xb1, 0xf6, 0xbc, 0x19, 0x4b, - 0x38, 0xd5, 0x35, 0xa1, 0x93, 0x6c, 0x08, 0x25, 0xa2, 0x74, 0xcd, 0xb2, 0x93, 0x6c, 0x60, 0x06, - 0x41, 0xef, 0x83, 0xb1, 0xc4, 0x89, 0x5a, 0xd4, 0xde, 0xde, 0x62, 0x9f, 0x55, 0x9c, 0x75, 0x3e, - 0x24, 0x70, 0xc7, 0x56, 0x53, 0x50, 0x9c, 0xc1, 0x46, 0xaf, 0xc1, 0xc0, 0x06, 0xf1, 0xda, 0x62, - 0xc8, 0x57, 0x8a, 0x93, 0xf1, 0xec, 0x5d, 0x2f, 0x13, 0xaf, 0xcd, 0x25, 0x10, 0xfd, 0x85, 0x19, - 0x2b, 0x3a, 0xdf, 0x6a, 0x9b, 0x9d, 0x38, 0x09, 0xda, 0xee, 0xeb, 0xd2, 0xc5, 0xf7, 0x81, 0x82, - 0x19, 0x5f, 0x95, 0xf4, 0xb9, 0x2f, 0x45, 0xfd, 0xc5, 0x9a, 0x33, 0xeb, 0x47, 0xd3, 0x8d, 0xd8, - 0xa7, 0xda, 0x11, 0x9e, 0xba, 0xa2, 0xfb, 0x31, 0x2b, 0xe9, 0xf3, 0x7e, 0xa8, 0xbf, 0x58, 0x73, - 0x46, 0x3b, 0x6a, 0xde, 0x0f, 0xb3, 0x3e, 0x5c, 0x2f, 0xb8, 0x0f, 0x7c, 0xce, 0xe7, 0xce, 0xff, - 0x27, 0xa0, 0xd2, 0xd8, 0x70, 0xa2, 0x64, 0x7c, 0x84, 0x4d, 0x1a, 0xe5, 0xd3, 0x99, 0xa1, 0x8d, - 0x98, 0xc3, 0xd0, 0x63, 0x50, 0x8e, 0xc8, 0x3a, 0x8b, 0xdb, 0x34, 0x22, 0x7a, 0x30, 0x59, 0xc7, - 0xb4, 0xdd, 0xfe, 0xa5, 0x52, 0xda, 0x5c, 0x4a, 0xbf, 0x37, 0x9f, 0xed, 0x8d, 0x4e, 0x14, 0x4b, - 0xbf, 0x8f, 0x31, 0xdb, 0x59, 0x33, 0x96, 0x70, 0xf4, 0x49, 0x0b, 0x86, 0x6e, 0xc5, 0x81, 0xef, - 0x93, 0x44, 0xa8, 0xa6, 0x1b, 0x05, 0x0f, 0xc5, 0x15, 0x4e, 0x5d, 0xf7, 0x41, 0x34, 0x60, 0xc9, - 0x97, 0x76, 0x97, 0x6c, 0x37, 0xbc, 0x4e, 0xb3, 0x2b, 0x48, 0xe3, 0x22, 0x6f, 0xc6, 0x12, 0x4e, - 0x51, 0x5d, 0x9f, 0xa3, 0x0e, 0xa4, 0x51, 0xe7, 0x7d, 0x81, 0x2a, 0xe0, 0xf6, 0xdf, 0x18, 0x84, - 0xb3, 0xb9, 0x8b, 0x83, 0x1a, 0x32, 0xcc, 0x54, 0xb8, 0xe4, 0x7a, 0x44, 0x86, 0x27, 0x31, 0x43, - 0xe6, 0x86, 0x6a, 0xc5, 0x06, 0x06, 0xfa, 0x29, 0x80, 0xd0, 0x89, 0x9c, 0x36, 0x51, 0x7e, 0xd9, - 0x23, 0xdb, 0x0b, 0xb4, 0x1f, 0xcb, 0x92, 0xa6, 0xde, 0x9b, 0xaa, 0xa6, 0x18, 0x1b, 0x2c, 0xd1, - 0xf3, 0x30, 0x1c, 0x11, 0x8f, 0x38, 0x31, 0x0b, 0xfb, 0xcd, 0xe6, 0x30, 0x60, 0x0d, 0xc2, 0x26, - 0x1e, 0x7a, 0x52, 0x45, 0x72, 0x65, 0x22, 0x5a, 0xd2, 0xd1, 0x5c, 0xe8, 0x0d, 0x0b, 0xc6, 0xd6, - 0x5d, 0x8f, 0x68, 0xee, 0x22, 0xe3, 0x60, 0xe9, 0xe8, 0x2f, 0x79, 0xc9, 0xa4, 0xab, 0x25, 0x64, - 0xaa, 0x39, 0xc6, 0x19, 0xf6, 0xf4, 0x33, 0x6f, 0x91, 0x88, 0x89, 0xd6, 0xc1, 0xf4, 0x67, 0xbe, - 0xc1, 0x9b, 0xb1, 0x84, 0xa3, 0x69, 0x38, 0x11, 0x3a, 0x71, 0x3c, 0x13, 0x91, 0x26, 0xf1, 0x13, - 0xd7, 0xf1, 0x78, 0x3e, 0x40, 0x55, 0xc7, 0x03, 0x2f, 0xa7, 0xc1, 0x38, 0x8b, 0x8f, 0x3e, 0x08, - 0x0f, 0x73, 0xc7, 0xc7, 0xa2, 0x1b, 0xc7, 0xae, 0xdf, 0xd2, 0xd3, 0x40, 0xf8, 0x7f, 0x26, 0x04, - 0xa9, 0x87, 0xe7, 0xf3, 0xd1, 0x70, 0xaf, 0xe7, 0xd1, 0xd3, 0x50, 0x8d, 0x37, 0xdd, 0x70, 0x26, - 0x6a, 0xc6, 0xec, 0xd0, 0xa3, 0xaa, 0xbd, 0x8d, 0x2b, 0xa2, 0x1d, 0x2b, 0x0c, 0xd4, 0x80, 0x11, - 0xfe, 0x49, 0x78, 0x28, 0x9a, 0x90, 0x8f, 0xcf, 0xf4, 0x54, 0x8f, 0x22, 0xbd, 0x6d, 0x12, 0x3b, - 0xb7, 0x2f, 0xca, 0x23, 0x18, 0x7e, 0x62, 0x70, 0xc3, 0x20, 0x83, 0x53, 0x44, 0xed, 0x5f, 0x28, - 0xa5, 0x77, 0xdc, 0xe6, 0x22, 0x45, 0x31, 0x5d, 0x8a, 0xc9, 0x0d, 0x27, 0x92, 0xde, 0x98, 0x23, - 0xa6, 0x2d, 0x08, 0xba, 0x37, 0x9c, 0xc8, 0x5c, 0xd4, 0x8c, 0x01, 0x96, 0x9c, 0xd0, 0x2d, 0x18, - 0x48, 0x3c, 0xa7, 0xa0, 0x3c, 0x27, 0x83, 0xa3, 0x76, 0x80, 0x2c, 0x4c, 0xc7, 0x98, 0xf1, 0x40, - 0x8f, 0x52, 0xab, 0x7f, 0x4d, 0x1e, 0x91, 0x08, 0x43, 0x7d, 0x2d, 0xc6, 0xac, 0xd5, 0xbe, 0x0b, - 0x39, 0x72, 0x55, 0x29, 0x32, 0x74, 0x01, 0x80, 0x6e, 0x20, 0x97, 0x23, 0xb2, 0xee, 0x6e, 0x0b, - 0x43, 0x42, 0xad, 0xdd, 0x6b, 0x0a, 0x82, 0x0d, 0x2c, 0xf9, 0xcc, 0x4a, 0x67, 0x9d, 0x3e, 0x53, - 0xea, 0x7e, 0x86, 0x43, 0xb0, 0x81, 0x85, 0x9e, 0x83, 0x41, 0xb7, 0xed, 0xb4, 0x54, 0x08, 0xe6, - 0xa3, 0x74, 0xd1, 0xce, 0xb3, 0x96, 0xbb, 0xbb, 0x13, 0x63, 0xaa, 0x43, 0xac, 0x09, 0x0b, 0x5c, - 0xf4, 0x2b, 0x16, 0x8c, 0x34, 0x82, 0x76, 0x3b, 0xf0, 0xf9, 0xb6, 0x4b, 0xec, 0x21, 0x6f, 0x1d, - 0x97, 0x9a, 0x9f, 0x9c, 0x31, 0x98, 0xf1, 0x4d, 0xa4, 0x4a, 0xc8, 0x32, 0x41, 0x38, 0xd5, 0x2b, - 0x73, 0x6d, 0x57, 0xf6, 0x59, 0xdb, 0xbf, 0x6e, 0xc1, 0x29, 0xfe, 0xac, 0xb1, 0x1b, 0x14, 0xb9, - 0x47, 0xc1, 0x31, 0xbf, 0x56, 0xd7, 0x06, 0x59, 0x79, 0xe9, 0xba, 0xe0, 0xb8, 0xbb, 0x93, 0x68, - 0x0e, 0x4e, 0xad, 0x07, 0x51, 0x83, 0x98, 0x03, 0x21, 0x04, 0x93, 0x22, 0x74, 0x29, 0x8b, 0x80, - 0xbb, 0x9f, 0x41, 0x37, 0xe0, 0x21, 0xa3, 0xd1, 0x1c, 0x07, 0x2e, 0x9b, 0x1e, 0x17, 0xd4, 0x1e, - 0xba, 0x94, 0x8b, 0x85, 0x7b, 0x3c, 0x9d, 0x76, 0x98, 0xd4, 0xfa, 0x70, 0x98, 0xbc, 0x0a, 0x8f, - 0x34, 0xba, 0x47, 0x66, 0x2b, 0xee, 0xac, 0xc5, 0x5c, 0x52, 0x55, 0xeb, 0x3f, 0x20, 0x08, 0x3c, - 0x32, 0xd3, 0x0b, 0x11, 0xf7, 0xa6, 0x81, 0x3e, 0x0a, 0xd5, 0x88, 0xb0, 0xaf, 0x12, 0x8b, 0x44, - 0x9c, 0x23, 0xee, 0x92, 0xb5, 0x05, 0xca, 0xc9, 0x6a, 0xd9, 0x2b, 0x1a, 0x62, 0xac, 0x38, 0xa2, - 0xdb, 0x30, 0x14, 0x3a, 0x49, 0x63, 0x43, 0xa4, 0xdf, 0x1c, 0x39, 0xfe, 0x45, 0x31, 0x67, 0x3e, - 0x70, 0x23, 0x61, 0x97, 0x33, 0xc1, 0x92, 0x1b, 0xb5, 0x46, 0x1a, 0x41, 0x3b, 0x0c, 0x7c, 0xe2, - 0x27, 0xf1, 0xf8, 0xa8, 0xb6, 0x46, 0x66, 0x54, 0x2b, 0x36, 0x30, 0xd0, 0x32, 0x9c, 0x61, 0x3e, - 0xa3, 0x9b, 0x6e, 0xb2, 0x11, 0x74, 0x12, 0xb9, 0x05, 0x1a, 0x1f, 0x4b, 0x1f, 0x55, 0x2c, 0xe4, - 0xe0, 0xe0, 0xdc, 0x27, 0xcf, 0xbd, 0x1f, 0x4e, 0x75, 0x2d, 0xe5, 0x03, 0xb9, 0x6b, 0x66, 0xe1, - 0xa1, 0xfc, 0x45, 0x73, 0x20, 0xa7, 0xcd, 0x3f, 0xc9, 0x84, 0xcd, 0x1a, 0x86, 0x74, 0x1f, 0x0e, - 0x40, 0x07, 0xca, 0xc4, 0xdf, 0x12, 0x3a, 0xe4, 0xd2, 0xd1, 0xbe, 0xdd, 0x45, 0x7f, 0x8b, 0xaf, - 0x79, 0xe6, 0xe5, 0xb8, 0xe8, 0x6f, 0x61, 0x4a, 0x1b, 0x7d, 0xc9, 0x4a, 0x19, 0x82, 0xdc, 0x6d, - 0xf8, 0xe1, 0x63, 0xd9, 0x39, 0xf4, 0x6d, 0x1b, 0xda, 0xff, 0xae, 0x04, 0xe7, 0xf7, 0x23, 0xd2, - 0xc7, 0xf0, 0x3d, 0x01, 0x83, 0x31, 0x3b, 0x08, 0x17, 0x42, 0x79, 0x98, 0xce, 0x55, 0x7e, 0x34, - 0xfe, 0x2a, 0x16, 0x20, 0xe4, 0x41, 0xb9, 0xed, 0x84, 0xc2, 0x9b, 0x34, 0x7f, 0xd4, 0x44, 0x1a, - 0xfa, 0xdf, 0xf1, 0x16, 0x9d, 0x90, 0xfb, 0x28, 0x8c, 0x06, 0x4c, 0xd9, 0xa0, 0x04, 0x2a, 0x4e, - 0x14, 0x39, 0xf2, 0xd4, 0xf5, 0x6a, 0x31, 0xfc, 0xa6, 0x29, 0x49, 0x7e, 0x68, 0x95, 0x6a, 0xc2, - 0x9c, 0x99, 0xfd, 0xb9, 0xa1, 0x54, 0x32, 0x09, 0x3b, 0x4a, 0x8f, 0x61, 0x50, 0x38, 0x91, 0xac, - 0xa2, 0xf3, 0x97, 0x78, 0x36, 0x20, 0xdb, 0x27, 0x8a, 0x9c, 0x6a, 0xc1, 0x0a, 0x7d, 0xd6, 0x62, - 0x99, 0xcb, 0x32, 0xc1, 0x46, 0xec, 0xce, 0x8e, 0x27, 0x91, 0xda, 0xcc, 0x87, 0x96, 0x8d, 0xd8, - 0xe4, 0x2e, 0x2a, 0x10, 0x30, 0xab, 0xb4, 0xbb, 0x02, 0x01, 0xb3, 0x32, 0x25, 0x1c, 0x6d, 0xe7, - 0x1c, 0x99, 0x17, 0x90, 0xfd, 0xda, 0xc7, 0x21, 0xf9, 0xd7, 0x2c, 0x38, 0xe5, 0x66, 0xcf, 0x3e, - 0xc5, 0x5e, 0xe6, 0x88, 0x41, 0x19, 0xbd, 0x8f, 0x56, 0x95, 0x3a, 0xef, 0x02, 0xe1, 0xee, 0xce, - 0xa0, 0x26, 0x0c, 0xb8, 0xfe, 0x7a, 0x20, 0x8c, 0x98, 0xfa, 0xd1, 0x3a, 0x35, 0xef, 0xaf, 0x07, - 0x7a, 0x35, 0xd3, 0x7f, 0x98, 0x51, 0x47, 0x0b, 0x70, 0x26, 0x12, 0xde, 0xa6, 0xcb, 0x6e, 0x9c, - 0x04, 0xd1, 0xce, 0x82, 0xdb, 0x76, 0x13, 0x66, 0x80, 0x94, 0xeb, 0xe3, 0x54, 0x3f, 0xe0, 0x1c, - 0x38, 0xce, 0x7d, 0x0a, 0xbd, 0x0e, 0x43, 0x32, 0xd5, 0xba, 0x5a, 0xc4, 0xbe, 0xb0, 0x7b, 0xfe, - 0xab, 0xc9, 0xb4, 0x22, 0xb2, 0xaa, 0x25, 0x43, 0xfb, 0x8d, 0x61, 0xe8, 0x3e, 0x16, 0x45, 0x1f, - 0x83, 0x5a, 0xa4, 0xd2, 0xbf, 0xad, 0x22, 0xd4, 0xb5, 0xfc, 0xbe, 0xe2, 0x48, 0x56, 0x99, 0x42, - 0x3a, 0xd1, 0x5b, 0x73, 0xa4, 0x1b, 0x96, 0x58, 0x9f, 0x9e, 0x16, 0x30, 0xb7, 0x05, 0x57, 0x7d, - 0x32, 0xb6, 0xe3, 0x37, 0x30, 0xe3, 0x81, 0x22, 0x18, 0xdc, 0x20, 0x8e, 0x97, 0x6c, 0x14, 0xe3, - 0xc4, 0xbf, 0xcc, 0x68, 0x65, 0x93, 0x80, 0x78, 0x2b, 0x16, 0x9c, 0xd0, 0x36, 0x0c, 0x6d, 0xf0, - 0x09, 0x20, 0xf6, 0x10, 0x8b, 0x47, 0x1d, 0xdc, 0xd4, 0xac, 0xd2, 0x9f, 0x5b, 0x34, 0x60, 0xc9, - 0x8e, 0xc5, 0xdb, 0x18, 0x11, 0x01, 0x7c, 0xe9, 0x16, 0x97, 0xff, 0xd4, 0x7f, 0x38, 0xc0, 0x47, - 0x60, 0x24, 0x22, 0x8d, 0xc0, 0x6f, 0xb8, 0x1e, 0x69, 0x4e, 0x4b, 0x07, 0xfd, 0x41, 0xb2, 0x66, - 0xd8, 0x3e, 0x1c, 0x1b, 0x34, 0x70, 0x8a, 0x22, 0xfa, 0x8c, 0x05, 0x63, 0x2a, 0x67, 0x94, 0x7e, - 0x10, 0x22, 0x1c, 0xc2, 0x0b, 0x05, 0x65, 0xa8, 0x32, 0x9a, 0x75, 0x74, 0x67, 0x77, 0x62, 0x2c, - 0xdd, 0x86, 0x33, 0x7c, 0xd1, 0xcb, 0x00, 0xc1, 0x1a, 0x0f, 0xaa, 0x99, 0x4e, 0x84, 0x77, 0xf8, - 0x20, 0xaf, 0x3a, 0xc6, 0xd3, 0xe7, 0x24, 0x05, 0x6c, 0x50, 0x43, 0x57, 0x01, 0xf8, 0xb2, 0x59, - 0xdd, 0x09, 0xe5, 0x46, 0x43, 0xa6, 0x3d, 0xc1, 0x8a, 0x82, 0xdc, 0xdd, 0x9d, 0xe8, 0xf6, 0xd6, - 0xb1, 0xc0, 0x05, 0xe3, 0x71, 0xf4, 0x93, 0x30, 0x14, 0x77, 0xda, 0x6d, 0x47, 0xf9, 0x8e, 0x0b, - 0x4c, 0xc8, 0xe3, 0x74, 0x0d, 0x51, 0xc4, 0x1b, 0xb0, 0xe4, 0x88, 0x6e, 0x51, 0xa1, 0x1a, 0x0b, - 0x37, 0x22, 0x5b, 0x45, 0xdc, 0x26, 0x18, 0x66, 0xef, 0xf4, 0x1e, 0x69, 0x78, 0xe3, 0x1c, 0x9c, - 0xbb, 0xbb, 0x13, 0x0f, 0xa5, 0xdb, 0x17, 0x02, 0x91, 0x22, 0x97, 0x4b, 0x13, 0x5d, 0x91, 0x95, - 0x57, 0xe8, 0x6b, 0xcb, 0x82, 0x00, 0x4f, 0xe9, 0xca, 0x2b, 0xac, 0xb9, 0xf7, 0x98, 0x99, 0x0f, - 0xa3, 0x45, 0x38, 0xdd, 0x08, 0xfc, 0x24, 0x0a, 0x3c, 0x8f, 0x57, 0x1e, 0xe2, 0x7b, 0x3e, 0xee, - 0x5b, 0x7e, 0xbb, 0xe8, 0xf6, 0xe9, 0x99, 0x6e, 0x14, 0x9c, 0xf7, 0x9c, 0xed, 0xa7, 0xa3, 0x0d, - 0xc5, 0xe0, 0x3c, 0x07, 0x23, 0x64, 0x3b, 0x21, 0x91, 0xef, 0x78, 0xd7, 0xf1, 0x82, 0xf4, 0xaa, - 0xb2, 0x35, 0x70, 0xd1, 0x68, 0xc7, 0x29, 0x2c, 0x64, 0x2b, 0x47, 0x87, 0x91, 0xf6, 0xc9, 0x1d, - 0x1d, 0xd2, 0xad, 0x61, 0xff, 0x9f, 0x52, 0xca, 0x20, 0x5b, 0x8d, 0x08, 0x41, 0x01, 0x54, 0xfc, - 0xa0, 0xa9, 0x64, 0xff, 0x95, 0x62, 0x64, 0xff, 0xb5, 0xa0, 0x69, 0x94, 0x67, 0xa1, 0xff, 0x62, - 0xcc, 0xf9, 0xb0, 0xfa, 0x15, 0xb2, 0xd0, 0x07, 0x03, 0x88, 0x8d, 0x46, 0x91, 0x9c, 0x55, 0xfd, - 0x8a, 0x25, 0x93, 0x11, 0x4e, 0xf3, 0x45, 0x9b, 0x50, 0xd9, 0x08, 0xe2, 0x44, 0x6e, 0x3f, 0x8e, - 0xb8, 0xd3, 0xb9, 0x1c, 0xc4, 0x09, 0xb3, 0x22, 0xd4, 0x6b, 0xd3, 0x96, 0x18, 0x73, 0x1e, 0xf6, - 0x7f, 0xb5, 0x52, 0x3e, 0xf4, 0x9b, 0x2c, 0xf2, 0x76, 0x8b, 0xf8, 0x74, 0x59, 0x9b, 0xa1, 0x46, - 0x3f, 0x92, 0xc9, 0x63, 0x7c, 0x47, 0xaf, 0xc2, 0x5a, 0xb7, 0x29, 0x85, 0x49, 0x46, 0xc2, 0x88, - 0x4a, 0xfa, 0x84, 0x95, 0xce, 0x28, 0x2d, 0x15, 0xb1, 0xc1, 0x30, 0xb3, 0xaa, 0xf7, 0x4d, 0x4e, - 0xb5, 0xbf, 0x64, 0xc1, 0x50, 0xdd, 0x69, 0x6c, 0x06, 0xeb, 0xeb, 0xe8, 0x69, 0xa8, 0x36, 0x3b, - 0x91, 0x99, 0xdc, 0xaa, 0x1c, 0x07, 0xb3, 0xa2, 0x1d, 0x2b, 0x0c, 0x3a, 0x87, 0xd7, 0x9d, 0x86, - 0xcc, 0xad, 0x2e, 0xf3, 0x39, 0x7c, 0x89, 0xb5, 0x60, 0x01, 0x41, 0xcf, 0xc3, 0x70, 0xdb, 0xd9, - 0x96, 0x0f, 0x67, 0x1d, 0xf8, 0x8b, 0x1a, 0x84, 0x4d, 0x3c, 0xfb, 0x5f, 0x59, 0x30, 0x5e, 0x77, - 0x62, 0xb7, 0x31, 0xdd, 0x49, 0x36, 0xea, 0x6e, 0xb2, 0xd6, 0x69, 0x6c, 0x92, 0x84, 0x27, 0xd4, - 0xd3, 0x5e, 0x76, 0x62, 0xba, 0x94, 0xd4, 0xbe, 0x4e, 0xf5, 0xf2, 0xba, 0x68, 0xc7, 0x0a, 0x03, - 0xbd, 0x0e, 0xc3, 0xa1, 0x13, 0xc7, 0xb7, 0x83, 0xa8, 0x89, 0xc9, 0x7a, 0x31, 0xe5, 0x2c, 0x56, - 0x48, 0x23, 0x22, 0x09, 0x26, 0xeb, 0xe2, 0x90, 0x59, 0xd3, 0xc7, 0x26, 0x33, 0xfb, 0x0b, 0x16, - 0x3c, 0x52, 0x27, 0x4e, 0x44, 0x22, 0x56, 0xfd, 0x42, 0xbd, 0xc8, 0x8c, 0x17, 0x74, 0x9a, 0xe8, - 0x35, 0xa8, 0x26, 0xb4, 0x99, 0x76, 0xcb, 0x2a, 0xb6, 0x5b, 0xec, 0x8c, 0x78, 0x55, 0x10, 0xc7, - 0x8a, 0x8d, 0xfd, 0x37, 0x2d, 0x18, 0x61, 0xc7, 0x6d, 0xb3, 0x24, 0x71, 0x5c, 0xaf, 0xab, 0x48, - 0x94, 0xd5, 0x67, 0x91, 0xa8, 0xf3, 0x30, 0xb0, 0x11, 0xb4, 0x49, 0xf6, 0xa8, 0xf8, 0x72, 0x40, - 0xb7, 0xd5, 0x14, 0x82, 0x9e, 0xa5, 0x1f, 0xde, 0xf5, 0x13, 0x87, 0x2e, 0x01, 0xe9, 0xce, 0x3d, - 0xc1, 0x3f, 0xba, 0x6a, 0xc6, 0x26, 0x8e, 0xfd, 0x5b, 0x35, 0x18, 0x12, 0xf1, 0x04, 0x7d, 0x17, - 0x55, 0x90, 0xfb, 0xfb, 0x52, 0xcf, 0xfd, 0x7d, 0x0c, 0x83, 0x0d, 0x56, 0xad, 0x4e, 0x98, 0x91, - 0x57, 0x0b, 0x09, 0x40, 0xe1, 0x05, 0xf0, 0x74, 0xb7, 0xf8, 0x7f, 0x2c, 0x58, 0xa1, 0x2f, 0x5a, - 0x70, 0xa2, 0x11, 0xf8, 0x3e, 0x69, 0x68, 0x1b, 0x67, 0xa0, 0x88, 0x38, 0x83, 0x99, 0x34, 0x51, - 0x7d, 0xd6, 0x93, 0x01, 0xe0, 0x2c, 0x7b, 0xf4, 0x22, 0x8c, 0xf2, 0x31, 0xbb, 0x91, 0xf2, 0x41, - 0xeb, 0xda, 0x41, 0x26, 0x10, 0xa7, 0x71, 0xd1, 0x24, 0xf7, 0xe5, 0x8b, 0x2a, 0x3d, 0x83, 0xda, - 0x55, 0x67, 0xd4, 0xe7, 0x31, 0x30, 0x50, 0x04, 0x28, 0x22, 0xeb, 0x11, 0x89, 0x37, 0x44, 0xbc, - 0x05, 0xb3, 0xaf, 0x86, 0x0e, 0x97, 0x80, 0x8d, 0xbb, 0x28, 0xe1, 0x1c, 0xea, 0x68, 0x53, 0x6c, - 0x30, 0xab, 0x45, 0xc8, 0x50, 0xf1, 0x99, 0x7b, 0xee, 0x33, 0x27, 0xa0, 0x12, 0x6f, 0x38, 0x51, - 0x93, 0xd9, 0x75, 0x65, 0x9e, 0xf4, 0xb3, 0x42, 0x1b, 0x30, 0x6f, 0x47, 0xb3, 0x70, 0x32, 0x53, - 0xf9, 0x28, 0x16, 0xbe, 0x62, 0x95, 0xe0, 0x91, 0xa9, 0x99, 0x14, 0xe3, 0xae, 0x27, 0x4c, 0xe7, - 0xc3, 0xf0, 0x3e, 0xce, 0x87, 0x1d, 0x15, 0xd5, 0xc7, 0xbd, 0xb8, 0x2f, 0x15, 0x32, 0x00, 0x7d, - 0x85, 0xf0, 0x7d, 0x3e, 0x13, 0xc2, 0x37, 0xca, 0x3a, 0x70, 0xa3, 0x98, 0x0e, 0x1c, 0x3c, 0x5e, - 0xef, 0x7e, 0xc6, 0xdf, 0xfd, 0xb9, 0x05, 0xf2, 0xbb, 0xce, 0x38, 0x8d, 0x0d, 0x42, 0xa7, 0x0c, - 0x7a, 0x1f, 0x8c, 0xa9, 0x2d, 0xf4, 0x4c, 0xd0, 0xf1, 0x79, 0xe8, 0x5d, 0x59, 0x1f, 0x0a, 0xe3, - 0x14, 0x14, 0x67, 0xb0, 0xd1, 0x14, 0xd4, 0xe8, 0x38, 0xf1, 0x47, 0xb9, 0xae, 0x55, 0xdb, 0xf4, - 0xe9, 0xe5, 0x79, 0xf1, 0x94, 0xc6, 0x41, 0x01, 0x9c, 0xf2, 0x9c, 0x38, 0x61, 0x3d, 0xa0, 0x3b, - 0xea, 0x43, 0x96, 0x3f, 0x60, 0x59, 0x04, 0x0b, 0x59, 0x42, 0xb8, 0x9b, 0xb6, 0xfd, 0xed, 0x01, - 0x18, 0x4d, 0x49, 0xc6, 0x03, 0x2a, 0xe9, 0xa7, 0xa1, 0x2a, 0xf5, 0x66, 0xb6, 0x50, 0x8b, 0x52, - 0xae, 0x0a, 0x83, 0x2a, 0xad, 0x35, 0xad, 0x55, 0xb3, 0x46, 0x85, 0xa1, 0x70, 0xb1, 0x89, 0xc7, - 0x84, 0x72, 0xe2, 0xc5, 0x33, 0x9e, 0x4b, 0xfc, 0x84, 0x77, 0xb3, 0x18, 0xa1, 0xbc, 0xba, 0xb0, - 0x62, 0x12, 0xd5, 0x42, 0x39, 0x03, 0xc0, 0x59, 0xf6, 0xe8, 0xd3, 0x16, 0x8c, 0x3a, 0xb7, 0x63, - 0x5d, 0x52, 0x55, 0x04, 0xeb, 0x1d, 0x51, 0x49, 0xa5, 0xaa, 0xb4, 0x72, 0x97, 0x6f, 0xaa, 0x09, - 0xa7, 0x99, 0xa2, 0x37, 0x2d, 0x40, 0x64, 0x9b, 0x34, 0x64, 0x38, 0xa1, 0xe8, 0xcb, 0x60, 0x11, - 0x3b, 0xcd, 0x8b, 0x5d, 0x74, 0xb9, 0x54, 0xef, 0x6e, 0xc7, 0x39, 0x7d, 0xb0, 0xff, 0x79, 0x59, - 0x2d, 0x28, 0x1d, 0xc1, 0xea, 0x18, 0x91, 0x74, 0xd6, 0xe1, 0x23, 0xe9, 0x74, 0x44, 0x42, 0x77, - 0x56, 0x65, 0x2a, 0x09, 0xab, 0x74, 0x9f, 0x92, 0xb0, 0x7e, 0xda, 0x4a, 0x95, 0x24, 0x1a, 0xbe, - 0xf0, 0x72, 0xb1, 0xd1, 0xb3, 0x93, 0x3c, 0x5a, 0x22, 0x23, 0xdd, 0xd3, 0x41, 0x32, 0x54, 0x9a, - 0x1a, 0x68, 0x07, 0x92, 0x86, 0xff, 0xa1, 0x0c, 0xc3, 0x86, 0x26, 0xcd, 0x35, 0x8b, 0xac, 0x07, - 0xcc, 0x2c, 0x2a, 0x1d, 0xc0, 0x2c, 0xfa, 0x29, 0xa8, 0x35, 0xa4, 0x94, 0x2f, 0xa6, 0x28, 0x6f, - 0x56, 0x77, 0x68, 0x41, 0xaf, 0x9a, 0xb0, 0xe6, 0x89, 0xe6, 0x52, 0xa9, 0x3b, 0x42, 0x43, 0x0c, - 0x30, 0x0d, 0x91, 0x97, 0x5b, 0x23, 0x34, 0x45, 0xf7, 0x33, 0xac, 0x72, 0x55, 0xe8, 0x8a, 0xf7, - 0x92, 0x31, 0xee, 0xbc, 0x72, 0xd5, 0xf2, 0xbc, 0x6c, 0xc6, 0x26, 0x8e, 0xfd, 0x6d, 0x4b, 0x7d, - 0xdc, 0x7b, 0x50, 0xa3, 0xe1, 0x56, 0xba, 0x46, 0xc3, 0xc5, 0x42, 0x86, 0xb9, 0x47, 0x71, 0x86, - 0x6b, 0x30, 0x34, 0x13, 0xb4, 0xdb, 0x8e, 0xdf, 0x44, 0x3f, 0x04, 0x43, 0x0d, 0xfe, 0x53, 0x38, - 0x76, 0xd8, 0xf1, 0xa0, 0x80, 0x62, 0x09, 0x43, 0x8f, 0xc2, 0x80, 0x13, 0xb5, 0xa4, 0x33, 0x87, - 0x05, 0xd7, 0x4c, 0x47, 0xad, 0x18, 0xb3, 0x56, 0xfb, 0x1f, 0x0f, 0x00, 0x3b, 0xd3, 0x76, 0x22, - 0xd2, 0x5c, 0x0d, 0x58, 0x51, 0xc0, 0x63, 0x3d, 0x54, 0xd3, 0x9b, 0xa5, 0x07, 0xf9, 0x60, 0xcd, - 0x38, 0x5c, 0x29, 0xdf, 0xe3, 0xc3, 0x95, 0x1e, 0xe7, 0x65, 0x03, 0x0f, 0xd0, 0x79, 0x99, 0xfd, - 0x39, 0x0b, 0x90, 0x0a, 0x84, 0xd0, 0x07, 0xda, 0x53, 0x50, 0x53, 0x21, 0x11, 0xc2, 0xb0, 0xd2, - 0x22, 0x42, 0x02, 0xb0, 0xc6, 0xe9, 0x63, 0x87, 0xfc, 0x84, 0x94, 0xdf, 0xe5, 0x74, 0x5c, 0x2e, - 0x93, 0xfa, 0x42, 0x9c, 0xdb, 0xbf, 0x5d, 0x82, 0x87, 0xb8, 0x4a, 0x5e, 0x74, 0x7c, 0xa7, 0x45, - 0xda, 0xb4, 0x57, 0xfd, 0x86, 0x28, 0x34, 0xe8, 0xd6, 0xcc, 0x95, 0x71, 0xb6, 0x47, 0x5d, 0xbb, - 0x7c, 0xcd, 0xf1, 0x55, 0x36, 0xef, 0xbb, 0x09, 0x66, 0xc4, 0x51, 0x0c, 0x55, 0x59, 0xb1, 0x5e, - 0xc8, 0xe2, 0x82, 0x18, 0x29, 0xb1, 0x24, 0xf4, 0x26, 0xc1, 0x8a, 0x11, 0x35, 0x5c, 0xbd, 0xa0, - 0xb1, 0x89, 0x49, 0x18, 0x30, 0xb9, 0x6b, 0x84, 0x39, 0x2e, 0x88, 0x76, 0xac, 0x30, 0xec, 0xdf, - 0xb6, 0x20, 0xab, 0x91, 0x8c, 0xea, 0x6b, 0xd6, 0x9e, 0xd5, 0xd7, 0x0e, 0x50, 0xfe, 0xec, 0x27, - 0x60, 0xd8, 0x49, 0xa8, 0x11, 0xc1, 0xb7, 0xdd, 0xe5, 0xc3, 0x1d, 0x6b, 0x2c, 0x06, 0x4d, 0x77, - 0xdd, 0x65, 0xdb, 0x6d, 0x93, 0x9c, 0xfd, 0x3f, 0x07, 0xe0, 0x54, 0x57, 0x36, 0x08, 0x7a, 0x01, - 0x46, 0x1a, 0x62, 0x7a, 0x84, 0xd2, 0xa1, 0x55, 0x33, 0xc3, 0xe2, 0x34, 0x0c, 0xa7, 0x30, 0xfb, - 0x98, 0xa0, 0xf3, 0x70, 0x3a, 0xa2, 0x1b, 0xfd, 0x0e, 0x99, 0x5e, 0x4f, 0x48, 0xb4, 0x42, 0x1a, - 0x81, 0xdf, 0xe4, 0x35, 0x02, 0xcb, 0xf5, 0x87, 0xef, 0xec, 0x4e, 0x9c, 0xc6, 0xdd, 0x60, 0x9c, - 0xf7, 0x0c, 0x0a, 0x61, 0xd4, 0x33, 0x6d, 0x40, 0xb1, 0x01, 0x38, 0x94, 0xf9, 0xa8, 0x6c, 0x84, - 0x54, 0x33, 0x4e, 0x33, 0x48, 0x1b, 0x92, 0x95, 0xfb, 0x64, 0x48, 0x7e, 0x4a, 0x1b, 0x92, 0xfc, - 0xfc, 0xfd, 0x43, 0x05, 0x67, 0x03, 0x1d, 0xb7, 0x25, 0xf9, 0x12, 0x54, 0x65, 0x6c, 0x52, 0x5f, - 0x31, 0x3d, 0x26, 0x9d, 0x1e, 0x12, 0xed, 0x49, 0xf8, 0xc1, 0x8b, 0x51, 0x64, 0x0c, 0xe6, 0xb5, - 0x20, 0x99, 0xf6, 0xbc, 0xe0, 0x36, 0x55, 0xd2, 0xd7, 0x63, 0x22, 0x3c, 0x2c, 0xf6, 0xdd, 0x12, - 0xe4, 0x6c, 0x56, 0xe8, 0x7a, 0xd4, 0x96, 0x41, 0x6a, 0x3d, 0x1e, 0xcc, 0x3a, 0x40, 0xdb, 0x3c, - 0x7e, 0x8b, 0xeb, 0xc0, 0x0f, 0x16, 0xbd, 0xd9, 0xd2, 0x21, 0x5d, 0x2a, 0x99, 0x42, 0x85, 0x75, - 0x5d, 0x00, 0xd0, 0x06, 0x9d, 0x08, 0x95, 0x57, 0xc7, 0xc3, 0xda, 0xee, 0xc3, 0x06, 0x16, 0xdd, - 0x7b, 0xbb, 0x7e, 0x9c, 0x38, 0x9e, 0x77, 0xd9, 0xf5, 0x13, 0xe1, 0x44, 0x54, 0xca, 0x7e, 0x5e, - 0x83, 0xb0, 0x89, 0x77, 0xee, 0x3d, 0xc6, 0xf7, 0x3b, 0xc8, 0x77, 0xdf, 0x80, 0x47, 0xe6, 0xdc, - 0x44, 0x25, 0x78, 0xa8, 0xf9, 0x46, 0xed, 0x35, 0x95, 0xb0, 0x64, 0xf5, 0x4c, 0x58, 0x32, 0x12, - 0x2c, 0x4a, 0xe9, 0x7c, 0x90, 0x6c, 0x82, 0x85, 0xfd, 0x02, 0x9c, 0x99, 0x73, 0x93, 0x4b, 0xae, - 0x47, 0x0e, 0xc8, 0xc4, 0xfe, 0xcd, 0x41, 0x18, 0x31, 0x53, 0x04, 0x0f, 0x92, 0x73, 0xf5, 0x05, - 0x6a, 0x92, 0x89, 0xb7, 0x73, 0xd5, 0xe1, 0xda, 0xcd, 0x23, 0xe7, 0x2b, 0xe6, 0x8f, 0x98, 0x61, - 0x95, 0x69, 0x9e, 0xd8, 0xec, 0x00, 0xba, 0x0d, 0x95, 0x75, 0x96, 0x00, 0x50, 0x2e, 0x22, 0x02, - 0x21, 0x6f, 0x44, 0xf5, 0x72, 0xe4, 0x29, 0x04, 0x9c, 0x1f, 0xd5, 0xa4, 0x51, 0x3a, 0xab, 0xcc, - 0x08, 0x5a, 0x15, 0xf9, 0x64, 0x0a, 0xa3, 0x97, 0x4a, 0xa8, 0x1c, 0x42, 0x25, 0xa4, 0x04, 0xf4, - 0xe0, 0x7d, 0x12, 0xd0, 0x2c, 0x99, 0x23, 0xd9, 0x60, 0x76, 0x9e, 0x88, 0xb2, 0x1f, 0x62, 0x83, - 0x60, 0x24, 0x73, 0xa4, 0xc0, 0x38, 0x8b, 0x8f, 0x3e, 0xae, 0x44, 0x7c, 0xb5, 0x08, 0xff, 0xab, - 0x39, 0xa3, 0x8f, 0x5b, 0xba, 0x7f, 0xae, 0x04, 0x63, 0x73, 0x7e, 0x67, 0x79, 0x6e, 0xb9, 0xb3, - 0xe6, 0xb9, 0x8d, 0xab, 0x64, 0x87, 0x8a, 0xf0, 0x4d, 0xb2, 0x33, 0x3f, 0x2b, 0x56, 0x90, 0x9a, - 0x33, 0x57, 0x69, 0x23, 0xe6, 0x30, 0x2a, 0x8c, 0xd6, 0x5d, 0xbf, 0x45, 0xa2, 0x30, 0x72, 0x85, - 0x6b, 0xd4, 0x10, 0x46, 0x97, 0x34, 0x08, 0x9b, 0x78, 0x94, 0x76, 0x70, 0xdb, 0x27, 0x51, 0xd6, - 0xe0, 0x5d, 0xa2, 0x8d, 0x98, 0xc3, 0x28, 0x52, 0x12, 0x75, 0xe2, 0x44, 0x4c, 0x46, 0x85, 0xb4, - 0x4a, 0x1b, 0x31, 0x87, 0xd1, 0x95, 0x1e, 0x77, 0xd6, 0x58, 0x80, 0x47, 0x26, 0xa4, 0x7f, 0x85, - 0x37, 0x63, 0x09, 0xa7, 0xa8, 0x9b, 0x64, 0x67, 0x96, 0xee, 0x8e, 0x33, 0x99, 0x3d, 0x57, 0x79, - 0x33, 0x96, 0x70, 0x56, 0x04, 0x31, 0x3d, 0x1c, 0xdf, 0x73, 0x45, 0x10, 0xd3, 0xdd, 0xef, 0xb1, - 0xcf, 0xfe, 0x65, 0x0b, 0x46, 0xcc, 0xb0, 0x2c, 0xd4, 0xca, 0xd8, 0xc2, 0x4b, 0x5d, 0x35, 0x74, - 0x7f, 0x2c, 0xef, 0x02, 0xb2, 0x96, 0x9b, 0x04, 0x61, 0xfc, 0x0c, 0xf1, 0x5b, 0xae, 0x4f, 0xd8, - 0x69, 0x3b, 0x0f, 0xe7, 0x4a, 0xc5, 0x7c, 0xcd, 0x04, 0x4d, 0x72, 0x08, 0x63, 0xda, 0xbe, 0x09, - 0xa7, 0xba, 0xd2, 0xb9, 0xfa, 0x30, 0x41, 0xf6, 0x4d, 0xa6, 0xb5, 0x31, 0x0c, 0x53, 0xc2, 0xb2, - 0x10, 0xcf, 0x0c, 0x9c, 0xe2, 0x0b, 0x89, 0x72, 0x5a, 0x69, 0x6c, 0x90, 0xb6, 0x4a, 0xd1, 0x63, - 0x7e, 0xf8, 0x1b, 0x59, 0x20, 0xee, 0xc6, 0xb7, 0x3f, 0x6f, 0xc1, 0x68, 0x2a, 0xc3, 0xae, 0x20, - 0x63, 0x89, 0xad, 0xb4, 0x80, 0x45, 0x09, 0xb2, 0x50, 0xe9, 0x32, 0x53, 0xa6, 0x7a, 0xa5, 0x69, - 0x10, 0x36, 0xf1, 0xec, 0x2f, 0x95, 0xa0, 0x2a, 0x23, 0x2d, 0xfa, 0xe8, 0xca, 0x67, 0x2d, 0x18, - 0x55, 0x67, 0x1f, 0xcc, 0xa9, 0x56, 0x2a, 0x22, 0x1d, 0x82, 0xf6, 0x40, 0x6d, 0xcb, 0xfd, 0xf5, - 0x40, 0x5b, 0xee, 0xd8, 0x64, 0x86, 0xd3, 0xbc, 0xd1, 0x0d, 0x80, 0x78, 0x27, 0x4e, 0x48, 0xdb, - 0x70, 0xef, 0xd9, 0xc6, 0x8a, 0x9b, 0x6c, 0x04, 0x11, 0xa1, 0xeb, 0xeb, 0x5a, 0xd0, 0x24, 0x2b, - 0x0a, 0x53, 0x9b, 0x50, 0xba, 0x0d, 0x1b, 0x94, 0xec, 0x7f, 0x58, 0x82, 0x93, 0xd9, 0x2e, 0xa1, - 0x0f, 0xc1, 0x88, 0xe4, 0x6e, 0xdc, 0xa5, 0x26, 0xc3, 0x4b, 0x46, 0xb0, 0x01, 0xbb, 0xbb, 0x3b, - 0x31, 0xd1, 0x7d, 0x99, 0xdd, 0xa4, 0x89, 0x82, 0x53, 0xc4, 0xf8, 0x01, 0x94, 0x38, 0x29, 0xad, - 0xef, 0x4c, 0x87, 0xa1, 0x38, 0x45, 0x32, 0x0e, 0xa0, 0x4c, 0x28, 0xce, 0x60, 0xa3, 0x65, 0x38, - 0x63, 0xb4, 0x5c, 0x23, 0x6e, 0x6b, 0x63, 0x2d, 0x88, 0xe4, 0x0e, 0xec, 0x51, 0x1d, 0x00, 0xd6, - 0x8d, 0x83, 0x73, 0x9f, 0xa4, 0xda, 0xbe, 0xe1, 0x84, 0x4e, 0xc3, 0x4d, 0x76, 0x84, 0xbf, 0x52, - 0xc9, 0xa6, 0x19, 0xd1, 0x8e, 0x15, 0x86, 0xbd, 0x08, 0x03, 0x7d, 0xce, 0xa0, 0xbe, 0x2c, 0xff, - 0x97, 0xa0, 0x4a, 0xc9, 0x49, 0xf3, 0xae, 0x08, 0x92, 0x01, 0x54, 0xe5, 0x1d, 0x27, 0xc8, 0x86, - 0xb2, 0xeb, 0xc8, 0x33, 0x3e, 0xf5, 0x5a, 0xf3, 0x71, 0xdc, 0x61, 0x9b, 0x69, 0x0a, 0x44, 0x4f, - 0x40, 0x99, 0x6c, 0x87, 0xd9, 0xc3, 0xbc, 0x8b, 0xdb, 0xa1, 0x1b, 0x91, 0x98, 0x22, 0x91, 0xed, - 0x10, 0x9d, 0x83, 0x92, 0xdb, 0x14, 0x4a, 0x0a, 0x04, 0x4e, 0x69, 0x7e, 0x16, 0x97, 0xdc, 0xa6, - 0xbd, 0x0d, 0x35, 0x75, 0xa9, 0x0a, 0xda, 0x94, 0xb2, 0xdb, 0x2a, 0x22, 0x34, 0x4a, 0xd2, 0xed, - 0x21, 0xb5, 0x3b, 0x00, 0x3a, 0xd5, 0xb0, 0x28, 0xf9, 0x72, 0x1e, 0x06, 0x1a, 0x81, 0x48, 0x83, - 0xae, 0x6a, 0x32, 0x4c, 0x68, 0x33, 0x88, 0x7d, 0x13, 0xc6, 0xae, 0xfa, 0xc1, 0x6d, 0x56, 0x11, - 0x9e, 0x15, 0x40, 0xa3, 0x84, 0xd7, 0xe9, 0x8f, 0xac, 0x89, 0xc0, 0xa0, 0x98, 0xc3, 0x54, 0x65, - 0xa8, 0x52, 0xaf, 0xca, 0x50, 0xf6, 0x27, 0x2c, 0x18, 0x51, 0x39, 0x4b, 0x73, 0x5b, 0x9b, 0x94, - 0x6e, 0x2b, 0x0a, 0x3a, 0x61, 0x96, 0x2e, 0xbb, 0xf6, 0x08, 0x73, 0x98, 0x99, 0xcc, 0x57, 0xda, - 0x27, 0x99, 0xef, 0x3c, 0x0c, 0x6c, 0xba, 0x7e, 0x33, 0x7b, 0x8f, 0xc7, 0x55, 0xd7, 0x6f, 0x62, - 0x06, 0xa1, 0x5d, 0x38, 0xa9, 0xba, 0x20, 0x15, 0xc2, 0x0b, 0x30, 0xb2, 0xd6, 0x71, 0xbd, 0xa6, - 0xac, 0xec, 0x96, 0xf1, 0xa8, 0xd4, 0x0d, 0x18, 0x4e, 0x61, 0xd2, 0x7d, 0xdd, 0x9a, 0xeb, 0x3b, - 0xd1, 0xce, 0xb2, 0xd6, 0x40, 0x4a, 0x28, 0xd5, 0x15, 0x04, 0x1b, 0x58, 0xf6, 0x1b, 0x65, 0x18, - 0x4b, 0x67, 0x6e, 0xf5, 0xb1, 0xbd, 0x7a, 0x02, 0x2a, 0x2c, 0x99, 0x2b, 0xfb, 0x69, 0x79, 0x31, - 0x34, 0x0e, 0x43, 0x31, 0x0c, 0xf2, 0x32, 0x10, 0xc5, 0xdc, 0x81, 0xa3, 0x3a, 0xa9, 0xfc, 0x30, - 0x2c, 0xee, 0x4c, 0x54, 0x9e, 0x10, 0xac, 0xd0, 0xa7, 0x2d, 0x18, 0x0a, 0x42, 0xb3, 0xa2, 0xd0, - 0x07, 0x8b, 0xcc, 0x6a, 0x13, 0x49, 0x35, 0xc2, 0x22, 0x56, 0x9f, 0x5e, 0x7e, 0x0e, 0xc9, 0xfa, - 0xdc, 0x7b, 0x61, 0xc4, 0xc4, 0xdc, 0xcf, 0x28, 0xae, 0x9a, 0x46, 0xf1, 0x67, 0xcd, 0x49, 0x21, - 0xf2, 0xf6, 0xfa, 0x58, 0x6e, 0xd7, 0xa1, 0xd2, 0x50, 0x81, 0x02, 0x87, 0xaa, 0x07, 0xaa, 0xea, - 0x32, 0xb0, 0xc3, 0x22, 0x4e, 0xcd, 0xfe, 0xb6, 0x65, 0xcc, 0x0f, 0x4c, 0xe2, 0xf9, 0x26, 0x8a, - 0xa0, 0xdc, 0xda, 0xda, 0x14, 0xa6, 0xe8, 0x95, 0x82, 0x86, 0x77, 0x6e, 0x6b, 0x53, 0xcf, 0x71, - 0xb3, 0x15, 0x53, 0x66, 0x7d, 0x38, 0x0b, 0x53, 0xe9, 0x9d, 0xe5, 0xfd, 0xd3, 0x3b, 0xed, 0x37, - 0x4b, 0x70, 0xaa, 0x6b, 0x52, 0xa1, 0xd7, 0xa1, 0x12, 0xd1, 0xb7, 0x14, 0xaf, 0xb7, 0x50, 0x58, - 0x42, 0x66, 0x3c, 0xdf, 0xd4, 0x7a, 0x37, 0xdd, 0x8e, 0x39, 0x4b, 0x74, 0x05, 0x90, 0x0e, 0x67, - 0x51, 0x9e, 0x4a, 0xfe, 0xca, 0xe7, 0xc4, 0xa3, 0x68, 0xba, 0x0b, 0x03, 0xe7, 0x3c, 0x85, 0x5e, - 0xcc, 0x3a, 0x3c, 0xcb, 0xe9, 0xf3, 0xcd, 0xbd, 0x7c, 0x97, 0xf6, 0xbf, 0x28, 0xc1, 0x68, 0xaa, - 0xc0, 0x13, 0xf2, 0xa0, 0x4a, 0x3c, 0xe6, 0xfc, 0x97, 0xca, 0xe6, 0xa8, 0xf5, 0x92, 0x95, 0x82, - 0xbc, 0x28, 0xe8, 0x62, 0xc5, 0xe1, 0xc1, 0x38, 0x84, 0x7f, 0x01, 0x46, 0x64, 0x87, 0x3e, 0xe8, - 0xb4, 0x3d, 0x31, 0x80, 0x6a, 0x8e, 0x5e, 0x34, 0x60, 0x38, 0x85, 0x69, 0xff, 0x4e, 0x19, 0xc6, - 0xf9, 0x69, 0x49, 0x53, 0xcd, 0xbc, 0x45, 0xb9, 0xdf, 0xfa, 0xab, 0xba, 0x0c, 0x1b, 0x1f, 0xc8, - 0xb5, 0xa3, 0x5e, 0x4f, 0x90, 0xcf, 0xa8, 0xaf, 0x08, 0xae, 0xaf, 0x66, 0x22, 0xb8, 0xb8, 0xd9, - 0xdd, 0x3a, 0xa6, 0x1e, 0x7d, 0x6f, 0x85, 0x74, 0xfd, 0xbd, 0x12, 0x9c, 0xc8, 0xdc, 0xfd, 0x80, - 0xde, 0x48, 0x97, 0x0b, 0xb6, 0x8a, 0xf0, 0xa9, 0xef, 0x79, 0x1d, 0xc0, 0xc1, 0x8a, 0x06, 0xdf, - 0xa7, 0xa5, 0x62, 0xff, 0x41, 0x09, 0xc6, 0xd2, 0x97, 0x56, 0x3c, 0x80, 0x23, 0xf5, 0x2e, 0xa8, - 0xb1, 0xba, 0xec, 0xec, 0x32, 0x4e, 0xee, 0x92, 0xe7, 0x25, 0xb0, 0x65, 0x23, 0xd6, 0xf0, 0x07, - 0xa2, 0x16, 0xb3, 0xfd, 0xf7, 0x2d, 0x38, 0xcb, 0xdf, 0x32, 0x3b, 0x0f, 0xff, 0x5a, 0xde, 0xe8, - 0xbe, 0x52, 0x6c, 0x07, 0x33, 0xe5, 0x03, 0xf7, 0x1b, 0x5f, 0x76, 0x09, 0xa0, 0xe8, 0x6d, 0x7a, - 0x2a, 0x3c, 0x80, 0x9d, 0x3d, 0xd0, 0x64, 0xb0, 0xff, 0xa0, 0x0c, 0xfa, 0xde, 0x43, 0xe4, 0x8a, - 0x5c, 0xc8, 0x42, 0xca, 0x28, 0xae, 0xec, 0xf8, 0x0d, 0x7d, 0xc3, 0x62, 0x35, 0x93, 0x0a, 0xf9, - 0x73, 0x16, 0x0c, 0xbb, 0xbe, 0x9b, 0xb8, 0x0e, 0xdb, 0x46, 0x17, 0x73, 0x27, 0x9b, 0x62, 0x37, - 0xcf, 0x29, 0x07, 0x91, 0x79, 0x8e, 0xa3, 0x98, 0x61, 0x93, 0x33, 0xfa, 0x88, 0x08, 0xb2, 0x2e, - 0x17, 0x96, 0xc5, 0x5b, 0xcd, 0x44, 0x56, 0x87, 0xd4, 0xf0, 0x4a, 0xa2, 0x82, 0x92, 0xdf, 0x31, - 0x25, 0xa5, 0x2a, 0xf2, 0xea, 0x1b, 0xa8, 0x69, 0x33, 0xe6, 0x8c, 0xec, 0x18, 0x50, 0xf7, 0x58, - 0x1c, 0x30, 0x80, 0x75, 0x0a, 0x6a, 0x4e, 0x27, 0x09, 0xda, 0x74, 0x98, 0xc4, 0x51, 0x93, 0x0e, - 0xd1, 0x95, 0x00, 0xac, 0x71, 0xec, 0x37, 0x2a, 0x90, 0x49, 0x4e, 0x44, 0xdb, 0xe6, 0x9d, 0x9d, - 0x56, 0xb1, 0x77, 0x76, 0xaa, 0xce, 0xe4, 0xdd, 0xdb, 0x89, 0x5a, 0x50, 0x09, 0x37, 0x9c, 0x58, - 0x9a, 0xd5, 0x2f, 0xa9, 0x7d, 0x1c, 0x6d, 0xbc, 0xbb, 0x3b, 0xf1, 0xe3, 0xfd, 0x79, 0x5d, 0xe9, - 0x5c, 0x9d, 0xe2, 0x65, 0x4e, 0x34, 0x6b, 0x46, 0x03, 0x73, 0xfa, 0x07, 0xb9, 0x95, 0xee, 0x93, - 0xa2, 0x00, 0x3d, 0x26, 0x71, 0xc7, 0x4b, 0xc4, 0x6c, 0x78, 0xa9, 0xc0, 0x55, 0xc6, 0x09, 0xeb, - 0xb4, 0x7a, 0xfe, 0x1f, 0x1b, 0x4c, 0xd1, 0x87, 0xa0, 0x16, 0x27, 0x4e, 0x94, 0x1c, 0x32, 0x11, - 0x56, 0x0d, 0xfa, 0x8a, 0x24, 0x82, 0x35, 0x3d, 0xf4, 0x32, 0xab, 0x2a, 0xeb, 0xc6, 0x1b, 0x87, - 0xcc, 0x8d, 0x90, 0x15, 0x68, 0x05, 0x05, 0x6c, 0x50, 0x43, 0x17, 0x00, 0xd8, 0xdc, 0xe6, 0x01, - 0x81, 0x55, 0xe6, 0x65, 0x52, 0xa2, 0x10, 0x2b, 0x08, 0x36, 0xb0, 0xec, 0x1f, 0x86, 0x74, 0x5d, - 0x08, 0x34, 0x21, 0xcb, 0x50, 0x70, 0x2f, 0x34, 0xcb, 0x71, 0x48, 0x55, 0x8c, 0xf8, 0x75, 0x0b, - 0xcc, 0xe2, 0x15, 0xe8, 0x35, 0x5e, 0x25, 0xc3, 0x2a, 0xe2, 0xe4, 0xd0, 0xa0, 0x3b, 0xb9, 0xe8, - 0x84, 0x99, 0x23, 0x6c, 0x59, 0x2a, 0xe3, 0xdc, 0x7b, 0xa0, 0x2a, 0xa1, 0x07, 0x32, 0xea, 0x3e, - 0x0e, 0xa7, 0xb3, 0x37, 0x9a, 0x8b, 0x53, 0xa7, 0xfd, 0x5d, 0x3f, 0xd2, 0x9f, 0x53, 0xea, 0xe5, - 0xcf, 0xe9, 0xe3, 0xe6, 0xd6, 0xdf, 0xb0, 0xe0, 0xfc, 0x7e, 0x17, 0xaf, 0xa3, 0x47, 0x61, 0xe0, - 0xb6, 0x13, 0xc9, 0x72, 0xdf, 0x4c, 0x50, 0xde, 0x74, 0x22, 0x1f, 0xb3, 0x56, 0xb4, 0x03, 0x83, - 0x3c, 0x6a, 0x4c, 0x58, 0xeb, 0x2f, 0x15, 0x7b, 0x0d, 0xfc, 0x55, 0x62, 0x6c, 0x17, 0x78, 0xc4, - 0x1a, 0x16, 0x0c, 0xed, 0xef, 0x58, 0x80, 0x96, 0xb6, 0x48, 0x14, 0xb9, 0x4d, 0x23, 0xce, 0x8d, - 0x5d, 0xe4, 0x62, 0x5c, 0xd8, 0x62, 0xa6, 0xc2, 0x66, 0x2e, 0x72, 0x31, 0xfe, 0xe5, 0x5f, 0xe4, - 0x52, 0x3a, 0xd8, 0x45, 0x2e, 0x68, 0x09, 0xce, 0xb6, 0xf9, 0x76, 0x83, 0x5f, 0x8e, 0xc0, 0xf7, - 0x1e, 0x2a, 0xf1, 0xec, 0x91, 0x3b, 0xbb, 0x13, 0x67, 0x17, 0xf3, 0x10, 0x70, 0xfe, 0x73, 0xf6, - 0x7b, 0x00, 0xf1, 0xf0, 0xb6, 0x99, 0xbc, 0x58, 0xa5, 0x9e, 0xee, 0x17, 0xfb, 0x2b, 0x15, 0x38, - 0x91, 0x29, 0x06, 0x4b, 0xb7, 0x7a, 0xdd, 0xc1, 0x51, 0x47, 0xd6, 0xdf, 0xdd, 0xdd, 0xeb, 0x2b, - 0xdc, 0xca, 0x87, 0x8a, 0xeb, 0x87, 0x9d, 0xa4, 0x98, 0x5c, 0x53, 0xde, 0x89, 0x79, 0x4a, 0xd0, - 0x70, 0x17, 0xd3, 0xbf, 0x98, 0xb3, 0x29, 0x32, 0x78, 0x2b, 0x65, 0x8c, 0x0f, 0xdc, 0x27, 0x77, - 0xc0, 0x27, 0x75, 0x28, 0x55, 0xa5, 0x08, 0xc7, 0x62, 0x66, 0xb2, 0x1c, 0xf7, 0x51, 0xfb, 0xaf, - 0x95, 0x60, 0xd8, 0xf8, 0x68, 0xe8, 0x97, 0xd2, 0xa5, 0x9d, 0xac, 0xe2, 0x5e, 0x89, 0xd1, 0x9f, - 0xd4, 0xc5, 0x9b, 0xf8, 0x2b, 0x3d, 0xd9, 0x5d, 0xd5, 0xe9, 0xee, 0xee, 0xc4, 0xc9, 0x4c, 0xdd, - 0xa6, 0x54, 0xa5, 0xa7, 0x73, 0x1f, 0x83, 0x13, 0x19, 0x32, 0x39, 0xaf, 0xbc, 0x9a, 0xbe, 0xb0, - 0xfe, 0x88, 0x6e, 0x29, 0x73, 0xc8, 0xbe, 0x41, 0x87, 0x4c, 0xa4, 0xdb, 0x05, 0x1e, 0xe9, 0xc3, - 0x07, 0x9b, 0xc9, 0xaa, 0x2d, 0xf5, 0x99, 0x55, 0xfb, 0x14, 0x54, 0xc3, 0xc0, 0x73, 0x1b, 0xae, - 0xaa, 0x7f, 0xc8, 0xf2, 0x78, 0x97, 0x45, 0x1b, 0x56, 0x50, 0x74, 0x1b, 0x6a, 0xea, 0x6e, 0x7f, - 0xe1, 0xdf, 0x2e, 0xea, 0xd0, 0x47, 0x19, 0x2d, 0xfa, 0xce, 0x7e, 0xcd, 0x0b, 0xd9, 0x30, 0xc8, - 0x94, 0xa0, 0x4c, 0x11, 0x60, 0xbe, 0x77, 0xa6, 0x1d, 0x63, 0x2c, 0x20, 0xf6, 0xd7, 0x6b, 0x70, - 0x26, 0xaf, 0x22, 0x37, 0xfa, 0x28, 0x0c, 0xf2, 0x3e, 0x16, 0x73, 0xe9, 0x43, 0x1e, 0x8f, 0x39, - 0x46, 0x50, 0x74, 0x8b, 0xfd, 0xc6, 0x82, 0xa7, 0xe0, 0xee, 0x39, 0x6b, 0x62, 0x86, 0x1c, 0x0f, - 0xf7, 0x05, 0x47, 0x73, 0x5f, 0x70, 0x38, 0x77, 0xcf, 0x59, 0x43, 0xdb, 0x50, 0x69, 0xb9, 0x09, - 0x71, 0x84, 0x13, 0xe1, 0xe6, 0xb1, 0x30, 0x27, 0x0e, 0xb7, 0xd2, 0xd8, 0x4f, 0xcc, 0x19, 0xa2, - 0xaf, 0x59, 0x70, 0x62, 0x2d, 0x9d, 0x42, 0x2f, 0x84, 0xa7, 0x73, 0x0c, 0x55, 0xd7, 0xd3, 0x8c, - 0xf8, 0x4d, 0x46, 0x99, 0x46, 0x9c, 0xed, 0x0e, 0xfa, 0x94, 0x05, 0x43, 0xeb, 0xae, 0x67, 0x14, - 0xe0, 0x3d, 0x86, 0x8f, 0x73, 0x89, 0x31, 0xd0, 0x3b, 0x0e, 0xfe, 0x3f, 0xc6, 0x92, 0x73, 0x2f, - 0x4d, 0x35, 0x78, 0x54, 0x4d, 0x35, 0x74, 0x9f, 0x34, 0xd5, 0x67, 0x2c, 0xa8, 0xa9, 0x91, 0x16, - 0x69, 0xd1, 0x1f, 0x3a, 0xc6, 0x4f, 0xce, 0x3d, 0x27, 0xea, 0x2f, 0xd6, 0xcc, 0xd1, 0x17, 0x2d, - 0x18, 0x76, 0x5e, 0xef, 0x44, 0xa4, 0x49, 0xb6, 0x82, 0x30, 0x16, 0xd7, 0x20, 0xbe, 0x52, 0x7c, - 0x67, 0xa6, 0x29, 0x93, 0x59, 0xb2, 0xb5, 0x14, 0xc6, 0x22, 0x7d, 0x49, 0x37, 0x60, 0xb3, 0x0b, - 0xf6, 0x6e, 0x09, 0x26, 0xf6, 0xa1, 0x80, 0x5e, 0x80, 0x91, 0x20, 0x6a, 0x39, 0xbe, 0xfb, 0xba, - 0x59, 0x13, 0x43, 0x59, 0x59, 0x4b, 0x06, 0x0c, 0xa7, 0x30, 0xcd, 0xc4, 0xed, 0xd2, 0x3e, 0x89, - 0xdb, 0xe7, 0x61, 0x20, 0x22, 0x61, 0x90, 0xdd, 0x2c, 0xb0, 0xd4, 0x01, 0x06, 0x41, 0x8f, 0x41, - 0xd9, 0x09, 0x5d, 0x11, 0x88, 0xa6, 0xf6, 0x40, 0xd3, 0xcb, 0xf3, 0x98, 0xb6, 0xa7, 0xea, 0x48, - 0x54, 0xee, 0x49, 0x1d, 0x09, 0xaa, 0x06, 0xc4, 0xd9, 0xc5, 0xa0, 0x56, 0x03, 0xe9, 0x33, 0x05, - 0xfb, 0xcd, 0x32, 0x3c, 0xb6, 0xe7, 0x7c, 0xd1, 0x71, 0x78, 0xd6, 0x1e, 0x71, 0x78, 0x72, 0x78, - 0x4a, 0xfb, 0x0d, 0x4f, 0xb9, 0xc7, 0xf0, 0x7c, 0x8a, 0x2e, 0x03, 0x59, 0x4b, 0xa4, 0x98, 0x8b, - 0xec, 0x7a, 0x95, 0x26, 0x11, 0x2b, 0x40, 0x42, 0xb1, 0xe6, 0x4b, 0xf7, 0x00, 0xa9, 0xa4, 0xe5, - 0x4a, 0x11, 0x6a, 0xa0, 0x67, 0x6d, 0x11, 0x3e, 0xf7, 0x7b, 0x65, 0x42, 0xdb, 0x3f, 0x5f, 0x82, - 0x27, 0xfa, 0x90, 0xde, 0xe6, 0x2c, 0xb6, 0xfa, 0x9c, 0xc5, 0xdf, 0xdb, 0x9f, 0xc9, 0xfe, 0xeb, - 0x16, 0x9c, 0xeb, 0xad, 0x3c, 0xd0, 0xb3, 0x30, 0xbc, 0x16, 0x39, 0x7e, 0x63, 0x83, 0x5d, 0xce, - 0x29, 0x07, 0x85, 0x8d, 0xb5, 0x6e, 0xc6, 0x26, 0x0e, 0xdd, 0xde, 0xf2, 0x98, 0x04, 0x03, 0x43, - 0x26, 0x99, 0xd2, 0xed, 0xed, 0x6a, 0x16, 0x88, 0xbb, 0xf1, 0xed, 0x3f, 0x2b, 0xe5, 0x77, 0x8b, - 0x1b, 0x19, 0x07, 0xf9, 0x4e, 0xe2, 0x2b, 0x94, 0xfa, 0x90, 0x25, 0xe5, 0x7b, 0x2d, 0x4b, 0x06, - 0x7a, 0xc9, 0x12, 0x34, 0x0b, 0x27, 0x8d, 0xcb, 0x5b, 0x78, 0xe2, 0x30, 0x0f, 0xb8, 0x55, 0xd5, - 0x34, 0x96, 0x33, 0x70, 0xdc, 0xf5, 0x04, 0x7a, 0x1a, 0xaa, 0xae, 0x1f, 0x93, 0x46, 0x27, 0xe2, - 0x81, 0xde, 0x46, 0xb2, 0xd6, 0xbc, 0x68, 0xc7, 0x0a, 0xc3, 0xfe, 0xe5, 0x12, 0x3c, 0xd2, 0xd3, - 0xce, 0xba, 0x47, 0xb2, 0xcb, 0xfc, 0x1c, 0x03, 0xf7, 0xe6, 0x73, 0x98, 0x83, 0x54, 0xd9, 0x77, - 0x90, 0xfe, 0xb0, 0xf7, 0xc4, 0xa4, 0x36, 0xf7, 0xf7, 0xed, 0x28, 0xbd, 0x08, 0xa3, 0x4e, 0x18, - 0x72, 0x3c, 0x16, 0xaf, 0x99, 0xa9, 0xa6, 0x33, 0x6d, 0x02, 0x71, 0x1a, 0xb7, 0x2f, 0xed, 0xf9, - 0xc7, 0x16, 0xd4, 0x30, 0x59, 0xe7, 0xd2, 0x01, 0xdd, 0x12, 0x43, 0x64, 0x15, 0x51, 0x77, 0x93, - 0x0e, 0x6c, 0xec, 0xb2, 0x7a, 0x94, 0x79, 0x83, 0xdd, 0x7d, 0xc9, 0x4f, 0xe9, 0x40, 0x97, 0xfc, - 0xa8, 0x6b, 0x5e, 0xca, 0xbd, 0xaf, 0x79, 0xb1, 0xbf, 0x31, 0x44, 0x5f, 0x2f, 0x0c, 0x66, 0x22, - 0xd2, 0x8c, 0xe9, 0xf7, 0xed, 0x44, 0x9e, 0x98, 0x24, 0xea, 0xfb, 0x5e, 0xc7, 0x0b, 0x98, 0xb6, - 0xa7, 0x8e, 0x62, 0x4a, 0x07, 0xaa, 0x25, 0x52, 0xde, 0xb7, 0x96, 0xc8, 0x8b, 0x30, 0x1a, 0xc7, - 0x1b, 0xcb, 0x91, 0xbb, 0xe5, 0x24, 0xe4, 0x2a, 0xd9, 0x11, 0x56, 0x96, 0xce, 0xff, 0x5f, 0xb9, - 0xac, 0x81, 0x38, 0x8d, 0x8b, 0xe6, 0xe0, 0x94, 0xae, 0xe8, 0x41, 0xa2, 0x84, 0x45, 0xf7, 0xf3, - 0x99, 0xa0, 0x92, 0x7d, 0x75, 0x0d, 0x10, 0x81, 0x80, 0xbb, 0x9f, 0xa1, 0xf2, 0x2d, 0xd5, 0x48, - 0x3b, 0x32, 0x98, 0x96, 0x6f, 0x29, 0x3a, 0xb4, 0x2f, 0x5d, 0x4f, 0xa0, 0x45, 0x38, 0xcd, 0x27, - 0xc6, 0x74, 0x18, 0x1a, 0x6f, 0x34, 0x94, 0xae, 0x77, 0x38, 0xd7, 0x8d, 0x82, 0xf3, 0x9e, 0x43, - 0xcf, 0xc3, 0xb0, 0x6a, 0x9e, 0x9f, 0x15, 0xa7, 0x08, 0xca, 0x8b, 0xa1, 0xc8, 0xcc, 0x37, 0xb1, - 0x89, 0x87, 0x3e, 0x08, 0x0f, 0xeb, 0xbf, 0x3c, 0x05, 0x8c, 0x1f, 0xad, 0xcd, 0x8a, 0x62, 0x49, - 0xea, 0x52, 0x91, 0xb9, 0x5c, 0xb4, 0x26, 0xee, 0xf5, 0x3c, 0x5a, 0x83, 0x73, 0x0a, 0x74, 0xd1, - 0x4f, 0x58, 0x3e, 0x47, 0x4c, 0xea, 0x4e, 0x4c, 0xae, 0x47, 0x9e, 0xb8, 0x95, 0x55, 0xdd, 0xf7, - 0x38, 0xe7, 0x26, 0x97, 0xf3, 0x30, 0xf1, 0x02, 0xde, 0x83, 0x0a, 0x9a, 0x82, 0x1a, 0xf1, 0x9d, - 0x35, 0x8f, 0x2c, 0xcd, 0xcc, 0xb3, 0xa2, 0x4b, 0xc6, 0x49, 0xde, 0x45, 0x09, 0xc0, 0x1a, 0x47, - 0x45, 0x98, 0x8e, 0xf4, 0xbc, 0x7b, 0x74, 0x19, 0xce, 0xb4, 0x1a, 0x21, 0xb5, 0x3d, 0xdc, 0x06, - 0x99, 0x6e, 0xb0, 0x80, 0x3a, 0xfa, 0x61, 0x78, 0x21, 0x4a, 0x15, 0x3e, 0x3d, 0x37, 0xb3, 0xdc, - 0x85, 0x83, 0x73, 0x9f, 0x64, 0x81, 0x97, 0x51, 0xb0, 0xbd, 0x33, 0x7e, 0x3a, 0x13, 0x78, 0x49, - 0x1b, 0x31, 0x87, 0xa1, 0x2b, 0x80, 0x58, 0x2c, 0xfe, 0xe5, 0x24, 0x09, 0x95, 0xb1, 0x33, 0x7e, - 0x86, 0xbd, 0x92, 0x0a, 0x23, 0xbb, 0xd4, 0x85, 0x81, 0x73, 0x9e, 0xb2, 0xff, 0xa3, 0x05, 0xa3, - 0x6a, 0xbd, 0xde, 0x83, 0x6c, 0x14, 0x2f, 0x9d, 0x8d, 0x32, 0x77, 0x74, 0x89, 0xc7, 0x7a, 0xde, - 0x23, 0xa4, 0xf9, 0x67, 0x86, 0x01, 0xb4, 0x54, 0x54, 0x0a, 0xc9, 0xea, 0xa9, 0x90, 0x1e, 0x58, - 0x89, 0x94, 0x57, 0x61, 0xa5, 0x72, 0x7f, 0x2b, 0xac, 0xac, 0xc0, 0x59, 0x69, 0x2e, 0xf0, 0xb3, - 0xa2, 0xcb, 0x41, 0xac, 0x04, 0x5c, 0xb5, 0xfe, 0x98, 0x20, 0x74, 0x76, 0x3e, 0x0f, 0x09, 0xe7, - 0x3f, 0x9b, 0xb2, 0x52, 0x86, 0xf6, 0xb3, 0x52, 0xf4, 0x9a, 0x5e, 0x58, 0x97, 0xb7, 0x87, 0x64, - 0xd6, 0xf4, 0xc2, 0xa5, 0x15, 0xac, 0x71, 0xf2, 0x05, 0x7b, 0xad, 0x20, 0xc1, 0x0e, 0x07, 0x16, - 0xec, 0x52, 0xc4, 0x0c, 0xf7, 0x14, 0x31, 0xd2, 0x27, 0x3d, 0xd2, 0xd3, 0x27, 0xfd, 0x3e, 0x18, - 0x73, 0xfd, 0x0d, 0x12, 0xb9, 0x09, 0x69, 0xb2, 0xb5, 0xc0, 0xc4, 0x4f, 0x55, 0xab, 0xf5, 0xf9, - 0x14, 0x14, 0x67, 0xb0, 0xd3, 0x72, 0x71, 0xac, 0x0f, 0xb9, 0xd8, 0x43, 0x1b, 0x9d, 0x28, 0x46, - 0x1b, 0x9d, 0x3c, 0xba, 0x36, 0x3a, 0x75, 0xac, 0xda, 0x08, 0x15, 0xa2, 0x8d, 0xfa, 0x12, 0xf4, - 0xc6, 0xf6, 0xef, 0xcc, 0x3e, 0xdb, 0xbf, 0x5e, 0xaa, 0xe8, 0xec, 0xa1, 0x55, 0x51, 0xbe, 0x96, - 0x79, 0xe8, 0x50, 0x5a, 0xe6, 0x33, 0x25, 0x38, 0xab, 0xe5, 0x30, 0x9d, 0xfd, 0xee, 0x3a, 0x95, - 0x44, 0xec, 0x02, 0x2a, 0x7e, 0x6e, 0x63, 0x24, 0x47, 0xe9, 0x3c, 0x2b, 0x05, 0xc1, 0x06, 0x16, - 0xcb, 0x31, 0x22, 0x11, 0x2b, 0xb7, 0x9b, 0x15, 0xd2, 0x33, 0xa2, 0x1d, 0x2b, 0x0c, 0x3a, 0xbf, - 0xe8, 0x6f, 0x91, 0xb7, 0x99, 0x2d, 0x2a, 0x37, 0xa3, 0x41, 0xd8, 0xc4, 0x43, 0x4f, 0x71, 0x26, - 0x4c, 0x40, 0x50, 0x41, 0x3d, 0x22, 0x6e, 0xa4, 0x95, 0x32, 0x41, 0x41, 0x65, 0x77, 0x58, 0x32, - 0x59, 0xa5, 0xbb, 0x3b, 0x2c, 0x04, 0x4a, 0x61, 0xd8, 0xff, 0xcb, 0x82, 0x47, 0x72, 0x87, 0xe2, - 0x1e, 0x28, 0xdf, 0xed, 0xb4, 0xf2, 0x5d, 0x29, 0x6a, 0xbb, 0x61, 0xbc, 0x45, 0x0f, 0x45, 0xfc, - 0xef, 0x2d, 0x18, 0xd3, 0xf8, 0xf7, 0xe0, 0x55, 0xdd, 0xf4, 0xab, 0x16, 0xb7, 0xb3, 0xaa, 0x75, - 0xbd, 0xdb, 0xef, 0x94, 0x40, 0x15, 0x7a, 0x9c, 0x6e, 0xc8, 0x32, 0xba, 0xfb, 0x9c, 0x24, 0xee, - 0xc0, 0x20, 0x3b, 0x08, 0x8d, 0x8b, 0x09, 0xf2, 0x48, 0xf3, 0x67, 0x87, 0xaa, 0xfa, 0x90, 0x99, - 0xfd, 0x8d, 0xb1, 0x60, 0xc8, 0x8a, 0x41, 0xbb, 0x31, 0x95, 0xe6, 0x4d, 0x91, 0x96, 0xa5, 0x8b, - 0x41, 0x8b, 0x76, 0xac, 0x30, 0xa8, 0x7a, 0x70, 0x1b, 0x81, 0x3f, 0xe3, 0x39, 0xb1, 0xbc, 0x75, - 0x51, 0xa9, 0x87, 0x79, 0x09, 0xc0, 0x1a, 0x87, 0x9d, 0x91, 0xba, 0x71, 0xe8, 0x39, 0x3b, 0xc6, - 0xfe, 0xd9, 0xa8, 0x4f, 0xa0, 0x40, 0xd8, 0xc4, 0xb3, 0xdb, 0x30, 0x9e, 0x7e, 0x89, 0x59, 0xb2, - 0xce, 0x02, 0x14, 0xfb, 0x1a, 0xce, 0x29, 0xa8, 0x39, 0xec, 0xa9, 0x85, 0x8e, 0x93, 0xbd, 0x2c, - 0x7d, 0x5a, 0x02, 0xb0, 0xc6, 0xb1, 0x7f, 0xd5, 0x82, 0xd3, 0x39, 0x83, 0x56, 0x60, 0xda, 0x5b, - 0xa2, 0xa5, 0x4d, 0x9e, 0x62, 0x7f, 0x27, 0x0c, 0x35, 0xc9, 0xba, 0x23, 0x43, 0xe0, 0x0c, 0xd9, - 0x3e, 0xcb, 0x9b, 0xb1, 0x84, 0xdb, 0xff, 0xc3, 0x82, 0x13, 0xe9, 0xbe, 0xc6, 0x2c, 0x95, 0x84, - 0x0f, 0x93, 0x1b, 0x37, 0x82, 0x2d, 0x12, 0xed, 0xd0, 0x37, 0xb7, 0x32, 0xa9, 0x24, 0x5d, 0x18, - 0x38, 0xe7, 0x29, 0x56, 0xe6, 0xb5, 0xa9, 0x46, 0x5b, 0xce, 0xc8, 0x1b, 0x45, 0xce, 0x48, 0xfd, - 0x31, 0xcd, 0xe3, 0x72, 0xc5, 0x12, 0x9b, 0xfc, 0xed, 0xef, 0x0c, 0x80, 0xca, 0x8b, 0x65, 0xf1, - 0x47, 0x05, 0x45, 0x6f, 0x1d, 0x34, 0x83, 0x48, 0x4d, 0x86, 0x81, 0xbd, 0x02, 0x02, 0xb8, 0x97, - 0xc4, 0x74, 0x5d, 0xaa, 0x37, 0x5c, 0xd5, 0x20, 0x6c, 0xe2, 0xd1, 0x9e, 0x78, 0xee, 0x16, 0xe1, - 0x0f, 0x0d, 0xa6, 0x7b, 0xb2, 0x20, 0x01, 0x58, 0xe3, 0xd0, 0x9e, 0x34, 0xdd, 0xf5, 0x75, 0xb1, - 0xe5, 0x57, 0x3d, 0xa1, 0xa3, 0x83, 0x19, 0x84, 0x57, 0xee, 0x0e, 0x36, 0x85, 0x15, 0x6c, 0x54, - 0xee, 0x0e, 0x36, 0x31, 0x83, 0x50, 0xbb, 0xcd, 0x0f, 0xa2, 0x36, 0xbb, 0xcc, 0xbe, 0xa9, 0xb8, - 0x08, 0xeb, 0x57, 0xd9, 0x6d, 0xd7, 0xba, 0x51, 0x70, 0xde, 0x73, 0x74, 0x06, 0x86, 0x11, 0x69, - 0xba, 0x8d, 0xc4, 0xa4, 0x06, 0xe9, 0x19, 0xb8, 0xdc, 0x85, 0x81, 0x73, 0x9e, 0x42, 0xd3, 0x70, - 0x42, 0xe6, 0x35, 0xcb, 0xaa, 0x35, 0xc3, 0xe9, 0x2a, 0x19, 0x38, 0x0d, 0xc6, 0x59, 0x7c, 0x2a, - 0xd5, 0xda, 0xa2, 0xb0, 0x15, 0x33, 0x96, 0x0d, 0xa9, 0x26, 0x0b, 0x5e, 0x61, 0x85, 0x61, 0x7f, - 0xb2, 0x4c, 0xb5, 0x70, 0x8f, 0x82, 0x6e, 0xf7, 0x2c, 0x5a, 0x30, 0x3d, 0x23, 0x07, 0xfa, 0x98, - 0x91, 0xcf, 0xc1, 0xc8, 0xad, 0x38, 0xf0, 0x55, 0x24, 0x5e, 0xa5, 0x67, 0x24, 0x9e, 0x81, 0x95, - 0x1f, 0x89, 0x37, 0x58, 0x54, 0x24, 0xde, 0xd0, 0x21, 0x23, 0xf1, 0xbe, 0x55, 0x01, 0x75, 0x85, - 0xc8, 0x35, 0x92, 0xdc, 0x0e, 0xa2, 0x4d, 0xd7, 0x6f, 0xb1, 0x7c, 0xf0, 0xaf, 0x59, 0x30, 0xc2, - 0xd7, 0xcb, 0x82, 0x99, 0x49, 0xb5, 0x5e, 0xd0, 0xdd, 0x14, 0x29, 0x66, 0x93, 0xab, 0x06, 0xa3, - 0xcc, 0xa5, 0x9f, 0x26, 0x08, 0xa7, 0x7a, 0x84, 0x3e, 0x06, 0x20, 0xfd, 0xa3, 0xeb, 0x52, 0x64, - 0xce, 0x17, 0xd3, 0x3f, 0x4c, 0xd6, 0xb5, 0x0d, 0xbc, 0xaa, 0x98, 0x60, 0x83, 0x21, 0xfa, 0x8c, - 0xce, 0x32, 0xe3, 0x21, 0xfb, 0x1f, 0x39, 0x96, 0xb1, 0xe9, 0x27, 0xc7, 0x0c, 0xc3, 0x90, 0xeb, - 0xb7, 0xe8, 0x3c, 0x11, 0x11, 0x4b, 0xef, 0xc8, 0xab, 0xa5, 0xb0, 0x10, 0x38, 0xcd, 0xba, 0xe3, - 0x39, 0x7e, 0x83, 0x44, 0xf3, 0x1c, 0xdd, 0xbc, 0xea, 0x9a, 0x35, 0x60, 0x49, 0xa8, 0xeb, 0xf2, - 0x95, 0x4a, 0x3f, 0x97, 0xaf, 0x9c, 0x7b, 0x3f, 0x9c, 0xea, 0xfa, 0x98, 0x07, 0x4a, 0x29, 0x3b, - 0x7c, 0x36, 0x9a, 0xfd, 0x2f, 0x07, 0xb5, 0xd2, 0xba, 0x16, 0x34, 0xf9, 0x15, 0x20, 0x91, 0xfe, - 0xa2, 0xc2, 0xc6, 0x2d, 0x70, 0x8a, 0x18, 0xd7, 0x65, 0xab, 0x46, 0x6c, 0xb2, 0xa4, 0x73, 0x34, - 0x74, 0x22, 0xe2, 0x1f, 0xf7, 0x1c, 0x5d, 0x56, 0x4c, 0xb0, 0xc1, 0x10, 0x6d, 0xa4, 0x72, 0x4a, - 0x2e, 0x1d, 0x3d, 0xa7, 0x84, 0x55, 0x99, 0xca, 0xab, 0xda, 0xff, 0x45, 0x0b, 0xc6, 0xfc, 0xd4, - 0xcc, 0x2d, 0x26, 0x8c, 0x34, 0x7f, 0x55, 0xf0, 0x1b, 0xa8, 0xd2, 0x6d, 0x38, 0xc3, 0x3f, 0x4f, - 0xa5, 0x55, 0x0e, 0xa8, 0xd2, 0xf4, 0x5d, 0x42, 0x83, 0xbd, 0xee, 0x12, 0x42, 0xbe, 0xba, 0x4c, - 0x6d, 0xa8, 0xf0, 0xcb, 0xd4, 0x20, 0xe7, 0x22, 0xb5, 0x9b, 0x50, 0x6b, 0x44, 0xc4, 0x49, 0x0e, - 0x79, 0xaf, 0x16, 0x3b, 0xa0, 0x9f, 0x91, 0x04, 0xb0, 0xa6, 0x65, 0xff, 0xdf, 0x01, 0x38, 0x29, - 0x47, 0x44, 0x86, 0xa0, 0x53, 0xfd, 0xc8, 0xf9, 0x6a, 0xe3, 0x56, 0xe9, 0xc7, 0xcb, 0x12, 0x80, - 0x35, 0x0e, 0xb5, 0xc7, 0x3a, 0x31, 0x59, 0x0a, 0x89, 0xbf, 0xe0, 0xae, 0xc5, 0xe2, 0x9c, 0x53, - 0x2d, 0x94, 0xeb, 0x1a, 0x84, 0x4d, 0x3c, 0x6a, 0x8c, 0x73, 0xbb, 0x38, 0xce, 0xa6, 0xaf, 0x08, - 0x7b, 0x1b, 0x4b, 0x38, 0xfa, 0x85, 0xdc, 0x0a, 0xb3, 0xc5, 0x24, 0x6e, 0x75, 0x45, 0xde, 0x1f, - 0xf0, 0x2a, 0xc6, 0xbf, 0x63, 0xc1, 0x59, 0xde, 0x2a, 0x47, 0xf2, 0x7a, 0xd8, 0x74, 0x12, 0x12, - 0x17, 0x53, 0xf1, 0x3d, 0xa7, 0x7f, 0xda, 0xc9, 0x9b, 0xc7, 0x16, 0xe7, 0xf7, 0x06, 0xbd, 0x61, - 0xc1, 0x89, 0xcd, 0x54, 0xcd, 0x0f, 0xa9, 0x3a, 0x8e, 0x9a, 0x8e, 0x9f, 0x22, 0xaa, 0x97, 0x5a, - 0xba, 0x3d, 0xc6, 0x59, 0xee, 0xf6, 0x9f, 0x59, 0x60, 0x8a, 0xd1, 0x7b, 0x5f, 0x2a, 0xe4, 0xe0, - 0xa6, 0xa0, 0xb4, 0x2e, 0x2b, 0x3d, 0xad, 0xcb, 0xc7, 0xa0, 0xdc, 0x71, 0x9b, 0x62, 0x7f, 0xa1, - 0x4f, 0x5f, 0xe7, 0x67, 0x31, 0x6d, 0xb7, 0xff, 0x59, 0x45, 0xfb, 0x2d, 0x44, 0x5e, 0xd4, 0xf7, - 0xc5, 0x6b, 0xaf, 0xab, 0x62, 0x63, 0xfc, 0xcd, 0xaf, 0x75, 0x15, 0x1b, 0xfb, 0xd1, 0x83, 0xa7, - 0xbd, 0xf1, 0x01, 0xea, 0x55, 0x6b, 0x6c, 0x68, 0x9f, 0x9c, 0xb7, 0x5b, 0x50, 0xa5, 0x5b, 0x30, - 0xe6, 0x80, 0xac, 0xa6, 0x3a, 0x55, 0xbd, 0x2c, 0xda, 0xef, 0xee, 0x4e, 0xbc, 0xf7, 0xe0, 0xdd, - 0x92, 0x4f, 0x63, 0x45, 0x1f, 0xc5, 0x50, 0xa3, 0xbf, 0x59, 0x7a, 0x9e, 0xd8, 0xdc, 0x5d, 0x57, - 0x32, 0x53, 0x02, 0x0a, 0xc9, 0xfd, 0xd3, 0x7c, 0x90, 0x0f, 0x35, 0x76, 0x6b, 0x2d, 0x63, 0xca, - 0xf7, 0x80, 0xcb, 0x2a, 0x49, 0x4e, 0x02, 0xee, 0xee, 0x4e, 0xbc, 0x78, 0x70, 0xa6, 0xea, 0x71, - 0xac, 0x59, 0xd8, 0x5f, 0x1a, 0xd0, 0x73, 0x57, 0xd4, 0x98, 0xfb, 0xbe, 0x98, 0xbb, 0x2f, 0x64, - 0xe6, 0xee, 0xf9, 0xae, 0xb9, 0x3b, 0xa6, 0x6f, 0x57, 0x4d, 0xcd, 0xc6, 0x7b, 0x6d, 0x08, 0xec, - 0xef, 0x6f, 0x60, 0x16, 0xd0, 0x6b, 0x1d, 0x37, 0x22, 0xf1, 0x72, 0xd4, 0xf1, 0x5d, 0xbf, 0xc5, - 0xa6, 0x63, 0xd5, 0xb4, 0x80, 0x52, 0x60, 0x9c, 0xc5, 0xa7, 0x9b, 0x7a, 0xfa, 0xcd, 0x6f, 0x3a, - 0x5b, 0x7c, 0x56, 0x19, 0x65, 0xb7, 0x56, 0x44, 0x3b, 0x56, 0x18, 0xf6, 0x37, 0xd8, 0x59, 0xb6, - 0x91, 0x17, 0x4c, 0xe7, 0x84, 0xc7, 0xae, 0x09, 0xe6, 0x35, 0xbb, 0xd4, 0x9c, 0xe0, 0x77, 0x03, - 0x73, 0x18, 0xba, 0x0d, 0x43, 0x6b, 0xfc, 0x9e, 0xbc, 0x62, 0xea, 0x98, 0x8b, 0x4b, 0xf7, 0xd8, - 0x6d, 0x28, 0xf2, 0x06, 0xbe, 0xbb, 0xfa, 0x27, 0x96, 0xdc, 0xec, 0xdf, 0xaf, 0xc0, 0x89, 0xcc, - 0x45, 0xb2, 0xa9, 0x6a, 0xa9, 0xa5, 0x7d, 0xab, 0xa5, 0x7e, 0x18, 0xa0, 0x49, 0x42, 0x2f, 0xd8, - 0x61, 0xe6, 0xd8, 0xc0, 0x81, 0xcd, 0x31, 0x65, 0xc1, 0xcf, 0x2a, 0x2a, 0xd8, 0xa0, 0x28, 0x0a, - 0x95, 0xf1, 0xe2, 0xab, 0x99, 0x42, 0x65, 0xc6, 0x6d, 0x07, 0x83, 0xf7, 0xf6, 0xb6, 0x03, 0x17, - 0x4e, 0xf0, 0x2e, 0xaa, 0xec, 0xdb, 0x43, 0x24, 0xd9, 0xb2, 0xfc, 0x85, 0xd9, 0x34, 0x19, 0x9c, - 0xa5, 0x7b, 0x3f, 0xef, 0x89, 0x46, 0xef, 0x82, 0x9a, 0xfc, 0xce, 0xf1, 0x78, 0x4d, 0x57, 0x30, - 0x90, 0xd3, 0x80, 0xdd, 0xdf, 0x2c, 0x7e, 0x76, 0x15, 0x12, 0x80, 0xfb, 0x55, 0x48, 0xc0, 0xfe, - 0x42, 0x89, 0xda, 0xf1, 0xbc, 0x5f, 0xaa, 0x26, 0xce, 0x93, 0x30, 0xe8, 0x74, 0x92, 0x8d, 0xa0, - 0xeb, 0xd6, 0xbf, 0x69, 0xd6, 0x8a, 0x05, 0x14, 0x2d, 0xc0, 0x40, 0x53, 0xd7, 0x39, 0x39, 0xc8, - 0xf7, 0xd4, 0x2e, 0x51, 0x27, 0x21, 0x98, 0x51, 0x41, 0x8f, 0xc2, 0x40, 0xe2, 0xb4, 0x64, 0xca, - 0x15, 0x4b, 0xb3, 0x5d, 0x75, 0x5a, 0x31, 0x66, 0xad, 0xa6, 0xfa, 0x1e, 0xd8, 0x47, 0x7d, 0xbf, - 0x08, 0xa3, 0xb1, 0xdb, 0xf2, 0x9d, 0xa4, 0x13, 0x11, 0xe3, 0x98, 0x4f, 0x47, 0x6e, 0x98, 0x40, - 0x9c, 0xc6, 0xb5, 0x7f, 0x73, 0x04, 0xce, 0xac, 0xcc, 0x2c, 0xca, 0xea, 0xdd, 0xc7, 0x96, 0x35, - 0x95, 0xc7, 0xe3, 0xde, 0x65, 0x4d, 0xf5, 0xe0, 0xee, 0x19, 0x59, 0x53, 0x9e, 0x91, 0x35, 0x95, - 0x4e, 0x61, 0x29, 0x17, 0x91, 0xc2, 0x92, 0xd7, 0x83, 0x7e, 0x52, 0x58, 0x8e, 0x2d, 0x8d, 0x6a, - 0xcf, 0x0e, 0x1d, 0x28, 0x8d, 0x4a, 0xe5, 0x98, 0x15, 0x92, 0x5c, 0xd0, 0xe3, 0x53, 0xe5, 0xe6, - 0x98, 0xa9, 0xfc, 0x1e, 0x9e, 0x38, 0x23, 0x44, 0xfd, 0x2b, 0xc5, 0x77, 0xa0, 0x8f, 0xfc, 0x1e, - 0x91, 0xbb, 0x63, 0xe6, 0x94, 0x0d, 0x15, 0x91, 0x53, 0x96, 0xd7, 0x9d, 0x7d, 0x73, 0xca, 0x5e, - 0x84, 0xd1, 0x86, 0x17, 0xf8, 0x64, 0x39, 0x0a, 0x92, 0xa0, 0x11, 0x78, 0xc2, 0xac, 0x57, 0x22, - 0x61, 0xc6, 0x04, 0xe2, 0x34, 0x6e, 0xaf, 0x84, 0xb4, 0xda, 0x51, 0x13, 0xd2, 0xe0, 0x3e, 0x25, - 0xa4, 0xfd, 0xac, 0x4e, 0x9d, 0x1e, 0x66, 0x5f, 0xe4, 0xc3, 0xc5, 0x7f, 0x91, 0x7e, 0xf2, 0xa7, - 0xd1, 0x9b, 0xfc, 0xda, 0x3d, 0x6a, 0x18, 0xcf, 0x04, 0x6d, 0x6a, 0xf8, 0x8d, 0xb0, 0x21, 0x79, - 0xf5, 0x18, 0x26, 0xec, 0xcd, 0x15, 0xcd, 0x46, 0x5d, 0xc5, 0xa7, 0x9b, 0x70, 0xba, 0x23, 0x47, - 0x49, 0xed, 0xfe, 0x4a, 0x09, 0x7e, 0x60, 0xdf, 0x2e, 0xa0, 0xdb, 0x00, 0x89, 0xd3, 0x12, 0x13, - 0x55, 0x1c, 0x98, 0x1c, 0x31, 0xbc, 0x72, 0x55, 0xd2, 0xe3, 0x35, 0x49, 0xd4, 0x5f, 0x76, 0x14, - 0x21, 0x7f, 0xb3, 0xa8, 0xca, 0xc0, 0xeb, 0x2a, 0xdd, 0x88, 0x03, 0x8f, 0x60, 0x06, 0xa1, 0xea, - 0x3f, 0x22, 0x2d, 0x7d, 0x4f, 0xb4, 0xfa, 0x7c, 0x98, 0xb5, 0x62, 0x01, 0x45, 0xcf, 0xc3, 0xb0, - 0xe3, 0x79, 0x3c, 0x3f, 0x86, 0xc4, 0xe2, 0xde, 0x1d, 0x5d, 0x43, 0x4e, 0x83, 0xb0, 0x89, 0x67, - 0xff, 0x69, 0x09, 0x26, 0xf6, 0x91, 0x29, 0x5d, 0x19, 0x7f, 0x95, 0xbe, 0x33, 0xfe, 0x44, 0x8e, - 0xc2, 0x60, 0x8f, 0x1c, 0x85, 0xe7, 0x61, 0x38, 0x21, 0x4e, 0x5b, 0x04, 0x64, 0x09, 0x4f, 0x80, - 0x3e, 0x01, 0xd6, 0x20, 0x6c, 0xe2, 0x51, 0x29, 0x36, 0xe6, 0x34, 0x1a, 0x24, 0x8e, 0x65, 0x12, - 0x82, 0xf0, 0xa6, 0x16, 0x96, 0xe1, 0xc0, 0x9c, 0xd4, 0xd3, 0x29, 0x16, 0x38, 0xc3, 0x32, 0x3b, - 0xe0, 0xb5, 0x3e, 0x07, 0xfc, 0xeb, 0x25, 0x78, 0x6c, 0x4f, 0xed, 0xd6, 0x77, 0x7e, 0x48, 0x27, - 0x26, 0x51, 0x76, 0xe2, 0x5c, 0x8f, 0x49, 0x84, 0x19, 0x84, 0x8f, 0x52, 0x18, 0x1a, 0xf7, 0x70, - 0x17, 0x9d, 0xbc, 0xc4, 0x47, 0x29, 0xc5, 0x02, 0x67, 0x58, 0x1e, 0x76, 0x5a, 0xfe, 0x83, 0x12, - 0x3c, 0xd1, 0x87, 0x0d, 0x50, 0x60, 0x92, 0x57, 0x3a, 0xd5, 0xae, 0x7c, 0x9f, 0x32, 0x22, 0x0f, - 0x39, 0x5c, 0xdf, 0x28, 0xc1, 0xb9, 0xde, 0xaa, 0x18, 0xfd, 0x18, 0x9c, 0x88, 0x54, 0x14, 0x96, - 0x99, 0xa5, 0x77, 0x9a, 0x7b, 0x12, 0x52, 0x20, 0x9c, 0xc5, 0x45, 0x93, 0x00, 0xa1, 0x93, 0x6c, - 0xc4, 0x17, 0xb7, 0xdd, 0x38, 0x11, 0x55, 0x68, 0xc6, 0xf8, 0xd9, 0x95, 0x6c, 0xc5, 0x06, 0x06, - 0x65, 0xc7, 0xfe, 0xcd, 0x06, 0xd7, 0x82, 0x84, 0x3f, 0xc4, 0xb7, 0x11, 0xa7, 0xe5, 0x9d, 0x1d, - 0x06, 0x08, 0x67, 0x71, 0x29, 0x3b, 0x76, 0x3a, 0xca, 0x3b, 0xca, 0xf7, 0x17, 0x8c, 0xdd, 0x82, - 0x6a, 0xc5, 0x06, 0x46, 0x36, 0xff, 0xb0, 0xb2, 0x7f, 0xfe, 0xa1, 0xfd, 0x4f, 0x4b, 0xf0, 0x48, - 0x4f, 0x53, 0xae, 0xbf, 0x05, 0xf8, 0xe0, 0xe5, 0x0c, 0x1e, 0x6e, 0xee, 0x1c, 0x30, 0xb7, 0xed, - 0x8f, 0x7b, 0xcc, 0x34, 0x91, 0xdb, 0x76, 0xf8, 0xe4, 0xf0, 0x07, 0x6f, 0x3c, 0xbb, 0xd2, 0xd9, - 0x06, 0x0e, 0x90, 0xce, 0x96, 0xf9, 0x18, 0x95, 0x3e, 0x17, 0xf2, 0x9f, 0x97, 0x7b, 0x0e, 0x2f, - 0xdd, 0xfa, 0xf5, 0xe5, 0xa7, 0x9d, 0x85, 0x93, 0xae, 0xcf, 0xee, 0x6f, 0x5a, 0xe9, 0xac, 0x89, - 0xc2, 0x24, 0xa5, 0xf4, 0x2d, 0xeb, 0xf3, 0x19, 0x38, 0xee, 0x7a, 0xe2, 0x01, 0x4c, 0x2f, 0x3c, - 0xdc, 0x90, 0x1e, 0x2c, 0xc1, 0x15, 0x2d, 0xc1, 0x59, 0x39, 0x14, 0x1b, 0x4e, 0x44, 0x9a, 0x42, - 0x8d, 0xc4, 0x22, 0xa1, 0xe2, 0x11, 0x9e, 0x94, 0x91, 0x83, 0x80, 0xf3, 0x9f, 0x63, 0x57, 0xe6, - 0x04, 0xa1, 0xdb, 0x10, 0x9b, 0x1c, 0x7d, 0x65, 0x0e, 0x6d, 0xc4, 0x1c, 0x66, 0x7f, 0x18, 0x6a, - 0xea, 0xfd, 0x79, 0x58, 0xb7, 0x9a, 0x74, 0x5d, 0x61, 0xdd, 0x6a, 0xc6, 0x19, 0x58, 0xf4, 0x6b, - 0x51, 0x93, 0x38, 0xb3, 0x7a, 0xae, 0x92, 0x1d, 0x66, 0x1f, 0xdb, 0xef, 0x86, 0x11, 0xe5, 0x67, - 0xe9, 0xf7, 0x22, 0x21, 0xfb, 0x4b, 0x83, 0x30, 0x9a, 0x2a, 0x0e, 0x98, 0x72, 0xb0, 0x5a, 0xfb, - 0x3a, 0x58, 0x59, 0x98, 0x7e, 0xc7, 0x97, 0xb7, 0x8c, 0x19, 0x61, 0xfa, 0x1d, 0x9f, 0x60, 0x0e, - 0xa3, 0xe6, 0x6d, 0x33, 0xda, 0xc1, 0x1d, 0x5f, 0x84, 0xd3, 0x2a, 0xf3, 0x76, 0x96, 0xb5, 0x62, - 0x01, 0x45, 0x9f, 0xb0, 0x60, 0x24, 0x66, 0xde, 0x7b, 0xee, 0x9e, 0x16, 0x93, 0xee, 0xca, 0xd1, - 0x6b, 0x1f, 0xaa, 0x42, 0x98, 0x2c, 0x42, 0xc6, 0x6c, 0xc1, 0x29, 0x8e, 0xe8, 0xd3, 0x16, 0xd4, - 0xd4, 0x65, 0x28, 0xe2, 0xca, 0xc0, 0x95, 0x62, 0x6b, 0x2f, 0x72, 0xbf, 0xa6, 0x3a, 0x08, 0x51, - 0x45, 0xf0, 0xb0, 0x66, 0x8c, 0x62, 0xe5, 0x3b, 0x1e, 0x3a, 0x1e, 0xdf, 0x31, 0xe4, 0xf8, 0x8d, - 0xdf, 0x05, 0xb5, 0xb6, 0xe3, 0xbb, 0xeb, 0x24, 0x4e, 0xb8, 0x3b, 0x57, 0x96, 0x84, 0x95, 0x8d, - 0x58, 0xc3, 0xa9, 0x42, 0x8e, 0xd9, 0x8b, 0x25, 0x86, 0xff, 0x95, 0x29, 0xe4, 0x15, 0xdd, 0x8c, - 0x4d, 0x1c, 0xd3, 0x59, 0x0c, 0xf7, 0xd5, 0x59, 0x3c, 0xbc, 0xb7, 0xb3, 0xd8, 0xfe, 0x47, 0x16, - 0x9c, 0xcd, 0xfd, 0x6a, 0x0f, 0x6e, 0xe0, 0xa3, 0xfd, 0xe5, 0x0a, 0x9c, 0xce, 0xa9, 0xf2, 0x89, - 0x76, 0xcc, 0xf9, 0x6c, 0x15, 0x11, 0x43, 0x90, 0x3e, 0x12, 0x97, 0xc3, 0x98, 0x33, 0x89, 0x0f, - 0x76, 0x54, 0xa3, 0x8f, 0x4b, 0xca, 0xf7, 0xf6, 0xb8, 0xc4, 0x98, 0x96, 0x03, 0xf7, 0x75, 0x5a, - 0x56, 0xf6, 0x39, 0xc3, 0xf8, 0x35, 0x0b, 0xc6, 0xdb, 0x3d, 0x4a, 0xcb, 0x0b, 0xc7, 0xe3, 0x8d, - 0xe3, 0x29, 0x5c, 0x5f, 0x7f, 0xf4, 0xce, 0xee, 0x44, 0xcf, 0x8a, 0xfe, 0xb8, 0x67, 0xaf, 0xec, - 0xef, 0x94, 0x81, 0x95, 0x98, 0x65, 0x95, 0xdc, 0x76, 0xd0, 0xc7, 0xcd, 0x62, 0xc1, 0x56, 0x51, - 0x85, 0x6d, 0x39, 0x71, 0x55, 0x6c, 0x98, 0x8f, 0x60, 0x5e, 0xed, 0xe1, 0xac, 0xd0, 0x2a, 0xf5, - 0x21, 0xb4, 0x3c, 0x59, 0x95, 0xb9, 0x5c, 0x7c, 0x55, 0xe6, 0x5a, 0xb6, 0x22, 0xf3, 0xde, 0x9f, - 0x78, 0xe0, 0x81, 0xfc, 0xc4, 0xbf, 0x68, 0x71, 0xc1, 0x93, 0xf9, 0x0a, 0xda, 0x32, 0xb0, 0xf6, - 0xb0, 0x0c, 0x9e, 0x86, 0x6a, 0x4c, 0xbc, 0xf5, 0xcb, 0xc4, 0xf1, 0x84, 0x05, 0xa1, 0xcf, 0xaf, - 0x45, 0x3b, 0x56, 0x18, 0xec, 0xda, 0x56, 0xcf, 0x0b, 0x6e, 0x5f, 0x6c, 0x87, 0xc9, 0x8e, 0xb0, - 0x25, 0xf4, 0xb5, 0xad, 0x0a, 0x82, 0x0d, 0x2c, 0xfb, 0x6f, 0x97, 0xf8, 0x0c, 0x14, 0x41, 0x10, - 0x2f, 0x64, 0x2e, 0xda, 0xeb, 0x3f, 0x7e, 0xe0, 0xa3, 0x00, 0x0d, 0x75, 0x95, 0xbd, 0x38, 0x13, - 0xba, 0x7c, 0xe4, 0x7b, 0xb6, 0x05, 0x3d, 0xfd, 0x1a, 0xba, 0x0d, 0x1b, 0xfc, 0x52, 0xb2, 0xb4, - 0xbc, 0xaf, 0x2c, 0x4d, 0x89, 0x95, 0x81, 0x7d, 0xb4, 0xdd, 0x9f, 0x5a, 0x90, 0xb2, 0x88, 0x50, - 0x08, 0x15, 0xda, 0xdd, 0x9d, 0x62, 0x6e, 0xe9, 0x37, 0x49, 0x53, 0xd1, 0x28, 0xa6, 0x3d, 0xfb, - 0x89, 0x39, 0x23, 0xe4, 0x89, 0x58, 0x09, 0x3e, 0xaa, 0xd7, 0x8a, 0x63, 0x78, 0x39, 0x08, 0x36, - 0xf9, 0xc1, 0xa6, 0x8e, 0xbb, 0xb0, 0x5f, 0x80, 0x53, 0x5d, 0x9d, 0x62, 0x77, 0x6a, 0x05, 0x54, - 0xfb, 0x64, 0xa6, 0x2b, 0x4b, 0xe0, 0xc4, 0x1c, 0x66, 0x7f, 0xc3, 0x82, 0x93, 0x59, 0xf2, 0xe8, - 0x4d, 0x0b, 0x4e, 0xc5, 0x59, 0x7a, 0xc7, 0x35, 0x76, 0x2a, 0xde, 0xb1, 0x0b, 0x84, 0xbb, 0x3b, - 0x61, 0xff, 0x3f, 0x31, 0xf9, 0x6f, 0xba, 0x7e, 0x33, 0xb8, 0xad, 0x0c, 0x13, 0xab, 0xa7, 0x61, - 0x42, 0xd7, 0x63, 0x63, 0x83, 0x34, 0x3b, 0x5e, 0x57, 0xe6, 0xe8, 0x8a, 0x68, 0xc7, 0x0a, 0x83, - 0x25, 0xca, 0x75, 0x44, 0xd9, 0xf6, 0xcc, 0xa4, 0x9c, 0x15, 0xed, 0x58, 0x61, 0xa0, 0xe7, 0x60, - 0xc4, 0x78, 0x49, 0x39, 0x2f, 0x99, 0x41, 0x6e, 0xa8, 0xcc, 0x18, 0xa7, 0xb0, 0xd0, 0x24, 0x80, - 0x32, 0x72, 0xa4, 0x8a, 0x64, 0x8e, 0x22, 0x25, 0x89, 0x62, 0x6c, 0x60, 0xb0, 0xb4, 0x54, 0xaf, - 0x13, 0x33, 0x1f, 0xff, 0xa0, 0x2e, 0x25, 0x3a, 0x23, 0xda, 0xb0, 0x82, 0x52, 0x69, 0xd2, 0x76, - 0xfc, 0x8e, 0xe3, 0xd1, 0x11, 0x12, 0x5b, 0x3f, 0xb5, 0x0c, 0x17, 0x15, 0x04, 0x1b, 0x58, 0xf4, - 0x8d, 0x13, 0xb7, 0x4d, 0x5e, 0x0e, 0x7c, 0x19, 0xa7, 0xa6, 0x8f, 0x7d, 0x44, 0x3b, 0x56, 0x18, - 0xf6, 0x7f, 0xb3, 0xe0, 0x84, 0x4e, 0x72, 0xe7, 0xb7, 0x67, 0x9b, 0x3b, 0x55, 0x6b, 0xdf, 0x9d, - 0x6a, 0x3a, 0xfb, 0xb7, 0xd4, 0x57, 0xf6, 0xaf, 0x99, 0x98, 0x5b, 0xde, 0x33, 0x31, 0xf7, 0x87, - 0xf4, 0xcd, 0xac, 0x3c, 0x83, 0x77, 0x38, 0xef, 0x56, 0x56, 0x64, 0xc3, 0x60, 0xc3, 0x51, 0x15, - 0x5e, 0x46, 0xf8, 0xde, 0x61, 0x66, 0x9a, 0x21, 0x09, 0x88, 0xbd, 0x04, 0x35, 0x75, 0xfa, 0x21, - 0x37, 0xaa, 0x56, 0xfe, 0x46, 0xb5, 0xaf, 0x04, 0xc1, 0xfa, 0xda, 0x37, 0xbf, 0xfb, 0xf8, 0xdb, - 0x7e, 0xef, 0xbb, 0x8f, 0xbf, 0xed, 0x8f, 0xbe, 0xfb, 0xf8, 0xdb, 0x3e, 0x71, 0xe7, 0x71, 0xeb, - 0x9b, 0x77, 0x1e, 0xb7, 0x7e, 0xef, 0xce, 0xe3, 0xd6, 0x1f, 0xdd, 0x79, 0xdc, 0xfa, 0xce, 0x9d, - 0xc7, 0xad, 0x2f, 0xfe, 0xe7, 0xc7, 0xdf, 0xf6, 0x72, 0x6e, 0xa0, 0x22, 0xfd, 0xf1, 0x4c, 0xa3, - 0x39, 0xb5, 0x75, 0x81, 0xc5, 0xca, 0xd1, 0xe5, 0x35, 0x65, 0xcc, 0xa9, 0x29, 0xb9, 0xbc, 0xfe, - 0x7f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xb2, 0x18, 0x73, 0x0d, 0xd5, 0xe1, 0x00, 0x00, + 0x3c, 0xb4, 0x29, 0x3a, 0x22, 0x01, 0xf3, 0x44, 0xca, 0x8c, 0x68, 0x4b, 0xc6, 0xc7, 0x1d, 0x0e, + 0x77, 0xc0, 0x01, 0x6c, 0xe0, 0xee, 0x24, 0xca, 0x14, 0x35, 0xd8, 0x6d, 0x2c, 0xe6, 0x30, 0x3b, + 0x33, 0x9c, 0x99, 0xc5, 0x61, 0x69, 0x49, 0xd6, 0x97, 0x6d, 0x25, 0xfa, 0xa0, 0x22, 0x25, 0x65, + 0x3a, 0xb6, 0x14, 0xd9, 0x72, 0x52, 0x71, 0x25, 0xaa, 0x38, 0xc9, 0x8f, 0x38, 0x71, 0x52, 0x2e, + 0xdb, 0xa9, 0x94, 0x52, 0x4a, 0xca, 0x2e, 0x97, 0xcb, 0x72, 0x12, 0x1b, 0x91, 0x2e, 0x95, 0x4a, + 0x2a, 0x55, 0x71, 0x95, 0x13, 0xff, 0x48, 0x2e, 0xf9, 0x91, 0xea, 0xef, 0x9e, 0xd9, 0x59, 0x60, + 0x01, 0x0c, 0xee, 0x4e, 0x0a, 0xff, 0xed, 0xf6, 0x7b, 0xf3, 0x5e, 0x4f, 0x4f, 0xf7, 0x7b, 0xaf, + 0x5f, 0xbf, 0xf7, 0x1a, 0x16, 0x9b, 0x6e, 0xb2, 0xd9, 0x5e, 0x9f, 0xac, 0x07, 0xad, 0x29, 0x27, + 0x6a, 0x06, 0x61, 0x14, 0xdc, 0x62, 0x3f, 0x9e, 0xa9, 0x37, 0xa6, 0xb6, 0x2f, 0x4c, 0x85, 0x5b, + 0xcd, 0x29, 0x27, 0x74, 0xe3, 0x29, 0x27, 0x0c, 0x3d, 0xb7, 0xee, 0x24, 0x6e, 0xe0, 0x4f, 0x6d, + 0x3f, 0xeb, 0x78, 0xe1, 0xa6, 0xf3, 0xec, 0x54, 0x93, 0xf8, 0x24, 0x72, 0x12, 0xd2, 0x98, 0x0c, + 0xa3, 0x20, 0x09, 0xd0, 0x8f, 0x69, 0x6a, 0x93, 0x92, 0x1a, 0xfb, 0xf1, 0x6a, 0xbd, 0x31, 0xb9, + 0x7d, 0x61, 0x32, 0xdc, 0x6a, 0x4e, 0x52, 0x6a, 0x93, 0x06, 0xb5, 0x49, 0x49, 0xed, 0xdc, 0x33, + 0x46, 0x5f, 0x9a, 0x41, 0x33, 0x98, 0x62, 0x44, 0xd7, 0xdb, 0x1b, 0xec, 0x1f, 0xfb, 0xc3, 0x7e, + 0x71, 0x66, 0xe7, 0xec, 0xad, 0x17, 0xe2, 0x49, 0x37, 0xa0, 0xdd, 0x9b, 0xaa, 0x07, 0x11, 0x99, + 0xda, 0xee, 0xea, 0xd0, 0xb9, 0xcb, 0x1a, 0x87, 0xec, 0x24, 0xc4, 0x8f, 0xdd, 0xc0, 0x8f, 0x9f, + 0xa1, 0x5d, 0x20, 0xd1, 0x36, 0x89, 0xcc, 0xd7, 0x33, 0x10, 0xf2, 0x28, 0x3d, 0xa7, 0x29, 0xb5, + 0x9c, 0xfa, 0xa6, 0xeb, 0x93, 0xa8, 0xa3, 0x1f, 0x6f, 0x91, 0xc4, 0xc9, 0x7b, 0x6a, 0xaa, 0xd7, + 0x53, 0x51, 0xdb, 0x4f, 0xdc, 0x16, 0xe9, 0x7a, 0xe0, 0xdd, 0xfb, 0x3d, 0x10, 0xd7, 0x37, 0x49, + 0xcb, 0xe9, 0x7a, 0xee, 0x5d, 0xbd, 0x9e, 0x6b, 0x27, 0xae, 0x37, 0xe5, 0xfa, 0x49, 0x9c, 0x44, + 0xd9, 0x87, 0xec, 0x5f, 0xb2, 0x60, 0x74, 0xfa, 0xe6, 0xea, 0x74, 0x3b, 0xd9, 0x9c, 0x0d, 0xfc, + 0x0d, 0xb7, 0x89, 0x9e, 0x87, 0xe1, 0xba, 0xd7, 0x8e, 0x13, 0x12, 0x5d, 0x73, 0x5a, 0x64, 0xdc, + 0x3a, 0x6f, 0x3d, 0x55, 0x9b, 0x39, 0xfd, 0xcd, 0xdd, 0x89, 0xb7, 0xdd, 0xd9, 0x9d, 0x18, 0x9e, + 0xd5, 0x20, 0x6c, 0xe2, 0xa1, 0x1f, 0x86, 0xa1, 0x28, 0xf0, 0xc8, 0x34, 0xbe, 0x36, 0x5e, 0x62, + 0x8f, 0x9c, 0x10, 0x8f, 0x0c, 0x61, 0xde, 0x8c, 0x25, 0x9c, 0xa2, 0x86, 0x51, 0xb0, 0xe1, 0x7a, + 0x64, 0xbc, 0x9c, 0x46, 0x5d, 0xe1, 0xcd, 0x58, 0xc2, 0xed, 0x3f, 0x2a, 0x01, 0x4c, 0x87, 0xe1, + 0x4a, 0x14, 0xdc, 0x22, 0xf5, 0x04, 0x7d, 0x18, 0xaa, 0x74, 0x98, 0x1b, 0x4e, 0xe2, 0xb0, 0x8e, + 0x0d, 0x5f, 0xf8, 0x91, 0x49, 0xfe, 0xd6, 0x93, 0xe6, 0x5b, 0xeb, 0x49, 0x46, 0xb1, 0x27, 0xb7, + 0x9f, 0x9d, 0x5c, 0x5e, 0xa7, 0xcf, 0x2f, 0x91, 0xc4, 0x99, 0x41, 0x82, 0x19, 0xe8, 0x36, 0xac, + 0xa8, 0x22, 0x1f, 0x06, 0xe2, 0x90, 0xd4, 0xd9, 0x3b, 0x0c, 0x5f, 0x58, 0x9c, 0x3c, 0xca, 0x6c, + 0x9e, 0xd4, 0x3d, 0x5f, 0x0d, 0x49, 0x7d, 0x66, 0x44, 0x70, 0x1e, 0xa0, 0xff, 0x30, 0xe3, 0x83, + 0xb6, 0x61, 0x30, 0x4e, 0x9c, 0xa4, 0x1d, 0xb3, 0xa1, 0x18, 0xbe, 0x70, 0xad, 0x30, 0x8e, 0x8c, + 0xea, 0xcc, 0x98, 0xe0, 0x39, 0xc8, 0xff, 0x63, 0xc1, 0xcd, 0xfe, 0x53, 0x0b, 0xc6, 0x34, 0xf2, + 0xa2, 0x1b, 0x27, 0xe8, 0x27, 0xbb, 0x06, 0x77, 0xb2, 0xbf, 0xc1, 0xa5, 0x4f, 0xb3, 0xa1, 0x3d, + 0x29, 0x98, 0x55, 0x65, 0x8b, 0x31, 0xb0, 0x2d, 0xa8, 0xb8, 0x09, 0x69, 0xc5, 0xe3, 0xa5, 0xf3, + 0xe5, 0xa7, 0x86, 0x2f, 0x5c, 0x2e, 0xea, 0x3d, 0x67, 0x46, 0x05, 0xd3, 0xca, 0x02, 0x25, 0x8f, + 0x39, 0x17, 0xfb, 0xd7, 0x46, 0xcc, 0xf7, 0xa3, 0x03, 0x8e, 0x9e, 0x85, 0xe1, 0x38, 0x68, 0x47, + 0x75, 0x82, 0x49, 0x18, 0xc4, 0xe3, 0xd6, 0xf9, 0x32, 0x9d, 0x7a, 0x74, 0x52, 0xaf, 0xea, 0x66, + 0x6c, 0xe2, 0xa0, 0x2f, 0x58, 0x30, 0xd2, 0x20, 0x71, 0xe2, 0xfa, 0x8c, 0xbf, 0xec, 0xfc, 0xda, + 0x91, 0x3b, 0x2f, 0x1b, 0xe7, 0x34, 0xf1, 0x99, 0x33, 0xe2, 0x45, 0x46, 0x8c, 0xc6, 0x18, 0xa7, + 0xf8, 0xd3, 0xc5, 0xd9, 0x20, 0x71, 0x3d, 0x72, 0x43, 0xfa, 0x5f, 0x2c, 0x1f, 0xb5, 0x38, 0xe7, + 0x34, 0x08, 0x9b, 0x78, 0xc8, 0x87, 0x0a, 0x5d, 0x7c, 0xf1, 0xf8, 0x00, 0xeb, 0xff, 0xc2, 0xd1, + 0xfa, 0x2f, 0x06, 0x95, 0xae, 0x6b, 0x3d, 0xfa, 0xf4, 0x5f, 0x8c, 0x39, 0x1b, 0xf4, 0x79, 0x0b, + 0xc6, 0x85, 0x70, 0xc0, 0x84, 0x0f, 0xe8, 0xcd, 0x4d, 0x37, 0x21, 0x9e, 0x1b, 0x27, 0xe3, 0x15, + 0xd6, 0x87, 0xa9, 0xfe, 0xe6, 0xd6, 0x7c, 0x14, 0xb4, 0xc3, 0xab, 0xae, 0xdf, 0x98, 0x39, 0x2f, + 0x38, 0x8d, 0xcf, 0xf6, 0x20, 0x8c, 0x7b, 0xb2, 0x44, 0x5f, 0xb6, 0xe0, 0x9c, 0xef, 0xb4, 0x48, + 0x1c, 0x3a, 0xf4, 0xd3, 0x72, 0xf0, 0x8c, 0xe7, 0xd4, 0xb7, 0x58, 0x8f, 0x06, 0x0f, 0xd7, 0x23, + 0x5b, 0xf4, 0xe8, 0xdc, 0xb5, 0x9e, 0xa4, 0xf1, 0x1e, 0x6c, 0xd1, 0xd7, 0x2d, 0x38, 0x15, 0x44, + 0xe1, 0xa6, 0xe3, 0x93, 0x86, 0x84, 0xc6, 0xe3, 0x43, 0x6c, 0xe9, 0x7d, 0xe8, 0x68, 0x9f, 0x68, + 0x39, 0x4b, 0x76, 0x29, 0xf0, 0xdd, 0x24, 0x88, 0x56, 0x49, 0x92, 0xb8, 0x7e, 0x33, 0x9e, 0x39, + 0x7b, 0x67, 0x77, 0xe2, 0x54, 0x17, 0x16, 0xee, 0xee, 0x0f, 0xfa, 0x29, 0x18, 0x8e, 0x3b, 0x7e, + 0xfd, 0xa6, 0xeb, 0x37, 0x82, 0xdb, 0xf1, 0x78, 0xb5, 0x88, 0xe5, 0xbb, 0xaa, 0x08, 0x8a, 0x05, + 0xa8, 0x19, 0x60, 0x93, 0x5b, 0xfe, 0x87, 0xd3, 0x53, 0xa9, 0x56, 0xf4, 0x87, 0xd3, 0x93, 0x69, + 0x0f, 0xb6, 0xe8, 0xe7, 0x2c, 0x18, 0x8d, 0xdd, 0xa6, 0xef, 0x24, 0xed, 0x88, 0x5c, 0x25, 0x9d, + 0x78, 0x1c, 0x58, 0x47, 0xae, 0x1c, 0x71, 0x54, 0x0c, 0x92, 0x33, 0x67, 0x45, 0x1f, 0x47, 0xcd, + 0xd6, 0x18, 0xa7, 0xf9, 0xe6, 0x2d, 0x34, 0x3d, 0xad, 0x87, 0x8b, 0x5d, 0x68, 0x7a, 0x52, 0xf7, + 0x64, 0x89, 0x7e, 0x02, 0x4e, 0xf2, 0x26, 0x35, 0xb2, 0xf1, 0xf8, 0x08, 0x13, 0xb4, 0x67, 0xee, + 0xec, 0x4e, 0x9c, 0x5c, 0xcd, 0xc0, 0x70, 0x17, 0x36, 0x7a, 0x0d, 0x26, 0x42, 0x12, 0xb5, 0xdc, + 0x64, 0xd9, 0xf7, 0x3a, 0x52, 0x7c, 0xd7, 0x83, 0x90, 0x34, 0x44, 0x77, 0xe2, 0xf1, 0xd1, 0xf3, + 0xd6, 0x53, 0xd5, 0x99, 0x77, 0x88, 0x6e, 0x4e, 0xac, 0xec, 0x8d, 0x8e, 0xf7, 0xa3, 0x67, 0xff, + 0xeb, 0x12, 0x9c, 0xcc, 0x2a, 0x4e, 0xf4, 0x77, 0x2c, 0x38, 0x71, 0xeb, 0x76, 0xb2, 0x16, 0x6c, + 0x11, 0x3f, 0x9e, 0xe9, 0x50, 0xf1, 0xc6, 0x54, 0xc6, 0xf0, 0x85, 0x7a, 0xb1, 0x2a, 0x7a, 0xf2, + 0x4a, 0x9a, 0xcb, 0x45, 0x3f, 0x89, 0x3a, 0x33, 0x0f, 0x8b, 0xb7, 0x3b, 0x71, 0xe5, 0xe6, 0x9a, + 0x09, 0xc5, 0xd9, 0x4e, 0x9d, 0xfb, 0xac, 0x05, 0x67, 0xf2, 0x48, 0xa0, 0x93, 0x50, 0xde, 0x22, + 0x1d, 0x6e, 0xc0, 0x61, 0xfa, 0x13, 0xbd, 0x02, 0x95, 0x6d, 0xc7, 0x6b, 0x13, 0x61, 0xdd, 0xcc, + 0x1f, 0xed, 0x45, 0x54, 0xcf, 0x30, 0xa7, 0xfa, 0x9e, 0xd2, 0x0b, 0x96, 0xfd, 0x7b, 0x65, 0x18, + 0x36, 0xf4, 0xdb, 0x3d, 0xb0, 0xd8, 0x82, 0x94, 0xc5, 0xb6, 0x54, 0x98, 0x6a, 0xee, 0x69, 0xb2, + 0xdd, 0xce, 0x98, 0x6c, 0xcb, 0xc5, 0xb1, 0xdc, 0xd3, 0x66, 0x43, 0x09, 0xd4, 0x82, 0x90, 0x5a, + 0xef, 0x54, 0xf5, 0x0f, 0x14, 0xf1, 0x09, 0x97, 0x25, 0xb9, 0x99, 0xd1, 0x3b, 0xbb, 0x13, 0x35, + 0xf5, 0x17, 0x6b, 0x46, 0xf6, 0xb7, 0x2d, 0x38, 0x63, 0xf4, 0x71, 0x36, 0xf0, 0x1b, 0x2e, 0xfb, + 0xb4, 0xe7, 0x61, 0x20, 0xe9, 0x84, 0x72, 0x87, 0xa0, 0x46, 0x6a, 0xad, 0x13, 0x12, 0xcc, 0x20, + 0xd4, 0xd0, 0x6f, 0x91, 0x38, 0x76, 0x9a, 0x24, 0xbb, 0x27, 0x58, 0xe2, 0xcd, 0x58, 0xc2, 0x51, + 0x04, 0xc8, 0x73, 0xe2, 0x64, 0x2d, 0x72, 0xfc, 0x98, 0x91, 0x5f, 0x73, 0x5b, 0x44, 0x0c, 0xf0, + 0x5f, 0xea, 0x6f, 0xc6, 0xd0, 0x27, 0x66, 0x1e, 0xba, 0xb3, 0x3b, 0x81, 0x16, 0xbb, 0x28, 0xe1, + 0x1c, 0xea, 0xf6, 0x97, 0x2d, 0x78, 0x28, 0xdf, 0x16, 0x43, 0x4f, 0xc2, 0x20, 0xdf, 0x1e, 0x8a, + 0xb7, 0xd3, 0x9f, 0x84, 0xb5, 0x62, 0x01, 0x45, 0x53, 0x50, 0x53, 0x7a, 0x42, 0xbc, 0xe3, 0x29, + 0x81, 0x5a, 0xd3, 0xca, 0x45, 0xe3, 0xd0, 0x41, 0xa3, 0x7f, 0x84, 0xe5, 0xa6, 0x06, 0x8d, 0xed, + 0xa7, 0x18, 0xc4, 0xfe, 0x8f, 0x16, 0x9c, 0x30, 0x7a, 0x75, 0x0f, 0x4c, 0x73, 0x3f, 0x6d, 0x9a, + 0x2f, 0x14, 0x36, 0x9f, 0x7b, 0xd8, 0xe6, 0x9f, 0xb7, 0xe0, 0x9c, 0x81, 0xb5, 0xe4, 0x24, 0xf5, + 0xcd, 0x8b, 0x3b, 0x61, 0x44, 0x62, 0xba, 0xf5, 0x46, 0x8f, 0x19, 0x72, 0x6b, 0x66, 0x58, 0x50, + 0x28, 0x5f, 0x25, 0x1d, 0x2e, 0xc4, 0x9e, 0x86, 0x2a, 0x9f, 0x9c, 0x41, 0x24, 0x46, 0x5c, 0xbd, + 0xdb, 0xb2, 0x68, 0xc7, 0x0a, 0x03, 0xd9, 0x30, 0xc8, 0x84, 0x13, 0x5d, 0xac, 0x54, 0x0d, 0x01, + 0xfd, 0x88, 0x37, 0x58, 0x0b, 0x16, 0x10, 0x3b, 0x4e, 0x75, 0x67, 0x25, 0x22, 0xec, 0xe3, 0x36, + 0x2e, 0xb9, 0xc4, 0x6b, 0xc4, 0x74, 0xdb, 0xe0, 0xf8, 0x7e, 0x90, 0x88, 0x1d, 0x80, 0xb1, 0x6d, + 0x98, 0xd6, 0xcd, 0xd8, 0xc4, 0xa1, 0x4c, 0x3d, 0x67, 0x9d, 0x78, 0x7c, 0x44, 0x05, 0xd3, 0x45, + 0xd6, 0x82, 0x05, 0xc4, 0xbe, 0x53, 0x62, 0x1b, 0x14, 0xb5, 0xf4, 0xc9, 0xbd, 0xd8, 0xdd, 0x46, + 0x29, 0x59, 0xb9, 0x52, 0x9c, 0xe0, 0x22, 0xbd, 0x77, 0xb8, 0xaf, 0x67, 0xc4, 0x25, 0x2e, 0x94, + 0xeb, 0xde, 0xbb, 0xdc, 0xdf, 0x2e, 0xc1, 0x44, 0xfa, 0x81, 0x2e, 0x69, 0x4b, 0xb7, 0x54, 0x06, + 0xa3, 0xac, 0xbf, 0xc3, 0xc0, 0xc7, 0x26, 0x5e, 0x0f, 0x81, 0x55, 0x3a, 0x4e, 0x81, 0x65, 0xca, + 0xd3, 0xf2, 0x3e, 0xf2, 0xf4, 0x49, 0x35, 0xea, 0x03, 0x19, 0x01, 0x96, 0xd6, 0x29, 0xe7, 0x61, + 0x20, 0x4e, 0x48, 0x38, 0x5e, 0x49, 0xcb, 0xa3, 0xd5, 0x84, 0x84, 0x98, 0x41, 0xec, 0xff, 0x56, + 0x82, 0x87, 0xd3, 0x63, 0xa8, 0x55, 0xc0, 0xfb, 0x52, 0x2a, 0xe0, 0x9d, 0xa6, 0x0a, 0xb8, 0xbb, + 0x3b, 0xf1, 0xf6, 0x1e, 0x8f, 0x7d, 0xcf, 0x68, 0x08, 0x34, 0x9f, 0x19, 0xc5, 0xa9, 0xf4, 0x28, + 0xde, 0xdd, 0x9d, 0x78, 0xac, 0xc7, 0x3b, 0x66, 0x86, 0xf9, 0x49, 0x18, 0x8c, 0x88, 0x13, 0x07, + 0xbe, 0x18, 0x68, 0xf5, 0x39, 0x30, 0x6b, 0xc5, 0x02, 0x6a, 0xff, 0x41, 0x2d, 0x3b, 0xd8, 0xf3, + 0xdc, 0x61, 0x17, 0x44, 0xc8, 0x85, 0x01, 0x66, 0xd6, 0x73, 0xd1, 0x70, 0xf5, 0x68, 0xcb, 0x88, + 0xaa, 0x01, 0x45, 0x7a, 0xa6, 0x4a, 0xbf, 0x1a, 0x6d, 0xc2, 0x8c, 0x05, 0xda, 0x81, 0x6a, 0x5d, + 0x5a, 0xdb, 0xa5, 0x22, 0xfc, 0x52, 0xc2, 0xd6, 0xd6, 0x1c, 0x47, 0xa8, 0xbc, 0x56, 0x26, 0xba, + 0xe2, 0x86, 0x08, 0x94, 0x9b, 0x6e, 0x22, 0x3e, 0xeb, 0x11, 0xf7, 0x53, 0xf3, 0xae, 0xf1, 0x8a, + 0x43, 0x54, 0x89, 0xcc, 0xbb, 0x09, 0xa6, 0xf4, 0xd1, 0xcf, 0x58, 0x30, 0x1c, 0xd7, 0x5b, 0x2b, + 0x51, 0xb0, 0xed, 0x36, 0x48, 0x24, 0xac, 0xa9, 0x23, 0x8a, 0xa6, 0xd5, 0xd9, 0x25, 0x49, 0x50, + 0xf3, 0xe5, 0xfb, 0x5b, 0x0d, 0xc1, 0x26, 0x5f, 0xba, 0xcb, 0x78, 0x58, 0xbc, 0xfb, 0x1c, 0xa9, + 0xbb, 0x54, 0xff, 0xc9, 0x4d, 0x15, 0x9b, 0x29, 0x47, 0xb6, 0x2e, 0xe7, 0xda, 0xf5, 0x2d, 0xba, + 0xde, 0x74, 0x87, 0xde, 0x7e, 0x67, 0x77, 0xe2, 0xe1, 0xd9, 0x7c, 0x9e, 0xb8, 0x57, 0x67, 0xd8, + 0x80, 0x85, 0x6d, 0xcf, 0xc3, 0xe4, 0xb5, 0x36, 0x61, 0x2e, 0x93, 0x02, 0x06, 0x6c, 0x45, 0x13, + 0xcc, 0x0c, 0x98, 0x01, 0xc1, 0x26, 0x5f, 0xf4, 0x1a, 0x0c, 0xb6, 0x9c, 0x24, 0x72, 0x77, 0x84, + 0x9f, 0xe4, 0x88, 0xf6, 0xfe, 0x12, 0xa3, 0xa5, 0x99, 0x33, 0x4d, 0xcd, 0x1b, 0xb1, 0x60, 0x84, + 0x5a, 0x50, 0x69, 0x91, 0xa8, 0x49, 0xc6, 0xab, 0x45, 0xf8, 0x84, 0x97, 0x28, 0x29, 0xcd, 0xb0, + 0x46, 0xad, 0x23, 0xd6, 0x86, 0x39, 0x17, 0xf4, 0x0a, 0x54, 0x63, 0xe2, 0x91, 0x3a, 0xb5, 0x6f, + 0x6a, 0x8c, 0xe3, 0xbb, 0xfa, 0xb4, 0xf5, 0xa8, 0x61, 0xb1, 0x2a, 0x1e, 0xe5, 0x0b, 0x4c, 0xfe, + 0xc3, 0x8a, 0x24, 0x1d, 0xc0, 0xd0, 0x6b, 0x37, 0x5d, 0x7f, 0x1c, 0x8a, 0x18, 0xc0, 0x15, 0x46, + 0x2b, 0x33, 0x80, 0xbc, 0x11, 0x0b, 0x46, 0xf6, 0x7f, 0xb6, 0x00, 0xa5, 0x85, 0xda, 0x3d, 0x30, + 0x6a, 0x5f, 0x4b, 0x1b, 0xb5, 0x8b, 0x45, 0x5a, 0x1d, 0x3d, 0xec, 0xda, 0xdf, 0xac, 0x41, 0x46, + 0x1d, 0x5c, 0x23, 0x71, 0x42, 0x1a, 0x6f, 0x89, 0xf0, 0xb7, 0x44, 0xf8, 0x5b, 0x22, 0x5c, 0x89, + 0xf0, 0xf5, 0x8c, 0x08, 0x7f, 0xaf, 0xb1, 0xea, 0xf5, 0x01, 0xec, 0xab, 0xea, 0x84, 0xd6, 0xec, + 0x81, 0x81, 0x40, 0x25, 0xc1, 0x95, 0xd5, 0xe5, 0x6b, 0xb9, 0x32, 0xfb, 0xd5, 0xb4, 0xcc, 0x3e, + 0x2a, 0x8b, 0xff, 0x1f, 0xa4, 0xf4, 0xbf, 0xb2, 0xe0, 0x1d, 0x69, 0xe9, 0x25, 0x67, 0xce, 0x42, + 0xd3, 0x0f, 0x22, 0x32, 0xe7, 0x6e, 0x6c, 0x90, 0x88, 0xf8, 0x75, 0x12, 0x2b, 0x2f, 0x86, 0xd5, + 0xcb, 0x8b, 0x81, 0x9e, 0x83, 0x91, 0x5b, 0x71, 0xe0, 0xaf, 0x04, 0xae, 0x2f, 0x44, 0x10, 0xdd, + 0x08, 0x9f, 0xbc, 0xb3, 0x3b, 0x31, 0x42, 0x47, 0x54, 0xb6, 0xe3, 0x14, 0x16, 0x9a, 0x85, 0x53, + 0xb7, 0x5e, 0x5b, 0x71, 0x12, 0xc3, 0x1d, 0x20, 0x37, 0xee, 0xec, 0xc0, 0xe2, 0xca, 0x4b, 0x19, + 0x20, 0xee, 0xc6, 0xb7, 0x7f, 0xb1, 0x04, 0x8f, 0x64, 0x5e, 0x24, 0xf0, 0xbc, 0xa0, 0x9d, 0xd0, + 0x4d, 0x0d, 0xfa, 0xaa, 0x05, 0x27, 0x5b, 0x69, 0x8f, 0x43, 0x2c, 0x1c, 0xbb, 0xef, 0x2f, 0x4c, + 0x47, 0x64, 0x5c, 0x1a, 0x33, 0xe3, 0x62, 0x84, 0x4e, 0x66, 0x00, 0x31, 0xee, 0xea, 0x0b, 0x7a, + 0x05, 0x6a, 0x2d, 0x67, 0xe7, 0x7a, 0xd8, 0x70, 0x12, 0xb9, 0x9f, 0xec, 0xed, 0x06, 0x68, 0x27, + 0xae, 0x37, 0xc9, 0x8f, 0xf6, 0x27, 0x17, 0xfc, 0x64, 0x39, 0x5a, 0x4d, 0x22, 0xd7, 0x6f, 0x72, + 0x77, 0xde, 0x92, 0x24, 0x83, 0x35, 0x45, 0xfb, 0x2b, 0x56, 0x56, 0x49, 0xa9, 0xd1, 0x89, 0x9c, + 0x84, 0x34, 0x3b, 0xe8, 0x23, 0x50, 0xa1, 0x1b, 0x3f, 0x39, 0x2a, 0x37, 0x8b, 0xd4, 0x9c, 0xc6, + 0x97, 0xd0, 0x4a, 0x94, 0xfe, 0x8b, 0x31, 0x67, 0x6a, 0x7f, 0xb5, 0x96, 0x35, 0x16, 0xd8, 0xe1, + 0xed, 0x05, 0x80, 0x66, 0xb0, 0x46, 0x5a, 0xa1, 0x47, 0x87, 0xc5, 0x62, 0x27, 0x00, 0xca, 0xd7, + 0x31, 0xaf, 0x20, 0xd8, 0xc0, 0x42, 0x7f, 0xc5, 0x02, 0x68, 0xca, 0x39, 0x2f, 0x0d, 0x81, 0xeb, + 0x45, 0xbe, 0x8e, 0x5e, 0x51, 0xba, 0x2f, 0x8a, 0x21, 0x36, 0x98, 0xa3, 0x4f, 0x5a, 0x50, 0x4d, + 0x64, 0xf7, 0xb9, 0x6a, 0x5c, 0x2b, 0xb2, 0x27, 0xf2, 0xa5, 0xb5, 0x4d, 0xa4, 0x86, 0x44, 0xf1, + 0x45, 0x3f, 0x6b, 0x01, 0xc4, 0x1d, 0xbf, 0xbe, 0x12, 0x78, 0x6e, 0xbd, 0x23, 0x34, 0xe6, 0x8d, + 0x42, 0xfd, 0x31, 0x8a, 0xfa, 0xcc, 0x18, 0x1d, 0x0d, 0xfd, 0x1f, 0x1b, 0x9c, 0xd1, 0xc7, 0xa0, + 0x1a, 0x8b, 0xe9, 0x26, 0x74, 0xe4, 0x5a, 0xb1, 0x5e, 0x21, 0x4e, 0x5b, 0x88, 0x57, 0xf1, 0x0f, + 0x2b, 0x9e, 0xe8, 0xe7, 0x2d, 0x38, 0x11, 0xa6, 0xfd, 0x7c, 0x42, 0x1d, 0x16, 0x27, 0x03, 0x32, + 0x7e, 0xc4, 0x99, 0xd3, 0x77, 0x76, 0x27, 0x4e, 0x64, 0x1a, 0x71, 0xb6, 0x17, 0x54, 0x02, 0xea, + 0x19, 0xbc, 0x1c, 0x72, 0x9f, 0xe3, 0x90, 0x96, 0x80, 0xf3, 0x59, 0x20, 0xee, 0xc6, 0x47, 0x2b, + 0x70, 0x86, 0xf6, 0xae, 0xc3, 0xcd, 0x4f, 0xa9, 0x5e, 0x62, 0xa6, 0x0c, 0xab, 0x33, 0x8f, 0x8a, + 0x19, 0xc2, 0xbc, 0xfa, 0x59, 0x1c, 0x9c, 0xfb, 0x24, 0xfa, 0x3d, 0x0b, 0x1e, 0x75, 0x99, 0x1a, + 0x30, 0x1d, 0xe6, 0x5a, 0x23, 0x88, 0x93, 0x58, 0x52, 0xa8, 0xac, 0xe8, 0xa5, 0x7e, 0x66, 0x7e, + 0x50, 0xbc, 0xc1, 0xa3, 0x0b, 0x7b, 0x74, 0x09, 0xef, 0xd9, 0x61, 0xf4, 0xa3, 0x30, 0x2a, 0xd7, + 0xc5, 0x0a, 0x15, 0xc1, 0x4c, 0xd1, 0xd6, 0x66, 0x4e, 0xdd, 0xd9, 0x9d, 0x18, 0x5d, 0x33, 0x01, + 0x38, 0x8d, 0x67, 0x7f, 0xab, 0x94, 0x3a, 0x0f, 0x51, 0x4e, 0x48, 0x26, 0x6e, 0xea, 0xd2, 0xff, + 0x23, 0xa5, 0x67, 0xa1, 0xe2, 0x46, 0x79, 0x97, 0xb4, 0xb8, 0x51, 0x4d, 0x31, 0x36, 0x98, 0x53, + 0xa3, 0xf4, 0x94, 0x93, 0x75, 0x75, 0x0a, 0x09, 0xf8, 0x4a, 0x91, 0x5d, 0xea, 0x3e, 0xbd, 0x7a, + 0x44, 0x74, 0xed, 0x54, 0x17, 0x08, 0x77, 0x77, 0xc9, 0xfe, 0x56, 0xfa, 0x0c, 0xc6, 0x58, 0xbc, + 0x7d, 0x9c, 0x2f, 0x7d, 0xc1, 0x82, 0xe1, 0x28, 0xf0, 0x3c, 0xd7, 0x6f, 0x52, 0x41, 0x23, 0xb4, + 0xe5, 0x07, 0x8f, 0x45, 0x61, 0x09, 0x89, 0xc2, 0x4c, 0x5b, 0xac, 0x79, 0x62, 0xb3, 0x03, 0xf6, + 0x9f, 0x5a, 0x30, 0xde, 0x4b, 0x20, 0x22, 0x02, 0x6f, 0x97, 0xab, 0x5d, 0x45, 0x57, 0x2c, 0xfb, + 0x73, 0xc4, 0x23, 0xca, 0xf1, 0x5c, 0x9d, 0x79, 0x42, 0xbc, 0xe6, 0xdb, 0x57, 0x7a, 0xa3, 0xe2, + 0xbd, 0xe8, 0xa0, 0x97, 0xe1, 0xa4, 0xf1, 0x5e, 0xb1, 0x1a, 0x98, 0xda, 0xcc, 0x24, 0xb5, 0x40, + 0xa6, 0x33, 0xb0, 0xbb, 0xbb, 0x13, 0x0f, 0x65, 0xdb, 0x84, 0xc4, 0xee, 0xa2, 0x63, 0xff, 0x6a, + 0x29, 0xfb, 0xb5, 0x94, 0xb2, 0x7d, 0xd3, 0xea, 0xda, 0xce, 0xbf, 0xff, 0x38, 0x14, 0x1c, 0xdb, + 0xf8, 0xab, 0x00, 0x8e, 0xde, 0x38, 0xf7, 0xf1, 0x84, 0xd8, 0xfe, 0x37, 0x03, 0xb0, 0x47, 0xcf, + 0xfa, 0xb0, 0x9e, 0x0f, 0x7c, 0xac, 0xf8, 0x39, 0x4b, 0x1d, 0x39, 0x95, 0xd9, 0x22, 0x6f, 0x1c, + 0xd7, 0xd8, 0xf3, 0x0d, 0x4c, 0xcc, 0xa3, 0x14, 0x94, 0x1b, 0x3b, 0x7d, 0xb8, 0x85, 0xbe, 0x66, + 0xa5, 0x0f, 0xcd, 0x78, 0xd8, 0x99, 0x7b, 0x6c, 0x7d, 0x32, 0x4e, 0xe2, 0x78, 0xc7, 0xf4, 0xf9, + 0x4d, 0xaf, 0x33, 0xba, 0x49, 0x80, 0x0d, 0xd7, 0x77, 0x3c, 0xf7, 0x75, 0xba, 0x3d, 0xa9, 0x30, + 0x0d, 0xcb, 0x4c, 0x96, 0x4b, 0xaa, 0x15, 0x1b, 0x18, 0xe7, 0xfe, 0x32, 0x0c, 0x1b, 0x6f, 0x9e, + 0x13, 0x5c, 0x71, 0xc6, 0x0c, 0xae, 0xa8, 0x19, 0x31, 0x11, 0xe7, 0xde, 0x0b, 0x27, 0xb3, 0x1d, + 0x3c, 0xc8, 0xf3, 0xf6, 0xff, 0x1a, 0xca, 0x9e, 0x62, 0xad, 0x91, 0xa8, 0x45, 0xbb, 0xf6, 0x96, + 0x67, 0xe9, 0x2d, 0xcf, 0xd2, 0x5b, 0x9e, 0x25, 0xf3, 0x70, 0x40, 0x78, 0x4d, 0x86, 0xee, 0x91, + 0xd7, 0x24, 0xe5, 0x07, 0xaa, 0x16, 0xee, 0x07, 0xb2, 0xef, 0x54, 0x20, 0x65, 0x47, 0xf1, 0xf1, + 0xfe, 0x61, 0x18, 0x8a, 0x48, 0x18, 0x5c, 0xc7, 0x8b, 0x42, 0x87, 0xe8, 0x58, 0x7b, 0xde, 0x8c, + 0x25, 0x9c, 0xea, 0x9a, 0xd0, 0x49, 0x36, 0x85, 0x12, 0x51, 0xba, 0x66, 0xc5, 0x49, 0x36, 0x31, + 0x83, 0xa0, 0xf7, 0xc2, 0x58, 0xe2, 0x44, 0x4d, 0x6a, 0x6f, 0x6f, 0xb3, 0xcf, 0x2a, 0xce, 0x3a, + 0x1f, 0x12, 0xb8, 0x63, 0x6b, 0x29, 0x28, 0xce, 0x60, 0xa3, 0xd7, 0x60, 0x60, 0x93, 0x78, 0x2d, + 0x31, 0xe4, 0xab, 0xc5, 0xc9, 0x78, 0xf6, 0xae, 0x97, 0x89, 0xd7, 0xe2, 0x12, 0x88, 0xfe, 0xc2, + 0x8c, 0x15, 0x9d, 0x6f, 0xb5, 0xad, 0x76, 0x9c, 0x04, 0x2d, 0xf7, 0x75, 0xe9, 0xe2, 0x7b, 0x7f, + 0xc1, 0x8c, 0xaf, 0x4a, 0xfa, 0xdc, 0x97, 0xa2, 0xfe, 0x62, 0xcd, 0x99, 0xf5, 0xa3, 0xe1, 0x46, + 0xec, 0x53, 0x75, 0x84, 0xa7, 0xae, 0xe8, 0x7e, 0xcc, 0x49, 0xfa, 0xbc, 0x1f, 0xea, 0x2f, 0xd6, + 0x9c, 0x51, 0x47, 0xcd, 0xfb, 0x61, 0xd6, 0x87, 0xeb, 0x05, 0xf7, 0x81, 0xcf, 0xf9, 0xdc, 0xf9, + 0xff, 0x04, 0x54, 0xea, 0x9b, 0x4e, 0x94, 0x8c, 0x8f, 0xb0, 0x49, 0xa3, 0x7c, 0x3a, 0xb3, 0xb4, + 0x11, 0x73, 0x18, 0x7a, 0x0c, 0xca, 0x11, 0xd9, 0x60, 0x71, 0x9b, 0x46, 0x44, 0x0f, 0x26, 0x1b, + 0x98, 0xb6, 0xdb, 0xbf, 0x5c, 0x4a, 0x9b, 0x4b, 0xe9, 0xf7, 0xe6, 0xb3, 0xbd, 0xde, 0x8e, 0x62, + 0xe9, 0xf7, 0x31, 0x66, 0x3b, 0x6b, 0xc6, 0x12, 0x8e, 0x3e, 0x61, 0xc1, 0xd0, 0xad, 0x38, 0xf0, + 0x7d, 0x92, 0x08, 0xd5, 0x74, 0xa3, 0xe0, 0xa1, 0xb8, 0xc2, 0xa9, 0xeb, 0x3e, 0x88, 0x06, 0x2c, + 0xf9, 0xd2, 0xee, 0x92, 0x9d, 0xba, 0xd7, 0x6e, 0x74, 0x05, 0x69, 0x5c, 0xe4, 0xcd, 0x58, 0xc2, + 0x29, 0xaa, 0xeb, 0x73, 0xd4, 0x81, 0x34, 0xea, 0x82, 0x2f, 0x50, 0x05, 0xdc, 0xfe, 0x1b, 0x83, + 0x70, 0x36, 0x77, 0x71, 0x50, 0x43, 0x86, 0x99, 0x0a, 0x97, 0x5c, 0x8f, 0xc8, 0xf0, 0x24, 0x66, + 0xc8, 0xdc, 0x50, 0xad, 0xd8, 0xc0, 0x40, 0x3f, 0x0d, 0x10, 0x3a, 0x91, 0xd3, 0x22, 0xca, 0x2f, + 0x7b, 0x64, 0x7b, 0x81, 0xf6, 0x63, 0x45, 0xd2, 0xd4, 0x7b, 0x53, 0xd5, 0x14, 0x63, 0x83, 0x25, + 0x7a, 0x1e, 0x86, 0x23, 0xe2, 0x11, 0x27, 0x66, 0x61, 0xbf, 0xd9, 0x1c, 0x06, 0xac, 0x41, 0xd8, + 0xc4, 0x43, 0x4f, 0xaa, 0x48, 0xae, 0x4c, 0x44, 0x4b, 0x3a, 0x9a, 0x0b, 0xbd, 0x61, 0xc1, 0xd8, + 0x86, 0xeb, 0x11, 0xcd, 0x5d, 0x64, 0x1c, 0x2c, 0x1f, 0xfd, 0x25, 0x2f, 0x99, 0x74, 0xb5, 0x84, + 0x4c, 0x35, 0xc7, 0x38, 0xc3, 0x9e, 0x7e, 0xe6, 0x6d, 0x12, 0x31, 0xd1, 0x3a, 0x98, 0xfe, 0xcc, + 0x37, 0x78, 0x33, 0x96, 0x70, 0x34, 0x0d, 0x27, 0x42, 0x27, 0x8e, 0x67, 0x23, 0xd2, 0x20, 0x7e, + 0xe2, 0x3a, 0x1e, 0xcf, 0x07, 0xa8, 0xea, 0x78, 0xe0, 0x95, 0x34, 0x18, 0x67, 0xf1, 0xd1, 0x07, + 0xe0, 0x61, 0xee, 0xf8, 0x58, 0x72, 0xe3, 0xd8, 0xf5, 0x9b, 0x7a, 0x1a, 0x08, 0xff, 0xcf, 0x84, + 0x20, 0xf5, 0xf0, 0x42, 0x3e, 0x1a, 0xee, 0xf5, 0x3c, 0x7a, 0x1a, 0xaa, 0xf1, 0x96, 0x1b, 0xce, + 0x46, 0x8d, 0x98, 0x1d, 0x7a, 0x54, 0xb5, 0xb7, 0x71, 0x55, 0xb4, 0x63, 0x85, 0x81, 0xea, 0x30, + 0xc2, 0x3f, 0x09, 0x0f, 0x45, 0x13, 0xf2, 0xf1, 0x99, 0x9e, 0xea, 0x51, 0xa4, 0xb7, 0x4d, 0x62, + 0xe7, 0xf6, 0x45, 0x79, 0x04, 0xc3, 0x4f, 0x0c, 0x6e, 0x18, 0x64, 0x70, 0x8a, 0xa8, 0xfd, 0x0b, + 0xa5, 0xf4, 0x8e, 0xdb, 0x5c, 0xa4, 0x28, 0xa6, 0x4b, 0x31, 0xb9, 0xe1, 0x44, 0xd2, 0x1b, 0x73, + 0xc4, 0xb4, 0x05, 0x41, 0xf7, 0x86, 0x13, 0x99, 0x8b, 0x9a, 0x31, 0xc0, 0x92, 0x13, 0xba, 0x05, + 0x03, 0x89, 0xe7, 0x14, 0x94, 0xe7, 0x64, 0x70, 0xd4, 0x0e, 0x90, 0xc5, 0xe9, 0x18, 0x33, 0x1e, + 0xe8, 0x51, 0x6a, 0xf5, 0xaf, 0xcb, 0x23, 0x12, 0x61, 0xa8, 0xaf, 0xc7, 0x98, 0xb5, 0xda, 0x77, + 0x21, 0x47, 0xae, 0x2a, 0x45, 0x86, 0x2e, 0x00, 0xd0, 0x0d, 0xe4, 0x4a, 0x44, 0x36, 0xdc, 0x1d, + 0x61, 0x48, 0xa8, 0xb5, 0x7b, 0x4d, 0x41, 0xb0, 0x81, 0x25, 0x9f, 0x59, 0x6d, 0x6f, 0xd0, 0x67, + 0x4a, 0xdd, 0xcf, 0x70, 0x08, 0x36, 0xb0, 0xd0, 0x73, 0x30, 0xe8, 0xb6, 0x9c, 0xa6, 0x0a, 0xc1, + 0x7c, 0x94, 0x2e, 0xda, 0x05, 0xd6, 0x72, 0x77, 0x77, 0x62, 0x4c, 0x75, 0x88, 0x35, 0x61, 0x81, + 0x8b, 0x7e, 0xd5, 0x82, 0x91, 0x7a, 0xd0, 0x6a, 0x05, 0x3e, 0xdf, 0x76, 0x89, 0x3d, 0xe4, 0xad, + 0xe3, 0x52, 0xf3, 0x93, 0xb3, 0x06, 0x33, 0xbe, 0x89, 0x54, 0x09, 0x59, 0x26, 0x08, 0xa7, 0x7a, + 0x65, 0xae, 0xed, 0xca, 0x3e, 0x6b, 0xfb, 0x37, 0x2c, 0x38, 0xc5, 0x9f, 0x35, 0x76, 0x83, 0x22, + 0xf7, 0x28, 0x38, 0xe6, 0xd7, 0xea, 0xda, 0x20, 0x2b, 0x2f, 0x5d, 0x17, 0x1c, 0x77, 0x77, 0x12, + 0xcd, 0xc3, 0xa9, 0x8d, 0x20, 0xaa, 0x13, 0x73, 0x20, 0x84, 0x60, 0x52, 0x84, 0x2e, 0x65, 0x11, + 0x70, 0xf7, 0x33, 0xe8, 0x06, 0x3c, 0x64, 0x34, 0x9a, 0xe3, 0xc0, 0x65, 0xd3, 0xe3, 0x82, 0xda, + 0x43, 0x97, 0x72, 0xb1, 0x70, 0x8f, 0xa7, 0xd3, 0x0e, 0x93, 0x5a, 0x1f, 0x0e, 0x93, 0x57, 0xe1, + 0x91, 0x7a, 0xf7, 0xc8, 0x6c, 0xc7, 0xed, 0xf5, 0x98, 0x4b, 0xaa, 0xea, 0xcc, 0x0f, 0x08, 0x02, + 0x8f, 0xcc, 0xf6, 0x42, 0xc4, 0xbd, 0x69, 0xa0, 0x8f, 0x40, 0x35, 0x22, 0xec, 0xab, 0xc4, 0x22, + 0x11, 0xe7, 0x88, 0xbb, 0x64, 0x6d, 0x81, 0x72, 0xb2, 0x5a, 0xf6, 0x8a, 0x86, 0x18, 0x2b, 0x8e, + 0xe8, 0x36, 0x0c, 0x85, 0x4e, 0x52, 0xdf, 0x14, 0xe9, 0x37, 0x47, 0x8e, 0x7f, 0x51, 0xcc, 0x99, + 0x0f, 0xdc, 0x48, 0xd8, 0xe5, 0x4c, 0xb0, 0xe4, 0x46, 0xad, 0x91, 0x7a, 0xd0, 0x0a, 0x03, 0x9f, + 0xf8, 0x49, 0x3c, 0x3e, 0xaa, 0xad, 0x91, 0x59, 0xd5, 0x8a, 0x0d, 0x0c, 0xb4, 0x02, 0x67, 0x98, + 0xcf, 0xe8, 0xa6, 0x9b, 0x6c, 0x06, 0xed, 0x44, 0x6e, 0x81, 0xc6, 0xc7, 0xd2, 0x47, 0x15, 0x8b, + 0x39, 0x38, 0x38, 0xf7, 0xc9, 0x73, 0xef, 0x83, 0x53, 0x5d, 0x4b, 0xf9, 0x40, 0xee, 0x9a, 0x39, + 0x78, 0x28, 0x7f, 0xd1, 0x1c, 0xc8, 0x69, 0xf3, 0x8f, 0x33, 0x61, 0xb3, 0x86, 0x21, 0xdd, 0x87, + 0x03, 0xd0, 0x81, 0x32, 0xf1, 0xb7, 0x85, 0x0e, 0xb9, 0x74, 0xb4, 0x6f, 0x77, 0xd1, 0xdf, 0xe6, + 0x6b, 0x9e, 0x79, 0x39, 0x2e, 0xfa, 0xdb, 0x98, 0xd2, 0x46, 0x5f, 0xb2, 0x52, 0x86, 0x20, 0x77, + 0x1b, 0x7e, 0xe8, 0x58, 0x76, 0x0e, 0x7d, 0xdb, 0x86, 0xf6, 0xbf, 0x2d, 0xc1, 0xf9, 0xfd, 0x88, + 0xf4, 0x31, 0x7c, 0x4f, 0xc0, 0x60, 0xcc, 0x0e, 0xc2, 0x85, 0x50, 0x1e, 0xa6, 0x73, 0x95, 0x1f, + 0x8d, 0xbf, 0x8a, 0x05, 0x08, 0x79, 0x50, 0x6e, 0x39, 0xa1, 0xf0, 0x26, 0x2d, 0x1c, 0x35, 0x91, + 0x86, 0xfe, 0x77, 0xbc, 0x25, 0x27, 0xe4, 0x3e, 0x0a, 0xa3, 0x01, 0x53, 0x36, 0x28, 0x81, 0x8a, + 0x13, 0x45, 0x8e, 0x3c, 0x75, 0xbd, 0x5a, 0x0c, 0xbf, 0x69, 0x4a, 0x92, 0x1f, 0x5a, 0xa5, 0x9a, + 0x30, 0x67, 0x66, 0xff, 0x62, 0x35, 0x95, 0x4c, 0xc2, 0x8e, 0xd2, 0x63, 0x18, 0x14, 0x4e, 0x24, + 0xab, 0xe8, 0xfc, 0x25, 0x9e, 0x0d, 0xc8, 0xf6, 0x89, 0x22, 0xa7, 0x5a, 0xb0, 0x42, 0x9f, 0xb5, + 0x58, 0xe6, 0xb2, 0x4c, 0xb0, 0x11, 0xbb, 0xb3, 0xe3, 0x49, 0xa4, 0x36, 0xf3, 0xa1, 0x65, 0x23, + 0x36, 0xb9, 0x8b, 0x0a, 0x04, 0xcc, 0x2a, 0xed, 0xae, 0x40, 0xc0, 0xac, 0x4c, 0x09, 0x47, 0x3b, + 0x39, 0x47, 0xe6, 0x05, 0x64, 0xbf, 0xf6, 0x71, 0x48, 0xfe, 0x35, 0x0b, 0x4e, 0xb9, 0xd9, 0xb3, + 0x4f, 0xb1, 0x97, 0x39, 0x62, 0x50, 0x46, 0xef, 0xa3, 0x55, 0xa5, 0xce, 0xbb, 0x40, 0xb8, 0xbb, + 0x33, 0xa8, 0x01, 0x03, 0xae, 0xbf, 0x11, 0x08, 0x23, 0x66, 0xe6, 0x68, 0x9d, 0x5a, 0xf0, 0x37, + 0x02, 0xbd, 0x9a, 0xe9, 0x3f, 0xcc, 0xa8, 0xa3, 0x45, 0x38, 0x13, 0x09, 0x6f, 0xd3, 0x65, 0x37, + 0x4e, 0x82, 0xa8, 0xb3, 0xe8, 0xb6, 0xdc, 0x84, 0x19, 0x20, 0xe5, 0x99, 0x71, 0xaa, 0x1f, 0x70, + 0x0e, 0x1c, 0xe7, 0x3e, 0x85, 0x5e, 0x87, 0x21, 0x99, 0x6a, 0x5d, 0x2d, 0x62, 0x5f, 0xd8, 0x3d, + 0xff, 0xd5, 0x64, 0x5a, 0x15, 0x59, 0xd5, 0x92, 0x21, 0xfa, 0x9c, 0x05, 0x63, 0xfc, 0xf7, 0xe5, + 0x4e, 0x83, 0xa7, 0x30, 0xd5, 0x8a, 0x08, 0x2a, 0x5e, 0x4d, 0xd1, 0xd4, 0x1b, 0xd3, 0x74, 0x3b, + 0xce, 0xf0, 0xb6, 0xdf, 0x18, 0x86, 0xee, 0x53, 0x5a, 0xf4, 0x51, 0xa8, 0x45, 0x2a, 0x1b, 0xdd, + 0x2a, 0xc2, 0x7a, 0x90, 0xd3, 0x4d, 0x9c, 0x10, 0x2b, 0xcb, 0x4c, 0xe7, 0x9d, 0x6b, 0x8e, 0x74, + 0xff, 0x14, 0xeb, 0xc3, 0xdc, 0x02, 0x96, 0x9a, 0xe0, 0xaa, 0x0f, 0xea, 0x3a, 0x7e, 0x1d, 0x33, + 0x1e, 0x28, 0x82, 0xc1, 0x4d, 0xe2, 0x78, 0xc9, 0x66, 0x31, 0x67, 0x0a, 0x97, 0x19, 0xad, 0x6c, + 0x4e, 0x12, 0x6f, 0xc5, 0x82, 0x13, 0xda, 0x81, 0xa1, 0x4d, 0x3e, 0x1f, 0xc5, 0x96, 0x66, 0xe9, + 0xa8, 0x83, 0x9b, 0x9a, 0xe4, 0x7a, 0xf6, 0x89, 0x06, 0x2c, 0xd9, 0xb1, 0xf0, 0x1f, 0x23, 0x40, + 0x81, 0x4b, 0x92, 0xe2, 0xd2, 0xb1, 0xfa, 0x8f, 0x4e, 0xf8, 0x30, 0x8c, 0x44, 0xa4, 0x1e, 0xf8, + 0x75, 0xd7, 0x23, 0x8d, 0x69, 0x79, 0x5e, 0x70, 0x90, 0x24, 0x1e, 0xe6, 0x16, 0xc0, 0x06, 0x0d, + 0x9c, 0xa2, 0x88, 0x3e, 0x63, 0xc1, 0x98, 0x4a, 0x61, 0xa5, 0x1f, 0x84, 0x08, 0xff, 0xf4, 0x62, + 0x41, 0x09, 0xb3, 0x8c, 0xe6, 0x0c, 0xa2, 0x8b, 0x2c, 0xdd, 0x86, 0x33, 0x7c, 0xd1, 0xcb, 0x00, + 0xc1, 0x3a, 0x8f, 0xf1, 0x99, 0x4e, 0x84, 0xb3, 0xfa, 0x20, 0xaf, 0x3a, 0xc6, 0xb3, 0xf9, 0x24, + 0x05, 0x6c, 0x50, 0x43, 0x57, 0x01, 0xf8, 0xb2, 0x59, 0xeb, 0x84, 0x72, 0xdf, 0x23, 0xb3, 0xb0, + 0x60, 0x55, 0x41, 0xee, 0xee, 0x4e, 0x74, 0x3b, 0x0f, 0x59, 0x1c, 0x85, 0xf1, 0x38, 0xfa, 0x29, + 0x18, 0x8a, 0xdb, 0xad, 0x96, 0xa3, 0x5c, 0xd9, 0x05, 0xe6, 0x07, 0x72, 0xba, 0x86, 0x64, 0xe4, + 0x0d, 0x58, 0x72, 0x44, 0xb7, 0xa8, 0x8c, 0x17, 0xe2, 0x89, 0xaf, 0x22, 0x6e, 0xa2, 0x0c, 0xb3, + 0x77, 0x7a, 0xb7, 0xdc, 0x07, 0xe0, 0x1c, 0x9c, 0xbb, 0xbb, 0x13, 0x0f, 0xa5, 0xdb, 0x17, 0x03, + 0x91, 0xb1, 0x97, 0x4b, 0x13, 0x5d, 0x91, 0x85, 0x60, 0xe8, 0x6b, 0xcb, 0xfa, 0x04, 0x4f, 0xe9, + 0x42, 0x30, 0xac, 0xb9, 0xf7, 0x98, 0x99, 0x0f, 0xa3, 0x25, 0x38, 0x5d, 0x0f, 0xfc, 0x24, 0x0a, + 0x3c, 0x8f, 0x17, 0x42, 0xe2, 0x5b, 0x50, 0xee, 0xea, 0x7e, 0xbb, 0xe8, 0xf6, 0xe9, 0xd9, 0x6e, + 0x14, 0x9c, 0xf7, 0x9c, 0xed, 0xa7, 0x83, 0x1f, 0xc5, 0xe0, 0x3c, 0x07, 0x23, 0x64, 0x27, 0x21, + 0x91, 0xef, 0x78, 0xd7, 0xf1, 0xa2, 0x74, 0xf2, 0xb2, 0x35, 0x70, 0xd1, 0x68, 0xc7, 0x29, 0x2c, + 0x64, 0x2b, 0xbf, 0x8b, 0x91, 0x85, 0xca, 0xfd, 0x2e, 0xd2, 0xcb, 0x62, 0xff, 0xef, 0x52, 0xca, + 0x3e, 0x5c, 0x8b, 0x08, 0x41, 0x01, 0x54, 0xfc, 0xa0, 0xa1, 0x64, 0xff, 0x95, 0x62, 0x64, 0xff, + 0xb5, 0xa0, 0x61, 0x54, 0x8b, 0xa1, 0xff, 0x62, 0xcc, 0xf9, 0xb0, 0x72, 0x1a, 0xb2, 0xee, 0x08, + 0x03, 0x88, 0x7d, 0x4f, 0x91, 0x9c, 0x55, 0x39, 0x8d, 0x65, 0x93, 0x11, 0x4e, 0xf3, 0x45, 0x5b, + 0x50, 0xd9, 0x0c, 0xe2, 0x44, 0xee, 0x86, 0x8e, 0xb8, 0xf1, 0xba, 0x1c, 0xc4, 0x09, 0x33, 0x6a, + 0xd4, 0x6b, 0xd3, 0x96, 0x18, 0x73, 0x1e, 0xf6, 0x7f, 0xb1, 0x52, 0x2e, 0xfd, 0x9b, 0x2c, 0x10, + 0x78, 0x9b, 0xf8, 0x74, 0x59, 0x9b, 0x91, 0x4f, 0x3f, 0x9a, 0x49, 0xab, 0x7c, 0x47, 0xaf, 0x3a, + 0x5f, 0xb7, 0x29, 0x85, 0x49, 0x46, 0xc2, 0x08, 0x92, 0xfa, 0xb8, 0x95, 0x4e, 0x70, 0x2d, 0x15, + 0xb1, 0xdf, 0x31, 0x93, 0xbc, 0xf7, 0xcd, 0x95, 0xb5, 0xbf, 0x64, 0xc1, 0xd0, 0x8c, 0x53, 0xdf, + 0x0a, 0x36, 0x36, 0xd0, 0xd3, 0x50, 0x6d, 0xb4, 0x23, 0x33, 0xd7, 0x56, 0xf9, 0x31, 0xe6, 0x44, + 0x3b, 0x56, 0x18, 0x74, 0x0e, 0x6f, 0x38, 0x75, 0x99, 0xea, 0x5d, 0xe6, 0x73, 0xf8, 0x12, 0x6b, + 0xc1, 0x02, 0x82, 0x9e, 0x87, 0xe1, 0x96, 0xb3, 0x23, 0x1f, 0xce, 0x9e, 0x27, 0x2c, 0x69, 0x10, + 0x36, 0xf1, 0xec, 0x7f, 0x69, 0xc1, 0xf8, 0x8c, 0x13, 0xbb, 0xf5, 0xe9, 0x76, 0xb2, 0x39, 0xe3, + 0x26, 0xeb, 0xed, 0xfa, 0x16, 0x49, 0x78, 0x7e, 0x3f, 0xed, 0x65, 0x3b, 0xa6, 0x4b, 0x49, 0x6d, + 0x33, 0x55, 0x2f, 0xaf, 0x8b, 0x76, 0xac, 0x30, 0xd0, 0xeb, 0x30, 0x1c, 0x3a, 0x71, 0x7c, 0x3b, + 0x88, 0x1a, 0x98, 0x6c, 0x14, 0x53, 0x5d, 0x63, 0x95, 0xd4, 0x23, 0x92, 0x60, 0xb2, 0x21, 0xce, + 0xbc, 0x35, 0x7d, 0x6c, 0x32, 0xb3, 0xbf, 0x60, 0xc1, 0x23, 0x33, 0xc4, 0x89, 0x48, 0xc4, 0x8a, + 0x71, 0xa8, 0x17, 0x99, 0xf5, 0x82, 0x76, 0x03, 0xbd, 0x06, 0xd5, 0x84, 0x36, 0xd3, 0x6e, 0x59, + 0xc5, 0x76, 0x8b, 0x1d, 0x59, 0xaf, 0x09, 0xe2, 0x58, 0xb1, 0xb1, 0xff, 0xa6, 0x05, 0x23, 0xec, + 0xf4, 0x6f, 0x8e, 0x24, 0x8e, 0xeb, 0x75, 0xd5, 0xac, 0xb2, 0xfa, 0xac, 0x59, 0x75, 0x1e, 0x06, + 0x36, 0x83, 0x16, 0xc9, 0x9e, 0x5c, 0x5f, 0x0e, 0xe8, 0x2e, 0x9f, 0x42, 0xd0, 0xb3, 0xf4, 0xc3, + 0xbb, 0x7e, 0xe2, 0xd0, 0x25, 0x20, 0xbd, 0xcb, 0x27, 0xf8, 0x47, 0x57, 0xcd, 0xd8, 0xc4, 0xb1, + 0x7f, 0xbb, 0x06, 0x43, 0x22, 0xbc, 0xa1, 0xef, 0x1a, 0x0f, 0xd2, 0xdd, 0x50, 0xea, 0xe9, 0x6e, + 0x88, 0x61, 0xb0, 0xce, 0x8a, 0xe7, 0x09, 0x33, 0xf2, 0x6a, 0x21, 0xf1, 0x30, 0xbc, 0x1e, 0x9f, + 0xee, 0x16, 0xff, 0x8f, 0x05, 0x2b, 0xf4, 0x45, 0x0b, 0x4e, 0xd4, 0x03, 0xdf, 0x27, 0x75, 0x6d, + 0xe3, 0x0c, 0x14, 0x11, 0xf6, 0x30, 0x9b, 0x26, 0xaa, 0x8f, 0x9e, 0x32, 0x00, 0x9c, 0x65, 0x8f, + 0x5e, 0x84, 0x51, 0x3e, 0x66, 0x37, 0x52, 0x2e, 0x71, 0x5d, 0xca, 0xc8, 0x04, 0xe2, 0x34, 0x2e, + 0x9a, 0xe4, 0x47, 0x0b, 0xa2, 0x68, 0xd0, 0xa0, 0xf6, 0x1c, 0x1a, 0xe5, 0x82, 0x0c, 0x0c, 0x14, + 0x01, 0x8a, 0xc8, 0x46, 0x44, 0xe2, 0x4d, 0x11, 0xfe, 0xc1, 0xec, 0xab, 0xa1, 0xc3, 0xe5, 0x83, + 0xe3, 0x2e, 0x4a, 0x38, 0x87, 0x3a, 0xda, 0x12, 0xfb, 0xdd, 0x6a, 0x11, 0x32, 0x54, 0x7c, 0xe6, + 0x9e, 0xdb, 0xde, 0x09, 0xa8, 0xc4, 0x9b, 0x4e, 0xd4, 0x60, 0x76, 0x5d, 0x99, 0xe7, 0x20, 0xad, + 0xd2, 0x06, 0xcc, 0xdb, 0xd1, 0x1c, 0x9c, 0xcc, 0x14, 0x62, 0x8a, 0x85, 0xeb, 0x5a, 0xe5, 0x9b, + 0x64, 0x4a, 0x38, 0xc5, 0xb8, 0xeb, 0x09, 0xd3, 0x17, 0x32, 0xbc, 0x8f, 0x2f, 0xa4, 0xa3, 0x82, + 0x0c, 0xb9, 0x53, 0xf9, 0xa5, 0x42, 0x06, 0xa0, 0xaf, 0x88, 0xc2, 0xcf, 0x67, 0x22, 0x0a, 0x47, + 0x59, 0x07, 0x6e, 0x14, 0xd3, 0x81, 0x83, 0x87, 0x0f, 0xde, 0xcf, 0x70, 0xc0, 0xbf, 0xb0, 0x40, + 0x7e, 0xd7, 0x59, 0xa7, 0xbe, 0x49, 0xe8, 0x94, 0x41, 0xef, 0x85, 0x31, 0xb5, 0x85, 0x9e, 0x0d, + 0xda, 0x3e, 0x8f, 0x04, 0x2c, 0x6b, 0x57, 0x00, 0x4e, 0x41, 0x71, 0x06, 0x1b, 0x4d, 0x41, 0x8d, + 0x8e, 0x13, 0x7f, 0x94, 0xeb, 0x5a, 0xb5, 0x4d, 0x9f, 0x5e, 0x59, 0x10, 0x4f, 0x69, 0x1c, 0x14, + 0xc0, 0x29, 0xcf, 0x89, 0x13, 0xd6, 0x03, 0xba, 0xa3, 0x3e, 0x64, 0x35, 0x06, 0x96, 0xd4, 0xb0, + 0x98, 0x25, 0x84, 0xbb, 0x69, 0xdb, 0xdf, 0x1e, 0x80, 0xd1, 0x94, 0x64, 0x3c, 0xa0, 0x92, 0x7e, + 0x1a, 0xaa, 0x52, 0x6f, 0x66, 0xeb, 0xc6, 0x28, 0xe5, 0xaa, 0x30, 0xa8, 0xd2, 0x5a, 0xd7, 0x5a, + 0x35, 0x6b, 0x54, 0x18, 0x0a, 0x17, 0x9b, 0x78, 0x4c, 0x28, 0x27, 0x5e, 0x3c, 0xeb, 0xb9, 0xc4, + 0x4f, 0x78, 0x37, 0x8b, 0x11, 0xca, 0x6b, 0x8b, 0xab, 0x26, 0x51, 0x2d, 0x94, 0x33, 0x00, 0x9c, + 0x65, 0x8f, 0x3e, 0x6d, 0xc1, 0xa8, 0x73, 0x3b, 0xd6, 0x15, 0x5e, 0x45, 0xec, 0xe0, 0x11, 0x95, + 0x54, 0xaa, 0x68, 0x2c, 0xf7, 0x40, 0xa7, 0x9a, 0x70, 0x9a, 0x29, 0x7a, 0xd3, 0x02, 0x44, 0x76, + 0x48, 0x5d, 0x46, 0x37, 0x8a, 0xbe, 0x0c, 0x16, 0xb1, 0xd3, 0xbc, 0xd8, 0x45, 0x97, 0x4b, 0xf5, + 0xee, 0x76, 0x9c, 0xd3, 0x07, 0xfb, 0x9f, 0x95, 0xd5, 0x82, 0xd2, 0x01, 0xb5, 0x8e, 0x11, 0xd8, + 0x67, 0x1d, 0x3e, 0xb0, 0x4f, 0x07, 0x48, 0x74, 0x27, 0x79, 0xa6, 0x72, 0xc2, 0x4a, 0xf7, 0x29, + 0x27, 0xec, 0x93, 0x56, 0xaa, 0x42, 0xd2, 0xf0, 0x85, 0x97, 0x8b, 0x0d, 0xe6, 0x9d, 0xe4, 0xc1, + 0x1b, 0x19, 0xe9, 0x9e, 0x8e, 0xd9, 0xa1, 0xd2, 0xd4, 0x40, 0x3b, 0x90, 0x34, 0xfc, 0xf7, 0x65, + 0x18, 0x36, 0x34, 0x69, 0xae, 0x59, 0x64, 0x3d, 0x60, 0x66, 0x51, 0xe9, 0x00, 0x66, 0xd1, 0x4f, + 0x43, 0xad, 0x2e, 0xa5, 0x7c, 0x31, 0x35, 0x82, 0xb3, 0xba, 0x43, 0x0b, 0x7a, 0xd5, 0x84, 0x35, + 0x4f, 0x34, 0x9f, 0xca, 0x24, 0x12, 0x1a, 0x62, 0x80, 0x69, 0x88, 0xbc, 0x54, 0x1f, 0xa1, 0x29, + 0xba, 0x9f, 0x61, 0x85, 0xb4, 0x42, 0x57, 0xbc, 0x97, 0x0c, 0xb9, 0xe7, 0x85, 0xb4, 0x56, 0x16, + 0x64, 0x33, 0x36, 0x71, 0xec, 0x6f, 0x5b, 0xea, 0xe3, 0xde, 0x83, 0x92, 0x11, 0xb7, 0xd2, 0x25, + 0x23, 0x2e, 0x16, 0x32, 0xcc, 0x3d, 0x6a, 0x45, 0x5c, 0x83, 0xa1, 0xd9, 0xa0, 0xd5, 0x72, 0xfc, + 0x06, 0xfa, 0x21, 0x18, 0xaa, 0xf3, 0x9f, 0xc2, 0xb1, 0xc3, 0x4e, 0x2b, 0x05, 0x14, 0x4b, 0x18, + 0x7a, 0x14, 0x06, 0x9c, 0xa8, 0x29, 0x9d, 0x39, 0x2c, 0xd6, 0x67, 0x3a, 0x6a, 0xc6, 0x98, 0xb5, + 0xda, 0xff, 0x68, 0x00, 0xd8, 0x11, 0xbb, 0x13, 0x91, 0xc6, 0x5a, 0xc0, 0x6a, 0x14, 0x1e, 0xeb, + 0x19, 0x9f, 0xde, 0x2c, 0x3d, 0xc8, 0xe7, 0x7c, 0xc6, 0x59, 0x4f, 0xf9, 0x5e, 0x9f, 0xf5, 0xe4, + 0x1f, 0xdf, 0x0d, 0x3c, 0x40, 0xc7, 0x77, 0xf6, 0xe7, 0x2c, 0x40, 0x2a, 0x2e, 0x43, 0x9f, 0xaf, + 0x4f, 0x41, 0x4d, 0x45, 0x68, 0x08, 0xc3, 0x4a, 0x8b, 0x08, 0x09, 0xc0, 0x1a, 0xa7, 0x8f, 0x1d, + 0xf2, 0x13, 0x52, 0x7e, 0x97, 0xd3, 0x61, 0xc2, 0x4c, 0xea, 0x0b, 0x71, 0x6e, 0xff, 0x4e, 0x09, + 0x1e, 0xe2, 0x2a, 0x79, 0xc9, 0xf1, 0x9d, 0x26, 0x69, 0xd1, 0x5e, 0xf5, 0x1b, 0x31, 0x51, 0xa7, + 0x5b, 0x33, 0x57, 0x86, 0xfd, 0x1e, 0x75, 0xed, 0xf2, 0x35, 0xc7, 0x57, 0xd9, 0x82, 0xef, 0x26, + 0x98, 0x11, 0x47, 0x31, 0x54, 0x65, 0x01, 0x7d, 0x21, 0x8b, 0x0b, 0x62, 0xa4, 0xc4, 0x92, 0xd0, + 0x9b, 0x04, 0x2b, 0x46, 0xd4, 0x70, 0xf5, 0x82, 0xfa, 0x16, 0x26, 0x61, 0xc0, 0xe4, 0xae, 0x11, + 0x75, 0xb9, 0x28, 0xda, 0xb1, 0xc2, 0xb0, 0x7f, 0xc7, 0x82, 0xac, 0x46, 0x32, 0x8a, 0xc1, 0x59, + 0x7b, 0x16, 0x83, 0x3b, 0x40, 0x35, 0xb6, 0x9f, 0x84, 0x61, 0x27, 0xa1, 0x46, 0x04, 0xdf, 0x76, + 0x97, 0x0f, 0x77, 0xac, 0xb1, 0x14, 0x34, 0xdc, 0x0d, 0x97, 0x6d, 0xb7, 0x4d, 0x72, 0xf6, 0x9b, + 0x16, 0xd4, 0xe6, 0xa2, 0xce, 0xc1, 0xd3, 0x1d, 0xba, 0x93, 0x19, 0x4a, 0x07, 0x4a, 0x66, 0x90, + 0xe9, 0x12, 0xe5, 0x5e, 0xe9, 0x12, 0xf6, 0xff, 0x18, 0x80, 0x53, 0x5d, 0x79, 0x33, 0xe8, 0x05, + 0x18, 0xa9, 0x8b, 0x99, 0x1b, 0x4a, 0x5f, 0x5b, 0xcd, 0x0c, 0x20, 0xd4, 0x30, 0x9c, 0xc2, 0xec, + 0x63, 0xed, 0x2c, 0xc0, 0xe9, 0x88, 0xbc, 0xd6, 0x26, 0x6d, 0x32, 0xbd, 0x91, 0x90, 0x68, 0x95, + 0xd4, 0x03, 0xbf, 0xc1, 0xab, 0x29, 0x96, 0x67, 0x1e, 0xbe, 0xb3, 0x3b, 0x71, 0x1a, 0x77, 0x83, + 0x71, 0xde, 0x33, 0x28, 0x84, 0x51, 0xcf, 0x34, 0x4f, 0xc5, 0xde, 0xe4, 0x50, 0x96, 0xad, 0x32, + 0x5f, 0x52, 0xcd, 0x38, 0xcd, 0x20, 0x6d, 0xe3, 0x56, 0xee, 0x93, 0x8d, 0xfb, 0x29, 0x6d, 0xe3, + 0xf2, 0x48, 0x85, 0x0f, 0x16, 0x9c, 0x37, 0x75, 0xdc, 0x46, 0xee, 0x4b, 0x50, 0x95, 0x51, 0x5c, + 0x7d, 0x45, 0x3f, 0x99, 0x74, 0x7a, 0x08, 0xdb, 0x27, 0xe1, 0x07, 0x2f, 0x46, 0x91, 0x31, 0x98, + 0xd7, 0x82, 0x64, 0xda, 0xf3, 0x82, 0xdb, 0xd4, 0x7e, 0xb8, 0x1e, 0x13, 0xe1, 0xfc, 0xb1, 0xef, + 0x96, 0x20, 0x67, 0x1f, 0x45, 0xd7, 0xa4, 0x36, 0x5a, 0x52, 0x6b, 0xf2, 0x60, 0x86, 0x0b, 0xda, + 0xe1, 0x91, 0x6e, 0x5c, 0x3d, 0x7f, 0xa0, 0xe8, 0x7d, 0xa0, 0x0e, 0x7e, 0x53, 0x69, 0x27, 0x2a, + 0x00, 0xee, 0x02, 0x80, 0xb6, 0x35, 0x45, 0x52, 0x81, 0x3a, 0xb9, 0xd6, 0x26, 0x29, 0x36, 0xb0, + 0xd0, 0xf3, 0x30, 0xec, 0xfa, 0x71, 0xe2, 0x78, 0xde, 0x65, 0xd7, 0x4f, 0x84, 0x7f, 0x53, 0xd9, + 0x21, 0x0b, 0x1a, 0x84, 0x4d, 0xbc, 0x73, 0xef, 0x36, 0xbe, 0xdf, 0x41, 0xbe, 0xfb, 0x26, 0x3c, + 0x32, 0xef, 0x26, 0x2a, 0x15, 0x46, 0xcd, 0x37, 0x6a, 0x4a, 0x2a, 0x59, 0x65, 0xf5, 0x4c, 0xed, + 0x32, 0x52, 0x51, 0x4a, 0xe9, 0xcc, 0x99, 0x6c, 0x2a, 0x8a, 0xfd, 0x02, 0x9c, 0x99, 0x77, 0x93, + 0x4b, 0xae, 0x47, 0x0e, 0xc8, 0xc4, 0xfe, 0xad, 0x41, 0x18, 0x31, 0x93, 0x29, 0x0f, 0x22, 0xae, + 0xbf, 0x40, 0xad, 0x45, 0xf1, 0x76, 0xae, 0x3a, 0xf7, 0xbb, 0x79, 0xe4, 0xcc, 0xce, 0xfc, 0x11, + 0x33, 0x0c, 0x46, 0xcd, 0x13, 0x9b, 0x1d, 0x40, 0xb7, 0xa1, 0xb2, 0xc1, 0x52, 0x25, 0xca, 0x45, + 0x04, 0x47, 0xe4, 0x8d, 0xa8, 0x5e, 0x8e, 0x3c, 0xd9, 0x82, 0xf3, 0xa3, 0x4a, 0x3e, 0x4a, 0xe7, + 0xdf, 0x19, 0xe1, 0xbd, 0x42, 0x59, 0x29, 0x8c, 0x5e, 0x2a, 0xa1, 0x72, 0x08, 0x95, 0x90, 0x12, + 0xd0, 0x83, 0xf7, 0x49, 0x40, 0xb3, 0xb4, 0x97, 0x64, 0x93, 0x99, 0xa0, 0x22, 0x1f, 0x61, 0x88, + 0x0d, 0x82, 0x91, 0xf6, 0x92, 0x02, 0xe3, 0x2c, 0x3e, 0xfa, 0x98, 0x12, 0xf1, 0xd5, 0x22, 0x5c, + 0xc3, 0xe6, 0x8c, 0x3e, 0x6e, 0xe9, 0xfe, 0xb9, 0x12, 0x8c, 0xcd, 0xfb, 0xed, 0x95, 0xf9, 0x95, + 0xf6, 0xba, 0xe7, 0xd6, 0xaf, 0x92, 0x0e, 0x15, 0xe1, 0x5b, 0xa4, 0xb3, 0x30, 0x27, 0x56, 0x90, + 0x9a, 0x33, 0x57, 0x69, 0x23, 0xe6, 0x30, 0x2a, 0x8c, 0x36, 0x5c, 0xbf, 0x49, 0xa2, 0x30, 0x72, + 0x85, 0xd7, 0xd6, 0x10, 0x46, 0x97, 0x34, 0x08, 0x9b, 0x78, 0x94, 0x76, 0x70, 0xdb, 0x27, 0x51, + 0xd6, 0x16, 0x5f, 0xa6, 0x8d, 0x98, 0xc3, 0x28, 0x52, 0x12, 0xb5, 0xe3, 0x44, 0x4c, 0x46, 0x85, + 0xb4, 0x46, 0x1b, 0x31, 0x87, 0xd1, 0x95, 0x1e, 0xb7, 0xd7, 0x59, 0xec, 0x49, 0x26, 0xf9, 0x61, + 0x95, 0x37, 0x63, 0x09, 0xa7, 0xa8, 0x5b, 0xa4, 0x33, 0x47, 0x37, 0xee, 0x99, 0x1c, 0xa8, 0xab, + 0xbc, 0x19, 0x4b, 0x38, 0x2b, 0x17, 0x99, 0x1e, 0x8e, 0xef, 0xb9, 0x72, 0x91, 0xe9, 0xee, 0xf7, + 0x70, 0x01, 0xfc, 0x8a, 0x05, 0x23, 0x66, 0xc4, 0x18, 0x6a, 0x66, 0xcc, 0xf4, 0xe5, 0xae, 0x6a, + 0xc3, 0x3f, 0x9e, 0x77, 0x55, 0x5b, 0xd3, 0x4d, 0x82, 0x30, 0x7e, 0x86, 0xf8, 0x4d, 0xd7, 0x27, + 0x2c, 0x10, 0x80, 0x47, 0x9a, 0xa5, 0xc2, 0xd1, 0x66, 0x83, 0x06, 0x39, 0x84, 0x9d, 0x6f, 0xdf, + 0x84, 0x53, 0x5d, 0x89, 0x6f, 0x7d, 0x98, 0x20, 0xfb, 0xa6, 0x1d, 0xdb, 0x18, 0x86, 0x29, 0x61, + 0x59, 0xb2, 0x68, 0x16, 0x4e, 0xf1, 0x85, 0x44, 0x39, 0xad, 0xd6, 0x37, 0x49, 0x4b, 0x25, 0x33, + 0xb2, 0x23, 0x82, 0x1b, 0x59, 0x20, 0xee, 0xc6, 0xb7, 0x3f, 0x6f, 0xc1, 0x68, 0x2a, 0x17, 0xb1, + 0x20, 0x63, 0x89, 0xad, 0xb4, 0x80, 0x05, 0x30, 0xb2, 0xa0, 0xf2, 0x32, 0x53, 0xa6, 0x7a, 0xa5, + 0x69, 0x10, 0x36, 0xf1, 0xec, 0x2f, 0x95, 0xa0, 0x2a, 0x83, 0x40, 0xfa, 0xe8, 0xca, 0x67, 0x2d, + 0x18, 0x55, 0xc7, 0x32, 0xcc, 0xdf, 0x57, 0x2a, 0x22, 0x71, 0x84, 0xf6, 0x40, 0x79, 0x0c, 0xfc, + 0x8d, 0x40, 0x5b, 0xee, 0xd8, 0x64, 0x86, 0xd3, 0xbc, 0xd1, 0x0d, 0x80, 0xb8, 0x13, 0x27, 0xa4, + 0x65, 0x78, 0x1e, 0x6d, 0x63, 0xc5, 0x4d, 0xd6, 0x83, 0x88, 0xd0, 0xf5, 0x75, 0x2d, 0x68, 0x90, + 0x55, 0x85, 0xa9, 0x4d, 0x28, 0xdd, 0x86, 0x0d, 0x4a, 0xf6, 0x3f, 0x28, 0xc1, 0xc9, 0x6c, 0x97, + 0xd0, 0x07, 0x61, 0x44, 0x72, 0x37, 0x6e, 0x9d, 0x93, 0x91, 0x2f, 0x23, 0xd8, 0x80, 0xdd, 0xdd, + 0x9d, 0x98, 0xe8, 0xbe, 0xf6, 0x6f, 0xd2, 0x44, 0xc1, 0x29, 0x62, 0xfc, 0x6c, 0x4c, 0x1c, 0xe2, + 0xce, 0x74, 0xa6, 0xc3, 0x50, 0x1c, 0x70, 0x19, 0x67, 0x63, 0x26, 0x14, 0x67, 0xb0, 0xd1, 0x0a, + 0x9c, 0x31, 0x5a, 0xae, 0x11, 0xb7, 0xb9, 0xb9, 0x1e, 0x44, 0x72, 0x07, 0xf6, 0xa8, 0x8e, 0x4d, + 0xeb, 0xc6, 0xc1, 0xb9, 0x4f, 0x52, 0x6d, 0x5f, 0x77, 0x42, 0xa7, 0xee, 0x26, 0x1d, 0xe1, 0x4a, + 0x55, 0xb2, 0x69, 0x56, 0xb4, 0x63, 0x85, 0x61, 0x5f, 0x85, 0x1a, 0x0f, 0xd9, 0x25, 0x6b, 0x41, + 0xce, 0x0e, 0xd7, 0x3a, 0xc8, 0x0e, 0xd7, 0x5e, 0x82, 0x81, 0x3e, 0xa7, 0x63, 0x5f, 0xdb, 0x88, + 0x97, 0xa0, 0x4a, 0xc9, 0x49, 0x5b, 0xb1, 0x08, 0x92, 0x01, 0x54, 0xe5, 0xd5, 0x32, 0xc8, 0x86, + 0xb2, 0xeb, 0xc8, 0xb3, 0x4c, 0x35, 0x46, 0x0b, 0x71, 0xdc, 0x66, 0x4e, 0x03, 0x0a, 0x44, 0x4f, + 0x40, 0x99, 0xec, 0x84, 0xd9, 0x43, 0xcb, 0x8b, 0x3b, 0xa1, 0x1b, 0x91, 0x98, 0x22, 0x91, 0x9d, + 0x10, 0x9d, 0x83, 0x92, 0xdb, 0x10, 0x1a, 0x0f, 0x04, 0x4e, 0x69, 0x61, 0x0e, 0x97, 0xdc, 0x86, + 0xbd, 0x03, 0x35, 0x75, 0x97, 0x0d, 0xda, 0x92, 0x8a, 0xc0, 0x2a, 0x22, 0x04, 0x4c, 0xd2, 0xed, + 0xa1, 0x02, 0xda, 0x00, 0x3a, 0xc3, 0xb3, 0x28, 0x61, 0x75, 0x1e, 0x06, 0xea, 0x81, 0xc8, 0x3e, + 0xaf, 0x6a, 0x32, 0x4c, 0x03, 0x30, 0x88, 0x7d, 0x13, 0xc6, 0xae, 0xfa, 0xc1, 0x6d, 0x56, 0x88, + 0x9f, 0xd5, 0x9d, 0xa3, 0x84, 0x37, 0xe8, 0x8f, 0xac, 0xbd, 0xc1, 0xa0, 0x98, 0xc3, 0x54, 0x41, + 0xae, 0x52, 0xaf, 0x82, 0x5c, 0xf6, 0xc7, 0x2d, 0x18, 0x51, 0xa9, 0x62, 0xf3, 0xdb, 0x5b, 0x94, + 0x6e, 0x33, 0x0a, 0xda, 0x61, 0x96, 0x2e, 0xbb, 0x6d, 0x0a, 0x73, 0x98, 0x99, 0x43, 0x59, 0xda, + 0x27, 0x87, 0xf2, 0x3c, 0x0c, 0x6c, 0xb9, 0x7e, 0x23, 0xeb, 0x9f, 0xb9, 0xea, 0xfa, 0x0d, 0xcc, + 0x20, 0xb4, 0x0b, 0x27, 0x55, 0x17, 0xa4, 0x76, 0x79, 0x01, 0x46, 0xd6, 0xdb, 0xae, 0xd7, 0x90, + 0x05, 0xf5, 0x32, 0xee, 0x99, 0x19, 0x03, 0x86, 0x53, 0x98, 0x74, 0x93, 0xb8, 0xee, 0xfa, 0x4e, + 0xd4, 0x59, 0xd1, 0xea, 0x4c, 0x49, 0xb8, 0x19, 0x05, 0xc1, 0x06, 0x96, 0xfd, 0x46, 0x19, 0xc6, + 0xd2, 0x09, 0x73, 0x7d, 0xec, 0xd5, 0x9e, 0x80, 0x0a, 0xcb, 0xa1, 0xcb, 0x7e, 0x5a, 0x5e, 0x83, + 0x8e, 0xc3, 0x50, 0x0c, 0x83, 0x7c, 0x39, 0x17, 0x73, 0xf5, 0x90, 0xea, 0xa4, 0x72, 0xea, 0xb0, + 0xf8, 0x3a, 0x21, 0x41, 0x04, 0x2b, 0xf4, 0x69, 0x0b, 0x86, 0x82, 0xd0, 0x2c, 0xe4, 0xf4, 0x81, + 0x22, 0x93, 0x09, 0x45, 0x2e, 0x93, 0x30, 0xaf, 0xd5, 0xa7, 0x97, 0x9f, 0x43, 0xb2, 0x3e, 0xf7, + 0x1e, 0x18, 0x31, 0x31, 0xf7, 0xb3, 0xb0, 0xab, 0xa6, 0x85, 0xfd, 0x59, 0x73, 0x52, 0x88, 0x74, + 0xc9, 0x3e, 0x96, 0xdb, 0x75, 0xa8, 0xd4, 0x55, 0x40, 0xc4, 0xa1, 0xca, 0xb0, 0xaa, 0x72, 0x18, + 0xec, 0x50, 0x8c, 0x53, 0xb3, 0xbf, 0x6d, 0x19, 0xf3, 0x03, 0x93, 0x78, 0xa1, 0x81, 0x22, 0x28, + 0x37, 0xb7, 0xb7, 0x84, 0x5d, 0x7b, 0xa5, 0xa0, 0xe1, 0x9d, 0xdf, 0xde, 0xd2, 0x73, 0xdc, 0x6c, + 0xc5, 0x94, 0x59, 0x1f, 0x9e, 0xc7, 0x54, 0x56, 0x6d, 0x79, 0xff, 0xac, 0x5a, 0xfb, 0xcd, 0x12, + 0x9c, 0xea, 0x9a, 0x54, 0xe8, 0x75, 0xa8, 0x44, 0xf4, 0x2d, 0xc5, 0xeb, 0x2d, 0x16, 0x96, 0x07, + 0x1b, 0x2f, 0x34, 0xb4, 0xde, 0x4b, 0xb7, 0x63, 0xce, 0x12, 0x5d, 0x01, 0xa4, 0xc3, 0x76, 0x94, + 0xdb, 0x93, 0xbf, 0xf2, 0x39, 0xf1, 0x28, 0x9a, 0xee, 0xc2, 0xc0, 0x39, 0x4f, 0xa1, 0x17, 0xb3, + 0xde, 0xd3, 0x72, 0xfa, 0x1c, 0x77, 0x2f, 0x47, 0xa8, 0xfd, 0xcf, 0x4b, 0x30, 0x9a, 0xaa, 0xab, + 0x85, 0x3c, 0xa8, 0x12, 0x8f, 0x1d, 0x72, 0x48, 0x65, 0x73, 0xd4, 0x32, 0xd5, 0x4a, 0x41, 0x5e, + 0x14, 0x74, 0xb1, 0xe2, 0xf0, 0x60, 0x04, 0x1b, 0xbc, 0x00, 0x23, 0xb2, 0x43, 0x1f, 0x70, 0x5a, + 0x9e, 0x18, 0x40, 0x35, 0x47, 0x2f, 0x1a, 0x30, 0x9c, 0xc2, 0xb4, 0x7f, 0xb7, 0x0c, 0xe3, 0xfc, + 0x54, 0xa8, 0xa1, 0x66, 0xde, 0x92, 0xdc, 0xbc, 0xfd, 0x55, 0x5d, 0xfd, 0x8e, 0x0f, 0xe4, 0xfa, + 0x51, 0x6f, 0x85, 0xc8, 0x67, 0xd4, 0x57, 0xa4, 0xda, 0x57, 0x33, 0x91, 0x6a, 0xdc, 0x86, 0x6f, + 0x1e, 0x53, 0x8f, 0xbe, 0xb7, 0x42, 0xd7, 0xfe, 0x6e, 0x09, 0x4e, 0x64, 0xae, 0xdc, 0x40, 0x6f, + 0xa4, 0xab, 0x34, 0x5b, 0x45, 0x38, 0xe8, 0xf7, 0xbc, 0x85, 0xe1, 0x60, 0xb5, 0x9a, 0xef, 0xd3, + 0x52, 0xb1, 0xff, 0xb0, 0x04, 0x63, 0xe9, 0xbb, 0x42, 0x1e, 0xc0, 0x91, 0x7a, 0x27, 0xd4, 0x58, + 0x39, 0x7c, 0x76, 0x07, 0x2a, 0xf7, 0xef, 0xf3, 0xca, 0xe3, 0xb2, 0x11, 0x6b, 0xf8, 0x03, 0x51, + 0x02, 0xdb, 0xfe, 0x7b, 0x16, 0x9c, 0xe5, 0x6f, 0x99, 0x9d, 0x87, 0x7f, 0x2d, 0x6f, 0x74, 0x5f, + 0x29, 0xb6, 0x83, 0x99, 0xaa, 0x8d, 0xfb, 0x8d, 0x2f, 0xbb, 0x7b, 0x51, 0xf4, 0x36, 0x3d, 0x15, + 0x1e, 0xc0, 0xce, 0x1e, 0x68, 0x32, 0xd8, 0x7f, 0x58, 0x06, 0x7d, 0xdd, 0x24, 0x72, 0x45, 0xce, + 0x67, 0x21, 0xd5, 0x2b, 0x57, 0x3b, 0x7e, 0x5d, 0x5f, 0x6c, 0x59, 0xcd, 0xa4, 0x7c, 0xfe, 0x9c, + 0x05, 0xc3, 0xae, 0xef, 0x26, 0xae, 0xc3, 0xf6, 0xe4, 0xc5, 0x5c, 0x85, 0xa7, 0xd8, 0x2d, 0x70, + 0xca, 0x41, 0x64, 0x1e, 0x0a, 0x29, 0x66, 0xd8, 0xe4, 0x8c, 0x3e, 0x2c, 0x82, 0xc9, 0xcb, 0x85, + 0x25, 0x4f, 0x57, 0x33, 0x11, 0xe4, 0x21, 0x35, 0xbc, 0x92, 0xa8, 0xa0, 0x9a, 0x03, 0x98, 0x92, + 0x52, 0x85, 0x90, 0xf5, 0xc5, 0xdf, 0xb4, 0x19, 0x73, 0x46, 0x76, 0x0c, 0xa8, 0x7b, 0x2c, 0x0e, + 0x18, 0xa8, 0x3b, 0x05, 0x35, 0xa7, 0x9d, 0x04, 0x2d, 0x3a, 0x4c, 0xe2, 0xdc, 0x4a, 0x87, 0x22, + 0x4b, 0x00, 0xd6, 0x38, 0xf6, 0x1b, 0x15, 0xc8, 0x24, 0x61, 0xa2, 0x1d, 0xf3, 0xaa, 0x54, 0xab, + 0xd8, 0xab, 0x52, 0x55, 0x67, 0xf2, 0xae, 0x4b, 0x45, 0x4d, 0xa8, 0x84, 0x9b, 0x4e, 0x2c, 0xcd, + 0xea, 0x97, 0xd4, 0x3e, 0x8e, 0x36, 0xde, 0xdd, 0x9d, 0xf8, 0x89, 0xfe, 0x5c, 0xb8, 0x74, 0xae, + 0x4e, 0xf1, 0xea, 0x32, 0x9a, 0x35, 0xa3, 0x81, 0x39, 0xfd, 0x83, 0x5c, 0x06, 0xf8, 0x09, 0x51, + 0xf7, 0x1f, 0x93, 0xb8, 0xed, 0x25, 0x62, 0x36, 0xbc, 0x54, 0xe0, 0x2a, 0xe3, 0x84, 0x75, 0x35, + 0x03, 0xfe, 0x1f, 0x1b, 0x4c, 0xd1, 0x07, 0xa1, 0x16, 0x27, 0x4e, 0x94, 0x1c, 0x32, 0xe1, 0x57, + 0x0d, 0xfa, 0xaa, 0x24, 0x82, 0x35, 0x3d, 0xf4, 0x32, 0x2b, 0xe6, 0xeb, 0xc6, 0x9b, 0x87, 0xcc, + 0x01, 0x91, 0x85, 0x7f, 0x05, 0x05, 0x6c, 0x50, 0x43, 0x17, 0x00, 0xd8, 0xdc, 0xe6, 0x81, 0x8f, + 0x55, 0xe6, 0x65, 0x52, 0xa2, 0x10, 0x2b, 0x08, 0x36, 0xb0, 0xec, 0x1f, 0x81, 0x74, 0x39, 0x0e, + 0x34, 0x21, 0xab, 0x7f, 0x70, 0x97, 0x36, 0xcb, 0xe5, 0x48, 0x15, 0xea, 0xf8, 0x0d, 0x0b, 0xcc, + 0x9a, 0x21, 0xe8, 0x35, 0x5e, 0x9c, 0xc4, 0x2a, 0xe2, 0x18, 0xd2, 0xa0, 0x3b, 0xb9, 0xe4, 0x84, + 0x99, 0xf3, 0x70, 0x59, 0xa1, 0xe4, 0xdc, 0xbb, 0xa1, 0x2a, 0xa1, 0x07, 0x32, 0xea, 0x3e, 0x06, + 0xa7, 0xb3, 0x17, 0xc9, 0x8b, 0x23, 0xac, 0xfd, 0x5d, 0x3f, 0xd2, 0x9f, 0x53, 0xea, 0xe5, 0xcf, + 0xe9, 0xe3, 0xc2, 0xdc, 0xdf, 0xb4, 0xe0, 0xfc, 0x7e, 0xf7, 0xdd, 0xa3, 0x47, 0x61, 0xe0, 0xb6, + 0x13, 0xc9, 0x2a, 0xeb, 0x4c, 0x50, 0xde, 0x74, 0x22, 0x1f, 0xb3, 0x56, 0xd4, 0x81, 0x41, 0x1e, + 0x1d, 0x27, 0xac, 0xf5, 0x97, 0x8a, 0xbd, 0x7d, 0xff, 0x2a, 0x31, 0xb6, 0x0b, 0x3c, 0x32, 0x0f, + 0x0b, 0x86, 0xf6, 0x77, 0x2c, 0x40, 0xcb, 0xdb, 0x24, 0x8a, 0xdc, 0x86, 0x11, 0xcf, 0xc7, 0xee, + 0xcf, 0x31, 0xee, 0xc9, 0x31, 0x53, 0x7e, 0x33, 0xf7, 0xe7, 0x18, 0xff, 0xf2, 0xef, 0xcf, 0x29, + 0x1d, 0xec, 0xfe, 0x1c, 0xb4, 0x0c, 0x67, 0x5b, 0x7c, 0xbb, 0xc1, 0xef, 0xa4, 0xe0, 0x7b, 0x0f, + 0x95, 0x60, 0xf7, 0xc8, 0x9d, 0xdd, 0x89, 0xb3, 0x4b, 0x79, 0x08, 0x38, 0xff, 0x39, 0xfb, 0xdd, + 0x80, 0x78, 0x18, 0xdf, 0x6c, 0x5e, 0xe0, 0x53, 0x4f, 0xf7, 0x8b, 0xfd, 0x95, 0x0a, 0x9c, 0xc8, + 0xd4, 0xe0, 0xa5, 0x5b, 0xbd, 0xee, 0x48, 0xab, 0x23, 0xeb, 0xef, 0xee, 0xee, 0xf5, 0x15, 0xbb, + 0xe5, 0x43, 0xc5, 0xf5, 0xc3, 0x76, 0x52, 0x4c, 0x4e, 0x2d, 0xef, 0xc4, 0x02, 0x25, 0x68, 0xb8, + 0x8b, 0xe9, 0x5f, 0xcc, 0xd9, 0x14, 0x19, 0x09, 0x96, 0x32, 0xc6, 0x07, 0xee, 0x93, 0x3b, 0xe0, + 0x13, 0x3a, 0x2e, 0xab, 0x52, 0x84, 0x63, 0x31, 0x33, 0x59, 0x8e, 0xfb, 0xdc, 0xfe, 0xd7, 0x4b, + 0x30, 0x6c, 0x7c, 0x34, 0xf4, 0xcb, 0xe9, 0x8a, 0x5a, 0x56, 0x71, 0xaf, 0xc4, 0xe8, 0x4f, 0xea, + 0x9a, 0x59, 0xfc, 0x95, 0x9e, 0xec, 0x2e, 0xa6, 0x75, 0x77, 0x77, 0xe2, 0x64, 0xa6, 0x5c, 0x56, + 0xaa, 0xc0, 0xd6, 0xb9, 0x8f, 0xc2, 0x89, 0x0c, 0x99, 0x9c, 0x57, 0x5e, 0x33, 0x5f, 0xf9, 0xc8, + 0x6e, 0x29, 0x73, 0xc8, 0xbe, 0x41, 0x87, 0x4c, 0xa4, 0x15, 0x06, 0x1e, 0xe9, 0xc3, 0x07, 0x9b, + 0xc9, 0x1e, 0x2e, 0xf5, 0x99, 0x3d, 0xfc, 0x14, 0x54, 0xc3, 0xc0, 0x73, 0xeb, 0xae, 0x2a, 0x3b, + 0xc9, 0xf2, 0x95, 0x57, 0x44, 0x1b, 0x56, 0x50, 0x74, 0x1b, 0x6a, 0xb7, 0x6e, 0x27, 0xfc, 0xf4, + 0x47, 0xf8, 0xb7, 0x8b, 0x3a, 0xf4, 0x51, 0x46, 0x8b, 0x3a, 0x5e, 0xc2, 0x9a, 0x17, 0xb2, 0x61, + 0x90, 0x29, 0x41, 0x99, 0x0a, 0xc1, 0x7c, 0xef, 0x4c, 0x3b, 0xc6, 0x58, 0x40, 0xec, 0xaf, 0xd7, + 0xe0, 0x4c, 0x5e, 0x21, 0x74, 0xf4, 0x11, 0x18, 0xe4, 0x7d, 0x2c, 0xe6, 0xae, 0x8d, 0x3c, 0x1e, + 0xf3, 0x8c, 0xa0, 0xe8, 0x16, 0xfb, 0x8d, 0x05, 0x4f, 0xc1, 0xdd, 0x73, 0xd6, 0xc5, 0x0c, 0x39, + 0x1e, 0xee, 0x8b, 0x8e, 0xe6, 0xbe, 0xe8, 0x70, 0xee, 0x9e, 0xb3, 0x8e, 0x76, 0xa0, 0xd2, 0x74, + 0x13, 0xe2, 0x08, 0x27, 0xc2, 0xcd, 0x63, 0x61, 0x4e, 0x1c, 0x6e, 0xa5, 0xb1, 0x9f, 0x98, 0x33, + 0x44, 0x5f, 0xb3, 0xe0, 0xc4, 0x7a, 0xba, 0x54, 0x80, 0x10, 0x9e, 0xce, 0x31, 0x14, 0xbb, 0x4f, + 0x33, 0xe2, 0x17, 0x48, 0x65, 0x1a, 0x71, 0xb6, 0x3b, 0xe8, 0x53, 0x16, 0x0c, 0x6d, 0xb8, 0x9e, + 0x51, 0xf7, 0xf8, 0x18, 0x3e, 0xce, 0x25, 0xc6, 0x40, 0xef, 0x38, 0xf8, 0xff, 0x18, 0x4b, 0xce, + 0xbd, 0x34, 0xd5, 0xe0, 0x51, 0x35, 0xd5, 0xd0, 0x7d, 0xd2, 0x54, 0x9f, 0xb1, 0xa0, 0xa6, 0x46, + 0x5a, 0xa4, 0x7f, 0x7f, 0xf0, 0x18, 0x3f, 0x39, 0xf7, 0x9c, 0xa8, 0xbf, 0x58, 0x33, 0x47, 0x5f, + 0xb4, 0x60, 0xd8, 0x79, 0xbd, 0x1d, 0x91, 0x06, 0xd9, 0x0e, 0xc2, 0x58, 0x14, 0x10, 0x7b, 0xa5, + 0xf8, 0xce, 0x4c, 0x53, 0x26, 0x73, 0x64, 0x7b, 0x39, 0x8c, 0x45, 0x9a, 0x96, 0x6e, 0xc0, 0x66, + 0x17, 0xec, 0xdd, 0x12, 0x4c, 0xec, 0x43, 0x01, 0xbd, 0x00, 0x23, 0x41, 0xd4, 0x74, 0x7c, 0xf7, + 0x75, 0xb3, 0xf6, 0x87, 0xb2, 0xb2, 0x96, 0x0d, 0x18, 0x4e, 0x61, 0x9a, 0x09, 0xea, 0xa5, 0x7d, + 0x12, 0xd4, 0xcf, 0xc3, 0x40, 0x44, 0xc2, 0x20, 0xbb, 0x59, 0x60, 0x29, 0x12, 0x0c, 0x82, 0x1e, + 0x83, 0xb2, 0x13, 0xba, 0x22, 0xaa, 0x4d, 0xed, 0x81, 0xa6, 0x57, 0x16, 0x30, 0x6d, 0x4f, 0xd5, + 0xcb, 0xa8, 0xdc, 0x93, 0x7a, 0x19, 0x54, 0x0d, 0x88, 0xb3, 0x8b, 0x41, 0xad, 0x06, 0xd2, 0x67, + 0x0a, 0xf6, 0x9b, 0x65, 0x78, 0x6c, 0xcf, 0xf9, 0xa2, 0x83, 0xfa, 0xac, 0x3d, 0x82, 0xfa, 0xe4, + 0xf0, 0x94, 0xf6, 0x1b, 0x9e, 0x72, 0x8f, 0xe1, 0xf9, 0x14, 0x5d, 0x06, 0xb2, 0x66, 0x4a, 0x31, + 0xf7, 0x07, 0xf6, 0x2a, 0xc1, 0x22, 0x56, 0x80, 0x84, 0x62, 0xcd, 0x97, 0xee, 0x01, 0x52, 0xc9, + 0xd9, 0x95, 0x22, 0xd4, 0x40, 0xcf, 0x1a, 0x2a, 0x7c, 0xee, 0xf7, 0xca, 0xf8, 0xb6, 0x7f, 0xbe, + 0x04, 0x4f, 0xf4, 0x21, 0xbd, 0xcd, 0x59, 0x6c, 0xf5, 0x39, 0x8b, 0xbf, 0xb7, 0x3f, 0x93, 0xfd, + 0xd7, 0x2d, 0x38, 0xd7, 0x5b, 0x79, 0xa0, 0x67, 0x61, 0x78, 0x3d, 0x72, 0xfc, 0xfa, 0x26, 0xbb, + 0x13, 0x55, 0x0e, 0x0a, 0x1b, 0x6b, 0xdd, 0x8c, 0x4d, 0x1c, 0xba, 0xbd, 0xe5, 0x31, 0x09, 0x06, + 0x86, 0x4c, 0xa6, 0xa5, 0xdb, 0xdb, 0xb5, 0x2c, 0x10, 0x77, 0xe3, 0xdb, 0x7f, 0x5e, 0xca, 0xef, + 0x16, 0x37, 0x32, 0x0e, 0xf2, 0x9d, 0xc4, 0x57, 0x28, 0xf5, 0x21, 0x4b, 0xca, 0xf7, 0x5a, 0x96, + 0x0c, 0xf4, 0x92, 0x25, 0x68, 0x0e, 0x4e, 0x1a, 0x77, 0xe6, 0xf0, 0x04, 0x69, 0x1e, 0xbd, 0xab, + 0xaa, 0x86, 0xac, 0x64, 0xe0, 0xb8, 0xeb, 0x09, 0xf4, 0x34, 0x54, 0x5d, 0x3f, 0x26, 0xf5, 0x76, + 0xc4, 0xa3, 0xc6, 0x8d, 0xa4, 0xb4, 0x05, 0xd1, 0x8e, 0x15, 0x86, 0xfd, 0x2b, 0x25, 0x78, 0xa4, + 0xa7, 0x9d, 0x75, 0x8f, 0x64, 0x97, 0xf9, 0x39, 0x06, 0xee, 0xcd, 0xe7, 0x30, 0x07, 0xa9, 0xb2, + 0xef, 0x20, 0xfd, 0x51, 0xef, 0x89, 0x49, 0x6d, 0xee, 0xef, 0xdb, 0x51, 0x7a, 0x11, 0x46, 0x9d, + 0x30, 0xe4, 0x78, 0x2c, 0xf8, 0x33, 0x53, 0x35, 0x68, 0xda, 0x04, 0xe2, 0x34, 0x6e, 0x5f, 0xda, + 0xf3, 0x4f, 0x2c, 0xa8, 0x61, 0xb2, 0xc1, 0xa5, 0x03, 0xba, 0x25, 0x86, 0xc8, 0x2a, 0xa2, 0xbe, + 0x28, 0x1d, 0xd8, 0xd8, 0x65, 0x75, 0x37, 0xf3, 0x06, 0xfb, 0xa8, 0xe9, 0x88, 0xea, 0x76, 0x9d, + 0x72, 0xef, 0xdb, 0x75, 0xec, 0x6f, 0x0c, 0xd1, 0xd7, 0x0b, 0x83, 0xd9, 0x88, 0x34, 0x62, 0xfa, + 0x7d, 0xdb, 0x91, 0x27, 0x26, 0x89, 0xfa, 0xbe, 0xd7, 0xf1, 0x22, 0xa6, 0xed, 0xa9, 0xa3, 0x98, + 0xd2, 0x81, 0x6a, 0xa6, 0x94, 0xf7, 0xad, 0x99, 0xf2, 0x22, 0x8c, 0xc6, 0xf1, 0xe6, 0x4a, 0xe4, + 0x6e, 0x3b, 0x09, 0xb9, 0x4a, 0x3a, 0xc2, 0xca, 0xd2, 0x75, 0x0e, 0x56, 0x2f, 0x6b, 0x20, 0x4e, + 0xe3, 0xa2, 0x79, 0x38, 0xa5, 0x2b, 0x97, 0x90, 0x28, 0x61, 0xa9, 0x02, 0x7c, 0x26, 0xa8, 0xa4, + 0x66, 0x5d, 0xeb, 0x44, 0x20, 0xe0, 0xee, 0x67, 0xa8, 0x7c, 0x4b, 0x35, 0xd2, 0x8e, 0x0c, 0xa6, + 0xe5, 0x5b, 0x8a, 0x0e, 0xed, 0x4b, 0xd7, 0x13, 0x68, 0x09, 0x4e, 0xf3, 0x89, 0x31, 0x1d, 0x86, + 0xc6, 0x1b, 0x0d, 0xa5, 0xeb, 0x3a, 0xce, 0x77, 0xa3, 0xe0, 0xbc, 0xe7, 0xd0, 0xf3, 0x30, 0xac, + 0x9a, 0x17, 0xe6, 0xc4, 0x29, 0x82, 0xf2, 0x62, 0x28, 0x32, 0x0b, 0x0d, 0x6c, 0xe2, 0xa1, 0x0f, + 0xc0, 0xc3, 0xfa, 0x2f, 0xcf, 0x27, 0xe3, 0x47, 0x6b, 0x73, 0xa2, 0x28, 0x94, 0xba, 0xcb, 0x65, + 0x3e, 0x17, 0xad, 0x81, 0x7b, 0x3d, 0x8f, 0xd6, 0xe1, 0x9c, 0x02, 0x5d, 0xf4, 0x13, 0x96, 0x1c, + 0x12, 0x93, 0x19, 0x27, 0x26, 0xd7, 0x23, 0x4f, 0x5c, 0x86, 0xab, 0xae, 0xd9, 0x9c, 0x77, 0x93, + 0xcb, 0x79, 0x98, 0x78, 0x11, 0xef, 0x41, 0x05, 0x4d, 0x41, 0x8d, 0xf8, 0xce, 0xba, 0x47, 0x96, + 0x67, 0x17, 0x58, 0x71, 0x29, 0xe3, 0x24, 0xef, 0xa2, 0x04, 0x60, 0x8d, 0xa3, 0x22, 0x4c, 0x47, + 0x7a, 0x5e, 0xf9, 0xba, 0x02, 0x67, 0x9a, 0xf5, 0x90, 0xda, 0x1e, 0x6e, 0x9d, 0x4c, 0xd7, 0x59, + 0x40, 0x1d, 0xfd, 0x30, 0xbc, 0xe0, 0xa6, 0x8a, 0xc5, 0x9e, 0x9f, 0x5d, 0xe9, 0xc2, 0xc1, 0xb9, + 0x4f, 0xb2, 0xc0, 0xcb, 0x28, 0xd8, 0xe9, 0x8c, 0x9f, 0xce, 0x04, 0x5e, 0xd2, 0x46, 0xcc, 0x61, + 0xe8, 0x0a, 0x20, 0x16, 0xd8, 0x7f, 0x39, 0x49, 0x42, 0x65, 0xec, 0x8c, 0x9f, 0x61, 0xaf, 0xa4, + 0xc2, 0xc8, 0x2e, 0x75, 0x61, 0xe0, 0x9c, 0xa7, 0xec, 0xff, 0x60, 0xc1, 0xa8, 0x5a, 0xaf, 0xf7, + 0x20, 0xb5, 0xc5, 0x4b, 0xa7, 0xb6, 0xcc, 0x1f, 0x5d, 0xe2, 0xb1, 0x9e, 0xf7, 0x08, 0x69, 0xfe, + 0x99, 0x61, 0x00, 0x2d, 0x15, 0x95, 0x42, 0xb2, 0x7a, 0x2a, 0xa4, 0x07, 0x56, 0x22, 0xe5, 0x55, + 0x92, 0xa9, 0xdc, 0xdf, 0x4a, 0x32, 0xab, 0x70, 0x56, 0x9a, 0x0b, 0xfc, 0xac, 0xe8, 0x72, 0x10, + 0x2b, 0x01, 0x57, 0x9d, 0x79, 0x4c, 0x10, 0x3a, 0xbb, 0x90, 0x87, 0x84, 0xf3, 0x9f, 0x4d, 0x59, + 0x29, 0x43, 0xfb, 0x59, 0x29, 0x7a, 0x4d, 0x2f, 0x6e, 0xc8, 0x4b, 0x5b, 0x32, 0x6b, 0x7a, 0xf1, + 0xd2, 0x2a, 0xd6, 0x38, 0xf9, 0x82, 0xbd, 0x56, 0x90, 0x60, 0x87, 0x03, 0x0b, 0x76, 0x29, 0x62, + 0x86, 0x7b, 0x8a, 0x18, 0xe9, 0x93, 0x1e, 0xe9, 0xe9, 0x93, 0x7e, 0x2f, 0x8c, 0xb9, 0xfe, 0x26, + 0x89, 0xdc, 0x84, 0x34, 0xd8, 0x5a, 0x60, 0xe2, 0xa7, 0xaa, 0xd5, 0xfa, 0x42, 0x0a, 0x8a, 0x33, + 0xd8, 0x69, 0xb9, 0x38, 0xd6, 0x87, 0x5c, 0xec, 0xa1, 0x8d, 0x4e, 0x14, 0xa3, 0x8d, 0x4e, 0x1e, + 0x5d, 0x1b, 0x9d, 0x3a, 0x56, 0x6d, 0x84, 0x0a, 0xd1, 0x46, 0x7d, 0x09, 0x7a, 0x63, 0xfb, 0x77, + 0x66, 0x9f, 0xed, 0x5f, 0x2f, 0x55, 0x74, 0xf6, 0xd0, 0xaa, 0x28, 0x5f, 0xcb, 0x3c, 0x74, 0x28, + 0x2d, 0xf3, 0x99, 0x12, 0x9c, 0xd5, 0x72, 0x98, 0xce, 0x7e, 0x77, 0x83, 0x4a, 0x22, 0x76, 0xef, + 0x17, 0x3f, 0xb7, 0x31, 0x32, 0xad, 0x74, 0xd2, 0x96, 0x82, 0x60, 0x03, 0x8b, 0x25, 0x2c, 0x91, + 0x88, 0x95, 0x15, 0xce, 0x0a, 0xe9, 0x59, 0xd1, 0x8e, 0x15, 0x06, 0x9d, 0x5f, 0xf4, 0xb7, 0x48, + 0x02, 0xcd, 0x16, 0xcf, 0x9b, 0xd5, 0x20, 0x6c, 0xe2, 0xa1, 0xa7, 0x38, 0x13, 0x26, 0x20, 0xa8, + 0xa0, 0x1e, 0x11, 0x17, 0x01, 0x4b, 0x99, 0xa0, 0xa0, 0xb2, 0x3b, 0x2c, 0x33, 0xad, 0xd2, 0xdd, + 0x1d, 0x16, 0x02, 0xa5, 0x30, 0xec, 0xff, 0x69, 0xc1, 0x23, 0xb9, 0x43, 0x71, 0x0f, 0x94, 0xef, + 0x4e, 0x5a, 0xf9, 0xae, 0x16, 0xb5, 0xdd, 0x30, 0xde, 0xa2, 0x87, 0x22, 0xfe, 0x77, 0x16, 0x8c, + 0x69, 0xfc, 0x7b, 0xf0, 0xaa, 0x6e, 0xfa, 0x55, 0x8b, 0xdb, 0x59, 0xd5, 0xba, 0xde, 0xed, 0x77, + 0x4b, 0xa0, 0x0a, 0x5a, 0x4e, 0xd7, 0x65, 0xb9, 0xe0, 0x7d, 0x4e, 0x12, 0x3b, 0x30, 0xc8, 0x0e, + 0x42, 0xe3, 0x62, 0x82, 0x3c, 0xd2, 0xfc, 0xd9, 0xa1, 0xaa, 0x3e, 0x64, 0x66, 0x7f, 0x63, 0x2c, + 0x18, 0xb2, 0xa2, 0xd7, 0x6e, 0x4c, 0xa5, 0x79, 0x43, 0xa4, 0x65, 0xe9, 0xa2, 0xd7, 0xa2, 0x1d, + 0x2b, 0x0c, 0xaa, 0x1e, 0xdc, 0x7a, 0xe0, 0xcf, 0x7a, 0x4e, 0x2c, 0x2f, 0xbb, 0x54, 0xea, 0x61, + 0x41, 0x02, 0xb0, 0xc6, 0x61, 0x67, 0xa4, 0x6e, 0x1c, 0x7a, 0x4e, 0xc7, 0xd8, 0x3f, 0x1b, 0xc5, + 0x0e, 0x14, 0x08, 0x9b, 0x78, 0x76, 0x0b, 0xc6, 0xd3, 0x2f, 0x31, 0x47, 0x36, 0x58, 0x80, 0x62, + 0x5f, 0xc3, 0x39, 0x05, 0x35, 0x87, 0x3d, 0xb5, 0xd8, 0x76, 0xb2, 0x77, 0xd4, 0x4f, 0x4b, 0x00, + 0xd6, 0x38, 0xf6, 0xaf, 0x59, 0x70, 0x3a, 0x67, 0xd0, 0x0a, 0x4c, 0x7b, 0x4b, 0xb4, 0xb4, 0xc9, + 0x53, 0xec, 0x3f, 0x0c, 0x43, 0x0d, 0xb2, 0xe1, 0xc8, 0x10, 0x38, 0x43, 0xb6, 0xcf, 0xf1, 0x66, + 0x2c, 0xe1, 0xf6, 0x7f, 0xb7, 0xe0, 0x44, 0xba, 0xaf, 0x31, 0x4b, 0x25, 0xe1, 0xc3, 0xe4, 0xc6, + 0xf5, 0x60, 0x9b, 0x44, 0x1d, 0xfa, 0xe6, 0x56, 0x26, 0x95, 0xa4, 0x0b, 0x03, 0xe7, 0x3c, 0xc5, + 0xca, 0xd9, 0x36, 0xd4, 0x68, 0xcb, 0x19, 0x79, 0xa3, 0xc8, 0x19, 0xa9, 0x3f, 0xa6, 0x79, 0x5c, + 0xae, 0x58, 0x62, 0x93, 0xbf, 0xfd, 0x9d, 0x01, 0x50, 0x49, 0xb6, 0x2c, 0xfe, 0xa8, 0xa0, 0xe8, + 0xad, 0x83, 0x66, 0x10, 0xa9, 0xc9, 0x30, 0xb0, 0x57, 0x40, 0x00, 0xf7, 0x92, 0x98, 0xae, 0x4b, + 0xf5, 0x86, 0x6b, 0x1a, 0x84, 0x4d, 0x3c, 0xda, 0x13, 0xcf, 0xdd, 0x26, 0xfc, 0xa1, 0xc1, 0x74, + 0x4f, 0x16, 0x25, 0x00, 0x6b, 0x1c, 0xda, 0x93, 0x86, 0xbb, 0xb1, 0x21, 0xb6, 0xfc, 0xaa, 0x27, + 0x74, 0x74, 0x30, 0x83, 0xf0, 0x0a, 0xe5, 0xc1, 0x96, 0xb0, 0x82, 0x8d, 0x0a, 0xe5, 0xc1, 0x16, + 0x66, 0x10, 0x6a, 0xb7, 0xf9, 0x41, 0xd4, 0x72, 0x3c, 0xf7, 0x75, 0xd2, 0x50, 0x5c, 0x84, 0xf5, + 0xab, 0xec, 0xb6, 0x6b, 0xdd, 0x28, 0x38, 0xef, 0x39, 0x3a, 0x03, 0xc3, 0x88, 0x34, 0xdc, 0x7a, + 0x62, 0x52, 0x83, 0xf4, 0x0c, 0x5c, 0xe9, 0xc2, 0xc0, 0x39, 0x4f, 0xa1, 0x69, 0x38, 0x21, 0x93, + 0xa4, 0x65, 0x09, 0x9c, 0xe1, 0x74, 0xc9, 0x0d, 0x9c, 0x06, 0xe3, 0x2c, 0x3e, 0x95, 0x6a, 0x2d, + 0x51, 0xc0, 0x8b, 0x19, 0xcb, 0x86, 0x54, 0x93, 0x85, 0xbd, 0xb0, 0xc2, 0xb0, 0x3f, 0x51, 0xa6, + 0x5a, 0xb8, 0x47, 0xe1, 0xba, 0x7b, 0x16, 0x2d, 0x98, 0x9e, 0x91, 0x03, 0x7d, 0xcc, 0xc8, 0xe7, + 0x60, 0xe4, 0x56, 0x1c, 0xf8, 0x2a, 0x12, 0xaf, 0xd2, 0x33, 0x12, 0xcf, 0xc0, 0xca, 0x8f, 0xc4, + 0x1b, 0x2c, 0x2a, 0x12, 0x6f, 0xe8, 0x90, 0x91, 0x78, 0xdf, 0xaa, 0x80, 0xba, 0x2a, 0xe5, 0x1a, + 0x49, 0x6e, 0x07, 0xd1, 0x96, 0xeb, 0x37, 0x59, 0x3e, 0xf8, 0xd7, 0x2c, 0x18, 0xe1, 0xeb, 0x65, + 0xd1, 0xcc, 0xa4, 0xda, 0x28, 0xe8, 0x0e, 0x8e, 0x14, 0xb3, 0xc9, 0x35, 0x83, 0x51, 0xe6, 0xae, + 0x55, 0x13, 0x84, 0x53, 0x3d, 0x42, 0x1f, 0x05, 0x90, 0xfe, 0xd1, 0x0d, 0x29, 0x32, 0x17, 0x8a, + 0xe9, 0x1f, 0x26, 0x1b, 0xda, 0x06, 0x5e, 0x53, 0x4c, 0xb0, 0xc1, 0x10, 0x7d, 0x46, 0x67, 0x99, + 0xf1, 0x90, 0xfd, 0x0f, 0x1f, 0xcb, 0xd8, 0xf4, 0x93, 0x63, 0x86, 0x61, 0xc8, 0xf5, 0x9b, 0x74, + 0x9e, 0x88, 0x88, 0xa5, 0x77, 0xe4, 0x15, 0x66, 0x58, 0x0c, 0x9c, 0xc6, 0x8c, 0xe3, 0x39, 0x7e, + 0x9d, 0x44, 0x0b, 0x1c, 0xdd, 0xbc, 0x61, 0x9c, 0x35, 0x60, 0x49, 0xa8, 0xeb, 0x92, 0x99, 0x4a, + 0x3f, 0x97, 0xcc, 0x9c, 0x7b, 0x1f, 0x9c, 0xea, 0xfa, 0x98, 0x07, 0x4a, 0x29, 0x3b, 0x7c, 0x36, + 0x9a, 0xfd, 0x2f, 0x06, 0xb5, 0xd2, 0xba, 0x16, 0x34, 0xf8, 0x55, 0x27, 0x91, 0xfe, 0xa2, 0xc2, + 0xc6, 0x2d, 0x70, 0x8a, 0x18, 0xb7, 0x94, 0xab, 0x46, 0x6c, 0xb2, 0xa4, 0x73, 0x34, 0x74, 0x22, + 0xe2, 0x1f, 0xf7, 0x1c, 0x5d, 0x51, 0x4c, 0xb0, 0xc1, 0x10, 0x6d, 0xa6, 0x72, 0x4a, 0x2e, 0x1d, + 0x3d, 0xa7, 0x84, 0x95, 0xac, 0xca, 0xbb, 0x9d, 0xe0, 0x8b, 0x16, 0x8c, 0xf9, 0xa9, 0x99, 0x5b, + 0x4c, 0x18, 0x69, 0xfe, 0xaa, 0xe0, 0x37, 0x6d, 0xa5, 0xdb, 0x70, 0x86, 0x7f, 0x9e, 0x4a, 0xab, + 0x1c, 0x50, 0xa5, 0xe9, 0x3b, 0x93, 0x06, 0x7b, 0xdd, 0x99, 0x84, 0x7c, 0x75, 0x69, 0xdc, 0x50, + 0xe1, 0x97, 0xc6, 0x41, 0xce, 0x85, 0x71, 0x37, 0xa1, 0x56, 0x8f, 0x88, 0x93, 0x1c, 0xf2, 0xfe, + 0x30, 0x76, 0x40, 0x3f, 0x2b, 0x09, 0x60, 0x4d, 0xcb, 0xfe, 0x3f, 0x03, 0x70, 0x52, 0x8e, 0x88, + 0x0c, 0x41, 0xa7, 0xfa, 0x91, 0xf3, 0xd5, 0xc6, 0xad, 0xd2, 0x8f, 0x97, 0x25, 0x00, 0x6b, 0x1c, + 0x6a, 0x8f, 0xb5, 0x63, 0xb2, 0x1c, 0x12, 0x7f, 0xd1, 0x5d, 0x8f, 0xc5, 0x39, 0xa7, 0x5a, 0x28, + 0xd7, 0x35, 0x08, 0x9b, 0x78, 0xd4, 0x18, 0xe7, 0x76, 0x71, 0x9c, 0x4d, 0x5f, 0x11, 0xf6, 0x36, + 0x96, 0x70, 0xf4, 0x0b, 0xb9, 0x95, 0x74, 0x8b, 0x49, 0xdc, 0xea, 0x8a, 0xbc, 0x3f, 0xe0, 0x0d, + 0x98, 0x7f, 0xdb, 0x82, 0xb3, 0xbc, 0x55, 0x8e, 0xe4, 0xf5, 0xb0, 0xe1, 0x24, 0x24, 0x2e, 0xa6, + 0xb2, 0x7d, 0x4e, 0xff, 0xb4, 0x93, 0x37, 0x8f, 0x2d, 0xce, 0xef, 0x0d, 0x7a, 0xc3, 0x82, 0x13, + 0x5b, 0xa9, 0x9a, 0x1f, 0x52, 0x75, 0x1c, 0x35, 0x1d, 0x3f, 0x45, 0x54, 0x2f, 0xb5, 0x74, 0x7b, + 0x8c, 0xb3, 0xdc, 0xed, 0x3f, 0xb7, 0xc0, 0x14, 0xa3, 0xf7, 0xbe, 0x54, 0xc8, 0xc1, 0x4d, 0x41, + 0x69, 0x5d, 0x56, 0x7a, 0x5a, 0x97, 0x8f, 0x41, 0xb9, 0xed, 0x36, 0xc4, 0xfe, 0x42, 0x9f, 0xbe, + 0x2e, 0xcc, 0x61, 0xda, 0x6e, 0xff, 0xd3, 0x8a, 0xf6, 0x5b, 0x88, 0xbc, 0xa8, 0xef, 0x8b, 0xd7, + 0xde, 0x50, 0x95, 0xcb, 0xf8, 0x9b, 0x5f, 0xeb, 0xaa, 0x5c, 0xf6, 0x63, 0x07, 0x4f, 0x7b, 0xe3, + 0x03, 0xd4, 0xab, 0x70, 0xd9, 0xd0, 0x3e, 0x39, 0x6f, 0xb7, 0xa0, 0x4a, 0xb7, 0x60, 0xcc, 0x01, + 0x59, 0x4d, 0x75, 0xaa, 0x7a, 0x59, 0xb4, 0xdf, 0xdd, 0x9d, 0x78, 0xcf, 0xc1, 0xbb, 0x25, 0x9f, + 0xc6, 0x8a, 0x3e, 0x8a, 0xa1, 0x46, 0x7f, 0xb3, 0xf4, 0x3c, 0xb1, 0xb9, 0xbb, 0xae, 0x64, 0xa6, + 0x04, 0x14, 0x92, 0xfb, 0xa7, 0xf9, 0x20, 0x1f, 0x6a, 0xec, 0xb2, 0x60, 0xc6, 0x94, 0xef, 0x01, + 0x57, 0x54, 0x92, 0x9c, 0x04, 0xdc, 0xdd, 0x9d, 0x78, 0xf1, 0xe0, 0x4c, 0xd5, 0xe3, 0x58, 0xb3, + 0xb0, 0xbf, 0x34, 0xa0, 0xe7, 0xae, 0x28, 0x58, 0xf7, 0x7d, 0x31, 0x77, 0x5f, 0xc8, 0xcc, 0xdd, + 0xf3, 0x5d, 0x73, 0x77, 0x4c, 0xdf, 0x22, 0x9b, 0x9a, 0x8d, 0xf7, 0xda, 0x10, 0xd8, 0xdf, 0xdf, + 0xc0, 0x2c, 0xa0, 0xd7, 0xda, 0x6e, 0x44, 0xe2, 0x95, 0xa8, 0xed, 0xbb, 0x7e, 0x93, 0x4d, 0xc7, + 0xaa, 0x69, 0x01, 0xa5, 0xc0, 0x38, 0x8b, 0x4f, 0x37, 0xf5, 0xf4, 0x9b, 0xdf, 0x74, 0xb6, 0xf9, + 0xac, 0x32, 0xca, 0x6e, 0xad, 0x8a, 0x76, 0xac, 0x30, 0xec, 0x6f, 0xb0, 0xb3, 0x6c, 0x23, 0x2f, + 0x98, 0xce, 0x09, 0x8f, 0xdd, 0xce, 0xcc, 0x6b, 0x76, 0xa9, 0x39, 0xc1, 0xaf, 0x64, 0xe6, 0x30, + 0x74, 0x1b, 0x86, 0xd6, 0xf9, 0x7d, 0x80, 0xc5, 0xd4, 0x6b, 0x17, 0x97, 0x0b, 0xb2, 0x5b, 0x5f, + 0xe4, 0x4d, 0x83, 0x77, 0xf5, 0x4f, 0x2c, 0xb9, 0xd9, 0x7f, 0x50, 0x81, 0x13, 0x99, 0x0b, 0x73, + 0x53, 0xa5, 0x57, 0x4b, 0xfb, 0x96, 0x5e, 0xfd, 0x10, 0x40, 0x83, 0x84, 0x5e, 0xd0, 0x61, 0xe6, + 0xd8, 0xc0, 0x81, 0xcd, 0x31, 0x65, 0xc1, 0xcf, 0x29, 0x2a, 0xd8, 0xa0, 0x28, 0x0a, 0x95, 0xf1, + 0x4a, 0xae, 0x99, 0x42, 0x65, 0xc6, 0xad, 0x0e, 0x83, 0xf7, 0xf6, 0x56, 0x07, 0x17, 0x4e, 0xf0, + 0x2e, 0xaa, 0xec, 0xdb, 0x43, 0x24, 0xd9, 0xb2, 0xfc, 0x85, 0xb9, 0x34, 0x19, 0x9c, 0xa5, 0x7b, + 0x5f, 0xaf, 0xe7, 0x7e, 0x27, 0xd4, 0xe4, 0x77, 0x8e, 0xc7, 0x6b, 0xba, 0x82, 0x81, 0x9c, 0x06, + 0xec, 0x9e, 0x6a, 0xf1, 0xb3, 0xab, 0x90, 0x00, 0xdc, 0xaf, 0x42, 0x02, 0xf6, 0x17, 0x4a, 0xd4, + 0x8e, 0xe7, 0xfd, 0x52, 0x35, 0x71, 0x9e, 0x84, 0x41, 0xa7, 0x9d, 0x6c, 0x06, 0x5d, 0xb7, 0x1b, + 0x4e, 0xb3, 0x56, 0x2c, 0xa0, 0x68, 0x11, 0x06, 0x1a, 0xba, 0xce, 0xc9, 0x41, 0xbe, 0xa7, 0x76, + 0x89, 0x3a, 0x09, 0xc1, 0x8c, 0x0a, 0x7a, 0x14, 0x06, 0x12, 0xa7, 0x29, 0x53, 0xae, 0x58, 0x9a, + 0xed, 0x9a, 0xd3, 0x8c, 0x31, 0x6b, 0x35, 0xd5, 0xf7, 0xc0, 0x3e, 0xea, 0xfb, 0x45, 0x18, 0x8d, + 0xdd, 0xa6, 0xef, 0x24, 0xed, 0x88, 0x18, 0xc7, 0x7c, 0x3a, 0x72, 0xc3, 0x04, 0xe2, 0x34, 0xae, + 0xfd, 0x5b, 0x23, 0x70, 0x66, 0x75, 0x76, 0x49, 0x96, 0x02, 0x3f, 0xb6, 0xac, 0xa9, 0x3c, 0x1e, + 0xf7, 0x2e, 0x6b, 0xaa, 0x07, 0x77, 0xcf, 0xc8, 0x9a, 0xf2, 0x8c, 0xac, 0xa9, 0x74, 0x0a, 0x4b, + 0xb9, 0x88, 0x14, 0x96, 0xbc, 0x1e, 0xf4, 0x93, 0xc2, 0x72, 0x6c, 0x69, 0x54, 0x7b, 0x76, 0xe8, + 0x40, 0x69, 0x54, 0x2a, 0xc7, 0xac, 0x90, 0xe4, 0x82, 0x1e, 0x9f, 0x2a, 0x37, 0xc7, 0x4c, 0xe5, + 0xf7, 0xf0, 0xc4, 0x19, 0x21, 0xea, 0x5f, 0x29, 0xbe, 0x03, 0x7d, 0xe4, 0xf7, 0x88, 0xdc, 0x1d, + 0x33, 0xa7, 0x6c, 0xa8, 0x88, 0x9c, 0xb2, 0xbc, 0xee, 0xec, 0x9b, 0x53, 0xf6, 0x22, 0x8c, 0xd6, + 0xbd, 0xc0, 0x27, 0x2b, 0x51, 0x90, 0x04, 0xf5, 0xc0, 0x13, 0x66, 0xbd, 0x12, 0x09, 0xb3, 0x26, + 0x10, 0xa7, 0x71, 0x7b, 0x25, 0xa4, 0xd5, 0x8e, 0x9a, 0x90, 0x06, 0xf7, 0x29, 0x21, 0xed, 0x67, + 0x75, 0xea, 0xf4, 0x30, 0xfb, 0x22, 0x1f, 0x2a, 0xfe, 0x8b, 0xf4, 0x93, 0x3f, 0x8d, 0xde, 0xe4, + 0xd7, 0x0b, 0x52, 0xc3, 0x78, 0x36, 0x68, 0x51, 0xc3, 0x6f, 0x84, 0x0d, 0xc9, 0xab, 0xc7, 0x30, + 0x61, 0x6f, 0xae, 0x6a, 0x36, 0xea, 0xca, 0x41, 0xdd, 0x84, 0xd3, 0x1d, 0x39, 0x4a, 0x6a, 0xf7, + 0x57, 0x4a, 0xf0, 0x03, 0xfb, 0x76, 0x01, 0xdd, 0x06, 0x48, 0x9c, 0xa6, 0x98, 0xa8, 0xe2, 0xc0, + 0xe4, 0x88, 0xe1, 0x95, 0x6b, 0x92, 0x1e, 0xaf, 0x49, 0xa2, 0xfe, 0xb2, 0xa3, 0x08, 0xf9, 0x9b, + 0x45, 0x55, 0x06, 0x5e, 0x57, 0xe9, 0x46, 0x1c, 0x78, 0x04, 0x33, 0x08, 0x55, 0xff, 0x11, 0x69, + 0xea, 0xfb, 0xb0, 0xd5, 0xe7, 0xc3, 0xac, 0x15, 0x0b, 0x28, 0x7a, 0x1e, 0x86, 0x1d, 0xcf, 0xe3, + 0xf9, 0x31, 0x24, 0x16, 0xf7, 0x0b, 0xe9, 0x1a, 0x72, 0x1a, 0x84, 0x4d, 0x3c, 0xfb, 0xcf, 0x4a, + 0x30, 0xb1, 0x8f, 0x4c, 0xe9, 0xca, 0xf8, 0xab, 0xf4, 0x9d, 0xf1, 0x27, 0x72, 0x14, 0x06, 0x7b, + 0xe4, 0x28, 0x3c, 0x0f, 0xc3, 0x09, 0x71, 0x5a, 0x22, 0x20, 0x4b, 0x78, 0x02, 0xf4, 0x09, 0xb0, + 0x06, 0x61, 0x13, 0x8f, 0x4a, 0xb1, 0x31, 0xa7, 0x5e, 0x27, 0x71, 0x2c, 0x93, 0x10, 0x84, 0x37, + 0xb5, 0xb0, 0x0c, 0x07, 0xe6, 0xa4, 0x9e, 0x4e, 0xb1, 0xc0, 0x19, 0x96, 0xd9, 0x01, 0xaf, 0xf5, + 0x39, 0xe0, 0x5f, 0x2f, 0xc1, 0x63, 0x7b, 0x6a, 0xb7, 0xbe, 0xf3, 0x43, 0xda, 0x31, 0x89, 0xb2, + 0x13, 0xe7, 0x7a, 0x4c, 0x22, 0xcc, 0x20, 0x7c, 0x94, 0xc2, 0xd0, 0xb8, 0x6f, 0xbc, 0xe8, 0xe4, + 0x25, 0x3e, 0x4a, 0x29, 0x16, 0x38, 0xc3, 0xf2, 0xb0, 0xd3, 0xf2, 0xef, 0x97, 0xe0, 0x89, 0x3e, + 0x6c, 0x80, 0x02, 0x93, 0xbc, 0xd2, 0xa9, 0x76, 0xe5, 0xfb, 0x94, 0x11, 0x79, 0xc8, 0xe1, 0xfa, + 0x46, 0x09, 0xce, 0xf5, 0x56, 0xc5, 0xe8, 0xc7, 0xe1, 0x44, 0xa4, 0xa2, 0xb0, 0xcc, 0x2c, 0xbd, + 0xd3, 0xdc, 0x93, 0x90, 0x02, 0xe1, 0x2c, 0x2e, 0x9a, 0x04, 0x08, 0x9d, 0x64, 0x33, 0xbe, 0xb8, + 0xe3, 0xc6, 0x89, 0xa8, 0x42, 0x33, 0xc6, 0xcf, 0xae, 0x64, 0x2b, 0x36, 0x30, 0x28, 0x3b, 0xf6, + 0x6f, 0x2e, 0xb8, 0x16, 0x24, 0xfc, 0x21, 0xbe, 0x8d, 0x38, 0x2d, 0x2f, 0x00, 0x31, 0x40, 0x38, + 0x8b, 0x4b, 0xd9, 0xb1, 0xd3, 0x51, 0xde, 0x51, 0xbe, 0xbf, 0x60, 0xec, 0x16, 0x55, 0x2b, 0x36, + 0x30, 0xb2, 0xf9, 0x87, 0x95, 0xfd, 0xf3, 0x0f, 0xed, 0x7f, 0x52, 0x82, 0x47, 0x7a, 0x9a, 0x72, + 0xfd, 0x2d, 0xc0, 0x07, 0x2f, 0x67, 0xf0, 0x70, 0x73, 0xe7, 0x80, 0xb9, 0x6d, 0x7f, 0xd2, 0x63, + 0xa6, 0x89, 0xdc, 0xb6, 0xc3, 0x27, 0x87, 0x3f, 0x78, 0xe3, 0xd9, 0x95, 0xce, 0x36, 0x70, 0x80, + 0x74, 0xb6, 0xcc, 0xc7, 0xa8, 0xf4, 0xb9, 0x90, 0xff, 0xa2, 0xdc, 0x73, 0x78, 0xe9, 0xd6, 0xaf, + 0x2f, 0x3f, 0xed, 0x1c, 0x9c, 0x74, 0x7d, 0x76, 0x19, 0xd4, 0x6a, 0x7b, 0x5d, 0x14, 0x26, 0x29, + 0xa5, 0x6f, 0x93, 0x5f, 0xc8, 0xc0, 0x71, 0xd7, 0x13, 0x0f, 0x60, 0x7a, 0xe1, 0xe1, 0x86, 0xf4, + 0x60, 0x09, 0xae, 0x68, 0x19, 0xce, 0xca, 0xa1, 0xd8, 0x74, 0x22, 0xd2, 0x10, 0x6a, 0x24, 0x16, + 0x09, 0x15, 0x8f, 0xf0, 0xa4, 0x8c, 0x1c, 0x04, 0x9c, 0xff, 0x1c, 0xbb, 0x7f, 0x27, 0x08, 0xdd, + 0xba, 0xd8, 0xe4, 0xe8, 0xfb, 0x77, 0x68, 0x23, 0xe6, 0x30, 0xfb, 0x43, 0x50, 0x53, 0xef, 0xcf, + 0xc3, 0xba, 0xd5, 0xa4, 0xeb, 0x0a, 0xeb, 0x56, 0x33, 0xce, 0xc0, 0xa2, 0x5f, 0x8b, 0x9a, 0xc4, + 0x99, 0xd5, 0x73, 0x95, 0x74, 0x98, 0x7d, 0x6c, 0xbf, 0x0b, 0x46, 0x94, 0x9f, 0xa5, 0xdf, 0x5b, + 0x89, 0xec, 0x4f, 0x96, 0x61, 0x8c, 0x7b, 0xd6, 0xf8, 0xa5, 0x15, 0x01, 0xdd, 0x4c, 0xd7, 0x1a, + 0xf2, 0x36, 0xc7, 0x62, 0xaa, 0x31, 0xaa, 0xcb, 0x21, 0xb5, 0xfb, 0x5f, 0x35, 0x61, 0xcd, 0x0c, + 0x7d, 0x84, 0x17, 0x3e, 0x14, 0xac, 0x4b, 0x45, 0xa4, 0x7c, 0xae, 0x2a, 0x7a, 0xe6, 0x55, 0x27, + 0xb2, 0x0d, 0x1b, 0xfc, 0xe8, 0x7b, 0x6f, 0xca, 0x8b, 0x3b, 0x8a, 0x11, 0x3f, 0xea, 0x1e, 0x10, + 0xe3, 0x50, 0x5e, 0x36, 0x61, 0xcd, 0xcc, 0xfe, 0xd2, 0x20, 0x8c, 0xa6, 0x2a, 0x34, 0xa6, 0xbc, + 0xdc, 0xd6, 0xbe, 0x5e, 0x6e, 0x96, 0x2b, 0xd1, 0xf6, 0xe5, 0xbd, 0x71, 0x46, 0xae, 0x44, 0xdb, + 0x27, 0x98, 0xc3, 0xe8, 0x1e, 0xa3, 0x11, 0x75, 0x70, 0xdb, 0x17, 0x31, 0xcd, 0x6a, 0x8f, 0x31, + 0xc7, 0x5a, 0xb1, 0x80, 0xa2, 0x8f, 0x5b, 0x30, 0xc2, 0x46, 0x45, 0x9c, 0x11, 0x88, 0x95, 0x7f, + 0xa5, 0x80, 0xef, 0x20, 0xab, 0x91, 0xb2, 0x30, 0x25, 0xb3, 0x05, 0xa7, 0x38, 0xa2, 0x4f, 0x5b, + 0x50, 0x53, 0xd7, 0xdb, 0x88, 0x4b, 0x20, 0x57, 0x8b, 0x2d, 0x80, 0x99, 0x99, 0x8e, 0xaa, 0x12, + 0x21, 0xd6, 0x8c, 0x51, 0xac, 0x1c, 0xf8, 0x43, 0xc7, 0xe3, 0xc0, 0x87, 0x1c, 0xe7, 0xfd, 0x3b, + 0xa1, 0xd6, 0x72, 0x7c, 0x77, 0x83, 0xc4, 0x09, 0xf7, 0xa9, 0xcb, 0xba, 0xbc, 0xb2, 0x11, 0x6b, + 0x38, 0xb5, 0x8a, 0x62, 0xf6, 0x62, 0x89, 0xe1, 0x04, 0x67, 0x56, 0xd1, 0xaa, 0x6e, 0xc6, 0x26, + 0x8e, 0xe9, 0xb1, 0x87, 0xfb, 0xea, 0xb1, 0x1f, 0xde, 0xdb, 0x63, 0x6f, 0xff, 0x43, 0x0b, 0xce, + 0xe6, 0x7e, 0xb5, 0x07, 0x37, 0xfa, 0xd4, 0xfe, 0x72, 0x05, 0x4e, 0xe7, 0x94, 0x5a, 0x45, 0x1d, + 0x73, 0x3e, 0x5b, 0x45, 0x04, 0x72, 0xa4, 0xe3, 0x12, 0xe4, 0x30, 0xe6, 0x4c, 0xe2, 0x83, 0x9d, + 0x97, 0xe9, 0x33, 0xab, 0xf2, 0xbd, 0x3d, 0xb3, 0x32, 0xa6, 0xe5, 0xc0, 0x7d, 0x9d, 0x96, 0x95, + 0x7d, 0x0e, 0x92, 0x7e, 0xdd, 0x82, 0xf1, 0x56, 0x8f, 0xfa, 0xfe, 0xc2, 0xfb, 0x7b, 0xe3, 0x78, + 0x6e, 0x0f, 0x98, 0x79, 0xf4, 0xce, 0xee, 0x44, 0xcf, 0x6b, 0x15, 0x70, 0xcf, 0x5e, 0xd9, 0xdf, + 0x29, 0x03, 0xd3, 0x79, 0xac, 0x9c, 0x5e, 0x07, 0x7d, 0xcc, 0xac, 0xd8, 0x6c, 0x15, 0x55, 0x5d, + 0x98, 0x13, 0x57, 0x15, 0x9f, 0xf9, 0x08, 0xe6, 0x15, 0x80, 0xce, 0x0a, 0xad, 0x52, 0x1f, 0x42, + 0xcb, 0x93, 0xa5, 0xb1, 0xcb, 0xc5, 0x97, 0xc6, 0xae, 0x65, 0xcb, 0x62, 0xef, 0xfd, 0x89, 0x07, + 0x1e, 0xc8, 0x4f, 0xfc, 0x4b, 0x16, 0x17, 0x3c, 0x99, 0xaf, 0xa0, 0x2d, 0x03, 0x6b, 0x0f, 0xcb, + 0xe0, 0x69, 0xa8, 0xc6, 0xc4, 0xdb, 0xb8, 0x4c, 0x1c, 0x4f, 0x58, 0x10, 0x3a, 0x88, 0x40, 0xb4, + 0x63, 0x85, 0xc1, 0x2e, 0xe2, 0xf5, 0xbc, 0xe0, 0xf6, 0xc5, 0x56, 0x98, 0x74, 0x84, 0x2d, 0xa1, + 0x2f, 0xe2, 0x55, 0x10, 0x6c, 0x60, 0xd9, 0x3e, 0x18, 0x46, 0xd7, 0x51, 0x2f, 0x45, 0xeb, 0xe3, + 0xba, 0xc2, 0xbf, 0x55, 0x12, 0x0c, 0x79, 0xe8, 0xc7, 0x0b, 0x99, 0xab, 0x1a, 0xfb, 0x0f, 0x1a, + 0xf9, 0x08, 0x40, 0x3d, 0x68, 0x85, 0xd4, 0xd8, 0x5f, 0x0b, 0x8a, 0xb1, 0x48, 0x67, 0x15, 0x3d, + 0x3d, 0x6c, 0xba, 0x0d, 0x1b, 0xfc, 0x52, 0xb2, 0xbb, 0xbc, 0xaf, 0xec, 0x4e, 0x89, 0xb1, 0x81, + 0x7d, 0xb4, 0xeb, 0x9f, 0x59, 0x90, 0xb2, 0xc0, 0x50, 0x08, 0x15, 0xda, 0xdd, 0x8e, 0x90, 0x08, + 0xcb, 0xc5, 0x99, 0x7b, 0x54, 0x14, 0x8b, 0x65, 0xc6, 0x7e, 0x62, 0xce, 0x08, 0x79, 0x22, 0x40, + 0x86, 0x8f, 0xea, 0xb5, 0xe2, 0x18, 0x5e, 0x0e, 0x82, 0x2d, 0x7e, 0x9a, 0xad, 0x83, 0x6d, 0xec, + 0x17, 0xe0, 0x54, 0x57, 0xa7, 0xd8, 0x45, 0x6a, 0x81, 0xdc, 0xe6, 0x18, 0xcb, 0x83, 0x65, 0xed, + 0x62, 0x0e, 0xb3, 0xbf, 0x61, 0xc1, 0xc9, 0x2c, 0x79, 0xf4, 0xa6, 0x05, 0xa7, 0xe2, 0x2c, 0xbd, + 0xe3, 0x1a, 0x3b, 0x15, 0xe4, 0xda, 0x05, 0xc2, 0xdd, 0x9d, 0xb0, 0xff, 0xaf, 0x98, 0xfc, 0x37, + 0x5d, 0xbf, 0x11, 0xdc, 0x56, 0x86, 0x90, 0xd5, 0xd3, 0x10, 0xa2, 0xeb, 0xbf, 0xbe, 0x49, 0x1a, + 0x6d, 0xaf, 0x2b, 0x5d, 0x78, 0x55, 0xb4, 0x63, 0x85, 0xc1, 0xb2, 0x23, 0xdb, 0xa2, 0x56, 0x7f, + 0x66, 0x52, 0xce, 0x89, 0x76, 0xac, 0x30, 0xd0, 0x73, 0x30, 0x62, 0xbc, 0xa4, 0x9c, 0x97, 0x6c, + 0x03, 0x60, 0xa8, 0xe8, 0x18, 0xa7, 0xb0, 0xd0, 0x24, 0x80, 0x32, 0xaa, 0xa4, 0x4a, 0x66, 0xde, + 0x41, 0x25, 0xf9, 0x62, 0x6c, 0x60, 0xb0, 0x5c, 0x64, 0xaf, 0x1d, 0xb3, 0x83, 0x9d, 0x41, 0x5d, + 0x3f, 0x76, 0x56, 0xb4, 0x61, 0x05, 0xa5, 0xd2, 0xab, 0xe5, 0xf8, 0x6d, 0xc7, 0xa3, 0x23, 0x24, + 0xf6, 0xfb, 0x6a, 0x19, 0x2e, 0x29, 0x08, 0x36, 0xb0, 0xe8, 0x1b, 0x27, 0x6e, 0x8b, 0xbc, 0x1c, + 0xf8, 0x32, 0x38, 0x51, 0x9f, 0xf5, 0x89, 0x76, 0xac, 0x30, 0xec, 0xff, 0x6a, 0xc1, 0x09, 0x5d, + 0xd9, 0x80, 0xdf, 0xbf, 0x6e, 0xba, 0x27, 0xac, 0x7d, 0xdd, 0x13, 0xe9, 0x94, 0xef, 0x52, 0x5f, + 0x29, 0xdf, 0x66, 0x36, 0x76, 0x79, 0xcf, 0x6c, 0xec, 0x1f, 0xd2, 0x77, 0xfb, 0xf2, 0xb4, 0xed, + 0xe1, 0xbc, 0x7b, 0x7d, 0x91, 0x0d, 0x83, 0x75, 0x47, 0x95, 0xf5, 0x19, 0xe1, 0x7b, 0x95, 0xd9, + 0x69, 0x86, 0x24, 0x20, 0xf6, 0x32, 0xd4, 0xd4, 0x91, 0x97, 0xf4, 0x4e, 0x58, 0xf9, 0xde, 0x89, + 0xbe, 0xb2, 0x42, 0x67, 0xd6, 0xbf, 0xf9, 0xdd, 0xc7, 0xdf, 0xf6, 0xfb, 0xdf, 0x7d, 0xfc, 0x6d, + 0x7f, 0xfc, 0xdd, 0xc7, 0xdf, 0xf6, 0xf1, 0x3b, 0x8f, 0x5b, 0xdf, 0xbc, 0xf3, 0xb8, 0xf5, 0xfb, + 0x77, 0x1e, 0xb7, 0xfe, 0xf8, 0xce, 0xe3, 0xd6, 0x77, 0xee, 0x3c, 0x6e, 0x7d, 0xf1, 0x3f, 0x3d, + 0xfe, 0xb6, 0x97, 0x73, 0xa3, 0x53, 0xe9, 0x8f, 0x67, 0xea, 0x8d, 0xa9, 0xed, 0x0b, 0x2c, 0x40, + 0x92, 0x2e, 0xaf, 0x29, 0x63, 0x4e, 0x4d, 0xc9, 0xe5, 0xf5, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, + 0xda, 0xd9, 0x67, 0x31, 0x41, 0xe5, 0x00, 0x00, } func (m *AWSAuthConfig) Marshal() (dAtA []byte, err error) { @@ -7577,6 +7702,16 @@ func (m *ApplicationSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + { + size, err := m.SourceHydrator.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x4a if len(m.Sources) > 0 { for iNdEx := len(m.Sources) - 1; iNdEx >= 0; iNdEx-- { { @@ -8815,6 +8950,44 @@ func (m *ConnectionState) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *DrySource) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *DrySource) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DrySource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.Path) + copy(dAtA[i:], m.Path) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Path))) + i-- + dAtA[i] = 0x1a + i -= len(m.TargetRevision) + copy(dAtA[i:], m.TargetRevision) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.TargetRevision))) + i-- + dAtA[i] = 0x12 + i -= len(m.RepoURL) + copy(dAtA[i:], m.RepoURL) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.RepoURL))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + func (m *DuckTypeGenerator) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -9521,6 +9694,34 @@ func (m *HostResourceInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *HydrateTo) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *HydrateTo) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *HydrateTo) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.TargetRevision) + copy(dAtA[i:], m.TargetRevision) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.TargetRevision))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + func (m *Info) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -13706,6 +13907,59 @@ func (m *SignatureKey) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *SourceHydrator) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *SourceHydrator) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SourceHydrator) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.HydrateTo.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + { + size, err := m.SyncSource.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.DrySource.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + func (m *SyncOperation) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -14074,6 +14328,39 @@ func (m *SyncPolicyAutomated) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *SyncSource) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *SyncSource) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SyncSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.Path) + copy(dAtA[i:], m.Path) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Path))) + i-- + dAtA[i] = 0x12 + i -= len(m.TargetRevision) + copy(dAtA[i:], m.TargetRevision) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.TargetRevision))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + func (m *SyncStatus) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -15344,6 +15631,8 @@ func (m *ApplicationSpec) Size() (n int) { n += 1 + l + sovGenerated(uint64(l)) } } + l = m.SourceHydrator.Size() + n += 1 + l + sovGenerated(uint64(l)) return n } @@ -15777,6 +16066,21 @@ func (m *ConnectionState) Size() (n int) { return n } +func (m *DrySource) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.RepoURL) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.TargetRevision) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Path) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + func (m *DuckTypeGenerator) Size() (n int) { if m == nil { return 0 @@ -16045,6 +16349,17 @@ func (m *HostResourceInfo) Size() (n int) { return n } +func (m *HydrateTo) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.TargetRevision) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + func (m *Info) Size() (n int) { if m == nil { return 0 @@ -17600,6 +17915,21 @@ func (m *SignatureKey) Size() (n int) { return n } +func (m *SourceHydrator) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.DrySource.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.SyncSource.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.HydrateTo.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + func (m *SyncOperation) Size() (n int) { if m == nil { return 0 @@ -17742,6 +18072,19 @@ func (m *SyncPolicyAutomated) Size() (n int) { return n } +func (m *SyncSource) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.TargetRevision) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Path) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + func (m *SyncStatus) Size() (n int) { if m == nil { return 0 @@ -18547,6 +18890,7 @@ func (this *ApplicationSpec) String() string { `Info:` + repeatedStringForInfo + `,`, `RevisionHistoryLimit:` + valueToStringGenerated(this.RevisionHistoryLimit) + `,`, `Sources:` + repeatedStringForSources + `,`, + `SourceHydrator:` + strings.Replace(strings.Replace(this.SourceHydrator.String(), "SourceHydrator", "SourceHydrator", 1), `&`, ``, 1) + `,`, `}`, }, "") return s @@ -18874,6 +19218,18 @@ func (this *ConnectionState) String() string { }, "") return s } +func (this *DrySource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&DrySource{`, + `RepoURL:` + fmt.Sprintf("%v", this.RepoURL) + `,`, + `TargetRevision:` + fmt.Sprintf("%v", this.TargetRevision) + `,`, + `Path:` + fmt.Sprintf("%v", this.Path) + `,`, + `}`, + }, "") + return s +} func (this *DuckTypeGenerator) String() string { if this == nil { return "nil" @@ -19106,6 +19462,16 @@ func (this *HostResourceInfo) String() string { }, "") return s } +func (this *HydrateTo) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&HydrateTo{`, + `TargetRevision:` + fmt.Sprintf("%v", this.TargetRevision) + `,`, + `}`, + }, "") + return s +} func (this *Info) String() string { if this == nil { return "nil" @@ -20269,6 +20635,18 @@ func (this *SignatureKey) String() string { }, "") return s } +func (this *SourceHydrator) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&SourceHydrator{`, + `DrySource:` + strings.Replace(strings.Replace(this.DrySource.String(), "DrySource", "DrySource", 1), `&`, ``, 1) + `,`, + `SyncSource:` + strings.Replace(strings.Replace(this.SyncSource.String(), "SyncSource", "SyncSource", 1), `&`, ``, 1) + `,`, + `HydrateTo:` + strings.Replace(strings.Replace(this.HydrateTo.String(), "HydrateTo", "HydrateTo", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} func (this *SyncOperation) String() string { if this == nil { return "nil" @@ -20361,6 +20739,17 @@ func (this *SyncPolicyAutomated) String() string { }, "") return s } +func (this *SyncSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&SyncSource{`, + `TargetRevision:` + fmt.Sprintf("%v", this.TargetRevision) + `,`, + `Path:` + fmt.Sprintf("%v", this.Path) + `,`, + `}`, + }, "") + return s +} func (this *SyncStatus) String() string { if this == nil { return "nil" @@ -28081,6 +28470,39 @@ func (m *ApplicationSpec) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SourceHydrator", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.SourceHydrator.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -31792,6 +32214,152 @@ func (m *ConnectionState) Unmarshal(dAtA []byte) error { } return nil } +func (m *DrySource) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DrySource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DrySource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RepoURL", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.RepoURL = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TargetRevision", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TargetRevision = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Path", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Path = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *DuckTypeGenerator) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -34257,6 +34825,88 @@ func (m *HostResourceInfo) Unmarshal(dAtA []byte) error { } return nil } +func (m *HydrateTo) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: HydrateTo: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: HydrateTo: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TargetRevision", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TargetRevision = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *Info) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -48560,6 +49210,155 @@ func (m *SignatureKey) Unmarshal(dAtA []byte) error { } return nil } +func (m *SourceHydrator) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: SourceHydrator: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SourceHydrator: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DrySource", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.DrySource.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SyncSource", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.SyncSource.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HydrateTo", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.HydrateTo.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *SyncOperation) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -49647,6 +50446,120 @@ func (m *SyncPolicyAutomated) Unmarshal(dAtA []byte) error { } return nil } +func (m *SyncSource) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: SyncSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SyncSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TargetRevision", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TargetRevision = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Path", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Path = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *SyncStatus) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/pkg/apis/application/v1alpha1/generated.proto b/pkg/apis/application/v1alpha1/generated.proto index 88ba0d7efe9a9..cfce41fb898c9 100644 --- a/pkg/apis/application/v1alpha1/generated.proto +++ b/pkg/apis/application/v1alpha1/generated.proto @@ -587,6 +587,9 @@ message ApplicationSpec { // Sources is a reference to the location of the application's manifests or chart repeated ApplicationSource sources = 8; + + // SourceHydrator provides a way to push hydrated manifests back to git before syncing them to the cluster. + optional SourceHydrator sourceHydrator = 9; } // ApplicationStatus contains status information for the application @@ -875,6 +878,15 @@ message ConnectionState { optional k8s.io.apimachinery.pkg.apis.meta.v1.Time attemptedAt = 3; } +// DrySource specifies a location for dry "don't repeat yourself" manifest source information. +message DrySource { + optional string repoURL = 1; + + optional string targetRevision = 2; + + optional string path = 3; +} + // DuckType defines a generator to match against clusters registered with ArgoCD. message DuckTypeGenerator { // ConfigMapRef is a ConfigMap with the duck type definitions needed to retrieve the data @@ -1040,6 +1052,12 @@ message HostResourceInfo { optional int64 capacity = 4; } +// HydrateTo specifies a location to which hydrated manifests should be pushed as a "staging area" before being moved to +// the SyncSource. The RepoURL and Path are assumed based on the associated SyncSource config in the SourceHydrator. +message HydrateTo { + optional string targetRevision = 1; +} + message Info { optional string name = 1; @@ -2125,6 +2143,20 @@ message SignatureKey { optional string keyID = 1; } +// SourceHydrator specifies a dry "don't repeat yourself" source for manifests, a sync source from which to sync +// hydrated manifests, and an optional hydrateTo location to act as a "staging" aread for hydrated manifests. +message SourceHydrator { + // DrySource specifies where the dry "don't repeat yourself" manifest source lives. + optional DrySource drySource = 1; + + // SyncSource specifies where to sync hydrated manifests from. + optional SyncSource syncSource = 2; + + // HydrateTo specifies an optional "staging" location to push hydrated manifests to. An external system would then + // have to move manifests to the SyncSource, e.g. by pull request. + optional HydrateTo hydrateTo = 3; +} + // SyncOperation contains details about a sync operation. message SyncOperation { // Revision is the revision (Git) or chart version (Helm) which to sync the application to @@ -2221,6 +2253,14 @@ message SyncPolicyAutomated { optional bool allowEmpty = 3; } +// SyncSource specifies a location from which hydrated manifests may be synced. RepoURL is assumed based on the +// associated DrySource config in the SourceHydrator. +message SyncSource { + optional string targetRevision = 1; + + optional string path = 2; +} + // SyncStatus contains information about the currently observed live and desired states of an application message SyncStatus { // Status is the sync state of the comparison diff --git a/pkg/apis/application/v1alpha1/openapi_generated.go b/pkg/apis/application/v1alpha1/openapi_generated.go index ecbcdabe75364..ba5642da7676d 100644 --- a/pkg/apis/application/v1alpha1/openapi_generated.go +++ b/pkg/apis/application/v1alpha1/openapi_generated.go @@ -68,6 +68,7 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ComponentParameter": schema_pkg_apis_application_v1alpha1_ComponentParameter(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ConfigManagementPlugin": schema_pkg_apis_application_v1alpha1_ConfigManagementPlugin(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ConnectionState": schema_pkg_apis_application_v1alpha1_ConnectionState(ref), + "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.DrySource": schema_pkg_apis_application_v1alpha1_DrySource(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.DuckTypeGenerator": schema_pkg_apis_application_v1alpha1_DuckTypeGenerator(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.EnvEntry": schema_pkg_apis_application_v1alpha1_EnvEntry(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ErrApplicationNotAllowedToUseProject": schema_pkg_apis_application_v1alpha1_ErrApplicationNotAllowedToUseProject(ref), @@ -83,6 +84,7 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.HelmParameter": schema_pkg_apis_application_v1alpha1_HelmParameter(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.HostInfo": schema_pkg_apis_application_v1alpha1_HostInfo(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.HostResourceInfo": schema_pkg_apis_application_v1alpha1_HostResourceInfo(ref), + "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.HydrateTo": schema_pkg_apis_application_v1alpha1_HydrateTo(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.Info": schema_pkg_apis_application_v1alpha1_Info(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.InfoItem": schema_pkg_apis_application_v1alpha1_InfoItem(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.JWTToken": schema_pkg_apis_application_v1alpha1_JWTToken(ref), @@ -154,11 +156,13 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.SCMProviderGeneratorGitlab": schema_pkg_apis_application_v1alpha1_SCMProviderGeneratorGitlab(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.SecretRef": schema_pkg_apis_application_v1alpha1_SecretRef(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.SignatureKey": schema_pkg_apis_application_v1alpha1_SignatureKey(ref), + "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.SourceHydrator": schema_pkg_apis_application_v1alpha1_SourceHydrator(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.SyncOperation": schema_pkg_apis_application_v1alpha1_SyncOperation(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.SyncOperationResource": schema_pkg_apis_application_v1alpha1_SyncOperationResource(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.SyncOperationResult": schema_pkg_apis_application_v1alpha1_SyncOperationResult(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.SyncPolicy": schema_pkg_apis_application_v1alpha1_SyncPolicy(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.SyncPolicyAutomated": schema_pkg_apis_application_v1alpha1_SyncPolicyAutomated(ref), + "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.SyncSource": schema_pkg_apis_application_v1alpha1_SyncSource(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.SyncStatus": schema_pkg_apis_application_v1alpha1_SyncStatus(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.SyncStrategy": schema_pkg_apis_application_v1alpha1_SyncStrategy(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.SyncStrategyApply": schema_pkg_apis_application_v1alpha1_SyncStrategyApply(ref), @@ -2156,12 +2160,19 @@ func schema_pkg_apis_application_v1alpha1_ApplicationSpec(ref common.ReferenceCa }, }, }, + "sourceHydrator": { + SchemaProps: spec.SchemaProps{ + Description: "SourceHydrator provides a way to push hydrated manifests back to git before syncing them to the cluster.", + Default: map[string]interface{}{}, + Ref: ref("github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.SourceHydrator"), + }, + }, }, Required: []string{"destination", "project"}, }, }, Dependencies: []string{ - "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ApplicationDestination", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ApplicationSource", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.Info", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ResourceIgnoreDifferences", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.SyncPolicy"}, + "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ApplicationDestination", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ApplicationSource", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.Info", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ResourceIgnoreDifferences", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.SourceHydrator", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.SyncPolicy"}, } } @@ -3128,6 +3139,41 @@ func schema_pkg_apis_application_v1alpha1_ConnectionState(ref common.ReferenceCa } } +func schema_pkg_apis_application_v1alpha1_DrySource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DrySource specifies a location for dry \"don't repeat yourself\" manifest source information.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "repoURL": { + SchemaProps: spec.SchemaProps{ + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + "targetRevision": { + SchemaProps: spec.SchemaProps{ + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + "path": { + SchemaProps: spec.SchemaProps{ + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"repoURL", "targetRevision", "path"}, + }, + }, + } +} + func schema_pkg_apis_application_v1alpha1_DuckTypeGenerator(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{ @@ -3740,6 +3786,27 @@ func schema_pkg_apis_application_v1alpha1_HostResourceInfo(ref common.ReferenceC } } +func schema_pkg_apis_application_v1alpha1_HydrateTo(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "HydrateTo specifies a location to which hydrated manifests should be pushed as a \"staging area\" before being moved to the SyncSource. The RepoURL and Path are assumed based on the associated SyncSource config in the SourceHydrator.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "targetRevision": { + SchemaProps: spec.SchemaProps{ + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"targetRevision"}, + }, + }, + } +} + func schema_pkg_apis_application_v1alpha1_Info(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{ @@ -7367,6 +7434,43 @@ func schema_pkg_apis_application_v1alpha1_SignatureKey(ref common.ReferenceCallb } } +func schema_pkg_apis_application_v1alpha1_SourceHydrator(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "SourceHydrator specifies a dry \"don't repeat yourself\" source for manifests, a sync source from which to sync hydrated manifests, and an optional hydrateTo location to act as a \"staging\" aread for hydrated manifests.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "drySource": { + SchemaProps: spec.SchemaProps{ + Description: "DrySource specifies where the dry \"don't repeat yourself\" manifest source lives.", + Default: map[string]interface{}{}, + Ref: ref("github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.DrySource"), + }, + }, + "syncSource": { + SchemaProps: spec.SchemaProps{ + Description: "SyncSource specifies where to sync hydrated manifests from.", + Default: map[string]interface{}{}, + Ref: ref("github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.SyncSource"), + }, + }, + "hydrateTo": { + SchemaProps: spec.SchemaProps{ + Description: "HydrateTo specifies an optional \"staging\" location to push hydrated manifests to. An external system would then have to move manifests to the SyncSource, e.g. by pull request.", + Default: map[string]interface{}{}, + Ref: ref("github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.HydrateTo"), + }, + }, + }, + Required: []string{"drySource", "syncSource"}, + }, + }, + Dependencies: []string{ + "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.DrySource", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.HydrateTo", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.SyncSource"}, + } +} + func schema_pkg_apis_application_v1alpha1_SyncOperation(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{ @@ -7689,6 +7793,34 @@ func schema_pkg_apis_application_v1alpha1_SyncPolicyAutomated(ref common.Referen } } +func schema_pkg_apis_application_v1alpha1_SyncSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "SyncSource specifies a location from which hydrated manifests may be synced. RepoURL is assumed based on the associated DrySource config in the SourceHydrator.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "targetRevision": { + SchemaProps: spec.SchemaProps{ + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + "path": { + SchemaProps: spec.SchemaProps{ + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"targetRevision", "path"}, + }, + }, + } +} + func schema_pkg_apis_application_v1alpha1_SyncStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{ diff --git a/pkg/apis/application/v1alpha1/types.go b/pkg/apis/application/v1alpha1/types.go index e00994a512940..c52d6ce998477 100644 --- a/pkg/apis/application/v1alpha1/types.go +++ b/pkg/apis/application/v1alpha1/types.go @@ -83,6 +83,9 @@ type ApplicationSpec struct { // Sources is a reference to the location of the application's manifests or chart Sources ApplicationSources `json:"sources,omitempty" protobuf:"bytes,8,opt,name=sources"` + + // SourceHydrator provides a way to push hydrated manifests back to git before syncing them to the cluster. + SourceHydrator SourceHydrator `json:"sourceHydrator,omitempty" protobuf:"bytes,9,opt,name=sourceHydrator"` } type IgnoreDifferences []ResourceIgnoreDifferences @@ -286,6 +289,38 @@ const ( ApplicationSourceTypePlugin ApplicationSourceType = "Plugin" ) +// SourceHydrator specifies a dry "don't repeat yourself" source for manifests, a sync source from which to sync +// hydrated manifests, and an optional hydrateTo location to act as a "staging" aread for hydrated manifests. +type SourceHydrator struct { + // DrySource specifies where the dry "don't repeat yourself" manifest source lives. + DrySource DrySource `json:"drySource" protobuf:"bytes,1,name=drySource"` + // SyncSource specifies where to sync hydrated manifests from. + SyncSource SyncSource `json:"syncSource" protobuf:"bytes,2,name=syncSource"` + // HydrateTo specifies an optional "staging" location to push hydrated manifests to. An external system would then + // have to move manifests to the SyncSource, e.g. by pull request. + HydrateTo HydrateTo `json:"hydrateTo,omitempty" protobuf:"bytes,3,opt,name=hydrateTo"` +} + +// DrySource specifies a location for dry "don't repeat yourself" manifest source information. +type DrySource struct { + RepoURL string `json:"repoURL" protobuf:"bytes,1,name=repoURL"` + TargetRevision string `json:"targetRevision" protobuf:"bytes,2,name=targetRevision"` + Path string `json:"path" protobuf:"bytes,3,name=path"` +} + +// SyncSource specifies a location from which hydrated manifests may be synced. RepoURL is assumed based on the +// associated DrySource config in the SourceHydrator. +type SyncSource struct { + TargetRevision string `json:"targetRevision" protobuf:"bytes,1,name=targetRevision"` + Path string `json:"path" protobuf:"bytes,2,name=path"` +} + +// HydrateTo specifies a location to which hydrated manifests should be pushed as a "staging area" before being moved to +// the SyncSource. The RepoURL and Path are assumed based on the associated SyncSource config in the SourceHydrator. +type HydrateTo struct { + TargetRevision string `json:"targetRevision" protobuf:"bytes,1,name=targetRevision"` +} + // RefreshType specifies how to refresh the sources of a given application type RefreshType string diff --git a/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go index d61af65785b95..748ebea785956 100644 --- a/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go +++ b/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go @@ -1273,6 +1273,7 @@ func (in *ApplicationSpec) DeepCopyInto(out *ApplicationSpec) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + out.SourceHydrator = in.SourceHydrator return } @@ -1790,6 +1791,22 @@ func (in *ConnectionState) DeepCopy() *ConnectionState { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DrySource) DeepCopyInto(out *DrySource) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DrySource. +func (in *DrySource) DeepCopy() *DrySource { + if in == nil { + return nil + } + out := new(DrySource) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *DuckTypeGenerator) DeepCopyInto(out *DuckTypeGenerator) { *out = *in @@ -2122,6 +2139,22 @@ func (in *HostResourceInfo) DeepCopy() *HostResourceInfo { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *HydrateTo) DeepCopyInto(out *HydrateTo) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HydrateTo. +func (in *HydrateTo) DeepCopy() *HydrateTo { + if in == nil { + return nil + } + out := new(HydrateTo) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in IgnoreDifferences) DeepCopyInto(out *IgnoreDifferences) { { @@ -4043,6 +4076,25 @@ func (in *SignatureKey) DeepCopy() *SignatureKey { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SourceHydrator) DeepCopyInto(out *SourceHydrator) { + *out = *in + out.DrySource = in.DrySource + out.SyncSource = in.SyncSource + out.HydrateTo = in.HydrateTo + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SourceHydrator. +func (in *SourceHydrator) DeepCopy() *SourceHydrator { + if in == nil { + return nil + } + out := new(SourceHydrator) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *SyncOperation) DeepCopyInto(out *SyncOperation) { *out = *in @@ -4229,6 +4281,22 @@ func (in *SyncPolicyAutomated) DeepCopy() *SyncPolicyAutomated { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SyncSource) DeepCopyInto(out *SyncSource) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SyncSource. +func (in *SyncSource) DeepCopy() *SyncSource { + if in == nil { + return nil + } + out := new(SyncSource) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *SyncStatus) DeepCopyInto(out *SyncStatus) { *out = *in From dd7952e3893efd5079022a3aef3b12612d6253a0 Mon Sep 17 00:00:00 2001 From: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> Date: Tue, 23 Apr 2024 17:02:39 -0400 Subject: [PATCH 02/15] it's monitoring both branches now Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> --- assets/swagger.json | 15 + controller/appcontroller.go | 21 + controller/state.go | 24 + manifests/core-install.yaml | 24 + manifests/crds/application-crd.yaml | 24 + manifests/ha/install.yaml | 24 + manifests/install.yaml | 24 + pkg/apis/application/v1alpha1/generated.pb.go | 1728 ++++++++++------- pkg/apis/application/v1alpha1/generated.proto | 11 + .../application/v1alpha1/openapi_generated.go | 40 +- pkg/apis/application/v1alpha1/types.go | 35 +- .../v1alpha1/zz_generated.deepcopy.go | 30 +- reposerver/apiclient/repository.pb.go | 801 ++++++-- reposerver/repository/repository.go | 5 + reposerver/repository/repository.proto | 14 + .../application-parameters.tsx | 12 +- .../application-status-panel.tsx | 4 +- ui/src/app/applications/components/utils.tsx | 9 +- ui/src/app/shared/models.ts | 22 + 19 files changed, 1981 insertions(+), 886 deletions(-) diff --git a/assets/swagger.json b/assets/swagger.json index f535f0c2f22aa..0e71d9305912d 100644 --- a/assets/swagger.json +++ b/assets/swagger.json @@ -6620,6 +6620,9 @@ "$ref": "#/definitions/v1alpha1ResourceStatus" } }, + "sourceHydrator": { + "$ref": "#/definitions/v1alpha1SourceHydratorStatus" + }, "sourceType": { "type": "string", "title": "SourceType specifies the type of this application" @@ -8909,6 +8912,18 @@ } } }, + "v1alpha1SourceHydratorStatus": { + "type": "object", + "properties": { + "drySource": { + "$ref": "#/definitions/v1alpha1DrySource" + }, + "revision": { + "type": "string", + "title": "Revision holds the resolved revision (sha) of the dry source as of the most recent reconciliation" + } + } + }, "v1alpha1SyncOperation": { "description": "SyncOperation contains details about a sync operation.", "type": "object", diff --git a/controller/appcontroller.go b/controller/appcontroller.go index 9d89b6e6b37d6..29870bb1394a8 100644 --- a/controller/appcontroller.go +++ b/controller/appcontroller.go @@ -1457,6 +1457,12 @@ func (ctrl *ApplicationController) PatchAppWithWriteBack(ctx context.Context, na return patchedApp, err } +// processAppRefreshQueueItem does roughly these tasks: +// 1. If we're shutting down, it quits early and returns "false" to indicate we're done processing refreshes. +// 2. Checks whether the app needs to be refreshed. If not, quit early. +// 3. If we're "comparing with nothing," just update the app resource tree in Redis and the app status in k8s. +// 4. Checks that all AppProject restrictions are being followed. If not, clears the app resource tree and managed +// resources in Redis and sets failure conditions on the app status. func (ctrl *ApplicationController) processAppRefreshQueueItem() (processNext bool) { patchMs := time.Duration(0) // time spent in doing patch/update calls setOpMs := time.Duration(0) // time spent in doing Operation patch calls in autosync @@ -1546,6 +1552,19 @@ func (ctrl *ApplicationController) processAppRefreshQueueItem() (processNext boo return } + // If we're using a source hydrator, see if the dry source has changed. + if app.Spec.SourceHydrator != nil { + revision, err := ctrl.appStateManager.ResolveDryRevision(app) + if err != nil { + logCtx.Errorf("Failed to check whether dry source has changed, skipping: %w", err) + } + if app.Status.SourceHydrator.Revision != revision { + app.Status.SourceHydrator.Revision = revision + ctrl.persistAppStatus(origApp, &app.Status) + logCtx.Info("UPDATED THE REVISION, YO") + } + } + var localManifests []string if opState := app.Status.OperationState; opState != nil && opState.Operation.Sync != nil { localManifests = opState.Operation.Sync.Manifests @@ -1717,6 +1736,8 @@ func (ctrl *ApplicationController) needRefreshAppStatus(app *appv1.Application, return false, refreshType, compareWith } +// refreshAppConditions validates whether AppProject restrictions are being followed. If not, it adds error conditions +// to the app status. func (ctrl *ApplicationController) refreshAppConditions(app *appv1.Application) (*appv1.AppProject, bool) { errorConditions := make([]appv1.ApplicationCondition, 0) proj, err := ctrl.getAppProj(app) diff --git a/controller/state.go b/controller/state.go index 17cfbe015e8e2..6e1a01d377f2d 100644 --- a/controller/state.go +++ b/controller/state.go @@ -73,6 +73,7 @@ type AppStateManager interface { CompareAppState(app *v1alpha1.Application, project *v1alpha1.AppProject, revisions []string, sources []v1alpha1.ApplicationSource, noCache bool, noRevisionCache bool, localObjects []string, hasMultipleSources bool) (*comparisonResult, error) SyncAppState(app *v1alpha1.Application, state *v1alpha1.OperationState) GetRepoObjs(app *v1alpha1.Application, sources []v1alpha1.ApplicationSource, appLabelKey string, revisions []string, noCache, noRevisionCache, verifySignature bool, proj *v1alpha1.AppProject) ([]*unstructured.Unstructured, []*apiclient.ManifestResponse, error) + ResolveDryRevision(app *v1alpha1.Application) (string, error) } // comparisonResult holds the state of an application after the reconciliation @@ -276,6 +277,29 @@ func (m *appStateManager) GetRepoObjs(app *v1alpha1.Application, sources []v1alp return targetObjs, manifestInfos, nil } +func (m *appStateManager) ResolveDryRevision(app *v1alpha1.Application) (string, error) { + conn, repoClient, err := m.repoClientset.NewRepoServerClient() + if err != nil { + return "", fmt.Errorf("failed to connect to repo server: %w", err) + } + defer io.Close(conn) + + repo, err := m.db.GetRepository(context.Background(), app.Spec.SourceHydrator.DrySource.RepoURL) + if err != nil { + return "", fmt.Errorf("failed to get repo %q: %w", app.Spec.SourceHydrator.DrySource.RepoURL, err) + } + + resp, err := repoClient.ResolveRevision(context.Background(), &apiclient.ResolveRevisionRequest{ + Repo: repo, + App: app, + AmbiguousRevision: app.Spec.SourceHydrator.DrySource.TargetRevision, + }) + if err != nil { + return "", fmt.Errorf("failed to determine whether the dry source has changed: %w", err) + } + return resp.Revision, nil +} + func unmarshalManifests(manifests []string) ([]*unstructured.Unstructured, error) { targetObjs := make([]*unstructured.Unstructured, 0) for _, manifest := range manifests { diff --git a/manifests/core-install.yaml b/manifests/core-install.yaml index a407af6a598f9..e091d1873ac25 100644 --- a/manifests/core-install.yaml +++ b/manifests/core-install.yaml @@ -4225,6 +4225,30 @@ spec: type: string type: object type: array + sourceHydrator: + description: SourceHydrator stores information about the current state + of source hydration + properties: + drySource: + description: DrySource holds the dry source configuration as of + the most recent reconciliation + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + revision: + description: Revision holds the resolved revision (sha) of the + dry source as of the most recent reconciliation + type: string + type: object sourceType: description: SourceType specifies the type of this application type: string diff --git a/manifests/crds/application-crd.yaml b/manifests/crds/application-crd.yaml index 7acc435e97d19..21d4cdfb2aa87 100644 --- a/manifests/crds/application-crd.yaml +++ b/manifests/crds/application-crd.yaml @@ -4224,6 +4224,30 @@ spec: type: string type: object type: array + sourceHydrator: + description: SourceHydrator stores information about the current state + of source hydration + properties: + drySource: + description: DrySource holds the dry source configuration as of + the most recent reconciliation + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + revision: + description: Revision holds the resolved revision (sha) of the + dry source as of the most recent reconciliation + type: string + type: object sourceType: description: SourceType specifies the type of this application type: string diff --git a/manifests/ha/install.yaml b/manifests/ha/install.yaml index 75e3d1b793cd2..222c0e2f6f906 100644 --- a/manifests/ha/install.yaml +++ b/manifests/ha/install.yaml @@ -4225,6 +4225,30 @@ spec: type: string type: object type: array + sourceHydrator: + description: SourceHydrator stores information about the current state + of source hydration + properties: + drySource: + description: DrySource holds the dry source configuration as of + the most recent reconciliation + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + revision: + description: Revision holds the resolved revision (sha) of the + dry source as of the most recent reconciliation + type: string + type: object sourceType: description: SourceType specifies the type of this application type: string diff --git a/manifests/install.yaml b/manifests/install.yaml index 64729a3b0f00c..7101203253864 100644 --- a/manifests/install.yaml +++ b/manifests/install.yaml @@ -4225,6 +4225,30 @@ spec: type: string type: object type: array + sourceHydrator: + description: SourceHydrator stores information about the current state + of source hydration + properties: + drySource: + description: DrySource holds the dry source configuration as of + the most recent reconciliation + properties: + path: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - path + - repoURL + - targetRevision + type: object + revision: + description: Revision holds the resolved revision (sha) of the + dry source as of the most recent reconciliation + type: string + type: object sourceType: description: SourceType specifies the type of this application type: string diff --git a/pkg/apis/application/v1alpha1/generated.pb.go b/pkg/apis/application/v1alpha1/generated.pb.go index da0d1143be9ce..a9672312fc0c7 100644 --- a/pkg/apis/application/v1alpha1/generated.pb.go +++ b/pkg/apis/application/v1alpha1/generated.pb.go @@ -4045,10 +4045,38 @@ func (m *SourceHydrator) XXX_DiscardUnknown() { var xxx_messageInfo_SourceHydrator proto.InternalMessageInfo +func (m *SourceHydratorStatus) Reset() { *m = SourceHydratorStatus{} } +func (*SourceHydratorStatus) ProtoMessage() {} +func (*SourceHydratorStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_030104ce3b95bcac, []int{143} +} +func (m *SourceHydratorStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SourceHydratorStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *SourceHydratorStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_SourceHydratorStatus.Merge(m, src) +} +func (m *SourceHydratorStatus) XXX_Size() int { + return m.Size() +} +func (m *SourceHydratorStatus) XXX_DiscardUnknown() { + xxx_messageInfo_SourceHydratorStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_SourceHydratorStatus proto.InternalMessageInfo + func (m *SyncOperation) Reset() { *m = SyncOperation{} } func (*SyncOperation) ProtoMessage() {} func (*SyncOperation) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{143} + return fileDescriptor_030104ce3b95bcac, []int{144} } func (m *SyncOperation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4076,7 +4104,7 @@ var xxx_messageInfo_SyncOperation proto.InternalMessageInfo func (m *SyncOperationResource) Reset() { *m = SyncOperationResource{} } func (*SyncOperationResource) ProtoMessage() {} func (*SyncOperationResource) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{144} + return fileDescriptor_030104ce3b95bcac, []int{145} } func (m *SyncOperationResource) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4104,7 +4132,7 @@ var xxx_messageInfo_SyncOperationResource proto.InternalMessageInfo func (m *SyncOperationResult) Reset() { *m = SyncOperationResult{} } func (*SyncOperationResult) ProtoMessage() {} func (*SyncOperationResult) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{145} + return fileDescriptor_030104ce3b95bcac, []int{146} } func (m *SyncOperationResult) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4132,7 +4160,7 @@ var xxx_messageInfo_SyncOperationResult proto.InternalMessageInfo func (m *SyncPolicy) Reset() { *m = SyncPolicy{} } func (*SyncPolicy) ProtoMessage() {} func (*SyncPolicy) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{146} + return fileDescriptor_030104ce3b95bcac, []int{147} } func (m *SyncPolicy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4160,7 +4188,7 @@ var xxx_messageInfo_SyncPolicy proto.InternalMessageInfo func (m *SyncPolicyAutomated) Reset() { *m = SyncPolicyAutomated{} } func (*SyncPolicyAutomated) ProtoMessage() {} func (*SyncPolicyAutomated) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{147} + return fileDescriptor_030104ce3b95bcac, []int{148} } func (m *SyncPolicyAutomated) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4188,7 +4216,7 @@ var xxx_messageInfo_SyncPolicyAutomated proto.InternalMessageInfo func (m *SyncSource) Reset() { *m = SyncSource{} } func (*SyncSource) ProtoMessage() {} func (*SyncSource) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{148} + return fileDescriptor_030104ce3b95bcac, []int{149} } func (m *SyncSource) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4216,7 +4244,7 @@ var xxx_messageInfo_SyncSource proto.InternalMessageInfo func (m *SyncStatus) Reset() { *m = SyncStatus{} } func (*SyncStatus) ProtoMessage() {} func (*SyncStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{149} + return fileDescriptor_030104ce3b95bcac, []int{150} } func (m *SyncStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4244,7 +4272,7 @@ var xxx_messageInfo_SyncStatus proto.InternalMessageInfo func (m *SyncStrategy) Reset() { *m = SyncStrategy{} } func (*SyncStrategy) ProtoMessage() {} func (*SyncStrategy) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{150} + return fileDescriptor_030104ce3b95bcac, []int{151} } func (m *SyncStrategy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4272,7 +4300,7 @@ var xxx_messageInfo_SyncStrategy proto.InternalMessageInfo func (m *SyncStrategyApply) Reset() { *m = SyncStrategyApply{} } func (*SyncStrategyApply) ProtoMessage() {} func (*SyncStrategyApply) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{151} + return fileDescriptor_030104ce3b95bcac, []int{152} } func (m *SyncStrategyApply) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4300,7 +4328,7 @@ var xxx_messageInfo_SyncStrategyApply proto.InternalMessageInfo func (m *SyncStrategyHook) Reset() { *m = SyncStrategyHook{} } func (*SyncStrategyHook) ProtoMessage() {} func (*SyncStrategyHook) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{152} + return fileDescriptor_030104ce3b95bcac, []int{153} } func (m *SyncStrategyHook) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4328,7 +4356,7 @@ var xxx_messageInfo_SyncStrategyHook proto.InternalMessageInfo func (m *SyncWindow) Reset() { *m = SyncWindow{} } func (*SyncWindow) ProtoMessage() {} func (*SyncWindow) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{153} + return fileDescriptor_030104ce3b95bcac, []int{154} } func (m *SyncWindow) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4356,7 +4384,7 @@ var xxx_messageInfo_SyncWindow proto.InternalMessageInfo func (m *TLSClientConfig) Reset() { *m = TLSClientConfig{} } func (*TLSClientConfig) ProtoMessage() {} func (*TLSClientConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{154} + return fileDescriptor_030104ce3b95bcac, []int{155} } func (m *TLSClientConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4384,7 +4412,7 @@ var xxx_messageInfo_TLSClientConfig proto.InternalMessageInfo func (m *TagFilter) Reset() { *m = TagFilter{} } func (*TagFilter) ProtoMessage() {} func (*TagFilter) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{155} + return fileDescriptor_030104ce3b95bcac, []int{156} } func (m *TagFilter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4573,6 +4601,7 @@ func init() { proto.RegisterType((*SecretRef)(nil), "jackfan.us.kg.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.SecretRef") proto.RegisterType((*SignatureKey)(nil), "jackfan.us.kg.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.SignatureKey") proto.RegisterType((*SourceHydrator)(nil), "jackfan.us.kg.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.SourceHydrator") + proto.RegisterType((*SourceHydratorStatus)(nil), "jackfan.us.kg.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.SourceHydratorStatus") proto.RegisterType((*SyncOperation)(nil), "jackfan.us.kg.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.SyncOperation") proto.RegisterType((*SyncOperationResource)(nil), "jackfan.us.kg.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.SyncOperationResource") proto.RegisterType((*SyncOperationResult)(nil), "jackfan.us.kg.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.SyncOperationResult") @@ -4593,707 +4622,709 @@ func init() { } var fileDescriptor_030104ce3b95bcac = []byte{ - // 11192 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x6d, 0x70, 0x24, 0xc7, - 0x75, 0x98, 0x66, 0x17, 0x0b, 0xec, 0x3e, 0x7c, 0xdc, 0x5d, 0xdf, 0x1d, 0x09, 0x9e, 0x48, 0xe2, - 0x3c, 0xb4, 0x29, 0x3a, 0x22, 0x01, 0xf3, 0x44, 0xca, 0x8c, 0x68, 0x4b, 0xc6, 0xc7, 0x1d, 0x0e, - 0x77, 0xc0, 0x01, 0x6c, 0xe0, 0xee, 0x24, 0xca, 0x14, 0x35, 0xd8, 0x6d, 0x2c, 0xe6, 0x30, 0x3b, - 0x33, 0x9c, 0x99, 0xc5, 0x61, 0x69, 0x49, 0xd6, 0x97, 0x6d, 0x25, 0xfa, 0xa0, 0x22, 0x25, 0x65, - 0x3a, 0xb6, 0x14, 0xd9, 0x72, 0x52, 0x71, 0x25, 0xaa, 0x38, 0xc9, 0x8f, 0x38, 0x71, 0x52, 0x2e, - 0xdb, 0xa9, 0x94, 0x52, 0x4a, 0xca, 0x2e, 0x97, 0xcb, 0x72, 0x12, 0x1b, 0x91, 0x2e, 0x95, 0x4a, - 0x2a, 0x55, 0x71, 0x95, 0x13, 0xff, 0x48, 0x2e, 0xf9, 0x91, 0xea, 0xef, 0x9e, 0xd9, 0x59, 0x60, - 0x01, 0x0c, 0xee, 0x4e, 0x0a, 0xff, 0xed, 0xf6, 0x7b, 0xf3, 0x5e, 0x4f, 0x4f, 0xf7, 0x7b, 0xaf, - 0x5f, 0xbf, 0xf7, 0x1a, 0x16, 0x9b, 0x6e, 0xb2, 0xd9, 0x5e, 0x9f, 0xac, 0x07, 0xad, 0x29, 0x27, - 0x6a, 0x06, 0x61, 0x14, 0xdc, 0x62, 0x3f, 0x9e, 0xa9, 0x37, 0xa6, 0xb6, 0x2f, 0x4c, 0x85, 0x5b, - 0xcd, 0x29, 0x27, 0x74, 0xe3, 0x29, 0x27, 0x0c, 0x3d, 0xb7, 0xee, 0x24, 0x6e, 0xe0, 0x4f, 0x6d, - 0x3f, 0xeb, 0x78, 0xe1, 0xa6, 0xf3, 0xec, 0x54, 0x93, 0xf8, 0x24, 0x72, 0x12, 0xd2, 0x98, 0x0c, - 0xa3, 0x20, 0x09, 0xd0, 0x8f, 0x69, 0x6a, 0x93, 0x92, 0x1a, 0xfb, 0xf1, 0x6a, 0xbd, 0x31, 0xb9, - 0x7d, 0x61, 0x32, 0xdc, 0x6a, 0x4e, 0x52, 0x6a, 0x93, 0x06, 0xb5, 0x49, 0x49, 0xed, 0xdc, 0x33, - 0x46, 0x5f, 0x9a, 0x41, 0x33, 0x98, 0x62, 0x44, 0xd7, 0xdb, 0x1b, 0xec, 0x1f, 0xfb, 0xc3, 0x7e, - 0x71, 0x66, 0xe7, 0xec, 0xad, 0x17, 0xe2, 0x49, 0x37, 0xa0, 0xdd, 0x9b, 0xaa, 0x07, 0x11, 0x99, - 0xda, 0xee, 0xea, 0xd0, 0xb9, 0xcb, 0x1a, 0x87, 0xec, 0x24, 0xc4, 0x8f, 0xdd, 0xc0, 0x8f, 0x9f, - 0xa1, 0x5d, 0x20, 0xd1, 0x36, 0x89, 0xcc, 0xd7, 0x33, 0x10, 0xf2, 0x28, 0x3d, 0xa7, 0x29, 0xb5, - 0x9c, 0xfa, 0xa6, 0xeb, 0x93, 0xa8, 0xa3, 0x1f, 0x6f, 0x91, 0xc4, 0xc9, 0x7b, 0x6a, 0xaa, 0xd7, - 0x53, 0x51, 0xdb, 0x4f, 0xdc, 0x16, 0xe9, 0x7a, 0xe0, 0xdd, 0xfb, 0x3d, 0x10, 0xd7, 0x37, 0x49, - 0xcb, 0xe9, 0x7a, 0xee, 0x5d, 0xbd, 0x9e, 0x6b, 0x27, 0xae, 0x37, 0xe5, 0xfa, 0x49, 0x9c, 0x44, - 0xd9, 0x87, 0xec, 0x5f, 0xb2, 0x60, 0x74, 0xfa, 0xe6, 0xea, 0x74, 0x3b, 0xd9, 0x9c, 0x0d, 0xfc, - 0x0d, 0xb7, 0x89, 0x9e, 0x87, 0xe1, 0xba, 0xd7, 0x8e, 0x13, 0x12, 0x5d, 0x73, 0x5a, 0x64, 0xdc, - 0x3a, 0x6f, 0x3d, 0x55, 0x9b, 0x39, 0xfd, 0xcd, 0xdd, 0x89, 0xb7, 0xdd, 0xd9, 0x9d, 0x18, 0x9e, - 0xd5, 0x20, 0x6c, 0xe2, 0xa1, 0x1f, 0x86, 0xa1, 0x28, 0xf0, 0xc8, 0x34, 0xbe, 0x36, 0x5e, 0x62, - 0x8f, 0x9c, 0x10, 0x8f, 0x0c, 0x61, 0xde, 0x8c, 0x25, 0x9c, 0xa2, 0x86, 0x51, 0xb0, 0xe1, 0x7a, - 0x64, 0xbc, 0x9c, 0x46, 0x5d, 0xe1, 0xcd, 0x58, 0xc2, 0xed, 0x3f, 0x2a, 0x01, 0x4c, 0x87, 0xe1, - 0x4a, 0x14, 0xdc, 0x22, 0xf5, 0x04, 0x7d, 0x18, 0xaa, 0x74, 0x98, 0x1b, 0x4e, 0xe2, 0xb0, 0x8e, - 0x0d, 0x5f, 0xf8, 0x91, 0x49, 0xfe, 0xd6, 0x93, 0xe6, 0x5b, 0xeb, 0x49, 0x46, 0xb1, 0x27, 0xb7, - 0x9f, 0x9d, 0x5c, 0x5e, 0xa7, 0xcf, 0x2f, 0x91, 0xc4, 0x99, 0x41, 0x82, 0x19, 0xe8, 0x36, 0xac, - 0xa8, 0x22, 0x1f, 0x06, 0xe2, 0x90, 0xd4, 0xd9, 0x3b, 0x0c, 0x5f, 0x58, 0x9c, 0x3c, 0xca, 0x6c, - 0x9e, 0xd4, 0x3d, 0x5f, 0x0d, 0x49, 0x7d, 0x66, 0x44, 0x70, 0x1e, 0xa0, 0xff, 0x30, 0xe3, 0x83, - 0xb6, 0x61, 0x30, 0x4e, 0x9c, 0xa4, 0x1d, 0xb3, 0xa1, 0x18, 0xbe, 0x70, 0xad, 0x30, 0x8e, 0x8c, - 0xea, 0xcc, 0x98, 0xe0, 0x39, 0xc8, 0xff, 0x63, 0xc1, 0xcd, 0xfe, 0x53, 0x0b, 0xc6, 0x34, 0xf2, - 0xa2, 0x1b, 0x27, 0xe8, 0x27, 0xbb, 0x06, 0x77, 0xb2, 0xbf, 0xc1, 0xa5, 0x4f, 0xb3, 0xa1, 0x3d, - 0x29, 0x98, 0x55, 0x65, 0x8b, 0x31, 0xb0, 0x2d, 0xa8, 0xb8, 0x09, 0x69, 0xc5, 0xe3, 0xa5, 0xf3, - 0xe5, 0xa7, 0x86, 0x2f, 0x5c, 0x2e, 0xea, 0x3d, 0x67, 0x46, 0x05, 0xd3, 0xca, 0x02, 0x25, 0x8f, - 0x39, 0x17, 0xfb, 0xd7, 0x46, 0xcc, 0xf7, 0xa3, 0x03, 0x8e, 0x9e, 0x85, 0xe1, 0x38, 0x68, 0x47, - 0x75, 0x82, 0x49, 0x18, 0xc4, 0xe3, 0xd6, 0xf9, 0x32, 0x9d, 0x7a, 0x74, 0x52, 0xaf, 0xea, 0x66, - 0x6c, 0xe2, 0xa0, 0x2f, 0x58, 0x30, 0xd2, 0x20, 0x71, 0xe2, 0xfa, 0x8c, 0xbf, 0xec, 0xfc, 0xda, - 0x91, 0x3b, 0x2f, 0x1b, 0xe7, 0x34, 0xf1, 0x99, 0x33, 0xe2, 0x45, 0x46, 0x8c, 0xc6, 0x18, 0xa7, - 0xf8, 0xd3, 0xc5, 0xd9, 0x20, 0x71, 0x3d, 0x72, 0x43, 0xfa, 0x5f, 0x2c, 0x1f, 0xb5, 0x38, 0xe7, - 0x34, 0x08, 0x9b, 0x78, 0xc8, 0x87, 0x0a, 0x5d, 0x7c, 0xf1, 0xf8, 0x00, 0xeb, 0xff, 0xc2, 0xd1, - 0xfa, 0x2f, 0x06, 0x95, 0xae, 0x6b, 0x3d, 0xfa, 0xf4, 0x5f, 0x8c, 0x39, 0x1b, 0xf4, 0x79, 0x0b, - 0xc6, 0x85, 0x70, 0xc0, 0x84, 0x0f, 0xe8, 0xcd, 0x4d, 0x37, 0x21, 0x9e, 0x1b, 0x27, 0xe3, 0x15, - 0xd6, 0x87, 0xa9, 0xfe, 0xe6, 0xd6, 0x7c, 0x14, 0xb4, 0xc3, 0xab, 0xae, 0xdf, 0x98, 0x39, 0x2f, - 0x38, 0x8d, 0xcf, 0xf6, 0x20, 0x8c, 0x7b, 0xb2, 0x44, 0x5f, 0xb6, 0xe0, 0x9c, 0xef, 0xb4, 0x48, - 0x1c, 0x3a, 0xf4, 0xd3, 0x72, 0xf0, 0x8c, 0xe7, 0xd4, 0xb7, 0x58, 0x8f, 0x06, 0x0f, 0xd7, 0x23, - 0x5b, 0xf4, 0xe8, 0xdc, 0xb5, 0x9e, 0xa4, 0xf1, 0x1e, 0x6c, 0xd1, 0xd7, 0x2d, 0x38, 0x15, 0x44, - 0xe1, 0xa6, 0xe3, 0x93, 0x86, 0x84, 0xc6, 0xe3, 0x43, 0x6c, 0xe9, 0x7d, 0xe8, 0x68, 0x9f, 0x68, - 0x39, 0x4b, 0x76, 0x29, 0xf0, 0xdd, 0x24, 0x88, 0x56, 0x49, 0x92, 0xb8, 0x7e, 0x33, 0x9e, 0x39, - 0x7b, 0x67, 0x77, 0xe2, 0x54, 0x17, 0x16, 0xee, 0xee, 0x0f, 0xfa, 0x29, 0x18, 0x8e, 0x3b, 0x7e, - 0xfd, 0xa6, 0xeb, 0x37, 0x82, 0xdb, 0xf1, 0x78, 0xb5, 0x88, 0xe5, 0xbb, 0xaa, 0x08, 0x8a, 0x05, - 0xa8, 0x19, 0x60, 0x93, 0x5b, 0xfe, 0x87, 0xd3, 0x53, 0xa9, 0x56, 0xf4, 0x87, 0xd3, 0x93, 0x69, - 0x0f, 0xb6, 0xe8, 0xe7, 0x2c, 0x18, 0x8d, 0xdd, 0xa6, 0xef, 0x24, 0xed, 0x88, 0x5c, 0x25, 0x9d, - 0x78, 0x1c, 0x58, 0x47, 0xae, 0x1c, 0x71, 0x54, 0x0c, 0x92, 0x33, 0x67, 0x45, 0x1f, 0x47, 0xcd, - 0xd6, 0x18, 0xa7, 0xf9, 0xe6, 0x2d, 0x34, 0x3d, 0xad, 0x87, 0x8b, 0x5d, 0x68, 0x7a, 0x52, 0xf7, - 0x64, 0x89, 0x7e, 0x02, 0x4e, 0xf2, 0x26, 0x35, 0xb2, 0xf1, 0xf8, 0x08, 0x13, 0xb4, 0x67, 0xee, - 0xec, 0x4e, 0x9c, 0x5c, 0xcd, 0xc0, 0x70, 0x17, 0x36, 0x7a, 0x0d, 0x26, 0x42, 0x12, 0xb5, 0xdc, - 0x64, 0xd9, 0xf7, 0x3a, 0x52, 0x7c, 0xd7, 0x83, 0x90, 0x34, 0x44, 0x77, 0xe2, 0xf1, 0xd1, 0xf3, - 0xd6, 0x53, 0xd5, 0x99, 0x77, 0x88, 0x6e, 0x4e, 0xac, 0xec, 0x8d, 0x8e, 0xf7, 0xa3, 0x67, 0xff, - 0xeb, 0x12, 0x9c, 0xcc, 0x2a, 0x4e, 0xf4, 0x77, 0x2c, 0x38, 0x71, 0xeb, 0x76, 0xb2, 0x16, 0x6c, - 0x11, 0x3f, 0x9e, 0xe9, 0x50, 0xf1, 0xc6, 0x54, 0xc6, 0xf0, 0x85, 0x7a, 0xb1, 0x2a, 0x7a, 0xf2, - 0x4a, 0x9a, 0xcb, 0x45, 0x3f, 0x89, 0x3a, 0x33, 0x0f, 0x8b, 0xb7, 0x3b, 0x71, 0xe5, 0xe6, 0x9a, - 0x09, 0xc5, 0xd9, 0x4e, 0x9d, 0xfb, 0xac, 0x05, 0x67, 0xf2, 0x48, 0xa0, 0x93, 0x50, 0xde, 0x22, - 0x1d, 0x6e, 0xc0, 0x61, 0xfa, 0x13, 0xbd, 0x02, 0x95, 0x6d, 0xc7, 0x6b, 0x13, 0x61, 0xdd, 0xcc, - 0x1f, 0xed, 0x45, 0x54, 0xcf, 0x30, 0xa7, 0xfa, 0x9e, 0xd2, 0x0b, 0x96, 0xfd, 0x7b, 0x65, 0x18, - 0x36, 0xf4, 0xdb, 0x3d, 0xb0, 0xd8, 0x82, 0x94, 0xc5, 0xb6, 0x54, 0x98, 0x6a, 0xee, 0x69, 0xb2, - 0xdd, 0xce, 0x98, 0x6c, 0xcb, 0xc5, 0xb1, 0xdc, 0xd3, 0x66, 0x43, 0x09, 0xd4, 0x82, 0x90, 0x5a, - 0xef, 0x54, 0xf5, 0x0f, 0x14, 0xf1, 0x09, 0x97, 0x25, 0xb9, 0x99, 0xd1, 0x3b, 0xbb, 0x13, 0x35, - 0xf5, 0x17, 0x6b, 0x46, 0xf6, 0xb7, 0x2d, 0x38, 0x63, 0xf4, 0x71, 0x36, 0xf0, 0x1b, 0x2e, 0xfb, - 0xb4, 0xe7, 0x61, 0x20, 0xe9, 0x84, 0x72, 0x87, 0xa0, 0x46, 0x6a, 0xad, 0x13, 0x12, 0xcc, 0x20, - 0xd4, 0xd0, 0x6f, 0x91, 0x38, 0x76, 0x9a, 0x24, 0xbb, 0x27, 0x58, 0xe2, 0xcd, 0x58, 0xc2, 0x51, - 0x04, 0xc8, 0x73, 0xe2, 0x64, 0x2d, 0x72, 0xfc, 0x98, 0x91, 0x5f, 0x73, 0x5b, 0x44, 0x0c, 0xf0, - 0x5f, 0xea, 0x6f, 0xc6, 0xd0, 0x27, 0x66, 0x1e, 0xba, 0xb3, 0x3b, 0x81, 0x16, 0xbb, 0x28, 0xe1, - 0x1c, 0xea, 0xf6, 0x97, 0x2d, 0x78, 0x28, 0xdf, 0x16, 0x43, 0x4f, 0xc2, 0x20, 0xdf, 0x1e, 0x8a, - 0xb7, 0xd3, 0x9f, 0x84, 0xb5, 0x62, 0x01, 0x45, 0x53, 0x50, 0x53, 0x7a, 0x42, 0xbc, 0xe3, 0x29, - 0x81, 0x5a, 0xd3, 0xca, 0x45, 0xe3, 0xd0, 0x41, 0xa3, 0x7f, 0x84, 0xe5, 0xa6, 0x06, 0x8d, 0xed, - 0xa7, 0x18, 0xc4, 0xfe, 0x8f, 0x16, 0x9c, 0x30, 0x7a, 0x75, 0x0f, 0x4c, 0x73, 0x3f, 0x6d, 0x9a, - 0x2f, 0x14, 0x36, 0x9f, 0x7b, 0xd8, 0xe6, 0x9f, 0xb7, 0xe0, 0x9c, 0x81, 0xb5, 0xe4, 0x24, 0xf5, - 0xcd, 0x8b, 0x3b, 0x61, 0x44, 0x62, 0xba, 0xf5, 0x46, 0x8f, 0x19, 0x72, 0x6b, 0x66, 0x58, 0x50, - 0x28, 0x5f, 0x25, 0x1d, 0x2e, 0xc4, 0x9e, 0x86, 0x2a, 0x9f, 0x9c, 0x41, 0x24, 0x46, 0x5c, 0xbd, - 0xdb, 0xb2, 0x68, 0xc7, 0x0a, 0x03, 0xd9, 0x30, 0xc8, 0x84, 0x13, 0x5d, 0xac, 0x54, 0x0d, 0x01, - 0xfd, 0x88, 0x37, 0x58, 0x0b, 0x16, 0x10, 0x3b, 0x4e, 0x75, 0x67, 0x25, 0x22, 0xec, 0xe3, 0x36, - 0x2e, 0xb9, 0xc4, 0x6b, 0xc4, 0x74, 0xdb, 0xe0, 0xf8, 0x7e, 0x90, 0x88, 0x1d, 0x80, 0xb1, 0x6d, - 0x98, 0xd6, 0xcd, 0xd8, 0xc4, 0xa1, 0x4c, 0x3d, 0x67, 0x9d, 0x78, 0x7c, 0x44, 0x05, 0xd3, 0x45, - 0xd6, 0x82, 0x05, 0xc4, 0xbe, 0x53, 0x62, 0x1b, 0x14, 0xb5, 0xf4, 0xc9, 0xbd, 0xd8, 0xdd, 0x46, - 0x29, 0x59, 0xb9, 0x52, 0x9c, 0xe0, 0x22, 0xbd, 0x77, 0xb8, 0xaf, 0x67, 0xc4, 0x25, 0x2e, 0x94, - 0xeb, 0xde, 0xbb, 0xdc, 0xdf, 0x2e, 0xc1, 0x44, 0xfa, 0x81, 0x2e, 0x69, 0x4b, 0xb7, 0x54, 0x06, - 0xa3, 0xac, 0xbf, 0xc3, 0xc0, 0xc7, 0x26, 0x5e, 0x0f, 0x81, 0x55, 0x3a, 0x4e, 0x81, 0x65, 0xca, - 0xd3, 0xf2, 0x3e, 0xf2, 0xf4, 0x49, 0x35, 0xea, 0x03, 0x19, 0x01, 0x96, 0xd6, 0x29, 0xe7, 0x61, - 0x20, 0x4e, 0x48, 0x38, 0x5e, 0x49, 0xcb, 0xa3, 0xd5, 0x84, 0x84, 0x98, 0x41, 0xec, 0xff, 0x56, - 0x82, 0x87, 0xd3, 0x63, 0xa8, 0x55, 0xc0, 0xfb, 0x52, 0x2a, 0xe0, 0x9d, 0xa6, 0x0a, 0xb8, 0xbb, - 0x3b, 0xf1, 0xf6, 0x1e, 0x8f, 0x7d, 0xcf, 0x68, 0x08, 0x34, 0x9f, 0x19, 0xc5, 0xa9, 0xf4, 0x28, - 0xde, 0xdd, 0x9d, 0x78, 0xac, 0xc7, 0x3b, 0x66, 0x86, 0xf9, 0x49, 0x18, 0x8c, 0x88, 0x13, 0x07, - 0xbe, 0x18, 0x68, 0xf5, 0x39, 0x30, 0x6b, 0xc5, 0x02, 0x6a, 0xff, 0x41, 0x2d, 0x3b, 0xd8, 0xf3, - 0xdc, 0x61, 0x17, 0x44, 0xc8, 0x85, 0x01, 0x66, 0xd6, 0x73, 0xd1, 0x70, 0xf5, 0x68, 0xcb, 0x88, - 0xaa, 0x01, 0x45, 0x7a, 0xa6, 0x4a, 0xbf, 0x1a, 0x6d, 0xc2, 0x8c, 0x05, 0xda, 0x81, 0x6a, 0x5d, - 0x5a, 0xdb, 0xa5, 0x22, 0xfc, 0x52, 0xc2, 0xd6, 0xd6, 0x1c, 0x47, 0xa8, 0xbc, 0x56, 0x26, 0xba, - 0xe2, 0x86, 0x08, 0x94, 0x9b, 0x6e, 0x22, 0x3e, 0xeb, 0x11, 0xf7, 0x53, 0xf3, 0xae, 0xf1, 0x8a, - 0x43, 0x54, 0x89, 0xcc, 0xbb, 0x09, 0xa6, 0xf4, 0xd1, 0xcf, 0x58, 0x30, 0x1c, 0xd7, 0x5b, 0x2b, - 0x51, 0xb0, 0xed, 0x36, 0x48, 0x24, 0xac, 0xa9, 0x23, 0x8a, 0xa6, 0xd5, 0xd9, 0x25, 0x49, 0x50, - 0xf3, 0xe5, 0xfb, 0x5b, 0x0d, 0xc1, 0x26, 0x5f, 0xba, 0xcb, 0x78, 0x58, 0xbc, 0xfb, 0x1c, 0xa9, - 0xbb, 0x54, 0xff, 0xc9, 0x4d, 0x15, 0x9b, 0x29, 0x47, 0xb6, 0x2e, 0xe7, 0xda, 0xf5, 0x2d, 0xba, - 0xde, 0x74, 0x87, 0xde, 0x7e, 0x67, 0x77, 0xe2, 0xe1, 0xd9, 0x7c, 0x9e, 0xb8, 0x57, 0x67, 0xd8, - 0x80, 0x85, 0x6d, 0xcf, 0xc3, 0xe4, 0xb5, 0x36, 0x61, 0x2e, 0x93, 0x02, 0x06, 0x6c, 0x45, 0x13, - 0xcc, 0x0c, 0x98, 0x01, 0xc1, 0x26, 0x5f, 0xf4, 0x1a, 0x0c, 0xb6, 0x9c, 0x24, 0x72, 0x77, 0x84, - 0x9f, 0xe4, 0x88, 0xf6, 0xfe, 0x12, 0xa3, 0xa5, 0x99, 0x33, 0x4d, 0xcd, 0x1b, 0xb1, 0x60, 0x84, - 0x5a, 0x50, 0x69, 0x91, 0xa8, 0x49, 0xc6, 0xab, 0x45, 0xf8, 0x84, 0x97, 0x28, 0x29, 0xcd, 0xb0, - 0x46, 0xad, 0x23, 0xd6, 0x86, 0x39, 0x17, 0xf4, 0x0a, 0x54, 0x63, 0xe2, 0x91, 0x3a, 0xb5, 0x6f, - 0x6a, 0x8c, 0xe3, 0xbb, 0xfa, 0xb4, 0xf5, 0xa8, 0x61, 0xb1, 0x2a, 0x1e, 0xe5, 0x0b, 0x4c, 0xfe, - 0xc3, 0x8a, 0x24, 0x1d, 0xc0, 0xd0, 0x6b, 0x37, 0x5d, 0x7f, 0x1c, 0x8a, 0x18, 0xc0, 0x15, 0x46, - 0x2b, 0x33, 0x80, 0xbc, 0x11, 0x0b, 0x46, 0xf6, 0x7f, 0xb6, 0x00, 0xa5, 0x85, 0xda, 0x3d, 0x30, - 0x6a, 0x5f, 0x4b, 0x1b, 0xb5, 0x8b, 0x45, 0x5a, 0x1d, 0x3d, 0xec, 0xda, 0xdf, 0xac, 0x41, 0x46, - 0x1d, 0x5c, 0x23, 0x71, 0x42, 0x1a, 0x6f, 0x89, 0xf0, 0xb7, 0x44, 0xf8, 0x5b, 0x22, 0x5c, 0x89, - 0xf0, 0xf5, 0x8c, 0x08, 0x7f, 0xaf, 0xb1, 0xea, 0xf5, 0x01, 0xec, 0xab, 0xea, 0x84, 0xd6, 0xec, - 0x81, 0x81, 0x40, 0x25, 0xc1, 0x95, 0xd5, 0xe5, 0x6b, 0xb9, 0x32, 0xfb, 0xd5, 0xb4, 0xcc, 0x3e, - 0x2a, 0x8b, 0xff, 0x1f, 0xa4, 0xf4, 0xbf, 0xb2, 0xe0, 0x1d, 0x69, 0xe9, 0x25, 0x67, 0xce, 0x42, - 0xd3, 0x0f, 0x22, 0x32, 0xe7, 0x6e, 0x6c, 0x90, 0x88, 0xf8, 0x75, 0x12, 0x2b, 0x2f, 0x86, 0xd5, - 0xcb, 0x8b, 0x81, 0x9e, 0x83, 0x91, 0x5b, 0x71, 0xe0, 0xaf, 0x04, 0xae, 0x2f, 0x44, 0x10, 0xdd, - 0x08, 0x9f, 0xbc, 0xb3, 0x3b, 0x31, 0x42, 0x47, 0x54, 0xb6, 0xe3, 0x14, 0x16, 0x9a, 0x85, 0x53, - 0xb7, 0x5e, 0x5b, 0x71, 0x12, 0xc3, 0x1d, 0x20, 0x37, 0xee, 0xec, 0xc0, 0xe2, 0xca, 0x4b, 0x19, - 0x20, 0xee, 0xc6, 0xb7, 0x7f, 0xb1, 0x04, 0x8f, 0x64, 0x5e, 0x24, 0xf0, 0xbc, 0xa0, 0x9d, 0xd0, - 0x4d, 0x0d, 0xfa, 0xaa, 0x05, 0x27, 0x5b, 0x69, 0x8f, 0x43, 0x2c, 0x1c, 0xbb, 0xef, 0x2f, 0x4c, - 0x47, 0x64, 0x5c, 0x1a, 0x33, 0xe3, 0x62, 0x84, 0x4e, 0x66, 0x00, 0x31, 0xee, 0xea, 0x0b, 0x7a, - 0x05, 0x6a, 0x2d, 0x67, 0xe7, 0x7a, 0xd8, 0x70, 0x12, 0xb9, 0x9f, 0xec, 0xed, 0x06, 0x68, 0x27, - 0xae, 0x37, 0xc9, 0x8f, 0xf6, 0x27, 0x17, 0xfc, 0x64, 0x39, 0x5a, 0x4d, 0x22, 0xd7, 0x6f, 0x72, - 0x77, 0xde, 0x92, 0x24, 0x83, 0x35, 0x45, 0xfb, 0x2b, 0x56, 0x56, 0x49, 0xa9, 0xd1, 0x89, 0x9c, - 0x84, 0x34, 0x3b, 0xe8, 0x23, 0x50, 0xa1, 0x1b, 0x3f, 0x39, 0x2a, 0x37, 0x8b, 0xd4, 0x9c, 0xc6, - 0x97, 0xd0, 0x4a, 0x94, 0xfe, 0x8b, 0x31, 0x67, 0x6a, 0x7f, 0xb5, 0x96, 0x35, 0x16, 0xd8, 0xe1, - 0xed, 0x05, 0x80, 0x66, 0xb0, 0x46, 0x5a, 0xa1, 0x47, 0x87, 0xc5, 0x62, 0x27, 0x00, 0xca, 0xd7, - 0x31, 0xaf, 0x20, 0xd8, 0xc0, 0x42, 0x7f, 0xc5, 0x02, 0x68, 0xca, 0x39, 0x2f, 0x0d, 0x81, 0xeb, - 0x45, 0xbe, 0x8e, 0x5e, 0x51, 0xba, 0x2f, 0x8a, 0x21, 0x36, 0x98, 0xa3, 0x4f, 0x5a, 0x50, 0x4d, - 0x64, 0xf7, 0xb9, 0x6a, 0x5c, 0x2b, 0xb2, 0x27, 0xf2, 0xa5, 0xb5, 0x4d, 0xa4, 0x86, 0x44, 0xf1, - 0x45, 0x3f, 0x6b, 0x01, 0xc4, 0x1d, 0xbf, 0xbe, 0x12, 0x78, 0x6e, 0xbd, 0x23, 0x34, 0xe6, 0x8d, - 0x42, 0xfd, 0x31, 0x8a, 0xfa, 0xcc, 0x18, 0x1d, 0x0d, 0xfd, 0x1f, 0x1b, 0x9c, 0xd1, 0xc7, 0xa0, - 0x1a, 0x8b, 0xe9, 0x26, 0x74, 0xe4, 0x5a, 0xb1, 0x5e, 0x21, 0x4e, 0x5b, 0x88, 0x57, 0xf1, 0x0f, - 0x2b, 0x9e, 0xe8, 0xe7, 0x2d, 0x38, 0x11, 0xa6, 0xfd, 0x7c, 0x42, 0x1d, 0x16, 0x27, 0x03, 0x32, - 0x7e, 0xc4, 0x99, 0xd3, 0x77, 0x76, 0x27, 0x4e, 0x64, 0x1a, 0x71, 0xb6, 0x17, 0x54, 0x02, 0xea, - 0x19, 0xbc, 0x1c, 0x72, 0x9f, 0xe3, 0x90, 0x96, 0x80, 0xf3, 0x59, 0x20, 0xee, 0xc6, 0x47, 0x2b, - 0x70, 0x86, 0xf6, 0xae, 0xc3, 0xcd, 0x4f, 0xa9, 0x5e, 0x62, 0xa6, 0x0c, 0xab, 0x33, 0x8f, 0x8a, - 0x19, 0xc2, 0xbc, 0xfa, 0x59, 0x1c, 0x9c, 0xfb, 0x24, 0xfa, 0x3d, 0x0b, 0x1e, 0x75, 0x99, 0x1a, - 0x30, 0x1d, 0xe6, 0x5a, 0x23, 0x88, 0x93, 0x58, 0x52, 0xa8, 0xac, 0xe8, 0xa5, 0x7e, 0x66, 0x7e, - 0x50, 0xbc, 0xc1, 0xa3, 0x0b, 0x7b, 0x74, 0x09, 0xef, 0xd9, 0x61, 0xf4, 0xa3, 0x30, 0x2a, 0xd7, - 0xc5, 0x0a, 0x15, 0xc1, 0x4c, 0xd1, 0xd6, 0x66, 0x4e, 0xdd, 0xd9, 0x9d, 0x18, 0x5d, 0x33, 0x01, - 0x38, 0x8d, 0x67, 0x7f, 0xab, 0x94, 0x3a, 0x0f, 0x51, 0x4e, 0x48, 0x26, 0x6e, 0xea, 0xd2, 0xff, - 0x23, 0xa5, 0x67, 0xa1, 0xe2, 0x46, 0x79, 0x97, 0xb4, 0xb8, 0x51, 0x4d, 0x31, 0x36, 0x98, 0x53, - 0xa3, 0xf4, 0x94, 0x93, 0x75, 0x75, 0x0a, 0x09, 0xf8, 0x4a, 0x91, 0x5d, 0xea, 0x3e, 0xbd, 0x7a, - 0x44, 0x74, 0xed, 0x54, 0x17, 0x08, 0x77, 0x77, 0xc9, 0xfe, 0x56, 0xfa, 0x0c, 0xc6, 0x58, 0xbc, - 0x7d, 0x9c, 0x2f, 0x7d, 0xc1, 0x82, 0xe1, 0x28, 0xf0, 0x3c, 0xd7, 0x6f, 0x52, 0x41, 0x23, 0xb4, - 0xe5, 0x07, 0x8f, 0x45, 0x61, 0x09, 0x89, 0xc2, 0x4c, 0x5b, 0xac, 0x79, 0x62, 0xb3, 0x03, 0xf6, - 0x9f, 0x5a, 0x30, 0xde, 0x4b, 0x20, 0x22, 0x02, 0x6f, 0x97, 0xab, 0x5d, 0x45, 0x57, 0x2c, 0xfb, - 0x73, 0xc4, 0x23, 0xca, 0xf1, 0x5c, 0x9d, 0x79, 0x42, 0xbc, 0xe6, 0xdb, 0x57, 0x7a, 0xa3, 0xe2, - 0xbd, 0xe8, 0xa0, 0x97, 0xe1, 0xa4, 0xf1, 0x5e, 0xb1, 0x1a, 0x98, 0xda, 0xcc, 0x24, 0xb5, 0x40, - 0xa6, 0x33, 0xb0, 0xbb, 0xbb, 0x13, 0x0f, 0x65, 0xdb, 0x84, 0xc4, 0xee, 0xa2, 0x63, 0xff, 0x6a, - 0x29, 0xfb, 0xb5, 0x94, 0xb2, 0x7d, 0xd3, 0xea, 0xda, 0xce, 0xbf, 0xff, 0x38, 0x14, 0x1c, 0xdb, - 0xf8, 0xab, 0x00, 0x8e, 0xde, 0x38, 0xf7, 0xf1, 0x84, 0xd8, 0xfe, 0x37, 0x03, 0xb0, 0x47, 0xcf, - 0xfa, 0xb0, 0x9e, 0x0f, 0x7c, 0xac, 0xf8, 0x39, 0x4b, 0x1d, 0x39, 0x95, 0xd9, 0x22, 0x6f, 0x1c, - 0xd7, 0xd8, 0xf3, 0x0d, 0x4c, 0xcc, 0xa3, 0x14, 0x94, 0x1b, 0x3b, 0x7d, 0xb8, 0x85, 0xbe, 0x66, - 0xa5, 0x0f, 0xcd, 0x78, 0xd8, 0x99, 0x7b, 0x6c, 0x7d, 0x32, 0x4e, 0xe2, 0x78, 0xc7, 0xf4, 0xf9, - 0x4d, 0xaf, 0x33, 0xba, 0x49, 0x80, 0x0d, 0xd7, 0x77, 0x3c, 0xf7, 0x75, 0xba, 0x3d, 0xa9, 0x30, - 0x0d, 0xcb, 0x4c, 0x96, 0x4b, 0xaa, 0x15, 0x1b, 0x18, 0xe7, 0xfe, 0x32, 0x0c, 0x1b, 0x6f, 0x9e, - 0x13, 0x5c, 0x71, 0xc6, 0x0c, 0xae, 0xa8, 0x19, 0x31, 0x11, 0xe7, 0xde, 0x0b, 0x27, 0xb3, 0x1d, - 0x3c, 0xc8, 0xf3, 0xf6, 0xff, 0x1a, 0xca, 0x9e, 0x62, 0xad, 0x91, 0xa8, 0x45, 0xbb, 0xf6, 0x96, - 0x67, 0xe9, 0x2d, 0xcf, 0xd2, 0x5b, 0x9e, 0x25, 0xf3, 0x70, 0x40, 0x78, 0x4d, 0x86, 0xee, 0x91, - 0xd7, 0x24, 0xe5, 0x07, 0xaa, 0x16, 0xee, 0x07, 0xb2, 0xef, 0x54, 0x20, 0x65, 0x47, 0xf1, 0xf1, - 0xfe, 0x61, 0x18, 0x8a, 0x48, 0x18, 0x5c, 0xc7, 0x8b, 0x42, 0x87, 0xe8, 0x58, 0x7b, 0xde, 0x8c, - 0x25, 0x9c, 0xea, 0x9a, 0xd0, 0x49, 0x36, 0x85, 0x12, 0x51, 0xba, 0x66, 0xc5, 0x49, 0x36, 0x31, - 0x83, 0xa0, 0xf7, 0xc2, 0x58, 0xe2, 0x44, 0x4d, 0x6a, 0x6f, 0x6f, 0xb3, 0xcf, 0x2a, 0xce, 0x3a, - 0x1f, 0x12, 0xb8, 0x63, 0x6b, 0x29, 0x28, 0xce, 0x60, 0xa3, 0xd7, 0x60, 0x60, 0x93, 0x78, 0x2d, - 0x31, 0xe4, 0xab, 0xc5, 0xc9, 0x78, 0xf6, 0xae, 0x97, 0x89, 0xd7, 0xe2, 0x12, 0x88, 0xfe, 0xc2, - 0x8c, 0x15, 0x9d, 0x6f, 0xb5, 0xad, 0x76, 0x9c, 0x04, 0x2d, 0xf7, 0x75, 0xe9, 0xe2, 0x7b, 0x7f, - 0xc1, 0x8c, 0xaf, 0x4a, 0xfa, 0xdc, 0x97, 0xa2, 0xfe, 0x62, 0xcd, 0x99, 0xf5, 0xa3, 0xe1, 0x46, - 0xec, 0x53, 0x75, 0x84, 0xa7, 0xae, 0xe8, 0x7e, 0xcc, 0x49, 0xfa, 0xbc, 0x1f, 0xea, 0x2f, 0xd6, - 0x9c, 0x51, 0x47, 0xcd, 0xfb, 0x61, 0xd6, 0x87, 0xeb, 0x05, 0xf7, 0x81, 0xcf, 0xf9, 0xdc, 0xf9, - 0xff, 0x04, 0x54, 0xea, 0x9b, 0x4e, 0x94, 0x8c, 0x8f, 0xb0, 0x49, 0xa3, 0x7c, 0x3a, 0xb3, 0xb4, - 0x11, 0x73, 0x18, 0x7a, 0x0c, 0xca, 0x11, 0xd9, 0x60, 0x71, 0x9b, 0x46, 0x44, 0x0f, 0x26, 0x1b, - 0x98, 0xb6, 0xdb, 0xbf, 0x5c, 0x4a, 0x9b, 0x4b, 0xe9, 0xf7, 0xe6, 0xb3, 0xbd, 0xde, 0x8e, 0x62, - 0xe9, 0xf7, 0x31, 0x66, 0x3b, 0x6b, 0xc6, 0x12, 0x8e, 0x3e, 0x61, 0xc1, 0xd0, 0xad, 0x38, 0xf0, - 0x7d, 0x92, 0x08, 0xd5, 0x74, 0xa3, 0xe0, 0xa1, 0xb8, 0xc2, 0xa9, 0xeb, 0x3e, 0x88, 0x06, 0x2c, - 0xf9, 0xd2, 0xee, 0x92, 0x9d, 0xba, 0xd7, 0x6e, 0x74, 0x05, 0x69, 0x5c, 0xe4, 0xcd, 0x58, 0xc2, - 0x29, 0xaa, 0xeb, 0x73, 0xd4, 0x81, 0x34, 0xea, 0x82, 0x2f, 0x50, 0x05, 0xdc, 0xfe, 0x1b, 0x83, - 0x70, 0x36, 0x77, 0x71, 0x50, 0x43, 0x86, 0x99, 0x0a, 0x97, 0x5c, 0x8f, 0xc8, 0xf0, 0x24, 0x66, - 0xc8, 0xdc, 0x50, 0xad, 0xd8, 0xc0, 0x40, 0x3f, 0x0d, 0x10, 0x3a, 0x91, 0xd3, 0x22, 0xca, 0x2f, - 0x7b, 0x64, 0x7b, 0x81, 0xf6, 0x63, 0x45, 0xd2, 0xd4, 0x7b, 0x53, 0xd5, 0x14, 0x63, 0x83, 0x25, - 0x7a, 0x1e, 0x86, 0x23, 0xe2, 0x11, 0x27, 0x66, 0x61, 0xbf, 0xd9, 0x1c, 0x06, 0xac, 0x41, 0xd8, - 0xc4, 0x43, 0x4f, 0xaa, 0x48, 0xae, 0x4c, 0x44, 0x4b, 0x3a, 0x9a, 0x0b, 0xbd, 0x61, 0xc1, 0xd8, - 0x86, 0xeb, 0x11, 0xcd, 0x5d, 0x64, 0x1c, 0x2c, 0x1f, 0xfd, 0x25, 0x2f, 0x99, 0x74, 0xb5, 0x84, - 0x4c, 0x35, 0xc7, 0x38, 0xc3, 0x9e, 0x7e, 0xe6, 0x6d, 0x12, 0x31, 0xd1, 0x3a, 0x98, 0xfe, 0xcc, - 0x37, 0x78, 0x33, 0x96, 0x70, 0x34, 0x0d, 0x27, 0x42, 0x27, 0x8e, 0x67, 0x23, 0xd2, 0x20, 0x7e, - 0xe2, 0x3a, 0x1e, 0xcf, 0x07, 0xa8, 0xea, 0x78, 0xe0, 0x95, 0x34, 0x18, 0x67, 0xf1, 0xd1, 0x07, - 0xe0, 0x61, 0xee, 0xf8, 0x58, 0x72, 0xe3, 0xd8, 0xf5, 0x9b, 0x7a, 0x1a, 0x08, 0xff, 0xcf, 0x84, - 0x20, 0xf5, 0xf0, 0x42, 0x3e, 0x1a, 0xee, 0xf5, 0x3c, 0x7a, 0x1a, 0xaa, 0xf1, 0x96, 0x1b, 0xce, - 0x46, 0x8d, 0x98, 0x1d, 0x7a, 0x54, 0xb5, 0xb7, 0x71, 0x55, 0xb4, 0x63, 0x85, 0x81, 0xea, 0x30, - 0xc2, 0x3f, 0x09, 0x0f, 0x45, 0x13, 0xf2, 0xf1, 0x99, 0x9e, 0xea, 0x51, 0xa4, 0xb7, 0x4d, 0x62, - 0xe7, 0xf6, 0x45, 0x79, 0x04, 0xc3, 0x4f, 0x0c, 0x6e, 0x18, 0x64, 0x70, 0x8a, 0xa8, 0xfd, 0x0b, - 0xa5, 0xf4, 0x8e, 0xdb, 0x5c, 0xa4, 0x28, 0xa6, 0x4b, 0x31, 0xb9, 0xe1, 0x44, 0xd2, 0x1b, 0x73, - 0xc4, 0xb4, 0x05, 0x41, 0xf7, 0x86, 0x13, 0x99, 0x8b, 0x9a, 0x31, 0xc0, 0x92, 0x13, 0xba, 0x05, - 0x03, 0x89, 0xe7, 0x14, 0x94, 0xe7, 0x64, 0x70, 0xd4, 0x0e, 0x90, 0xc5, 0xe9, 0x18, 0x33, 0x1e, - 0xe8, 0x51, 0x6a, 0xf5, 0xaf, 0xcb, 0x23, 0x12, 0x61, 0xa8, 0xaf, 0xc7, 0x98, 0xb5, 0xda, 0x77, - 0x21, 0x47, 0xae, 0x2a, 0x45, 0x86, 0x2e, 0x00, 0xd0, 0x0d, 0xe4, 0x4a, 0x44, 0x36, 0xdc, 0x1d, - 0x61, 0x48, 0xa8, 0xb5, 0x7b, 0x4d, 0x41, 0xb0, 0x81, 0x25, 0x9f, 0x59, 0x6d, 0x6f, 0xd0, 0x67, - 0x4a, 0xdd, 0xcf, 0x70, 0x08, 0x36, 0xb0, 0xd0, 0x73, 0x30, 0xe8, 0xb6, 0x9c, 0xa6, 0x0a, 0xc1, - 0x7c, 0x94, 0x2e, 0xda, 0x05, 0xd6, 0x72, 0x77, 0x77, 0x62, 0x4c, 0x75, 0x88, 0x35, 0x61, 0x81, - 0x8b, 0x7e, 0xd5, 0x82, 0x91, 0x7a, 0xd0, 0x6a, 0x05, 0x3e, 0xdf, 0x76, 0x89, 0x3d, 0xe4, 0xad, - 0xe3, 0x52, 0xf3, 0x93, 0xb3, 0x06, 0x33, 0xbe, 0x89, 0x54, 0x09, 0x59, 0x26, 0x08, 0xa7, 0x7a, - 0x65, 0xae, 0xed, 0xca, 0x3e, 0x6b, 0xfb, 0x37, 0x2c, 0x38, 0xc5, 0x9f, 0x35, 0x76, 0x83, 0x22, - 0xf7, 0x28, 0x38, 0xe6, 0xd7, 0xea, 0xda, 0x20, 0x2b, 0x2f, 0x5d, 0x17, 0x1c, 0x77, 0x77, 0x12, - 0xcd, 0xc3, 0xa9, 0x8d, 0x20, 0xaa, 0x13, 0x73, 0x20, 0x84, 0x60, 0x52, 0x84, 0x2e, 0x65, 0x11, - 0x70, 0xf7, 0x33, 0xe8, 0x06, 0x3c, 0x64, 0x34, 0x9a, 0xe3, 0xc0, 0x65, 0xd3, 0xe3, 0x82, 0xda, - 0x43, 0x97, 0x72, 0xb1, 0x70, 0x8f, 0xa7, 0xd3, 0x0e, 0x93, 0x5a, 0x1f, 0x0e, 0x93, 0x57, 0xe1, - 0x91, 0x7a, 0xf7, 0xc8, 0x6c, 0xc7, 0xed, 0xf5, 0x98, 0x4b, 0xaa, 0xea, 0xcc, 0x0f, 0x08, 0x02, - 0x8f, 0xcc, 0xf6, 0x42, 0xc4, 0xbd, 0x69, 0xa0, 0x8f, 0x40, 0x35, 0x22, 0xec, 0xab, 0xc4, 0x22, - 0x11, 0xe7, 0x88, 0xbb, 0x64, 0x6d, 0x81, 0x72, 0xb2, 0x5a, 0xf6, 0x8a, 0x86, 0x18, 0x2b, 0x8e, - 0xe8, 0x36, 0x0c, 0x85, 0x4e, 0x52, 0xdf, 0x14, 0xe9, 0x37, 0x47, 0x8e, 0x7f, 0x51, 0xcc, 0x99, - 0x0f, 0xdc, 0x48, 0xd8, 0xe5, 0x4c, 0xb0, 0xe4, 0x46, 0xad, 0x91, 0x7a, 0xd0, 0x0a, 0x03, 0x9f, - 0xf8, 0x49, 0x3c, 0x3e, 0xaa, 0xad, 0x91, 0x59, 0xd5, 0x8a, 0x0d, 0x0c, 0xb4, 0x02, 0x67, 0x98, - 0xcf, 0xe8, 0xa6, 0x9b, 0x6c, 0x06, 0xed, 0x44, 0x6e, 0x81, 0xc6, 0xc7, 0xd2, 0x47, 0x15, 0x8b, - 0x39, 0x38, 0x38, 0xf7, 0xc9, 0x73, 0xef, 0x83, 0x53, 0x5d, 0x4b, 0xf9, 0x40, 0xee, 0x9a, 0x39, - 0x78, 0x28, 0x7f, 0xd1, 0x1c, 0xc8, 0x69, 0xf3, 0x8f, 0x33, 0x61, 0xb3, 0x86, 0x21, 0xdd, 0x87, - 0x03, 0xd0, 0x81, 0x32, 0xf1, 0xb7, 0x85, 0x0e, 0xb9, 0x74, 0xb4, 0x6f, 0x77, 0xd1, 0xdf, 0xe6, - 0x6b, 0x9e, 0x79, 0x39, 0x2e, 0xfa, 0xdb, 0x98, 0xd2, 0x46, 0x5f, 0xb2, 0x52, 0x86, 0x20, 0x77, - 0x1b, 0x7e, 0xe8, 0x58, 0x76, 0x0e, 0x7d, 0xdb, 0x86, 0xf6, 0xbf, 0x2d, 0xc1, 0xf9, 0xfd, 0x88, - 0xf4, 0x31, 0x7c, 0x4f, 0xc0, 0x60, 0xcc, 0x0e, 0xc2, 0x85, 0x50, 0x1e, 0xa6, 0x73, 0x95, 0x1f, - 0x8d, 0xbf, 0x8a, 0x05, 0x08, 0x79, 0x50, 0x6e, 0x39, 0xa1, 0xf0, 0x26, 0x2d, 0x1c, 0x35, 0x91, - 0x86, 0xfe, 0x77, 0xbc, 0x25, 0x27, 0xe4, 0x3e, 0x0a, 0xa3, 0x01, 0x53, 0x36, 0x28, 0x81, 0x8a, - 0x13, 0x45, 0x8e, 0x3c, 0x75, 0xbd, 0x5a, 0x0c, 0xbf, 0x69, 0x4a, 0x92, 0x1f, 0x5a, 0xa5, 0x9a, - 0x30, 0x67, 0x66, 0xff, 0x62, 0x35, 0x95, 0x4c, 0xc2, 0x8e, 0xd2, 0x63, 0x18, 0x14, 0x4e, 0x24, - 0xab, 0xe8, 0xfc, 0x25, 0x9e, 0x0d, 0xc8, 0xf6, 0x89, 0x22, 0xa7, 0x5a, 0xb0, 0x42, 0x9f, 0xb5, - 0x58, 0xe6, 0xb2, 0x4c, 0xb0, 0x11, 0xbb, 0xb3, 0xe3, 0x49, 0xa4, 0x36, 0xf3, 0xa1, 0x65, 0x23, - 0x36, 0xb9, 0x8b, 0x0a, 0x04, 0xcc, 0x2a, 0xed, 0xae, 0x40, 0xc0, 0xac, 0x4c, 0x09, 0x47, 0x3b, - 0x39, 0x47, 0xe6, 0x05, 0x64, 0xbf, 0xf6, 0x71, 0x48, 0xfe, 0x35, 0x0b, 0x4e, 0xb9, 0xd9, 0xb3, - 0x4f, 0xb1, 0x97, 0x39, 0x62, 0x50, 0x46, 0xef, 0xa3, 0x55, 0xa5, 0xce, 0xbb, 0x40, 0xb8, 0xbb, - 0x33, 0xa8, 0x01, 0x03, 0xae, 0xbf, 0x11, 0x08, 0x23, 0x66, 0xe6, 0x68, 0x9d, 0x5a, 0xf0, 0x37, - 0x02, 0xbd, 0x9a, 0xe9, 0x3f, 0xcc, 0xa8, 0xa3, 0x45, 0x38, 0x13, 0x09, 0x6f, 0xd3, 0x65, 0x37, - 0x4e, 0x82, 0xa8, 0xb3, 0xe8, 0xb6, 0xdc, 0x84, 0x19, 0x20, 0xe5, 0x99, 0x71, 0xaa, 0x1f, 0x70, - 0x0e, 0x1c, 0xe7, 0x3e, 0x85, 0x5e, 0x87, 0x21, 0x99, 0x6a, 0x5d, 0x2d, 0x62, 0x5f, 0xd8, 0x3d, - 0xff, 0xd5, 0x64, 0x5a, 0x15, 0x59, 0xd5, 0x92, 0x21, 0xfa, 0x9c, 0x05, 0x63, 0xfc, 0xf7, 0xe5, - 0x4e, 0x83, 0xa7, 0x30, 0xd5, 0x8a, 0x08, 0x2a, 0x5e, 0x4d, 0xd1, 0xd4, 0x1b, 0xd3, 0x74, 0x3b, - 0xce, 0xf0, 0xb6, 0xdf, 0x18, 0x86, 0xee, 0x53, 0x5a, 0xf4, 0x51, 0xa8, 0x45, 0x2a, 0x1b, 0xdd, - 0x2a, 0xc2, 0x7a, 0x90, 0xd3, 0x4d, 0x9c, 0x10, 0x2b, 0xcb, 0x4c, 0xe7, 0x9d, 0x6b, 0x8e, 0x74, - 0xff, 0x14, 0xeb, 0xc3, 0xdc, 0x02, 0x96, 0x9a, 0xe0, 0xaa, 0x0f, 0xea, 0x3a, 0x7e, 0x1d, 0x33, - 0x1e, 0x28, 0x82, 0xc1, 0x4d, 0xe2, 0x78, 0xc9, 0x66, 0x31, 0x67, 0x0a, 0x97, 0x19, 0xad, 0x6c, - 0x4e, 0x12, 0x6f, 0xc5, 0x82, 0x13, 0xda, 0x81, 0xa1, 0x4d, 0x3e, 0x1f, 0xc5, 0x96, 0x66, 0xe9, - 0xa8, 0x83, 0x9b, 0x9a, 0xe4, 0x7a, 0xf6, 0x89, 0x06, 0x2c, 0xd9, 0xb1, 0xf0, 0x1f, 0x23, 0x40, - 0x81, 0x4b, 0x92, 0xe2, 0xd2, 0xb1, 0xfa, 0x8f, 0x4e, 0xf8, 0x30, 0x8c, 0x44, 0xa4, 0x1e, 0xf8, - 0x75, 0xd7, 0x23, 0x8d, 0x69, 0x79, 0x5e, 0x70, 0x90, 0x24, 0x1e, 0xe6, 0x16, 0xc0, 0x06, 0x0d, - 0x9c, 0xa2, 0x88, 0x3e, 0x63, 0xc1, 0x98, 0x4a, 0x61, 0xa5, 0x1f, 0x84, 0x08, 0xff, 0xf4, 0x62, - 0x41, 0x09, 0xb3, 0x8c, 0xe6, 0x0c, 0xa2, 0x8b, 0x2c, 0xdd, 0x86, 0x33, 0x7c, 0xd1, 0xcb, 0x00, - 0xc1, 0x3a, 0x8f, 0xf1, 0x99, 0x4e, 0x84, 0xb3, 0xfa, 0x20, 0xaf, 0x3a, 0xc6, 0xb3, 0xf9, 0x24, - 0x05, 0x6c, 0x50, 0x43, 0x57, 0x01, 0xf8, 0xb2, 0x59, 0xeb, 0x84, 0x72, 0xdf, 0x23, 0xb3, 0xb0, - 0x60, 0x55, 0x41, 0xee, 0xee, 0x4e, 0x74, 0x3b, 0x0f, 0x59, 0x1c, 0x85, 0xf1, 0x38, 0xfa, 0x29, - 0x18, 0x8a, 0xdb, 0xad, 0x96, 0xa3, 0x5c, 0xd9, 0x05, 0xe6, 0x07, 0x72, 0xba, 0x86, 0x64, 0xe4, - 0x0d, 0x58, 0x72, 0x44, 0xb7, 0xa8, 0x8c, 0x17, 0xe2, 0x89, 0xaf, 0x22, 0x6e, 0xa2, 0x0c, 0xb3, - 0x77, 0x7a, 0xb7, 0xdc, 0x07, 0xe0, 0x1c, 0x9c, 0xbb, 0xbb, 0x13, 0x0f, 0xa5, 0xdb, 0x17, 0x03, - 0x91, 0xb1, 0x97, 0x4b, 0x13, 0x5d, 0x91, 0x85, 0x60, 0xe8, 0x6b, 0xcb, 0xfa, 0x04, 0x4f, 0xe9, - 0x42, 0x30, 0xac, 0xb9, 0xf7, 0x98, 0x99, 0x0f, 0xa3, 0x25, 0x38, 0x5d, 0x0f, 0xfc, 0x24, 0x0a, - 0x3c, 0x8f, 0x17, 0x42, 0xe2, 0x5b, 0x50, 0xee, 0xea, 0x7e, 0xbb, 0xe8, 0xf6, 0xe9, 0xd9, 0x6e, - 0x14, 0x9c, 0xf7, 0x9c, 0xed, 0xa7, 0x83, 0x1f, 0xc5, 0xe0, 0x3c, 0x07, 0x23, 0x64, 0x27, 0x21, - 0x91, 0xef, 0x78, 0xd7, 0xf1, 0xa2, 0x74, 0xf2, 0xb2, 0x35, 0x70, 0xd1, 0x68, 0xc7, 0x29, 0x2c, - 0x64, 0x2b, 0xbf, 0x8b, 0x91, 0x85, 0xca, 0xfd, 0x2e, 0xd2, 0xcb, 0x62, 0xff, 0xef, 0x52, 0xca, - 0x3e, 0x5c, 0x8b, 0x08, 0x41, 0x01, 0x54, 0xfc, 0xa0, 0xa1, 0x64, 0xff, 0x95, 0x62, 0x64, 0xff, - 0xb5, 0xa0, 0x61, 0x54, 0x8b, 0xa1, 0xff, 0x62, 0xcc, 0xf9, 0xb0, 0x72, 0x1a, 0xb2, 0xee, 0x08, - 0x03, 0x88, 0x7d, 0x4f, 0x91, 0x9c, 0x55, 0x39, 0x8d, 0x65, 0x93, 0x11, 0x4e, 0xf3, 0x45, 0x5b, - 0x50, 0xd9, 0x0c, 0xe2, 0x44, 0xee, 0x86, 0x8e, 0xb8, 0xf1, 0xba, 0x1c, 0xc4, 0x09, 0x33, 0x6a, - 0xd4, 0x6b, 0xd3, 0x96, 0x18, 0x73, 0x1e, 0xf6, 0x7f, 0xb1, 0x52, 0x2e, 0xfd, 0x9b, 0x2c, 0x10, - 0x78, 0x9b, 0xf8, 0x74, 0x59, 0x9b, 0x91, 0x4f, 0x3f, 0x9a, 0x49, 0xab, 0x7c, 0x47, 0xaf, 0x3a, - 0x5f, 0xb7, 0x29, 0x85, 0x49, 0x46, 0xc2, 0x08, 0x92, 0xfa, 0xb8, 0x95, 0x4e, 0x70, 0x2d, 0x15, - 0xb1, 0xdf, 0x31, 0x93, 0xbc, 0xf7, 0xcd, 0x95, 0xb5, 0xbf, 0x64, 0xc1, 0xd0, 0x8c, 0x53, 0xdf, - 0x0a, 0x36, 0x36, 0xd0, 0xd3, 0x50, 0x6d, 0xb4, 0x23, 0x33, 0xd7, 0x56, 0xf9, 0x31, 0xe6, 0x44, - 0x3b, 0x56, 0x18, 0x74, 0x0e, 0x6f, 0x38, 0x75, 0x99, 0xea, 0x5d, 0xe6, 0x73, 0xf8, 0x12, 0x6b, - 0xc1, 0x02, 0x82, 0x9e, 0x87, 0xe1, 0x96, 0xb3, 0x23, 0x1f, 0xce, 0x9e, 0x27, 0x2c, 0x69, 0x10, - 0x36, 0xf1, 0xec, 0x7f, 0x69, 0xc1, 0xf8, 0x8c, 0x13, 0xbb, 0xf5, 0xe9, 0x76, 0xb2, 0x39, 0xe3, - 0x26, 0xeb, 0xed, 0xfa, 0x16, 0x49, 0x78, 0x7e, 0x3f, 0xed, 0x65, 0x3b, 0xa6, 0x4b, 0x49, 0x6d, - 0x33, 0x55, 0x2f, 0xaf, 0x8b, 0x76, 0xac, 0x30, 0xd0, 0xeb, 0x30, 0x1c, 0x3a, 0x71, 0x7c, 0x3b, - 0x88, 0x1a, 0x98, 0x6c, 0x14, 0x53, 0x5d, 0x63, 0x95, 0xd4, 0x23, 0x92, 0x60, 0xb2, 0x21, 0xce, - 0xbc, 0x35, 0x7d, 0x6c, 0x32, 0xb3, 0xbf, 0x60, 0xc1, 0x23, 0x33, 0xc4, 0x89, 0x48, 0xc4, 0x8a, - 0x71, 0xa8, 0x17, 0x99, 0xf5, 0x82, 0x76, 0x03, 0xbd, 0x06, 0xd5, 0x84, 0x36, 0xd3, 0x6e, 0x59, - 0xc5, 0x76, 0x8b, 0x1d, 0x59, 0xaf, 0x09, 0xe2, 0x58, 0xb1, 0xb1, 0xff, 0xa6, 0x05, 0x23, 0xec, - 0xf4, 0x6f, 0x8e, 0x24, 0x8e, 0xeb, 0x75, 0xd5, 0xac, 0xb2, 0xfa, 0xac, 0x59, 0x75, 0x1e, 0x06, - 0x36, 0x83, 0x16, 0xc9, 0x9e, 0x5c, 0x5f, 0x0e, 0xe8, 0x2e, 0x9f, 0x42, 0xd0, 0xb3, 0xf4, 0xc3, - 0xbb, 0x7e, 0xe2, 0xd0, 0x25, 0x20, 0xbd, 0xcb, 0x27, 0xf8, 0x47, 0x57, 0xcd, 0xd8, 0xc4, 0xb1, - 0x7f, 0xbb, 0x06, 0x43, 0x22, 0xbc, 0xa1, 0xef, 0x1a, 0x0f, 0xd2, 0xdd, 0x50, 0xea, 0xe9, 0x6e, - 0x88, 0x61, 0xb0, 0xce, 0x8a, 0xe7, 0x09, 0x33, 0xf2, 0x6a, 0x21, 0xf1, 0x30, 0xbc, 0x1e, 0x9f, - 0xee, 0x16, 0xff, 0x8f, 0x05, 0x2b, 0xf4, 0x45, 0x0b, 0x4e, 0xd4, 0x03, 0xdf, 0x27, 0x75, 0x6d, - 0xe3, 0x0c, 0x14, 0x11, 0xf6, 0x30, 0x9b, 0x26, 0xaa, 0x8f, 0x9e, 0x32, 0x00, 0x9c, 0x65, 0x8f, - 0x5e, 0x84, 0x51, 0x3e, 0x66, 0x37, 0x52, 0x2e, 0x71, 0x5d, 0xca, 0xc8, 0x04, 0xe2, 0x34, 0x2e, - 0x9a, 0xe4, 0x47, 0x0b, 0xa2, 0x68, 0xd0, 0xa0, 0xf6, 0x1c, 0x1a, 0xe5, 0x82, 0x0c, 0x0c, 0x14, - 0x01, 0x8a, 0xc8, 0x46, 0x44, 0xe2, 0x4d, 0x11, 0xfe, 0xc1, 0xec, 0xab, 0xa1, 0xc3, 0xe5, 0x83, - 0xe3, 0x2e, 0x4a, 0x38, 0x87, 0x3a, 0xda, 0x12, 0xfb, 0xdd, 0x6a, 0x11, 0x32, 0x54, 0x7c, 0xe6, - 0x9e, 0xdb, 0xde, 0x09, 0xa8, 0xc4, 0x9b, 0x4e, 0xd4, 0x60, 0x76, 0x5d, 0x99, 0xe7, 0x20, 0xad, - 0xd2, 0x06, 0xcc, 0xdb, 0xd1, 0x1c, 0x9c, 0xcc, 0x14, 0x62, 0x8a, 0x85, 0xeb, 0x5a, 0xe5, 0x9b, - 0x64, 0x4a, 0x38, 0xc5, 0xb8, 0xeb, 0x09, 0xd3, 0x17, 0x32, 0xbc, 0x8f, 0x2f, 0xa4, 0xa3, 0x82, - 0x0c, 0xb9, 0x53, 0xf9, 0xa5, 0x42, 0x06, 0xa0, 0xaf, 0x88, 0xc2, 0xcf, 0x67, 0x22, 0x0a, 0x47, - 0x59, 0x07, 0x6e, 0x14, 0xd3, 0x81, 0x83, 0x87, 0x0f, 0xde, 0xcf, 0x70, 0xc0, 0xbf, 0xb0, 0x40, - 0x7e, 0xd7, 0x59, 0xa7, 0xbe, 0x49, 0xe8, 0x94, 0x41, 0xef, 0x85, 0x31, 0xb5, 0x85, 0x9e, 0x0d, - 0xda, 0x3e, 0x8f, 0x04, 0x2c, 0x6b, 0x57, 0x00, 0x4e, 0x41, 0x71, 0x06, 0x1b, 0x4d, 0x41, 0x8d, - 0x8e, 0x13, 0x7f, 0x94, 0xeb, 0x5a, 0xb5, 0x4d, 0x9f, 0x5e, 0x59, 0x10, 0x4f, 0x69, 0x1c, 0x14, - 0xc0, 0x29, 0xcf, 0x89, 0x13, 0xd6, 0x03, 0xba, 0xa3, 0x3e, 0x64, 0x35, 0x06, 0x96, 0xd4, 0xb0, - 0x98, 0x25, 0x84, 0xbb, 0x69, 0xdb, 0xdf, 0x1e, 0x80, 0xd1, 0x94, 0x64, 0x3c, 0xa0, 0x92, 0x7e, - 0x1a, 0xaa, 0x52, 0x6f, 0x66, 0xeb, 0xc6, 0x28, 0xe5, 0xaa, 0x30, 0xa8, 0xd2, 0x5a, 0xd7, 0x5a, - 0x35, 0x6b, 0x54, 0x18, 0x0a, 0x17, 0x9b, 0x78, 0x4c, 0x28, 0x27, 0x5e, 0x3c, 0xeb, 0xb9, 0xc4, - 0x4f, 0x78, 0x37, 0x8b, 0x11, 0xca, 0x6b, 0x8b, 0xab, 0x26, 0x51, 0x2d, 0x94, 0x33, 0x00, 0x9c, - 0x65, 0x8f, 0x3e, 0x6d, 0xc1, 0xa8, 0x73, 0x3b, 0xd6, 0x15, 0x5e, 0x45, 0xec, 0xe0, 0x11, 0x95, - 0x54, 0xaa, 0x68, 0x2c, 0xf7, 0x40, 0xa7, 0x9a, 0x70, 0x9a, 0x29, 0x7a, 0xd3, 0x02, 0x44, 0x76, - 0x48, 0x5d, 0x46, 0x37, 0x8a, 0xbe, 0x0c, 0x16, 0xb1, 0xd3, 0xbc, 0xd8, 0x45, 0x97, 0x4b, 0xf5, - 0xee, 0x76, 0x9c, 0xd3, 0x07, 0xfb, 0x9f, 0x95, 0xd5, 0x82, 0xd2, 0x01, 0xb5, 0x8e, 0x11, 0xd8, - 0x67, 0x1d, 0x3e, 0xb0, 0x4f, 0x07, 0x48, 0x74, 0x27, 0x79, 0xa6, 0x72, 0xc2, 0x4a, 0xf7, 0x29, - 0x27, 0xec, 0x93, 0x56, 0xaa, 0x42, 0xd2, 0xf0, 0x85, 0x97, 0x8b, 0x0d, 0xe6, 0x9d, 0xe4, 0xc1, - 0x1b, 0x19, 0xe9, 0x9e, 0x8e, 0xd9, 0xa1, 0xd2, 0xd4, 0x40, 0x3b, 0x90, 0x34, 0xfc, 0xf7, 0x65, - 0x18, 0x36, 0x34, 0x69, 0xae, 0x59, 0x64, 0x3d, 0x60, 0x66, 0x51, 0xe9, 0x00, 0x66, 0xd1, 0x4f, - 0x43, 0xad, 0x2e, 0xa5, 0x7c, 0x31, 0x35, 0x82, 0xb3, 0xba, 0x43, 0x0b, 0x7a, 0xd5, 0x84, 0x35, - 0x4f, 0x34, 0x9f, 0xca, 0x24, 0x12, 0x1a, 0x62, 0x80, 0x69, 0x88, 0xbc, 0x54, 0x1f, 0xa1, 0x29, - 0xba, 0x9f, 0x61, 0x85, 0xb4, 0x42, 0x57, 0xbc, 0x97, 0x0c, 0xb9, 0xe7, 0x85, 0xb4, 0x56, 0x16, - 0x64, 0x33, 0x36, 0x71, 0xec, 0x6f, 0x5b, 0xea, 0xe3, 0xde, 0x83, 0x92, 0x11, 0xb7, 0xd2, 0x25, - 0x23, 0x2e, 0x16, 0x32, 0xcc, 0x3d, 0x6a, 0x45, 0x5c, 0x83, 0xa1, 0xd9, 0xa0, 0xd5, 0x72, 0xfc, - 0x06, 0xfa, 0x21, 0x18, 0xaa, 0xf3, 0x9f, 0xc2, 0xb1, 0xc3, 0x4e, 0x2b, 0x05, 0x14, 0x4b, 0x18, - 0x7a, 0x14, 0x06, 0x9c, 0xa8, 0x29, 0x9d, 0x39, 0x2c, 0xd6, 0x67, 0x3a, 0x6a, 0xc6, 0x98, 0xb5, - 0xda, 0xff, 0x68, 0x00, 0xd8, 0x11, 0xbb, 0x13, 0x91, 0xc6, 0x5a, 0xc0, 0x6a, 0x14, 0x1e, 0xeb, - 0x19, 0x9f, 0xde, 0x2c, 0x3d, 0xc8, 0xe7, 0x7c, 0xc6, 0x59, 0x4f, 0xf9, 0x5e, 0x9f, 0xf5, 0xe4, - 0x1f, 0xdf, 0x0d, 0x3c, 0x40, 0xc7, 0x77, 0xf6, 0xe7, 0x2c, 0x40, 0x2a, 0x2e, 0x43, 0x9f, 0xaf, - 0x4f, 0x41, 0x4d, 0x45, 0x68, 0x08, 0xc3, 0x4a, 0x8b, 0x08, 0x09, 0xc0, 0x1a, 0xa7, 0x8f, 0x1d, - 0xf2, 0x13, 0x52, 0x7e, 0x97, 0xd3, 0x61, 0xc2, 0x4c, 0xea, 0x0b, 0x71, 0x6e, 0xff, 0x4e, 0x09, - 0x1e, 0xe2, 0x2a, 0x79, 0xc9, 0xf1, 0x9d, 0x26, 0x69, 0xd1, 0x5e, 0xf5, 0x1b, 0x31, 0x51, 0xa7, - 0x5b, 0x33, 0x57, 0x86, 0xfd, 0x1e, 0x75, 0xed, 0xf2, 0x35, 0xc7, 0x57, 0xd9, 0x82, 0xef, 0x26, - 0x98, 0x11, 0x47, 0x31, 0x54, 0x65, 0x01, 0x7d, 0x21, 0x8b, 0x0b, 0x62, 0xa4, 0xc4, 0x92, 0xd0, - 0x9b, 0x04, 0x2b, 0x46, 0xd4, 0x70, 0xf5, 0x82, 0xfa, 0x16, 0x26, 0x61, 0xc0, 0xe4, 0xae, 0x11, - 0x75, 0xb9, 0x28, 0xda, 0xb1, 0xc2, 0xb0, 0x7f, 0xc7, 0x82, 0xac, 0x46, 0x32, 0x8a, 0xc1, 0x59, - 0x7b, 0x16, 0x83, 0x3b, 0x40, 0x35, 0xb6, 0x9f, 0x84, 0x61, 0x27, 0xa1, 0x46, 0x04, 0xdf, 0x76, - 0x97, 0x0f, 0x77, 0xac, 0xb1, 0x14, 0x34, 0xdc, 0x0d, 0x97, 0x6d, 0xb7, 0x4d, 0x72, 0xf6, 0x9b, - 0x16, 0xd4, 0xe6, 0xa2, 0xce, 0xc1, 0xd3, 0x1d, 0xba, 0x93, 0x19, 0x4a, 0x07, 0x4a, 0x66, 0x90, - 0xe9, 0x12, 0xe5, 0x5e, 0xe9, 0x12, 0xf6, 0xff, 0x18, 0x80, 0x53, 0x5d, 0x79, 0x33, 0xe8, 0x05, - 0x18, 0xa9, 0x8b, 0x99, 0x1b, 0x4a, 0x5f, 0x5b, 0xcd, 0x0c, 0x20, 0xd4, 0x30, 0x9c, 0xc2, 0xec, - 0x63, 0xed, 0x2c, 0xc0, 0xe9, 0x88, 0xbc, 0xd6, 0x26, 0x6d, 0x32, 0xbd, 0x91, 0x90, 0x68, 0x95, - 0xd4, 0x03, 0xbf, 0xc1, 0xab, 0x29, 0x96, 0x67, 0x1e, 0xbe, 0xb3, 0x3b, 0x71, 0x1a, 0x77, 0x83, - 0x71, 0xde, 0x33, 0x28, 0x84, 0x51, 0xcf, 0x34, 0x4f, 0xc5, 0xde, 0xe4, 0x50, 0x96, 0xad, 0x32, - 0x5f, 0x52, 0xcd, 0x38, 0xcd, 0x20, 0x6d, 0xe3, 0x56, 0xee, 0x93, 0x8d, 0xfb, 0x29, 0x6d, 0xe3, - 0xf2, 0x48, 0x85, 0x0f, 0x16, 0x9c, 0x37, 0x75, 0xdc, 0x46, 0xee, 0x4b, 0x50, 0x95, 0x51, 0x5c, - 0x7d, 0x45, 0x3f, 0x99, 0x74, 0x7a, 0x08, 0xdb, 0x27, 0xe1, 0x07, 0x2f, 0x46, 0x91, 0x31, 0x98, - 0xd7, 0x82, 0x64, 0xda, 0xf3, 0x82, 0xdb, 0xd4, 0x7e, 0xb8, 0x1e, 0x13, 0xe1, 0xfc, 0xb1, 0xef, - 0x96, 0x20, 0x67, 0x1f, 0x45, 0xd7, 0xa4, 0x36, 0x5a, 0x52, 0x6b, 0xf2, 0x60, 0x86, 0x0b, 0xda, - 0xe1, 0x91, 0x6e, 0x5c, 0x3d, 0x7f, 0xa0, 0xe8, 0x7d, 0xa0, 0x0e, 0x7e, 0x53, 0x69, 0x27, 0x2a, - 0x00, 0xee, 0x02, 0x80, 0xb6, 0x35, 0x45, 0x52, 0x81, 0x3a, 0xb9, 0xd6, 0x26, 0x29, 0x36, 0xb0, - 0xd0, 0xf3, 0x30, 0xec, 0xfa, 0x71, 0xe2, 0x78, 0xde, 0x65, 0xd7, 0x4f, 0x84, 0x7f, 0x53, 0xd9, - 0x21, 0x0b, 0x1a, 0x84, 0x4d, 0xbc, 0x73, 0xef, 0x36, 0xbe, 0xdf, 0x41, 0xbe, 0xfb, 0x26, 0x3c, - 0x32, 0xef, 0x26, 0x2a, 0x15, 0x46, 0xcd, 0x37, 0x6a, 0x4a, 0x2a, 0x59, 0x65, 0xf5, 0x4c, 0xed, - 0x32, 0x52, 0x51, 0x4a, 0xe9, 0xcc, 0x99, 0x6c, 0x2a, 0x8a, 0xfd, 0x02, 0x9c, 0x99, 0x77, 0x93, - 0x4b, 0xae, 0x47, 0x0e, 0xc8, 0xc4, 0xfe, 0xad, 0x41, 0x18, 0x31, 0x93, 0x29, 0x0f, 0x22, 0xae, - 0xbf, 0x40, 0xad, 0x45, 0xf1, 0x76, 0xae, 0x3a, 0xf7, 0xbb, 0x79, 0xe4, 0xcc, 0xce, 0xfc, 0x11, - 0x33, 0x0c, 0x46, 0xcd, 0x13, 0x9b, 0x1d, 0x40, 0xb7, 0xa1, 0xb2, 0xc1, 0x52, 0x25, 0xca, 0x45, - 0x04, 0x47, 0xe4, 0x8d, 0xa8, 0x5e, 0x8e, 0x3c, 0xd9, 0x82, 0xf3, 0xa3, 0x4a, 0x3e, 0x4a, 0xe7, - 0xdf, 0x19, 0xe1, 0xbd, 0x42, 0x59, 0x29, 0x8c, 0x5e, 0x2a, 0xa1, 0x72, 0x08, 0x95, 0x90, 0x12, - 0xd0, 0x83, 0xf7, 0x49, 0x40, 0xb3, 0xb4, 0x97, 0x64, 0x93, 0x99, 0xa0, 0x22, 0x1f, 0x61, 0x88, - 0x0d, 0x82, 0x91, 0xf6, 0x92, 0x02, 0xe3, 0x2c, 0x3e, 0xfa, 0x98, 0x12, 0xf1, 0xd5, 0x22, 0x5c, - 0xc3, 0xe6, 0x8c, 0x3e, 0x6e, 0xe9, 0xfe, 0xb9, 0x12, 0x8c, 0xcd, 0xfb, 0xed, 0x95, 0xf9, 0x95, - 0xf6, 0xba, 0xe7, 0xd6, 0xaf, 0x92, 0x0e, 0x15, 0xe1, 0x5b, 0xa4, 0xb3, 0x30, 0x27, 0x56, 0x90, - 0x9a, 0x33, 0x57, 0x69, 0x23, 0xe6, 0x30, 0x2a, 0x8c, 0x36, 0x5c, 0xbf, 0x49, 0xa2, 0x30, 0x72, - 0x85, 0xd7, 0xd6, 0x10, 0x46, 0x97, 0x34, 0x08, 0x9b, 0x78, 0x94, 0x76, 0x70, 0xdb, 0x27, 0x51, - 0xd6, 0x16, 0x5f, 0xa6, 0x8d, 0x98, 0xc3, 0x28, 0x52, 0x12, 0xb5, 0xe3, 0x44, 0x4c, 0x46, 0x85, - 0xb4, 0x46, 0x1b, 0x31, 0x87, 0xd1, 0x95, 0x1e, 0xb7, 0xd7, 0x59, 0xec, 0x49, 0x26, 0xf9, 0x61, - 0x95, 0x37, 0x63, 0x09, 0xa7, 0xa8, 0x5b, 0xa4, 0x33, 0x47, 0x37, 0xee, 0x99, 0x1c, 0xa8, 0xab, - 0xbc, 0x19, 0x4b, 0x38, 0x2b, 0x17, 0x99, 0x1e, 0x8e, 0xef, 0xb9, 0x72, 0x91, 0xe9, 0xee, 0xf7, - 0x70, 0x01, 0xfc, 0x8a, 0x05, 0x23, 0x66, 0xc4, 0x18, 0x6a, 0x66, 0xcc, 0xf4, 0xe5, 0xae, 0x6a, - 0xc3, 0x3f, 0x9e, 0x77, 0x55, 0x5b, 0xd3, 0x4d, 0x82, 0x30, 0x7e, 0x86, 0xf8, 0x4d, 0xd7, 0x27, - 0x2c, 0x10, 0x80, 0x47, 0x9a, 0xa5, 0xc2, 0xd1, 0x66, 0x83, 0x06, 0x39, 0x84, 0x9d, 0x6f, 0xdf, - 0x84, 0x53, 0x5d, 0x89, 0x6f, 0x7d, 0x98, 0x20, 0xfb, 0xa6, 0x1d, 0xdb, 0x18, 0x86, 0x29, 0x61, - 0x59, 0xb2, 0x68, 0x16, 0x4e, 0xf1, 0x85, 0x44, 0x39, 0xad, 0xd6, 0x37, 0x49, 0x4b, 0x25, 0x33, - 0xb2, 0x23, 0x82, 0x1b, 0x59, 0x20, 0xee, 0xc6, 0xb7, 0x3f, 0x6f, 0xc1, 0x68, 0x2a, 0x17, 0xb1, - 0x20, 0x63, 0x89, 0xad, 0xb4, 0x80, 0x05, 0x30, 0xb2, 0xa0, 0xf2, 0x32, 0x53, 0xa6, 0x7a, 0xa5, - 0x69, 0x10, 0x36, 0xf1, 0xec, 0x2f, 0x95, 0xa0, 0x2a, 0x83, 0x40, 0xfa, 0xe8, 0xca, 0x67, 0x2d, - 0x18, 0x55, 0xc7, 0x32, 0xcc, 0xdf, 0x57, 0x2a, 0x22, 0x71, 0x84, 0xf6, 0x40, 0x79, 0x0c, 0xfc, - 0x8d, 0x40, 0x5b, 0xee, 0xd8, 0x64, 0x86, 0xd3, 0xbc, 0xd1, 0x0d, 0x80, 0xb8, 0x13, 0x27, 0xa4, - 0x65, 0x78, 0x1e, 0x6d, 0x63, 0xc5, 0x4d, 0xd6, 0x83, 0x88, 0xd0, 0xf5, 0x75, 0x2d, 0x68, 0x90, - 0x55, 0x85, 0xa9, 0x4d, 0x28, 0xdd, 0x86, 0x0d, 0x4a, 0xf6, 0x3f, 0x28, 0xc1, 0xc9, 0x6c, 0x97, - 0xd0, 0x07, 0x61, 0x44, 0x72, 0x37, 0x6e, 0x9d, 0x93, 0x91, 0x2f, 0x23, 0xd8, 0x80, 0xdd, 0xdd, - 0x9d, 0x98, 0xe8, 0xbe, 0xf6, 0x6f, 0xd2, 0x44, 0xc1, 0x29, 0x62, 0xfc, 0x6c, 0x4c, 0x1c, 0xe2, - 0xce, 0x74, 0xa6, 0xc3, 0x50, 0x1c, 0x70, 0x19, 0x67, 0x63, 0x26, 0x14, 0x67, 0xb0, 0xd1, 0x0a, - 0x9c, 0x31, 0x5a, 0xae, 0x11, 0xb7, 0xb9, 0xb9, 0x1e, 0x44, 0x72, 0x07, 0xf6, 0xa8, 0x8e, 0x4d, - 0xeb, 0xc6, 0xc1, 0xb9, 0x4f, 0x52, 0x6d, 0x5f, 0x77, 0x42, 0xa7, 0xee, 0x26, 0x1d, 0xe1, 0x4a, - 0x55, 0xb2, 0x69, 0x56, 0xb4, 0x63, 0x85, 0x61, 0x5f, 0x85, 0x1a, 0x0f, 0xd9, 0x25, 0x6b, 0x41, - 0xce, 0x0e, 0xd7, 0x3a, 0xc8, 0x0e, 0xd7, 0x5e, 0x82, 0x81, 0x3e, 0xa7, 0x63, 0x5f, 0xdb, 0x88, - 0x97, 0xa0, 0x4a, 0xc9, 0x49, 0x5b, 0xb1, 0x08, 0x92, 0x01, 0x54, 0xe5, 0xd5, 0x32, 0xc8, 0x86, - 0xb2, 0xeb, 0xc8, 0xb3, 0x4c, 0x35, 0x46, 0x0b, 0x71, 0xdc, 0x66, 0x4e, 0x03, 0x0a, 0x44, 0x4f, - 0x40, 0x99, 0xec, 0x84, 0xd9, 0x43, 0xcb, 0x8b, 0x3b, 0xa1, 0x1b, 0x91, 0x98, 0x22, 0x91, 0x9d, - 0x10, 0x9d, 0x83, 0x92, 0xdb, 0x10, 0x1a, 0x0f, 0x04, 0x4e, 0x69, 0x61, 0x0e, 0x97, 0xdc, 0x86, - 0xbd, 0x03, 0x35, 0x75, 0x97, 0x0d, 0xda, 0x92, 0x8a, 0xc0, 0x2a, 0x22, 0x04, 0x4c, 0xd2, 0xed, - 0xa1, 0x02, 0xda, 0x00, 0x3a, 0xc3, 0xb3, 0x28, 0x61, 0x75, 0x1e, 0x06, 0xea, 0x81, 0xc8, 0x3e, - 0xaf, 0x6a, 0x32, 0x4c, 0x03, 0x30, 0x88, 0x7d, 0x13, 0xc6, 0xae, 0xfa, 0xc1, 0x6d, 0x56, 0x88, - 0x9f, 0xd5, 0x9d, 0xa3, 0x84, 0x37, 0xe8, 0x8f, 0xac, 0xbd, 0xc1, 0xa0, 0x98, 0xc3, 0x54, 0x41, - 0xae, 0x52, 0xaf, 0x82, 0x5c, 0xf6, 0xc7, 0x2d, 0x18, 0x51, 0xa9, 0x62, 0xf3, 0xdb, 0x5b, 0x94, - 0x6e, 0x33, 0x0a, 0xda, 0x61, 0x96, 0x2e, 0xbb, 0x6d, 0x0a, 0x73, 0x98, 0x99, 0x43, 0x59, 0xda, - 0x27, 0x87, 0xf2, 0x3c, 0x0c, 0x6c, 0xb9, 0x7e, 0x23, 0xeb, 0x9f, 0xb9, 0xea, 0xfa, 0x0d, 0xcc, - 0x20, 0xb4, 0x0b, 0x27, 0x55, 0x17, 0xa4, 0x76, 0x79, 0x01, 0x46, 0xd6, 0xdb, 0xae, 0xd7, 0x90, - 0x05, 0xf5, 0x32, 0xee, 0x99, 0x19, 0x03, 0x86, 0x53, 0x98, 0x74, 0x93, 0xb8, 0xee, 0xfa, 0x4e, - 0xd4, 0x59, 0xd1, 0xea, 0x4c, 0x49, 0xb8, 0x19, 0x05, 0xc1, 0x06, 0x96, 0xfd, 0x46, 0x19, 0xc6, - 0xd2, 0x09, 0x73, 0x7d, 0xec, 0xd5, 0x9e, 0x80, 0x0a, 0xcb, 0xa1, 0xcb, 0x7e, 0x5a, 0x5e, 0x83, - 0x8e, 0xc3, 0x50, 0x0c, 0x83, 0x7c, 0x39, 0x17, 0x73, 0xf5, 0x90, 0xea, 0xa4, 0x72, 0xea, 0xb0, - 0xf8, 0x3a, 0x21, 0x41, 0x04, 0x2b, 0xf4, 0x69, 0x0b, 0x86, 0x82, 0xd0, 0x2c, 0xe4, 0xf4, 0x81, - 0x22, 0x93, 0x09, 0x45, 0x2e, 0x93, 0x30, 0xaf, 0xd5, 0xa7, 0x97, 0x9f, 0x43, 0xb2, 0x3e, 0xf7, - 0x1e, 0x18, 0x31, 0x31, 0xf7, 0xb3, 0xb0, 0xab, 0xa6, 0x85, 0xfd, 0x59, 0x73, 0x52, 0x88, 0x74, - 0xc9, 0x3e, 0x96, 0xdb, 0x75, 0xa8, 0xd4, 0x55, 0x40, 0xc4, 0xa1, 0xca, 0xb0, 0xaa, 0x72, 0x18, - 0xec, 0x50, 0x8c, 0x53, 0xb3, 0xbf, 0x6d, 0x19, 0xf3, 0x03, 0x93, 0x78, 0xa1, 0x81, 0x22, 0x28, - 0x37, 0xb7, 0xb7, 0x84, 0x5d, 0x7b, 0xa5, 0xa0, 0xe1, 0x9d, 0xdf, 0xde, 0xd2, 0x73, 0xdc, 0x6c, - 0xc5, 0x94, 0x59, 0x1f, 0x9e, 0xc7, 0x54, 0x56, 0x6d, 0x79, 0xff, 0xac, 0x5a, 0xfb, 0xcd, 0x12, - 0x9c, 0xea, 0x9a, 0x54, 0xe8, 0x75, 0xa8, 0x44, 0xf4, 0x2d, 0xc5, 0xeb, 0x2d, 0x16, 0x96, 0x07, - 0x1b, 0x2f, 0x34, 0xb4, 0xde, 0x4b, 0xb7, 0x63, 0xce, 0x12, 0x5d, 0x01, 0xa4, 0xc3, 0x76, 0x94, - 0xdb, 0x93, 0xbf, 0xf2, 0x39, 0xf1, 0x28, 0x9a, 0xee, 0xc2, 0xc0, 0x39, 0x4f, 0xa1, 0x17, 0xb3, - 0xde, 0xd3, 0x72, 0xfa, 0x1c, 0x77, 0x2f, 0x47, 0xa8, 0xfd, 0xcf, 0x4b, 0x30, 0x9a, 0xaa, 0xab, - 0x85, 0x3c, 0xa8, 0x12, 0x8f, 0x1d, 0x72, 0x48, 0x65, 0x73, 0xd4, 0x32, 0xd5, 0x4a, 0x41, 0x5e, - 0x14, 0x74, 0xb1, 0xe2, 0xf0, 0x60, 0x04, 0x1b, 0xbc, 0x00, 0x23, 0xb2, 0x43, 0x1f, 0x70, 0x5a, - 0x9e, 0x18, 0x40, 0x35, 0x47, 0x2f, 0x1a, 0x30, 0x9c, 0xc2, 0xb4, 0x7f, 0xb7, 0x0c, 0xe3, 0xfc, - 0x54, 0xa8, 0xa1, 0x66, 0xde, 0x92, 0xdc, 0xbc, 0xfd, 0x55, 0x5d, 0xfd, 0x8e, 0x0f, 0xe4, 0xfa, - 0x51, 0x6f, 0x85, 0xc8, 0x67, 0xd4, 0x57, 0xa4, 0xda, 0x57, 0x33, 0x91, 0x6a, 0xdc, 0x86, 0x6f, - 0x1e, 0x53, 0x8f, 0xbe, 0xb7, 0x42, 0xd7, 0xfe, 0x6e, 0x09, 0x4e, 0x64, 0xae, 0xdc, 0x40, 0x6f, - 0xa4, 0xab, 0x34, 0x5b, 0x45, 0x38, 0xe8, 0xf7, 0xbc, 0x85, 0xe1, 0x60, 0xb5, 0x9a, 0xef, 0xd3, - 0x52, 0xb1, 0xff, 0xb0, 0x04, 0x63, 0xe9, 0xbb, 0x42, 0x1e, 0xc0, 0x91, 0x7a, 0x27, 0xd4, 0x58, - 0x39, 0x7c, 0x76, 0x07, 0x2a, 0xf7, 0xef, 0xf3, 0xca, 0xe3, 0xb2, 0x11, 0x6b, 0xf8, 0x03, 0x51, - 0x02, 0xdb, 0xfe, 0x7b, 0x16, 0x9c, 0xe5, 0x6f, 0x99, 0x9d, 0x87, 0x7f, 0x2d, 0x6f, 0x74, 0x5f, - 0x29, 0xb6, 0x83, 0x99, 0xaa, 0x8d, 0xfb, 0x8d, 0x2f, 0xbb, 0x7b, 0x51, 0xf4, 0x36, 0x3d, 0x15, - 0x1e, 0xc0, 0xce, 0x1e, 0x68, 0x32, 0xd8, 0x7f, 0x58, 0x06, 0x7d, 0xdd, 0x24, 0x72, 0x45, 0xce, - 0x67, 0x21, 0xd5, 0x2b, 0x57, 0x3b, 0x7e, 0x5d, 0x5f, 0x6c, 0x59, 0xcd, 0xa4, 0x7c, 0xfe, 0x9c, - 0x05, 0xc3, 0xae, 0xef, 0x26, 0xae, 0xc3, 0xf6, 0xe4, 0xc5, 0x5c, 0x85, 0xa7, 0xd8, 0x2d, 0x70, - 0xca, 0x41, 0x64, 0x1e, 0x0a, 0x29, 0x66, 0xd8, 0xe4, 0x8c, 0x3e, 0x2c, 0x82, 0xc9, 0xcb, 0x85, - 0x25, 0x4f, 0x57, 0x33, 0x11, 0xe4, 0x21, 0x35, 0xbc, 0x92, 0xa8, 0xa0, 0x9a, 0x03, 0x98, 0x92, - 0x52, 0x85, 0x90, 0xf5, 0xc5, 0xdf, 0xb4, 0x19, 0x73, 0x46, 0x76, 0x0c, 0xa8, 0x7b, 0x2c, 0x0e, - 0x18, 0xa8, 0x3b, 0x05, 0x35, 0xa7, 0x9d, 0x04, 0x2d, 0x3a, 0x4c, 0xe2, 0xdc, 0x4a, 0x87, 0x22, - 0x4b, 0x00, 0xd6, 0x38, 0xf6, 0x1b, 0x15, 0xc8, 0x24, 0x61, 0xa2, 0x1d, 0xf3, 0xaa, 0x54, 0xab, - 0xd8, 0xab, 0x52, 0x55, 0x67, 0xf2, 0xae, 0x4b, 0x45, 0x4d, 0xa8, 0x84, 0x9b, 0x4e, 0x2c, 0xcd, - 0xea, 0x97, 0xd4, 0x3e, 0x8e, 0x36, 0xde, 0xdd, 0x9d, 0xf8, 0x89, 0xfe, 0x5c, 0xb8, 0x74, 0xae, - 0x4e, 0xf1, 0xea, 0x32, 0x9a, 0x35, 0xa3, 0x81, 0x39, 0xfd, 0x83, 0x5c, 0x06, 0xf8, 0x09, 0x51, - 0xf7, 0x1f, 0x93, 0xb8, 0xed, 0x25, 0x62, 0x36, 0xbc, 0x54, 0xe0, 0x2a, 0xe3, 0x84, 0x75, 0x35, - 0x03, 0xfe, 0x1f, 0x1b, 0x4c, 0xd1, 0x07, 0xa1, 0x16, 0x27, 0x4e, 0x94, 0x1c, 0x32, 0xe1, 0x57, - 0x0d, 0xfa, 0xaa, 0x24, 0x82, 0x35, 0x3d, 0xf4, 0x32, 0x2b, 0xe6, 0xeb, 0xc6, 0x9b, 0x87, 0xcc, - 0x01, 0x91, 0x85, 0x7f, 0x05, 0x05, 0x6c, 0x50, 0x43, 0x17, 0x00, 0xd8, 0xdc, 0xe6, 0x81, 0x8f, - 0x55, 0xe6, 0x65, 0x52, 0xa2, 0x10, 0x2b, 0x08, 0x36, 0xb0, 0xec, 0x1f, 0x81, 0x74, 0x39, 0x0e, - 0x34, 0x21, 0xab, 0x7f, 0x70, 0x97, 0x36, 0xcb, 0xe5, 0x48, 0x15, 0xea, 0xf8, 0x0d, 0x0b, 0xcc, - 0x9a, 0x21, 0xe8, 0x35, 0x5e, 0x9c, 0xc4, 0x2a, 0xe2, 0x18, 0xd2, 0xa0, 0x3b, 0xb9, 0xe4, 0x84, - 0x99, 0xf3, 0x70, 0x59, 0xa1, 0xe4, 0xdc, 0xbb, 0xa1, 0x2a, 0xa1, 0x07, 0x32, 0xea, 0x3e, 0x06, - 0xa7, 0xb3, 0x17, 0xc9, 0x8b, 0x23, 0xac, 0xfd, 0x5d, 0x3f, 0xd2, 0x9f, 0x53, 0xea, 0xe5, 0xcf, - 0xe9, 0xe3, 0xc2, 0xdc, 0xdf, 0xb4, 0xe0, 0xfc, 0x7e, 0xf7, 0xdd, 0xa3, 0x47, 0x61, 0xe0, 0xb6, - 0x13, 0xc9, 0x2a, 0xeb, 0x4c, 0x50, 0xde, 0x74, 0x22, 0x1f, 0xb3, 0x56, 0xd4, 0x81, 0x41, 0x1e, - 0x1d, 0x27, 0xac, 0xf5, 0x97, 0x8a, 0xbd, 0x7d, 0xff, 0x2a, 0x31, 0xb6, 0x0b, 0x3c, 0x32, 0x0f, - 0x0b, 0x86, 0xf6, 0x77, 0x2c, 0x40, 0xcb, 0xdb, 0x24, 0x8a, 0xdc, 0x86, 0x11, 0xcf, 0xc7, 0xee, - 0xcf, 0x31, 0xee, 0xc9, 0x31, 0x53, 0x7e, 0x33, 0xf7, 0xe7, 0x18, 0xff, 0xf2, 0xef, 0xcf, 0x29, - 0x1d, 0xec, 0xfe, 0x1c, 0xb4, 0x0c, 0x67, 0x5b, 0x7c, 0xbb, 0xc1, 0xef, 0xa4, 0xe0, 0x7b, 0x0f, - 0x95, 0x60, 0xf7, 0xc8, 0x9d, 0xdd, 0x89, 0xb3, 0x4b, 0x79, 0x08, 0x38, 0xff, 0x39, 0xfb, 0xdd, - 0x80, 0x78, 0x18, 0xdf, 0x6c, 0x5e, 0xe0, 0x53, 0x4f, 0xf7, 0x8b, 0xfd, 0x95, 0x0a, 0x9c, 0xc8, - 0xd4, 0xe0, 0xa5, 0x5b, 0xbd, 0xee, 0x48, 0xab, 0x23, 0xeb, 0xef, 0xee, 0xee, 0xf5, 0x15, 0xbb, - 0xe5, 0x43, 0xc5, 0xf5, 0xc3, 0x76, 0x52, 0x4c, 0x4e, 0x2d, 0xef, 0xc4, 0x02, 0x25, 0x68, 0xb8, - 0x8b, 0xe9, 0x5f, 0xcc, 0xd9, 0x14, 0x19, 0x09, 0x96, 0x32, 0xc6, 0x07, 0xee, 0x93, 0x3b, 0xe0, - 0x13, 0x3a, 0x2e, 0xab, 0x52, 0x84, 0x63, 0x31, 0x33, 0x59, 0x8e, 0xfb, 0xdc, 0xfe, 0xd7, 0x4b, - 0x30, 0x6c, 0x7c, 0x34, 0xf4, 0xcb, 0xe9, 0x8a, 0x5a, 0x56, 0x71, 0xaf, 0xc4, 0xe8, 0x4f, 0xea, - 0x9a, 0x59, 0xfc, 0x95, 0x9e, 0xec, 0x2e, 0xa6, 0x75, 0x77, 0x77, 0xe2, 0x64, 0xa6, 0x5c, 0x56, - 0xaa, 0xc0, 0xd6, 0xb9, 0x8f, 0xc2, 0x89, 0x0c, 0x99, 0x9c, 0x57, 0x5e, 0x33, 0x5f, 0xf9, 0xc8, - 0x6e, 0x29, 0x73, 0xc8, 0xbe, 0x41, 0x87, 0x4c, 0xa4, 0x15, 0x06, 0x1e, 0xe9, 0xc3, 0x07, 0x9b, - 0xc9, 0x1e, 0x2e, 0xf5, 0x99, 0x3d, 0xfc, 0x14, 0x54, 0xc3, 0xc0, 0x73, 0xeb, 0xae, 0x2a, 0x3b, - 0xc9, 0xf2, 0x95, 0x57, 0x44, 0x1b, 0x56, 0x50, 0x74, 0x1b, 0x6a, 0xb7, 0x6e, 0x27, 0xfc, 0xf4, - 0x47, 0xf8, 0xb7, 0x8b, 0x3a, 0xf4, 0x51, 0x46, 0x8b, 0x3a, 0x5e, 0xc2, 0x9a, 0x17, 0xb2, 0x61, - 0x90, 0x29, 0x41, 0x99, 0x0a, 0xc1, 0x7c, 0xef, 0x4c, 0x3b, 0xc6, 0x58, 0x40, 0xec, 0xaf, 0xd7, - 0xe0, 0x4c, 0x5e, 0x21, 0x74, 0xf4, 0x11, 0x18, 0xe4, 0x7d, 0x2c, 0xe6, 0xae, 0x8d, 0x3c, 0x1e, - 0xf3, 0x8c, 0xa0, 0xe8, 0x16, 0xfb, 0x8d, 0x05, 0x4f, 0xc1, 0xdd, 0x73, 0xd6, 0xc5, 0x0c, 0x39, - 0x1e, 0xee, 0x8b, 0x8e, 0xe6, 0xbe, 0xe8, 0x70, 0xee, 0x9e, 0xb3, 0x8e, 0x76, 0xa0, 0xd2, 0x74, - 0x13, 0xe2, 0x08, 0x27, 0xc2, 0xcd, 0x63, 0x61, 0x4e, 0x1c, 0x6e, 0xa5, 0xb1, 0x9f, 0x98, 0x33, - 0x44, 0x5f, 0xb3, 0xe0, 0xc4, 0x7a, 0xba, 0x54, 0x80, 0x10, 0x9e, 0xce, 0x31, 0x14, 0xbb, 0x4f, - 0x33, 0xe2, 0x17, 0x48, 0x65, 0x1a, 0x71, 0xb6, 0x3b, 0xe8, 0x53, 0x16, 0x0c, 0x6d, 0xb8, 0x9e, - 0x51, 0xf7, 0xf8, 0x18, 0x3e, 0xce, 0x25, 0xc6, 0x40, 0xef, 0x38, 0xf8, 0xff, 0x18, 0x4b, 0xce, - 0xbd, 0x34, 0xd5, 0xe0, 0x51, 0x35, 0xd5, 0xd0, 0x7d, 0xd2, 0x54, 0x9f, 0xb1, 0xa0, 0xa6, 0x46, - 0x5a, 0xa4, 0x7f, 0x7f, 0xf0, 0x18, 0x3f, 0x39, 0xf7, 0x9c, 0xa8, 0xbf, 0x58, 0x33, 0x47, 0x5f, - 0xb4, 0x60, 0xd8, 0x79, 0xbd, 0x1d, 0x91, 0x06, 0xd9, 0x0e, 0xc2, 0x58, 0x14, 0x10, 0x7b, 0xa5, - 0xf8, 0xce, 0x4c, 0x53, 0x26, 0x73, 0x64, 0x7b, 0x39, 0x8c, 0x45, 0x9a, 0x96, 0x6e, 0xc0, 0x66, - 0x17, 0xec, 0xdd, 0x12, 0x4c, 0xec, 0x43, 0x01, 0xbd, 0x00, 0x23, 0x41, 0xd4, 0x74, 0x7c, 0xf7, - 0x75, 0xb3, 0xf6, 0x87, 0xb2, 0xb2, 0x96, 0x0d, 0x18, 0x4e, 0x61, 0x9a, 0x09, 0xea, 0xa5, 0x7d, - 0x12, 0xd4, 0xcf, 0xc3, 0x40, 0x44, 0xc2, 0x20, 0xbb, 0x59, 0x60, 0x29, 0x12, 0x0c, 0x82, 0x1e, - 0x83, 0xb2, 0x13, 0xba, 0x22, 0xaa, 0x4d, 0xed, 0x81, 0xa6, 0x57, 0x16, 0x30, 0x6d, 0x4f, 0xd5, - 0xcb, 0xa8, 0xdc, 0x93, 0x7a, 0x19, 0x54, 0x0d, 0x88, 0xb3, 0x8b, 0x41, 0xad, 0x06, 0xd2, 0x67, - 0x0a, 0xf6, 0x9b, 0x65, 0x78, 0x6c, 0xcf, 0xf9, 0xa2, 0x83, 0xfa, 0xac, 0x3d, 0x82, 0xfa, 0xe4, - 0xf0, 0x94, 0xf6, 0x1b, 0x9e, 0x72, 0x8f, 0xe1, 0xf9, 0x14, 0x5d, 0x06, 0xb2, 0x66, 0x4a, 0x31, - 0xf7, 0x07, 0xf6, 0x2a, 0xc1, 0x22, 0x56, 0x80, 0x84, 0x62, 0xcd, 0x97, 0xee, 0x01, 0x52, 0xc9, - 0xd9, 0x95, 0x22, 0xd4, 0x40, 0xcf, 0x1a, 0x2a, 0x7c, 0xee, 0xf7, 0xca, 0xf8, 0xb6, 0x7f, 0xbe, - 0x04, 0x4f, 0xf4, 0x21, 0xbd, 0xcd, 0x59, 0x6c, 0xf5, 0x39, 0x8b, 0xbf, 0xb7, 0x3f, 0x93, 0xfd, - 0xd7, 0x2d, 0x38, 0xd7, 0x5b, 0x79, 0xa0, 0x67, 0x61, 0x78, 0x3d, 0x72, 0xfc, 0xfa, 0x26, 0xbb, - 0x13, 0x55, 0x0e, 0x0a, 0x1b, 0x6b, 0xdd, 0x8c, 0x4d, 0x1c, 0xba, 0xbd, 0xe5, 0x31, 0x09, 0x06, - 0x86, 0x4c, 0xa6, 0xa5, 0xdb, 0xdb, 0xb5, 0x2c, 0x10, 0x77, 0xe3, 0xdb, 0x7f, 0x5e, 0xca, 0xef, - 0x16, 0x37, 0x32, 0x0e, 0xf2, 0x9d, 0xc4, 0x57, 0x28, 0xf5, 0x21, 0x4b, 0xca, 0xf7, 0x5a, 0x96, - 0x0c, 0xf4, 0x92, 0x25, 0x68, 0x0e, 0x4e, 0x1a, 0x77, 0xe6, 0xf0, 0x04, 0x69, 0x1e, 0xbd, 0xab, - 0xaa, 0x86, 0xac, 0x64, 0xe0, 0xb8, 0xeb, 0x09, 0xf4, 0x34, 0x54, 0x5d, 0x3f, 0x26, 0xf5, 0x76, - 0xc4, 0xa3, 0xc6, 0x8d, 0xa4, 0xb4, 0x05, 0xd1, 0x8e, 0x15, 0x86, 0xfd, 0x2b, 0x25, 0x78, 0xa4, - 0xa7, 0x9d, 0x75, 0x8f, 0x64, 0x97, 0xf9, 0x39, 0x06, 0xee, 0xcd, 0xe7, 0x30, 0x07, 0xa9, 0xb2, - 0xef, 0x20, 0xfd, 0x51, 0xef, 0x89, 0x49, 0x6d, 0xee, 0xef, 0xdb, 0x51, 0x7a, 0x11, 0x46, 0x9d, - 0x30, 0xe4, 0x78, 0x2c, 0xf8, 0x33, 0x53, 0x35, 0x68, 0xda, 0x04, 0xe2, 0x34, 0x6e, 0x5f, 0xda, - 0xf3, 0x4f, 0x2c, 0xa8, 0x61, 0xb2, 0xc1, 0xa5, 0x03, 0xba, 0x25, 0x86, 0xc8, 0x2a, 0xa2, 0xbe, - 0x28, 0x1d, 0xd8, 0xd8, 0x65, 0x75, 0x37, 0xf3, 0x06, 0xfb, 0xa8, 0xe9, 0x88, 0xea, 0x76, 0x9d, - 0x72, 0xef, 0xdb, 0x75, 0xec, 0x6f, 0x0c, 0xd1, 0xd7, 0x0b, 0x83, 0xd9, 0x88, 0x34, 0x62, 0xfa, - 0x7d, 0xdb, 0x91, 0x27, 0x26, 0x89, 0xfa, 0xbe, 0xd7, 0xf1, 0x22, 0xa6, 0xed, 0xa9, 0xa3, 0x98, - 0xd2, 0x81, 0x6a, 0xa6, 0x94, 0xf7, 0xad, 0x99, 0xf2, 0x22, 0x8c, 0xc6, 0xf1, 0xe6, 0x4a, 0xe4, - 0x6e, 0x3b, 0x09, 0xb9, 0x4a, 0x3a, 0xc2, 0xca, 0xd2, 0x75, 0x0e, 0x56, 0x2f, 0x6b, 0x20, 0x4e, - 0xe3, 0xa2, 0x79, 0x38, 0xa5, 0x2b, 0x97, 0x90, 0x28, 0x61, 0xa9, 0x02, 0x7c, 0x26, 0xa8, 0xa4, - 0x66, 0x5d, 0xeb, 0x44, 0x20, 0xe0, 0xee, 0x67, 0xa8, 0x7c, 0x4b, 0x35, 0xd2, 0x8e, 0x0c, 0xa6, - 0xe5, 0x5b, 0x8a, 0x0e, 0xed, 0x4b, 0xd7, 0x13, 0x68, 0x09, 0x4e, 0xf3, 0x89, 0x31, 0x1d, 0x86, - 0xc6, 0x1b, 0x0d, 0xa5, 0xeb, 0x3a, 0xce, 0x77, 0xa3, 0xe0, 0xbc, 0xe7, 0xd0, 0xf3, 0x30, 0xac, - 0x9a, 0x17, 0xe6, 0xc4, 0x29, 0x82, 0xf2, 0x62, 0x28, 0x32, 0x0b, 0x0d, 0x6c, 0xe2, 0xa1, 0x0f, - 0xc0, 0xc3, 0xfa, 0x2f, 0xcf, 0x27, 0xe3, 0x47, 0x6b, 0x73, 0xa2, 0x28, 0x94, 0xba, 0xcb, 0x65, - 0x3e, 0x17, 0xad, 0x81, 0x7b, 0x3d, 0x8f, 0xd6, 0xe1, 0x9c, 0x02, 0x5d, 0xf4, 0x13, 0x96, 0x1c, - 0x12, 0x93, 0x19, 0x27, 0x26, 0xd7, 0x23, 0x4f, 0x5c, 0x86, 0xab, 0xae, 0xd9, 0x9c, 0x77, 0x93, - 0xcb, 0x79, 0x98, 0x78, 0x11, 0xef, 0x41, 0x05, 0x4d, 0x41, 0x8d, 0xf8, 0xce, 0xba, 0x47, 0x96, - 0x67, 0x17, 0x58, 0x71, 0x29, 0xe3, 0x24, 0xef, 0xa2, 0x04, 0x60, 0x8d, 0xa3, 0x22, 0x4c, 0x47, - 0x7a, 0x5e, 0xf9, 0xba, 0x02, 0x67, 0x9a, 0xf5, 0x90, 0xda, 0x1e, 0x6e, 0x9d, 0x4c, 0xd7, 0x59, - 0x40, 0x1d, 0xfd, 0x30, 0xbc, 0xe0, 0xa6, 0x8a, 0xc5, 0x9e, 0x9f, 0x5d, 0xe9, 0xc2, 0xc1, 0xb9, - 0x4f, 0xb2, 0xc0, 0xcb, 0x28, 0xd8, 0xe9, 0x8c, 0x9f, 0xce, 0x04, 0x5e, 0xd2, 0x46, 0xcc, 0x61, - 0xe8, 0x0a, 0x20, 0x16, 0xd8, 0x7f, 0x39, 0x49, 0x42, 0x65, 0xec, 0x8c, 0x9f, 0x61, 0xaf, 0xa4, - 0xc2, 0xc8, 0x2e, 0x75, 0x61, 0xe0, 0x9c, 0xa7, 0xec, 0xff, 0x60, 0xc1, 0xa8, 0x5a, 0xaf, 0xf7, - 0x20, 0xb5, 0xc5, 0x4b, 0xa7, 0xb6, 0xcc, 0x1f, 0x5d, 0xe2, 0xb1, 0x9e, 0xf7, 0x08, 0x69, 0xfe, - 0x99, 0x61, 0x00, 0x2d, 0x15, 0x95, 0x42, 0xb2, 0x7a, 0x2a, 0xa4, 0x07, 0x56, 0x22, 0xe5, 0x55, - 0x92, 0xa9, 0xdc, 0xdf, 0x4a, 0x32, 0xab, 0x70, 0x56, 0x9a, 0x0b, 0xfc, 0xac, 0xe8, 0x72, 0x10, - 0x2b, 0x01, 0x57, 0x9d, 0x79, 0x4c, 0x10, 0x3a, 0xbb, 0x90, 0x87, 0x84, 0xf3, 0x9f, 0x4d, 0x59, - 0x29, 0x43, 0xfb, 0x59, 0x29, 0x7a, 0x4d, 0x2f, 0x6e, 0xc8, 0x4b, 0x5b, 0x32, 0x6b, 0x7a, 0xf1, - 0xd2, 0x2a, 0xd6, 0x38, 0xf9, 0x82, 0xbd, 0x56, 0x90, 0x60, 0x87, 0x03, 0x0b, 0x76, 0x29, 0x62, - 0x86, 0x7b, 0x8a, 0x18, 0xe9, 0x93, 0x1e, 0xe9, 0xe9, 0x93, 0x7e, 0x2f, 0x8c, 0xb9, 0xfe, 0x26, - 0x89, 0xdc, 0x84, 0x34, 0xd8, 0x5a, 0x60, 0xe2, 0xa7, 0xaa, 0xd5, 0xfa, 0x42, 0x0a, 0x8a, 0x33, - 0xd8, 0x69, 0xb9, 0x38, 0xd6, 0x87, 0x5c, 0xec, 0xa1, 0x8d, 0x4e, 0x14, 0xa3, 0x8d, 0x4e, 0x1e, - 0x5d, 0x1b, 0x9d, 0x3a, 0x56, 0x6d, 0x84, 0x0a, 0xd1, 0x46, 0x7d, 0x09, 0x7a, 0x63, 0xfb, 0x77, - 0x66, 0x9f, 0xed, 0x5f, 0x2f, 0x55, 0x74, 0xf6, 0xd0, 0xaa, 0x28, 0x5f, 0xcb, 0x3c, 0x74, 0x28, - 0x2d, 0xf3, 0x99, 0x12, 0x9c, 0xd5, 0x72, 0x98, 0xce, 0x7e, 0x77, 0x83, 0x4a, 0x22, 0x76, 0xef, - 0x17, 0x3f, 0xb7, 0x31, 0x32, 0xad, 0x74, 0xd2, 0x96, 0x82, 0x60, 0x03, 0x8b, 0x25, 0x2c, 0x91, - 0x88, 0x95, 0x15, 0xce, 0x0a, 0xe9, 0x59, 0xd1, 0x8e, 0x15, 0x06, 0x9d, 0x5f, 0xf4, 0xb7, 0x48, - 0x02, 0xcd, 0x16, 0xcf, 0x9b, 0xd5, 0x20, 0x6c, 0xe2, 0xa1, 0xa7, 0x38, 0x13, 0x26, 0x20, 0xa8, - 0xa0, 0x1e, 0x11, 0x17, 0x01, 0x4b, 0x99, 0xa0, 0xa0, 0xb2, 0x3b, 0x2c, 0x33, 0xad, 0xd2, 0xdd, - 0x1d, 0x16, 0x02, 0xa5, 0x30, 0xec, 0xff, 0x69, 0xc1, 0x23, 0xb9, 0x43, 0x71, 0x0f, 0x94, 0xef, - 0x4e, 0x5a, 0xf9, 0xae, 0x16, 0xb5, 0xdd, 0x30, 0xde, 0xa2, 0x87, 0x22, 0xfe, 0x77, 0x16, 0x8c, - 0x69, 0xfc, 0x7b, 0xf0, 0xaa, 0x6e, 0xfa, 0x55, 0x8b, 0xdb, 0x59, 0xd5, 0xba, 0xde, 0xed, 0x77, - 0x4b, 0xa0, 0x0a, 0x5a, 0x4e, 0xd7, 0x65, 0xb9, 0xe0, 0x7d, 0x4e, 0x12, 0x3b, 0x30, 0xc8, 0x0e, - 0x42, 0xe3, 0x62, 0x82, 0x3c, 0xd2, 0xfc, 0xd9, 0xa1, 0xaa, 0x3e, 0x64, 0x66, 0x7f, 0x63, 0x2c, - 0x18, 0xb2, 0xa2, 0xd7, 0x6e, 0x4c, 0xa5, 0x79, 0x43, 0xa4, 0x65, 0xe9, 0xa2, 0xd7, 0xa2, 0x1d, - 0x2b, 0x0c, 0xaa, 0x1e, 0xdc, 0x7a, 0xe0, 0xcf, 0x7a, 0x4e, 0x2c, 0x2f, 0xbb, 0x54, 0xea, 0x61, - 0x41, 0x02, 0xb0, 0xc6, 0x61, 0x67, 0xa4, 0x6e, 0x1c, 0x7a, 0x4e, 0xc7, 0xd8, 0x3f, 0x1b, 0xc5, - 0x0e, 0x14, 0x08, 0x9b, 0x78, 0x76, 0x0b, 0xc6, 0xd3, 0x2f, 0x31, 0x47, 0x36, 0x58, 0x80, 0x62, - 0x5f, 0xc3, 0x39, 0x05, 0x35, 0x87, 0x3d, 0xb5, 0xd8, 0x76, 0xb2, 0x77, 0xd4, 0x4f, 0x4b, 0x00, - 0xd6, 0x38, 0xf6, 0xaf, 0x59, 0x70, 0x3a, 0x67, 0xd0, 0x0a, 0x4c, 0x7b, 0x4b, 0xb4, 0xb4, 0xc9, - 0x53, 0xec, 0x3f, 0x0c, 0x43, 0x0d, 0xb2, 0xe1, 0xc8, 0x10, 0x38, 0x43, 0xb6, 0xcf, 0xf1, 0x66, - 0x2c, 0xe1, 0xf6, 0x7f, 0xb7, 0xe0, 0x44, 0xba, 0xaf, 0x31, 0x4b, 0x25, 0xe1, 0xc3, 0xe4, 0xc6, - 0xf5, 0x60, 0x9b, 0x44, 0x1d, 0xfa, 0xe6, 0x56, 0x26, 0x95, 0xa4, 0x0b, 0x03, 0xe7, 0x3c, 0xc5, - 0xca, 0xd9, 0x36, 0xd4, 0x68, 0xcb, 0x19, 0x79, 0xa3, 0xc8, 0x19, 0xa9, 0x3f, 0xa6, 0x79, 0x5c, - 0xae, 0x58, 0x62, 0x93, 0xbf, 0xfd, 0x9d, 0x01, 0x50, 0x49, 0xb6, 0x2c, 0xfe, 0xa8, 0xa0, 0xe8, - 0xad, 0x83, 0x66, 0x10, 0xa9, 0xc9, 0x30, 0xb0, 0x57, 0x40, 0x00, 0xf7, 0x92, 0x98, 0xae, 0x4b, - 0xf5, 0x86, 0x6b, 0x1a, 0x84, 0x4d, 0x3c, 0xda, 0x13, 0xcf, 0xdd, 0x26, 0xfc, 0xa1, 0xc1, 0x74, - 0x4f, 0x16, 0x25, 0x00, 0x6b, 0x1c, 0xda, 0x93, 0x86, 0xbb, 0xb1, 0x21, 0xb6, 0xfc, 0xaa, 0x27, - 0x74, 0x74, 0x30, 0x83, 0xf0, 0x0a, 0xe5, 0xc1, 0x96, 0xb0, 0x82, 0x8d, 0x0a, 0xe5, 0xc1, 0x16, - 0x66, 0x10, 0x6a, 0xb7, 0xf9, 0x41, 0xd4, 0x72, 0x3c, 0xf7, 0x75, 0xd2, 0x50, 0x5c, 0x84, 0xf5, - 0xab, 0xec, 0xb6, 0x6b, 0xdd, 0x28, 0x38, 0xef, 0x39, 0x3a, 0x03, 0xc3, 0x88, 0x34, 0xdc, 0x7a, - 0x62, 0x52, 0x83, 0xf4, 0x0c, 0x5c, 0xe9, 0xc2, 0xc0, 0x39, 0x4f, 0xa1, 0x69, 0x38, 0x21, 0x93, - 0xa4, 0x65, 0x09, 0x9c, 0xe1, 0x74, 0xc9, 0x0d, 0x9c, 0x06, 0xe3, 0x2c, 0x3e, 0x95, 0x6a, 0x2d, - 0x51, 0xc0, 0x8b, 0x19, 0xcb, 0x86, 0x54, 0x93, 0x85, 0xbd, 0xb0, 0xc2, 0xb0, 0x3f, 0x51, 0xa6, - 0x5a, 0xb8, 0x47, 0xe1, 0xba, 0x7b, 0x16, 0x2d, 0x98, 0x9e, 0x91, 0x03, 0x7d, 0xcc, 0xc8, 0xe7, - 0x60, 0xe4, 0x56, 0x1c, 0xf8, 0x2a, 0x12, 0xaf, 0xd2, 0x33, 0x12, 0xcf, 0xc0, 0xca, 0x8f, 0xc4, - 0x1b, 0x2c, 0x2a, 0x12, 0x6f, 0xe8, 0x90, 0x91, 0x78, 0xdf, 0xaa, 0x80, 0xba, 0x2a, 0xe5, 0x1a, - 0x49, 0x6e, 0x07, 0xd1, 0x96, 0xeb, 0x37, 0x59, 0x3e, 0xf8, 0xd7, 0x2c, 0x18, 0xe1, 0xeb, 0x65, - 0xd1, 0xcc, 0xa4, 0xda, 0x28, 0xe8, 0x0e, 0x8e, 0x14, 0xb3, 0xc9, 0x35, 0x83, 0x51, 0xe6, 0xae, - 0x55, 0x13, 0x84, 0x53, 0x3d, 0x42, 0x1f, 0x05, 0x90, 0xfe, 0xd1, 0x0d, 0x29, 0x32, 0x17, 0x8a, - 0xe9, 0x1f, 0x26, 0x1b, 0xda, 0x06, 0x5e, 0x53, 0x4c, 0xb0, 0xc1, 0x10, 0x7d, 0x46, 0x67, 0x99, - 0xf1, 0x90, 0xfd, 0x0f, 0x1f, 0xcb, 0xd8, 0xf4, 0x93, 0x63, 0x86, 0x61, 0xc8, 0xf5, 0x9b, 0x74, - 0x9e, 0x88, 0x88, 0xa5, 0x77, 0xe4, 0x15, 0x66, 0x58, 0x0c, 0x9c, 0xc6, 0x8c, 0xe3, 0x39, 0x7e, - 0x9d, 0x44, 0x0b, 0x1c, 0xdd, 0xbc, 0x61, 0x9c, 0x35, 0x60, 0x49, 0xa8, 0xeb, 0x92, 0x99, 0x4a, - 0x3f, 0x97, 0xcc, 0x9c, 0x7b, 0x1f, 0x9c, 0xea, 0xfa, 0x98, 0x07, 0x4a, 0x29, 0x3b, 0x7c, 0x36, - 0x9a, 0xfd, 0x2f, 0x06, 0xb5, 0xd2, 0xba, 0x16, 0x34, 0xf8, 0x55, 0x27, 0x91, 0xfe, 0xa2, 0xc2, - 0xc6, 0x2d, 0x70, 0x8a, 0x18, 0xb7, 0x94, 0xab, 0x46, 0x6c, 0xb2, 0xa4, 0x73, 0x34, 0x74, 0x22, - 0xe2, 0x1f, 0xf7, 0x1c, 0x5d, 0x51, 0x4c, 0xb0, 0xc1, 0x10, 0x6d, 0xa6, 0x72, 0x4a, 0x2e, 0x1d, - 0x3d, 0xa7, 0x84, 0x95, 0xac, 0xca, 0xbb, 0x9d, 0xe0, 0x8b, 0x16, 0x8c, 0xf9, 0xa9, 0x99, 0x5b, - 0x4c, 0x18, 0x69, 0xfe, 0xaa, 0xe0, 0x37, 0x6d, 0xa5, 0xdb, 0x70, 0x86, 0x7f, 0x9e, 0x4a, 0xab, - 0x1c, 0x50, 0xa5, 0xe9, 0x3b, 0x93, 0x06, 0x7b, 0xdd, 0x99, 0x84, 0x7c, 0x75, 0x69, 0xdc, 0x50, - 0xe1, 0x97, 0xc6, 0x41, 0xce, 0x85, 0x71, 0x37, 0xa1, 0x56, 0x8f, 0x88, 0x93, 0x1c, 0xf2, 0xfe, - 0x30, 0x76, 0x40, 0x3f, 0x2b, 0x09, 0x60, 0x4d, 0xcb, 0xfe, 0x3f, 0x03, 0x70, 0x52, 0x8e, 0x88, - 0x0c, 0x41, 0xa7, 0xfa, 0x91, 0xf3, 0xd5, 0xc6, 0xad, 0xd2, 0x8f, 0x97, 0x25, 0x00, 0x6b, 0x1c, - 0x6a, 0x8f, 0xb5, 0x63, 0xb2, 0x1c, 0x12, 0x7f, 0xd1, 0x5d, 0x8f, 0xc5, 0x39, 0xa7, 0x5a, 0x28, - 0xd7, 0x35, 0x08, 0x9b, 0x78, 0xd4, 0x18, 0xe7, 0x76, 0x71, 0x9c, 0x4d, 0x5f, 0x11, 0xf6, 0x36, - 0x96, 0x70, 0xf4, 0x0b, 0xb9, 0x95, 0x74, 0x8b, 0x49, 0xdc, 0xea, 0x8a, 0xbc, 0x3f, 0xe0, 0x0d, - 0x98, 0x7f, 0xdb, 0x82, 0xb3, 0xbc, 0x55, 0x8e, 0xe4, 0xf5, 0xb0, 0xe1, 0x24, 0x24, 0x2e, 0xa6, - 0xb2, 0x7d, 0x4e, 0xff, 0xb4, 0x93, 0x37, 0x8f, 0x2d, 0xce, 0xef, 0x0d, 0x7a, 0xc3, 0x82, 0x13, - 0x5b, 0xa9, 0x9a, 0x1f, 0x52, 0x75, 0x1c, 0x35, 0x1d, 0x3f, 0x45, 0x54, 0x2f, 0xb5, 0x74, 0x7b, - 0x8c, 0xb3, 0xdc, 0xed, 0x3f, 0xb7, 0xc0, 0x14, 0xa3, 0xf7, 0xbe, 0x54, 0xc8, 0xc1, 0x4d, 0x41, - 0x69, 0x5d, 0x56, 0x7a, 0x5a, 0x97, 0x8f, 0x41, 0xb9, 0xed, 0x36, 0xc4, 0xfe, 0x42, 0x9f, 0xbe, - 0x2e, 0xcc, 0x61, 0xda, 0x6e, 0xff, 0xd3, 0x8a, 0xf6, 0x5b, 0x88, 0xbc, 0xa8, 0xef, 0x8b, 0xd7, - 0xde, 0x50, 0x95, 0xcb, 0xf8, 0x9b, 0x5f, 0xeb, 0xaa, 0x5c, 0xf6, 0x63, 0x07, 0x4f, 0x7b, 0xe3, - 0x03, 0xd4, 0xab, 0x70, 0xd9, 0xd0, 0x3e, 0x39, 0x6f, 0xb7, 0xa0, 0x4a, 0xb7, 0x60, 0xcc, 0x01, - 0x59, 0x4d, 0x75, 0xaa, 0x7a, 0x59, 0xb4, 0xdf, 0xdd, 0x9d, 0x78, 0xcf, 0xc1, 0xbb, 0x25, 0x9f, - 0xc6, 0x8a, 0x3e, 0x8a, 0xa1, 0x46, 0x7f, 0xb3, 0xf4, 0x3c, 0xb1, 0xb9, 0xbb, 0xae, 0x64, 0xa6, - 0x04, 0x14, 0x92, 0xfb, 0xa7, 0xf9, 0x20, 0x1f, 0x6a, 0xec, 0xb2, 0x60, 0xc6, 0x94, 0xef, 0x01, - 0x57, 0x54, 0x92, 0x9c, 0x04, 0xdc, 0xdd, 0x9d, 0x78, 0xf1, 0xe0, 0x4c, 0xd5, 0xe3, 0x58, 0xb3, - 0xb0, 0xbf, 0x34, 0xa0, 0xe7, 0xae, 0x28, 0x58, 0xf7, 0x7d, 0x31, 0x77, 0x5f, 0xc8, 0xcc, 0xdd, - 0xf3, 0x5d, 0x73, 0x77, 0x4c, 0xdf, 0x22, 0x9b, 0x9a, 0x8d, 0xf7, 0xda, 0x10, 0xd8, 0xdf, 0xdf, - 0xc0, 0x2c, 0xa0, 0xd7, 0xda, 0x6e, 0x44, 0xe2, 0x95, 0xa8, 0xed, 0xbb, 0x7e, 0x93, 0x4d, 0xc7, - 0xaa, 0x69, 0x01, 0xa5, 0xc0, 0x38, 0x8b, 0x4f, 0x37, 0xf5, 0xf4, 0x9b, 0xdf, 0x74, 0xb6, 0xf9, - 0xac, 0x32, 0xca, 0x6e, 0xad, 0x8a, 0x76, 0xac, 0x30, 0xec, 0x6f, 0xb0, 0xb3, 0x6c, 0x23, 0x2f, - 0x98, 0xce, 0x09, 0x8f, 0xdd, 0xce, 0xcc, 0x6b, 0x76, 0xa9, 0x39, 0xc1, 0xaf, 0x64, 0xe6, 0x30, - 0x74, 0x1b, 0x86, 0xd6, 0xf9, 0x7d, 0x80, 0xc5, 0xd4, 0x6b, 0x17, 0x97, 0x0b, 0xb2, 0x5b, 0x5f, - 0xe4, 0x4d, 0x83, 0x77, 0xf5, 0x4f, 0x2c, 0xb9, 0xd9, 0x7f, 0x50, 0x81, 0x13, 0x99, 0x0b, 0x73, - 0x53, 0xa5, 0x57, 0x4b, 0xfb, 0x96, 0x5e, 0xfd, 0x10, 0x40, 0x83, 0x84, 0x5e, 0xd0, 0x61, 0xe6, - 0xd8, 0xc0, 0x81, 0xcd, 0x31, 0x65, 0xc1, 0xcf, 0x29, 0x2a, 0xd8, 0xa0, 0x28, 0x0a, 0x95, 0xf1, - 0x4a, 0xae, 0x99, 0x42, 0x65, 0xc6, 0xad, 0x0e, 0x83, 0xf7, 0xf6, 0x56, 0x07, 0x17, 0x4e, 0xf0, - 0x2e, 0xaa, 0xec, 0xdb, 0x43, 0x24, 0xd9, 0xb2, 0xfc, 0x85, 0xb9, 0x34, 0x19, 0x9c, 0xa5, 0x7b, - 0x5f, 0xaf, 0xe7, 0x7e, 0x27, 0xd4, 0xe4, 0x77, 0x8e, 0xc7, 0x6b, 0xba, 0x82, 0x81, 0x9c, 0x06, - 0xec, 0x9e, 0x6a, 0xf1, 0xb3, 0xab, 0x90, 0x00, 0xdc, 0xaf, 0x42, 0x02, 0xf6, 0x17, 0x4a, 0xd4, - 0x8e, 0xe7, 0xfd, 0x52, 0x35, 0x71, 0x9e, 0x84, 0x41, 0xa7, 0x9d, 0x6c, 0x06, 0x5d, 0xb7, 0x1b, - 0x4e, 0xb3, 0x56, 0x2c, 0xa0, 0x68, 0x11, 0x06, 0x1a, 0xba, 0xce, 0xc9, 0x41, 0xbe, 0xa7, 0x76, - 0x89, 0x3a, 0x09, 0xc1, 0x8c, 0x0a, 0x7a, 0x14, 0x06, 0x12, 0xa7, 0x29, 0x53, 0xae, 0x58, 0x9a, - 0xed, 0x9a, 0xd3, 0x8c, 0x31, 0x6b, 0x35, 0xd5, 0xf7, 0xc0, 0x3e, 0xea, 0xfb, 0x45, 0x18, 0x8d, - 0xdd, 0xa6, 0xef, 0x24, 0xed, 0x88, 0x18, 0xc7, 0x7c, 0x3a, 0x72, 0xc3, 0x04, 0xe2, 0x34, 0xae, - 0xfd, 0x5b, 0x23, 0x70, 0x66, 0x75, 0x76, 0x49, 0x96, 0x02, 0x3f, 0xb6, 0xac, 0xa9, 0x3c, 0x1e, - 0xf7, 0x2e, 0x6b, 0xaa, 0x07, 0x77, 0xcf, 0xc8, 0x9a, 0xf2, 0x8c, 0xac, 0xa9, 0x74, 0x0a, 0x4b, - 0xb9, 0x88, 0x14, 0x96, 0xbc, 0x1e, 0xf4, 0x93, 0xc2, 0x72, 0x6c, 0x69, 0x54, 0x7b, 0x76, 0xe8, - 0x40, 0x69, 0x54, 0x2a, 0xc7, 0xac, 0x90, 0xe4, 0x82, 0x1e, 0x9f, 0x2a, 0x37, 0xc7, 0x4c, 0xe5, - 0xf7, 0xf0, 0xc4, 0x19, 0x21, 0xea, 0x5f, 0x29, 0xbe, 0x03, 0x7d, 0xe4, 0xf7, 0x88, 0xdc, 0x1d, - 0x33, 0xa7, 0x6c, 0xa8, 0x88, 0x9c, 0xb2, 0xbc, 0xee, 0xec, 0x9b, 0x53, 0xf6, 0x22, 0x8c, 0xd6, - 0xbd, 0xc0, 0x27, 0x2b, 0x51, 0x90, 0x04, 0xf5, 0xc0, 0x13, 0x66, 0xbd, 0x12, 0x09, 0xb3, 0x26, - 0x10, 0xa7, 0x71, 0x7b, 0x25, 0xa4, 0xd5, 0x8e, 0x9a, 0x90, 0x06, 0xf7, 0x29, 0x21, 0xed, 0x67, - 0x75, 0xea, 0xf4, 0x30, 0xfb, 0x22, 0x1f, 0x2a, 0xfe, 0x8b, 0xf4, 0x93, 0x3f, 0x8d, 0xde, 0xe4, - 0xd7, 0x0b, 0x52, 0xc3, 0x78, 0x36, 0x68, 0x51, 0xc3, 0x6f, 0x84, 0x0d, 0xc9, 0xab, 0xc7, 0x30, - 0x61, 0x6f, 0xae, 0x6a, 0x36, 0xea, 0xca, 0x41, 0xdd, 0x84, 0xd3, 0x1d, 0x39, 0x4a, 0x6a, 0xf7, - 0x57, 0x4a, 0xf0, 0x03, 0xfb, 0x76, 0x01, 0xdd, 0x06, 0x48, 0x9c, 0xa6, 0x98, 0xa8, 0xe2, 0xc0, - 0xe4, 0x88, 0xe1, 0x95, 0x6b, 0x92, 0x1e, 0xaf, 0x49, 0xa2, 0xfe, 0xb2, 0xa3, 0x08, 0xf9, 0x9b, - 0x45, 0x55, 0x06, 0x5e, 0x57, 0xe9, 0x46, 0x1c, 0x78, 0x04, 0x33, 0x08, 0x55, 0xff, 0x11, 0x69, - 0xea, 0xfb, 0xb0, 0xd5, 0xe7, 0xc3, 0xac, 0x15, 0x0b, 0x28, 0x7a, 0x1e, 0x86, 0x1d, 0xcf, 0xe3, - 0xf9, 0x31, 0x24, 0x16, 0xf7, 0x0b, 0xe9, 0x1a, 0x72, 0x1a, 0x84, 0x4d, 0x3c, 0xfb, 0xcf, 0x4a, - 0x30, 0xb1, 0x8f, 0x4c, 0xe9, 0xca, 0xf8, 0xab, 0xf4, 0x9d, 0xf1, 0x27, 0x72, 0x14, 0x06, 0x7b, - 0xe4, 0x28, 0x3c, 0x0f, 0xc3, 0x09, 0x71, 0x5a, 0x22, 0x20, 0x4b, 0x78, 0x02, 0xf4, 0x09, 0xb0, - 0x06, 0x61, 0x13, 0x8f, 0x4a, 0xb1, 0x31, 0xa7, 0x5e, 0x27, 0x71, 0x2c, 0x93, 0x10, 0x84, 0x37, - 0xb5, 0xb0, 0x0c, 0x07, 0xe6, 0xa4, 0x9e, 0x4e, 0xb1, 0xc0, 0x19, 0x96, 0xd9, 0x01, 0xaf, 0xf5, - 0x39, 0xe0, 0x5f, 0x2f, 0xc1, 0x63, 0x7b, 0x6a, 0xb7, 0xbe, 0xf3, 0x43, 0xda, 0x31, 0x89, 0xb2, - 0x13, 0xe7, 0x7a, 0x4c, 0x22, 0xcc, 0x20, 0x7c, 0x94, 0xc2, 0xd0, 0xb8, 0x6f, 0xbc, 0xe8, 0xe4, - 0x25, 0x3e, 0x4a, 0x29, 0x16, 0x38, 0xc3, 0xf2, 0xb0, 0xd3, 0xf2, 0xef, 0x97, 0xe0, 0x89, 0x3e, - 0x6c, 0x80, 0x02, 0x93, 0xbc, 0xd2, 0xa9, 0x76, 0xe5, 0xfb, 0x94, 0x11, 0x79, 0xc8, 0xe1, 0xfa, - 0x46, 0x09, 0xce, 0xf5, 0x56, 0xc5, 0xe8, 0xc7, 0xe1, 0x44, 0xa4, 0xa2, 0xb0, 0xcc, 0x2c, 0xbd, - 0xd3, 0xdc, 0x93, 0x90, 0x02, 0xe1, 0x2c, 0x2e, 0x9a, 0x04, 0x08, 0x9d, 0x64, 0x33, 0xbe, 0xb8, - 0xe3, 0xc6, 0x89, 0xa8, 0x42, 0x33, 0xc6, 0xcf, 0xae, 0x64, 0x2b, 0x36, 0x30, 0x28, 0x3b, 0xf6, - 0x6f, 0x2e, 0xb8, 0x16, 0x24, 0xfc, 0x21, 0xbe, 0x8d, 0x38, 0x2d, 0x2f, 0x00, 0x31, 0x40, 0x38, - 0x8b, 0x4b, 0xd9, 0xb1, 0xd3, 0x51, 0xde, 0x51, 0xbe, 0xbf, 0x60, 0xec, 0x16, 0x55, 0x2b, 0x36, - 0x30, 0xb2, 0xf9, 0x87, 0x95, 0xfd, 0xf3, 0x0f, 0xed, 0x7f, 0x52, 0x82, 0x47, 0x7a, 0x9a, 0x72, - 0xfd, 0x2d, 0xc0, 0x07, 0x2f, 0x67, 0xf0, 0x70, 0x73, 0xe7, 0x80, 0xb9, 0x6d, 0x7f, 0xd2, 0x63, - 0xa6, 0x89, 0xdc, 0xb6, 0xc3, 0x27, 0x87, 0x3f, 0x78, 0xe3, 0xd9, 0x95, 0xce, 0x36, 0x70, 0x80, - 0x74, 0xb6, 0xcc, 0xc7, 0xa8, 0xf4, 0xb9, 0x90, 0xff, 0xa2, 0xdc, 0x73, 0x78, 0xe9, 0xd6, 0xaf, - 0x2f, 0x3f, 0xed, 0x1c, 0x9c, 0x74, 0x7d, 0x76, 0x19, 0xd4, 0x6a, 0x7b, 0x5d, 0x14, 0x26, 0x29, - 0xa5, 0x6f, 0x93, 0x5f, 0xc8, 0xc0, 0x71, 0xd7, 0x13, 0x0f, 0x60, 0x7a, 0xe1, 0xe1, 0x86, 0xf4, - 0x60, 0x09, 0xae, 0x68, 0x19, 0xce, 0xca, 0xa1, 0xd8, 0x74, 0x22, 0xd2, 0x10, 0x6a, 0x24, 0x16, - 0x09, 0x15, 0x8f, 0xf0, 0xa4, 0x8c, 0x1c, 0x04, 0x9c, 0xff, 0x1c, 0xbb, 0x7f, 0x27, 0x08, 0xdd, - 0xba, 0xd8, 0xe4, 0xe8, 0xfb, 0x77, 0x68, 0x23, 0xe6, 0x30, 0xfb, 0x43, 0x50, 0x53, 0xef, 0xcf, - 0xc3, 0xba, 0xd5, 0xa4, 0xeb, 0x0a, 0xeb, 0x56, 0x33, 0xce, 0xc0, 0xa2, 0x5f, 0x8b, 0x9a, 0xc4, - 0x99, 0xd5, 0x73, 0x95, 0x74, 0x98, 0x7d, 0x6c, 0xbf, 0x0b, 0x46, 0x94, 0x9f, 0xa5, 0xdf, 0x5b, - 0x89, 0xec, 0x4f, 0x96, 0x61, 0x8c, 0x7b, 0xd6, 0xf8, 0xa5, 0x15, 0x01, 0xdd, 0x4c, 0xd7, 0x1a, - 0xf2, 0x36, 0xc7, 0x62, 0xaa, 0x31, 0xaa, 0xcb, 0x21, 0xb5, 0xfb, 0x5f, 0x35, 0x61, 0xcd, 0x0c, - 0x7d, 0x84, 0x17, 0x3e, 0x14, 0xac, 0x4b, 0x45, 0xa4, 0x7c, 0xae, 0x2a, 0x7a, 0xe6, 0x55, 0x27, - 0xb2, 0x0d, 0x1b, 0xfc, 0xe8, 0x7b, 0x6f, 0xca, 0x8b, 0x3b, 0x8a, 0x11, 0x3f, 0xea, 0x1e, 0x10, - 0xe3, 0x50, 0x5e, 0x36, 0x61, 0xcd, 0xcc, 0xfe, 0xd2, 0x20, 0x8c, 0xa6, 0x2a, 0x34, 0xa6, 0xbc, - 0xdc, 0xd6, 0xbe, 0x5e, 0x6e, 0x96, 0x2b, 0xd1, 0xf6, 0xe5, 0xbd, 0x71, 0x46, 0xae, 0x44, 0xdb, - 0x27, 0x98, 0xc3, 0xe8, 0x1e, 0xa3, 0x11, 0x75, 0x70, 0xdb, 0x17, 0x31, 0xcd, 0x6a, 0x8f, 0x31, - 0xc7, 0x5a, 0xb1, 0x80, 0xa2, 0x8f, 0x5b, 0x30, 0xc2, 0x46, 0x45, 0x9c, 0x11, 0x88, 0x95, 0x7f, - 0xa5, 0x80, 0xef, 0x20, 0xab, 0x91, 0xb2, 0x30, 0x25, 0xb3, 0x05, 0xa7, 0x38, 0xa2, 0x4f, 0x5b, - 0x50, 0x53, 0xd7, 0xdb, 0x88, 0x4b, 0x20, 0x57, 0x8b, 0x2d, 0x80, 0x99, 0x99, 0x8e, 0xaa, 0x12, - 0x21, 0xd6, 0x8c, 0x51, 0xac, 0x1c, 0xf8, 0x43, 0xc7, 0xe3, 0xc0, 0x87, 0x1c, 0xe7, 0xfd, 0x3b, - 0xa1, 0xd6, 0x72, 0x7c, 0x77, 0x83, 0xc4, 0x09, 0xf7, 0xa9, 0xcb, 0xba, 0xbc, 0xb2, 0x11, 0x6b, - 0x38, 0xb5, 0x8a, 0x62, 0xf6, 0x62, 0x89, 0xe1, 0x04, 0x67, 0x56, 0xd1, 0xaa, 0x6e, 0xc6, 0x26, - 0x8e, 0xe9, 0xb1, 0x87, 0xfb, 0xea, 0xb1, 0x1f, 0xde, 0xdb, 0x63, 0x6f, 0xff, 0x43, 0x0b, 0xce, - 0xe6, 0x7e, 0xb5, 0x07, 0x37, 0xfa, 0xd4, 0xfe, 0x72, 0x05, 0x4e, 0xe7, 0x94, 0x5a, 0x45, 0x1d, - 0x73, 0x3e, 0x5b, 0x45, 0x04, 0x72, 0xa4, 0xe3, 0x12, 0xe4, 0x30, 0xe6, 0x4c, 0xe2, 0x83, 0x9d, - 0x97, 0xe9, 0x33, 0xab, 0xf2, 0xbd, 0x3d, 0xb3, 0x32, 0xa6, 0xe5, 0xc0, 0x7d, 0x9d, 0x96, 0x95, - 0x7d, 0x0e, 0x92, 0x7e, 0xdd, 0x82, 0xf1, 0x56, 0x8f, 0xfa, 0xfe, 0xc2, 0xfb, 0x7b, 0xe3, 0x78, - 0x6e, 0x0f, 0x98, 0x79, 0xf4, 0xce, 0xee, 0x44, 0xcf, 0x6b, 0x15, 0x70, 0xcf, 0x5e, 0xd9, 0xdf, - 0x29, 0x03, 0xd3, 0x79, 0xac, 0x9c, 0x5e, 0x07, 0x7d, 0xcc, 0xac, 0xd8, 0x6c, 0x15, 0x55, 0x5d, - 0x98, 0x13, 0x57, 0x15, 0x9f, 0xf9, 0x08, 0xe6, 0x15, 0x80, 0xce, 0x0a, 0xad, 0x52, 0x1f, 0x42, - 0xcb, 0x93, 0xa5, 0xb1, 0xcb, 0xc5, 0x97, 0xc6, 0xae, 0x65, 0xcb, 0x62, 0xef, 0xfd, 0x89, 0x07, - 0x1e, 0xc8, 0x4f, 0xfc, 0x4b, 0x16, 0x17, 0x3c, 0x99, 0xaf, 0xa0, 0x2d, 0x03, 0x6b, 0x0f, 0xcb, - 0xe0, 0x69, 0xa8, 0xc6, 0xc4, 0xdb, 0xb8, 0x4c, 0x1c, 0x4f, 0x58, 0x10, 0x3a, 0x88, 0x40, 0xb4, - 0x63, 0x85, 0xc1, 0x2e, 0xe2, 0xf5, 0xbc, 0xe0, 0xf6, 0xc5, 0x56, 0x98, 0x74, 0x84, 0x2d, 0xa1, - 0x2f, 0xe2, 0x55, 0x10, 0x6c, 0x60, 0xd9, 0x3e, 0x18, 0x46, 0xd7, 0x51, 0x2f, 0x45, 0xeb, 0xe3, - 0xba, 0xc2, 0xbf, 0x55, 0x12, 0x0c, 0x79, 0xe8, 0xc7, 0x0b, 0x99, 0xab, 0x1a, 0xfb, 0x0f, 0x1a, - 0xf9, 0x08, 0x40, 0x3d, 0x68, 0x85, 0xd4, 0xd8, 0x5f, 0x0b, 0x8a, 0xb1, 0x48, 0x67, 0x15, 0x3d, - 0x3d, 0x6c, 0xba, 0x0d, 0x1b, 0xfc, 0x52, 0xb2, 0xbb, 0xbc, 0xaf, 0xec, 0x4e, 0x89, 0xb1, 0x81, - 0x7d, 0xb4, 0xeb, 0x9f, 0x59, 0x90, 0xb2, 0xc0, 0x50, 0x08, 0x15, 0xda, 0xdd, 0x8e, 0x90, 0x08, - 0xcb, 0xc5, 0x99, 0x7b, 0x54, 0x14, 0x8b, 0x65, 0xc6, 0x7e, 0x62, 0xce, 0x08, 0x79, 0x22, 0x40, - 0x86, 0x8f, 0xea, 0xb5, 0xe2, 0x18, 0x5e, 0x0e, 0x82, 0x2d, 0x7e, 0x9a, 0xad, 0x83, 0x6d, 0xec, - 0x17, 0xe0, 0x54, 0x57, 0xa7, 0xd8, 0x45, 0x6a, 0x81, 0xdc, 0xe6, 0x18, 0xcb, 0x83, 0x65, 0xed, - 0x62, 0x0e, 0xb3, 0xbf, 0x61, 0xc1, 0xc9, 0x2c, 0x79, 0xf4, 0xa6, 0x05, 0xa7, 0xe2, 0x2c, 0xbd, - 0xe3, 0x1a, 0x3b, 0x15, 0xe4, 0xda, 0x05, 0xc2, 0xdd, 0x9d, 0xb0, 0xff, 0xaf, 0x98, 0xfc, 0x37, - 0x5d, 0xbf, 0x11, 0xdc, 0x56, 0x86, 0x90, 0xd5, 0xd3, 0x10, 0xa2, 0xeb, 0xbf, 0xbe, 0x49, 0x1a, - 0x6d, 0xaf, 0x2b, 0x5d, 0x78, 0x55, 0xb4, 0x63, 0x85, 0xc1, 0xb2, 0x23, 0xdb, 0xa2, 0x56, 0x7f, - 0x66, 0x52, 0xce, 0x89, 0x76, 0xac, 0x30, 0xd0, 0x73, 0x30, 0x62, 0xbc, 0xa4, 0x9c, 0x97, 0x6c, - 0x03, 0x60, 0xa8, 0xe8, 0x18, 0xa7, 0xb0, 0xd0, 0x24, 0x80, 0x32, 0xaa, 0xa4, 0x4a, 0x66, 0xde, - 0x41, 0x25, 0xf9, 0x62, 0x6c, 0x60, 0xb0, 0x5c, 0x64, 0xaf, 0x1d, 0xb3, 0x83, 0x9d, 0x41, 0x5d, - 0x3f, 0x76, 0x56, 0xb4, 0x61, 0x05, 0xa5, 0xd2, 0xab, 0xe5, 0xf8, 0x6d, 0xc7, 0xa3, 0x23, 0x24, - 0xf6, 0xfb, 0x6a, 0x19, 0x2e, 0x29, 0x08, 0x36, 0xb0, 0xe8, 0x1b, 0x27, 0x6e, 0x8b, 0xbc, 0x1c, - 0xf8, 0x32, 0x38, 0x51, 0x9f, 0xf5, 0x89, 0x76, 0xac, 0x30, 0xec, 0xff, 0x6a, 0xc1, 0x09, 0x5d, - 0xd9, 0x80, 0xdf, 0xbf, 0x6e, 0xba, 0x27, 0xac, 0x7d, 0xdd, 0x13, 0xe9, 0x94, 0xef, 0x52, 0x5f, - 0x29, 0xdf, 0x66, 0x36, 0x76, 0x79, 0xcf, 0x6c, 0xec, 0x1f, 0xd2, 0x77, 0xfb, 0xf2, 0xb4, 0xed, - 0xe1, 0xbc, 0x7b, 0x7d, 0x91, 0x0d, 0x83, 0x75, 0x47, 0x95, 0xf5, 0x19, 0xe1, 0x7b, 0x95, 0xd9, - 0x69, 0x86, 0x24, 0x20, 0xf6, 0x32, 0xd4, 0xd4, 0x91, 0x97, 0xf4, 0x4e, 0x58, 0xf9, 0xde, 0x89, - 0xbe, 0xb2, 0x42, 0x67, 0xd6, 0xbf, 0xf9, 0xdd, 0xc7, 0xdf, 0xf6, 0xfb, 0xdf, 0x7d, 0xfc, 0x6d, - 0x7f, 0xfc, 0xdd, 0xc7, 0xdf, 0xf6, 0xf1, 0x3b, 0x8f, 0x5b, 0xdf, 0xbc, 0xf3, 0xb8, 0xf5, 0xfb, - 0x77, 0x1e, 0xb7, 0xfe, 0xf8, 0xce, 0xe3, 0xd6, 0x77, 0xee, 0x3c, 0x6e, 0x7d, 0xf1, 0x3f, 0x3d, - 0xfe, 0xb6, 0x97, 0x73, 0xa3, 0x53, 0xe9, 0x8f, 0x67, 0xea, 0x8d, 0xa9, 0xed, 0x0b, 0x2c, 0x40, - 0x92, 0x2e, 0xaf, 0x29, 0x63, 0x4e, 0x4d, 0xc9, 0xe5, 0xf5, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, - 0xda, 0xd9, 0x67, 0x31, 0x41, 0xe5, 0x00, 0x00, + // 11227 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x7d, 0x70, 0x1c, 0xc9, + 0x75, 0x18, 0xae, 0xd9, 0xc5, 0x02, 0xbb, 0x0f, 0x1f, 0x24, 0x9b, 0xe4, 0x1d, 0x8e, 0xba, 0x3b, + 0xd0, 0x73, 0xf6, 0xe9, 0xf4, 0xd3, 0x1d, 0xe0, 0xa3, 0xee, 0xe4, 0xfb, 0xe9, 0x6c, 0xc9, 0xf8, + 0x20, 0x41, 0x90, 0x00, 0x81, 0x6b, 0x80, 0xa4, 0x74, 0xf2, 0xe9, 0x34, 0xd8, 0x6d, 0x2c, 0x86, + 0x98, 0x9d, 0x99, 0x9b, 0x99, 0x05, 0x81, 0xb3, 0x24, 0x4b, 0x96, 0x6c, 0x2b, 0xd1, 0x67, 0xa4, + 0xa4, 0x74, 0x4e, 0x2c, 0x45, 0xb6, 0x94, 0x54, 0x5c, 0x89, 0x2a, 0x4e, 0xf2, 0x47, 0x9c, 0x38, + 0x89, 0xcb, 0x76, 0x2a, 0xa5, 0x94, 0x92, 0xb2, 0xcb, 0xe5, 0xb2, 0x9c, 0xc4, 0x46, 0x24, 0xa6, + 0x52, 0x49, 0xa5, 0x2a, 0xae, 0x72, 0xe2, 0x3f, 0x12, 0x26, 0x95, 0x4a, 0xf5, 0x77, 0xcf, 0xec, + 0x2c, 0xb0, 0x0b, 0x0c, 0x48, 0x4a, 0xb9, 0xff, 0x76, 0xfb, 0xbd, 0x79, 0xaf, 0xa7, 0xa7, 0xfb, + 0xbd, 0xd7, 0xaf, 0xdf, 0x7b, 0x0d, 0x8b, 0x4d, 0x37, 0xd9, 0x6c, 0xaf, 0x4f, 0xd6, 0x83, 0xd6, + 0x94, 0x13, 0x35, 0x83, 0x30, 0x0a, 0x6e, 0xb1, 0x1f, 0xcf, 0xd4, 0x1b, 0x53, 0xdb, 0x17, 0xa6, + 0xc2, 0xad, 0xe6, 0x94, 0x13, 0xba, 0xf1, 0x94, 0x13, 0x86, 0x9e, 0x5b, 0x77, 0x12, 0x37, 0xf0, + 0xa7, 0xb6, 0x9f, 0x75, 0xbc, 0x70, 0xd3, 0x79, 0x76, 0xaa, 0x49, 0x7c, 0x12, 0x39, 0x09, 0x69, + 0x4c, 0x86, 0x51, 0x90, 0x04, 0xe8, 0xc7, 0x35, 0xb5, 0x49, 0x49, 0x8d, 0xfd, 0x78, 0xb5, 0xde, + 0x98, 0xdc, 0xbe, 0x30, 0x19, 0x6e, 0x35, 0x27, 0x29, 0xb5, 0x49, 0x83, 0xda, 0xa4, 0xa4, 0x76, + 0xee, 0x19, 0xa3, 0x2f, 0xcd, 0xa0, 0x19, 0x4c, 0x31, 0xa2, 0xeb, 0xed, 0x0d, 0xf6, 0x8f, 0xfd, + 0x61, 0xbf, 0x38, 0xb3, 0x73, 0xf6, 0xd6, 0x0b, 0xf1, 0xa4, 0x1b, 0xd0, 0xee, 0x4d, 0xd5, 0x83, + 0x88, 0x4c, 0x6d, 0x77, 0x74, 0xe8, 0xdc, 0x65, 0x8d, 0x43, 0x76, 0x12, 0xe2, 0xc7, 0x6e, 0xe0, + 0xc7, 0xcf, 0xd0, 0x2e, 0x90, 0x68, 0x9b, 0x44, 0xe6, 0xeb, 0x19, 0x08, 0x79, 0x94, 0x9e, 0xd3, + 0x94, 0x5a, 0x4e, 0x7d, 0xd3, 0xf5, 0x49, 0xb4, 0xab, 0x1f, 0x6f, 0x91, 0xc4, 0xc9, 0x7b, 0x6a, + 0xaa, 0xdb, 0x53, 0x51, 0xdb, 0x4f, 0xdc, 0x16, 0xe9, 0x78, 0xe0, 0x5d, 0x07, 0x3d, 0x10, 0xd7, + 0x37, 0x49, 0xcb, 0xe9, 0x78, 0xee, 0x9d, 0xdd, 0x9e, 0x6b, 0x27, 0xae, 0x37, 0xe5, 0xfa, 0x49, + 0x9c, 0x44, 0xd9, 0x87, 0xec, 0x5f, 0xb2, 0x60, 0x74, 0xfa, 0xe6, 0xea, 0x74, 0x3b, 0xd9, 0x9c, + 0x0d, 0xfc, 0x0d, 0xb7, 0x89, 0x9e, 0x87, 0xe1, 0xba, 0xd7, 0x8e, 0x13, 0x12, 0x5d, 0x73, 0x5a, + 0x64, 0xdc, 0x3a, 0x6f, 0x3d, 0x55, 0x9b, 0x39, 0xfd, 0xad, 0xbd, 0x89, 0xb7, 0xdc, 0xd9, 0x9b, + 0x18, 0x9e, 0xd5, 0x20, 0x6c, 0xe2, 0xa1, 0xb7, 0xc3, 0x50, 0x14, 0x78, 0x64, 0x1a, 0x5f, 0x1b, + 0x2f, 0xb1, 0x47, 0x4e, 0x88, 0x47, 0x86, 0x30, 0x6f, 0xc6, 0x12, 0x4e, 0x51, 0xc3, 0x28, 0xd8, + 0x70, 0x3d, 0x32, 0x5e, 0x4e, 0xa3, 0xae, 0xf0, 0x66, 0x2c, 0xe1, 0xf6, 0x1f, 0x96, 0x00, 0xa6, + 0xc3, 0x70, 0x25, 0x0a, 0x6e, 0x91, 0x7a, 0x82, 0x3e, 0x04, 0x55, 0x3a, 0xcc, 0x0d, 0x27, 0x71, + 0x58, 0xc7, 0x86, 0x2f, 0xfc, 0xe8, 0x24, 0x7f, 0xeb, 0x49, 0xf3, 0xad, 0xf5, 0x24, 0xa3, 0xd8, + 0x93, 0xdb, 0xcf, 0x4e, 0x2e, 0xaf, 0xd3, 0xe7, 0x97, 0x48, 0xe2, 0xcc, 0x20, 0xc1, 0x0c, 0x74, + 0x1b, 0x56, 0x54, 0x91, 0x0f, 0x03, 0x71, 0x48, 0xea, 0xec, 0x1d, 0x86, 0x2f, 0x2c, 0x4e, 0x1e, + 0x65, 0x36, 0x4f, 0xea, 0x9e, 0xaf, 0x86, 0xa4, 0x3e, 0x33, 0x22, 0x38, 0x0f, 0xd0, 0x7f, 0x98, + 0xf1, 0x41, 0xdb, 0x30, 0x18, 0x27, 0x4e, 0xd2, 0x8e, 0xd9, 0x50, 0x0c, 0x5f, 0xb8, 0x56, 0x18, + 0x47, 0x46, 0x75, 0x66, 0x4c, 0xf0, 0x1c, 0xe4, 0xff, 0xb1, 0xe0, 0x66, 0xff, 0x89, 0x05, 0x63, + 0x1a, 0x79, 0xd1, 0x8d, 0x13, 0xf4, 0x53, 0x1d, 0x83, 0x3b, 0xd9, 0xdb, 0xe0, 0xd2, 0xa7, 0xd9, + 0xd0, 0x9e, 0x14, 0xcc, 0xaa, 0xb2, 0xc5, 0x18, 0xd8, 0x16, 0x54, 0xdc, 0x84, 0xb4, 0xe2, 0xf1, + 0xd2, 0xf9, 0xf2, 0x53, 0xc3, 0x17, 0x2e, 0x17, 0xf5, 0x9e, 0x33, 0xa3, 0x82, 0x69, 0x65, 0x81, + 0x92, 0xc7, 0x9c, 0x8b, 0xfd, 0xab, 0x23, 0xe6, 0xfb, 0xd1, 0x01, 0x47, 0xcf, 0xc2, 0x70, 0x1c, + 0xb4, 0xa3, 0x3a, 0xc1, 0x24, 0x0c, 0xe2, 0x71, 0xeb, 0x7c, 0x99, 0x4e, 0x3d, 0x3a, 0xa9, 0x57, + 0x75, 0x33, 0x36, 0x71, 0xd0, 0xe7, 0x2c, 0x18, 0x69, 0x90, 0x38, 0x71, 0x7d, 0xc6, 0x5f, 0x76, + 0x7e, 0xed, 0xc8, 0x9d, 0x97, 0x8d, 0x73, 0x9a, 0xf8, 0xcc, 0x19, 0xf1, 0x22, 0x23, 0x46, 0x63, + 0x8c, 0x53, 0xfc, 0xe9, 0xe2, 0x6c, 0x90, 0xb8, 0x1e, 0xb9, 0x21, 0xfd, 0x2f, 0x96, 0x8f, 0x5a, + 0x9c, 0x73, 0x1a, 0x84, 0x4d, 0x3c, 0xe4, 0x43, 0x85, 0x2e, 0xbe, 0x78, 0x7c, 0x80, 0xf5, 0x7f, + 0xe1, 0x68, 0xfd, 0x17, 0x83, 0x4a, 0xd7, 0xb5, 0x1e, 0x7d, 0xfa, 0x2f, 0xc6, 0x9c, 0x0d, 0xfa, + 0xac, 0x05, 0xe3, 0x42, 0x38, 0x60, 0xc2, 0x07, 0xf4, 0xe6, 0xa6, 0x9b, 0x10, 0xcf, 0x8d, 0x93, + 0xf1, 0x0a, 0xeb, 0xc3, 0x54, 0x6f, 0x73, 0x6b, 0x3e, 0x0a, 0xda, 0xe1, 0x55, 0xd7, 0x6f, 0xcc, + 0x9c, 0x17, 0x9c, 0xc6, 0x67, 0xbb, 0x10, 0xc6, 0x5d, 0x59, 0xa2, 0x2f, 0x59, 0x70, 0xce, 0x77, + 0x5a, 0x24, 0x0e, 0x1d, 0xfa, 0x69, 0x39, 0x78, 0xc6, 0x73, 0xea, 0x5b, 0xac, 0x47, 0x83, 0x87, + 0xeb, 0x91, 0x2d, 0x7a, 0x74, 0xee, 0x5a, 0x57, 0xd2, 0x78, 0x1f, 0xb6, 0xe8, 0xeb, 0x16, 0x9c, + 0x0a, 0xa2, 0x70, 0xd3, 0xf1, 0x49, 0x43, 0x42, 0xe3, 0xf1, 0x21, 0xb6, 0xf4, 0x3e, 0x78, 0xb4, + 0x4f, 0xb4, 0x9c, 0x25, 0xbb, 0x14, 0xf8, 0x6e, 0x12, 0x44, 0xab, 0x24, 0x49, 0x5c, 0xbf, 0x19, + 0xcf, 0x9c, 0xbd, 0xb3, 0x37, 0x71, 0xaa, 0x03, 0x0b, 0x77, 0xf6, 0x07, 0xfd, 0x34, 0x0c, 0xc7, + 0xbb, 0x7e, 0xfd, 0xa6, 0xeb, 0x37, 0x82, 0xdb, 0xf1, 0x78, 0xb5, 0x88, 0xe5, 0xbb, 0xaa, 0x08, + 0x8a, 0x05, 0xa8, 0x19, 0x60, 0x93, 0x5b, 0xfe, 0x87, 0xd3, 0x53, 0xa9, 0x56, 0xf4, 0x87, 0xd3, + 0x93, 0x69, 0x1f, 0xb6, 0xe8, 0x17, 0x2c, 0x18, 0x8d, 0xdd, 0xa6, 0xef, 0x24, 0xed, 0x88, 0x5c, + 0x25, 0xbb, 0xf1, 0x38, 0xb0, 0x8e, 0x5c, 0x39, 0xe2, 0xa8, 0x18, 0x24, 0x67, 0xce, 0x8a, 0x3e, + 0x8e, 0x9a, 0xad, 0x31, 0x4e, 0xf3, 0xcd, 0x5b, 0x68, 0x7a, 0x5a, 0x0f, 0x17, 0xbb, 0xd0, 0xf4, + 0xa4, 0xee, 0xca, 0x12, 0xfd, 0x24, 0x9c, 0xe4, 0x4d, 0x6a, 0x64, 0xe3, 0xf1, 0x11, 0x26, 0x68, + 0xcf, 0xdc, 0xd9, 0x9b, 0x38, 0xb9, 0x9a, 0x81, 0xe1, 0x0e, 0x6c, 0xf4, 0x1a, 0x4c, 0x84, 0x24, + 0x6a, 0xb9, 0xc9, 0xb2, 0xef, 0xed, 0x4a, 0xf1, 0x5d, 0x0f, 0x42, 0xd2, 0x10, 0xdd, 0x89, 0xc7, + 0x47, 0xcf, 0x5b, 0x4f, 0x55, 0x67, 0xde, 0x26, 0xba, 0x39, 0xb1, 0xb2, 0x3f, 0x3a, 0x3e, 0x88, + 0x9e, 0xfd, 0x2f, 0x4b, 0x70, 0x32, 0xab, 0x38, 0xd1, 0xdf, 0xb4, 0xe0, 0xc4, 0xad, 0xdb, 0xc9, + 0x5a, 0xb0, 0x45, 0xfc, 0x78, 0x66, 0x97, 0x8a, 0x37, 0xa6, 0x32, 0x86, 0x2f, 0xd4, 0x8b, 0x55, + 0xd1, 0x93, 0x57, 0xd2, 0x5c, 0x2e, 0xfa, 0x49, 0xb4, 0x3b, 0xf3, 0xb0, 0x78, 0xbb, 0x13, 0x57, + 0x6e, 0xae, 0x99, 0x50, 0x9c, 0xed, 0xd4, 0xb9, 0x4f, 0x5b, 0x70, 0x26, 0x8f, 0x04, 0x3a, 0x09, + 0xe5, 0x2d, 0xb2, 0xcb, 0x0d, 0x38, 0x4c, 0x7f, 0xa2, 0x57, 0xa0, 0xb2, 0xed, 0x78, 0x6d, 0x22, + 0xac, 0x9b, 0xf9, 0xa3, 0xbd, 0x88, 0xea, 0x19, 0xe6, 0x54, 0xdf, 0x5d, 0x7a, 0xc1, 0xb2, 0x7f, + 0xb7, 0x0c, 0xc3, 0x86, 0x7e, 0xbb, 0x07, 0x16, 0x5b, 0x90, 0xb2, 0xd8, 0x96, 0x0a, 0x53, 0xcd, + 0x5d, 0x4d, 0xb6, 0xdb, 0x19, 0x93, 0x6d, 0xb9, 0x38, 0x96, 0xfb, 0xda, 0x6c, 0x28, 0x81, 0x5a, + 0x10, 0x52, 0xeb, 0x9d, 0xaa, 0xfe, 0x81, 0x22, 0x3e, 0xe1, 0xb2, 0x24, 0x37, 0x33, 0x7a, 0x67, + 0x6f, 0xa2, 0xa6, 0xfe, 0x62, 0xcd, 0xc8, 0xfe, 0x8e, 0x05, 0x67, 0x8c, 0x3e, 0xce, 0x06, 0x7e, + 0xc3, 0x65, 0x9f, 0xf6, 0x3c, 0x0c, 0x24, 0xbb, 0xa1, 0xdc, 0x21, 0xa8, 0x91, 0x5a, 0xdb, 0x0d, + 0x09, 0x66, 0x10, 0x6a, 0xe8, 0xb7, 0x48, 0x1c, 0x3b, 0x4d, 0x92, 0xdd, 0x13, 0x2c, 0xf1, 0x66, + 0x2c, 0xe1, 0x28, 0x02, 0xe4, 0x39, 0x71, 0xb2, 0x16, 0x39, 0x7e, 0xcc, 0xc8, 0xaf, 0xb9, 0x2d, + 0x22, 0x06, 0xf8, 0xff, 0xeb, 0x6d, 0xc6, 0xd0, 0x27, 0x66, 0x1e, 0xba, 0xb3, 0x37, 0x81, 0x16, + 0x3b, 0x28, 0xe1, 0x1c, 0xea, 0xf6, 0x97, 0x2c, 0x78, 0x28, 0xdf, 0x16, 0x43, 0x4f, 0xc2, 0x20, + 0xdf, 0x1e, 0x8a, 0xb7, 0xd3, 0x9f, 0x84, 0xb5, 0x62, 0x01, 0x45, 0x53, 0x50, 0x53, 0x7a, 0x42, + 0xbc, 0xe3, 0x29, 0x81, 0x5a, 0xd3, 0xca, 0x45, 0xe3, 0xd0, 0x41, 0xa3, 0x7f, 0x84, 0xe5, 0xa6, + 0x06, 0x8d, 0xed, 0xa7, 0x18, 0xc4, 0xfe, 0xf7, 0x16, 0x9c, 0x30, 0x7a, 0x75, 0x0f, 0x4c, 0x73, + 0x3f, 0x6d, 0x9a, 0x2f, 0x14, 0x36, 0x9f, 0xbb, 0xd8, 0xe6, 0x9f, 0xb5, 0xe0, 0x9c, 0x81, 0xb5, + 0xe4, 0x24, 0xf5, 0xcd, 0x8b, 0x3b, 0x61, 0x44, 0x62, 0xba, 0xf5, 0x46, 0x8f, 0x19, 0x72, 0x6b, + 0x66, 0x58, 0x50, 0x28, 0x5f, 0x25, 0xbb, 0x5c, 0x88, 0x3d, 0x0d, 0x55, 0x3e, 0x39, 0x83, 0x48, + 0x8c, 0xb8, 0x7a, 0xb7, 0x65, 0xd1, 0x8e, 0x15, 0x06, 0xb2, 0x61, 0x90, 0x09, 0x27, 0xba, 0x58, + 0xa9, 0x1a, 0x02, 0xfa, 0x11, 0x6f, 0xb0, 0x16, 0x2c, 0x20, 0x76, 0x9c, 0xea, 0xce, 0x4a, 0x44, + 0xd8, 0xc7, 0x6d, 0x5c, 0x72, 0x89, 0xd7, 0x88, 0xe9, 0xb6, 0xc1, 0xf1, 0xfd, 0x20, 0x11, 0x3b, + 0x00, 0x63, 0xdb, 0x30, 0xad, 0x9b, 0xb1, 0x89, 0x43, 0x99, 0x7a, 0xce, 0x3a, 0xf1, 0xf8, 0x88, + 0x0a, 0xa6, 0x8b, 0xac, 0x05, 0x0b, 0x88, 0x7d, 0xa7, 0xc4, 0x36, 0x28, 0x6a, 0xe9, 0x93, 0x7b, + 0xb1, 0xbb, 0x8d, 0x52, 0xb2, 0x72, 0xa5, 0x38, 0xc1, 0x45, 0xba, 0xef, 0x70, 0x5f, 0xcf, 0x88, + 0x4b, 0x5c, 0x28, 0xd7, 0xfd, 0x77, 0xb9, 0xbf, 0x55, 0x82, 0x89, 0xf4, 0x03, 0x1d, 0xd2, 0x96, + 0x6e, 0xa9, 0x0c, 0x46, 0x59, 0x7f, 0x87, 0x81, 0x8f, 0x4d, 0xbc, 0x2e, 0x02, 0xab, 0x74, 0x9c, + 0x02, 0xcb, 0x94, 0xa7, 0xe5, 0x03, 0xe4, 0xe9, 0x93, 0x6a, 0xd4, 0x07, 0x32, 0x02, 0x2c, 0xad, + 0x53, 0xce, 0xc3, 0x40, 0x9c, 0x90, 0x70, 0xbc, 0x92, 0x96, 0x47, 0xab, 0x09, 0x09, 0x31, 0x83, + 0xd8, 0xff, 0xa5, 0x04, 0x0f, 0xa7, 0xc7, 0x50, 0xab, 0x80, 0xf7, 0xa6, 0x54, 0xc0, 0x3b, 0x4c, + 0x15, 0x70, 0x77, 0x6f, 0xe2, 0xad, 0x5d, 0x1e, 0xfb, 0xbe, 0xd1, 0x10, 0x68, 0x3e, 0x33, 0x8a, + 0x53, 0xe9, 0x51, 0xbc, 0xbb, 0x37, 0xf1, 0x58, 0x97, 0x77, 0xcc, 0x0c, 0xf3, 0x93, 0x30, 0x18, + 0x11, 0x27, 0x0e, 0x7c, 0x31, 0xd0, 0xea, 0x73, 0x60, 0xd6, 0x8a, 0x05, 0xd4, 0xfe, 0xfd, 0x5a, + 0x76, 0xb0, 0xe7, 0xb9, 0xc3, 0x2e, 0x88, 0x90, 0x0b, 0x03, 0xcc, 0xac, 0xe7, 0xa2, 0xe1, 0xea, + 0xd1, 0x96, 0x11, 0x55, 0x03, 0x8a, 0xf4, 0x4c, 0x95, 0x7e, 0x35, 0xda, 0x84, 0x19, 0x0b, 0xb4, + 0x03, 0xd5, 0xba, 0xb4, 0xb6, 0x4b, 0x45, 0xf8, 0xa5, 0x84, 0xad, 0xad, 0x39, 0x8e, 0x50, 0x79, + 0xad, 0x4c, 0x74, 0xc5, 0x0d, 0x11, 0x28, 0x37, 0xdd, 0x44, 0x7c, 0xd6, 0x23, 0xee, 0xa7, 0xe6, + 0x5d, 0xe3, 0x15, 0x87, 0xa8, 0x12, 0x99, 0x77, 0x13, 0x4c, 0xe9, 0xa3, 0x9f, 0xb3, 0x60, 0x38, + 0xae, 0xb7, 0x56, 0xa2, 0x60, 0xdb, 0x6d, 0x90, 0x48, 0x58, 0x53, 0x47, 0x14, 0x4d, 0xab, 0xb3, + 0x4b, 0x92, 0xa0, 0xe6, 0xcb, 0xf7, 0xb7, 0x1a, 0x82, 0x4d, 0xbe, 0x74, 0x97, 0xf1, 0xb0, 0x78, + 0xf7, 0x39, 0x52, 0x77, 0xa9, 0xfe, 0x93, 0x9b, 0x2a, 0x36, 0x53, 0x8e, 0x6c, 0x5d, 0xce, 0xb5, + 0xeb, 0x5b, 0x74, 0xbd, 0xe9, 0x0e, 0xbd, 0xf5, 0xce, 0xde, 0xc4, 0xc3, 0xb3, 0xf9, 0x3c, 0x71, + 0xb7, 0xce, 0xb0, 0x01, 0x0b, 0xdb, 0x9e, 0x87, 0xc9, 0x6b, 0x6d, 0xc2, 0x5c, 0x26, 0x05, 0x0c, + 0xd8, 0x8a, 0x26, 0x98, 0x19, 0x30, 0x03, 0x82, 0x4d, 0xbe, 0xe8, 0x35, 0x18, 0x6c, 0x39, 0x49, + 0xe4, 0xee, 0x08, 0x3f, 0xc9, 0x11, 0xed, 0xfd, 0x25, 0x46, 0x4b, 0x33, 0x67, 0x9a, 0x9a, 0x37, + 0x62, 0xc1, 0x08, 0xb5, 0xa0, 0xd2, 0x22, 0x51, 0x93, 0x8c, 0x57, 0x8b, 0xf0, 0x09, 0x2f, 0x51, + 0x52, 0x9a, 0x61, 0x8d, 0x5a, 0x47, 0xac, 0x0d, 0x73, 0x2e, 0xe8, 0x15, 0xa8, 0xc6, 0xc4, 0x23, + 0x75, 0x6a, 0xdf, 0xd4, 0x18, 0xc7, 0x77, 0xf6, 0x68, 0xeb, 0x51, 0xc3, 0x62, 0x55, 0x3c, 0xca, + 0x17, 0x98, 0xfc, 0x87, 0x15, 0x49, 0x3a, 0x80, 0xa1, 0xd7, 0x6e, 0xba, 0xfe, 0x38, 0x14, 0x31, + 0x80, 0x2b, 0x8c, 0x56, 0x66, 0x00, 0x79, 0x23, 0x16, 0x8c, 0xec, 0xff, 0x68, 0x01, 0x4a, 0x0b, + 0xb5, 0x7b, 0x60, 0xd4, 0xbe, 0x96, 0x36, 0x6a, 0x17, 0x8b, 0xb4, 0x3a, 0xba, 0xd8, 0xb5, 0xbf, + 0x51, 0x83, 0x8c, 0x3a, 0xb8, 0x46, 0xe2, 0x84, 0x34, 0xde, 0x14, 0xe1, 0x6f, 0x8a, 0xf0, 0x37, + 0x45, 0xb8, 0x12, 0xe1, 0xeb, 0x19, 0x11, 0xfe, 0x1e, 0x63, 0xd5, 0xeb, 0x03, 0xd8, 0x57, 0xd5, + 0x09, 0xad, 0xd9, 0x03, 0x03, 0x81, 0x4a, 0x82, 0x2b, 0xab, 0xcb, 0xd7, 0x72, 0x65, 0xf6, 0xab, + 0x69, 0x99, 0x7d, 0x54, 0x16, 0xff, 0x2f, 0x48, 0xe9, 0x7f, 0x61, 0xc1, 0xdb, 0xd2, 0xd2, 0x4b, + 0xce, 0x9c, 0x85, 0xa6, 0x1f, 0x44, 0x64, 0xce, 0xdd, 0xd8, 0x20, 0x11, 0xf1, 0xeb, 0x24, 0x56, + 0x5e, 0x0c, 0xab, 0x9b, 0x17, 0x03, 0x3d, 0x07, 0x23, 0xb7, 0xe2, 0xc0, 0x5f, 0x09, 0x5c, 0x5f, + 0x88, 0x20, 0xba, 0x11, 0x3e, 0x79, 0x67, 0x6f, 0x62, 0x84, 0x8e, 0xa8, 0x6c, 0xc7, 0x29, 0x2c, + 0x34, 0x0b, 0xa7, 0x6e, 0xbd, 0xb6, 0xe2, 0x24, 0x86, 0x3b, 0x40, 0x6e, 0xdc, 0xd9, 0x81, 0xc5, + 0x95, 0x97, 0x32, 0x40, 0xdc, 0x89, 0x6f, 0xff, 0xb5, 0x12, 0x3c, 0x92, 0x79, 0x91, 0xc0, 0xf3, + 0x82, 0x76, 0x42, 0x37, 0x35, 0xe8, 0xab, 0x16, 0x9c, 0x6c, 0xa5, 0x3d, 0x0e, 0xb1, 0x70, 0xec, + 0xbe, 0xaf, 0x30, 0x1d, 0x91, 0x71, 0x69, 0xcc, 0x8c, 0x8b, 0x11, 0x3a, 0x99, 0x01, 0xc4, 0xb8, + 0xa3, 0x2f, 0xe8, 0x15, 0xa8, 0xb5, 0x9c, 0x9d, 0xeb, 0x61, 0xc3, 0x49, 0xe4, 0x7e, 0xb2, 0xbb, + 0x1b, 0xa0, 0x9d, 0xb8, 0xde, 0x24, 0x3f, 0xda, 0x9f, 0x5c, 0xf0, 0x93, 0xe5, 0x68, 0x35, 0x89, + 0x5c, 0xbf, 0xc9, 0xdd, 0x79, 0x4b, 0x92, 0x0c, 0xd6, 0x14, 0xed, 0xaf, 0x58, 0x59, 0x25, 0xa5, + 0x46, 0x27, 0x72, 0x12, 0xd2, 0xdc, 0x45, 0x1f, 0x86, 0x0a, 0xdd, 0xf8, 0xc9, 0x51, 0xb9, 0x59, + 0xa4, 0xe6, 0x34, 0xbe, 0x84, 0x56, 0xa2, 0xf4, 0x5f, 0x8c, 0x39, 0x53, 0xfb, 0xab, 0xb5, 0xac, + 0xb1, 0xc0, 0x0e, 0x6f, 0x2f, 0x00, 0x34, 0x83, 0x35, 0xd2, 0x0a, 0x3d, 0x3a, 0x2c, 0x16, 0x3b, + 0x01, 0x50, 0xbe, 0x8e, 0x79, 0x05, 0xc1, 0x06, 0x16, 0xfa, 0x0b, 0x16, 0x40, 0x53, 0xce, 0x79, + 0x69, 0x08, 0x5c, 0x2f, 0xf2, 0x75, 0xf4, 0x8a, 0xd2, 0x7d, 0x51, 0x0c, 0xb1, 0xc1, 0x1c, 0xfd, + 0xac, 0x05, 0xd5, 0x44, 0x76, 0x9f, 0xab, 0xc6, 0xb5, 0x22, 0x7b, 0x22, 0x5f, 0x5a, 0xdb, 0x44, + 0x6a, 0x48, 0x14, 0x5f, 0xf4, 0xf3, 0x16, 0x40, 0xbc, 0xeb, 0xd7, 0x57, 0x02, 0xcf, 0xad, 0xef, + 0x0a, 0x8d, 0x79, 0xa3, 0x50, 0x7f, 0x8c, 0xa2, 0x3e, 0x33, 0x46, 0x47, 0x43, 0xff, 0xc7, 0x06, + 0x67, 0xf4, 0x51, 0xa8, 0xc6, 0x62, 0xba, 0x09, 0x1d, 0xb9, 0x56, 0xac, 0x57, 0x88, 0xd3, 0x16, + 0xe2, 0x55, 0xfc, 0xc3, 0x8a, 0x27, 0xfa, 0xb2, 0x05, 0x27, 0xc2, 0xb4, 0x9f, 0x4f, 0xa8, 0xc3, + 0xe2, 0x64, 0x40, 0xc6, 0x8f, 0x38, 0x73, 0xfa, 0xce, 0xde, 0xc4, 0x89, 0x4c, 0x23, 0xce, 0xf6, + 0x82, 0x4a, 0x40, 0x3d, 0x83, 0x97, 0x43, 0xee, 0x73, 0x1c, 0xd2, 0x12, 0x70, 0x3e, 0x0b, 0xc4, + 0x9d, 0xf8, 0x68, 0x05, 0xce, 0xd0, 0xde, 0xed, 0x72, 0xf3, 0x53, 0xaa, 0x97, 0x98, 0x29, 0xc3, + 0xea, 0xcc, 0xa3, 0x62, 0x86, 0x30, 0xaf, 0x7e, 0x16, 0x07, 0xe7, 0x3e, 0x89, 0x7e, 0xd7, 0x82, + 0x47, 0x5d, 0xa6, 0x06, 0x4c, 0x87, 0xb9, 0xd6, 0x08, 0xe2, 0x24, 0x96, 0x14, 0x2a, 0x2b, 0xba, + 0xa9, 0x9f, 0x99, 0x1f, 0x16, 0x6f, 0xf0, 0xe8, 0xc2, 0x3e, 0x5d, 0xc2, 0xfb, 0x76, 0x18, 0xfd, + 0x18, 0x8c, 0xca, 0x75, 0xb1, 0x42, 0x45, 0x30, 0x53, 0xb4, 0xb5, 0x99, 0x53, 0x77, 0xf6, 0x26, + 0x46, 0xd7, 0x4c, 0x00, 0x4e, 0xe3, 0xd9, 0xdf, 0x2e, 0xa5, 0xce, 0x43, 0x94, 0x13, 0x92, 0x89, + 0x9b, 0xba, 0xf4, 0xff, 0x48, 0xe9, 0x59, 0xa8, 0xb8, 0x51, 0xde, 0x25, 0x2d, 0x6e, 0x54, 0x53, + 0x8c, 0x0d, 0xe6, 0xd4, 0x28, 0x3d, 0xe5, 0x64, 0x5d, 0x9d, 0x42, 0x02, 0xbe, 0x52, 0x64, 0x97, + 0x3a, 0x4f, 0xaf, 0x1e, 0x11, 0x5d, 0x3b, 0xd5, 0x01, 0xc2, 0x9d, 0x5d, 0xb2, 0xbf, 0x9d, 0x3e, + 0x83, 0x31, 0x16, 0x6f, 0x0f, 0xe7, 0x4b, 0x9f, 0xb3, 0x60, 0x38, 0x0a, 0x3c, 0xcf, 0xf5, 0x9b, + 0x54, 0xd0, 0x08, 0x6d, 0xf9, 0x81, 0x63, 0x51, 0x58, 0x42, 0xa2, 0x30, 0xd3, 0x16, 0x6b, 0x9e, + 0xd8, 0xec, 0x80, 0xfd, 0x27, 0x16, 0x8c, 0x77, 0x13, 0x88, 0x88, 0xc0, 0x5b, 0xe5, 0x6a, 0x57, + 0xd1, 0x15, 0xcb, 0xfe, 0x1c, 0xf1, 0x88, 0x72, 0x3c, 0x57, 0x67, 0x9e, 0x10, 0xaf, 0xf9, 0xd6, + 0x95, 0xee, 0xa8, 0x78, 0x3f, 0x3a, 0xe8, 0x65, 0x38, 0x69, 0xbc, 0x57, 0xac, 0x06, 0xa6, 0x36, + 0x33, 0x49, 0x2d, 0x90, 0xe9, 0x0c, 0xec, 0xee, 0xde, 0xc4, 0x43, 0xd9, 0x36, 0x21, 0xb1, 0x3b, + 0xe8, 0xd8, 0xdf, 0x28, 0x65, 0xbf, 0x96, 0x52, 0xb6, 0x6f, 0x58, 0x1d, 0xdb, 0xf9, 0xf7, 0x1d, + 0x87, 0x82, 0x63, 0x1b, 0x7f, 0x15, 0xc0, 0xd1, 0x1d, 0xe7, 0x3e, 0x9e, 0x10, 0xdb, 0xff, 0x6a, + 0x00, 0xf6, 0xe9, 0x59, 0x0f, 0xd6, 0x73, 0xdf, 0xc7, 0x8a, 0x9f, 0xb1, 0xd4, 0x91, 0x53, 0x99, + 0x2d, 0xf2, 0xc6, 0x71, 0x8d, 0x3d, 0xdf, 0xc0, 0xc4, 0x3c, 0x4a, 0x41, 0xb9, 0xb1, 0xd3, 0x87, + 0x5b, 0xe8, 0x6b, 0x56, 0xfa, 0xd0, 0x8c, 0x87, 0x9d, 0xb9, 0xc7, 0xd6, 0x27, 0xe3, 0x24, 0x8e, + 0x77, 0x4c, 0x9f, 0xdf, 0x74, 0x3b, 0xa3, 0x9b, 0x04, 0xd8, 0x70, 0x7d, 0xc7, 0x73, 0x5f, 0xa7, + 0xdb, 0x93, 0x0a, 0xd3, 0xb0, 0xcc, 0x64, 0xb9, 0xa4, 0x5a, 0xb1, 0x81, 0x71, 0xee, 0xff, 0x87, + 0x61, 0xe3, 0xcd, 0x73, 0x82, 0x2b, 0xce, 0x98, 0xc1, 0x15, 0x35, 0x23, 0x26, 0xe2, 0xdc, 0x7b, + 0xe0, 0x64, 0xb6, 0x83, 0xfd, 0x3c, 0x6f, 0xff, 0x8f, 0xa1, 0xec, 0x29, 0xd6, 0x1a, 0x89, 0x5a, + 0xb4, 0x6b, 0x6f, 0x7a, 0x96, 0xde, 0xf4, 0x2c, 0xbd, 0xe9, 0x59, 0x32, 0x0f, 0x07, 0x84, 0xd7, + 0x64, 0xe8, 0x1e, 0x79, 0x4d, 0x52, 0x7e, 0xa0, 0x6a, 0xe1, 0x7e, 0x20, 0xfb, 0x4e, 0x05, 0x52, + 0x76, 0x14, 0x1f, 0xef, 0xb7, 0xc3, 0x50, 0x44, 0xc2, 0xe0, 0x3a, 0x5e, 0x14, 0x3a, 0x44, 0xc7, + 0xda, 0xf3, 0x66, 0x2c, 0xe1, 0x54, 0xd7, 0x84, 0x4e, 0xb2, 0x29, 0x94, 0x88, 0xd2, 0x35, 0x2b, + 0x4e, 0xb2, 0x89, 0x19, 0x04, 0xbd, 0x07, 0xc6, 0x12, 0x27, 0x6a, 0x52, 0x7b, 0x7b, 0x9b, 0x7d, + 0x56, 0x71, 0xd6, 0xf9, 0x90, 0xc0, 0x1d, 0x5b, 0x4b, 0x41, 0x71, 0x06, 0x1b, 0xbd, 0x06, 0x03, + 0x9b, 0xc4, 0x6b, 0x89, 0x21, 0x5f, 0x2d, 0x4e, 0xc6, 0xb3, 0x77, 0xbd, 0x4c, 0xbc, 0x16, 0x97, + 0x40, 0xf4, 0x17, 0x66, 0xac, 0xe8, 0x7c, 0xab, 0x6d, 0xb5, 0xe3, 0x24, 0x68, 0xb9, 0xaf, 0x4b, + 0x17, 0xdf, 0xfb, 0x0a, 0x66, 0x7c, 0x55, 0xd2, 0xe7, 0xbe, 0x14, 0xf5, 0x17, 0x6b, 0xce, 0xac, + 0x1f, 0x0d, 0x37, 0x62, 0x9f, 0x6a, 0x57, 0x78, 0xea, 0x8a, 0xee, 0xc7, 0x9c, 0xa4, 0xcf, 0xfb, + 0xa1, 0xfe, 0x62, 0xcd, 0x19, 0xed, 0xaa, 0x79, 0x3f, 0xcc, 0xfa, 0x70, 0xbd, 0xe0, 0x3e, 0xf0, + 0x39, 0x9f, 0x3b, 0xff, 0x9f, 0x80, 0x4a, 0x7d, 0xd3, 0x89, 0x92, 0xf1, 0x11, 0x36, 0x69, 0x94, + 0x4f, 0x67, 0x96, 0x36, 0x62, 0x0e, 0x43, 0x8f, 0x41, 0x39, 0x22, 0x1b, 0x2c, 0x6e, 0xd3, 0x88, + 0xe8, 0xc1, 0x64, 0x03, 0xd3, 0x76, 0xfb, 0x97, 0x4b, 0x69, 0x73, 0x29, 0xfd, 0xde, 0x7c, 0xb6, + 0xd7, 0xdb, 0x51, 0x2c, 0xfd, 0x3e, 0xc6, 0x6c, 0x67, 0xcd, 0x58, 0xc2, 0xd1, 0xc7, 0x2d, 0x18, + 0xba, 0x15, 0x07, 0xbe, 0x4f, 0x12, 0xa1, 0x9a, 0x6e, 0x14, 0x3c, 0x14, 0x57, 0x38, 0x75, 0xdd, + 0x07, 0xd1, 0x80, 0x25, 0x5f, 0xda, 0x5d, 0xb2, 0x53, 0xf7, 0xda, 0x8d, 0x8e, 0x20, 0x8d, 0x8b, + 0xbc, 0x19, 0x4b, 0x38, 0x45, 0x75, 0x7d, 0x8e, 0x3a, 0x90, 0x46, 0x5d, 0xf0, 0x05, 0xaa, 0x80, + 0xdb, 0x7f, 0x65, 0x10, 0xce, 0xe6, 0x2e, 0x0e, 0x6a, 0xc8, 0x30, 0x53, 0xe1, 0x92, 0xeb, 0x11, + 0x19, 0x9e, 0xc4, 0x0c, 0x99, 0x1b, 0xaa, 0x15, 0x1b, 0x18, 0xe8, 0x67, 0x00, 0x42, 0x27, 0x72, + 0x5a, 0x44, 0xf9, 0x65, 0x8f, 0x6c, 0x2f, 0xd0, 0x7e, 0xac, 0x48, 0x9a, 0x7a, 0x6f, 0xaa, 0x9a, + 0x62, 0x6c, 0xb0, 0x44, 0xcf, 0xc3, 0x70, 0x44, 0x3c, 0xe2, 0xc4, 0x2c, 0xec, 0x37, 0x9b, 0xc3, + 0x80, 0x35, 0x08, 0x9b, 0x78, 0xe8, 0x49, 0x15, 0xc9, 0x95, 0x89, 0x68, 0x49, 0x47, 0x73, 0xa1, + 0xcf, 0x5b, 0x30, 0xb6, 0xe1, 0x7a, 0x44, 0x73, 0x17, 0x19, 0x07, 0xcb, 0x47, 0x7f, 0xc9, 0x4b, + 0x26, 0x5d, 0x2d, 0x21, 0x53, 0xcd, 0x31, 0xce, 0xb0, 0xa7, 0x9f, 0x79, 0x9b, 0x44, 0x4c, 0xb4, + 0x0e, 0xa6, 0x3f, 0xf3, 0x0d, 0xde, 0x8c, 0x25, 0x1c, 0x4d, 0xc3, 0x89, 0xd0, 0x89, 0xe3, 0xd9, + 0x88, 0x34, 0x88, 0x9f, 0xb8, 0x8e, 0xc7, 0xf3, 0x01, 0xaa, 0x3a, 0x1e, 0x78, 0x25, 0x0d, 0xc6, + 0x59, 0x7c, 0xf4, 0x7e, 0x78, 0x98, 0x3b, 0x3e, 0x96, 0xdc, 0x38, 0x76, 0xfd, 0xa6, 0x9e, 0x06, + 0xc2, 0xff, 0x33, 0x21, 0x48, 0x3d, 0xbc, 0x90, 0x8f, 0x86, 0xbb, 0x3d, 0x8f, 0x9e, 0x86, 0x6a, + 0xbc, 0xe5, 0x86, 0xb3, 0x51, 0x23, 0x66, 0x87, 0x1e, 0x55, 0xed, 0x6d, 0x5c, 0x15, 0xed, 0x58, + 0x61, 0xa0, 0x3a, 0x8c, 0xf0, 0x4f, 0xc2, 0x43, 0xd1, 0x84, 0x7c, 0x7c, 0xa6, 0xab, 0x7a, 0x14, + 0xe9, 0x6d, 0x93, 0xd8, 0xb9, 0x7d, 0x51, 0x1e, 0xc1, 0xf0, 0x13, 0x83, 0x1b, 0x06, 0x19, 0x9c, + 0x22, 0x6a, 0xff, 0x62, 0x29, 0xbd, 0xe3, 0x36, 0x17, 0x29, 0x8a, 0xe9, 0x52, 0x4c, 0x6e, 0x38, + 0x91, 0xf4, 0xc6, 0x1c, 0x31, 0x6d, 0x41, 0xd0, 0xbd, 0xe1, 0x44, 0xe6, 0xa2, 0x66, 0x0c, 0xb0, + 0xe4, 0x84, 0x6e, 0xc1, 0x40, 0xe2, 0x39, 0x05, 0xe5, 0x39, 0x19, 0x1c, 0xb5, 0x03, 0x64, 0x71, + 0x3a, 0xc6, 0x8c, 0x07, 0x7a, 0x94, 0x5a, 0xfd, 0xeb, 0xf2, 0x88, 0x44, 0x18, 0xea, 0xeb, 0x31, + 0x66, 0xad, 0xf6, 0x5d, 0xc8, 0x91, 0xab, 0x4a, 0x91, 0xa1, 0x0b, 0x00, 0x74, 0x03, 0xb9, 0x12, + 0x91, 0x0d, 0x77, 0x47, 0x18, 0x12, 0x6a, 0xed, 0x5e, 0x53, 0x10, 0x6c, 0x60, 0xc9, 0x67, 0x56, + 0xdb, 0x1b, 0xf4, 0x99, 0x52, 0xe7, 0x33, 0x1c, 0x82, 0x0d, 0x2c, 0xf4, 0x1c, 0x0c, 0xba, 0x2d, + 0xa7, 0xa9, 0x42, 0x30, 0x1f, 0xa5, 0x8b, 0x76, 0x81, 0xb5, 0xdc, 0xdd, 0x9b, 0x18, 0x53, 0x1d, + 0x62, 0x4d, 0x58, 0xe0, 0xa2, 0x6f, 0x58, 0x30, 0x52, 0x0f, 0x5a, 0xad, 0xc0, 0xe7, 0xdb, 0x2e, + 0xb1, 0x87, 0xbc, 0x75, 0x5c, 0x6a, 0x7e, 0x72, 0xd6, 0x60, 0xc6, 0x37, 0x91, 0x2a, 0x21, 0xcb, + 0x04, 0xe1, 0x54, 0xaf, 0xcc, 0xb5, 0x5d, 0x39, 0x60, 0x6d, 0xff, 0xba, 0x05, 0xa7, 0xf8, 0xb3, + 0xc6, 0x6e, 0x50, 0xe4, 0x1e, 0x05, 0xc7, 0xfc, 0x5a, 0x1d, 0x1b, 0x64, 0xe5, 0xa5, 0xeb, 0x80, + 0xe3, 0xce, 0x4e, 0xa2, 0x79, 0x38, 0xb5, 0x11, 0x44, 0x75, 0x62, 0x0e, 0x84, 0x10, 0x4c, 0x8a, + 0xd0, 0xa5, 0x2c, 0x02, 0xee, 0x7c, 0x06, 0xdd, 0x80, 0x87, 0x8c, 0x46, 0x73, 0x1c, 0xb8, 0x6c, + 0x7a, 0x5c, 0x50, 0x7b, 0xe8, 0x52, 0x2e, 0x16, 0xee, 0xf2, 0x74, 0xda, 0x61, 0x52, 0xeb, 0xc1, + 0x61, 0xf2, 0x2a, 0x3c, 0x52, 0xef, 0x1c, 0x99, 0xed, 0xb8, 0xbd, 0x1e, 0x73, 0x49, 0x55, 0x9d, + 0xf9, 0x21, 0x41, 0xe0, 0x91, 0xd9, 0x6e, 0x88, 0xb8, 0x3b, 0x0d, 0xf4, 0x61, 0xa8, 0x46, 0x84, + 0x7d, 0x95, 0x58, 0x24, 0xe2, 0x1c, 0x71, 0x97, 0xac, 0x2d, 0x50, 0x4e, 0x56, 0xcb, 0x5e, 0xd1, + 0x10, 0x63, 0xc5, 0x11, 0xdd, 0x86, 0xa1, 0xd0, 0x49, 0xea, 0x9b, 0x22, 0xfd, 0xe6, 0xc8, 0xf1, + 0x2f, 0x8a, 0x39, 0xf3, 0x81, 0x1b, 0x09, 0xbb, 0x9c, 0x09, 0x96, 0xdc, 0xa8, 0x35, 0x52, 0x0f, + 0x5a, 0x61, 0xe0, 0x13, 0x3f, 0x89, 0xc7, 0x47, 0xb5, 0x35, 0x32, 0xab, 0x5a, 0xb1, 0x81, 0x81, + 0x56, 0xe0, 0x0c, 0xf3, 0x19, 0xdd, 0x74, 0x93, 0xcd, 0xa0, 0x9d, 0xc8, 0x2d, 0xd0, 0xf8, 0x58, + 0xfa, 0xa8, 0x62, 0x31, 0x07, 0x07, 0xe7, 0x3e, 0x79, 0xee, 0xbd, 0x70, 0xaa, 0x63, 0x29, 0xf7, + 0xe5, 0xae, 0x99, 0x83, 0x87, 0xf2, 0x17, 0x4d, 0x5f, 0x4e, 0x9b, 0x7f, 0x90, 0x09, 0x9b, 0x35, + 0x0c, 0xe9, 0x1e, 0x1c, 0x80, 0x0e, 0x94, 0x89, 0xbf, 0x2d, 0x74, 0xc8, 0xa5, 0xa3, 0x7d, 0xbb, + 0x8b, 0xfe, 0x36, 0x5f, 0xf3, 0xcc, 0xcb, 0x71, 0xd1, 0xdf, 0xc6, 0x94, 0x36, 0xfa, 0xa2, 0x95, + 0x32, 0x04, 0xb9, 0xdb, 0xf0, 0x83, 0xc7, 0xb2, 0x73, 0xe8, 0xd9, 0x36, 0xb4, 0xff, 0x75, 0x09, + 0xce, 0x1f, 0x44, 0xa4, 0x87, 0xe1, 0x7b, 0x02, 0x06, 0x63, 0x76, 0x10, 0x2e, 0x84, 0xf2, 0x30, + 0x9d, 0xab, 0xfc, 0x68, 0xfc, 0x55, 0x2c, 0x40, 0xc8, 0x83, 0x72, 0xcb, 0x09, 0x85, 0x37, 0x69, + 0xe1, 0xa8, 0x89, 0x34, 0xf4, 0xbf, 0xe3, 0x2d, 0x39, 0x21, 0xf7, 0x51, 0x18, 0x0d, 0x98, 0xb2, + 0x41, 0x09, 0x54, 0x9c, 0x28, 0x72, 0xe4, 0xa9, 0xeb, 0xd5, 0x62, 0xf8, 0x4d, 0x53, 0x92, 0xfc, + 0xd0, 0x2a, 0xd5, 0x84, 0x39, 0x33, 0xfb, 0xcb, 0xd5, 0x54, 0x32, 0x09, 0x3b, 0x4a, 0x8f, 0x61, + 0x50, 0x38, 0x91, 0xac, 0xa2, 0xf3, 0x97, 0x78, 0x36, 0x20, 0xdb, 0x27, 0x8a, 0x9c, 0x6a, 0xc1, + 0x0a, 0x7d, 0xda, 0x62, 0x99, 0xcb, 0x32, 0xc1, 0x46, 0xec, 0xce, 0x8e, 0x27, 0x91, 0xda, 0xcc, + 0x87, 0x96, 0x8d, 0xd8, 0xe4, 0x2e, 0x2a, 0x10, 0x30, 0xab, 0xb4, 0xb3, 0x02, 0x01, 0xb3, 0x32, + 0x25, 0x1c, 0xed, 0xe4, 0x1c, 0x99, 0x17, 0x90, 0xfd, 0xda, 0xc3, 0x21, 0xf9, 0xd7, 0x2c, 0x38, + 0xe5, 0x66, 0xcf, 0x3e, 0xc5, 0x5e, 0xe6, 0x88, 0x41, 0x19, 0xdd, 0x8f, 0x56, 0x95, 0x3a, 0xef, + 0x00, 0xe1, 0xce, 0xce, 0xa0, 0x06, 0x0c, 0xb8, 0xfe, 0x46, 0x20, 0x8c, 0x98, 0x99, 0xa3, 0x75, + 0x6a, 0xc1, 0xdf, 0x08, 0xf4, 0x6a, 0xa6, 0xff, 0x30, 0xa3, 0x8e, 0x16, 0xe1, 0x4c, 0x24, 0xbc, + 0x4d, 0x97, 0xdd, 0x38, 0x09, 0xa2, 0xdd, 0x45, 0xb7, 0xe5, 0x26, 0xcc, 0x00, 0x29, 0xcf, 0x8c, + 0x53, 0xfd, 0x80, 0x73, 0xe0, 0x38, 0xf7, 0x29, 0xf4, 0x3a, 0x0c, 0xc9, 0x54, 0xeb, 0x6a, 0x11, + 0xfb, 0xc2, 0xce, 0xf9, 0xaf, 0x26, 0xd3, 0xaa, 0xc8, 0xaa, 0x96, 0x0c, 0xd1, 0xa7, 0x2c, 0x18, + 0xe3, 0xbf, 0x2f, 0xef, 0x36, 0x78, 0x0a, 0x53, 0xad, 0x88, 0xa0, 0xe2, 0xd5, 0x14, 0xcd, 0x19, + 0x44, 0x37, 0xa5, 0xe9, 0x36, 0x9c, 0xe1, 0x6b, 0x7f, 0x63, 0x04, 0x3a, 0x4f, 0x68, 0xd1, 0x47, + 0xa0, 0x16, 0xa9, 0x4c, 0x74, 0xab, 0x08, 0xcb, 0x41, 0x4e, 0x35, 0x71, 0x3a, 0xac, 0xac, 0x32, + 0x9d, 0x73, 0xae, 0x39, 0xd2, 0xbd, 0x53, 0xac, 0x0f, 0x72, 0x0b, 0x58, 0x66, 0x82, 0xab, 0x3e, + 0xa4, 0xdb, 0xf5, 0xeb, 0x98, 0xf1, 0x40, 0x11, 0x0c, 0x6e, 0x12, 0xc7, 0x4b, 0x36, 0x8b, 0x39, + 0x4f, 0xb8, 0xcc, 0x68, 0x65, 0xf3, 0x91, 0x78, 0x2b, 0x16, 0x9c, 0xd0, 0x0e, 0x0c, 0x6d, 0xf2, + 0xb9, 0x28, 0xb6, 0x33, 0x4b, 0x47, 0x1d, 0xdc, 0xd4, 0x04, 0xd7, 0x33, 0x4f, 0x34, 0x60, 0xc9, + 0x8e, 0x85, 0xfe, 0x18, 0xc1, 0x09, 0x5c, 0x8a, 0x14, 0x97, 0x8a, 0xd5, 0x7b, 0x64, 0xc2, 0x87, + 0x60, 0x24, 0x22, 0xf5, 0xc0, 0xaf, 0xbb, 0x1e, 0x69, 0x4c, 0xcb, 0xb3, 0x82, 0x7e, 0x12, 0x78, + 0x98, 0x4b, 0x00, 0x1b, 0x34, 0x70, 0x8a, 0x22, 0x5b, 0x64, 0x2a, 0x7d, 0x95, 0x7e, 0x10, 0x22, + 0x7c, 0xd3, 0x8b, 0x05, 0x25, 0xcb, 0x32, 0x9a, 0x7c, 0x91, 0xa5, 0xdb, 0x70, 0x86, 0x2f, 0x7a, + 0x19, 0x20, 0x58, 0xe7, 0xf1, 0x3d, 0xd3, 0x89, 0x70, 0x54, 0xf7, 0xf3, 0xaa, 0x63, 0x3c, 0x93, + 0x4f, 0x52, 0xc0, 0x06, 0x35, 0x74, 0x15, 0x80, 0x2f, 0x9b, 0xb5, 0xdd, 0x50, 0xee, 0x79, 0x64, + 0x06, 0x16, 0xac, 0x2a, 0xc8, 0xdd, 0xbd, 0x89, 0x4e, 0xc7, 0x21, 0x8b, 0xa1, 0x30, 0x1e, 0x47, + 0x3f, 0x0d, 0x43, 0x71, 0xbb, 0xd5, 0x72, 0x94, 0x1b, 0xbb, 0xc0, 0xdc, 0x40, 0x4e, 0xd7, 0x90, + 0x8a, 0xbc, 0x01, 0x4b, 0x8e, 0xe8, 0x16, 0x95, 0xef, 0x42, 0x3c, 0xf1, 0x55, 0xc4, 0xcd, 0x93, + 0x61, 0xf6, 0x4e, 0xef, 0x92, 0x7b, 0x00, 0x9c, 0x83, 0x73, 0x77, 0x6f, 0xe2, 0xa1, 0x74, 0xfb, + 0x62, 0x20, 0xb2, 0xf5, 0x72, 0x69, 0xa2, 0x2b, 0xb2, 0x08, 0x0c, 0x7d, 0x6d, 0x59, 0x9b, 0xe0, + 0x29, 0x5d, 0x04, 0x86, 0x35, 0x77, 0x1f, 0x33, 0xf3, 0x61, 0xb4, 0x04, 0xa7, 0xeb, 0x81, 0x9f, + 0x44, 0x81, 0xe7, 0xf1, 0x22, 0x48, 0x7c, 0xfb, 0xc9, 0xdd, 0xdc, 0x6f, 0x15, 0xdd, 0x3e, 0x3d, + 0xdb, 0x89, 0x82, 0xf3, 0x9e, 0xa3, 0x06, 0x79, 0x56, 0x39, 0x8c, 0x15, 0x72, 0xf2, 0x98, 0xa2, + 0x29, 0x24, 0x94, 0xf2, 0x5d, 0x1e, 0xa0, 0x26, 0xfc, 0x74, 0x34, 0xa6, 0xf8, 0x62, 0xcf, 0xc1, + 0x08, 0xd9, 0x49, 0x48, 0xe4, 0x3b, 0xde, 0x75, 0xbc, 0x28, 0xbd, 0xce, 0x6c, 0x61, 0x5e, 0x34, + 0xda, 0x71, 0x0a, 0x0b, 0xd9, 0xca, 0x11, 0x64, 0xa4, 0xc5, 0x72, 0x47, 0x90, 0x74, 0xfb, 0xd8, + 0xff, 0xb3, 0x94, 0x32, 0x58, 0xd7, 0x22, 0x42, 0x50, 0x00, 0x15, 0x3f, 0x68, 0x28, 0x85, 0x74, + 0xa5, 0x18, 0x85, 0x74, 0x2d, 0x68, 0x18, 0xe5, 0x6b, 0xe8, 0xbf, 0x18, 0x73, 0x3e, 0xac, 0xbe, + 0x87, 0x2c, 0x84, 0xc2, 0x00, 0x62, 0x23, 0x56, 0x24, 0x67, 0x55, 0xdf, 0x63, 0xd9, 0x64, 0x84, + 0xd3, 0x7c, 0xd1, 0x16, 0x54, 0x36, 0x83, 0x38, 0x91, 0xdb, 0xb3, 0x23, 0xee, 0x04, 0x2f, 0x07, + 0x71, 0xc2, 0xac, 0x2c, 0xf5, 0xda, 0xb4, 0x25, 0xc6, 0x9c, 0x87, 0xfd, 0x9f, 0xac, 0xd4, 0x19, + 0xc3, 0x4d, 0x16, 0x99, 0xbc, 0x4d, 0x7c, 0x2a, 0x6b, 0xcc, 0x50, 0xac, 0x1f, 0xcb, 0xe4, 0x79, + 0xbe, 0xad, 0x5b, 0xe1, 0xb1, 0xdb, 0x94, 0xc2, 0x24, 0x23, 0x61, 0x44, 0x6d, 0x7d, 0xcc, 0x4a, + 0x67, 0xdc, 0x96, 0x8a, 0xd8, 0x80, 0x99, 0x59, 0xe7, 0x07, 0x26, 0xef, 0xda, 0x5f, 0xb4, 0x60, + 0x68, 0xc6, 0xa9, 0x6f, 0x05, 0x1b, 0x1b, 0xe8, 0x69, 0xa8, 0x36, 0xda, 0x91, 0x99, 0xfc, 0xab, + 0x1c, 0x2b, 0x73, 0xa2, 0x1d, 0x2b, 0x0c, 0x3a, 0x87, 0x37, 0x9c, 0xba, 0xcc, 0x3d, 0x2f, 0xf3, + 0x39, 0x7c, 0x89, 0xb5, 0x60, 0x01, 0x41, 0xcf, 0xc3, 0x70, 0xcb, 0xd9, 0x91, 0x0f, 0x67, 0x0f, + 0x38, 0x96, 0x34, 0x08, 0x9b, 0x78, 0xf6, 0x3f, 0xb7, 0x60, 0x7c, 0xc6, 0x89, 0xdd, 0xfa, 0x74, + 0x3b, 0xd9, 0x9c, 0x71, 0x93, 0xf5, 0x76, 0x7d, 0x8b, 0x24, 0xbc, 0xe0, 0x00, 0xed, 0x65, 0x3b, + 0xa6, 0x4b, 0x49, 0xed, 0x7b, 0x55, 0x2f, 0xaf, 0x8b, 0x76, 0xac, 0x30, 0xd0, 0xeb, 0x30, 0x1c, + 0x3a, 0x71, 0x7c, 0x3b, 0x88, 0x1a, 0x98, 0x6c, 0x14, 0x53, 0xee, 0x63, 0x95, 0xd4, 0x23, 0x92, + 0x60, 0xb2, 0x21, 0x0e, 0xe1, 0x35, 0x7d, 0x6c, 0x32, 0xb3, 0x3f, 0x67, 0xc1, 0x23, 0x33, 0xc4, + 0x89, 0x48, 0xc4, 0xaa, 0x83, 0xa8, 0x17, 0x99, 0xf5, 0x82, 0x76, 0x03, 0xbd, 0x06, 0xd5, 0x84, + 0x36, 0xd3, 0x6e, 0x59, 0xc5, 0x76, 0x8b, 0x9d, 0xa1, 0xaf, 0x09, 0xe2, 0x58, 0xb1, 0xb1, 0xff, + 0xaa, 0x05, 0x23, 0xec, 0x38, 0x72, 0x8e, 0x24, 0x8e, 0xeb, 0x75, 0x14, 0xd1, 0xb2, 0x7a, 0x2c, + 0xa2, 0x75, 0x1e, 0x06, 0x36, 0x83, 0x16, 0xc9, 0x1e, 0xa5, 0x5f, 0x0e, 0x5a, 0x04, 0x33, 0x08, + 0x7a, 0x96, 0x7e, 0x78, 0xd7, 0x4f, 0x1c, 0xba, 0x04, 0xa4, 0xbb, 0xfb, 0x04, 0xff, 0xe8, 0xaa, + 0x19, 0x9b, 0x38, 0xf6, 0x6f, 0xd5, 0x60, 0x48, 0xc4, 0x5b, 0xf4, 0x5c, 0x74, 0x42, 0xfa, 0x3f, + 0x4a, 0x5d, 0xfd, 0x1f, 0x31, 0x0c, 0xd6, 0x59, 0x35, 0x3f, 0x61, 0xdb, 0x5e, 0x2d, 0x24, 0x40, + 0x87, 0x17, 0x08, 0xd4, 0xdd, 0xe2, 0xff, 0xb1, 0x60, 0x85, 0xbe, 0x60, 0xc1, 0x89, 0x7a, 0xe0, + 0xfb, 0xa4, 0xae, 0x0d, 0xaf, 0x81, 0x22, 0xe2, 0x30, 0x66, 0xd3, 0x44, 0xf5, 0x59, 0x58, 0x06, + 0x80, 0xb3, 0xec, 0xd1, 0x8b, 0x30, 0xca, 0xc7, 0xec, 0x46, 0xca, 0x47, 0xaf, 0x6b, 0x2b, 0x99, + 0x40, 0x9c, 0xc6, 0x45, 0x93, 0xfc, 0xac, 0x43, 0x54, 0x31, 0x1a, 0xd4, 0xae, 0x4c, 0xa3, 0x7e, + 0x91, 0x81, 0x81, 0x22, 0x40, 0x11, 0xd9, 0x88, 0x48, 0xbc, 0x29, 0xe2, 0x51, 0x98, 0xd1, 0x37, + 0x74, 0xb8, 0x04, 0x75, 0xdc, 0x41, 0x09, 0xe7, 0x50, 0x47, 0x5b, 0x62, 0x03, 0x5e, 0x2d, 0x42, + 0x86, 0x8a, 0xcf, 0xdc, 0x75, 0x1f, 0x3e, 0x01, 0x95, 0x78, 0xd3, 0x89, 0x1a, 0xcc, 0xd8, 0x2c, + 0xf3, 0xa4, 0xa8, 0x55, 0xda, 0x80, 0x79, 0x3b, 0x9a, 0x83, 0x93, 0x99, 0xca, 0x50, 0xb1, 0xf0, + 0xa5, 0xab, 0x04, 0x98, 0x4c, 0x4d, 0xa9, 0x18, 0x77, 0x3c, 0x61, 0x3a, 0x67, 0x86, 0x0f, 0x70, + 0xce, 0xec, 0xaa, 0xa8, 0x47, 0xee, 0xe5, 0x7e, 0xa9, 0x90, 0x01, 0xe8, 0x29, 0xc4, 0xf1, 0xb3, + 0x99, 0x10, 0xc7, 0x51, 0xd6, 0x81, 0x1b, 0xc5, 0x74, 0xa0, 0xff, 0x78, 0xc6, 0xfb, 0x19, 0x9f, + 0xf8, 0xe7, 0x16, 0xc8, 0xef, 0x3a, 0xeb, 0xd4, 0x37, 0x09, 0x9d, 0x32, 0xe8, 0x3d, 0x30, 0xa6, + 0xf6, 0xf5, 0xb3, 0x41, 0xdb, 0xe7, 0xa1, 0x89, 0x65, 0x6d, 0x78, 0xe2, 0x14, 0x14, 0x67, 0xb0, + 0xd1, 0x14, 0xd4, 0xe8, 0x38, 0xf1, 0x47, 0xb9, 0xae, 0x55, 0xbe, 0x83, 0xe9, 0x95, 0x05, 0xf1, + 0x94, 0xc6, 0x41, 0x01, 0x9c, 0xf2, 0x9c, 0x38, 0x61, 0x3d, 0xa0, 0xdb, 0xfc, 0x43, 0x96, 0x87, + 0x60, 0x59, 0x16, 0x8b, 0x59, 0x42, 0xb8, 0x93, 0xb6, 0xfd, 0x9d, 0x01, 0x18, 0x4d, 0x49, 0xc6, + 0x3e, 0x95, 0xf4, 0xd3, 0x50, 0x95, 0x7a, 0x33, 0x5b, 0xc8, 0x46, 0x29, 0x57, 0x85, 0x41, 0x95, + 0xd6, 0xba, 0xd6, 0xaa, 0x59, 0xa3, 0xc2, 0x50, 0xb8, 0xd8, 0xc4, 0x63, 0x42, 0x39, 0xf1, 0xe2, + 0x59, 0xcf, 0x25, 0x7e, 0xc2, 0xbb, 0x59, 0x8c, 0x50, 0x5e, 0x5b, 0x5c, 0x35, 0x89, 0x6a, 0xa1, + 0x9c, 0x01, 0xe0, 0x2c, 0x7b, 0xf4, 0x49, 0x0b, 0x46, 0x9d, 0xdb, 0xb1, 0x2e, 0x39, 0x2b, 0x82, + 0x19, 0x8f, 0xa8, 0xa4, 0x52, 0x55, 0x6c, 0xb9, 0x4b, 0x3c, 0xd5, 0x84, 0xd3, 0x4c, 0xd1, 0x1b, + 0x16, 0x20, 0xb2, 0x43, 0xea, 0x32, 0xdc, 0x52, 0xf4, 0x65, 0xb0, 0x88, 0xed, 0xef, 0xc5, 0x0e, + 0xba, 0x5c, 0xaa, 0x77, 0xb6, 0xe3, 0x9c, 0x3e, 0xd8, 0xff, 0xb8, 0xac, 0x16, 0x94, 0x8e, 0xf0, + 0x75, 0x8c, 0x48, 0x43, 0xeb, 0xf0, 0x91, 0x86, 0x3a, 0x62, 0xa3, 0x33, 0xeb, 0x34, 0x95, 0xa4, + 0x56, 0xba, 0x4f, 0x49, 0x6a, 0x3f, 0x6b, 0xa5, 0x4a, 0x36, 0x0d, 0x5f, 0x78, 0xb9, 0xd8, 0xe8, + 0xe2, 0x49, 0x1e, 0x4d, 0x92, 0x91, 0xee, 0xe9, 0x20, 0x22, 0x2a, 0x4d, 0x0d, 0xb4, 0xbe, 0xa4, + 0xe1, 0xbf, 0x2d, 0xc3, 0xb0, 0xa1, 0x49, 0x73, 0xcd, 0x22, 0xeb, 0x01, 0x33, 0x8b, 0x4a, 0x7d, + 0x98, 0x45, 0x3f, 0x03, 0xb5, 0xba, 0x94, 0xf2, 0xc5, 0x14, 0x2d, 0xce, 0xea, 0x0e, 0x2d, 0xe8, + 0x55, 0x13, 0xd6, 0x3c, 0xd1, 0x7c, 0x2a, 0xb5, 0x49, 0x68, 0x88, 0x01, 0xa6, 0x21, 0xf2, 0x72, + 0x8f, 0x84, 0xa6, 0xe8, 0x7c, 0x86, 0x55, 0xf6, 0x0a, 0x5d, 0xf1, 0x5e, 0x32, 0x07, 0x80, 0x57, + 0xf6, 0x5a, 0x59, 0x90, 0xcd, 0xd8, 0xc4, 0xb1, 0xbf, 0x63, 0xa9, 0x8f, 0x7b, 0x0f, 0x6a, 0x58, + 0xdc, 0x4a, 0xd7, 0xb0, 0xb8, 0x58, 0xc8, 0x30, 0x77, 0x29, 0x5e, 0x71, 0x0d, 0x86, 0x66, 0x83, + 0x56, 0xcb, 0xf1, 0x1b, 0xe8, 0x47, 0x60, 0xa8, 0xce, 0x7f, 0x0a, 0xc7, 0x0e, 0x3b, 0x3e, 0x15, + 0x50, 0x2c, 0x61, 0xe8, 0x51, 0x18, 0x70, 0xa2, 0xa6, 0x74, 0xe6, 0xb0, 0xe0, 0xa3, 0xe9, 0xa8, + 0x19, 0x63, 0xd6, 0x6a, 0xff, 0xfd, 0x01, 0x60, 0x67, 0xfe, 0x4e, 0x44, 0x1a, 0x6b, 0x01, 0x2b, + 0x9a, 0x78, 0xac, 0x87, 0x8e, 0x7a, 0xb3, 0xf4, 0x20, 0x1f, 0x3c, 0x1a, 0x87, 0x4f, 0xe5, 0x7b, + 0x7d, 0xf8, 0x94, 0x7f, 0x9e, 0x38, 0xf0, 0x00, 0x9d, 0x27, 0xda, 0x9f, 0xb1, 0x00, 0xa9, 0x40, + 0x11, 0x7d, 0xe0, 0x3f, 0x05, 0x35, 0x15, 0x32, 0x22, 0x0c, 0x2b, 0x2d, 0x22, 0x24, 0x00, 0x6b, + 0x9c, 0x1e, 0x76, 0xc8, 0x4f, 0x48, 0xf9, 0x5d, 0x4e, 0xc7, 0x2d, 0x33, 0xa9, 0x2f, 0xc4, 0xb9, + 0xfd, 0xdb, 0x25, 0x78, 0x88, 0xab, 0xe4, 0x25, 0xc7, 0x77, 0x9a, 0xa4, 0x45, 0x7b, 0xd5, 0x6b, + 0x08, 0x47, 0x9d, 0x6e, 0xcd, 0x5c, 0x19, 0x87, 0x7c, 0xd4, 0xb5, 0xcb, 0xd7, 0x1c, 0x5f, 0x65, + 0x0b, 0xbe, 0x9b, 0x60, 0x46, 0x1c, 0xc5, 0x50, 0x95, 0x15, 0xfd, 0x85, 0x2c, 0x2e, 0x88, 0x91, + 0x12, 0x4b, 0x42, 0x6f, 0x12, 0xac, 0x18, 0x51, 0xc3, 0xd5, 0x0b, 0xea, 0x5b, 0x98, 0x84, 0x01, + 0x93, 0xbb, 0x46, 0x18, 0xe8, 0xa2, 0x68, 0xc7, 0x0a, 0xc3, 0xfe, 0x6d, 0x0b, 0xb2, 0x1a, 0xc9, + 0xa8, 0x4e, 0x67, 0xed, 0x5b, 0x9d, 0xae, 0x8f, 0xf2, 0x70, 0x3f, 0x05, 0xc3, 0x4e, 0x42, 0x8d, + 0x08, 0xbe, 0xed, 0x2e, 0x1f, 0xee, 0xac, 0x65, 0x29, 0x68, 0xb8, 0x1b, 0x2e, 0xdb, 0x6e, 0x9b, + 0xe4, 0xec, 0x37, 0x2c, 0xa8, 0xcd, 0x45, 0xbb, 0xfd, 0xe7, 0x5f, 0x74, 0x66, 0x57, 0x94, 0xfa, + 0xca, 0xae, 0x90, 0xf9, 0x1b, 0xe5, 0x6e, 0xf9, 0x1b, 0xf6, 0x7f, 0x1b, 0x80, 0x53, 0x1d, 0x89, + 0x3c, 0xe8, 0x05, 0x18, 0xa9, 0x8b, 0x99, 0x1b, 0x4a, 0x5f, 0x5b, 0xcd, 0x8c, 0x68, 0xd4, 0x30, + 0x9c, 0xc2, 0xec, 0x61, 0xed, 0x2c, 0xc0, 0xe9, 0x88, 0xbc, 0xd6, 0x26, 0x6d, 0x32, 0xbd, 0x91, + 0x90, 0x68, 0x95, 0xd4, 0x03, 0xbf, 0xc1, 0xcb, 0x3b, 0x96, 0x67, 0x1e, 0xbe, 0xb3, 0x37, 0x71, + 0x1a, 0x77, 0x82, 0x71, 0xde, 0x33, 0x28, 0x84, 0x51, 0xcf, 0x34, 0x4f, 0xc5, 0xde, 0xe4, 0x50, + 0x96, 0xad, 0x32, 0x5f, 0x52, 0xcd, 0x38, 0xcd, 0x20, 0x6d, 0xe3, 0x56, 0xee, 0x93, 0x8d, 0xfb, + 0x09, 0x6d, 0xe3, 0xf2, 0xd0, 0x89, 0x0f, 0x14, 0x9c, 0xc8, 0x75, 0xdc, 0x46, 0xee, 0x4b, 0x50, + 0x95, 0x61, 0x65, 0x3d, 0x85, 0x63, 0x99, 0x74, 0xba, 0x08, 0xdb, 0x27, 0xe1, 0x87, 0x2f, 0x46, + 0x91, 0x31, 0x98, 0xd7, 0x82, 0x64, 0xda, 0xf3, 0x82, 0xdb, 0xd4, 0x7e, 0xb8, 0x1e, 0x13, 0xe1, + 0xfc, 0xb1, 0xef, 0x96, 0x20, 0x67, 0x1f, 0x45, 0xd7, 0xa4, 0x36, 0x5a, 0x52, 0x6b, 0xb2, 0x3f, + 0xc3, 0x05, 0xed, 0xf0, 0xd0, 0x3b, 0xae, 0x9e, 0xdf, 0x5f, 0xf4, 0x3e, 0x50, 0x47, 0xe3, 0xa9, + 0x3c, 0x18, 0x15, 0x91, 0x77, 0x01, 0x40, 0xdb, 0x9a, 0x22, 0xcb, 0x41, 0x1d, 0xa7, 0x6b, 0x93, + 0x14, 0x1b, 0x58, 0xe8, 0x79, 0x18, 0x76, 0xfd, 0x38, 0x71, 0x3c, 0xef, 0xb2, 0xeb, 0x27, 0xc2, + 0xbf, 0xa9, 0xec, 0x90, 0x05, 0x0d, 0xc2, 0x26, 0xde, 0xb9, 0x77, 0x19, 0xdf, 0xaf, 0x9f, 0xef, + 0xbe, 0x09, 0x8f, 0xcc, 0xbb, 0x89, 0xca, 0xcd, 0x51, 0xf3, 0x8d, 0x9a, 0x92, 0x4a, 0x56, 0x59, + 0x5d, 0x73, 0xcd, 0x8c, 0xdc, 0x98, 0x52, 0x3a, 0x95, 0x27, 0x9b, 0x1b, 0x63, 0xbf, 0x00, 0x67, + 0xe6, 0xdd, 0xe4, 0x92, 0xeb, 0x91, 0x3e, 0x99, 0xd8, 0xbf, 0x39, 0x08, 0x23, 0x66, 0x76, 0x67, + 0x3f, 0xe2, 0xfa, 0x73, 0xd4, 0x5a, 0x14, 0x6f, 0xe7, 0xaa, 0x73, 0xbf, 0x9b, 0x47, 0x4e, 0x35, + 0xcd, 0x1f, 0x31, 0xc3, 0x60, 0xd4, 0x3c, 0xb1, 0xd9, 0x01, 0x74, 0x1b, 0x2a, 0x1b, 0x2c, 0x77, + 0xa3, 0x5c, 0x44, 0xc4, 0x46, 0xde, 0x88, 0xea, 0xe5, 0xc8, 0xb3, 0x3f, 0x38, 0x3f, 0xaa, 0xe4, + 0xa3, 0x74, 0x42, 0xa0, 0x11, 0x6f, 0x2c, 0x94, 0x95, 0xc2, 0xe8, 0xa6, 0x12, 0x2a, 0x87, 0x50, + 0x09, 0x29, 0x01, 0x3d, 0x78, 0x9f, 0x04, 0x34, 0xcb, 0xc3, 0x49, 0x36, 0x99, 0x09, 0x2a, 0x12, + 0x24, 0x86, 0xd8, 0x20, 0x18, 0x79, 0x38, 0x29, 0x30, 0xce, 0xe2, 0xa3, 0x8f, 0x2a, 0x11, 0x5f, + 0x2d, 0xc2, 0x35, 0x6c, 0xce, 0xe8, 0xe3, 0x96, 0xee, 0x9f, 0x29, 0xc1, 0xd8, 0xbc, 0xdf, 0x5e, + 0x99, 0x5f, 0x69, 0xaf, 0x7b, 0x6e, 0xfd, 0x2a, 0xd9, 0xa5, 0x22, 0x7c, 0x8b, 0xec, 0x2e, 0xcc, + 0x89, 0x15, 0xa4, 0xe6, 0xcc, 0x55, 0xda, 0x88, 0x39, 0x8c, 0x0a, 0xa3, 0x0d, 0xd7, 0x6f, 0x92, + 0x28, 0x8c, 0x5c, 0xe1, 0xb5, 0x35, 0x84, 0xd1, 0x25, 0x0d, 0xc2, 0x26, 0x1e, 0xa5, 0x1d, 0xdc, + 0xf6, 0x49, 0x94, 0xb5, 0xc5, 0x97, 0x69, 0x23, 0xe6, 0x30, 0x8a, 0x94, 0x44, 0xed, 0x38, 0x11, + 0x93, 0x51, 0x21, 0xad, 0xd1, 0x46, 0xcc, 0x61, 0x74, 0xa5, 0xc7, 0xed, 0x75, 0x16, 0x10, 0x93, + 0xc9, 0xc6, 0x58, 0xe5, 0xcd, 0x58, 0xc2, 0x29, 0xea, 0x16, 0xd9, 0x9d, 0xa3, 0x1b, 0xf7, 0x4c, + 0x52, 0xd6, 0x55, 0xde, 0x8c, 0x25, 0x9c, 0xd5, 0xaf, 0x4c, 0x0f, 0xc7, 0xf7, 0x5d, 0xfd, 0xca, + 0x74, 0xf7, 0xbb, 0xb8, 0x00, 0x7e, 0xc5, 0x82, 0x11, 0x33, 0x8c, 0x0d, 0x35, 0x33, 0x66, 0xfa, + 0x72, 0x47, 0xf9, 0xe3, 0x9f, 0xc8, 0xbb, 0x3b, 0xae, 0xe9, 0x26, 0x41, 0x18, 0x3f, 0x43, 0xfc, + 0xa6, 0xeb, 0x13, 0x16, 0x08, 0xc0, 0xc3, 0xdf, 0x52, 0x31, 0x72, 0xb3, 0x41, 0x83, 0x1c, 0xc2, + 0xce, 0xb7, 0x6f, 0xc2, 0xa9, 0x8e, 0x4c, 0xbc, 0x1e, 0x4c, 0x90, 0x03, 0xf3, 0xa0, 0x6d, 0x0c, + 0xc3, 0x94, 0xb0, 0xac, 0xa1, 0x34, 0x0b, 0xa7, 0xf8, 0x42, 0xa2, 0x9c, 0x56, 0xeb, 0x9b, 0xa4, + 0xa5, 0xb2, 0x2b, 0xd9, 0x11, 0xc1, 0x8d, 0x2c, 0x10, 0x77, 0xe2, 0xdb, 0x9f, 0xb5, 0x60, 0x34, + 0x95, 0x1c, 0x59, 0x90, 0xb1, 0xc4, 0x56, 0x5a, 0xc0, 0xa2, 0x2a, 0x59, 0x94, 0x7b, 0x99, 0x29, + 0x53, 0xbd, 0xd2, 0x34, 0x08, 0x9b, 0x78, 0xf6, 0x17, 0x4b, 0x50, 0x95, 0x41, 0x20, 0x3d, 0x74, + 0xe5, 0xd3, 0x16, 0x8c, 0xaa, 0x63, 0x19, 0xe6, 0xef, 0x2b, 0x15, 0x91, 0xc9, 0x42, 0x7b, 0xa0, + 0x3c, 0x06, 0xfe, 0x46, 0xa0, 0x2d, 0x77, 0x6c, 0x32, 0xc3, 0x69, 0xde, 0xe8, 0x06, 0x40, 0xbc, + 0x1b, 0x27, 0xa4, 0x65, 0x78, 0x1e, 0x6d, 0x63, 0xc5, 0x4d, 0xd6, 0x83, 0x88, 0xd0, 0xf5, 0x75, + 0x2d, 0x68, 0x90, 0x55, 0x85, 0xa9, 0x4d, 0x28, 0xdd, 0x86, 0x0d, 0x4a, 0xf6, 0xdf, 0x2d, 0xc1, + 0xc9, 0x6c, 0x97, 0xd0, 0x07, 0x60, 0x44, 0x72, 0x37, 0xae, 0xc1, 0x93, 0x91, 0x2f, 0x23, 0xd8, + 0x80, 0xdd, 0xdd, 0x9b, 0x98, 0xe8, 0xbc, 0x87, 0x70, 0xd2, 0x44, 0xc1, 0x29, 0x62, 0xfc, 0x6c, + 0x4c, 0x1c, 0xe2, 0xce, 0xec, 0x4e, 0x87, 0xa1, 0x38, 0xe0, 0x32, 0xce, 0xc6, 0x4c, 0x28, 0xce, + 0x60, 0xa3, 0x15, 0x38, 0x63, 0xb4, 0x5c, 0x23, 0x6e, 0x73, 0x73, 0x3d, 0x88, 0xe4, 0x0e, 0xec, + 0x51, 0x1d, 0x30, 0xd7, 0x89, 0x83, 0x73, 0x9f, 0xa4, 0xda, 0xbe, 0xee, 0x84, 0x4e, 0xdd, 0x4d, + 0x76, 0x85, 0x2b, 0x55, 0xc9, 0xa6, 0x59, 0xd1, 0x8e, 0x15, 0x86, 0x7d, 0x15, 0x6a, 0x3c, 0x40, + 0x8c, 0xac, 0x05, 0x39, 0x3b, 0x5c, 0xab, 0x9f, 0x1d, 0xae, 0xbd, 0x04, 0x03, 0x3d, 0x4e, 0xc7, + 0x9e, 0xb6, 0x11, 0x2f, 0x41, 0x95, 0x92, 0x93, 0xb6, 0x62, 0x11, 0x24, 0x03, 0xa8, 0xca, 0xbb, + 0x6e, 0x90, 0x0d, 0x65, 0xd7, 0x91, 0x67, 0x99, 0x6a, 0x8c, 0x16, 0xe2, 0xb8, 0xcd, 0x9c, 0x06, + 0x14, 0x88, 0x9e, 0x80, 0x32, 0xd9, 0x09, 0xb3, 0x87, 0x96, 0x17, 0x77, 0x42, 0x37, 0x22, 0x31, + 0x45, 0x22, 0x3b, 0x21, 0x3a, 0x07, 0x25, 0xb7, 0x21, 0x34, 0x1e, 0x08, 0x9c, 0xd2, 0xc2, 0x1c, + 0x2e, 0xb9, 0x0d, 0x7b, 0x07, 0x6a, 0xea, 0x72, 0x1d, 0xb4, 0x25, 0x15, 0x81, 0x55, 0x44, 0x08, + 0x98, 0xa4, 0xdb, 0x45, 0x05, 0xb4, 0x01, 0x74, 0xca, 0x69, 0x51, 0xc2, 0xea, 0x3c, 0x0c, 0xd4, + 0x03, 0x91, 0x0e, 0x5f, 0xd5, 0x64, 0x98, 0x06, 0x60, 0x10, 0xfb, 0x26, 0x8c, 0x5d, 0xf5, 0x83, + 0xdb, 0xec, 0x66, 0x00, 0x56, 0x08, 0x8f, 0x12, 0xde, 0xa0, 0x3f, 0xb2, 0xf6, 0x06, 0x83, 0x62, + 0x0e, 0x53, 0x15, 0xc2, 0x4a, 0xdd, 0x2a, 0x84, 0xd9, 0x1f, 0xb3, 0x60, 0x44, 0xe5, 0xae, 0xcd, + 0x6f, 0x6f, 0x51, 0xba, 0xcd, 0x28, 0x68, 0x87, 0x59, 0xba, 0xec, 0xfa, 0x2b, 0xcc, 0x61, 0x66, + 0x52, 0x67, 0xe9, 0x80, 0xa4, 0xce, 0xf3, 0x30, 0xb0, 0xe5, 0xfa, 0x8d, 0xac, 0x7f, 0xe6, 0xaa, + 0xeb, 0x37, 0x30, 0x83, 0xd0, 0x2e, 0x9c, 0x54, 0x5d, 0x90, 0xda, 0xe5, 0x05, 0x18, 0x59, 0x6f, + 0xbb, 0x5e, 0x43, 0x56, 0xf8, 0xcb, 0xb8, 0x67, 0x66, 0x0c, 0x18, 0x4e, 0x61, 0xd2, 0x4d, 0xe2, + 0xba, 0xeb, 0x3b, 0xd1, 0xee, 0x8a, 0x56, 0x67, 0x4a, 0xc2, 0xcd, 0x28, 0x08, 0x36, 0xb0, 0xec, + 0xcf, 0x97, 0x61, 0x2c, 0x9d, 0xc1, 0xd7, 0xc3, 0x5e, 0xed, 0x09, 0xa8, 0xb0, 0xa4, 0xbe, 0xec, + 0xa7, 0xe5, 0x45, 0xf1, 0x38, 0x0c, 0xc5, 0x30, 0xc8, 0x97, 0x73, 0x31, 0x77, 0x21, 0xa9, 0x4e, + 0x2a, 0xa7, 0x0e, 0x8b, 0xaf, 0x13, 0x12, 0x44, 0xb0, 0x42, 0x9f, 0xb4, 0x60, 0x28, 0x08, 0xcd, + 0xca, 0x52, 0xef, 0x2f, 0x32, 0xbb, 0x51, 0x24, 0x57, 0x09, 0xf3, 0x5a, 0x7d, 0x7a, 0xf9, 0x39, + 0x24, 0xeb, 0x73, 0xef, 0x86, 0x11, 0x13, 0xf3, 0x20, 0x0b, 0xbb, 0x6a, 0x5a, 0xd8, 0x9f, 0x36, + 0x27, 0x85, 0xc8, 0xdf, 0xec, 0x61, 0xb9, 0x5d, 0x87, 0x4a, 0x5d, 0x05, 0x44, 0x1c, 0xaa, 0x2e, + 0xac, 0xaa, 0xcf, 0xc1, 0x0e, 0xc5, 0x38, 0x35, 0xfb, 0x3b, 0x96, 0x31, 0x3f, 0x30, 0x89, 0x17, + 0x1a, 0x28, 0x82, 0x72, 0x73, 0x7b, 0x4b, 0xd8, 0xb5, 0x57, 0x0a, 0x1a, 0xde, 0xf9, 0xed, 0x2d, + 0x3d, 0xc7, 0xcd, 0x56, 0x4c, 0x99, 0xf5, 0xe0, 0x79, 0x4c, 0xa5, 0xf9, 0x96, 0x0f, 0x4e, 0xf3, + 0xb5, 0xdf, 0x28, 0xc1, 0xa9, 0x8e, 0x49, 0x85, 0x5e, 0x87, 0x4a, 0x44, 0xdf, 0x52, 0xbc, 0xde, + 0x62, 0x61, 0x89, 0xb9, 0xf1, 0x42, 0x43, 0xeb, 0xbd, 0x74, 0x3b, 0xe6, 0x2c, 0xd1, 0x15, 0x40, + 0x3a, 0x6c, 0x47, 0xb9, 0x3d, 0xf9, 0x2b, 0x9f, 0x13, 0x8f, 0xa2, 0xe9, 0x0e, 0x0c, 0x9c, 0xf3, + 0x14, 0x7a, 0x31, 0xeb, 0x3d, 0x2d, 0xa7, 0xcf, 0x71, 0xf7, 0x73, 0x84, 0xda, 0xff, 0xa4, 0x04, + 0xa3, 0xa9, 0x42, 0x5f, 0xc8, 0x83, 0x2a, 0xf1, 0xd8, 0x21, 0x87, 0x54, 0x36, 0x47, 0xad, 0x9b, + 0xad, 0x14, 0xe4, 0x45, 0x41, 0x17, 0x2b, 0x0e, 0x0f, 0x46, 0xb0, 0xc1, 0x0b, 0x30, 0x22, 0x3b, + 0xf4, 0x7e, 0xa7, 0xe5, 0x89, 0x01, 0x54, 0x73, 0xf4, 0xa2, 0x01, 0xc3, 0x29, 0x4c, 0xfb, 0x77, + 0xca, 0x30, 0xce, 0x4f, 0x85, 0x1a, 0x6a, 0xe6, 0x2d, 0xc9, 0xcd, 0xdb, 0x5f, 0xd4, 0xe5, 0xf8, + 0xf8, 0x40, 0xae, 0x1f, 0xf5, 0x9a, 0x8a, 0x7c, 0x46, 0x3d, 0x45, 0xaa, 0x7d, 0x35, 0x13, 0xa9, + 0xc6, 0x6d, 0xf8, 0xe6, 0x31, 0xf5, 0xe8, 0xfb, 0x2b, 0x74, 0xed, 0x6f, 0x95, 0xe0, 0x44, 0xe6, + 0x0e, 0x10, 0xf4, 0xf9, 0x74, 0xd9, 0x68, 0xab, 0x08, 0x07, 0xfd, 0xbe, 0xd7, 0x42, 0xf4, 0x57, + 0x3c, 0xfa, 0x3e, 0x2d, 0x15, 0xfb, 0x0f, 0x4a, 0x30, 0x96, 0xbe, 0xbc, 0xe4, 0x01, 0x1c, 0xa9, + 0x77, 0x40, 0x8d, 0xd5, 0xe7, 0x67, 0x97, 0xb2, 0x72, 0xff, 0x3e, 0x2f, 0x85, 0x2e, 0x1b, 0xb1, + 0x86, 0x3f, 0x10, 0x35, 0xb9, 0xed, 0xbf, 0x6d, 0xc1, 0x59, 0xfe, 0x96, 0xd9, 0x79, 0xf8, 0x97, + 0xf2, 0x46, 0xf7, 0x95, 0x62, 0x3b, 0x98, 0x29, 0x23, 0x79, 0xd0, 0xf8, 0xb2, 0xcb, 0x20, 0x45, + 0x6f, 0xd3, 0x53, 0xe1, 0x01, 0xec, 0x6c, 0x5f, 0x93, 0xc1, 0xfe, 0x83, 0x32, 0xe8, 0xfb, 0x2f, + 0x91, 0x2b, 0x12, 0x51, 0x0b, 0x29, 0xa7, 0xb9, 0xba, 0xeb, 0xd7, 0xf5, 0x4d, 0x9b, 0xd5, 0x4c, + 0x1e, 0xea, 0x2f, 0x58, 0x30, 0xec, 0xfa, 0x6e, 0xe2, 0x3a, 0x6c, 0x4f, 0x5e, 0xcc, 0xdd, 0x7c, + 0x8a, 0xdd, 0x02, 0xa7, 0x1c, 0x44, 0xe6, 0xa1, 0x90, 0x62, 0x86, 0x4d, 0xce, 0xe8, 0x43, 0x22, + 0x98, 0xbc, 0x5c, 0x58, 0x36, 0x77, 0x35, 0x13, 0x41, 0x1e, 0x52, 0xc3, 0x2b, 0x89, 0x0a, 0x2a, + 0x82, 0x80, 0x29, 0x29, 0x55, 0x99, 0x59, 0xdf, 0x44, 0x4e, 0x9b, 0x31, 0x67, 0x64, 0xc7, 0x80, + 0x3a, 0xc7, 0xa2, 0xcf, 0x40, 0xdd, 0x29, 0xa8, 0x39, 0xed, 0x24, 0x68, 0xd1, 0x61, 0x12, 0xe7, + 0x56, 0x3a, 0x14, 0x59, 0x02, 0xb0, 0xc6, 0xb1, 0x3f, 0x5f, 0x81, 0x4c, 0x66, 0x28, 0xda, 0x31, + 0xef, 0x6e, 0xb5, 0x8a, 0xbd, 0xbb, 0x55, 0x75, 0x26, 0xef, 0xfe, 0x56, 0xd4, 0x84, 0x4a, 0xb8, + 0xe9, 0xc4, 0xd2, 0xac, 0x7e, 0x49, 0xed, 0xe3, 0x68, 0xe3, 0xdd, 0xbd, 0x89, 0x9f, 0xec, 0xcd, + 0x85, 0x4b, 0xe7, 0xea, 0x14, 0x2f, 0x77, 0xa3, 0x59, 0x33, 0x1a, 0x98, 0xd3, 0xef, 0xe7, 0x76, + 0xc2, 0x8f, 0x8b, 0x8b, 0x08, 0x30, 0x89, 0xdb, 0x5e, 0x22, 0x66, 0xc3, 0x4b, 0x05, 0xae, 0x32, + 0x4e, 0x58, 0x97, 0x57, 0xe0, 0xff, 0xb1, 0xc1, 0x14, 0x7d, 0x00, 0x6a, 0x71, 0xe2, 0x44, 0xc9, + 0x21, 0xb3, 0x90, 0xd5, 0xa0, 0xaf, 0x4a, 0x22, 0x58, 0xd3, 0x43, 0x2f, 0xb3, 0xea, 0xc2, 0x6e, + 0xbc, 0x79, 0xc8, 0x1c, 0x10, 0x59, 0x89, 0x58, 0x50, 0xc0, 0x06, 0x35, 0x74, 0x01, 0x80, 0xcd, + 0x6d, 0x1e, 0xf8, 0x58, 0x65, 0x5e, 0x26, 0x25, 0x0a, 0xb1, 0x82, 0x60, 0x03, 0xcb, 0xfe, 0x51, + 0x48, 0xd7, 0x07, 0x41, 0x13, 0xb2, 0x1c, 0x09, 0x77, 0x69, 0xb3, 0x5c, 0x8e, 0x54, 0xe5, 0x90, + 0x5f, 0xb7, 0xc0, 0x2c, 0x62, 0x82, 0x5e, 0xe3, 0xd5, 0x52, 0xac, 0x22, 0x8e, 0x21, 0x0d, 0xba, + 0x93, 0x4b, 0x4e, 0x98, 0x39, 0x0f, 0x97, 0x25, 0x53, 0xce, 0xbd, 0x0b, 0xaa, 0x12, 0xda, 0x97, + 0x51, 0xf7, 0x51, 0x38, 0x9d, 0xbd, 0xd9, 0x5e, 0x1c, 0x61, 0x1d, 0xec, 0xfa, 0x91, 0xfe, 0x9c, + 0x52, 0x37, 0x7f, 0x4e, 0x0f, 0x37, 0xf8, 0xfe, 0x86, 0x05, 0xe7, 0x0f, 0xba, 0x80, 0x1f, 0x3d, + 0x0a, 0x03, 0xb7, 0x9d, 0x48, 0x96, 0x7d, 0x67, 0x82, 0xf2, 0xa6, 0x13, 0xf9, 0x98, 0xb5, 0xa2, + 0x5d, 0x18, 0xe4, 0xd1, 0x71, 0xc2, 0x5a, 0x3f, 0xe2, 0xda, 0xc8, 0x19, 0x0e, 0xbd, 0x5d, 0xe0, + 0x91, 0x79, 0x58, 0x30, 0xb4, 0xbf, 0x6b, 0x01, 0x5a, 0xde, 0x26, 0x51, 0xe4, 0x36, 0x8c, 0x78, + 0x3e, 0x76, 0xa1, 0x8f, 0x71, 0x71, 0x8f, 0x99, 0xf2, 0x9b, 0xb9, 0xd0, 0xc7, 0xf8, 0x97, 0x7f, + 0xa1, 0x4f, 0xa9, 0xbf, 0x0b, 0x7d, 0xd0, 0x32, 0x9c, 0x6d, 0xf1, 0xed, 0x06, 0xbf, 0x24, 0x83, + 0xef, 0x3d, 0x54, 0x82, 0xdd, 0x23, 0x77, 0xf6, 0x26, 0xce, 0x2e, 0xe5, 0x21, 0xe0, 0xfc, 0xe7, + 0xec, 0x77, 0x01, 0xe2, 0x61, 0x7c, 0xb3, 0x79, 0x81, 0x4f, 0x5d, 0xdd, 0x2f, 0xf6, 0x57, 0x2a, + 0x70, 0x22, 0x53, 0x14, 0x98, 0x6e, 0xf5, 0x3a, 0x23, 0xad, 0x8e, 0xac, 0xbf, 0x3b, 0xbb, 0xd7, + 0x53, 0xec, 0x96, 0x0f, 0x15, 0xd7, 0x0f, 0xdb, 0x49, 0x31, 0x39, 0xb5, 0xbc, 0x13, 0x0b, 0x94, + 0xa0, 0xe1, 0x2e, 0xa6, 0x7f, 0x31, 0x67, 0x53, 0x64, 0x24, 0x58, 0xca, 0x18, 0x1f, 0xb8, 0x4f, + 0xee, 0x80, 0x8f, 0xeb, 0xb8, 0xac, 0x4a, 0x11, 0x8e, 0xc5, 0xcc, 0x64, 0x39, 0xee, 0x73, 0xfb, + 0x5f, 0x2b, 0xc1, 0xb0, 0xf1, 0xd1, 0xd0, 0x2f, 0xa7, 0x4b, 0x7c, 0x59, 0xc5, 0xbd, 0x12, 0xa3, + 0x3f, 0xa9, 0x8b, 0x78, 0xf1, 0x57, 0x7a, 0xb2, 0xb3, 0xba, 0xd7, 0xdd, 0xbd, 0x89, 0x93, 0x99, + 0xfa, 0x5d, 0xa9, 0x8a, 0x5f, 0xe7, 0x3e, 0x02, 0x27, 0x32, 0x64, 0x72, 0x5e, 0x79, 0xcd, 0x7c, + 0xe5, 0x23, 0xbb, 0xa5, 0xcc, 0x21, 0xfb, 0x26, 0x1d, 0x32, 0x91, 0x56, 0x18, 0x78, 0xa4, 0x07, + 0x1f, 0x6c, 0x26, 0x7b, 0xb8, 0xd4, 0x63, 0xf6, 0xf0, 0x53, 0x50, 0x0d, 0x03, 0xcf, 0xad, 0xbb, + 0xaa, 0x0e, 0x26, 0xcb, 0x57, 0x5e, 0x11, 0x6d, 0x58, 0x41, 0xd1, 0x6d, 0xa8, 0xdd, 0xba, 0x9d, + 0xf0, 0xd3, 0x1f, 0xe1, 0xdf, 0x2e, 0xea, 0xd0, 0x47, 0x19, 0x2d, 0xea, 0x78, 0x09, 0x6b, 0x5e, + 0xc8, 0x86, 0x41, 0xa6, 0x04, 0x65, 0x2a, 0x04, 0xf3, 0xbd, 0x33, 0xed, 0x18, 0x63, 0x01, 0xb1, + 0xbf, 0x5e, 0x83, 0x33, 0x79, 0x95, 0xd9, 0xd1, 0x87, 0x61, 0x90, 0xf7, 0xb1, 0x98, 0xcb, 0x3f, + 0xf2, 0x78, 0xcc, 0x33, 0x82, 0xa2, 0x5b, 0xec, 0x37, 0x16, 0x3c, 0x05, 0x77, 0xcf, 0x59, 0x17, + 0x33, 0xe4, 0x78, 0xb8, 0x2f, 0x3a, 0x9a, 0xfb, 0xa2, 0xc3, 0xb9, 0x7b, 0xce, 0x3a, 0xda, 0x81, + 0x4a, 0xd3, 0x4d, 0x88, 0x23, 0x9c, 0x08, 0x37, 0x8f, 0x85, 0x39, 0x71, 0xb8, 0x95, 0xc6, 0x7e, + 0x62, 0xce, 0x10, 0x7d, 0xcd, 0x82, 0x13, 0xeb, 0xe9, 0x52, 0x01, 0x42, 0x78, 0x3a, 0xc7, 0x50, + 0x7d, 0x3f, 0xcd, 0x88, 0xdf, 0x68, 0x95, 0x69, 0xc4, 0xd9, 0xee, 0xa0, 0x4f, 0x58, 0x30, 0xb4, + 0xe1, 0x7a, 0x46, 0x21, 0xe6, 0x63, 0xf8, 0x38, 0x97, 0x18, 0x03, 0xbd, 0xe3, 0xe0, 0xff, 0x63, + 0x2c, 0x39, 0x77, 0xd3, 0x54, 0x83, 0x47, 0xd5, 0x54, 0x43, 0xf7, 0x49, 0x53, 0x7d, 0xca, 0x82, + 0x9a, 0x1a, 0x69, 0x91, 0xfe, 0xfd, 0x81, 0x63, 0xfc, 0xe4, 0xdc, 0x73, 0xa2, 0xfe, 0x62, 0xcd, + 0x1c, 0x7d, 0xc1, 0x82, 0x61, 0xe7, 0xf5, 0x76, 0x44, 0x1a, 0x64, 0x3b, 0x08, 0x63, 0x51, 0xd1, + 0xec, 0x95, 0xe2, 0x3b, 0x33, 0x4d, 0x99, 0xcc, 0x91, 0xed, 0xe5, 0x30, 0x16, 0x69, 0x5a, 0xba, + 0x01, 0x9b, 0x5d, 0xb0, 0xf7, 0x4a, 0x30, 0x71, 0x00, 0x05, 0xf4, 0x02, 0x8c, 0x04, 0x51, 0xd3, + 0xf1, 0xdd, 0xd7, 0xcd, 0xda, 0x1f, 0xca, 0xca, 0x5a, 0x36, 0x60, 0x38, 0x85, 0x69, 0x26, 0xa8, + 0x97, 0x0e, 0x48, 0x50, 0x3f, 0x0f, 0x03, 0x11, 0x09, 0x83, 0xec, 0x66, 0x81, 0xa5, 0x48, 0x30, + 0x08, 0x7a, 0x0c, 0xca, 0x4e, 0xe8, 0x8a, 0xa8, 0x36, 0xb5, 0x07, 0x9a, 0x5e, 0x59, 0xc0, 0xb4, + 0x3d, 0x55, 0x2f, 0xa3, 0x72, 0x4f, 0xea, 0x65, 0x50, 0x35, 0x20, 0xce, 0x2e, 0x06, 0xb5, 0x1a, + 0x48, 0x9f, 0x29, 0xd8, 0x6f, 0x94, 0xe1, 0xb1, 0x7d, 0xe7, 0x8b, 0x0e, 0xea, 0xb3, 0xf6, 0x09, + 0xea, 0x93, 0xc3, 0x53, 0x3a, 0x68, 0x78, 0xca, 0x5d, 0x86, 0xe7, 0x13, 0x74, 0x19, 0xc8, 0x9a, + 0x29, 0xc5, 0x5c, 0x68, 0xd8, 0xad, 0x04, 0x8b, 0x58, 0x01, 0x12, 0x8a, 0x35, 0x5f, 0xba, 0x07, + 0x48, 0x25, 0x67, 0x57, 0x8a, 0x50, 0x03, 0x5d, 0x6b, 0xa8, 0xf0, 0xb9, 0xdf, 0x2d, 0xe3, 0xdb, + 0xfe, 0x72, 0x09, 0x9e, 0xe8, 0x41, 0x7a, 0x9b, 0xb3, 0xd8, 0xea, 0x71, 0x16, 0x7f, 0x7f, 0x7f, + 0x26, 0xfb, 0x2f, 0x5b, 0x70, 0xae, 0xbb, 0xf2, 0x40, 0xcf, 0xc2, 0xf0, 0x7a, 0xe4, 0xf8, 0xf5, + 0x4d, 0x76, 0x49, 0xab, 0x1c, 0x14, 0x36, 0xd6, 0xba, 0x19, 0x9b, 0x38, 0x74, 0x7b, 0xcb, 0x63, + 0x12, 0x0c, 0x0c, 0x99, 0x4c, 0x4b, 0xb7, 0xb7, 0x6b, 0x59, 0x20, 0xee, 0xc4, 0xb7, 0xff, 0xac, + 0x94, 0xdf, 0x2d, 0x6e, 0x64, 0xf4, 0xf3, 0x9d, 0xc4, 0x57, 0x28, 0xf5, 0x20, 0x4b, 0xca, 0xf7, + 0x5a, 0x96, 0x0c, 0x74, 0x93, 0x25, 0x68, 0x0e, 0x4e, 0x1a, 0x97, 0xf8, 0xf0, 0x04, 0x69, 0x1e, + 0xbd, 0xab, 0xaa, 0x86, 0xac, 0x64, 0xe0, 0xb8, 0xe3, 0x09, 0xf4, 0x34, 0x54, 0x5d, 0x3f, 0x26, + 0xf5, 0x76, 0xc4, 0xa3, 0xc6, 0x8d, 0xa4, 0xb4, 0x05, 0xd1, 0x8e, 0x15, 0x86, 0xfd, 0x2b, 0x25, + 0x78, 0xa4, 0xab, 0x9d, 0x75, 0x8f, 0x64, 0x97, 0xf9, 0x39, 0x06, 0xee, 0xcd, 0xe7, 0x30, 0x07, + 0xa9, 0x72, 0xe0, 0x20, 0xfd, 0x61, 0xf7, 0x89, 0x49, 0x6d, 0xee, 0x1f, 0xd8, 0x51, 0x7a, 0x11, + 0x46, 0x9d, 0x30, 0xe4, 0x78, 0x2c, 0xf8, 0x33, 0x53, 0x35, 0x68, 0xda, 0x04, 0xe2, 0x34, 0x6e, + 0x4f, 0xda, 0xf3, 0x8f, 0x2d, 0xa8, 0x61, 0xb2, 0xc1, 0xa5, 0x03, 0xba, 0x25, 0x86, 0xc8, 0x2a, + 0xa2, 0xe8, 0x29, 0x1d, 0xd8, 0xd8, 0x65, 0xc5, 0x40, 0xf3, 0x06, 0xfb, 0xa8, 0xe9, 0x88, 0xea, + 0xba, 0x9f, 0x72, 0xf7, 0xeb, 0x7e, 0xec, 0x6f, 0x0e, 0xd1, 0xd7, 0x0b, 0x83, 0xd9, 0x88, 0x34, + 0x62, 0xfa, 0x7d, 0xdb, 0x91, 0x27, 0x26, 0x89, 0xfa, 0xbe, 0xd7, 0xf1, 0x22, 0xa6, 0xed, 0xa9, + 0xa3, 0x98, 0x52, 0x5f, 0x35, 0x53, 0xca, 0x07, 0xd6, 0x4c, 0x79, 0x11, 0x46, 0xe3, 0x78, 0x73, + 0x25, 0x72, 0xb7, 0x9d, 0x84, 0x5c, 0x25, 0xbb, 0xc2, 0xca, 0xd2, 0x75, 0x0e, 0x56, 0x2f, 0x6b, + 0x20, 0x4e, 0xe3, 0xa2, 0x79, 0x38, 0xa5, 0x2b, 0x97, 0x90, 0x28, 0x61, 0xa9, 0x02, 0x7c, 0x26, + 0xa8, 0xa4, 0x66, 0x5d, 0xeb, 0x44, 0x20, 0xe0, 0xce, 0x67, 0xa8, 0x7c, 0x4b, 0x35, 0xd2, 0x8e, + 0x0c, 0xa6, 0xe5, 0x5b, 0x8a, 0x0e, 0xed, 0x4b, 0xc7, 0x13, 0x68, 0x09, 0x4e, 0xf3, 0x89, 0x31, + 0x1d, 0x86, 0xc6, 0x1b, 0x0d, 0xa5, 0x8b, 0x4d, 0xce, 0x77, 0xa2, 0xe0, 0xbc, 0xe7, 0xd0, 0xf3, + 0x30, 0xac, 0x9a, 0x17, 0xe6, 0xc4, 0x29, 0x82, 0xf2, 0x62, 0x28, 0x32, 0x0b, 0x0d, 0x6c, 0xe2, + 0xa1, 0xf7, 0xc3, 0xc3, 0xfa, 0x2f, 0xcf, 0x27, 0xe3, 0x47, 0x6b, 0x73, 0xa2, 0x28, 0x94, 0xba, + 0x5c, 0x66, 0x3e, 0x17, 0xad, 0x81, 0xbb, 0x3d, 0x8f, 0xd6, 0xe1, 0x9c, 0x02, 0x5d, 0xf4, 0x13, + 0x96, 0x1c, 0x12, 0x93, 0x19, 0x27, 0x26, 0xd7, 0x23, 0x4f, 0xdc, 0xce, 0xab, 0xee, 0xfd, 0x9c, + 0x77, 0x93, 0xcb, 0x79, 0x98, 0x78, 0x11, 0xef, 0x43, 0x05, 0x4d, 0x41, 0x8d, 0xf8, 0xce, 0xba, + 0x47, 0x96, 0x67, 0x17, 0x58, 0x71, 0x29, 0xe3, 0x24, 0xef, 0xa2, 0x04, 0x60, 0x8d, 0xa3, 0x22, + 0x4c, 0x47, 0xba, 0xde, 0x41, 0xbb, 0x02, 0x67, 0x9a, 0xf5, 0x90, 0xda, 0x1e, 0x6e, 0x9d, 0x4c, + 0xd7, 0x59, 0x40, 0x1d, 0xfd, 0x30, 0xbc, 0x0a, 0xa8, 0x8a, 0xc5, 0x9e, 0x9f, 0x5d, 0xe9, 0xc0, + 0xc1, 0xb9, 0x4f, 0xb2, 0xc0, 0xcb, 0x28, 0xd8, 0xd9, 0x1d, 0x3f, 0x9d, 0x09, 0xbc, 0xa4, 0x8d, + 0x98, 0xc3, 0xd0, 0x15, 0x40, 0x2c, 0xb0, 0xff, 0x72, 0x92, 0x84, 0xca, 0xd8, 0x19, 0x3f, 0xc3, + 0x5e, 0x49, 0x85, 0x91, 0x5d, 0xea, 0xc0, 0xc0, 0x39, 0x4f, 0xd9, 0xff, 0xce, 0x82, 0x51, 0xb5, + 0x5e, 0xef, 0x41, 0x6a, 0x8b, 0x97, 0x4e, 0x6d, 0x99, 0x3f, 0xba, 0xc4, 0x63, 0x3d, 0xef, 0x12, + 0xd2, 0xfc, 0x73, 0xc3, 0x00, 0x5a, 0x2a, 0x2a, 0x85, 0x64, 0x75, 0x55, 0x48, 0x0f, 0xac, 0x44, + 0xca, 0xab, 0x24, 0x53, 0xb9, 0xbf, 0x95, 0x64, 0x56, 0xe1, 0xac, 0x34, 0x17, 0xf8, 0x59, 0xd1, + 0xe5, 0x20, 0x56, 0x02, 0xae, 0x3a, 0xf3, 0x98, 0x20, 0x74, 0x76, 0x21, 0x0f, 0x09, 0xe7, 0x3f, + 0x9b, 0xb2, 0x52, 0x86, 0x0e, 0xb2, 0x52, 0xf4, 0x9a, 0x5e, 0xdc, 0x90, 0xb7, 0xc8, 0x64, 0xd6, + 0xf4, 0xe2, 0xa5, 0x55, 0xac, 0x71, 0xf2, 0x05, 0x7b, 0xad, 0x20, 0xc1, 0x0e, 0x7d, 0x0b, 0x76, + 0x29, 0x62, 0x86, 0xbb, 0x8a, 0x18, 0xe9, 0x93, 0x1e, 0xe9, 0xea, 0x93, 0x7e, 0x0f, 0x8c, 0xb9, + 0xfe, 0x26, 0x89, 0xdc, 0x84, 0x34, 0xd8, 0x5a, 0x60, 0xe2, 0xa7, 0xaa, 0xd5, 0xfa, 0x42, 0x0a, + 0x8a, 0x33, 0xd8, 0x69, 0xb9, 0x38, 0xd6, 0x83, 0x5c, 0xec, 0xa2, 0x8d, 0x4e, 0x14, 0xa3, 0x8d, + 0x4e, 0x1e, 0x5d, 0x1b, 0x9d, 0x3a, 0x56, 0x6d, 0x84, 0x0a, 0xd1, 0x46, 0x3d, 0x09, 0x7a, 0x63, + 0xfb, 0x77, 0xe6, 0x80, 0xed, 0x5f, 0x37, 0x55, 0x74, 0xf6, 0xd0, 0xaa, 0x28, 0x5f, 0xcb, 0x3c, + 0x74, 0x28, 0x2d, 0xf3, 0xa9, 0x12, 0x9c, 0xd5, 0x72, 0x98, 0xce, 0x7e, 0x77, 0x83, 0x4a, 0x22, + 0x76, 0x11, 0x19, 0x3f, 0xb7, 0x31, 0x32, 0xad, 0x74, 0xd2, 0x96, 0x82, 0x60, 0x03, 0x8b, 0x25, + 0x2c, 0x91, 0x88, 0x95, 0x15, 0xce, 0x0a, 0xe9, 0x59, 0xd1, 0x8e, 0x15, 0x06, 0x9d, 0x5f, 0xf4, + 0xb7, 0x48, 0x02, 0xcd, 0x16, 0xcf, 0x9b, 0xd5, 0x20, 0x6c, 0xe2, 0xa1, 0xa7, 0x38, 0x13, 0x26, + 0x20, 0xa8, 0xa0, 0x1e, 0x11, 0x37, 0x13, 0x4b, 0x99, 0xa0, 0xa0, 0xb2, 0x3b, 0x2c, 0x33, 0xad, + 0xd2, 0xd9, 0x1d, 0x16, 0x02, 0xa5, 0x30, 0xec, 0xff, 0x6e, 0xc1, 0x23, 0xb9, 0x43, 0x71, 0x0f, + 0x94, 0xef, 0x4e, 0x5a, 0xf9, 0xae, 0x16, 0xb5, 0xdd, 0x30, 0xde, 0xa2, 0x8b, 0x22, 0xfe, 0x37, + 0x16, 0x8c, 0x69, 0xfc, 0x7b, 0xf0, 0xaa, 0x6e, 0xfa, 0x55, 0x8b, 0xdb, 0x59, 0xd5, 0x3a, 0xde, + 0xed, 0x77, 0x4a, 0xa0, 0x0a, 0x5a, 0x4e, 0xd7, 0x65, 0xb9, 0xe0, 0x03, 0x4e, 0x12, 0x77, 0x61, + 0x90, 0x1d, 0x84, 0xc6, 0xc5, 0x04, 0x79, 0xa4, 0xf9, 0xb3, 0x43, 0x55, 0x7d, 0xc8, 0xcc, 0xfe, + 0xc6, 0x58, 0x30, 0x64, 0x45, 0xaf, 0xdd, 0x98, 0x4a, 0xf3, 0x86, 0x48, 0xcb, 0xd2, 0x45, 0xaf, + 0x45, 0x3b, 0x56, 0x18, 0x54, 0x3d, 0xb8, 0xf5, 0xc0, 0x9f, 0xf5, 0x9c, 0x58, 0xde, 0xbe, 0xa9, + 0xd4, 0xc3, 0x82, 0x04, 0x60, 0x8d, 0xc3, 0xce, 0x48, 0xdd, 0x38, 0xf4, 0x9c, 0x5d, 0x63, 0xff, + 0x6c, 0x14, 0x3b, 0x50, 0x20, 0x6c, 0xe2, 0xd9, 0x2d, 0x18, 0x4f, 0xbf, 0xc4, 0x1c, 0xd9, 0x60, + 0x01, 0x8a, 0x3d, 0x0d, 0xe7, 0x14, 0xd4, 0x1c, 0xf6, 0xd4, 0x62, 0xdb, 0xc9, 0x5e, 0x9a, 0x3f, + 0x2d, 0x01, 0x58, 0xe3, 0xd8, 0xbf, 0x6a, 0xc1, 0xe9, 0x9c, 0x41, 0x2b, 0x30, 0xed, 0x2d, 0xd1, + 0xd2, 0x26, 0x4f, 0xb1, 0xbf, 0x1d, 0x86, 0x1a, 0x64, 0xc3, 0x91, 0x21, 0x70, 0x86, 0x6c, 0x9f, + 0xe3, 0xcd, 0x58, 0xc2, 0xed, 0xff, 0x6a, 0xc1, 0x89, 0x74, 0x5f, 0x63, 0x96, 0x4a, 0xc2, 0x87, + 0xc9, 0x8d, 0xeb, 0xc1, 0x36, 0x89, 0x76, 0xe9, 0x9b, 0x5b, 0x99, 0x54, 0x92, 0x0e, 0x0c, 0x9c, + 0xf3, 0x14, 0x2b, 0x67, 0xdb, 0x50, 0xa3, 0x2d, 0x67, 0xe4, 0x8d, 0x22, 0x67, 0xa4, 0xfe, 0x98, + 0xe6, 0x71, 0xb9, 0x62, 0x89, 0x4d, 0xfe, 0xf6, 0x77, 0x07, 0x40, 0x25, 0xd9, 0xb2, 0xf8, 0xa3, + 0x82, 0xa2, 0xb7, 0xfa, 0xcd, 0x20, 0x52, 0x93, 0x61, 0x60, 0xbf, 0x80, 0x00, 0xee, 0x25, 0x31, + 0x5d, 0x97, 0xea, 0x0d, 0xd7, 0x34, 0x08, 0x9b, 0x78, 0xb4, 0x27, 0x9e, 0xbb, 0x4d, 0xf8, 0x43, + 0x83, 0xe9, 0x9e, 0x2c, 0x4a, 0x00, 0xd6, 0x38, 0xb4, 0x27, 0x0d, 0x77, 0x63, 0x43, 0x6c, 0xf9, + 0x55, 0x4f, 0xe8, 0xe8, 0x60, 0x06, 0xe1, 0x15, 0xca, 0x83, 0x2d, 0x61, 0x05, 0x1b, 0x15, 0xca, + 0x83, 0x2d, 0xcc, 0x20, 0xd4, 0x6e, 0xf3, 0x83, 0xa8, 0xe5, 0x78, 0xee, 0xeb, 0xa4, 0xa1, 0xb8, + 0x08, 0xeb, 0x57, 0xd9, 0x6d, 0xd7, 0x3a, 0x51, 0x70, 0xde, 0x73, 0x74, 0x06, 0x86, 0x11, 0x69, + 0xb8, 0xf5, 0xc4, 0xa4, 0x06, 0xe9, 0x19, 0xb8, 0xd2, 0x81, 0x81, 0x73, 0x9e, 0x42, 0xd3, 0x70, + 0x42, 0x26, 0x49, 0xcb, 0x12, 0x38, 0xc3, 0xe9, 0x92, 0x1b, 0x38, 0x0d, 0xc6, 0x59, 0x7c, 0x2a, + 0xd5, 0x5a, 0xa2, 0x80, 0x17, 0x33, 0x96, 0x0d, 0xa9, 0x26, 0x0b, 0x7b, 0x61, 0x85, 0x61, 0x7f, + 0xbc, 0x4c, 0xb5, 0x70, 0x97, 0xc2, 0x75, 0xf7, 0x2c, 0x5a, 0x30, 0x3d, 0x23, 0x07, 0x7a, 0x98, + 0x91, 0xcf, 0xc1, 0xc8, 0xad, 0x38, 0xf0, 0x55, 0x24, 0x5e, 0xa5, 0x6b, 0x24, 0x9e, 0x81, 0x95, + 0x1f, 0x89, 0x37, 0x58, 0x54, 0x24, 0xde, 0xd0, 0x21, 0x23, 0xf1, 0xbe, 0x5d, 0x01, 0x75, 0x7f, + 0xcb, 0x35, 0x92, 0xdc, 0x0e, 0xa2, 0x2d, 0xd7, 0x6f, 0xb2, 0x7c, 0xf0, 0xaf, 0x59, 0x30, 0xc2, + 0xd7, 0xcb, 0xa2, 0x99, 0x49, 0xb5, 0x51, 0xd0, 0x1d, 0x1c, 0x29, 0x66, 0x93, 0x6b, 0x06, 0xa3, + 0xcc, 0xe5, 0xaf, 0x26, 0x08, 0xa7, 0x7a, 0x84, 0x3e, 0x02, 0x20, 0xfd, 0xa3, 0x1b, 0x52, 0x64, + 0x2e, 0x14, 0xd3, 0x3f, 0x4c, 0x36, 0xb4, 0x0d, 0xbc, 0xa6, 0x98, 0x60, 0x83, 0x21, 0xfa, 0x94, + 0xce, 0x32, 0xe3, 0x21, 0xfb, 0x1f, 0x3a, 0x96, 0xb1, 0xe9, 0x25, 0xc7, 0x0c, 0xc3, 0x90, 0xeb, + 0x37, 0xe9, 0x3c, 0x11, 0x11, 0x4b, 0x6f, 0xcb, 0x2b, 0xcc, 0xb0, 0x18, 0x38, 0x8d, 0x19, 0xc7, + 0x73, 0xfc, 0x3a, 0x89, 0x16, 0x38, 0xba, 0x79, 0xe5, 0x39, 0x6b, 0xc0, 0x92, 0x50, 0xc7, 0x25, + 0x33, 0x95, 0x5e, 0x2e, 0x99, 0x39, 0xf7, 0x5e, 0x38, 0xd5, 0xf1, 0x31, 0xfb, 0x4a, 0x29, 0x3b, + 0x7c, 0x36, 0x9a, 0xfd, 0x4f, 0x07, 0xb5, 0xd2, 0xba, 0x16, 0x34, 0xf8, 0x55, 0x27, 0x91, 0xfe, + 0xa2, 0xc2, 0xc6, 0x2d, 0x70, 0x8a, 0x18, 0xd7, 0xa6, 0xab, 0x46, 0x6c, 0xb2, 0xa4, 0x73, 0x34, + 0x74, 0x22, 0xe2, 0x1f, 0xf7, 0x1c, 0x5d, 0x51, 0x4c, 0xb0, 0xc1, 0x10, 0x6d, 0xa6, 0x72, 0x4a, + 0x2e, 0x1d, 0x3d, 0xa7, 0x84, 0x95, 0xac, 0xca, 0xbb, 0x9d, 0xe0, 0x0b, 0x16, 0x8c, 0xf9, 0xa9, + 0x99, 0x5b, 0x4c, 0x18, 0x69, 0xfe, 0xaa, 0xe0, 0xd7, 0x7f, 0xa5, 0xdb, 0x70, 0x86, 0x7f, 0x9e, + 0x4a, 0xab, 0xf4, 0xa9, 0xd2, 0xf4, 0x9d, 0x49, 0x83, 0xdd, 0xee, 0x4c, 0x42, 0xbe, 0xba, 0xc9, + 0x6e, 0xa8, 0xf0, 0x9b, 0xec, 0x20, 0xe7, 0x16, 0xbb, 0x9b, 0x50, 0xab, 0x47, 0xc4, 0x49, 0x0e, + 0x79, 0xa9, 0x19, 0x3b, 0xa0, 0x9f, 0x95, 0x04, 0xb0, 0xa6, 0x65, 0xff, 0xaf, 0x01, 0x38, 0x29, + 0x47, 0x44, 0x86, 0xa0, 0x53, 0xfd, 0xc8, 0xf9, 0x6a, 0xe3, 0x56, 0xe9, 0xc7, 0xcb, 0x12, 0x80, + 0x35, 0x0e, 0xb5, 0xc7, 0xda, 0x31, 0x59, 0x0e, 0x89, 0xbf, 0xe8, 0xae, 0xc7, 0xe2, 0x9c, 0x53, + 0x2d, 0x94, 0xeb, 0x1a, 0x84, 0x4d, 0x3c, 0x6a, 0x8c, 0x73, 0xbb, 0x38, 0xce, 0xa6, 0xaf, 0x08, + 0x7b, 0x1b, 0x4b, 0x38, 0xfa, 0xc5, 0xdc, 0x4a, 0xba, 0xc5, 0x24, 0x6e, 0x75, 0x44, 0xde, 0xf7, + 0x79, 0x25, 0xe7, 0xdf, 0xb0, 0xe0, 0x2c, 0x6f, 0x95, 0x23, 0x79, 0x3d, 0x6c, 0x38, 0x09, 0x89, + 0x8b, 0xa9, 0x6c, 0x9f, 0xd3, 0x3f, 0xed, 0xe4, 0xcd, 0x63, 0x8b, 0xf3, 0x7b, 0x83, 0x3e, 0x6f, + 0xc1, 0x89, 0xad, 0x54, 0xcd, 0x0f, 0xa9, 0x3a, 0x8e, 0x9a, 0x8e, 0x9f, 0x22, 0xaa, 0x97, 0x5a, + 0xba, 0x3d, 0xc6, 0x59, 0xee, 0xf6, 0x9f, 0x59, 0x60, 0x8a, 0xd1, 0x7b, 0x5f, 0x2a, 0xa4, 0x7f, + 0x53, 0x50, 0x5a, 0x97, 0x95, 0xae, 0xd6, 0xe5, 0x63, 0x50, 0x6e, 0xbb, 0x0d, 0xb1, 0xbf, 0xd0, + 0xa7, 0xaf, 0x0b, 0x73, 0x98, 0xb6, 0xdb, 0xff, 0xa8, 0xa2, 0xfd, 0x16, 0x22, 0x2f, 0xea, 0x07, + 0xe2, 0xb5, 0x37, 0x54, 0xe5, 0x32, 0xfe, 0xe6, 0xd7, 0x3a, 0x2a, 0x97, 0xfd, 0x78, 0xff, 0x69, + 0x6f, 0x7c, 0x80, 0xba, 0x15, 0x2e, 0x1b, 0x3a, 0x20, 0xe7, 0xed, 0x16, 0x54, 0xe9, 0x16, 0x8c, + 0x39, 0x20, 0xab, 0xa9, 0x4e, 0x55, 0x2f, 0x8b, 0xf6, 0xbb, 0x7b, 0x13, 0xef, 0xee, 0xbf, 0x5b, + 0xf2, 0x69, 0xac, 0xe8, 0xa3, 0x18, 0x6a, 0xf4, 0x37, 0x4b, 0xcf, 0x13, 0x9b, 0xbb, 0xeb, 0x4a, + 0x66, 0x4a, 0x40, 0x21, 0xb9, 0x7f, 0x9a, 0x0f, 0xf2, 0xa1, 0xc6, 0x6e, 0x2f, 0x66, 0x4c, 0xf9, + 0x1e, 0x70, 0x45, 0x25, 0xc9, 0x49, 0xc0, 0xdd, 0xbd, 0x89, 0x17, 0xfb, 0x67, 0xaa, 0x1e, 0xc7, + 0x9a, 0x85, 0xfd, 0xc5, 0x01, 0x3d, 0x77, 0x45, 0xc1, 0xba, 0x1f, 0x88, 0xb9, 0xfb, 0x42, 0x66, + 0xee, 0x9e, 0xef, 0x98, 0xbb, 0x63, 0xfa, 0x6a, 0xdb, 0xd4, 0x6c, 0xbc, 0xd7, 0x86, 0xc0, 0xc1, + 0xfe, 0x06, 0x66, 0x01, 0xbd, 0xd6, 0x76, 0x23, 0x12, 0xaf, 0x44, 0x6d, 0xdf, 0xf5, 0x9b, 0x6c, + 0x3a, 0x56, 0x4d, 0x0b, 0x28, 0x05, 0xc6, 0x59, 0x7c, 0xba, 0xa9, 0xa7, 0xdf, 0xfc, 0xa6, 0xb3, + 0xcd, 0x67, 0x95, 0x51, 0x76, 0x6b, 0x55, 0xb4, 0x63, 0x85, 0x61, 0x7f, 0x93, 0x9d, 0x65, 0x1b, + 0x79, 0xc1, 0x74, 0x4e, 0x78, 0xec, 0xba, 0x68, 0x5e, 0xb3, 0x4b, 0xcd, 0x09, 0x7e, 0x47, 0x34, + 0x87, 0xa1, 0xdb, 0x30, 0xb4, 0xce, 0xef, 0x03, 0x2c, 0xa6, 0x5e, 0xbb, 0xb8, 0x5c, 0x90, 0xdd, + 0xfa, 0x22, 0x6f, 0x1a, 0xbc, 0xab, 0x7f, 0x62, 0xc9, 0xcd, 0xfe, 0xfd, 0x0a, 0x9c, 0xc8, 0xdc, + 0xe2, 0x9b, 0x2a, 0xbd, 0x5a, 0x3a, 0xb0, 0xf4, 0xea, 0x07, 0x01, 0x1a, 0x24, 0xf4, 0x82, 0x5d, + 0x66, 0x8e, 0x0d, 0xf4, 0x6d, 0x8e, 0x29, 0x0b, 0x7e, 0x4e, 0x51, 0xc1, 0x06, 0x45, 0x51, 0xa8, + 0x8c, 0x57, 0x72, 0xcd, 0x14, 0x2a, 0x33, 0x6e, 0x75, 0x18, 0xbc, 0xb7, 0xb7, 0x3a, 0xb8, 0x70, + 0x82, 0x77, 0x51, 0x65, 0xdf, 0x1e, 0x22, 0xc9, 0x96, 0xe5, 0x2f, 0xcc, 0xa5, 0xc9, 0xe0, 0x2c, + 0xdd, 0xfb, 0x7a, 0x5f, 0xf8, 0x3b, 0xa0, 0x26, 0xbf, 0x73, 0x3c, 0x5e, 0xd3, 0x15, 0x0c, 0xe4, + 0x34, 0x60, 0x97, 0x67, 0x8b, 0x9f, 0x1d, 0x85, 0x04, 0xe0, 0x7e, 0x15, 0x12, 0xb0, 0x3f, 0x57, + 0xa2, 0x76, 0x3c, 0xef, 0x97, 0xaa, 0x89, 0xf3, 0x24, 0x0c, 0x3a, 0xed, 0x64, 0x33, 0xe8, 0xb8, + 0xdd, 0x70, 0x9a, 0xb5, 0x62, 0x01, 0x45, 0x8b, 0x30, 0xd0, 0xd0, 0x75, 0x4e, 0xfa, 0xf9, 0x9e, + 0xda, 0x25, 0xea, 0x24, 0x04, 0x33, 0x2a, 0xe8, 0x51, 0x18, 0x48, 0x9c, 0xa6, 0x4c, 0xb9, 0x62, + 0x69, 0xb6, 0x6b, 0x4e, 0x33, 0xc6, 0xac, 0xd5, 0x54, 0xdf, 0x03, 0x07, 0xa8, 0xef, 0x17, 0x61, + 0x34, 0x76, 0x9b, 0xbe, 0x93, 0xb4, 0x23, 0x62, 0x1c, 0xf3, 0xe9, 0xc8, 0x0d, 0x13, 0x88, 0xd3, + 0xb8, 0xf6, 0x6f, 0x8e, 0xc0, 0x99, 0xd5, 0xd9, 0x25, 0x59, 0x0a, 0xfc, 0xd8, 0xb2, 0xa6, 0xf2, + 0x78, 0xdc, 0xbb, 0xac, 0xa9, 0x2e, 0xdc, 0x3d, 0x23, 0x6b, 0xca, 0x33, 0xb2, 0xa6, 0xd2, 0x29, + 0x2c, 0xe5, 0x22, 0x52, 0x58, 0xf2, 0x7a, 0xd0, 0x4b, 0x0a, 0xcb, 0xb1, 0xa5, 0x51, 0xed, 0xdb, + 0xa1, 0xbe, 0xd2, 0xa8, 0x54, 0x8e, 0x59, 0x21, 0xc9, 0x05, 0x5d, 0x3e, 0x55, 0x6e, 0x8e, 0x99, + 0xca, 0xef, 0xe1, 0x89, 0x33, 0x42, 0xd4, 0xbf, 0x52, 0x7c, 0x07, 0x7a, 0xc8, 0xef, 0x11, 0xb9, + 0x3b, 0x66, 0x4e, 0xd9, 0x50, 0x11, 0x39, 0x65, 0x79, 0xdd, 0x39, 0x30, 0xa7, 0xec, 0x45, 0x18, + 0xad, 0x7b, 0x81, 0x4f, 0x56, 0xa2, 0x20, 0x09, 0xea, 0x81, 0x27, 0xcc, 0x7a, 0x25, 0x12, 0x66, + 0x4d, 0x20, 0x4e, 0xe3, 0x76, 0x4b, 0x48, 0xab, 0x1d, 0x35, 0x21, 0x0d, 0xee, 0x53, 0x42, 0xda, + 0xcf, 0xeb, 0xd4, 0xe9, 0x61, 0xf6, 0x45, 0x3e, 0x58, 0xfc, 0x17, 0xe9, 0x25, 0x7f, 0x1a, 0xbd, + 0xc1, 0xaf, 0x17, 0xa4, 0x86, 0xf1, 0x6c, 0xd0, 0xa2, 0x86, 0xdf, 0x08, 0x1b, 0x92, 0x57, 0x8f, + 0x61, 0xc2, 0xde, 0x5c, 0xd5, 0x6c, 0xd4, 0x95, 0x83, 0xba, 0x09, 0xa7, 0x3b, 0x72, 0x94, 0xd4, + 0xee, 0xaf, 0x94, 0xe0, 0x87, 0x0e, 0xec, 0x02, 0xba, 0x0d, 0x90, 0x38, 0x4d, 0x31, 0x51, 0xc5, + 0x81, 0xc9, 0x11, 0xc3, 0x2b, 0xd7, 0x24, 0x3d, 0x5e, 0x93, 0x44, 0xfd, 0x65, 0x47, 0x11, 0xf2, + 0x37, 0x8b, 0xaa, 0x0c, 0xbc, 0x8e, 0xd2, 0x8d, 0x38, 0xf0, 0x08, 0x66, 0x10, 0xaa, 0xfe, 0x23, + 0xd2, 0xd4, 0xf7, 0x61, 0xab, 0xcf, 0x87, 0x59, 0x2b, 0x16, 0x50, 0xf4, 0x3c, 0x0c, 0x3b, 0x9e, + 0xc7, 0xf3, 0x63, 0x48, 0x2c, 0xee, 0x17, 0xd2, 0x35, 0xe4, 0x34, 0x08, 0x9b, 0x78, 0xf6, 0x9f, + 0x96, 0x60, 0xe2, 0x00, 0x99, 0xd2, 0x91, 0xf1, 0x57, 0xe9, 0x39, 0xe3, 0x4f, 0xe4, 0x28, 0x0c, + 0x76, 0xc9, 0x51, 0x78, 0x1e, 0x86, 0x13, 0xe2, 0xb4, 0x44, 0x40, 0x96, 0xf0, 0x04, 0xe8, 0x13, + 0x60, 0x0d, 0xc2, 0x26, 0x1e, 0x95, 0x62, 0x63, 0x4e, 0xbd, 0x4e, 0xe2, 0x58, 0x26, 0x21, 0x08, + 0x6f, 0x6a, 0x61, 0x19, 0x0e, 0xcc, 0x49, 0x3d, 0x9d, 0x62, 0x81, 0x33, 0x2c, 0xb3, 0x03, 0x5e, + 0xeb, 0x71, 0xc0, 0xbf, 0x5e, 0x82, 0xc7, 0xf6, 0xd5, 0x6e, 0x3d, 0xe7, 0x87, 0xb4, 0x63, 0x12, + 0x65, 0x27, 0xce, 0xf5, 0x98, 0x44, 0x98, 0x41, 0xf8, 0x28, 0x85, 0xa1, 0x71, 0xdf, 0x78, 0xd1, + 0xc9, 0x4b, 0x7c, 0x94, 0x52, 0x2c, 0x70, 0x86, 0xe5, 0x61, 0xa7, 0xe5, 0xdf, 0x29, 0xc1, 0x13, + 0x3d, 0xd8, 0x00, 0x05, 0x26, 0x79, 0xa5, 0x53, 0xed, 0xca, 0xf7, 0x29, 0x23, 0xf2, 0x90, 0xc3, + 0xf5, 0xcd, 0x12, 0x9c, 0xeb, 0xae, 0x8a, 0xd1, 0x4f, 0xc0, 0x89, 0x48, 0x45, 0x61, 0x99, 0x59, + 0x7a, 0xa7, 0xb9, 0x27, 0x21, 0x05, 0xc2, 0x59, 0x5c, 0x34, 0x09, 0x10, 0x3a, 0xc9, 0x66, 0x7c, + 0x71, 0xc7, 0x8d, 0x13, 0x51, 0x85, 0x66, 0x8c, 0x9f, 0x5d, 0xc9, 0x56, 0x6c, 0x60, 0x50, 0x76, + 0xec, 0xdf, 0x5c, 0x70, 0x2d, 0x48, 0xf8, 0x43, 0x7c, 0x1b, 0x71, 0x5a, 0x5e, 0x00, 0x62, 0x80, + 0x70, 0x16, 0x97, 0xb2, 0x63, 0xa7, 0xa3, 0xbc, 0xa3, 0x7c, 0x7f, 0xc1, 0xd8, 0x2d, 0xaa, 0x56, + 0x6c, 0x60, 0x64, 0xf3, 0x0f, 0x2b, 0x07, 0xe7, 0x1f, 0xda, 0xff, 0xb0, 0x04, 0x8f, 0x74, 0x35, + 0xe5, 0x7a, 0x5b, 0x80, 0x0f, 0x5e, 0xce, 0xe0, 0xe1, 0xe6, 0x4e, 0x9f, 0xb9, 0x6d, 0x7f, 0xdc, + 0x65, 0xa6, 0x89, 0xdc, 0xb6, 0xc3, 0x27, 0x87, 0x3f, 0x78, 0xe3, 0xd9, 0x91, 0xce, 0x36, 0xd0, + 0x47, 0x3a, 0x5b, 0xe6, 0x63, 0x54, 0x7a, 0x5c, 0xc8, 0x7f, 0x5e, 0xee, 0x3a, 0xbc, 0x74, 0xeb, + 0xd7, 0x93, 0x9f, 0x76, 0x0e, 0x4e, 0xba, 0x3e, 0xbb, 0x0c, 0x6a, 0xb5, 0xbd, 0x2e, 0x0a, 0x93, + 0x94, 0xd2, 0xb7, 0xc9, 0x2f, 0x64, 0xe0, 0xb8, 0xe3, 0x89, 0x07, 0x30, 0xbd, 0xf0, 0x70, 0x43, + 0xda, 0x5f, 0x82, 0x2b, 0x5a, 0x86, 0xb3, 0x72, 0x28, 0x36, 0x9d, 0x88, 0x34, 0x84, 0x1a, 0x89, + 0x45, 0x42, 0xc5, 0x23, 0x3c, 0x29, 0x23, 0x07, 0x01, 0xe7, 0x3f, 0xc7, 0xee, 0xdf, 0x09, 0x42, + 0xb7, 0x2e, 0x36, 0x39, 0xfa, 0xfe, 0x1d, 0xda, 0x88, 0x39, 0xcc, 0xfe, 0x20, 0xd4, 0xd4, 0xfb, + 0xf3, 0xb0, 0x6e, 0x35, 0xe9, 0x3a, 0xc2, 0xba, 0xd5, 0x8c, 0x33, 0xb0, 0xe8, 0xd7, 0xa2, 0x26, + 0x71, 0x66, 0xf5, 0x5c, 0x25, 0xbb, 0xcc, 0x3e, 0xb6, 0xdf, 0x09, 0x23, 0xca, 0xcf, 0xd2, 0xeb, + 0xad, 0x44, 0xf6, 0xff, 0x29, 0xc1, 0x18, 0xf7, 0xac, 0xf1, 0x4b, 0x2b, 0x02, 0xba, 0x99, 0xae, + 0x35, 0xe4, 0x6d, 0x8e, 0xc5, 0x54, 0x63, 0x54, 0x97, 0x43, 0x6a, 0xf7, 0xbf, 0x6a, 0xc2, 0x9a, + 0x19, 0xfa, 0x30, 0x2f, 0x7c, 0x28, 0x58, 0x97, 0x8a, 0x48, 0xf9, 0x5c, 0x55, 0xf4, 0xcc, 0xab, + 0x4e, 0x64, 0x1b, 0x36, 0xf8, 0xa1, 0x04, 0x6a, 0x9b, 0xf2, 0xe2, 0x8e, 0x62, 0xc4, 0x8f, 0xba, + 0x07, 0x84, 0x1b, 0x03, 0xea, 0x2f, 0xd6, 0x8c, 0xec, 0x7f, 0x66, 0xc1, 0x99, 0xf4, 0x07, 0x10, + 0xc7, 0x35, 0xf7, 0xef, 0x33, 0xf4, 0xe5, 0x62, 0xb7, 0xbf, 0x38, 0x08, 0xa3, 0xa9, 0xf2, 0x92, + 0xa9, 0xe7, 0xad, 0x03, 0x5d, 0xf4, 0x2c, 0xd1, 0xa3, 0xed, 0xcb, 0x4b, 0xef, 0x8c, 0x44, 0x8f, + 0xb6, 0x4f, 0x30, 0x87, 0xd1, 0x0d, 0x52, 0x23, 0xda, 0xc5, 0x6d, 0x5f, 0x04, 0x64, 0xab, 0x0d, + 0xd2, 0x1c, 0x6b, 0xc5, 0x02, 0x8a, 0x3e, 0x66, 0xc1, 0x08, 0xfb, 0xa4, 0xe2, 0x80, 0x43, 0x88, + 0xad, 0x2b, 0x05, 0x4c, 0x22, 0x59, 0x4a, 0x95, 0xc5, 0x58, 0x99, 0x2d, 0x38, 0xc5, 0x11, 0x7d, + 0xd2, 0x82, 0x9a, 0xba, 0x9b, 0x47, 0xdc, 0x60, 0xb9, 0x5a, 0x6c, 0xf5, 0xce, 0xcc, 0x47, 0x54, + 0x65, 0x14, 0xb1, 0x66, 0x8c, 0x62, 0x75, 0xfa, 0x30, 0x74, 0x3c, 0xa7, 0x0f, 0x90, 0x73, 0xf2, + 0xf0, 0x0e, 0xa8, 0xb5, 0x1c, 0xdf, 0xdd, 0x20, 0x71, 0xc2, 0x0f, 0x04, 0x64, 0x51, 0x61, 0xd9, + 0x88, 0x35, 0x9c, 0x9a, 0x74, 0x31, 0x7b, 0xb1, 0xc4, 0xf0, 0xe0, 0x33, 0x93, 0x6e, 0x55, 0x37, + 0x63, 0x13, 0xc7, 0x3c, 0x6e, 0x80, 0xfb, 0x7a, 0xdc, 0x30, 0xbc, 0xff, 0x71, 0x83, 0xfd, 0xf7, + 0x2c, 0x38, 0x9b, 0xfb, 0xd5, 0x1e, 0xdc, 0xd0, 0x59, 0xfb, 0x4b, 0x15, 0x38, 0x9d, 0x53, 0x27, + 0x16, 0xed, 0x9a, 0xf3, 0xd9, 0x2a, 0x22, 0x0a, 0x25, 0x1d, 0x54, 0x21, 0x87, 0x31, 0x67, 0x12, + 0xf7, 0x77, 0xd8, 0xa7, 0x0f, 0xdc, 0xca, 0xf7, 0xf6, 0xc0, 0xcd, 0x98, 0x96, 0x03, 0xf7, 0x75, + 0x5a, 0x56, 0x0e, 0x38, 0x05, 0xfb, 0x35, 0x0b, 0xc6, 0x5b, 0x5d, 0x2e, 0x27, 0x10, 0xae, 0xeb, + 0x1b, 0xc7, 0x73, 0xf5, 0xc1, 0xcc, 0xa3, 0x77, 0xf6, 0x26, 0xba, 0xde, 0x09, 0x81, 0xbb, 0xf6, + 0xca, 0xfe, 0x6e, 0x19, 0x98, 0xc2, 0x66, 0xb5, 0x00, 0x77, 0xd1, 0x47, 0xcd, 0x72, 0xd3, 0x56, + 0x51, 0xa5, 0x91, 0x39, 0x71, 0x55, 0xae, 0x9a, 0x8f, 0x60, 0x5e, 0xf5, 0xea, 0xac, 0xd0, 0x2a, + 0xf5, 0x20, 0xb4, 0x3c, 0x59, 0xd7, 0xbb, 0x5c, 0x7c, 0x5d, 0xef, 0x5a, 0xb6, 0xa6, 0xf7, 0xfe, + 0x9f, 0x78, 0xe0, 0x81, 0xfc, 0xc4, 0xbf, 0x64, 0x71, 0xc1, 0x93, 0xf9, 0x0a, 0xda, 0x32, 0xb0, + 0xf6, 0xb1, 0x0c, 0x9e, 0x86, 0x6a, 0x4c, 0xbc, 0x8d, 0xcb, 0xc4, 0xf1, 0x84, 0x05, 0xa1, 0x23, + 0x20, 0x44, 0x3b, 0x56, 0x18, 0xec, 0x16, 0x61, 0xcf, 0x0b, 0x6e, 0x5f, 0x6c, 0x85, 0xc9, 0xae, + 0xb0, 0x25, 0xf4, 0x2d, 0xc2, 0x0a, 0x82, 0x0d, 0x2c, 0xdb, 0x07, 0xc3, 0x62, 0x3c, 0xea, 0x8d, + 0x6e, 0x3d, 0xdc, 0xb5, 0xf8, 0xd7, 0x4b, 0x82, 0x21, 0xb7, 0x03, 0x5f, 0xc8, 0xdc, 0x33, 0xd9, + 0x7b, 0xc4, 0xcb, 0x87, 0x01, 0xea, 0x41, 0x2b, 0xa4, 0x3b, 0x95, 0xb5, 0xa0, 0x18, 0x73, 0x7a, + 0x56, 0xd1, 0xd3, 0xc3, 0xa6, 0xdb, 0xb0, 0xc1, 0x2f, 0x25, 0xbb, 0xcb, 0x07, 0xca, 0xee, 0x94, + 0x18, 0x1b, 0x38, 0x40, 0xbb, 0xfe, 0xa9, 0x05, 0x29, 0x0b, 0x0c, 0x85, 0x50, 0xa1, 0xdd, 0xdd, + 0x15, 0x12, 0x61, 0xb9, 0x38, 0x73, 0x8f, 0x8a, 0x62, 0xb1, 0xcc, 0xd8, 0x4f, 0xcc, 0x19, 0x21, + 0x4f, 0x44, 0xf7, 0xf0, 0x51, 0xbd, 0x56, 0x1c, 0xc3, 0xcb, 0x41, 0xb0, 0xc5, 0x8f, 0xe2, 0x75, + 0xa4, 0x90, 0xfd, 0x02, 0x9c, 0xea, 0xe8, 0x14, 0xbb, 0x05, 0x2e, 0x90, 0x9b, 0x03, 0x63, 0x79, + 0xb0, 0x94, 0x63, 0xcc, 0x61, 0xf6, 0x37, 0x2d, 0x38, 0x99, 0x25, 0x8f, 0xde, 0xb0, 0xe0, 0x54, + 0x9c, 0xa5, 0x77, 0x5c, 0x63, 0xa7, 0x22, 0x74, 0x3b, 0x40, 0xb8, 0xb3, 0x13, 0xf6, 0xff, 0x16, + 0x93, 0xff, 0xa6, 0xeb, 0x37, 0x82, 0xdb, 0xca, 0x10, 0xb2, 0xba, 0x1a, 0x42, 0x74, 0xfd, 0xd7, + 0x37, 0x49, 0xa3, 0xed, 0x75, 0xe4, 0x3a, 0xaf, 0x8a, 0x76, 0xac, 0x30, 0x58, 0x6a, 0x67, 0x5b, + 0x5c, 0x34, 0x90, 0x99, 0x94, 0x73, 0xa2, 0x1d, 0x2b, 0x0c, 0xf4, 0x1c, 0x8c, 0x18, 0x2f, 0x29, + 0xe7, 0x25, 0xdb, 0x00, 0x18, 0x2a, 0x3a, 0xc6, 0x29, 0x2c, 0x34, 0x09, 0xa0, 0x8c, 0x2a, 0xa9, + 0x92, 0x99, 0x6b, 0x53, 0x49, 0xbe, 0x18, 0x1b, 0x18, 0x2c, 0x91, 0xda, 0x6b, 0xc7, 0xec, 0x54, + 0x6a, 0x50, 0x17, 0xbf, 0x9d, 0x15, 0x6d, 0x58, 0x41, 0xa9, 0xf4, 0x6a, 0x39, 0x7e, 0xdb, 0xf1, + 0xe8, 0x08, 0x09, 0x67, 0x85, 0x5a, 0x86, 0x4b, 0x0a, 0x82, 0x0d, 0x2c, 0xfa, 0xc6, 0x89, 0xdb, + 0x22, 0x2f, 0x07, 0xbe, 0x8c, 0xac, 0xd4, 0x07, 0x95, 0xa2, 0x1d, 0x2b, 0x0c, 0xfb, 0x3f, 0x5b, + 0x70, 0x42, 0x97, 0x65, 0xe0, 0x97, 0xc7, 0x9b, 0xbe, 0x15, 0xeb, 0x40, 0xdf, 0x4a, 0x3a, 0x5f, + 0xbd, 0xd4, 0x53, 0xbe, 0xba, 0x99, 0x4a, 0x5e, 0xde, 0x37, 0x95, 0xfc, 0x47, 0xf4, 0xc5, 0xc4, + 0x3c, 0xe7, 0x7c, 0x38, 0xef, 0x52, 0x62, 0x64, 0xc3, 0x60, 0xdd, 0x51, 0x35, 0x89, 0x46, 0xf8, + 0x5e, 0x65, 0x76, 0x9a, 0x21, 0x09, 0x88, 0xbd, 0x0c, 0x35, 0x75, 0x5e, 0x27, 0x5d, 0x2b, 0x56, + 0xbe, 0x6b, 0xa5, 0xa7, 0x94, 0xd6, 0x99, 0xf5, 0x6f, 0x7d, 0xef, 0xf1, 0xb7, 0xfc, 0xde, 0xf7, + 0x1e, 0x7f, 0xcb, 0x1f, 0x7d, 0xef, 0xf1, 0xb7, 0x7c, 0xec, 0xce, 0xe3, 0xd6, 0xb7, 0xee, 0x3c, + 0x6e, 0xfd, 0xde, 0x9d, 0xc7, 0xad, 0x3f, 0xba, 0xf3, 0xb8, 0xf5, 0xdd, 0x3b, 0x8f, 0x5b, 0x5f, + 0xf8, 0x0f, 0x8f, 0xbf, 0xe5, 0xe5, 0xdc, 0xd0, 0x5a, 0xfa, 0xe3, 0x99, 0x7a, 0x63, 0x6a, 0xfb, + 0x02, 0x8b, 0xee, 0xa4, 0xcb, 0x6b, 0xca, 0x98, 0x53, 0x53, 0x72, 0x79, 0xfd, 0xdf, 0x00, 0x00, + 0x00, 0xff, 0xff, 0x52, 0x7b, 0x3d, 0xa1, 0x8f, 0xe6, 0x00, 0x00, } func (m *AWSAuthConfig) Marshal() (dAtA []byte, err error) { @@ -7702,16 +7733,18 @@ func (m *ApplicationSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - { - size, err := m.SourceHydrator.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err + if m.SourceHydrator != nil { + { + size, err := m.SourceHydrator.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x4a } - i-- - dAtA[i] = 0x4a if len(m.Sources) > 0 { for iNdEx := len(m.Sources) - 1; iNdEx >= 0; iNdEx-- { { @@ -7821,6 +7854,16 @@ func (m *ApplicationStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + { + size, err := m.SourceHydrator.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x72 i -= len(m.ControllerNamespace) copy(dAtA[i:], m.ControllerNamespace) i = encodeVarintGenerated(dAtA, i, uint64(len(m.ControllerNamespace))) @@ -13927,8 +13970,20 @@ func (m *SourceHydrator) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.HydrateTo != nil { + { + size, err := m.HydrateTo.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } { - size, err := m.HydrateTo.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.SyncSource.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -13936,9 +13991,9 @@ func (m *SourceHydrator) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintGenerated(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x1a + dAtA[i] = 0x12 { - size, err := m.SyncSource.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.DrySource.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -13946,6 +14001,34 @@ func (m *SourceHydrator) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintGenerated(dAtA, i, uint64(size)) } i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *SourceHydratorStatus) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *SourceHydratorStatus) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SourceHydratorStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.Revision) + copy(dAtA[i:], m.Revision) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Revision))) + i-- dAtA[i] = 0x12 { size, err := m.DrySource.MarshalToSizedBuffer(dAtA[:i]) @@ -15631,8 +15714,10 @@ func (m *ApplicationSpec) Size() (n int) { n += 1 + l + sovGenerated(uint64(l)) } } - l = m.SourceHydrator.Size() - n += 1 + l + sovGenerated(uint64(l)) + if m.SourceHydrator != nil { + l = m.SourceHydrator.Size() + n += 1 + l + sovGenerated(uint64(l)) + } return n } @@ -15690,6 +15775,8 @@ func (m *ApplicationStatus) Size() (n int) { } l = len(m.ControllerNamespace) n += 1 + l + sovGenerated(uint64(l)) + l = m.SourceHydrator.Size() + n += 1 + l + sovGenerated(uint64(l)) return n } @@ -17925,7 +18012,22 @@ func (m *SourceHydrator) Size() (n int) { n += 1 + l + sovGenerated(uint64(l)) l = m.SyncSource.Size() n += 1 + l + sovGenerated(uint64(l)) - l = m.HydrateTo.Size() + if m.HydrateTo != nil { + l = m.HydrateTo.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *SourceHydratorStatus) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.DrySource.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Revision) n += 1 + l + sovGenerated(uint64(l)) return n } @@ -18890,7 +18992,7 @@ func (this *ApplicationSpec) String() string { `Info:` + repeatedStringForInfo + `,`, `RevisionHistoryLimit:` + valueToStringGenerated(this.RevisionHistoryLimit) + `,`, `Sources:` + repeatedStringForSources + `,`, - `SourceHydrator:` + strings.Replace(strings.Replace(this.SourceHydrator.String(), "SourceHydrator", "SourceHydrator", 1), `&`, ``, 1) + `,`, + `SourceHydrator:` + strings.Replace(this.SourceHydrator.String(), "SourceHydrator", "SourceHydrator", 1) + `,`, `}`, }, "") return s @@ -18928,6 +19030,7 @@ func (this *ApplicationStatus) String() string { `ResourceHealthSource:` + fmt.Sprintf("%v", this.ResourceHealthSource) + `,`, `SourceTypes:` + fmt.Sprintf("%v", this.SourceTypes) + `,`, `ControllerNamespace:` + fmt.Sprintf("%v", this.ControllerNamespace) + `,`, + `SourceHydrator:` + strings.Replace(strings.Replace(this.SourceHydrator.String(), "SourceHydratorStatus", "SourceHydratorStatus", 1), `&`, ``, 1) + `,`, `}`, }, "") return s @@ -20642,7 +20745,18 @@ func (this *SourceHydrator) String() string { s := strings.Join([]string{`&SourceHydrator{`, `DrySource:` + strings.Replace(strings.Replace(this.DrySource.String(), "DrySource", "DrySource", 1), `&`, ``, 1) + `,`, `SyncSource:` + strings.Replace(strings.Replace(this.SyncSource.String(), "SyncSource", "SyncSource", 1), `&`, ``, 1) + `,`, - `HydrateTo:` + strings.Replace(strings.Replace(this.HydrateTo.String(), "HydrateTo", "HydrateTo", 1), `&`, ``, 1) + `,`, + `HydrateTo:` + strings.Replace(this.HydrateTo.String(), "HydrateTo", "HydrateTo", 1) + `,`, + `}`, + }, "") + return s +} +func (this *SourceHydratorStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&SourceHydratorStatus{`, + `DrySource:` + strings.Replace(strings.Replace(this.DrySource.String(), "DrySource", "DrySource", 1), `&`, ``, 1) + `,`, + `Revision:` + fmt.Sprintf("%v", this.Revision) + `,`, `}`, }, "") return s @@ -28499,6 +28613,9 @@ func (m *ApplicationSpec) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } + if m.SourceHydrator == nil { + m.SourceHydrator = &SourceHydrator{} + } if err := m.SourceHydrator.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } @@ -28990,6 +29107,39 @@ func (m *ApplicationStatus) Unmarshal(dAtA []byte) error { } m.ControllerNamespace = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 14: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SourceHydrator", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.SourceHydrator.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -49334,6 +49484,9 @@ func (m *SourceHydrator) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } + if m.HydrateTo == nil { + m.HydrateTo = &HydrateTo{} + } if err := m.HydrateTo.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } @@ -49359,6 +49512,121 @@ func (m *SourceHydrator) Unmarshal(dAtA []byte) error { } return nil } +func (m *SourceHydratorStatus) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: SourceHydratorStatus: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SourceHydratorStatus: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DrySource", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.DrySource.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Revision", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Revision = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *SyncOperation) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/pkg/apis/application/v1alpha1/generated.proto b/pkg/apis/application/v1alpha1/generated.proto index cfce41fb898c9..c788006bcf1ff 100644 --- a/pkg/apis/application/v1alpha1/generated.proto +++ b/pkg/apis/application/v1alpha1/generated.proto @@ -633,6 +633,9 @@ message ApplicationStatus { // ControllerNamespace indicates the namespace in which the application controller is located optional string controllerNamespace = 13; + + // SourceHydrator stores information about the current state of source hydration + optional SourceHydratorStatus sourceHydrator = 14; } // ApplicationSummary contains information about URLs and container images used by an application @@ -2157,6 +2160,14 @@ message SourceHydrator { optional HydrateTo hydrateTo = 3; } +message SourceHydratorStatus { + // DrySource holds the dry source configuration as of the most recent reconciliation + optional DrySource drySource = 1; + + // Revision holds the resolved revision (sha) of the dry source as of the most recent reconciliation + optional string revision = 2; +} + // SyncOperation contains details about a sync operation. message SyncOperation { // Revision is the revision (Git) or chart version (Helm) which to sync the application to diff --git a/pkg/apis/application/v1alpha1/openapi_generated.go b/pkg/apis/application/v1alpha1/openapi_generated.go index ba5642da7676d..20f7756c2bc52 100644 --- a/pkg/apis/application/v1alpha1/openapi_generated.go +++ b/pkg/apis/application/v1alpha1/openapi_generated.go @@ -157,6 +157,7 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.SecretRef": schema_pkg_apis_application_v1alpha1_SecretRef(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.SignatureKey": schema_pkg_apis_application_v1alpha1_SignatureKey(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.SourceHydrator": schema_pkg_apis_application_v1alpha1_SourceHydrator(ref), + "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.SourceHydratorStatus": schema_pkg_apis_application_v1alpha1_SourceHydratorStatus(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.SyncOperation": schema_pkg_apis_application_v1alpha1_SyncOperation(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.SyncOperationResource": schema_pkg_apis_application_v1alpha1_SyncOperationResource(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.SyncOperationResult": schema_pkg_apis_application_v1alpha1_SyncOperationResult(ref), @@ -2163,7 +2164,6 @@ func schema_pkg_apis_application_v1alpha1_ApplicationSpec(ref common.ReferenceCa "sourceHydrator": { SchemaProps: spec.SchemaProps{ Description: "SourceHydrator provides a way to push hydrated manifests back to git before syncing them to the cluster.", - Default: map[string]interface{}{}, Ref: ref("github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.SourceHydrator"), }, }, @@ -2300,11 +2300,18 @@ func schema_pkg_apis_application_v1alpha1_ApplicationStatus(ref common.Reference Format: "", }, }, + "sourceHydrator": { + SchemaProps: spec.SchemaProps{ + Description: "SourceHydrator stores information about the current state of source hydration", + Default: map[string]interface{}{}, + Ref: ref("github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.SourceHydratorStatus"), + }, + }, }, }, }, Dependencies: []string{ - "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ApplicationCondition", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ApplicationSummary", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.HealthStatus", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.OperationState", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ResourceStatus", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.RevisionHistory", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.SyncStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ApplicationCondition", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ApplicationSummary", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.HealthStatus", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.OperationState", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ResourceStatus", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.RevisionHistory", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.SourceHydratorStatus", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.SyncStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, } } @@ -7458,7 +7465,6 @@ func schema_pkg_apis_application_v1alpha1_SourceHydrator(ref common.ReferenceCal "hydrateTo": { SchemaProps: spec.SchemaProps{ Description: "HydrateTo specifies an optional \"staging\" location to push hydrated manifests to. An external system would then have to move manifests to the SyncSource, e.g. by pull request.", - Default: map[string]interface{}{}, Ref: ref("github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.HydrateTo"), }, }, @@ -7471,6 +7477,34 @@ func schema_pkg_apis_application_v1alpha1_SourceHydrator(ref common.ReferenceCal } } +func schema_pkg_apis_application_v1alpha1_SourceHydratorStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "drySource": { + SchemaProps: spec.SchemaProps{ + Description: "DrySource holds the dry source configuration as of the most recent reconciliation", + Default: map[string]interface{}{}, + Ref: ref("github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.DrySource"), + }, + }, + "revision": { + SchemaProps: spec.SchemaProps{ + Description: "Revision holds the resolved revision (sha) of the dry source as of the most recent reconciliation", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + Dependencies: []string{ + "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.DrySource"}, + } +} + func schema_pkg_apis_application_v1alpha1_SyncOperation(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{ diff --git a/pkg/apis/application/v1alpha1/types.go b/pkg/apis/application/v1alpha1/types.go index c52d6ce998477..030a6ba3c47ac 100644 --- a/pkg/apis/application/v1alpha1/types.go +++ b/pkg/apis/application/v1alpha1/types.go @@ -85,7 +85,7 @@ type ApplicationSpec struct { Sources ApplicationSources `json:"sources,omitempty" protobuf:"bytes,8,opt,name=sources"` // SourceHydrator provides a way to push hydrated manifests back to git before syncing them to the cluster. - SourceHydrator SourceHydrator `json:"sourceHydrator,omitempty" protobuf:"bytes,9,opt,name=sourceHydrator"` + SourceHydrator *SourceHydrator `json:"sourceHydrator,omitempty" protobuf:"bytes,9,opt,name=sourceHydrator"` } type IgnoreDifferences []ResourceIgnoreDifferences @@ -213,6 +213,9 @@ func (a *ApplicationSpec) GetSource() ApplicationSource { if a.HasMultipleSources() { return a.Sources[0] } + if a.SourceHydrator != nil { + return a.SourceHydrator.GetApplicationSource() + } if a.Source != nil { return *a.Source } @@ -223,6 +226,9 @@ func (a *ApplicationSpec) GetSources() ApplicationSources { if a.HasMultipleSources() { return a.Sources } + if a.SourceHydrator != nil { + return ApplicationSources{a.SourceHydrator.GetApplicationSource()} + } if a.Source != nil { return ApplicationSources{*a.Source} } @@ -230,7 +236,7 @@ func (a *ApplicationSpec) GetSources() ApplicationSources { } func (a *ApplicationSpec) HasMultipleSources() bool { - return a.Sources != nil && len(a.Sources) > 0 + return a.SourceHydrator == nil && a.Sources != nil && len(a.Sources) > 0 } func (a *ApplicationSpec) GetSourcePtr(index int) *ApplicationSource { @@ -241,6 +247,10 @@ func (a *ApplicationSpec) GetSourcePtr(index int) *ApplicationSource { } return &a.Sources[0] } + if a.SourceHydrator != nil { + source := a.SourceHydrator.GetApplicationSource() + return &source + } return a.Source } @@ -298,7 +308,17 @@ type SourceHydrator struct { SyncSource SyncSource `json:"syncSource" protobuf:"bytes,2,name=syncSource"` // HydrateTo specifies an optional "staging" location to push hydrated manifests to. An external system would then // have to move manifests to the SyncSource, e.g. by pull request. - HydrateTo HydrateTo `json:"hydrateTo,omitempty" protobuf:"bytes,3,opt,name=hydrateTo"` + HydrateTo *HydrateTo `json:"hydrateTo,omitempty" protobuf:"bytes,3,opt,name=hydrateTo"` +} + +// GetApplicationSource gets the source from which we should sync when a source hydrator is configured. +func (s SourceHydrator) GetApplicationSource() ApplicationSource { + return ApplicationSource{ + // Pull the RepoURL from the dry source. The SyncSource's RepoURL is assumed to be the same. + RepoURL: s.DrySource.RepoURL, + Path: s.SyncSource.Path, + TargetRevision: s.SyncSource.TargetRevision, + } } // DrySource specifies a location for dry "don't repeat yourself" manifest source information. @@ -993,6 +1013,15 @@ type ApplicationStatus struct { SourceTypes []ApplicationSourceType `json:"sourceTypes,omitempty" protobuf:"bytes,12,opt,name=sourceTypes"` // ControllerNamespace indicates the namespace in which the application controller is located ControllerNamespace string `json:"controllerNamespace,omitempty" protobuf:"bytes,13,opt,name=controllerNamespace"` + // SourceHydrator stores information about the current state of source hydration + SourceHydrator SourceHydratorStatus `json:"sourceHydrator,omitempty" protobuf:"bytes,14,opt,name=sourceHydrator"` +} + +type SourceHydratorStatus struct { + // DrySource holds the dry source configuration as of the most recent reconciliation + DrySource DrySource `json:"drySource,omitempty" protobuf:"bytes,1,opt,name=drySource"` + // Revision holds the resolved revision (sha) of the dry source as of the most recent reconciliation + Revision string `json:"revision,omitempty" protobuf:"bytes,2,opt,name=revision"` } // GetRevisions will return the current revision associated with the Application. diff --git a/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go index 748ebea785956..54db74a3b85a4 100644 --- a/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go +++ b/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go @@ -1273,7 +1273,11 @@ func (in *ApplicationSpec) DeepCopyInto(out *ApplicationSpec) { (*in)[i].DeepCopyInto(&(*out)[i]) } } - out.SourceHydrator = in.SourceHydrator + if in.SourceHydrator != nil { + in, out := &in.SourceHydrator, &out.SourceHydrator + *out = new(SourceHydrator) + (*in).DeepCopyInto(*out) + } return } @@ -1332,6 +1336,7 @@ func (in *ApplicationStatus) DeepCopyInto(out *ApplicationStatus) { *out = make([]ApplicationSourceType, len(*in)) copy(*out, *in) } + out.SourceHydrator = in.SourceHydrator return } @@ -4081,7 +4086,11 @@ func (in *SourceHydrator) DeepCopyInto(out *SourceHydrator) { *out = *in out.DrySource = in.DrySource out.SyncSource = in.SyncSource - out.HydrateTo = in.HydrateTo + if in.HydrateTo != nil { + in, out := &in.HydrateTo, &out.HydrateTo + *out = new(HydrateTo) + **out = **in + } return } @@ -4095,6 +4104,23 @@ func (in *SourceHydrator) DeepCopy() *SourceHydrator { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SourceHydratorStatus) DeepCopyInto(out *SourceHydratorStatus) { + *out = *in + out.DrySource = in.DrySource + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SourceHydratorStatus. +func (in *SourceHydratorStatus) DeepCopy() *SourceHydratorStatus { + if in == nil { + return nil + } + out := new(SourceHydratorStatus) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *SyncOperation) DeepCopyInto(out *SyncOperation) { *out = *in diff --git a/reposerver/apiclient/repository.pb.go b/reposerver/apiclient/repository.pb.go index 393c6699abf3c..8f13bc8781660 100644 --- a/reposerver/apiclient/repository.pb.go +++ b/reposerver/apiclient/repository.pb.go @@ -2340,6 +2340,116 @@ func (m *UpdateRevisionForPathsResponse) XXX_DiscardUnknown() { var xxx_messageInfo_UpdateRevisionForPathsResponse proto.InternalMessageInfo +type HasDrySourceChangedRequest struct { + Repo *v1alpha1.Repository `protobuf:"bytes,1,opt,name=repo,proto3" json:"repo,omitempty"` + ApplicationSource *v1alpha1.ApplicationSource `protobuf:"bytes,2,opt,name=applicationSource,proto3" json:"applicationSource,omitempty"` + SyncedRevision string `protobuf:"bytes,3,opt,name=syncedRevision,proto3" json:"syncedRevision,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *HasDrySourceChangedRequest) Reset() { *m = HasDrySourceChangedRequest{} } +func (m *HasDrySourceChangedRequest) String() string { return proto.CompactTextString(m) } +func (*HasDrySourceChangedRequest) ProtoMessage() {} +func (*HasDrySourceChangedRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_dd8723cfcc820480, []int{33} +} +func (m *HasDrySourceChangedRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *HasDrySourceChangedRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_HasDrySourceChangedRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *HasDrySourceChangedRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_HasDrySourceChangedRequest.Merge(m, src) +} +func (m *HasDrySourceChangedRequest) XXX_Size() int { + return m.Size() +} +func (m *HasDrySourceChangedRequest) XXX_DiscardUnknown() { + xxx_messageInfo_HasDrySourceChangedRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_HasDrySourceChangedRequest proto.InternalMessageInfo + +func (m *HasDrySourceChangedRequest) GetRepo() *v1alpha1.Repository { + if m != nil { + return m.Repo + } + return nil +} + +func (m *HasDrySourceChangedRequest) GetApplicationSource() *v1alpha1.ApplicationSource { + if m != nil { + return m.ApplicationSource + } + return nil +} + +func (m *HasDrySourceChangedRequest) GetSyncedRevision() string { + if m != nil { + return m.SyncedRevision + } + return "" +} + +type HasDrySourceChangedResponse struct { + HasChanged bool `protobuf:"varint,1,opt,name=hasChanged,proto3" json:"hasChanged,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *HasDrySourceChangedResponse) Reset() { *m = HasDrySourceChangedResponse{} } +func (m *HasDrySourceChangedResponse) String() string { return proto.CompactTextString(m) } +func (*HasDrySourceChangedResponse) ProtoMessage() {} +func (*HasDrySourceChangedResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_dd8723cfcc820480, []int{34} +} +func (m *HasDrySourceChangedResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *HasDrySourceChangedResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_HasDrySourceChangedResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *HasDrySourceChangedResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_HasDrySourceChangedResponse.Merge(m, src) +} +func (m *HasDrySourceChangedResponse) XXX_Size() int { + return m.Size() +} +func (m *HasDrySourceChangedResponse) XXX_DiscardUnknown() { + xxx_messageInfo_HasDrySourceChangedResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_HasDrySourceChangedResponse proto.InternalMessageInfo + +func (m *HasDrySourceChangedResponse) GetHasChanged() bool { + if m != nil { + return m.HasChanged + } + return false +} + func init() { proto.RegisterType((*ManifestRequest)(nil), "repository.ManifestRequest") proto.RegisterMapType((map[string]bool)(nil), "repository.ManifestRequest.EnabledSourceTypesEntry") @@ -2383,6 +2493,8 @@ func init() { proto.RegisterType((*UpdateRevisionForPathsRequest)(nil), "repository.UpdateRevisionForPathsRequest") proto.RegisterMapType((map[string]*v1alpha1.RefTarget)(nil), "repository.UpdateRevisionForPathsRequest.RefSourcesEntry") proto.RegisterType((*UpdateRevisionForPathsResponse)(nil), "repository.UpdateRevisionForPathsResponse") + proto.RegisterType((*HasDrySourceChangedRequest)(nil), "repository.HasDrySourceChangedRequest") + proto.RegisterType((*HasDrySourceChangedResponse)(nil), "repository.HasDrySourceChangedResponse") } func init() { @@ -2390,149 +2502,154 @@ func init() { } var fileDescriptor_dd8723cfcc820480 = []byte{ - // 2265 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x1a, 0x5d, 0x6f, 0x1b, 0xc7, - 0x51, 0x47, 0x52, 0x14, 0x39, 0x94, 0x25, 0x6a, 0x63, 0xcb, 0x67, 0xc6, 0x16, 0x94, 0x6b, 0x6d, - 0x38, 0x76, 0x42, 0xc2, 0x32, 0x12, 0xb7, 0x4e, 0x9a, 0x42, 0x71, 0x6c, 0xc9, 0xb1, 0x65, 0xab, - 0x67, 0xa7, 0x85, 0x5b, 0xb7, 0xc5, 0xf2, 0xb8, 0x24, 0x2f, 0x3c, 0xde, 0xad, 0xef, 0xf6, 0x14, - 0xd0, 0x40, 0x1f, 0x8a, 0x16, 0xfd, 0x09, 0x7d, 0xe8, 0xaf, 0x28, 0x50, 0x14, 0x7d, 0xec, 0x43, - 0xd1, 0x8f, 0xc7, 0xa2, 0x7f, 0xa0, 0x85, 0x5f, 0x0a, 0xf4, 0x57, 0x14, 0xfb, 0x71, 0x9f, 0x3c, - 0xd2, 0x4a, 0x69, 0x2b, 0x6d, 0x5f, 0xa4, 0xdb, 0xd9, 0xd9, 0x99, 0xd9, 0xd9, 0xf9, 0xdc, 0x25, - 0x5c, 0xf2, 0x09, 0xf5, 0x02, 0xe2, 0x1f, 0x11, 0xbf, 0x23, 0x3e, 0x6d, 0xe6, 0xf9, 0x93, 0xd4, - 0x67, 0x9b, 0xfa, 0x1e, 0xf3, 0x10, 0x24, 0x90, 0xd6, 0xfd, 0x81, 0xcd, 0x86, 0x61, 0xb7, 0x6d, - 0x79, 0xe3, 0x0e, 0xf6, 0x07, 0x1e, 0xf5, 0xbd, 0xcf, 0xc5, 0xc7, 0xbb, 0x56, 0xaf, 0x73, 0xb4, - 0xd3, 0xa1, 0xa3, 0x41, 0x07, 0x53, 0x3b, 0xe8, 0x60, 0x4a, 0x1d, 0xdb, 0xc2, 0xcc, 0xf6, 0xdc, - 0xce, 0xd1, 0x35, 0xec, 0xd0, 0x21, 0xbe, 0xd6, 0x19, 0x10, 0x97, 0xf8, 0x98, 0x91, 0x9e, 0xa4, - 0xdc, 0x7a, 0x73, 0xe0, 0x79, 0x03, 0x87, 0x74, 0xc4, 0xa8, 0x1b, 0xf6, 0x3b, 0x64, 0x4c, 0x99, - 0x62, 0x6b, 0xfc, 0x6b, 0x15, 0xd6, 0x0f, 0xb0, 0x6b, 0xf7, 0x49, 0xc0, 0x4c, 0xf2, 0x2c, 0x24, - 0x01, 0x43, 0x4f, 0xa1, 0xc2, 0x85, 0xd1, 0xb5, 0x6d, 0xed, 0x72, 0x63, 0x67, 0xbf, 0x9d, 0x48, - 0xd3, 0x8e, 0xa4, 0x11, 0x1f, 0x3f, 0xb6, 0x7a, 0xed, 0xa3, 0x9d, 0x36, 0x1d, 0x0d, 0xda, 0x5c, - 0x9a, 0x76, 0x4a, 0x9a, 0x76, 0x24, 0x4d, 0xdb, 0x8c, 0xb7, 0x65, 0x0a, 0xaa, 0xa8, 0x05, 0x35, - 0x9f, 0x1c, 0xd9, 0x81, 0xed, 0xb9, 0x7a, 0x69, 0x5b, 0xbb, 0x5c, 0x37, 0xe3, 0x31, 0xd2, 0x61, - 0xc5, 0xf5, 0x6e, 0x61, 0x6b, 0x48, 0xf4, 0xf2, 0xb6, 0x76, 0xb9, 0x66, 0x46, 0x43, 0xb4, 0x0d, - 0x0d, 0x4c, 0xe9, 0x7d, 0xdc, 0x25, 0xce, 0x3d, 0x32, 0xd1, 0x2b, 0x62, 0x61, 0x1a, 0xc4, 0xd7, - 0x62, 0x4a, 0x1f, 0xe0, 0x31, 0xd1, 0x97, 0xc5, 0x6c, 0x34, 0x44, 0xe7, 0xa1, 0xee, 0xe2, 0x31, - 0x09, 0x28, 0xb6, 0x88, 0x5e, 0x13, 0x73, 0x09, 0x00, 0xfd, 0x04, 0x36, 0x52, 0x82, 0x3f, 0xf2, - 0x42, 0xdf, 0x22, 0x3a, 0x88, 0xad, 0x3f, 0x5c, 0x6c, 0xeb, 0xbb, 0x79, 0xb2, 0xe6, 0x34, 0x27, - 0xf4, 0x23, 0x58, 0x16, 0x27, 0xaf, 0x37, 0xb6, 0xcb, 0xaf, 0x54, 0xdb, 0x92, 0x2c, 0x72, 0x61, - 0x85, 0x3a, 0xe1, 0xc0, 0x76, 0x03, 0x7d, 0x55, 0x70, 0x78, 0xbc, 0x18, 0x87, 0x5b, 0x9e, 0xdb, - 0xb7, 0x07, 0x07, 0xd8, 0xc5, 0x03, 0x32, 0x26, 0x2e, 0x3b, 0x14, 0xc4, 0xcd, 0x88, 0x09, 0x7a, - 0x0e, 0xcd, 0x51, 0x18, 0x30, 0x6f, 0x6c, 0x3f, 0x27, 0x0f, 0x29, 0x5f, 0x1b, 0xe8, 0xa7, 0x84, - 0x36, 0x1f, 0x2c, 0xc6, 0xf8, 0x5e, 0x8e, 0xaa, 0x39, 0xc5, 0x87, 0x1b, 0xc9, 0x28, 0xec, 0x92, - 0xef, 0x12, 0x5f, 0x58, 0xd7, 0x9a, 0x34, 0x92, 0x14, 0x48, 0x9a, 0x91, 0xad, 0x46, 0x81, 0xbe, - 0xbe, 0x5d, 0x96, 0x66, 0x14, 0x83, 0xd0, 0x65, 0x58, 0x3f, 0x22, 0xbe, 0xdd, 0x9f, 0x3c, 0xb2, - 0x07, 0x2e, 0x66, 0xa1, 0x4f, 0xf4, 0xa6, 0x30, 0xc5, 0x3c, 0x18, 0x8d, 0xe1, 0xd4, 0x90, 0x38, - 0x63, 0xae, 0xf2, 0x5b, 0x3e, 0xe9, 0x05, 0xfa, 0x86, 0xd0, 0xef, 0xde, 0xe2, 0x27, 0x28, 0xc8, - 0x99, 0x59, 0xea, 0x5c, 0x30, 0xd7, 0x33, 0x95, 0xa7, 0x48, 0x1f, 0x41, 0x52, 0xb0, 0x1c, 0x18, - 0x5d, 0x82, 0x35, 0xe6, 0x63, 0x6b, 0x64, 0xbb, 0x83, 0x03, 0xc2, 0x86, 0x5e, 0x4f, 0x7f, 0x43, - 0x68, 0x22, 0x07, 0x45, 0x16, 0x20, 0xe2, 0xe2, 0xae, 0x43, 0x7a, 0xd2, 0x16, 0x1f, 0x4f, 0x28, - 0x09, 0xf4, 0xd3, 0x62, 0x17, 0xd7, 0xdb, 0xa9, 0x08, 0x95, 0x0b, 0x10, 0xed, 0xdb, 0x53, 0xab, - 0x6e, 0xbb, 0xcc, 0x9f, 0x98, 0x05, 0xe4, 0xd0, 0x08, 0x1a, 0x7c, 0x1f, 0x91, 0x29, 0x9c, 0x11, - 0xa6, 0x70, 0x77, 0x31, 0x1d, 0xed, 0x27, 0x04, 0xcd, 0x34, 0x75, 0xd4, 0x06, 0x34, 0xc4, 0xc1, - 0x41, 0xe8, 0x30, 0x9b, 0x3a, 0x44, 0x8a, 0x11, 0xe8, 0x9b, 0x42, 0x4d, 0x05, 0x33, 0xe8, 0x1e, - 0x80, 0x4f, 0xfa, 0x11, 0xde, 0x59, 0xb1, 0xf3, 0xab, 0xf3, 0x76, 0x6e, 0xc6, 0xd8, 0x72, 0xc7, - 0xa9, 0xe5, 0x9c, 0x39, 0xdf, 0x06, 0xb1, 0x98, 0xf2, 0x76, 0xe1, 0xd6, 0xba, 0x30, 0xb1, 0x82, - 0x19, 0x6e, 0x8b, 0x0a, 0x2a, 0x82, 0xd6, 0x39, 0x69, 0xad, 0x29, 0x50, 0xeb, 0x36, 0x9c, 0x9d, - 0xa1, 0x6a, 0xd4, 0x84, 0xf2, 0x88, 0x4c, 0x44, 0x88, 0xae, 0x9b, 0xfc, 0x13, 0x9d, 0x86, 0xe5, - 0x23, 0xec, 0x84, 0x44, 0x04, 0xd5, 0x9a, 0x29, 0x07, 0x37, 0x4b, 0xdf, 0xd0, 0x5a, 0xbf, 0xd0, - 0x60, 0x3d, 0x27, 0x78, 0xc1, 0xfa, 0x1f, 0xa6, 0xd7, 0xbf, 0x02, 0x33, 0xee, 0x3f, 0xc6, 0xfe, - 0x80, 0xb0, 0x94, 0x20, 0xc6, 0xdf, 0x34, 0xd0, 0x73, 0x1a, 0xfd, 0x9e, 0xcd, 0x86, 0x77, 0x6c, - 0x87, 0x04, 0xe8, 0x06, 0xac, 0xf8, 0x12, 0xa6, 0x12, 0xcf, 0x9b, 0x73, 0x0e, 0x62, 0x7f, 0xc9, - 0x8c, 0xb0, 0xd1, 0x47, 0x50, 0x1b, 0x13, 0x86, 0x7b, 0x98, 0x61, 0x25, 0xfb, 0x76, 0xd1, 0x4a, - 0xce, 0xe5, 0x40, 0xe1, 0xed, 0x2f, 0x99, 0xf1, 0x1a, 0xf4, 0x1e, 0x2c, 0x5b, 0xc3, 0xd0, 0x1d, - 0x89, 0x94, 0xd3, 0xd8, 0xb9, 0x30, 0x6b, 0xf1, 0x2d, 0x8e, 0xb4, 0xbf, 0x64, 0x4a, 0xec, 0x8f, - 0xab, 0x50, 0xa1, 0xd8, 0x67, 0xc6, 0x1d, 0x38, 0x5d, 0xc4, 0x82, 0xe7, 0x39, 0x6b, 0x48, 0xac, - 0x51, 0x10, 0x8e, 0x95, 0x9a, 0xe3, 0x31, 0x42, 0x50, 0x09, 0xec, 0xe7, 0x52, 0xd5, 0x65, 0x53, - 0x7c, 0x1b, 0x6f, 0xc3, 0xc6, 0x14, 0x37, 0x7e, 0xa8, 0x52, 0x36, 0x4e, 0x61, 0x55, 0xb1, 0x36, - 0x42, 0x38, 0xf3, 0x58, 0xe8, 0x22, 0x0e, 0xf6, 0x27, 0x91, 0xb9, 0x8d, 0x7d, 0xd8, 0xcc, 0xb3, - 0x0d, 0xa8, 0xe7, 0x06, 0x84, 0x9b, 0xbe, 0x88, 0x8e, 0x36, 0xe9, 0x25, 0xb3, 0x42, 0x8a, 0x9a, - 0x59, 0x30, 0x63, 0xfc, 0xb4, 0x04, 0x9b, 0x26, 0x09, 0x3c, 0xe7, 0x88, 0x44, 0xa1, 0xeb, 0x64, - 0x8a, 0x8f, 0x1f, 0x40, 0x19, 0x53, 0xaa, 0xcc, 0xe4, 0xee, 0x2b, 0x4b, 0xef, 0x26, 0xa7, 0x8a, - 0xde, 0x81, 0x0d, 0x3c, 0xee, 0xda, 0x83, 0xd0, 0x0b, 0x83, 0x68, 0x5b, 0xc2, 0xa8, 0xea, 0xe6, - 0xf4, 0x84, 0x61, 0xc1, 0xd9, 0x29, 0x15, 0x28, 0x75, 0xa6, 0x4b, 0x24, 0x2d, 0x57, 0x22, 0x15, - 0x32, 0x29, 0xcd, 0x62, 0xf2, 0x27, 0x0d, 0x9a, 0x89, 0xeb, 0x28, 0xf2, 0xe7, 0xa1, 0x3e, 0x56, - 0xb0, 0x40, 0xd7, 0x44, 0x7c, 0x4a, 0x00, 0xd9, 0x6a, 0xa9, 0x94, 0xaf, 0x96, 0x36, 0xa1, 0x2a, - 0x8b, 0x59, 0xb5, 0x31, 0x35, 0xca, 0x88, 0x5c, 0xc9, 0x89, 0xbc, 0x05, 0x10, 0xc4, 0xf1, 0x4b, - 0xaf, 0x8a, 0xd9, 0x14, 0x04, 0x19, 0xb0, 0x2a, 0x73, 0xab, 0x49, 0x82, 0xd0, 0x61, 0xfa, 0x8a, - 0xc0, 0xc8, 0xc0, 0x0c, 0x0f, 0xd6, 0xef, 0xdb, 0x7c, 0x0f, 0xfd, 0xe0, 0x64, 0x8c, 0xfd, 0x7d, - 0xa8, 0x70, 0x66, 0x7c, 0x63, 0x5d, 0x1f, 0xbb, 0xd6, 0x90, 0x44, 0xba, 0x8a, 0xc7, 0xdc, 0x8d, - 0x19, 0x1e, 0x04, 0x7a, 0x49, 0xc0, 0xc5, 0xb7, 0xf1, 0xbb, 0x92, 0x94, 0x74, 0x97, 0xd2, 0xe0, - 0xab, 0x2f, 0xa8, 0x8b, 0x53, 0x7c, 0x79, 0x3a, 0xc5, 0xe7, 0x44, 0xfe, 0x32, 0x29, 0xfe, 0x15, - 0xa5, 0x29, 0x23, 0x84, 0x95, 0x5d, 0x4a, 0xb9, 0x20, 0xe8, 0x1a, 0x54, 0x30, 0xa5, 0x52, 0xe1, - 0xb9, 0x88, 0xac, 0x50, 0xf8, 0x7f, 0x25, 0x92, 0x40, 0x6d, 0xdd, 0x80, 0x7a, 0x0c, 0x7a, 0x19, - 0xdb, 0x7a, 0x9a, 0xed, 0x36, 0x80, 0xac, 0x61, 0xef, 0xba, 0x7d, 0x8f, 0x1f, 0x29, 0x37, 0x76, - 0xb5, 0x54, 0x7c, 0x1b, 0x37, 0x23, 0x0c, 0x21, 0xdb, 0x3b, 0xb0, 0x6c, 0x33, 0x32, 0x8e, 0x84, - 0xdb, 0x4c, 0x0b, 0x97, 0x10, 0x32, 0x25, 0x92, 0xf1, 0xe7, 0x1a, 0x9c, 0xe3, 0x27, 0xf6, 0x48, - 0xb8, 0xc9, 0x2e, 0xa5, 0x9f, 0x10, 0x86, 0x6d, 0x27, 0xf8, 0x4e, 0x48, 0xfc, 0xc9, 0x6b, 0x36, - 0x8c, 0x01, 0x54, 0xa5, 0x97, 0xa9, 0x78, 0xf7, 0xca, 0xdb, 0x19, 0x45, 0x3e, 0xe9, 0x61, 0xca, - 0xaf, 0xa7, 0x87, 0x29, 0xea, 0x29, 0x2a, 0x27, 0xd4, 0x53, 0xcc, 0x6e, 0x2b, 0x53, 0xcd, 0x6a, - 0x35, 0xdb, 0xac, 0x16, 0x94, 0xea, 0x2b, 0xc7, 0x2d, 0xd5, 0x6b, 0x85, 0xa5, 0xfa, 0xb8, 0xd0, - 0x8f, 0xeb, 0x42, 0xdd, 0xdf, 0x4a, 0x5b, 0xe0, 0x4c, 0x5b, 0x5b, 0xa4, 0x68, 0x87, 0xd7, 0x5a, - 0xb4, 0x7f, 0x96, 0x29, 0xc2, 0x65, 0x1b, 0xfc, 0xde, 0xf1, 0xf6, 0x34, 0xa7, 0x1c, 0xff, 0xbf, - 0x2b, 0x9e, 0x7f, 0x2e, 0x6a, 0x26, 0xea, 0x25, 0x3a, 0x88, 0x13, 0x3a, 0xcf, 0x43, 0x3c, 0xb5, - 0xaa, 0xa0, 0xc5, 0xbf, 0xd1, 0x55, 0xa8, 0x70, 0x25, 0xab, 0xa2, 0xf6, 0x6c, 0x5a, 0x9f, 0xfc, - 0x24, 0x76, 0x29, 0x7d, 0x44, 0x89, 0x65, 0x0a, 0x24, 0x74, 0x13, 0xea, 0xb1, 0xe1, 0x2b, 0xcf, - 0x3a, 0x9f, 0x5e, 0x11, 0xfb, 0x49, 0xb4, 0x2c, 0x41, 0xe7, 0x6b, 0x7b, 0xb6, 0x4f, 0x2c, 0x51, - 0xf2, 0x2d, 0x4f, 0xaf, 0xfd, 0x24, 0x9a, 0x8c, 0xd7, 0xc6, 0xe8, 0xe8, 0x1a, 0x54, 0xe5, 0xbd, - 0x81, 0xf0, 0xa0, 0xc6, 0xce, 0xb9, 0xe9, 0x60, 0x1a, 0xad, 0x52, 0x88, 0xc6, 0x1f, 0x35, 0x78, - 0x2b, 0x31, 0x88, 0xc8, 0x9b, 0xa2, 0xaa, 0xfb, 0xab, 0xcf, 0xb8, 0x97, 0x60, 0x4d, 0x94, 0xf9, - 0xc9, 0xf5, 0x81, 0xbc, 0xc9, 0xca, 0x41, 0x8d, 0xdf, 0x6a, 0x70, 0x71, 0x7a, 0x1f, 0xb7, 0x86, - 0xd8, 0x67, 0xf1, 0xf1, 0x9e, 0xc4, 0x5e, 0xa2, 0x84, 0x57, 0x4a, 0x12, 0x5e, 0x66, 0x7f, 0xe5, - 0xec, 0xfe, 0x8c, 0xdf, 0x97, 0xa0, 0x91, 0x32, 0xa0, 0xa2, 0x84, 0xc9, 0x0b, 0x3e, 0x61, 0xb7, - 0xa2, 0xb1, 0x13, 0x49, 0xa1, 0x6e, 0xa6, 0x20, 0x68, 0x04, 0x40, 0xb1, 0x8f, 0xc7, 0x84, 0x11, - 0x9f, 0x47, 0x72, 0xee, 0xf1, 0xf7, 0x16, 0x8f, 0x2e, 0x87, 0x11, 0x4d, 0x33, 0x45, 0x9e, 0x57, - 0xac, 0x82, 0x75, 0xa0, 0xe2, 0xb7, 0x1a, 0xa1, 0x2f, 0x60, 0xad, 0x6f, 0x3b, 0xe4, 0x30, 0x11, - 0xa4, 0x2a, 0x04, 0x79, 0xb8, 0xb8, 0x20, 0x77, 0xd2, 0x74, 0xcd, 0x1c, 0x1b, 0xe3, 0x0a, 0x34, - 0xf3, 0xfe, 0xc4, 0x85, 0xb4, 0xc7, 0x78, 0x10, 0x6b, 0x4b, 0x8d, 0x0c, 0x04, 0xcd, 0xbc, 0xff, - 0x18, 0x7f, 0x2f, 0xc1, 0x99, 0x98, 0xdc, 0xae, 0xeb, 0x7a, 0xa1, 0x6b, 0x89, 0xab, 0xb8, 0xc2, - 0xb3, 0x38, 0x0d, 0xcb, 0xcc, 0x66, 0x4e, 0x5c, 0xf8, 0x88, 0x01, 0xcf, 0x5d, 0xcc, 0xf3, 0x1c, - 0x66, 0x53, 0x75, 0xc0, 0xd1, 0x50, 0x9e, 0xfd, 0xb3, 0xd0, 0xf6, 0x49, 0x4f, 0x44, 0x82, 0x9a, - 0x19, 0x8f, 0xf9, 0x1c, 0xaf, 0x6a, 0x44, 0x19, 0x2f, 0x95, 0x19, 0x8f, 0x85, 0xdd, 0x7b, 0x8e, - 0x43, 0x2c, 0xae, 0x8e, 0x54, 0xa1, 0x9f, 0x83, 0x8a, 0x06, 0x82, 0xf9, 0xb6, 0x3b, 0x50, 0x65, - 0xbe, 0x1a, 0x71, 0x39, 0xb1, 0xef, 0xe3, 0x89, 0x5e, 0x13, 0x0a, 0x90, 0x03, 0xf4, 0x21, 0x94, - 0xc7, 0x98, 0xaa, 0x44, 0x77, 0x25, 0x13, 0x1d, 0x8a, 0x34, 0xd0, 0x3e, 0xc0, 0x54, 0x66, 0x02, - 0xbe, 0xac, 0xf5, 0x3e, 0xd4, 0x22, 0xc0, 0x97, 0x2a, 0x09, 0x3f, 0x87, 0x53, 0x99, 0xe0, 0x83, - 0x9e, 0xc0, 0x66, 0x62, 0x51, 0x69, 0x86, 0xaa, 0x08, 0x7c, 0xeb, 0xa5, 0x92, 0x99, 0x33, 0x08, - 0x18, 0xcf, 0x60, 0x83, 0x9b, 0x8c, 0x70, 0xfc, 0x13, 0x6a, 0x6d, 0x3e, 0x80, 0x7a, 0xcc, 0xb2, - 0xd0, 0x66, 0x5a, 0x50, 0x3b, 0x8a, 0xae, 0x48, 0x65, 0x6f, 0x13, 0x8f, 0x8d, 0x5d, 0x40, 0x69, - 0x79, 0x55, 0x06, 0xba, 0x9a, 0x2d, 0x8a, 0xcf, 0xe4, 0xd3, 0x8d, 0x40, 0x8f, 0x6a, 0xe2, 0xdf, - 0x94, 0x60, 0x7d, 0xcf, 0x16, 0xb7, 0x1c, 0x27, 0x14, 0xe4, 0xae, 0x40, 0x33, 0x08, 0xbb, 0x63, - 0xaf, 0x17, 0x3a, 0x44, 0x15, 0x05, 0x2a, 0xd3, 0x4f, 0xc1, 0xe7, 0x05, 0x3f, 0xae, 0x2c, 0x8a, - 0xd9, 0x50, 0x75, 0xb8, 0xe2, 0x1b, 0x7d, 0x08, 0xe7, 0x1e, 0x90, 0x2f, 0xd4, 0x7e, 0xf6, 0x1c, - 0xaf, 0xdb, 0xb5, 0xdd, 0x41, 0xc4, 0x64, 0x59, 0x30, 0x99, 0x8d, 0x50, 0x54, 0x2a, 0x56, 0x0b, - 0x4b, 0x45, 0xe3, 0x67, 0x1a, 0x34, 0x13, 0xad, 0x29, 0xbd, 0xdf, 0x90, 0xfe, 0x21, 0xb5, 0x7e, - 0x31, 0xad, 0xf5, 0x3c, 0xea, 0x7f, 0xee, 0x1a, 0xab, 0x69, 0xd7, 0xf8, 0xa7, 0x06, 0x67, 0xf6, - 0x6c, 0x16, 0x05, 0x25, 0xfb, 0x7f, 0xed, 0x04, 0x0b, 0xf4, 0x5d, 0x29, 0xd6, 0x77, 0x1b, 0x36, - 0xf3, 0x1b, 0x55, 0x4a, 0x3f, 0x0d, 0xcb, 0xfc, 0xe4, 0xa3, 0xfb, 0x00, 0x39, 0x30, 0x7e, 0x5d, - 0x85, 0x0b, 0x9f, 0xd1, 0x1e, 0x66, 0xf1, 0x7d, 0xce, 0x1d, 0xcf, 0x3f, 0xe4, 0x53, 0x27, 0xa3, - 0xa1, 0xdc, 0x0b, 0x59, 0x69, 0xee, 0x0b, 0x59, 0x79, 0xce, 0x0b, 0x59, 0xe5, 0x58, 0x2f, 0x64, - 0xcb, 0x27, 0xf6, 0x42, 0x36, 0xdd, 0x23, 0x55, 0x0b, 0x7b, 0xa4, 0x27, 0x99, 0x3e, 0x62, 0x45, - 0xb8, 0xc4, 0x37, 0xd3, 0x2e, 0x31, 0xf7, 0x74, 0xe6, 0x5e, 0xed, 0xe7, 0x1e, 0x96, 0x6a, 0x2f, - 0x7d, 0x58, 0xaa, 0x4f, 0x3f, 0x2c, 0x15, 0xbf, 0x4d, 0xc0, 0xcc, 0xb7, 0x89, 0x4b, 0xb0, 0x16, - 0x4c, 0x5c, 0x8b, 0xf4, 0xe2, 0x5b, 0xbe, 0x86, 0xdc, 0x76, 0x16, 0x9a, 0xb1, 0xf6, 0xd5, 0x9c, - 0xb5, 0xc7, 0x96, 0x7a, 0x2a, 0x65, 0xa9, 0xff, 0x3d, 0x2d, 0xcd, 0x36, 0x6c, 0xcd, 0x3a, 0x13, - 0xe9, 0x6a, 0x3b, 0x7f, 0x00, 0xd8, 0x48, 0xaa, 0x64, 0xfe, 0xd7, 0xb6, 0x08, 0x7a, 0x08, 0xcd, - 0x3d, 0xf5, 0xc8, 0x1d, 0x5d, 0x6e, 0xa2, 0x79, 0xaf, 0x05, 0xad, 0xf3, 0xc5, 0x93, 0x92, 0x89, - 0xb1, 0x84, 0x2c, 0x38, 0x97, 0x27, 0x98, 0x3c, 0x4c, 0x7c, 0x7d, 0x0e, 0xe5, 0x18, 0xeb, 0x65, - 0x2c, 0x2e, 0x6b, 0xe8, 0x09, 0xac, 0x65, 0xaf, 0xcf, 0x51, 0xa6, 0x6c, 0x28, 0xbc, 0xd1, 0x6f, - 0x19, 0xf3, 0x50, 0x62, 0xf9, 0x9f, 0xf2, 0x03, 0xcd, 0xdc, 0x25, 0x23, 0x23, 0xdb, 0x41, 0x17, - 0xdd, 0xb5, 0xb7, 0xbe, 0x36, 0x17, 0x27, 0xa6, 0xfe, 0x01, 0xd4, 0xa2, 0xbb, 0xd7, 0xac, 0x9a, - 0x73, 0x37, 0xb2, 0xad, 0x66, 0x96, 0x5e, 0x3f, 0x30, 0x96, 0xd0, 0x47, 0x72, 0xf1, 0x2e, 0xa5, - 0x05, 0x8b, 0x53, 0x37, 0x8e, 0xad, 0x37, 0x0a, 0x6e, 0xf9, 0x8c, 0x25, 0xf4, 0x6d, 0x68, 0xf0, - 0xaf, 0x43, 0xf5, 0xbc, 0xbc, 0xd9, 0x96, 0xbf, 0x66, 0x68, 0x47, 0xbf, 0x66, 0x68, 0xdf, 0x1e, - 0x53, 0x36, 0x69, 0x15, 0x5c, 0xc3, 0x29, 0x02, 0x4f, 0xe1, 0xd4, 0x1e, 0x61, 0x49, 0xd7, 0x8c, - 0x2e, 0x1e, 0xeb, 0x6e, 0xa1, 0x65, 0xe4, 0xd1, 0xa6, 0x1b, 0x6f, 0x63, 0x09, 0xfd, 0x52, 0x83, - 0x37, 0xf6, 0x08, 0xcb, 0xf7, 0xa1, 0xe8, 0xdd, 0x62, 0x26, 0x33, 0xfa, 0xd5, 0xd6, 0x83, 0x45, - 0xbd, 0x2b, 0x4b, 0xd6, 0x58, 0x42, 0xbf, 0xd2, 0xe0, 0x6c, 0x4a, 0xb0, 0x74, 0x63, 0x89, 0xae, - 0xcd, 0x17, 0xae, 0xa0, 0x09, 0x6d, 0x7d, 0xba, 0xe0, 0xaf, 0x06, 0x52, 0x24, 0x8d, 0x25, 0x74, - 0x28, 0xce, 0x24, 0xa9, 0x23, 0xd1, 0x85, 0xc2, 0x82, 0x31, 0xe6, 0xbe, 0x35, 0x6b, 0x3a, 0x3e, - 0x87, 0x4f, 0xa1, 0xb1, 0x47, 0x58, 0x54, 0xf4, 0x64, 0x2d, 0x2d, 0x57, 0x6b, 0x66, 0x5d, 0x35, - 0x5f, 0x27, 0x09, 0x8b, 0xd9, 0x90, 0xb4, 0x52, 0xc9, 0x3f, 0xeb, 0xab, 0x85, 0x15, 0x50, 0xd6, - 0x62, 0x8a, 0x6b, 0x07, 0x63, 0x09, 0x3d, 0x83, 0xcd, 0xe2, 0xa0, 0x87, 0xde, 0x3e, 0x76, 0xb2, - 0x6a, 0x5d, 0x39, 0x0e, 0x6a, 0xc4, 0xf2, 0xe3, 0xdd, 0xbf, 0xbc, 0xd8, 0xd2, 0xfe, 0xfa, 0x62, - 0x4b, 0xfb, 0xc7, 0x8b, 0x2d, 0xed, 0xfb, 0xd7, 0x5f, 0xf2, 0xeb, 0xa2, 0xd4, 0x0f, 0x96, 0x30, - 0xb5, 0x2d, 0xc7, 0x26, 0x2e, 0xeb, 0x56, 0x85, 0xbf, 0x5d, 0xff, 0x77, 0x00, 0x00, 0x00, 0xff, - 0xff, 0x0e, 0xc8, 0x27, 0xc7, 0xcf, 0x24, 0x00, 0x00, + // 2338 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x3a, 0x5b, 0x6f, 0x1c, 0x49, + 0xd5, 0x9e, 0x8b, 0xc7, 0x33, 0x67, 0x1c, 0x5f, 0x2a, 0x89, 0xd3, 0xe9, 0x24, 0x96, 0xb7, 0xbf, + 0x2f, 0x21, 0x9b, 0xec, 0x8e, 0x15, 0x47, 0xbb, 0x81, 0xec, 0x05, 0x79, 0x9d, 0xc4, 0xce, 0x26, + 0x4e, 0x4c, 0x27, 0x0b, 0x0a, 0x04, 0x50, 0x4d, 0x4f, 0xb9, 0xa7, 0xd7, 0x3d, 0xdd, 0x95, 0xee, + 0x6a, 0xaf, 0x26, 0x12, 0x0f, 0x08, 0xc4, 0x4f, 0xe0, 0x81, 0x37, 0x7e, 0x00, 0x12, 0x12, 0x42, + 0x3c, 0xf2, 0xc4, 0xe5, 0x11, 0xf1, 0x07, 0x40, 0x79, 0x41, 0xe2, 0x57, 0xa0, 0xba, 0xf4, 0x75, + 0x7a, 0xc6, 0x5e, 0x9c, 0xcc, 0x02, 0x2f, 0x76, 0xd7, 0xa9, 0x53, 0xe7, 0x9c, 0x3a, 0x75, 0x6e, + 0x75, 0x6a, 0xe0, 0x4a, 0x40, 0xa8, 0x1f, 0x92, 0xe0, 0x90, 0x04, 0xeb, 0xe2, 0xd3, 0x61, 0x7e, + 0x30, 0xcc, 0x7c, 0x76, 0x68, 0xe0, 0x33, 0x1f, 0x41, 0x0a, 0xd1, 0x1f, 0xda, 0x0e, 0xeb, 0x47, + 0xdd, 0x8e, 0xe5, 0x0f, 0xd6, 0x71, 0x60, 0xfb, 0x34, 0xf0, 0x3f, 0x17, 0x1f, 0xef, 0x5a, 0xbd, + 0xf5, 0xc3, 0x8d, 0x75, 0x7a, 0x60, 0xaf, 0x63, 0xea, 0x84, 0xeb, 0x98, 0x52, 0xd7, 0xb1, 0x30, + 0x73, 0x7c, 0x6f, 0xfd, 0xf0, 0x06, 0x76, 0x69, 0x1f, 0xdf, 0x58, 0xb7, 0x89, 0x47, 0x02, 0xcc, + 0x48, 0x4f, 0x52, 0xd6, 0x2f, 0xd8, 0xbe, 0x6f, 0xbb, 0x64, 0x5d, 0x8c, 0xba, 0xd1, 0xfe, 0x3a, + 0x19, 0x50, 0xa6, 0xd8, 0x1a, 0xff, 0x9c, 0x87, 0xc5, 0x5d, 0xec, 0x39, 0xfb, 0x24, 0x64, 0x26, + 0x79, 0x11, 0x91, 0x90, 0xa1, 0xe7, 0x50, 0xe7, 0xc2, 0x68, 0x95, 0xb5, 0xca, 0xd5, 0xf6, 0xc6, + 0x4e, 0x27, 0x95, 0xa6, 0x13, 0x4b, 0x23, 0x3e, 0x7e, 0x68, 0xf5, 0x3a, 0x87, 0x1b, 0x1d, 0x7a, + 0x60, 0x77, 0xb8, 0x34, 0x9d, 0x8c, 0x34, 0x9d, 0x58, 0x9a, 0x8e, 0x99, 0x6c, 0xcb, 0x14, 0x54, + 0x91, 0x0e, 0xcd, 0x80, 0x1c, 0x3a, 0xa1, 0xe3, 0x7b, 0x5a, 0x75, 0xad, 0x72, 0xb5, 0x65, 0x26, + 0x63, 0xa4, 0xc1, 0x9c, 0xe7, 0x6f, 0x61, 0xab, 0x4f, 0xb4, 0xda, 0x5a, 0xe5, 0x6a, 0xd3, 0x8c, + 0x87, 0x68, 0x0d, 0xda, 0x98, 0xd2, 0x87, 0xb8, 0x4b, 0xdc, 0x07, 0x64, 0xa8, 0xd5, 0xc5, 0xc2, + 0x2c, 0x88, 0xaf, 0xc5, 0x94, 0x3e, 0xc2, 0x03, 0xa2, 0xcd, 0x8a, 0xd9, 0x78, 0x88, 0x2e, 0x42, + 0xcb, 0xc3, 0x03, 0x12, 0x52, 0x6c, 0x11, 0xad, 0x29, 0xe6, 0x52, 0x00, 0xfa, 0x11, 0x2c, 0x67, + 0x04, 0x7f, 0xe2, 0x47, 0x81, 0x45, 0x34, 0x10, 0x5b, 0x7f, 0x7c, 0xb2, 0xad, 0x6f, 0x16, 0xc9, + 0x9a, 0xa3, 0x9c, 0xd0, 0x0f, 0x60, 0x56, 0x9c, 0xbc, 0xd6, 0x5e, 0xab, 0xbd, 0x56, 0x6d, 0x4b, + 0xb2, 0xc8, 0x83, 0x39, 0xea, 0x46, 0xb6, 0xe3, 0x85, 0xda, 0xbc, 0xe0, 0xf0, 0xf4, 0x64, 0x1c, + 0xb6, 0x7c, 0x6f, 0xdf, 0xb1, 0x77, 0xb1, 0x87, 0x6d, 0x32, 0x20, 0x1e, 0xdb, 0x13, 0xc4, 0xcd, + 0x98, 0x09, 0x7a, 0x09, 0x4b, 0x07, 0x51, 0xc8, 0xfc, 0x81, 0xf3, 0x92, 0x3c, 0xa6, 0x7c, 0x6d, + 0xa8, 0x9d, 0x12, 0xda, 0x7c, 0x74, 0x32, 0xc6, 0x0f, 0x0a, 0x54, 0xcd, 0x11, 0x3e, 0xdc, 0x48, + 0x0e, 0xa2, 0x2e, 0xf9, 0x36, 0x09, 0x84, 0x75, 0x2d, 0x48, 0x23, 0xc9, 0x80, 0xa4, 0x19, 0x39, + 0x6a, 0x14, 0x6a, 0x8b, 0x6b, 0x35, 0x69, 0x46, 0x09, 0x08, 0x5d, 0x85, 0xc5, 0x43, 0x12, 0x38, + 0xfb, 0xc3, 0x27, 0x8e, 0xed, 0x61, 0x16, 0x05, 0x44, 0x5b, 0x12, 0xa6, 0x58, 0x04, 0xa3, 0x01, + 0x9c, 0xea, 0x13, 0x77, 0xc0, 0x55, 0xbe, 0x15, 0x90, 0x5e, 0xa8, 0x2d, 0x0b, 0xfd, 0x6e, 0x9f, + 0xfc, 0x04, 0x05, 0x39, 0x33, 0x4f, 0x9d, 0x0b, 0xe6, 0xf9, 0xa6, 0xf2, 0x14, 0xe9, 0x23, 0x48, + 0x0a, 0x56, 0x00, 0xa3, 0x2b, 0xb0, 0xc0, 0x02, 0x6c, 0x1d, 0x38, 0x9e, 0xbd, 0x4b, 0x58, 0xdf, + 0xef, 0x69, 0xa7, 0x85, 0x26, 0x0a, 0x50, 0x64, 0x01, 0x22, 0x1e, 0xee, 0xba, 0xa4, 0x27, 0x6d, + 0xf1, 0xe9, 0x90, 0x92, 0x50, 0x3b, 0x23, 0x76, 0x71, 0xb3, 0x93, 0x89, 0x50, 0x85, 0x00, 0xd1, + 0xb9, 0x3b, 0xb2, 0xea, 0xae, 0xc7, 0x82, 0xa1, 0x59, 0x42, 0x0e, 0x1d, 0x40, 0x9b, 0xef, 0x23, + 0x36, 0x85, 0xb3, 0xc2, 0x14, 0xee, 0x9f, 0x4c, 0x47, 0x3b, 0x29, 0x41, 0x33, 0x4b, 0x1d, 0x75, + 0x00, 0xf5, 0x71, 0xb8, 0x1b, 0xb9, 0xcc, 0xa1, 0x2e, 0x91, 0x62, 0x84, 0xda, 0x8a, 0x50, 0x53, + 0xc9, 0x0c, 0x7a, 0x00, 0x10, 0x90, 0xfd, 0x18, 0xef, 0x9c, 0xd8, 0xf9, 0xf5, 0x49, 0x3b, 0x37, + 0x13, 0x6c, 0xb9, 0xe3, 0xcc, 0x72, 0xce, 0x9c, 0x6f, 0x83, 0x58, 0x4c, 0x79, 0xbb, 0x70, 0x6b, + 0x4d, 0x98, 0x58, 0xc9, 0x0c, 0xb7, 0x45, 0x05, 0x15, 0x41, 0xeb, 0xbc, 0xb4, 0xd6, 0x0c, 0x48, + 0xbf, 0x0b, 0xe7, 0xc6, 0xa8, 0x1a, 0x2d, 0x41, 0xed, 0x80, 0x0c, 0x45, 0x88, 0x6e, 0x99, 0xfc, + 0x13, 0x9d, 0x81, 0xd9, 0x43, 0xec, 0x46, 0x44, 0x04, 0xd5, 0xa6, 0x29, 0x07, 0xb7, 0xab, 0x5f, + 0xaf, 0xe8, 0x3f, 0xab, 0xc0, 0x62, 0x41, 0xf0, 0x92, 0xf5, 0xdf, 0xcf, 0xae, 0x7f, 0x0d, 0x66, + 0xbc, 0xff, 0x14, 0x07, 0x36, 0x61, 0x19, 0x41, 0x8c, 0xbf, 0x56, 0x40, 0x2b, 0x68, 0xf4, 0x3b, + 0x0e, 0xeb, 0xdf, 0x73, 0x5c, 0x12, 0xa2, 0x5b, 0x30, 0x17, 0x48, 0x98, 0x4a, 0x3c, 0x17, 0x26, + 0x1c, 0xc4, 0xce, 0x8c, 0x19, 0x63, 0xa3, 0x8f, 0xa1, 0x39, 0x20, 0x0c, 0xf7, 0x30, 0xc3, 0x4a, + 0xf6, 0xb5, 0xb2, 0x95, 0x9c, 0xcb, 0xae, 0xc2, 0xdb, 0x99, 0x31, 0x93, 0x35, 0xe8, 0x3d, 0x98, + 0xb5, 0xfa, 0x91, 0x77, 0x20, 0x52, 0x4e, 0x7b, 0xe3, 0xd2, 0xb8, 0xc5, 0x5b, 0x1c, 0x69, 0x67, + 0xc6, 0x94, 0xd8, 0x9f, 0x34, 0xa0, 0x4e, 0x71, 0xc0, 0x8c, 0x7b, 0x70, 0xa6, 0x8c, 0x05, 0xcf, + 0x73, 0x56, 0x9f, 0x58, 0x07, 0x61, 0x34, 0x50, 0x6a, 0x4e, 0xc6, 0x08, 0x41, 0x3d, 0x74, 0x5e, + 0x4a, 0x55, 0xd7, 0x4c, 0xf1, 0x6d, 0xbc, 0x0d, 0xcb, 0x23, 0xdc, 0xf8, 0xa1, 0x4a, 0xd9, 0x38, + 0x85, 0x79, 0xc5, 0xda, 0x88, 0xe0, 0xec, 0x53, 0xa1, 0x8b, 0x24, 0xd8, 0x4f, 0x23, 0x73, 0x1b, + 0x3b, 0xb0, 0x52, 0x64, 0x1b, 0x52, 0xdf, 0x0b, 0x09, 0x37, 0x7d, 0x11, 0x1d, 0x1d, 0xd2, 0x4b, + 0x67, 0x85, 0x14, 0x4d, 0xb3, 0x64, 0xc6, 0xf8, 0x71, 0x15, 0x56, 0x4c, 0x12, 0xfa, 0xee, 0x21, + 0x89, 0x43, 0xd7, 0x74, 0x8a, 0x8f, 0xef, 0x41, 0x0d, 0x53, 0xaa, 0xcc, 0xe4, 0xfe, 0x6b, 0x4b, + 0xef, 0x26, 0xa7, 0x8a, 0xde, 0x81, 0x65, 0x3c, 0xe8, 0x3a, 0x76, 0xe4, 0x47, 0x61, 0xbc, 0x2d, + 0x61, 0x54, 0x2d, 0x73, 0x74, 0xc2, 0xb0, 0xe0, 0xdc, 0x88, 0x0a, 0x94, 0x3a, 0xb3, 0x25, 0x52, + 0xa5, 0x50, 0x22, 0x95, 0x32, 0xa9, 0x8e, 0x63, 0xf2, 0xc7, 0x0a, 0x2c, 0xa5, 0xae, 0xa3, 0xc8, + 0x5f, 0x84, 0xd6, 0x40, 0xc1, 0x42, 0xad, 0x22, 0xe2, 0x53, 0x0a, 0xc8, 0x57, 0x4b, 0xd5, 0x62, + 0xb5, 0xb4, 0x02, 0x0d, 0x59, 0xcc, 0xaa, 0x8d, 0xa9, 0x51, 0x4e, 0xe4, 0x7a, 0x41, 0xe4, 0x55, + 0x80, 0x30, 0x89, 0x5f, 0x5a, 0x43, 0xcc, 0x66, 0x20, 0xc8, 0x80, 0x79, 0x99, 0x5b, 0x4d, 0x12, + 0x46, 0x2e, 0xd3, 0xe6, 0x04, 0x46, 0x0e, 0x66, 0xf8, 0xb0, 0xf8, 0xd0, 0xe1, 0x7b, 0xd8, 0x0f, + 0xa7, 0x63, 0xec, 0xef, 0x43, 0x9d, 0x33, 0xe3, 0x1b, 0xeb, 0x06, 0xd8, 0xb3, 0xfa, 0x24, 0xd6, + 0x55, 0x32, 0xe6, 0x6e, 0xcc, 0xb0, 0x1d, 0x6a, 0x55, 0x01, 0x17, 0xdf, 0xc6, 0xef, 0xaa, 0x52, + 0xd2, 0x4d, 0x4a, 0xc3, 0xaf, 0xbe, 0xa0, 0x2e, 0x4f, 0xf1, 0xb5, 0xd1, 0x14, 0x5f, 0x10, 0xf9, + 0xcb, 0xa4, 0xf8, 0xd7, 0x94, 0xa6, 0x8c, 0x08, 0xe6, 0x36, 0x29, 0xe5, 0x82, 0xa0, 0x1b, 0x50, + 0xc7, 0x94, 0x4a, 0x85, 0x17, 0x22, 0xb2, 0x42, 0xe1, 0xff, 0x95, 0x48, 0x02, 0x55, 0xbf, 0x05, + 0xad, 0x04, 0x74, 0x14, 0xdb, 0x56, 0x96, 0xed, 0x1a, 0x80, 0xac, 0x61, 0xef, 0x7b, 0xfb, 0x3e, + 0x3f, 0x52, 0x6e, 0xec, 0x6a, 0xa9, 0xf8, 0x36, 0x6e, 0xc7, 0x18, 0x42, 0xb6, 0x77, 0x60, 0xd6, + 0x61, 0x64, 0x10, 0x0b, 0xb7, 0x92, 0x15, 0x2e, 0x25, 0x64, 0x4a, 0x24, 0xe3, 0x4f, 0x4d, 0x38, + 0xcf, 0x4f, 0xec, 0x89, 0x70, 0x93, 0x4d, 0x4a, 0xef, 0x10, 0x86, 0x1d, 0x37, 0xfc, 0x56, 0x44, + 0x82, 0xe1, 0x1b, 0x36, 0x0c, 0x1b, 0x1a, 0xd2, 0xcb, 0x54, 0xbc, 0x7b, 0xed, 0xd7, 0x19, 0x45, + 0x3e, 0xbd, 0xc3, 0xd4, 0xde, 0xcc, 0x1d, 0xa6, 0xec, 0x4e, 0x51, 0x9f, 0xd2, 0x9d, 0x62, 0xfc, + 0xb5, 0x32, 0x73, 0x59, 0x6d, 0xe4, 0x2f, 0xab, 0x25, 0xa5, 0xfa, 0xdc, 0x71, 0x4b, 0xf5, 0x66, + 0x69, 0xa9, 0x3e, 0x28, 0xf5, 0xe3, 0x96, 0x50, 0xf7, 0x47, 0x59, 0x0b, 0x1c, 0x6b, 0x6b, 0x27, + 0x29, 0xda, 0xe1, 0x8d, 0x16, 0xed, 0x9f, 0xe5, 0x8a, 0x70, 0x79, 0x0d, 0x7e, 0xef, 0x78, 0x7b, + 0x9a, 0x50, 0x8e, 0xff, 0xcf, 0x15, 0xcf, 0x3f, 0x15, 0x35, 0x13, 0xf5, 0x53, 0x1d, 0x24, 0x09, + 0x9d, 0xe7, 0x21, 0x9e, 0x5a, 0x55, 0xd0, 0xe2, 0xdf, 0xe8, 0x3a, 0xd4, 0xb9, 0x92, 0x55, 0x51, + 0x7b, 0x2e, 0xab, 0x4f, 0x7e, 0x12, 0x9b, 0x94, 0x3e, 0xa1, 0xc4, 0x32, 0x05, 0x12, 0xba, 0x0d, + 0xad, 0xc4, 0xf0, 0x95, 0x67, 0x5d, 0xcc, 0xae, 0x48, 0xfc, 0x24, 0x5e, 0x96, 0xa2, 0xf3, 0xb5, + 0x3d, 0x27, 0x20, 0x96, 0x28, 0xf9, 0x66, 0x47, 0xd7, 0xde, 0x89, 0x27, 0x93, 0xb5, 0x09, 0x3a, + 0xba, 0x01, 0x0d, 0xd9, 0x37, 0x10, 0x1e, 0xd4, 0xde, 0x38, 0x3f, 0x1a, 0x4c, 0xe3, 0x55, 0x0a, + 0xd1, 0xf8, 0x43, 0x05, 0xde, 0x4a, 0x0d, 0x22, 0xf6, 0xa6, 0xb8, 0xea, 0xfe, 0xea, 0x33, 0xee, + 0x15, 0x58, 0x10, 0x65, 0x7e, 0xda, 0x3e, 0x90, 0x9d, 0xac, 0x02, 0xd4, 0xf8, 0x6d, 0x05, 0x2e, + 0x8f, 0xee, 0x63, 0xab, 0x8f, 0x03, 0x96, 0x1c, 0xef, 0x34, 0xf6, 0x12, 0x27, 0xbc, 0x6a, 0x9a, + 0xf0, 0x72, 0xfb, 0xab, 0xe5, 0xf7, 0x67, 0xfc, 0xbe, 0x0a, 0xed, 0x8c, 0x01, 0x95, 0x25, 0x4c, + 0x5e, 0xf0, 0x09, 0xbb, 0x15, 0x17, 0x3b, 0x91, 0x14, 0x5a, 0x66, 0x06, 0x82, 0x0e, 0x00, 0x28, + 0x0e, 0xf0, 0x80, 0x30, 0x12, 0xf0, 0x48, 0xce, 0x3d, 0xfe, 0xc1, 0xc9, 0xa3, 0xcb, 0x5e, 0x4c, + 0xd3, 0xcc, 0x90, 0xe7, 0x15, 0xab, 0x60, 0x1d, 0xaa, 0xf8, 0xad, 0x46, 0xe8, 0x0b, 0x58, 0xd8, + 0x77, 0x5c, 0xb2, 0x97, 0x0a, 0xd2, 0x10, 0x82, 0x3c, 0x3e, 0xb9, 0x20, 0xf7, 0xb2, 0x74, 0xcd, + 0x02, 0x1b, 0xe3, 0x1a, 0x2c, 0x15, 0xfd, 0x89, 0x0b, 0xe9, 0x0c, 0xb0, 0x9d, 0x68, 0x4b, 0x8d, + 0x0c, 0x04, 0x4b, 0x45, 0xff, 0x31, 0xfe, 0x56, 0x85, 0xb3, 0x09, 0xb9, 0x4d, 0xcf, 0xf3, 0x23, + 0xcf, 0x12, 0xad, 0xb8, 0xd2, 0xb3, 0x38, 0x03, 0xb3, 0xcc, 0x61, 0x6e, 0x52, 0xf8, 0x88, 0x01, + 0xcf, 0x5d, 0xcc, 0xf7, 0x5d, 0xe6, 0x50, 0x75, 0xc0, 0xf1, 0x50, 0x9e, 0xfd, 0x8b, 0xc8, 0x09, + 0x48, 0x4f, 0x44, 0x82, 0xa6, 0x99, 0x8c, 0xf9, 0x1c, 0xaf, 0x6a, 0x44, 0x19, 0x2f, 0x95, 0x99, + 0x8c, 0x85, 0xdd, 0xfb, 0xae, 0x4b, 0x2c, 0xae, 0x8e, 0x4c, 0xa1, 0x5f, 0x80, 0x8a, 0x0b, 0x04, + 0x0b, 0x1c, 0xcf, 0x56, 0x65, 0xbe, 0x1a, 0x71, 0x39, 0x71, 0x10, 0xe0, 0xa1, 0xd6, 0x14, 0x0a, + 0x90, 0x03, 0xf4, 0x21, 0xd4, 0x06, 0x98, 0xaa, 0x44, 0x77, 0x2d, 0x17, 0x1d, 0xca, 0x34, 0xd0, + 0xd9, 0xc5, 0x54, 0x66, 0x02, 0xbe, 0x4c, 0x7f, 0x1f, 0x9a, 0x31, 0xe0, 0x4b, 0x95, 0x84, 0x9f, + 0xc3, 0xa9, 0x5c, 0xf0, 0x41, 0xcf, 0x60, 0x25, 0xb5, 0xa8, 0x2c, 0x43, 0x55, 0x04, 0xbe, 0x75, + 0xa4, 0x64, 0xe6, 0x18, 0x02, 0xc6, 0x0b, 0x58, 0xe6, 0x26, 0x23, 0x1c, 0x7f, 0x4a, 0x57, 0x9b, + 0x0f, 0xa0, 0x95, 0xb0, 0x2c, 0xb5, 0x19, 0x1d, 0x9a, 0x87, 0x71, 0x8b, 0x54, 0xde, 0x6d, 0x92, + 0xb1, 0xb1, 0x09, 0x28, 0x2b, 0xaf, 0xca, 0x40, 0xd7, 0xf3, 0x45, 0xf1, 0xd9, 0x62, 0xba, 0x11, + 0xe8, 0x71, 0x4d, 0xfc, 0x9b, 0x2a, 0x2c, 0x6e, 0x3b, 0xa2, 0xcb, 0x31, 0xa5, 0x20, 0x77, 0x0d, + 0x96, 0xc2, 0xa8, 0x3b, 0xf0, 0x7b, 0x91, 0x4b, 0x54, 0x51, 0xa0, 0x32, 0xfd, 0x08, 0x7c, 0x52, + 0xf0, 0xe3, 0xca, 0xa2, 0x98, 0xf5, 0xd5, 0x0d, 0x57, 0x7c, 0xa3, 0x0f, 0xe1, 0xfc, 0x23, 0xf2, + 0x85, 0xda, 0xcf, 0xb6, 0xeb, 0x77, 0xbb, 0x8e, 0x67, 0xc7, 0x4c, 0x66, 0x05, 0x93, 0xf1, 0x08, + 0x65, 0xa5, 0x62, 0xa3, 0xb4, 0x54, 0x34, 0x7e, 0x52, 0x81, 0xa5, 0x54, 0x6b, 0x4a, 0xef, 0xb7, + 0xa4, 0x7f, 0x48, 0xad, 0x5f, 0xce, 0x6a, 0xbd, 0x88, 0xfa, 0xef, 0xbb, 0xc6, 0x7c, 0xd6, 0x35, + 0xfe, 0x51, 0x81, 0xb3, 0xdb, 0x0e, 0x8b, 0x83, 0x92, 0xf3, 0xdf, 0x76, 0x82, 0x25, 0xfa, 0xae, + 0x97, 0xeb, 0xbb, 0x03, 0x2b, 0xc5, 0x8d, 0x2a, 0xa5, 0x9f, 0x81, 0x59, 0x7e, 0xf2, 0x71, 0x3f, + 0x40, 0x0e, 0x8c, 0x5f, 0x37, 0xe0, 0xd2, 0x67, 0xb4, 0x87, 0x59, 0xd2, 0xcf, 0xb9, 0xe7, 0x07, + 0x7b, 0x7c, 0x6a, 0x3a, 0x1a, 0x2a, 0xbc, 0x90, 0x55, 0x27, 0xbe, 0x90, 0xd5, 0x26, 0xbc, 0x90, + 0xd5, 0x8f, 0xf5, 0x42, 0x36, 0x3b, 0xb5, 0x17, 0xb2, 0xd1, 0x3b, 0x52, 0xa3, 0xf4, 0x8e, 0xf4, + 0x2c, 0x77, 0x8f, 0x98, 0x13, 0x2e, 0xf1, 0x8d, 0xac, 0x4b, 0x4c, 0x3c, 0x9d, 0x89, 0xad, 0xfd, + 0xc2, 0xc3, 0x52, 0xf3, 0xc8, 0x87, 0xa5, 0xd6, 0xe8, 0xc3, 0x52, 0xf9, 0xdb, 0x04, 0x8c, 0x7d, + 0x9b, 0xb8, 0x02, 0x0b, 0xe1, 0xd0, 0xb3, 0x48, 0x2f, 0xe9, 0xf2, 0xb5, 0xe5, 0xb6, 0xf3, 0xd0, + 0x9c, 0xb5, 0xcf, 0x17, 0xac, 0x3d, 0xb1, 0xd4, 0x53, 0x19, 0x4b, 0xfd, 0xcf, 0xb9, 0xd2, 0xac, + 0xc1, 0xea, 0xb8, 0x33, 0x91, 0xae, 0x66, 0xfc, 0xb2, 0x0a, 0xfa, 0x0e, 0x0e, 0xef, 0x04, 0x43, + 0x29, 0xed, 0x56, 0x1f, 0x7b, 0x36, 0xdf, 0xfc, 0x34, 0x3c, 0xaa, 0xd4, 0xee, 0xab, 0xd3, 0xb4, + 0xfb, 0x82, 0x01, 0xd4, 0xca, 0x0c, 0xc0, 0xf8, 0x08, 0x2e, 0x94, 0xaa, 0x48, 0x45, 0xab, 0x55, + 0x80, 0x3e, 0x0e, 0x15, 0x54, 0xf5, 0xe4, 0x33, 0x90, 0x8d, 0x5f, 0xb5, 0x61, 0x39, 0xbd, 0x88, + 0xf0, 0xbf, 0x8e, 0x45, 0xd0, 0x63, 0x58, 0xda, 0x56, 0xbf, 0x23, 0x88, 0xfb, 0xc7, 0x68, 0xd2, + 0x83, 0x8c, 0x7e, 0xb1, 0x7c, 0x52, 0x9d, 0xe3, 0x0c, 0xb2, 0xe0, 0x7c, 0x91, 0x60, 0xfa, 0xf6, + 0xf3, 0xff, 0x13, 0x28, 0x27, 0x58, 0x47, 0xb1, 0xb8, 0x5a, 0x41, 0xcf, 0x60, 0x21, 0xff, 0x42, + 0x81, 0x72, 0x95, 0x59, 0xe9, 0xa3, 0x89, 0x6e, 0x4c, 0x42, 0x49, 0xe4, 0x7f, 0xce, 0x7d, 0x26, + 0xd7, 0xae, 0x47, 0x46, 0xbe, 0x49, 0x51, 0xf6, 0x9c, 0xa1, 0xff, 0xdf, 0x44, 0x9c, 0x84, 0xfa, + 0x07, 0xd0, 0x8c, 0xdb, 0xdb, 0x79, 0x35, 0x17, 0x9a, 0xde, 0xfa, 0x52, 0x9e, 0xde, 0x7e, 0x68, + 0xcc, 0xa0, 0x8f, 0xe5, 0xe2, 0x4d, 0x4a, 0x4b, 0x16, 0x67, 0x9a, 0xba, 0xfa, 0xe9, 0x92, 0x46, + 0xaa, 0x31, 0x83, 0xbe, 0x09, 0x6d, 0xfe, 0xb5, 0xa7, 0x5e, 0xf0, 0x57, 0x3a, 0xf2, 0x07, 0x23, + 0x9d, 0xf8, 0x07, 0x23, 0x9d, 0xbb, 0x03, 0xca, 0x86, 0x7a, 0x49, 0xa7, 0x53, 0x11, 0x78, 0x0e, + 0xa7, 0xb6, 0x09, 0x4b, 0x1b, 0x13, 0xe8, 0xf2, 0xb1, 0xda, 0x37, 0xba, 0x51, 0x44, 0x1b, 0xed, + 0x6d, 0x18, 0x33, 0xe8, 0xe7, 0x15, 0x38, 0xbd, 0x4d, 0x58, 0xf1, 0xaa, 0x8f, 0xde, 0x2d, 0x67, + 0x32, 0xa6, 0x25, 0xa0, 0x3f, 0x3a, 0x69, 0x74, 0xc8, 0x93, 0x35, 0x66, 0xd0, 0x2f, 0x2a, 0x70, + 0x2e, 0x23, 0x58, 0xf6, 0xee, 0x8e, 0x6e, 0x4c, 0x16, 0xae, 0xe4, 0x9e, 0xaf, 0x7f, 0x7a, 0xc2, + 0x1f, 0x66, 0x64, 0x48, 0x1a, 0x33, 0x68, 0x4f, 0x9c, 0x49, 0x5a, 0xaa, 0xa3, 0x4b, 0xa5, 0x35, + 0x79, 0xc2, 0x7d, 0x75, 0xdc, 0x74, 0x72, 0x0e, 0x9f, 0x42, 0x7b, 0x9b, 0xb0, 0xb8, 0xae, 0xcc, + 0x5b, 0x5a, 0xa1, 0x9c, 0xcf, 0xbb, 0x6a, 0xb1, 0x14, 0x15, 0x16, 0xb3, 0x2c, 0x69, 0x65, 0xea, + 0xab, 0xbc, 0xaf, 0x96, 0x16, 0x99, 0x79, 0x8b, 0x29, 0x2f, 0xcf, 0x8c, 0x19, 0xf4, 0x02, 0x56, + 0xca, 0xf3, 0x0a, 0x7a, 0xfb, 0xd8, 0xf5, 0x80, 0x7e, 0xed, 0x38, 0xa8, 0x09, 0xcb, 0x3e, 0x9c, + 0x2e, 0x09, 0xc2, 0xe8, 0x4a, 0x4e, 0xab, 0x63, 0x13, 0x99, 0xfe, 0xb5, 0x23, 0xf1, 0x62, 0x4e, + 0x9f, 0x6c, 0xfe, 0xf9, 0xd5, 0x6a, 0xe5, 0x2f, 0xaf, 0x56, 0x2b, 0x7f, 0x7f, 0xb5, 0x5a, 0xf9, + 0xee, 0xcd, 0x23, 0x7e, 0x2a, 0x96, 0xf9, 0xf5, 0x19, 0xa6, 0x8e, 0xe5, 0x3a, 0xc4, 0x63, 0xdd, + 0x86, 0xf0, 0xec, 0x9b, 0xff, 0x0a, 0x00, 0x00, 0xff, 0xff, 0x13, 0x2f, 0x30, 0x1e, 0x9c, 0x26, + 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -2575,6 +2692,8 @@ type RepoServerServiceClient interface { GetGitDirectories(ctx context.Context, in *GitDirectoriesRequest, opts ...grpc.CallOption) (*GitDirectoriesResponse, error) // UpdateRevisionForPaths will compare two revisions and update the cache with the new revision if no changes are detected in the provided paths UpdateRevisionForPaths(ctx context.Context, in *UpdateRevisionForPathsRequest, opts ...grpc.CallOption) (*UpdateRevisionForPathsResponse, error) + // HasDrySourceChanged determines whether a dry source has changed since the last synced revision + HasDrySourceChanged(ctx context.Context, in *HasDrySourceChangedRequest, opts ...grpc.CallOption) (*HasDrySourceChangedResponse, error) } type repoServerServiceClient struct { @@ -2736,6 +2855,15 @@ func (c *repoServerServiceClient) UpdateRevisionForPaths(ctx context.Context, in return out, nil } +func (c *repoServerServiceClient) HasDrySourceChanged(ctx context.Context, in *HasDrySourceChangedRequest, opts ...grpc.CallOption) (*HasDrySourceChangedResponse, error) { + out := new(HasDrySourceChangedResponse) + err := c.cc.Invoke(ctx, "/repository.RepoServerService/ResolveDryRevision", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // RepoServerServiceServer is the server API for RepoServerService service. type RepoServerServiceServer interface { // GenerateManifest generates manifest for application in specified repo name and revision @@ -2766,6 +2894,8 @@ type RepoServerServiceServer interface { GetGitDirectories(context.Context, *GitDirectoriesRequest) (*GitDirectoriesResponse, error) // UpdateRevisionForPaths will compare two revisions and update the cache with the new revision if no changes are detected in the provided paths UpdateRevisionForPaths(context.Context, *UpdateRevisionForPathsRequest) (*UpdateRevisionForPathsResponse, error) + // HasDrySourceChanged determines whether a dry source has changed since the last synced revision + HasDrySourceChanged(context.Context, *HasDrySourceChangedRequest) (*HasDrySourceChangedResponse, error) } // UnimplementedRepoServerServiceServer can be embedded to have forward compatible implementations. @@ -2814,6 +2944,9 @@ func (*UnimplementedRepoServerServiceServer) GetGitDirectories(ctx context.Conte func (*UnimplementedRepoServerServiceServer) UpdateRevisionForPaths(ctx context.Context, req *UpdateRevisionForPathsRequest) (*UpdateRevisionForPathsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method UpdateRevisionForPaths not implemented") } +func (*UnimplementedRepoServerServiceServer) HasDrySourceChanged(ctx context.Context, req *HasDrySourceChangedRequest) (*HasDrySourceChangedResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ResolveDryRevision not implemented") +} func RegisterRepoServerServiceServer(s *grpc.Server, srv RepoServerServiceServer) { s.RegisterService(&_RepoServerService_serviceDesc, srv) @@ -3079,6 +3212,24 @@ func _RepoServerService_UpdateRevisionForPaths_Handler(srv interface{}, ctx cont return interceptor(ctx, in, info, handler) } +func _RepoServerService_HasDrySourceChanged_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(HasDrySourceChangedRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RepoServerServiceServer).HasDrySourceChanged(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/repository.RepoServerService/ResolveDryRevision", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RepoServerServiceServer).HasDrySourceChanged(ctx, req.(*HasDrySourceChangedRequest)) + } + return interceptor(ctx, in, info, handler) +} + var _RepoServerService_serviceDesc = grpc.ServiceDesc{ ServiceName: "repository.RepoServerService", HandlerType: (*RepoServerServiceServer)(nil), @@ -3135,6 +3286,10 @@ var _RepoServerService_serviceDesc = grpc.ServiceDesc{ MethodName: "UpdateRevisionForPaths", Handler: _RepoServerService_UpdateRevisionForPaths_Handler, }, + { + MethodName: "ResolveDryRevision", + Handler: _RepoServerService_HasDrySourceChanged_Handler, + }, }, Streams: []grpc.StreamDesc{ { @@ -5317,6 +5472,101 @@ func (m *UpdateRevisionForPathsResponse) MarshalToSizedBuffer(dAtA []byte) (int, return len(dAtA) - i, nil } +func (m *HasDrySourceChangedRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *HasDrySourceChangedRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *HasDrySourceChangedRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if len(m.SyncedRevision) > 0 { + i -= len(m.SyncedRevision) + copy(dAtA[i:], m.SyncedRevision) + i = encodeVarintRepository(dAtA, i, uint64(len(m.SyncedRevision))) + i-- + dAtA[i] = 0x1a + } + if m.ApplicationSource != nil { + { + size, err := m.ApplicationSource.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintRepository(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if m.Repo != nil { + { + size, err := m.Repo.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintRepository(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *HasDrySourceChangedResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *HasDrySourceChangedResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *HasDrySourceChangedResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if m.HasChanged { + i-- + if m.HasChanged { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + func encodeVarintRepository(dAtA []byte, offset int, v uint64) int { offset -= sovRepository(v) base := offset @@ -6300,6 +6550,45 @@ func (m *UpdateRevisionForPathsResponse) Size() (n int) { return n } +func (m *HasDrySourceChangedRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Repo != nil { + l = m.Repo.Size() + n += 1 + l + sovRepository(uint64(l)) + } + if m.ApplicationSource != nil { + l = m.ApplicationSource.Size() + n += 1 + l + sovRepository(uint64(l)) + } + l = len(m.SyncedRevision) + if l > 0 { + n += 1 + l + sovRepository(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *HasDrySourceChangedResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.HasChanged { + n += 2 + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + func sovRepository(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 } @@ -12491,6 +12780,232 @@ func (m *UpdateRevisionForPathsResponse) Unmarshal(dAtA []byte) error { } return nil } +func (m *HasDrySourceChangedRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRepository + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: HasDrySourceChangedRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: HasDrySourceChangedRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Repo", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRepository + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRepository + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthRepository + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Repo == nil { + m.Repo = &v1alpha1.Repository{} + } + if err := m.Repo.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ApplicationSource", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRepository + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRepository + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthRepository + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.ApplicationSource == nil { + m.ApplicationSource = &v1alpha1.ApplicationSource{} + } + if err := m.ApplicationSource.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SyncedRevision", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRepository + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRepository + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthRepository + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SyncedRevision = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRepository(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthRepository + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *HasDrySourceChangedResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRepository + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: HasDrySourceChangedResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: HasDrySourceChangedResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field HasChanged", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRepository + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.HasChanged = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipRepository(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthRepository + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func skipRepository(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 diff --git a/reposerver/repository/repository.go b/reposerver/repository/repository.go index 83cc149f68c8a..18d7ff1d6d9e4 100644 --- a/reposerver/repository/repository.go +++ b/reposerver/repository/repository.go @@ -2777,3 +2777,8 @@ func (s *Service) updateCachedRevision(logCtx *log.Entry, oldRev string, newRev logCtx.Debugf("manifest cache updated for application %s in repo %s from revision %s to revision %s", request.AppName, request.GetRepo().Repo, oldRev, newRev) return nil } + +func (s *Service) HasDrySourceChanged(_ context.Context, request *apiclient.HasDrySourceChangedRequest) (*apiclient.HasDrySourceChangedResponse, error) { + resp := apiclient.HasDrySourceChangedResponse{HasChanged: false} + return &resp, nil +} diff --git a/reposerver/repository/repository.proto b/reposerver/repository/repository.proto index 253714a72bd50..a587571bccca1 100644 --- a/reposerver/repository/repository.proto +++ b/reposerver/repository/repository.proto @@ -277,6 +277,16 @@ message UpdateRevisionForPathsRequest { message UpdateRevisionForPathsResponse { } +message HasDrySourceChangedRequest { + jackfan.us.kg.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.Repository repo = 1; + jackfan.us.kg.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.ApplicationSource applicationSource = 2; + string syncedRevision = 3; +} + +message HasDrySourceChangedResponse { + bool hasChanged = 1; +} + // ManifestService service RepoServerService { @@ -335,4 +345,8 @@ service RepoServerService { // UpdateRevisionForPaths will compare two revisions and update the cache with the new revision if no changes are detected in the provided paths rpc UpdateRevisionForPaths(UpdateRevisionForPathsRequest) returns (UpdateRevisionForPathsResponse) { } + + // HasDrySourceChanged determines whether a dry source has changed since the last synced revision + rpc HasDrySourceChanged(HasDrySourceChangedRequest) returns (HasDrySourceChangedResponse) { + } } diff --git a/ui/src/app/applications/components/application-parameters/application-parameters.tsx b/ui/src/app/applications/components/application-parameters/application-parameters.tsx index 3028c3a13725c..7ded179688fc4 100644 --- a/ui/src/app/applications/components/application-parameters/application-parameters.tsx +++ b/ui/src/app/applications/components/application-parameters/application-parameters.tsx @@ -188,7 +188,15 @@ export const ApplicationParameters = (props: { ); } else { const v: models.ApplicationSource[] = new Array(); - v.push(app.spec.source); + if (app.spec.sourceHydrator) { + v.push({ + repoURL: app.spec.sourceHydrator.drySource.repoURL, + targetRevision: app.spec.sourceHydrator.syncSource.targetRevision, + path: app.spec.sourceHydrator.syncSource.path, + }) + } else { + v.push(app.spec.source); + } return getEditablePanel(attributes, props.details, 0, v); } @@ -272,7 +280,7 @@ export const ApplicationParameters = (props: { values={ app?.spec?.source ? ((props.details.plugin || app?.spec?.source?.plugin) && cloneDeep(app)) || app - : ((repoAppDetails.plugin || app?.spec?.sources[ind]?.plugin) && cloneDeep(app)) || app + : ((repoAppDetails.plugin || src?.plugin) && cloneDeep(app)) || app } validate={updatedApp => { const errors = {} as any; diff --git a/ui/src/app/applications/components/application-status-panel/application-status-panel.tsx b/ui/src/app/applications/components/application-status-panel/application-status-panel.tsx index 7c2b65cd3ce27..610503d4c822a 100644 --- a/ui/src/app/applications/components/application-status-panel/application-status-panel.tsx +++ b/ui/src/app/applications/components/application-status-panel/application-status-panel.tsx @@ -107,7 +107,7 @@ export const ApplicationStatusPanel = ({application, showDiff, showOperation, sh
{application.spec.syncPolicy?.automated ? 'Auto sync is enabled.' : 'Auto sync is not enabled.'}
- {application.status && application.status.sync && application.status.sync.revision && !application.spec.source.chart && ( + {application.status && application.status.sync && application.status.sync.revision && !source.chart && (
)) ||
{appOperationState.message}
} diff --git a/ui/src/app/applications/components/utils.tsx b/ui/src/app/applications/components/utils.tsx index 72ff81a7f2e2f..0392e65534051 100644 --- a/ui/src/app/applications/components/utils.tsx +++ b/ui/src/app/applications/components/utils.tsx @@ -1041,10 +1041,17 @@ export function getAppDefaultSource(app?: appModels.Application) { if (!app) { return null; } - return app.spec.sources && app.spec.sources.length > 0 ? app.spec.sources[0] : app.spec.source; + return getAppSpecDefaultSource(app.spec); } export function getAppSpecDefaultSource(spec: appModels.ApplicationSpec) { + if (spec.sourceHydrator) { + return { + repoURL: spec.sourceHydrator.drySource.repoURL, + targetRevision: spec.sourceHydrator.syncSource.targetRevision, + path: spec.sourceHydrator.syncSource.path, + } + } return spec.sources && spec.sources.length > 0 ? spec.sources[0] : spec.source; } diff --git a/ui/src/app/shared/models.ts b/ui/src/app/shared/models.ts index bb88dcf3cc443..f9961d086d0cf 100644 --- a/ui/src/app/shared/models.ts +++ b/ui/src/app/shared/models.ts @@ -201,6 +201,27 @@ export interface ApplicationSource { ref?: string; } +export interface SourceHydrator { + drySource: DrySource; + syncSource: SyncSource; + hydrateTo?: HydrateTo; +} + +export interface DrySource { + repoURL: string; + targetRevision: string; + path: string; +} + +export interface SyncSource { + targetRevision: string; + path: string +} + +export interface HydrateTo { + targetRevision: string; +} + export interface ApplicationSourceHelm { valueFiles: string[]; values?: string; @@ -272,6 +293,7 @@ export interface ApplicationSpec { project: string; source: ApplicationSource; sources: ApplicationSource[]; + sourceHydrator?: SourceHydrator; destination: ApplicationDestination; syncPolicy?: SyncPolicy; ignoreDifferences?: ResourceIgnoreDifferences[]; From 58c0a5b82a2df37d02fa374515fb98dfb28147d3 Mon Sep 17 00:00:00 2001 From: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> Date: Wed, 24 Apr 2024 12:40:23 -0400 Subject: [PATCH 03/15] push works w/ my personal creds Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> --- controller/appcontroller.go | 55 +++++++++++++- controller/commit/commit.go | 147 ++++++++++++++++++++++++++++++++++-- 2 files changed, 191 insertions(+), 11 deletions(-) diff --git a/controller/appcontroller.go b/controller/appcontroller.go index 29870bb1394a8..9da89659d392b 100644 --- a/controller/appcontroller.go +++ b/controller/appcontroller.go @@ -5,6 +5,7 @@ import ( "encoding/json" goerrors "errors" "fmt" + "github.com/argoproj/argo-cd/v2/controller/commit" "math" "math/rand" "net/http" @@ -1556,12 +1557,60 @@ func (ctrl *ApplicationController) processAppRefreshQueueItem() (processNext boo if app.Spec.SourceHydrator != nil { revision, err := ctrl.appStateManager.ResolveDryRevision(app) if err != nil { - logCtx.Errorf("Failed to check whether dry source has changed, skipping: %w", err) + logCtx.Errorf("Failed to check whether dry source has changed, skipping: %v", err) } if app.Status.SourceHydrator.Revision != revision { app.Status.SourceHydrator.Revision = revision ctrl.persistAppStatus(origApp, &app.Status) - logCtx.Info("UPDATED THE REVISION, YO") + + drySource := appv1.ApplicationSource{ + RepoURL: app.Spec.SourceHydrator.DrySource.RepoURL, + Path: app.Spec.SourceHydrator.DrySource.Path, + TargetRevision: app.Spec.SourceHydrator.DrySource.TargetRevision, + } + drySources := []appv1.ApplicationSource{drySource} + revisions := []string{app.Spec.SourceHydrator.DrySource.TargetRevision} + + appLabelKey, err := ctrl.settingsMgr.GetAppInstanceLabelKey() + if err != nil { + logCtx.Errorf("Failed to get app instance label key: %s", err) + return + } + + // TODO: enable signature verification + objs, _, err := ctrl.appStateManager.GetRepoObjs(app, drySources, appLabelKey, revisions, refreshType == appv1.RefreshTypeHard, + comparisonLevel == CompareWithLatestForceResolve, false, project) + if err != nil { + logCtx.Errorf("Failed to get repo objects: %v", err) + return + } + + // Set up a ManifestsRequest + manifestDetails := make([]commit.ManifestDetails, len(objs)) + for i, obj := range objs { + manifestDetails[i] = commit.ManifestDetails{Manifest: *obj} + } + paths := []commit.PathDetails{{ + Path: app.Spec.SourceHydrator.SyncSource.Path, + Manifests: manifestDetails, + }} + manifestsRequest := commit.ManifestsRequest{ + RepoURL: app.Spec.SourceHydrator.DrySource.RepoURL, + TargetBranch: app.Spec.SourceHydrator.SyncSource.TargetRevision, + DrySHA: revision, + CommitAuthorName: "Michael Crenshaw", + CommitAuthorEmail: "350466+crenshaw-dev@users.noreply.github.com", + CommitMessage: fmt.Sprintf("hydrate %s", revision), + CommitTime: time.Now(), + Paths: paths, + } + + commitService := commit.NewService() + _, err = commitService.Commit(manifestsRequest) + if err != nil { + logCtx.Errorf("Failed to commit hydrated manifests: %v", err) + return + } } } @@ -1977,7 +2026,7 @@ func alreadyAttemptedSync(app *appv1.Application, commitSHA string, commitSHAsMS } else { // Ignore differences in target revision, since we already just verified commitSHAs are equal, // and we do not want to trigger auto-sync due to things like HEAD != master - specSource := app.Spec.Source.DeepCopy() + specSource := app.Spec.GetSource() specSource.TargetRevision = "" syncResSource := app.Status.OperationState.SyncResult.Source.DeepCopy() syncResSource.TargetRevision = "" diff --git a/controller/commit/commit.go b/controller/commit/commit.go index 714cdfd47188b..965fd6ef619b3 100644 --- a/controller/commit/commit.go +++ b/controller/commit/commit.go @@ -1,7 +1,14 @@ package commit import ( + "fmt" + "github.com/google/uuid" + log "github.com/sirupsen/logrus" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + "os" + "os/exec" + "path" + "sigs.k8s.io/yaml" "time" ) @@ -10,17 +17,18 @@ The commit package provides a way for the controller to push manifests to git. */ type Service interface { - Commit(ManifestsRequest) ManifestsResponse + Commit(ManifestsRequest) (ManifestsResponse, error) } type ManifestsRequest struct { - RepoURL string - TargetBranch string - DrySHA string - CommitAuthor string - CommitMessage string - CommitTime time.Time - PathDetails + RepoURL string + TargetBranch string + DrySHA string + CommitAuthorName string + CommitAuthorEmail string + CommitMessage string + CommitTime time.Time + Paths []PathDetails } type PathDetails struct { @@ -39,3 +47,126 @@ type ReadmeDetails struct { type ManifestsResponse struct { RequestId string } + +func NewService() Service { + return &service{} +} + +type service struct { +} + +func (s *service) Commit(r ManifestsRequest) (ManifestsResponse, error) { + logCtx := log.WithFields(log.Fields{"repo": r.RepoURL, "branch": r.TargetBranch, "drySHA": r.DrySHA}) + logCtx.Info("committing") + + // Create a temp dir with a UUID + dirName, err := uuid.NewRandom() + dirPath := path.Join("/tmp/_commit-service", dirName.String()) + err = os.MkdirAll(dirPath, os.ModePerm) + if err != nil { + return ManifestsResponse{}, fmt.Errorf("failed to create temp dir: %w", err) + } + + // Clone the repo into the temp dir using the git CLI + err = exec.Command("git", "clone", r.RepoURL, dirPath).Run() + if err != nil { + return ManifestsResponse{}, fmt.Errorf("failed to clone repo: %w", err) + } + + // Checkout the target branch + checkoutCmd := exec.Command("git", "checkout", r.TargetBranch) + checkoutCmd.Dir = dirPath + out, err := checkoutCmd.CombinedOutput() + if err != nil { + log.WithError(err).WithField("output", string(out)).Error("failed to checkout branch") + return ManifestsResponse{}, fmt.Errorf("failed to checkout branch: %w", err) + } + + // Write the manifests to the temp dir + for _, p := range r.Paths { + hydratePath := p.Path + if hydratePath == "." { + hydratePath = "" + } + err = os.MkdirAll(path.Join(dirPath, hydratePath), os.ModePerm) + if err != nil { + return ManifestsResponse{}, fmt.Errorf("failed to create path: %w", err) + } + + // If the file exists, truncate it. + err = os.Truncate(path.Join(dirPath, hydratePath, "manifest.yaml"), 0) + if err != nil { + return ManifestsResponse{}, fmt.Errorf("failed to empty manifest file: %w", err) + } + + file, err := os.OpenFile(path.Join(dirPath, hydratePath, "manifest.yaml"), os.O_APPEND|os.O_CREATE|os.O_WRONLY, os.ModePerm) + if err != nil { + return ManifestsResponse{}, fmt.Errorf("failed to open manifest file: %w", err) + } + defer func() { + err := file.Close() + if err != nil { + log.WithError(err).Error("failed to close file") + } + }() + for _, m := range p.Manifests { + // Marshal the manifests + mYaml, err := yaml.Marshal(m.Manifest.Object) + if err != nil { + return ManifestsResponse{}, fmt.Errorf("failed to marshal manifest: %w", err) + } + mYaml = append(mYaml, []byte("\n---\n\n")...) + // Write the yaml to manifest.yaml + _, err = file.Write(mYaml) + if err != nil { + return ManifestsResponse{}, fmt.Errorf("failed to write manifest: %w", err) + } + } + } + + // Commit the changes + addCmd := exec.Command("git", "add", ".") + addCmd.Dir = dirPath + out, err = addCmd.CombinedOutput() + if err != nil { + log.WithError(err).WithField("output", string(out)).Error("failed to add files") + return ManifestsResponse{}, fmt.Errorf("failed to add files: %w", err) + } + + // Set author name + authorCmd := exec.Command("git", "config", "user.name", r.CommitAuthorName) + authorCmd.Dir = dirPath + out, err = authorCmd.CombinedOutput() + if err != nil { + log.WithError(err).WithField("output", string(out)).Error("failed to set author name") + return ManifestsResponse{}, fmt.Errorf("failed to set author name: %w", err) + } + + // Set author email + emailCmd := exec.Command("git", "config", "user.email", r.CommitAuthorEmail) + emailCmd.Dir = dirPath + out, err = emailCmd.CombinedOutput() + if err != nil { + log.WithError(err).WithField("output", string(out)).Error("failed to set author email") + return ManifestsResponse{}, fmt.Errorf("failed to set author email: %w", err) + } + + commitCmd := exec.Command("git", "commit", "-m", r.CommitMessage) + commitCmd.Dir = dirPath + out, err = commitCmd.CombinedOutput() + if err != nil { + log.WithError(err).WithField("output", string(out)).Error("failed to commit files") + return ManifestsResponse{}, fmt.Errorf("failed to commit: %w", err) + } + + pushCmd := exec.Command("git", "push", "origin", r.TargetBranch) + pushCmd.Dir = dirPath + out, err = pushCmd.CombinedOutput() + if err != nil { + log.WithError(err).WithField("output", string(out)).Error("failed to push manifests") + return ManifestsResponse{}, fmt.Errorf("failed to push: %w", err) + } + log.WithField("output", string(out)).Debug("pushed manifests to git") + + return ManifestsResponse{}, nil +} From b1dff6837cfc305d89ecd79d5c1fe7bcaf5c2139 Mon Sep 17 00:00:00 2001 From: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> Date: Fri, 26 Apr 2024 11:42:25 -0400 Subject: [PATCH 04/15] write metadata, readme, and commands Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> --- assets/swagger.json | 7 + cmpserver/plugin/plugin.go | 30 +- cmpserver/plugin/plugin_test.go | 3 +- controller/appcontroller.go | 3 +- controller/commit/commit.go | 57 ++++ reposerver/apiclient/repository.pb.go | 362 ++++++++++++++----------- reposerver/repository/repository.go | 74 +++-- reposerver/repository/repository.proto | 2 + util/exec/exec.go | 25 ++ util/helm/client.go | 14 +- util/helm/cmd.go | 61 +++-- util/helm/helm.go | 61 +++-- 12 files changed, 427 insertions(+), 272 deletions(-) diff --git a/assets/swagger.json b/assets/swagger.json index 0e71d9305912d..7cdc7383b2d14 100644 --- a/assets/swagger.json +++ b/assets/swagger.json @@ -4936,6 +4936,13 @@ "repositoryManifestResponse": { "type": "object", "properties": { + "commands": { + "type": "array", + "title": "commands is the list of commands used to hydrate the manifests", + "items": { + "type": "string" + } + }, "manifests": { "type": "array", "items": { diff --git a/cmpserver/plugin/plugin.go b/cmpserver/plugin/plugin.go index ca1e7592218ea..37d4f6ee7172e 100644 --- a/cmpserver/plugin/plugin.go +++ b/cmpserver/plugin/plugin.go @@ -6,15 +6,13 @@ import ( "encoding/json" "errors" "fmt" + exec2 "github.com/argoproj/argo-cd/v2/util/exec" + "github.com/argoproj/pkg/rand" "os" "os/exec" "path/filepath" - "strconv" "strings" "time" - "unicode" - - "github.com/argoproj/pkg/rand" "github.com/argoproj/argo-cd/v2/cmpserver/apiclient" "github.com/argoproj/argo-cd/v2/common" @@ -76,7 +74,7 @@ func runCommand(ctx context.Context, command Command, path string, env []string) } logCtx := log.WithFields(log.Fields{"execID": execId}) - argsToLog := getCommandArgsToLog(cmd) + argsToLog := exec2.GetCommandArgsToLog(cmd) logCtx.WithFields(log.Fields{"dir": cmd.Dir}).Info(argsToLog) var stdout bytes.Buffer @@ -135,28 +133,6 @@ func runCommand(ctx context.Context, command Command, path string, env []string) return strings.TrimSuffix(output, "\n"), nil } -// getCommandArgsToLog represents the given command in a way that we can copy-and-paste into a terminal -func getCommandArgsToLog(cmd *exec.Cmd) string { - var argsToLog []string - for _, arg := range cmd.Args { - containsSpace := false - for _, r := range arg { - if unicode.IsSpace(r) { - containsSpace = true - break - } - } - if containsSpace { - // add quotes and escape any internal quotes - argsToLog = append(argsToLog, strconv.Quote(arg)) - } else { - argsToLog = append(argsToLog, arg) - } - } - args := strings.Join(argsToLog, " ") - return args -} - type CmdError struct { Args string Stderr string diff --git a/cmpserver/plugin/plugin_test.go b/cmpserver/plugin/plugin_test.go index 20480f247d0e4..8dba1d2c2bab1 100644 --- a/cmpserver/plugin/plugin_test.go +++ b/cmpserver/plugin/plugin_test.go @@ -4,6 +4,7 @@ import ( "bytes" "context" "fmt" + exec2 "github.com/argoproj/argo-cd/v2/util/exec" "io" "os" "os/exec" @@ -801,7 +802,7 @@ func Test_getCommandArgsToLog(t *testing.T) { tcc := tc t.Run(tcc.name, func(t *testing.T) { t.Parallel() - assert.Equal(t, tcc.expected, getCommandArgsToLog(exec.Command(tcc.args[0], tcc.args[1:]...))) + assert.Equal(t, tcc.expected, exec2.GetCommandArgsToLog(exec.Command(tcc.args[0], tcc.args[1:]...))) }) } } diff --git a/controller/appcontroller.go b/controller/appcontroller.go index 9da89659d392b..50bdf84e0e18a 100644 --- a/controller/appcontroller.go +++ b/controller/appcontroller.go @@ -1578,7 +1578,7 @@ func (ctrl *ApplicationController) processAppRefreshQueueItem() (processNext boo } // TODO: enable signature verification - objs, _, err := ctrl.appStateManager.GetRepoObjs(app, drySources, appLabelKey, revisions, refreshType == appv1.RefreshTypeHard, + objs, resp, err := ctrl.appStateManager.GetRepoObjs(app, drySources, appLabelKey, revisions, refreshType == appv1.RefreshTypeHard, comparisonLevel == CompareWithLatestForceResolve, false, project) if err != nil { logCtx.Errorf("Failed to get repo objects: %v", err) @@ -1603,6 +1603,7 @@ func (ctrl *ApplicationController) processAppRefreshQueueItem() (processNext boo CommitMessage: fmt.Sprintf("hydrate %s", revision), CommitTime: time.Now(), Paths: paths, + Commands: resp[0].Commands, } commitService := commit.NewService() diff --git a/controller/commit/commit.go b/controller/commit/commit.go index 965fd6ef619b3..ba8425112349f 100644 --- a/controller/commit/commit.go +++ b/controller/commit/commit.go @@ -1,6 +1,7 @@ package commit import ( + "encoding/json" "fmt" "github.com/google/uuid" log "github.com/sirupsen/logrus" @@ -9,6 +10,7 @@ import ( "os/exec" "path" "sigs.k8s.io/yaml" + "text/template" "time" ) @@ -29,6 +31,7 @@ type ManifestsRequest struct { CommitMessage string CommitTime time.Time Paths []PathDetails + Commands []string } type PathDetails struct { @@ -124,6 +127,41 @@ func (s *service) Commit(r ManifestsRequest) (ManifestsResponse, error) { } } + // Write hydrator.metadata containing information about the hydration process. + hydratorMetadata := hydratorMetadataFile{ + Commands: r.Commands, + DrySHA: r.DrySHA, + RepoURL: r.RepoURL, + } + hydratorMetadataJson, err := json.MarshalIndent(hydratorMetadata, "", " ") + if err != nil { + return ManifestsResponse{}, fmt.Errorf("failed to marshal hydrator metadata: %w", err) + } + err = os.WriteFile(path.Join(dirPath, "hydrator.metadata"), hydratorMetadataJson, os.ModePerm) + if err != nil { + return ManifestsResponse{}, fmt.Errorf("failed to write hydrator metadata: %w", err) + } + + // Write README + readmeTemplate := template.New("readme") + readmeTemplate, err = readmeTemplate.Parse(manifestHydrationReadmeTemplate) + if err != nil { + return ManifestsResponse{}, fmt.Errorf("failed to parse readme template: %w", err) + } + // Create writer to template into + readmeFile, err := os.Create(path.Join(dirPath, "README.md")) + if err != nil && !os.IsExist(err) { + return ManifestsResponse{}, fmt.Errorf("failed to create README file: %w", err) + } + err = readmeTemplate.Execute(readmeFile, hydratorMetadata) + closeErr := readmeFile.Close() + if closeErr != nil { + logCtx.WithError(closeErr).Error("failed to close README file") + } + if err != nil { + return ManifestsResponse{}, fmt.Errorf("failed to execute readme template: %w", err) + } + // Commit the changes addCmd := exec.Command("git", "add", ".") addCmd.Dir = dirPath @@ -170,3 +208,22 @@ func (s *service) Commit(r ManifestsRequest) (ManifestsResponse, error) { return ManifestsResponse{}, nil } + +type hydratorMetadataFile struct { + Commands []string `json:"commands"` + RepoURL string `json:"repoURL"` + DrySHA string `json:"drySha"` +} + +var manifestHydrationReadmeTemplate = ` +# Manifest Hydration + +To hydrate the manifests in this repository, run the following commands: + +` + "```shell\n" + ` +git clone {{ .RepoURL }} +# cd into the cloned directory +git checkout {{ .DrySHA }} +{{ range $command := .Commands -}} +{{ $command }} +{{ end -}}` + "```" diff --git a/reposerver/apiclient/repository.pb.go b/reposerver/apiclient/repository.pb.go index 8f13bc8781660..2d961368e30b5 100644 --- a/reposerver/apiclient/repository.pb.go +++ b/reposerver/apiclient/repository.pb.go @@ -681,7 +681,9 @@ type ManifestResponse struct { Revision string `protobuf:"bytes,4,opt,name=revision,proto3" json:"revision,omitempty"` SourceType string `protobuf:"bytes,6,opt,name=sourceType,proto3" json:"sourceType,omitempty"` // Raw response of git verify-commit operation (always the empty string for Helm) - VerifyResult string `protobuf:"bytes,7,opt,name=verifyResult,proto3" json:"verifyResult,omitempty"` + VerifyResult string `protobuf:"bytes,7,opt,name=verifyResult,proto3" json:"verifyResult,omitempty"` + // commands is the list of commands used to hydrate the manifests + Commands []string `protobuf:"bytes,8,rep,name=commands,proto3" json:"commands,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -762,6 +764,13 @@ func (m *ManifestResponse) GetVerifyResult() string { return "" } +func (m *ManifestResponse) GetCommands() []string { + if m != nil { + return m.Commands + } + return nil +} + type ListRefsRequest struct { Repo *v1alpha1.Repository `protobuf:"bytes,1,opt,name=repo,proto3" json:"repo,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` @@ -2502,154 +2511,154 @@ func init() { } var fileDescriptor_dd8723cfcc820480 = []byte{ - // 2338 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x3a, 0x5b, 0x6f, 0x1c, 0x49, - 0xd5, 0x9e, 0x8b, 0xc7, 0x33, 0x67, 0x1c, 0x5f, 0x2a, 0x89, 0xd3, 0xe9, 0x24, 0x96, 0xb7, 0xbf, - 0x2f, 0x21, 0x9b, 0xec, 0x8e, 0x15, 0x47, 0xbb, 0x81, 0xec, 0x05, 0x79, 0x9d, 0xc4, 0xce, 0x26, - 0x4e, 0x4c, 0x27, 0x0b, 0x0a, 0x04, 0x50, 0x4d, 0x4f, 0xb9, 0xa7, 0xd7, 0x3d, 0xdd, 0x95, 0xee, - 0x6a, 0xaf, 0x26, 0x12, 0x0f, 0x08, 0xc4, 0x4f, 0xe0, 0x81, 0x37, 0x7e, 0x00, 0x12, 0x12, 0x42, - 0x3c, 0xf2, 0xc4, 0xe5, 0x11, 0xf1, 0x07, 0x40, 0x79, 0x41, 0xe2, 0x57, 0xa0, 0xba, 0xf4, 0x75, - 0x7a, 0xc6, 0x5e, 0x9c, 0xcc, 0x02, 0x2f, 0x76, 0xd7, 0xa9, 0x53, 0xe7, 0x9c, 0x3a, 0x75, 0x6e, - 0x75, 0x6a, 0xe0, 0x4a, 0x40, 0xa8, 0x1f, 0x92, 0xe0, 0x90, 0x04, 0xeb, 0xe2, 0xd3, 0x61, 0x7e, - 0x30, 0xcc, 0x7c, 0x76, 0x68, 0xe0, 0x33, 0x1f, 0x41, 0x0a, 0xd1, 0x1f, 0xda, 0x0e, 0xeb, 0x47, - 0xdd, 0x8e, 0xe5, 0x0f, 0xd6, 0x71, 0x60, 0xfb, 0x34, 0xf0, 0x3f, 0x17, 0x1f, 0xef, 0x5a, 0xbd, - 0xf5, 0xc3, 0x8d, 0x75, 0x7a, 0x60, 0xaf, 0x63, 0xea, 0x84, 0xeb, 0x98, 0x52, 0xd7, 0xb1, 0x30, - 0x73, 0x7c, 0x6f, 0xfd, 0xf0, 0x06, 0x76, 0x69, 0x1f, 0xdf, 0x58, 0xb7, 0x89, 0x47, 0x02, 0xcc, - 0x48, 0x4f, 0x52, 0xd6, 0x2f, 0xd8, 0xbe, 0x6f, 0xbb, 0x64, 0x5d, 0x8c, 0xba, 0xd1, 0xfe, 0x3a, - 0x19, 0x50, 0xa6, 0xd8, 0x1a, 0xff, 0x9c, 0x87, 0xc5, 0x5d, 0xec, 0x39, 0xfb, 0x24, 0x64, 0x26, - 0x79, 0x11, 0x91, 0x90, 0xa1, 0xe7, 0x50, 0xe7, 0xc2, 0x68, 0x95, 0xb5, 0xca, 0xd5, 0xf6, 0xc6, - 0x4e, 0x27, 0x95, 0xa6, 0x13, 0x4b, 0x23, 0x3e, 0x7e, 0x68, 0xf5, 0x3a, 0x87, 0x1b, 0x1d, 0x7a, - 0x60, 0x77, 0xb8, 0x34, 0x9d, 0x8c, 0x34, 0x9d, 0x58, 0x9a, 0x8e, 0x99, 0x6c, 0xcb, 0x14, 0x54, - 0x91, 0x0e, 0xcd, 0x80, 0x1c, 0x3a, 0xa1, 0xe3, 0x7b, 0x5a, 0x75, 0xad, 0x72, 0xb5, 0x65, 0x26, - 0x63, 0xa4, 0xc1, 0x9c, 0xe7, 0x6f, 0x61, 0xab, 0x4f, 0xb4, 0xda, 0x5a, 0xe5, 0x6a, 0xd3, 0x8c, - 0x87, 0x68, 0x0d, 0xda, 0x98, 0xd2, 0x87, 0xb8, 0x4b, 0xdc, 0x07, 0x64, 0xa8, 0xd5, 0xc5, 0xc2, - 0x2c, 0x88, 0xaf, 0xc5, 0x94, 0x3e, 0xc2, 0x03, 0xa2, 0xcd, 0x8a, 0xd9, 0x78, 0x88, 0x2e, 0x42, - 0xcb, 0xc3, 0x03, 0x12, 0x52, 0x6c, 0x11, 0xad, 0x29, 0xe6, 0x52, 0x00, 0xfa, 0x11, 0x2c, 0x67, - 0x04, 0x7f, 0xe2, 0x47, 0x81, 0x45, 0x34, 0x10, 0x5b, 0x7f, 0x7c, 0xb2, 0xad, 0x6f, 0x16, 0xc9, - 0x9a, 0xa3, 0x9c, 0xd0, 0x0f, 0x60, 0x56, 0x9c, 0xbc, 0xd6, 0x5e, 0xab, 0xbd, 0x56, 0x6d, 0x4b, - 0xb2, 0xc8, 0x83, 0x39, 0xea, 0x46, 0xb6, 0xe3, 0x85, 0xda, 0xbc, 0xe0, 0xf0, 0xf4, 0x64, 0x1c, - 0xb6, 0x7c, 0x6f, 0xdf, 0xb1, 0x77, 0xb1, 0x87, 0x6d, 0x32, 0x20, 0x1e, 0xdb, 0x13, 0xc4, 0xcd, - 0x98, 0x09, 0x7a, 0x09, 0x4b, 0x07, 0x51, 0xc8, 0xfc, 0x81, 0xf3, 0x92, 0x3c, 0xa6, 0x7c, 0x6d, - 0xa8, 0x9d, 0x12, 0xda, 0x7c, 0x74, 0x32, 0xc6, 0x0f, 0x0a, 0x54, 0xcd, 0x11, 0x3e, 0xdc, 0x48, - 0x0e, 0xa2, 0x2e, 0xf9, 0x36, 0x09, 0x84, 0x75, 0x2d, 0x48, 0x23, 0xc9, 0x80, 0xa4, 0x19, 0x39, - 0x6a, 0x14, 0x6a, 0x8b, 0x6b, 0x35, 0x69, 0x46, 0x09, 0x08, 0x5d, 0x85, 0xc5, 0x43, 0x12, 0x38, - 0xfb, 0xc3, 0x27, 0x8e, 0xed, 0x61, 0x16, 0x05, 0x44, 0x5b, 0x12, 0xa6, 0x58, 0x04, 0xa3, 0x01, - 0x9c, 0xea, 0x13, 0x77, 0xc0, 0x55, 0xbe, 0x15, 0x90, 0x5e, 0xa8, 0x2d, 0x0b, 0xfd, 0x6e, 0x9f, - 0xfc, 0x04, 0x05, 0x39, 0x33, 0x4f, 0x9d, 0x0b, 0xe6, 0xf9, 0xa6, 0xf2, 0x14, 0xe9, 0x23, 0x48, - 0x0a, 0x56, 0x00, 0xa3, 0x2b, 0xb0, 0xc0, 0x02, 0x6c, 0x1d, 0x38, 0x9e, 0xbd, 0x4b, 0x58, 0xdf, - 0xef, 0x69, 0xa7, 0x85, 0x26, 0x0a, 0x50, 0x64, 0x01, 0x22, 0x1e, 0xee, 0xba, 0xa4, 0x27, 0x6d, - 0xf1, 0xe9, 0x90, 0x92, 0x50, 0x3b, 0x23, 0x76, 0x71, 0xb3, 0x93, 0x89, 0x50, 0x85, 0x00, 0xd1, - 0xb9, 0x3b, 0xb2, 0xea, 0xae, 0xc7, 0x82, 0xa1, 0x59, 0x42, 0x0e, 0x1d, 0x40, 0x9b, 0xef, 0x23, - 0x36, 0x85, 0xb3, 0xc2, 0x14, 0xee, 0x9f, 0x4c, 0x47, 0x3b, 0x29, 0x41, 0x33, 0x4b, 0x1d, 0x75, - 0x00, 0xf5, 0x71, 0xb8, 0x1b, 0xb9, 0xcc, 0xa1, 0x2e, 0x91, 0x62, 0x84, 0xda, 0x8a, 0x50, 0x53, - 0xc9, 0x0c, 0x7a, 0x00, 0x10, 0x90, 0xfd, 0x18, 0xef, 0x9c, 0xd8, 0xf9, 0xf5, 0x49, 0x3b, 0x37, - 0x13, 0x6c, 0xb9, 0xe3, 0xcc, 0x72, 0xce, 0x9c, 0x6f, 0x83, 0x58, 0x4c, 0x79, 0xbb, 0x70, 0x6b, - 0x4d, 0x98, 0x58, 0xc9, 0x0c, 0xb7, 0x45, 0x05, 0x15, 0x41, 0xeb, 0xbc, 0xb4, 0xd6, 0x0c, 0x48, - 0xbf, 0x0b, 0xe7, 0xc6, 0xa8, 0x1a, 0x2d, 0x41, 0xed, 0x80, 0x0c, 0x45, 0x88, 0x6e, 0x99, 0xfc, - 0x13, 0x9d, 0x81, 0xd9, 0x43, 0xec, 0x46, 0x44, 0x04, 0xd5, 0xa6, 0x29, 0x07, 0xb7, 0xab, 0x5f, - 0xaf, 0xe8, 0x3f, 0xab, 0xc0, 0x62, 0x41, 0xf0, 0x92, 0xf5, 0xdf, 0xcf, 0xae, 0x7f, 0x0d, 0x66, - 0xbc, 0xff, 0x14, 0x07, 0x36, 0x61, 0x19, 0x41, 0x8c, 0xbf, 0x56, 0x40, 0x2b, 0x68, 0xf4, 0x3b, - 0x0e, 0xeb, 0xdf, 0x73, 0x5c, 0x12, 0xa2, 0x5b, 0x30, 0x17, 0x48, 0x98, 0x4a, 0x3c, 0x17, 0x26, - 0x1c, 0xc4, 0xce, 0x8c, 0x19, 0x63, 0xa3, 0x8f, 0xa1, 0x39, 0x20, 0x0c, 0xf7, 0x30, 0xc3, 0x4a, - 0xf6, 0xb5, 0xb2, 0x95, 0x9c, 0xcb, 0xae, 0xc2, 0xdb, 0x99, 0x31, 0x93, 0x35, 0xe8, 0x3d, 0x98, - 0xb5, 0xfa, 0x91, 0x77, 0x20, 0x52, 0x4e, 0x7b, 0xe3, 0xd2, 0xb8, 0xc5, 0x5b, 0x1c, 0x69, 0x67, - 0xc6, 0x94, 0xd8, 0x9f, 0x34, 0xa0, 0x4e, 0x71, 0xc0, 0x8c, 0x7b, 0x70, 0xa6, 0x8c, 0x05, 0xcf, - 0x73, 0x56, 0x9f, 0x58, 0x07, 0x61, 0x34, 0x50, 0x6a, 0x4e, 0xc6, 0x08, 0x41, 0x3d, 0x74, 0x5e, - 0x4a, 0x55, 0xd7, 0x4c, 0xf1, 0x6d, 0xbc, 0x0d, 0xcb, 0x23, 0xdc, 0xf8, 0xa1, 0x4a, 0xd9, 0x38, - 0x85, 0x79, 0xc5, 0xda, 0x88, 0xe0, 0xec, 0x53, 0xa1, 0x8b, 0x24, 0xd8, 0x4f, 0x23, 0x73, 0x1b, - 0x3b, 0xb0, 0x52, 0x64, 0x1b, 0x52, 0xdf, 0x0b, 0x09, 0x37, 0x7d, 0x11, 0x1d, 0x1d, 0xd2, 0x4b, - 0x67, 0x85, 0x14, 0x4d, 0xb3, 0x64, 0xc6, 0xf8, 0x71, 0x15, 0x56, 0x4c, 0x12, 0xfa, 0xee, 0x21, - 0x89, 0x43, 0xd7, 0x74, 0x8a, 0x8f, 0xef, 0x41, 0x0d, 0x53, 0xaa, 0xcc, 0xe4, 0xfe, 0x6b, 0x4b, - 0xef, 0x26, 0xa7, 0x8a, 0xde, 0x81, 0x65, 0x3c, 0xe8, 0x3a, 0x76, 0xe4, 0x47, 0x61, 0xbc, 0x2d, - 0x61, 0x54, 0x2d, 0x73, 0x74, 0xc2, 0xb0, 0xe0, 0xdc, 0x88, 0x0a, 0x94, 0x3a, 0xb3, 0x25, 0x52, - 0xa5, 0x50, 0x22, 0x95, 0x32, 0xa9, 0x8e, 0x63, 0xf2, 0xc7, 0x0a, 0x2c, 0xa5, 0xae, 0xa3, 0xc8, - 0x5f, 0x84, 0xd6, 0x40, 0xc1, 0x42, 0xad, 0x22, 0xe2, 0x53, 0x0a, 0xc8, 0x57, 0x4b, 0xd5, 0x62, - 0xb5, 0xb4, 0x02, 0x0d, 0x59, 0xcc, 0xaa, 0x8d, 0xa9, 0x51, 0x4e, 0xe4, 0x7a, 0x41, 0xe4, 0x55, - 0x80, 0x30, 0x89, 0x5f, 0x5a, 0x43, 0xcc, 0x66, 0x20, 0xc8, 0x80, 0x79, 0x99, 0x5b, 0x4d, 0x12, - 0x46, 0x2e, 0xd3, 0xe6, 0x04, 0x46, 0x0e, 0x66, 0xf8, 0xb0, 0xf8, 0xd0, 0xe1, 0x7b, 0xd8, 0x0f, - 0xa7, 0x63, 0xec, 0xef, 0x43, 0x9d, 0x33, 0xe3, 0x1b, 0xeb, 0x06, 0xd8, 0xb3, 0xfa, 0x24, 0xd6, - 0x55, 0x32, 0xe6, 0x6e, 0xcc, 0xb0, 0x1d, 0x6a, 0x55, 0x01, 0x17, 0xdf, 0xc6, 0xef, 0xaa, 0x52, - 0xd2, 0x4d, 0x4a, 0xc3, 0xaf, 0xbe, 0xa0, 0x2e, 0x4f, 0xf1, 0xb5, 0xd1, 0x14, 0x5f, 0x10, 0xf9, - 0xcb, 0xa4, 0xf8, 0xd7, 0x94, 0xa6, 0x8c, 0x08, 0xe6, 0x36, 0x29, 0xe5, 0x82, 0xa0, 0x1b, 0x50, - 0xc7, 0x94, 0x4a, 0x85, 0x17, 0x22, 0xb2, 0x42, 0xe1, 0xff, 0x95, 0x48, 0x02, 0x55, 0xbf, 0x05, - 0xad, 0x04, 0x74, 0x14, 0xdb, 0x56, 0x96, 0xed, 0x1a, 0x80, 0xac, 0x61, 0xef, 0x7b, 0xfb, 0x3e, - 0x3f, 0x52, 0x6e, 0xec, 0x6a, 0xa9, 0xf8, 0x36, 0x6e, 0xc7, 0x18, 0x42, 0xb6, 0x77, 0x60, 0xd6, - 0x61, 0x64, 0x10, 0x0b, 0xb7, 0x92, 0x15, 0x2e, 0x25, 0x64, 0x4a, 0x24, 0xe3, 0x4f, 0x4d, 0x38, - 0xcf, 0x4f, 0xec, 0x89, 0x70, 0x93, 0x4d, 0x4a, 0xef, 0x10, 0x86, 0x1d, 0x37, 0xfc, 0x56, 0x44, - 0x82, 0xe1, 0x1b, 0x36, 0x0c, 0x1b, 0x1a, 0xd2, 0xcb, 0x54, 0xbc, 0x7b, 0xed, 0xd7, 0x19, 0x45, - 0x3e, 0xbd, 0xc3, 0xd4, 0xde, 0xcc, 0x1d, 0xa6, 0xec, 0x4e, 0x51, 0x9f, 0xd2, 0x9d, 0x62, 0xfc, - 0xb5, 0x32, 0x73, 0x59, 0x6d, 0xe4, 0x2f, 0xab, 0x25, 0xa5, 0xfa, 0xdc, 0x71, 0x4b, 0xf5, 0x66, - 0x69, 0xa9, 0x3e, 0x28, 0xf5, 0xe3, 0x96, 0x50, 0xf7, 0x47, 0x59, 0x0b, 0x1c, 0x6b, 0x6b, 0x27, - 0x29, 0xda, 0xe1, 0x8d, 0x16, 0xed, 0x9f, 0xe5, 0x8a, 0x70, 0x79, 0x0d, 0x7e, 0xef, 0x78, 0x7b, - 0x9a, 0x50, 0x8e, 0xff, 0xcf, 0x15, 0xcf, 0x3f, 0x15, 0x35, 0x13, 0xf5, 0x53, 0x1d, 0x24, 0x09, - 0x9d, 0xe7, 0x21, 0x9e, 0x5a, 0x55, 0xd0, 0xe2, 0xdf, 0xe8, 0x3a, 0xd4, 0xb9, 0x92, 0x55, 0x51, - 0x7b, 0x2e, 0xab, 0x4f, 0x7e, 0x12, 0x9b, 0x94, 0x3e, 0xa1, 0xc4, 0x32, 0x05, 0x12, 0xba, 0x0d, - 0xad, 0xc4, 0xf0, 0x95, 0x67, 0x5d, 0xcc, 0xae, 0x48, 0xfc, 0x24, 0x5e, 0x96, 0xa2, 0xf3, 0xb5, - 0x3d, 0x27, 0x20, 0x96, 0x28, 0xf9, 0x66, 0x47, 0xd7, 0xde, 0x89, 0x27, 0x93, 0xb5, 0x09, 0x3a, - 0xba, 0x01, 0x0d, 0xd9, 0x37, 0x10, 0x1e, 0xd4, 0xde, 0x38, 0x3f, 0x1a, 0x4c, 0xe3, 0x55, 0x0a, - 0xd1, 0xf8, 0x43, 0x05, 0xde, 0x4a, 0x0d, 0x22, 0xf6, 0xa6, 0xb8, 0xea, 0xfe, 0xea, 0x33, 0xee, - 0x15, 0x58, 0x10, 0x65, 0x7e, 0xda, 0x3e, 0x90, 0x9d, 0xac, 0x02, 0xd4, 0xf8, 0x6d, 0x05, 0x2e, - 0x8f, 0xee, 0x63, 0xab, 0x8f, 0x03, 0x96, 0x1c, 0xef, 0x34, 0xf6, 0x12, 0x27, 0xbc, 0x6a, 0x9a, - 0xf0, 0x72, 0xfb, 0xab, 0xe5, 0xf7, 0x67, 0xfc, 0xbe, 0x0a, 0xed, 0x8c, 0x01, 0x95, 0x25, 0x4c, - 0x5e, 0xf0, 0x09, 0xbb, 0x15, 0x17, 0x3b, 0x91, 0x14, 0x5a, 0x66, 0x06, 0x82, 0x0e, 0x00, 0x28, - 0x0e, 0xf0, 0x80, 0x30, 0x12, 0xf0, 0x48, 0xce, 0x3d, 0xfe, 0xc1, 0xc9, 0xa3, 0xcb, 0x5e, 0x4c, - 0xd3, 0xcc, 0x90, 0xe7, 0x15, 0xab, 0x60, 0x1d, 0xaa, 0xf8, 0xad, 0x46, 0xe8, 0x0b, 0x58, 0xd8, - 0x77, 0x5c, 0xb2, 0x97, 0x0a, 0xd2, 0x10, 0x82, 0x3c, 0x3e, 0xb9, 0x20, 0xf7, 0xb2, 0x74, 0xcd, - 0x02, 0x1b, 0xe3, 0x1a, 0x2c, 0x15, 0xfd, 0x89, 0x0b, 0xe9, 0x0c, 0xb0, 0x9d, 0x68, 0x4b, 0x8d, - 0x0c, 0x04, 0x4b, 0x45, 0xff, 0x31, 0xfe, 0x56, 0x85, 0xb3, 0x09, 0xb9, 0x4d, 0xcf, 0xf3, 0x23, - 0xcf, 0x12, 0xad, 0xb8, 0xd2, 0xb3, 0x38, 0x03, 0xb3, 0xcc, 0x61, 0x6e, 0x52, 0xf8, 0x88, 0x01, - 0xcf, 0x5d, 0xcc, 0xf7, 0x5d, 0xe6, 0x50, 0x75, 0xc0, 0xf1, 0x50, 0x9e, 0xfd, 0x8b, 0xc8, 0x09, - 0x48, 0x4f, 0x44, 0x82, 0xa6, 0x99, 0x8c, 0xf9, 0x1c, 0xaf, 0x6a, 0x44, 0x19, 0x2f, 0x95, 0x99, - 0x8c, 0x85, 0xdd, 0xfb, 0xae, 0x4b, 0x2c, 0xae, 0x8e, 0x4c, 0xa1, 0x5f, 0x80, 0x8a, 0x0b, 0x04, - 0x0b, 0x1c, 0xcf, 0x56, 0x65, 0xbe, 0x1a, 0x71, 0x39, 0x71, 0x10, 0xe0, 0xa1, 0xd6, 0x14, 0x0a, - 0x90, 0x03, 0xf4, 0x21, 0xd4, 0x06, 0x98, 0xaa, 0x44, 0x77, 0x2d, 0x17, 0x1d, 0xca, 0x34, 0xd0, - 0xd9, 0xc5, 0x54, 0x66, 0x02, 0xbe, 0x4c, 0x7f, 0x1f, 0x9a, 0x31, 0xe0, 0x4b, 0x95, 0x84, 0x9f, - 0xc3, 0xa9, 0x5c, 0xf0, 0x41, 0xcf, 0x60, 0x25, 0xb5, 0xa8, 0x2c, 0x43, 0x55, 0x04, 0xbe, 0x75, - 0xa4, 0x64, 0xe6, 0x18, 0x02, 0xc6, 0x0b, 0x58, 0xe6, 0x26, 0x23, 0x1c, 0x7f, 0x4a, 0x57, 0x9b, - 0x0f, 0xa0, 0x95, 0xb0, 0x2c, 0xb5, 0x19, 0x1d, 0x9a, 0x87, 0x71, 0x8b, 0x54, 0xde, 0x6d, 0x92, - 0xb1, 0xb1, 0x09, 0x28, 0x2b, 0xaf, 0xca, 0x40, 0xd7, 0xf3, 0x45, 0xf1, 0xd9, 0x62, 0xba, 0x11, - 0xe8, 0x71, 0x4d, 0xfc, 0x9b, 0x2a, 0x2c, 0x6e, 0x3b, 0xa2, 0xcb, 0x31, 0xa5, 0x20, 0x77, 0x0d, - 0x96, 0xc2, 0xa8, 0x3b, 0xf0, 0x7b, 0x91, 0x4b, 0x54, 0x51, 0xa0, 0x32, 0xfd, 0x08, 0x7c, 0x52, - 0xf0, 0xe3, 0xca, 0xa2, 0x98, 0xf5, 0xd5, 0x0d, 0x57, 0x7c, 0xa3, 0x0f, 0xe1, 0xfc, 0x23, 0xf2, - 0x85, 0xda, 0xcf, 0xb6, 0xeb, 0x77, 0xbb, 0x8e, 0x67, 0xc7, 0x4c, 0x66, 0x05, 0x93, 0xf1, 0x08, - 0x65, 0xa5, 0x62, 0xa3, 0xb4, 0x54, 0x34, 0x7e, 0x52, 0x81, 0xa5, 0x54, 0x6b, 0x4a, 0xef, 0xb7, - 0xa4, 0x7f, 0x48, 0xad, 0x5f, 0xce, 0x6a, 0xbd, 0x88, 0xfa, 0xef, 0xbb, 0xc6, 0x7c, 0xd6, 0x35, - 0xfe, 0x51, 0x81, 0xb3, 0xdb, 0x0e, 0x8b, 0x83, 0x92, 0xf3, 0xdf, 0x76, 0x82, 0x25, 0xfa, 0xae, - 0x97, 0xeb, 0xbb, 0x03, 0x2b, 0xc5, 0x8d, 0x2a, 0xa5, 0x9f, 0x81, 0x59, 0x7e, 0xf2, 0x71, 0x3f, - 0x40, 0x0e, 0x8c, 0x5f, 0x37, 0xe0, 0xd2, 0x67, 0xb4, 0x87, 0x59, 0xd2, 0xcf, 0xb9, 0xe7, 0x07, - 0x7b, 0x7c, 0x6a, 0x3a, 0x1a, 0x2a, 0xbc, 0x90, 0x55, 0x27, 0xbe, 0x90, 0xd5, 0x26, 0xbc, 0x90, - 0xd5, 0x8f, 0xf5, 0x42, 0x36, 0x3b, 0xb5, 0x17, 0xb2, 0xd1, 0x3b, 0x52, 0xa3, 0xf4, 0x8e, 0xf4, - 0x2c, 0x77, 0x8f, 0x98, 0x13, 0x2e, 0xf1, 0x8d, 0xac, 0x4b, 0x4c, 0x3c, 0x9d, 0x89, 0xad, 0xfd, - 0xc2, 0xc3, 0x52, 0xf3, 0xc8, 0x87, 0xa5, 0xd6, 0xe8, 0xc3, 0x52, 0xf9, 0xdb, 0x04, 0x8c, 0x7d, - 0x9b, 0xb8, 0x02, 0x0b, 0xe1, 0xd0, 0xb3, 0x48, 0x2f, 0xe9, 0xf2, 0xb5, 0xe5, 0xb6, 0xf3, 0xd0, - 0x9c, 0xb5, 0xcf, 0x17, 0xac, 0x3d, 0xb1, 0xd4, 0x53, 0x19, 0x4b, 0xfd, 0xcf, 0xb9, 0xd2, 0xac, - 0xc1, 0xea, 0xb8, 0x33, 0x91, 0xae, 0x66, 0xfc, 0xb2, 0x0a, 0xfa, 0x0e, 0x0e, 0xef, 0x04, 0x43, - 0x29, 0xed, 0x56, 0x1f, 0x7b, 0x36, 0xdf, 0xfc, 0x34, 0x3c, 0xaa, 0xd4, 0xee, 0xab, 0xd3, 0xb4, - 0xfb, 0x82, 0x01, 0xd4, 0xca, 0x0c, 0xc0, 0xf8, 0x08, 0x2e, 0x94, 0xaa, 0x48, 0x45, 0xab, 0x55, - 0x80, 0x3e, 0x0e, 0x15, 0x54, 0xf5, 0xe4, 0x33, 0x90, 0x8d, 0x5f, 0xb5, 0x61, 0x39, 0xbd, 0x88, - 0xf0, 0xbf, 0x8e, 0x45, 0xd0, 0x63, 0x58, 0xda, 0x56, 0xbf, 0x23, 0x88, 0xfb, 0xc7, 0x68, 0xd2, - 0x83, 0x8c, 0x7e, 0xb1, 0x7c, 0x52, 0x9d, 0xe3, 0x0c, 0xb2, 0xe0, 0x7c, 0x91, 0x60, 0xfa, 0xf6, - 0xf3, 0xff, 0x13, 0x28, 0x27, 0x58, 0x47, 0xb1, 0xb8, 0x5a, 0x41, 0xcf, 0x60, 0x21, 0xff, 0x42, - 0x81, 0x72, 0x95, 0x59, 0xe9, 0xa3, 0x89, 0x6e, 0x4c, 0x42, 0x49, 0xe4, 0x7f, 0xce, 0x7d, 0x26, - 0xd7, 0xae, 0x47, 0x46, 0xbe, 0x49, 0x51, 0xf6, 0x9c, 0xa1, 0xff, 0xdf, 0x44, 0x9c, 0x84, 0xfa, - 0x07, 0xd0, 0x8c, 0xdb, 0xdb, 0x79, 0x35, 0x17, 0x9a, 0xde, 0xfa, 0x52, 0x9e, 0xde, 0x7e, 0x68, - 0xcc, 0xa0, 0x8f, 0xe5, 0xe2, 0x4d, 0x4a, 0x4b, 0x16, 0x67, 0x9a, 0xba, 0xfa, 0xe9, 0x92, 0x46, - 0xaa, 0x31, 0x83, 0xbe, 0x09, 0x6d, 0xfe, 0xb5, 0xa7, 0x5e, 0xf0, 0x57, 0x3a, 0xf2, 0x07, 0x23, - 0x9d, 0xf8, 0x07, 0x23, 0x9d, 0xbb, 0x03, 0xca, 0x86, 0x7a, 0x49, 0xa7, 0x53, 0x11, 0x78, 0x0e, - 0xa7, 0xb6, 0x09, 0x4b, 0x1b, 0x13, 0xe8, 0xf2, 0xb1, 0xda, 0x37, 0xba, 0x51, 0x44, 0x1b, 0xed, - 0x6d, 0x18, 0x33, 0xe8, 0xe7, 0x15, 0x38, 0xbd, 0x4d, 0x58, 0xf1, 0xaa, 0x8f, 0xde, 0x2d, 0x67, - 0x32, 0xa6, 0x25, 0xa0, 0x3f, 0x3a, 0x69, 0x74, 0xc8, 0x93, 0x35, 0x66, 0xd0, 0x2f, 0x2a, 0x70, - 0x2e, 0x23, 0x58, 0xf6, 0xee, 0x8e, 0x6e, 0x4c, 0x16, 0xae, 0xe4, 0x9e, 0xaf, 0x7f, 0x7a, 0xc2, - 0x1f, 0x66, 0x64, 0x48, 0x1a, 0x33, 0x68, 0x4f, 0x9c, 0x49, 0x5a, 0xaa, 0xa3, 0x4b, 0xa5, 0x35, - 0x79, 0xc2, 0x7d, 0x75, 0xdc, 0x74, 0x72, 0x0e, 0x9f, 0x42, 0x7b, 0x9b, 0xb0, 0xb8, 0xae, 0xcc, - 0x5b, 0x5a, 0xa1, 0x9c, 0xcf, 0xbb, 0x6a, 0xb1, 0x14, 0x15, 0x16, 0xb3, 0x2c, 0x69, 0x65, 0xea, - 0xab, 0xbc, 0xaf, 0x96, 0x16, 0x99, 0x79, 0x8b, 0x29, 0x2f, 0xcf, 0x8c, 0x19, 0xf4, 0x02, 0x56, - 0xca, 0xf3, 0x0a, 0x7a, 0xfb, 0xd8, 0xf5, 0x80, 0x7e, 0xed, 0x38, 0xa8, 0x09, 0xcb, 0x3e, 0x9c, - 0x2e, 0x09, 0xc2, 0xe8, 0x4a, 0x4e, 0xab, 0x63, 0x13, 0x99, 0xfe, 0xb5, 0x23, 0xf1, 0x62, 0x4e, - 0x9f, 0x6c, 0xfe, 0xf9, 0xd5, 0x6a, 0xe5, 0x2f, 0xaf, 0x56, 0x2b, 0x7f, 0x7f, 0xb5, 0x5a, 0xf9, - 0xee, 0xcd, 0x23, 0x7e, 0x2a, 0x96, 0xf9, 0xf5, 0x19, 0xa6, 0x8e, 0xe5, 0x3a, 0xc4, 0x63, 0xdd, - 0x86, 0xf0, 0xec, 0x9b, 0xff, 0x0a, 0x00, 0x00, 0xff, 0xff, 0x13, 0x2f, 0x30, 0x1e, 0x9c, 0x26, - 0x00, 0x00, + // 2346 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x1a, 0xdb, 0x6e, 0x1c, 0x49, + 0xd5, 0x73, 0xf1, 0x78, 0xe6, 0x8c, 0xe3, 0x4b, 0x25, 0x71, 0x3a, 0x93, 0xc4, 0xf2, 0x36, 0x24, + 0x64, 0x93, 0xdd, 0xb1, 0xe2, 0x68, 0x37, 0x90, 0xbd, 0x20, 0xaf, 0x93, 0xd8, 0xd9, 0xc4, 0x89, + 0xe9, 0x64, 0x41, 0x81, 0x00, 0xaa, 0xe9, 0x29, 0xf7, 0xf4, 0xba, 0x2f, 0x95, 0xee, 0x6a, 0xaf, + 0x26, 0x12, 0x0f, 0x08, 0xc4, 0x27, 0xf0, 0xc0, 0x1b, 0x1f, 0x80, 0x84, 0x84, 0x10, 0x8f, 0x3c, + 0x21, 0x78, 0x44, 0xfc, 0x00, 0x28, 0x2f, 0x48, 0x7c, 0x05, 0xaa, 0x4b, 0x5f, 0xa7, 0x67, 0xec, + 0xc5, 0xc9, 0x2c, 0xf0, 0x62, 0x77, 0x9d, 0x3a, 0x75, 0xce, 0xa9, 0x53, 0xe7, 0x5a, 0x35, 0x70, + 0x25, 0x20, 0xd4, 0x0f, 0x49, 0x70, 0x48, 0x82, 0x75, 0xf1, 0x69, 0x33, 0x3f, 0x18, 0x66, 0x3e, + 0xbb, 0x34, 0xf0, 0x99, 0x8f, 0x20, 0x85, 0x74, 0x1e, 0x5a, 0x36, 0x1b, 0x44, 0xbd, 0xae, 0xe9, + 0xbb, 0xeb, 0x38, 0xb0, 0x7c, 0x1a, 0xf8, 0x9f, 0x8b, 0x8f, 0x77, 0xcd, 0xfe, 0xfa, 0xe1, 0xc6, + 0x3a, 0x3d, 0xb0, 0xd6, 0x31, 0xb5, 0xc3, 0x75, 0x4c, 0xa9, 0x63, 0x9b, 0x98, 0xd9, 0xbe, 0xb7, + 0x7e, 0x78, 0x03, 0x3b, 0x74, 0x80, 0x6f, 0xac, 0x5b, 0xc4, 0x23, 0x01, 0x66, 0xa4, 0x2f, 0x29, + 0x77, 0x2e, 0x58, 0xbe, 0x6f, 0x39, 0x64, 0x5d, 0x8c, 0x7a, 0xd1, 0xfe, 0x3a, 0x71, 0x29, 0x53, + 0x6c, 0xf5, 0x7f, 0xcd, 0xc3, 0xe2, 0x2e, 0xf6, 0xec, 0x7d, 0x12, 0x32, 0x83, 0xbc, 0x88, 0x48, + 0xc8, 0xd0, 0x73, 0xa8, 0x73, 0x61, 0xb4, 0xca, 0x5a, 0xe5, 0x6a, 0x7b, 0x63, 0xa7, 0x9b, 0x4a, + 0xd3, 0x8d, 0xa5, 0x11, 0x1f, 0x3f, 0x36, 0xfb, 0xdd, 0xc3, 0x8d, 0x2e, 0x3d, 0xb0, 0xba, 0x5c, + 0x9a, 0x6e, 0x46, 0x9a, 0x6e, 0x2c, 0x4d, 0xd7, 0x48, 0xb6, 0x65, 0x08, 0xaa, 0xa8, 0x03, 0xcd, + 0x80, 0x1c, 0xda, 0xa1, 0xed, 0x7b, 0x5a, 0x75, 0xad, 0x72, 0xb5, 0x65, 0x24, 0x63, 0xa4, 0xc1, + 0x9c, 0xe7, 0x6f, 0x61, 0x73, 0x40, 0xb4, 0xda, 0x5a, 0xe5, 0x6a, 0xd3, 0x88, 0x87, 0x68, 0x0d, + 0xda, 0x98, 0xd2, 0x87, 0xb8, 0x47, 0x9c, 0x07, 0x64, 0xa8, 0xd5, 0xc5, 0xc2, 0x2c, 0x88, 0xaf, + 0xc5, 0x94, 0x3e, 0xc2, 0x2e, 0xd1, 0x66, 0xc5, 0x6c, 0x3c, 0x44, 0x17, 0xa1, 0xe5, 0x61, 0x97, + 0x84, 0x14, 0x9b, 0x44, 0x6b, 0x8a, 0xb9, 0x14, 0x80, 0x7e, 0x02, 0xcb, 0x19, 0xc1, 0x9f, 0xf8, + 0x51, 0x60, 0x12, 0x0d, 0xc4, 0xd6, 0x1f, 0x9f, 0x6c, 0xeb, 0x9b, 0x45, 0xb2, 0xc6, 0x28, 0x27, + 0xf4, 0x23, 0x98, 0x15, 0x27, 0xaf, 0xb5, 0xd7, 0x6a, 0xaf, 0x55, 0xdb, 0x92, 0x2c, 0xf2, 0x60, + 0x8e, 0x3a, 0x91, 0x65, 0x7b, 0xa1, 0x36, 0x2f, 0x38, 0x3c, 0x3d, 0x19, 0x87, 0x2d, 0xdf, 0xdb, + 0xb7, 0xad, 0x5d, 0xec, 0x61, 0x8b, 0xb8, 0xc4, 0x63, 0x7b, 0x82, 0xb8, 0x11, 0x33, 0x41, 0x2f, + 0x61, 0xe9, 0x20, 0x0a, 0x99, 0xef, 0xda, 0x2f, 0xc9, 0x63, 0xca, 0xd7, 0x86, 0xda, 0x29, 0xa1, + 0xcd, 0x47, 0x27, 0x63, 0xfc, 0xa0, 0x40, 0xd5, 0x18, 0xe1, 0xc3, 0x8d, 0xe4, 0x20, 0xea, 0x91, + 0xef, 0x92, 0x40, 0x58, 0xd7, 0x82, 0x34, 0x92, 0x0c, 0x48, 0x9a, 0x91, 0xad, 0x46, 0xa1, 0xb6, + 0xb8, 0x56, 0x93, 0x66, 0x94, 0x80, 0xd0, 0x55, 0x58, 0x3c, 0x24, 0x81, 0xbd, 0x3f, 0x7c, 0x62, + 0x5b, 0x1e, 0x66, 0x51, 0x40, 0xb4, 0x25, 0x61, 0x8a, 0x45, 0x30, 0x72, 0xe1, 0xd4, 0x80, 0x38, + 0x2e, 0x57, 0xf9, 0x56, 0x40, 0xfa, 0xa1, 0xb6, 0x2c, 0xf4, 0xbb, 0x7d, 0xf2, 0x13, 0x14, 0xe4, + 0x8c, 0x3c, 0x75, 0x2e, 0x98, 0xe7, 0x1b, 0xca, 0x53, 0xa4, 0x8f, 0x20, 0x29, 0x58, 0x01, 0x8c, + 0xae, 0xc0, 0x02, 0x0b, 0xb0, 0x79, 0x60, 0x7b, 0xd6, 0x2e, 0x61, 0x03, 0xbf, 0xaf, 0x9d, 0x16, + 0x9a, 0x28, 0x40, 0x91, 0x09, 0x88, 0x78, 0xb8, 0xe7, 0x90, 0xbe, 0xb4, 0xc5, 0xa7, 0x43, 0x4a, + 0x42, 0xed, 0x8c, 0xd8, 0xc5, 0xcd, 0x6e, 0x26, 0x42, 0x15, 0x02, 0x44, 0xf7, 0xee, 0xc8, 0xaa, + 0xbb, 0x1e, 0x0b, 0x86, 0x46, 0x09, 0x39, 0x74, 0x00, 0x6d, 0xbe, 0x8f, 0xd8, 0x14, 0xce, 0x0a, + 0x53, 0xb8, 0x7f, 0x32, 0x1d, 0xed, 0xa4, 0x04, 0x8d, 0x2c, 0x75, 0xd4, 0x05, 0x34, 0xc0, 0xe1, + 0x6e, 0xe4, 0x30, 0x9b, 0x3a, 0x44, 0x8a, 0x11, 0x6a, 0x2b, 0x42, 0x4d, 0x25, 0x33, 0xe8, 0x01, + 0x40, 0x40, 0xf6, 0x63, 0xbc, 0x73, 0x62, 0xe7, 0xd7, 0x27, 0xed, 0xdc, 0x48, 0xb0, 0xe5, 0x8e, + 0x33, 0xcb, 0x39, 0x73, 0xbe, 0x0d, 0x62, 0x32, 0xe5, 0xed, 0xc2, 0xad, 0x35, 0x61, 0x62, 0x25, + 0x33, 0xdc, 0x16, 0x15, 0x54, 0x04, 0xad, 0xf3, 0xd2, 0x5a, 0x33, 0xa0, 0xce, 0x5d, 0x38, 0x37, + 0x46, 0xd5, 0x68, 0x09, 0x6a, 0x07, 0x64, 0x28, 0x42, 0x74, 0xcb, 0xe0, 0x9f, 0xe8, 0x0c, 0xcc, + 0x1e, 0x62, 0x27, 0x22, 0x22, 0xa8, 0x36, 0x0d, 0x39, 0xb8, 0x5d, 0xfd, 0x66, 0xa5, 0xf3, 0x8b, + 0x0a, 0x2c, 0x16, 0x04, 0x2f, 0x59, 0xff, 0xc3, 0xec, 0xfa, 0xd7, 0x60, 0xc6, 0xfb, 0x4f, 0x71, + 0x60, 0x11, 0x96, 0x11, 0x44, 0xff, 0x5b, 0x05, 0xb4, 0x82, 0x46, 0xbf, 0x67, 0xb3, 0xc1, 0x3d, + 0xdb, 0x21, 0x21, 0xba, 0x05, 0x73, 0x81, 0x84, 0xa9, 0xc4, 0x73, 0x61, 0xc2, 0x41, 0xec, 0xcc, + 0x18, 0x31, 0x36, 0xfa, 0x18, 0x9a, 0x2e, 0x61, 0xb8, 0x8f, 0x19, 0x56, 0xb2, 0xaf, 0x95, 0xad, + 0xe4, 0x5c, 0x76, 0x15, 0xde, 0xce, 0x8c, 0x91, 0xac, 0x41, 0xef, 0xc1, 0xac, 0x39, 0x88, 0xbc, + 0x03, 0x91, 0x72, 0xda, 0x1b, 0x97, 0xc6, 0x2d, 0xde, 0xe2, 0x48, 0x3b, 0x33, 0x86, 0xc4, 0xfe, + 0xa4, 0x01, 0x75, 0x8a, 0x03, 0xa6, 0xdf, 0x83, 0x33, 0x65, 0x2c, 0x78, 0x9e, 0x33, 0x07, 0xc4, + 0x3c, 0x08, 0x23, 0x57, 0xa9, 0x39, 0x19, 0x23, 0x04, 0xf5, 0xd0, 0x7e, 0x29, 0x55, 0x5d, 0x33, + 0xc4, 0xb7, 0xfe, 0x36, 0x2c, 0x8f, 0x70, 0xe3, 0x87, 0x2a, 0x65, 0xe3, 0x14, 0xe6, 0x15, 0x6b, + 0x3d, 0x82, 0xb3, 0x4f, 0x85, 0x2e, 0x92, 0x60, 0x3f, 0x8d, 0xcc, 0xad, 0xef, 0xc0, 0x4a, 0x91, + 0x6d, 0x48, 0x7d, 0x2f, 0x24, 0xdc, 0xf4, 0x45, 0x74, 0xb4, 0x49, 0x3f, 0x9d, 0x15, 0x52, 0x34, + 0x8d, 0x92, 0x19, 0xfd, 0xa7, 0x55, 0x58, 0x31, 0x48, 0xe8, 0x3b, 0x87, 0x24, 0x0e, 0x5d, 0xd3, + 0x29, 0x3e, 0x7e, 0x00, 0x35, 0x4c, 0xa9, 0x32, 0x93, 0xfb, 0xaf, 0x2d, 0xbd, 0x1b, 0x9c, 0x2a, + 0x7a, 0x07, 0x96, 0xb1, 0xdb, 0xb3, 0xad, 0xc8, 0x8f, 0xc2, 0x78, 0x5b, 0xc2, 0xa8, 0x5a, 0xc6, + 0xe8, 0x84, 0x6e, 0xc2, 0xb9, 0x11, 0x15, 0x28, 0x75, 0x66, 0x4b, 0xa4, 0x4a, 0xa1, 0x44, 0x2a, + 0x65, 0x52, 0x1d, 0xc7, 0xe4, 0x55, 0x05, 0x96, 0x52, 0xd7, 0x51, 0xe4, 0x2f, 0x42, 0xcb, 0x55, + 0xb0, 0x50, 0xab, 0x88, 0xf8, 0x94, 0x02, 0xf2, 0xd5, 0x52, 0xb5, 0x58, 0x2d, 0xad, 0x40, 0x43, + 0x16, 0xb3, 0x6a, 0x63, 0x6a, 0x94, 0x13, 0xb9, 0x5e, 0x10, 0x79, 0x15, 0x20, 0x4c, 0xe2, 0x97, + 0xd6, 0x10, 0xb3, 0x19, 0x08, 0xd2, 0x61, 0x5e, 0xe6, 0x56, 0x83, 0x84, 0x91, 0xc3, 0xb4, 0x39, + 0x81, 0x91, 0x83, 0x09, 0x6f, 0xf2, 0x5d, 0x17, 0x7b, 0xfd, 0x50, 0x6b, 0x0a, 0x91, 0x93, 0xb1, + 0xee, 0xc3, 0xe2, 0x43, 0x9b, 0xef, 0x6f, 0x3f, 0x9c, 0x8e, 0x23, 0xbc, 0x0f, 0x75, 0xce, 0x8c, + 0x0b, 0xd5, 0x0b, 0xb0, 0x67, 0x0e, 0x48, 0xac, 0xc7, 0x64, 0xcc, 0x5d, 0x9c, 0x61, 0x2b, 0xd4, + 0xaa, 0x02, 0x2e, 0xbe, 0xf5, 0x3f, 0x54, 0xa5, 0xa4, 0x9b, 0x94, 0x86, 0x5f, 0x7d, 0xb1, 0x5d, + 0x9e, 0xfe, 0x6b, 0xa3, 0xe9, 0xbf, 0x20, 0xf2, 0x97, 0x49, 0xff, 0xaf, 0x29, 0x85, 0xe9, 0x11, + 0xcc, 0x6d, 0x52, 0xca, 0x05, 0x41, 0x37, 0xa0, 0x8e, 0x29, 0x95, 0x0a, 0x2f, 0x44, 0x6b, 0x85, + 0xc2, 0xff, 0x2b, 0x91, 0x04, 0x6a, 0xe7, 0x16, 0xb4, 0x12, 0xd0, 0x51, 0x6c, 0x5b, 0x59, 0xb6, + 0x6b, 0x00, 0xb2, 0xbe, 0xbd, 0xef, 0xed, 0xfb, 0xfc, 0x48, 0xb9, 0x23, 0xa8, 0xa5, 0xe2, 0x5b, + 0xbf, 0x1d, 0x63, 0x08, 0xd9, 0xde, 0x81, 0x59, 0x9b, 0x11, 0x37, 0x16, 0x6e, 0x25, 0x2b, 0x5c, + 0x4a, 0xc8, 0x90, 0x48, 0xfa, 0x9f, 0x9b, 0x70, 0x9e, 0x9f, 0xd8, 0x13, 0xe1, 0x42, 0x9b, 0x94, + 0xde, 0x21, 0x0c, 0xdb, 0x4e, 0xf8, 0x9d, 0x88, 0x04, 0xc3, 0x37, 0x6c, 0x18, 0x16, 0x34, 0xa4, + 0x07, 0xaa, 0x58, 0xf8, 0xda, 0x5b, 0x1d, 0x45, 0x3e, 0xed, 0x6f, 0x6a, 0x6f, 0xa6, 0xbf, 0x29, + 0xeb, 0x37, 0xea, 0x53, 0xea, 0x37, 0xc6, 0xb7, 0x9c, 0x99, 0x46, 0xb6, 0x91, 0x6f, 0x64, 0x4b, + 0xca, 0xf8, 0xb9, 0xe3, 0x96, 0xf1, 0xcd, 0xd2, 0x32, 0xde, 0x2d, 0xf5, 0xe3, 0x96, 0x50, 0xf7, + 0x47, 0x59, 0x0b, 0x1c, 0x6b, 0x6b, 0x27, 0x29, 0xe8, 0xe1, 0x8d, 0x16, 0xf4, 0x9f, 0xe5, 0x0a, + 0x74, 0xd9, 0x22, 0xbf, 0x77, 0xbc, 0x3d, 0x4d, 0x28, 0xd5, 0xff, 0xef, 0x0a, 0xeb, 0x9f, 0x8b, + 0x7a, 0x8a, 0xfa, 0xa9, 0x0e, 0x92, 0x64, 0xcf, 0xf3, 0x10, 0x4f, 0xbb, 0x2a, 0x68, 0xf1, 0x6f, + 0x74, 0x1d, 0xea, 0x5c, 0xc9, 0xaa, 0xe0, 0x3d, 0x97, 0xd5, 0x27, 0x3f, 0x89, 0x4d, 0x4a, 0x9f, + 0x50, 0x62, 0x1a, 0x02, 0x09, 0xdd, 0x86, 0x56, 0x62, 0xf8, 0xca, 0xb3, 0x2e, 0x66, 0x57, 0x24, + 0x7e, 0x12, 0x2f, 0x4b, 0xd1, 0xf9, 0xda, 0xbe, 0x1d, 0x10, 0x53, 0x94, 0x83, 0xb3, 0xa3, 0x6b, + 0xef, 0xc4, 0x93, 0xc9, 0xda, 0x04, 0x1d, 0xdd, 0x80, 0x86, 0xbc, 0x53, 0x10, 0x1e, 0xd4, 0xde, + 0x38, 0x3f, 0x1a, 0x4c, 0xe3, 0x55, 0x0a, 0x51, 0xff, 0x53, 0x05, 0xde, 0x4a, 0x0d, 0x22, 0xf6, + 0xa6, 0xb8, 0x22, 0xff, 0xea, 0x33, 0xee, 0x15, 0x58, 0x10, 0x2d, 0x40, 0x7a, 0xb5, 0x20, 0x6f, + 0xb9, 0x0a, 0x50, 0xfd, 0xf7, 0x15, 0xb8, 0x3c, 0xba, 0x8f, 0xad, 0x01, 0x0e, 0x58, 0x72, 0xbc, + 0xd3, 0xd8, 0x4b, 0x9c, 0xf0, 0xaa, 0x69, 0xc2, 0xcb, 0xed, 0xaf, 0x96, 0xdf, 0x9f, 0xfe, 0xc7, + 0x2a, 0xb4, 0x33, 0x06, 0x54, 0x96, 0x30, 0x79, 0x31, 0x28, 0xec, 0x56, 0x34, 0x7d, 0x22, 0x29, + 0xb4, 0x8c, 0x0c, 0x04, 0x1d, 0x00, 0x50, 0x1c, 0x60, 0x97, 0x30, 0x12, 0xf0, 0x48, 0xce, 0x3d, + 0xfe, 0xc1, 0xc9, 0xa3, 0xcb, 0x5e, 0x4c, 0xd3, 0xc8, 0x90, 0xe7, 0xd5, 0xac, 0x60, 0x1d, 0xaa, + 0xf8, 0xad, 0x46, 0xe8, 0x0b, 0x58, 0xd8, 0xb7, 0x1d, 0xb2, 0x97, 0x0a, 0xd2, 0x10, 0x82, 0x3c, + 0x3e, 0xb9, 0x20, 0xf7, 0xb2, 0x74, 0x8d, 0x02, 0x1b, 0xfd, 0x1a, 0x2c, 0x15, 0xfd, 0x89, 0x0b, + 0x69, 0xbb, 0xd8, 0x4a, 0xb4, 0xa5, 0x46, 0x3a, 0x82, 0xa5, 0xa2, 0xff, 0xe8, 0x7f, 0xaf, 0xc2, + 0xd9, 0x84, 0xdc, 0xa6, 0xe7, 0xf9, 0x91, 0x67, 0x8a, 0x6b, 0xba, 0xd2, 0xb3, 0x38, 0x03, 0xb3, + 0xcc, 0x66, 0x4e, 0x52, 0xf8, 0x88, 0x01, 0xcf, 0x5d, 0xcc, 0xf7, 0x1d, 0x66, 0x53, 0x75, 0xc0, + 0xf1, 0x50, 0x9e, 0xfd, 0x8b, 0xc8, 0x0e, 0x48, 0x5f, 0x44, 0x82, 0xa6, 0x91, 0x8c, 0xf9, 0x1c, + 0xaf, 0x6a, 0x44, 0x89, 0x2f, 0x95, 0x99, 0x8c, 0x85, 0xdd, 0xfb, 0x8e, 0x43, 0x4c, 0xae, 0x8e, + 0x4c, 0x13, 0x50, 0x80, 0x8a, 0xe6, 0x82, 0x05, 0xb6, 0x67, 0xa9, 0x16, 0x40, 0x8d, 0xb8, 0x9c, + 0x38, 0x08, 0xf0, 0x50, 0x55, 0xfe, 0x72, 0x80, 0x3e, 0x84, 0x9a, 0x8b, 0xa9, 0x4a, 0x74, 0xd7, + 0x72, 0xd1, 0xa1, 0x4c, 0x03, 0xdd, 0x5d, 0x4c, 0x65, 0x26, 0xe0, 0xcb, 0x3a, 0xef, 0x43, 0x33, + 0x06, 0x7c, 0xa9, 0x92, 0xf0, 0x73, 0x38, 0x95, 0x0b, 0x3e, 0xe8, 0x19, 0xac, 0xa4, 0x16, 0x95, + 0x65, 0xa8, 0x8a, 0xc0, 0xb7, 0x8e, 0x94, 0xcc, 0x18, 0x43, 0x40, 0x7f, 0x01, 0xcb, 0xdc, 0x64, + 0x84, 0xe3, 0x4f, 0xa9, 0xb5, 0xf9, 0x00, 0x5a, 0x09, 0xcb, 0x52, 0x9b, 0xe9, 0x40, 0xf3, 0x30, + 0xbe, 0x3e, 0x95, 0xbd, 0x4d, 0x32, 0xd6, 0x37, 0x01, 0x65, 0xe5, 0x55, 0x19, 0xe8, 0x7a, 0xbe, + 0x28, 0x3e, 0x5b, 0x4c, 0x37, 0x02, 0x3d, 0xae, 0x89, 0x7f, 0x57, 0x85, 0xc5, 0x6d, 0x5b, 0xdc, + 0x80, 0x4c, 0x29, 0xc8, 0x5d, 0x83, 0xa5, 0x30, 0xea, 0xb9, 0x7e, 0x3f, 0x72, 0x88, 0x2a, 0x0a, + 0x54, 0xa6, 0x1f, 0x81, 0x4f, 0x0a, 0x7e, 0x5c, 0x59, 0x14, 0xb3, 0x81, 0xea, 0x7e, 0xc5, 0x37, + 0xfa, 0x10, 0xce, 0x3f, 0x22, 0x5f, 0xa8, 0xfd, 0x6c, 0x3b, 0x7e, 0xaf, 0x67, 0x7b, 0x56, 0xcc, + 0x64, 0x56, 0x30, 0x19, 0x8f, 0x50, 0x56, 0x2a, 0x36, 0x4a, 0x4b, 0x45, 0xfd, 0x67, 0x15, 0x58, + 0x4a, 0xb5, 0xa6, 0xf4, 0x7e, 0x4b, 0xfa, 0x87, 0xd4, 0xfa, 0xe5, 0xac, 0xd6, 0x8b, 0xa8, 0xff, + 0xb9, 0x6b, 0xcc, 0x67, 0x5d, 0xe3, 0x9f, 0x15, 0x38, 0xbb, 0x6d, 0xb3, 0x38, 0x28, 0xd9, 0xff, + 0x6b, 0x27, 0x58, 0xa2, 0xef, 0x7a, 0xb9, 0xbe, 0xbb, 0xb0, 0x52, 0xdc, 0xa8, 0x52, 0xfa, 0x19, + 0x98, 0xe5, 0x27, 0x1f, 0xdf, 0x07, 0xc8, 0x81, 0xfe, 0xdb, 0x06, 0x5c, 0xfa, 0x8c, 0xf6, 0x31, + 0x4b, 0xee, 0x7a, 0xee, 0xf9, 0xc1, 0x1e, 0x9f, 0x9a, 0x8e, 0x86, 0x0a, 0xaf, 0x67, 0xd5, 0x89, + 0xaf, 0x67, 0xb5, 0x09, 0xaf, 0x67, 0xf5, 0x63, 0xbd, 0x9e, 0xcd, 0x4e, 0xed, 0xf5, 0x6c, 0xb4, + 0x47, 0x6a, 0x94, 0xf6, 0x48, 0xcf, 0x72, 0x7d, 0xc4, 0x9c, 0x70, 0x89, 0x6f, 0x65, 0x5d, 0x62, + 0xe2, 0xe9, 0x4c, 0xbc, 0xf6, 0x2f, 0x3c, 0x3a, 0x35, 0x8f, 0x7c, 0x74, 0x6a, 0x8d, 0x3e, 0x3a, + 0x95, 0xbf, 0x5b, 0xc0, 0xd8, 0x77, 0x8b, 0x2b, 0xb0, 0x10, 0x0e, 0x3d, 0x93, 0xf4, 0x93, 0x1b, + 0xc0, 0xb6, 0xdc, 0x76, 0x1e, 0x9a, 0xb3, 0xf6, 0xf9, 0x82, 0xb5, 0x27, 0x96, 0x7a, 0x2a, 0x63, + 0xa9, 0xff, 0x3d, 0x2d, 0xcd, 0x1a, 0xac, 0x8e, 0x3b, 0x13, 0xe9, 0x6a, 0xfa, 0xaf, 0xab, 0xd0, + 0xd9, 0xc1, 0xe1, 0x9d, 0x60, 0x28, 0xa5, 0xdd, 0x1a, 0x60, 0xcf, 0xe2, 0x9b, 0x9f, 0x86, 0x47, + 0x95, 0xda, 0x7d, 0x75, 0x9a, 0x76, 0x5f, 0x30, 0x80, 0x5a, 0x99, 0x01, 0xe8, 0x1f, 0xc1, 0x85, + 0x52, 0x15, 0xa9, 0x68, 0xb5, 0x0a, 0x30, 0xc0, 0xa1, 0x82, 0xaa, 0xfb, 0xfa, 0x0c, 0x64, 0xe3, + 0x37, 0x6d, 0x58, 0x4e, 0x1b, 0x11, 0xfe, 0xd7, 0x36, 0x09, 0x7a, 0x0c, 0x4b, 0xdb, 0xea, 0x37, + 0x06, 0xf1, 0xdd, 0x32, 0x9a, 0xf4, 0x58, 0xd3, 0xb9, 0x58, 0x3e, 0xa9, 0xce, 0x71, 0x06, 0x99, + 0x70, 0xbe, 0x48, 0x30, 0x7d, 0x17, 0xfa, 0xfa, 0x04, 0xca, 0x09, 0xd6, 0x51, 0x2c, 0xae, 0x56, + 0xd0, 0x33, 0x58, 0xc8, 0xbf, 0x5e, 0xa0, 0x5c, 0x65, 0x56, 0xfa, 0xa0, 0xd2, 0xd1, 0x27, 0xa1, + 0x24, 0xf2, 0x3f, 0xe7, 0x3e, 0x93, 0xbb, 0xca, 0x47, 0x7a, 0xfe, 0x92, 0xa2, 0xec, 0xa9, 0xa3, + 0xf3, 0xb5, 0x89, 0x38, 0x09, 0xf5, 0x0f, 0xa0, 0x19, 0x5f, 0x6f, 0xe7, 0xd5, 0x5c, 0xb8, 0xf4, + 0xee, 0x2c, 0xe5, 0xe9, 0xed, 0x87, 0xfa, 0x0c, 0xfa, 0x58, 0x2e, 0xde, 0xa4, 0xb4, 0x64, 0x71, + 0xe6, 0x52, 0xb7, 0x73, 0xba, 0xe4, 0x22, 0x55, 0x9f, 0x41, 0xdf, 0x86, 0x36, 0xff, 0xda, 0x53, + 0xaf, 0xfb, 0x2b, 0x5d, 0xf9, 0x63, 0x92, 0x6e, 0xfc, 0x63, 0x92, 0xee, 0x5d, 0x97, 0xb2, 0x61, + 0xa7, 0xe4, 0xa6, 0x53, 0x11, 0x78, 0x0e, 0xa7, 0xb6, 0x09, 0x4b, 0x2f, 0x26, 0xd0, 0xe5, 0x63, + 0x5d, 0xdf, 0x74, 0xf4, 0x22, 0xda, 0xe8, 0xdd, 0x86, 0x3e, 0x83, 0x7e, 0x59, 0x81, 0xd3, 0xdb, + 0x84, 0x15, 0x5b, 0x7d, 0xf4, 0x6e, 0x39, 0x93, 0x31, 0x57, 0x02, 0x9d, 0x47, 0x27, 0x8d, 0x0e, + 0x79, 0xb2, 0xfa, 0x0c, 0xfa, 0x55, 0x05, 0xce, 0x65, 0x04, 0xcb, 0xf6, 0xee, 0xe8, 0xc6, 0x64, + 0xe1, 0x4a, 0xfa, 0xfc, 0xce, 0xa7, 0x27, 0xfc, 0xd1, 0x46, 0x86, 0xa4, 0x3e, 0x83, 0xf6, 0xc4, + 0x99, 0xa4, 0xa5, 0x3a, 0xba, 0x54, 0x5a, 0x93, 0x27, 0xdc, 0x57, 0xc7, 0x4d, 0x27, 0xe7, 0xf0, + 0x29, 0xb4, 0xb7, 0x09, 0x8b, 0xeb, 0xca, 0xbc, 0xa5, 0x15, 0xca, 0xf9, 0xbc, 0xab, 0x16, 0x4b, + 0x51, 0x61, 0x31, 0xcb, 0x92, 0x56, 0xa6, 0xbe, 0xca, 0xfb, 0x6a, 0x69, 0x91, 0x99, 0xb7, 0x98, + 0xf2, 0xf2, 0x4c, 0x9f, 0x41, 0x2f, 0x60, 0xa5, 0x3c, 0xaf, 0xa0, 0xb7, 0x8f, 0x5d, 0x0f, 0x74, + 0xae, 0x1d, 0x07, 0x35, 0x61, 0x39, 0x80, 0xd3, 0x25, 0x41, 0x18, 0x5d, 0xc9, 0x69, 0x75, 0x6c, + 0x22, 0xeb, 0x7c, 0xe3, 0x48, 0xbc, 0x98, 0xd3, 0x27, 0x9b, 0x7f, 0x79, 0xb5, 0x5a, 0xf9, 0xeb, + 0xab, 0xd5, 0xca, 0x3f, 0x5e, 0xad, 0x56, 0xbe, 0x7f, 0xf3, 0x88, 0x9f, 0x91, 0x65, 0x7e, 0x99, + 0x86, 0xa9, 0x6d, 0x3a, 0x36, 0xf1, 0x58, 0xaf, 0x21, 0x3c, 0xfb, 0xe6, 0xbf, 0x03, 0x00, 0x00, + 0xff, 0xff, 0xef, 0x1f, 0x33, 0xaa, 0xb8, 0x26, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -2857,7 +2866,7 @@ func (c *repoServerServiceClient) UpdateRevisionForPaths(ctx context.Context, in func (c *repoServerServiceClient) HasDrySourceChanged(ctx context.Context, in *HasDrySourceChangedRequest, opts ...grpc.CallOption) (*HasDrySourceChangedResponse, error) { out := new(HasDrySourceChangedResponse) - err := c.cc.Invoke(ctx, "/repository.RepoServerService/ResolveDryRevision", in, out, opts...) + err := c.cc.Invoke(ctx, "/repository.RepoServerService/HasDrySourceChanged", in, out, opts...) if err != nil { return nil, err } @@ -2945,7 +2954,7 @@ func (*UnimplementedRepoServerServiceServer) UpdateRevisionForPaths(ctx context. return nil, status.Errorf(codes.Unimplemented, "method UpdateRevisionForPaths not implemented") } func (*UnimplementedRepoServerServiceServer) HasDrySourceChanged(ctx context.Context, req *HasDrySourceChangedRequest) (*HasDrySourceChangedResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ResolveDryRevision not implemented") + return nil, status.Errorf(codes.Unimplemented, "method HasDrySourceChanged not implemented") } func RegisterRepoServerServiceServer(s *grpc.Server, srv RepoServerServiceServer) { @@ -3222,7 +3231,7 @@ func _RepoServerService_HasDrySourceChanged_Handler(srv interface{}, ctx context } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/repository.RepoServerService/ResolveDryRevision", + FullMethod: "/repository.RepoServerService/HasDrySourceChanged", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(RepoServerServiceServer).HasDrySourceChanged(ctx, req.(*HasDrySourceChangedRequest)) @@ -3287,7 +3296,7 @@ var _RepoServerService_serviceDesc = grpc.ServiceDesc{ Handler: _RepoServerService_UpdateRevisionForPaths_Handler, }, { - MethodName: "ResolveDryRevision", + MethodName: "HasDrySourceChanged", Handler: _RepoServerService_HasDrySourceChanged_Handler, }, }, @@ -3964,6 +3973,15 @@ func (m *ManifestResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } + if len(m.Commands) > 0 { + for iNdEx := len(m.Commands) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Commands[iNdEx]) + copy(dAtA[i:], m.Commands[iNdEx]) + i = encodeVarintRepository(dAtA, i, uint64(len(m.Commands[iNdEx]))) + i-- + dAtA[i] = 0x42 + } + } if len(m.VerifyResult) > 0 { i -= len(m.VerifyResult) copy(dAtA[i:], m.VerifyResult) @@ -5890,6 +5908,12 @@ func (m *ManifestResponse) Size() (n int) { if l > 0 { n += 1 + l + sovRepository(uint64(l)) } + if len(m.Commands) > 0 { + for _, s := range m.Commands { + l = len(s) + n += 1 + l + sovRepository(uint64(l)) + } + } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } @@ -8496,6 +8520,38 @@ func (m *ManifestResponse) Unmarshal(dAtA []byte) error { } m.VerifyResult = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Commands", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRepository + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRepository + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthRepository + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Commands = append(m.Commands, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipRepository(dAtA[iNdEx:]) diff --git a/reposerver/repository/repository.go b/reposerver/repository/repository.go index 18d7ff1d6d9e4..f4f63623dc9aa 100644 --- a/reposerver/repository/repository.go +++ b/reposerver/repository/repository.go @@ -1073,7 +1073,7 @@ var manifestGenerateLock = sync.NewKeyLock() // if multiple threads are trying to run it. // Multiple goroutines might process same helm app in one repo concurrently when repo server process multiple // manifest generation requests of the same commit. -func runHelmBuild(appPath string, h helm.Helm) error { +func runHelmBuild(appPath string, h helm.Helm) ([]string, error) { manifestGenerateLock.Lock(appPath) defer manifestGenerateLock.Unlock(appPath) @@ -1083,16 +1083,16 @@ func runHelmBuild(appPath string, h helm.Helm) error { markerFile := path.Join(appPath, helmDepUpMarkerFile) _, err := os.Stat(markerFile) if err == nil { - return nil + return []string{}, nil } else if !os.IsNotExist(err) { - return err + return []string{}, err } - err = h.DependencyBuild() + commands, err := h.DependencyBuild() if err != nil { - return fmt.Errorf("error building helm chart dependencies: %w", err) + return []string{}, fmt.Errorf("error building helm chart dependencies: %w", err) } - return os.WriteFile(markerFile, []byte("marker"), 0644) + return commands, os.WriteFile(markerFile, []byte("marker"), 0644) } func isSourcePermitted(url string, repos []string) bool { @@ -1100,7 +1100,12 @@ func isSourcePermitted(url string, repos []string) bool { return p.IsSourcePermitted(v1alpha1.ApplicationSource{RepoURL: url}) } -func helmTemplate(appPath string, repoRoot string, env *v1alpha1.Env, q *apiclient.ManifestRequest, isLocal bool, gitRepoPaths io.TempPaths) ([]*unstructured.Unstructured, error) { +// helmTemplate runs helm template on the application source and returns the generated manifests as well as a list of +// commands that were executed +func helmTemplate(appPath string, repoRoot string, env *v1alpha1.Env, q *apiclient.ManifestRequest, isLocal bool, gitRepoPaths io.TempPaths) ([]*unstructured.Unstructured, []string, error) { + // Track the commands executed as part of the helm template operation + var commands []string + concurrencyAllowed := helmConcurrencyDefault || isConcurrencyAllowed(appPath) if !concurrencyAllowed { manifestGenerateLock.Lock(appPath) @@ -1136,7 +1141,7 @@ func helmTemplate(appPath string, repoRoot string, env *v1alpha1.Env, q *apiclie resolvedValueFiles, err := getResolvedValueFiles(appPath, repoRoot, env, q.GetValuesFileSchemes(), appHelm.ValueFiles, q.RefSources, gitRepoPaths, appHelm.IgnoreMissingValueFiles) if err != nil { - return nil, fmt.Errorf("error resolving helm value files: %w", err) + return nil, nil, fmt.Errorf("error resolving helm value files: %w", err) } templateOpts.Values = resolvedValueFiles @@ -1144,7 +1149,7 @@ func helmTemplate(appPath string, repoRoot string, env *v1alpha1.Env, q *apiclie if !appHelm.ValuesIsEmpty() { rand, err := uuid.NewRandom() if err != nil { - return nil, fmt.Errorf("error generating random filename for Helm values file: %w", err) + return nil, nil, fmt.Errorf("error generating random filename for Helm values file: %w", err) } p := path.Join(os.TempDir(), rand.String()) defer func() { @@ -1155,7 +1160,7 @@ func helmTemplate(appPath string, repoRoot string, env *v1alpha1.Env, q *apiclie }() err = os.WriteFile(p, appHelm.ValuesYAML(), 0644) if err != nil { - return nil, fmt.Errorf("error writing helm values file: %w", err) + return nil, nil, fmt.Errorf("error writing helm values file: %w", err) } templateOpts.Values = append(templateOpts.Values, pathutil.ResolvedFilePath(p)) } @@ -1170,7 +1175,7 @@ func helmTemplate(appPath string, repoRoot string, env *v1alpha1.Env, q *apiclie for _, p := range appHelm.FileParameters { resolvedPath, _, err := pathutil.ResolveValueFilePathOrUrl(appPath, repoRoot, env.Envsubst(p.Path), q.GetValuesFileSchemes()) if err != nil { - return nil, fmt.Errorf("error resolving helm value file path: %w", err) + return nil, nil, fmt.Errorf("error resolving helm value file path: %w", err) } templateOpts.SetFile[p.Name] = resolvedPath } @@ -1194,31 +1199,39 @@ func helmTemplate(appPath string, repoRoot string, env *v1alpha1.Env, q *apiclie helmRepos, err := getHelmRepos(appPath, q.Repos, q.HelmRepoCreds) if err != nil { - return nil, fmt.Errorf("error getting helm repos: %w", err) + return nil, nil, fmt.Errorf("error getting helm repos: %w", err) } h, err := helm.NewHelmApp(appPath, helmRepos, isLocal, version, proxy, passCredentials) if err != nil { - return nil, fmt.Errorf("error initializing helm app object: %w", err) + return nil, nil, fmt.Errorf("error initializing helm app object: %w", err) } defer h.Dispose() - err = h.Init() + command, err := h.Init() if err != nil { - return nil, fmt.Errorf("error initializing helm app: %w", err) + return nil, nil, fmt.Errorf("error initializing helm app: %w", err) + } + if command != "" { + commands = append(commands, command) } - out, err := h.Template(templateOpts) + out, command, err := h.Template(templateOpts) + if err == nil { + commands = append(commands, command) + } if err != nil { if !helm.IsMissingDependencyErr(err) { - return nil, err + return nil, nil, err } + var buildCommands []string if concurrencyAllowed { - err = runHelmBuild(appPath, h) + buildCommands, err = runHelmBuild(appPath, h) } else { - err = h.DependencyBuild() + buildCommands, err = h.DependencyBuild() } + commands = append(commands, buildCommands...) if err != nil { var reposNotPermitted []string @@ -1236,18 +1249,20 @@ func helmTemplate(appPath string, repoRoot string, env *v1alpha1.Env, q *apiclie } if len(reposNotPermitted) > 0 { - return nil, status.Errorf(codes.PermissionDenied, "helm repos %s are not permitted in project '%s'", strings.Join(reposNotPermitted, ", "), q.ProjectName) + return nil, nil, status.Errorf(codes.PermissionDenied, "helm repos %s are not permitted in project '%s'", strings.Join(reposNotPermitted, ", "), q.ProjectName) } - return nil, err + return nil, nil, err } - out, err = h.Template(templateOpts) + out, command, err = h.Template(templateOpts) if err != nil { - return nil, err + return nil, nil, err } + commands = append(commands, command) } - return kube.SplitYAML([]byte(out)) + objs, err := kube.SplitYAML([]byte(out)) + return objs, commands, err } func getResolvedValueFiles( @@ -1387,9 +1402,11 @@ func GenerateManifests(ctx context.Context, appPath, repoRoot, revision string, repoURL = q.Repo.Repo } + var commands []string + switch appSourceType { case v1alpha1.ApplicationSourceTypeHelm: - targetObjs, err = helmTemplate(appPath, repoRoot, env, q, isLocal, gitRepoPaths) + targetObjs, commands, err = helmTemplate(appPath, repoRoot, env, q, isLocal, gitRepoPaths) case v1alpha1.ApplicationSourceTypeKustomize: kustomizeBinary := "" if q.KustomizeOptions != nil { @@ -1462,6 +1479,7 @@ func GenerateManifests(ctx context.Context, appPath, repoRoot, revision string, return &apiclient.ManifestResponse{ Manifests: manifests, SourceType: string(appSourceType), + Commands: commands, }, nil } @@ -2060,7 +2078,7 @@ func populateHelmAppDetails(res *apiclient.RepoAppDetailsResponse, appPath strin return err } defer h.Dispose() - err = h.Init() + _, err = h.Init() if err != nil { return err } @@ -2080,7 +2098,7 @@ func populateHelmAppDetails(res *apiclient.RepoAppDetailsResponse, appPath strin if err != nil { return fmt.Errorf("failed to resolve value files: %w", err) } - params, err := h.GetParameters(resolvedSelectedValueFiles, appPath, repoRoot) + params, _, err := h.GetParameters(resolvedSelectedValueFiles, appPath, repoRoot) if err != nil { return err } @@ -2308,7 +2326,7 @@ func (s *Service) GetRevisionChartDetails(ctx context.Context, q *apiclient.Repo return nil, fmt.Errorf("error creating helm cmd: %v", err) } defer helmCmd.Close() - helmDetails, err := helmCmd.InspectChart() + helmDetails, _, err := helmCmd.InspectChart() if err != nil { return nil, fmt.Errorf("error inspecting chart: %v", err) } diff --git a/reposerver/repository/repository.proto b/reposerver/repository/repository.proto index a587571bccca1..398721adaece3 100644 --- a/reposerver/repository/repository.proto +++ b/reposerver/repository/repository.proto @@ -91,6 +91,8 @@ message ManifestResponse { string sourceType = 6; // Raw response of git verify-commit operation (always the empty string for Helm) string verifyResult = 7; + // commands is the list of commands used to hydrate the manifests + repeated string commands = 8; } message ListRefsRequest { diff --git a/util/exec/exec.go b/util/exec/exec.go index 03ab0c4724838..5bd7325695390 100644 --- a/util/exec/exec.go +++ b/util/exec/exec.go @@ -4,7 +4,10 @@ import ( "fmt" "os" "os/exec" + "strconv" + "strings" "time" + "unicode" "github.com/argoproj/gitops-engine/pkg/utils/tracing" argoexec "github.com/argoproj/pkg/exec" @@ -58,3 +61,25 @@ func RunWithExecRunOpts(cmd *exec.Cmd, opts ExecRunOpts) (string, error) { defer span.Finish() return argoexec.RunCommandExt(cmd, cmdOpts) } + +// GetCommandArgsToLog represents the given command in a way that we can copy-and-paste into a terminal +func GetCommandArgsToLog(cmd *exec.Cmd) string { + var argsToLog []string + for _, arg := range cmd.Args { + containsSpace := false + for _, r := range arg { + if unicode.IsSpace(r) { + containsSpace = true + break + } + } + if containsSpace { + // add quotes and escape any internal quotes + argsToLog = append(argsToLog, strconv.Quote(arg)) + } else { + argsToLog = append(argsToLog, arg) + } + } + args := strings.Join(argsToLog, " ") + return args +} diff --git a/util/helm/client.go b/util/helm/client.go index aab627cb7c4fb..7fcec762e4487 100644 --- a/util/helm/client.go +++ b/util/helm/client.go @@ -150,7 +150,7 @@ func (c *nativeHelmChart) ExtractChart(chart string, version string, passCredent } defer helmCmd.Close() - _, err = helmCmd.Init() + _, _, err = helmCmd.Init() if err != nil { return "", nil, err } @@ -185,23 +185,23 @@ func (c *nativeHelmChart) ExtractChart(chart string, version string, passCredent if c.enableOci { if c.creds.Password != "" && c.creds.Username != "" { - _, err = helmCmd.RegistryLogin(c.repoURL, c.creds) + _, _, err = helmCmd.RegistryLogin(c.repoURL, c.creds) if err != nil { return "", nil, err } defer func() { - _, _ = helmCmd.RegistryLogout(c.repoURL, c.creds) + _, _, _ = helmCmd.RegistryLogout(c.repoURL, c.creds) }() } // 'helm pull' ensures that chart is downloaded into temp directory - _, err = helmCmd.PullOCI(c.repoURL, chart, version, tempDest, c.creds) + _, _, err = helmCmd.PullOCI(c.repoURL, chart, version, tempDest, c.creds) if err != nil { return "", nil, err } } else { - _, err = helmCmd.Fetch(c.repoURL, chart, version, tempDest, c.creds, passCredentials) + _, _, err = helmCmd.Fetch(c.repoURL, chart, version, tempDest, c.creds, passCredentials) if err != nil { return "", nil, err } @@ -286,12 +286,12 @@ func (c *nativeHelmChart) TestHelmOCI() (bool, error) { // Looks like there is no good way to test access to OCI repo if credentials are not provided // just assume it is accessible if c.creds.Username != "" && c.creds.Password != "" { - _, err = helmCmd.RegistryLogin(c.repoURL, c.creds) + _, _, err = helmCmd.RegistryLogin(c.repoURL, c.creds) if err != nil { return false, err } defer func() { - _, _ = helmCmd.RegistryLogout(c.repoURL, c.creds) + _, _, _ = helmCmd.RegistryLogout(c.repoURL, c.creds) }() log.WithFields(log.Fields{"seconds": time.Since(start).Seconds()}).Info("took to test helm oci repository") diff --git a/util/helm/cmd.go b/util/helm/cmd.go index cc2a1388d65a2..eafee54ca668c 100644 --- a/util/helm/cmd.go +++ b/util/helm/cmd.go @@ -51,7 +51,7 @@ var redactor = func(text string) string { return regexp.MustCompile("(--username|--password) [^ ]*").ReplaceAllString(text, "$1 ******") } -func (c Cmd) run(args ...string) (string, error) { +func (c Cmd) run(args ...string) (string, string, error) { cmd := exec.Command(c.binaryName, args...) cmd.Dir = c.WorkDir cmd.Env = os.Environ() @@ -69,17 +69,19 @@ func (c Cmd) run(args ...string) (string, error) { cmd.Env = proxy.UpsertEnv(cmd, c.proxy) - return executil.RunWithRedactor(cmd, redactor) + out, err := executil.RunWithRedactor(cmd, redactor) + fullCommand := executil.GetCommandArgsToLog(cmd) + return out, fullCommand, err } -func (c *Cmd) Init() (string, error) { +func (c *Cmd) Init() (string, string, error) { if c.initSupported { return c.run("init", "--client-only", "--skip-refresh") } - return "", nil + return "", "", nil } -func (c *Cmd) RegistryLogin(repo string, creds Creds) (string, error) { +func (c *Cmd) RegistryLogin(repo string, creds Creds) (string, string, error) { args := []string{"registry", "login"} args = append(args, repo) @@ -98,7 +100,7 @@ func (c *Cmd) RegistryLogin(repo string, creds Creds) (string, error) { if len(creds.CertData) > 0 { filePath, closer, err := writeToTmp(creds.CertData) if err != nil { - return "", err + return "", "", err } defer argoio.Close(closer) args = append(args, "--cert-file", filePath) @@ -107,7 +109,7 @@ func (c *Cmd) RegistryLogin(repo string, creds Creds) (string, error) { if len(creds.KeyData) > 0 { filePath, closer, err := writeToTmp(creds.KeyData) if err != nil { - return "", err + return "", "", err } defer argoio.Close(closer) args = append(args, "--key-file", filePath) @@ -119,17 +121,17 @@ func (c *Cmd) RegistryLogin(repo string, creds Creds) (string, error) { return c.run(args...) } -func (c *Cmd) RegistryLogout(repo string, creds Creds) (string, error) { +func (c *Cmd) RegistryLogout(repo string, creds Creds) (string, string, error) { args := []string{"registry", "logout"} args = append(args, repo) return c.run(args...) } -func (c *Cmd) RepoAdd(name string, url string, opts Creds, passCredentials bool) (string, error) { +func (c *Cmd) RepoAdd(name string, url string, opts Creds, passCredentials bool) (string, string, error) { tmp, err := os.MkdirTemp("", "helm") if err != nil { - return "", err + return "", "", err } defer func() { _ = os.RemoveAll(tmp) }() @@ -154,11 +156,11 @@ func (c *Cmd) RepoAdd(name string, url string, opts Creds, passCredentials bool) if len(opts.CertData) > 0 { certFile, err := os.CreateTemp("", "helm") if err != nil { - return "", err + return "", "", err } _, err = certFile.Write(opts.CertData) if err != nil { - return "", err + return "", "", err } defer certFile.Close() args = append(args, "--cert-file", certFile.Name()) @@ -167,11 +169,11 @@ func (c *Cmd) RepoAdd(name string, url string, opts Creds, passCredentials bool) if len(opts.KeyData) > 0 { keyFile, err := os.CreateTemp("", "helm") if err != nil { - return "", err + return "", "", err } _, err = keyFile.Write(opts.KeyData) if err != nil { - return "", err + return "", "", err } defer keyFile.Close() args = append(args, "--key-file", keyFile.Name()) @@ -209,7 +211,7 @@ func writeToTmp(data []byte) (string, argoio.Closer, error) { }), nil } -func (c *Cmd) Fetch(repo, chartName, version, destination string, creds Creds, passCredentials bool) (string, error) { +func (c *Cmd) Fetch(repo, chartName, version, destination string, creds Creds, passCredentials bool) (string, string, error) { args := []string{c.pullCommand, "--destination", destination} if version != "" { args = append(args, "--version", version) @@ -232,7 +234,7 @@ func (c *Cmd) Fetch(repo, chartName, version, destination string, creds Creds, p if len(creds.CertData) > 0 { filePath, closer, err := writeToTmp(creds.CertData) if err != nil { - return "", err + return "", "", err } defer argoio.Close(closer) args = append(args, "--cert-file", filePath) @@ -240,7 +242,7 @@ func (c *Cmd) Fetch(repo, chartName, version, destination string, creds Creds, p if len(creds.KeyData) > 0 { filePath, closer, err := writeToTmp(creds.KeyData) if err != nil { - return "", err + return "", "", err } defer argoio.Close(closer) args = append(args, "--key-file", filePath) @@ -252,7 +254,7 @@ func (c *Cmd) Fetch(repo, chartName, version, destination string, creds Creds, p return c.run(args...) } -func (c *Cmd) PullOCI(repo string, chart string, version string, destination string, creds Creds) (string, error) { +func (c *Cmd) PullOCI(repo string, chart string, version string, destination string, creds Creds) (string, string, error) { args := []string{"pull", fmt.Sprintf("oci://%s/%s", repo, chart), "--version", version, "--destination", @@ -264,7 +266,7 @@ func (c *Cmd) PullOCI(repo string, chart string, version string, destination str if len(creds.CertData) > 0 { filePath, closer, err := writeToTmp(creds.CertData) if err != nil { - return "", err + return "", "", err } defer argoio.Close(closer) args = append(args, "--cert-file", filePath) @@ -273,7 +275,7 @@ func (c *Cmd) PullOCI(repo string, chart string, version string, destination str if len(creds.KeyData) > 0 { filePath, closer, err := writeToTmp(creds.KeyData) if err != nil { - return "", err + return "", "", err } defer argoio.Close(closer) args = append(args, "--key-file", filePath) @@ -285,15 +287,15 @@ func (c *Cmd) PullOCI(repo string, chart string, version string, destination str return c.run(args...) } -func (c *Cmd) dependencyBuild() (string, error) { +func (c *Cmd) dependencyBuild() (string, string, error) { return c.run("dependency", "build") } -func (c *Cmd) inspectValues(values string) (string, error) { +func (c *Cmd) inspectValues(values string) (string, string, error) { return c.run(c.showCommand, "values", values) } -func (c *Cmd) InspectChart() (string, error) { +func (c *Cmd) InspectChart() (string, string, error) { return c.run(c.showCommand, "chart", ".") } @@ -322,12 +324,13 @@ func cleanSetParameters(val string) string { return re.ReplaceAllString(val, `$1\,`) } -func (c *Cmd) template(chartPath string, opts *TemplateOpts) (string, error) { +// template runs the `helm template` command and returns the output as well as the full text of the command. +func (c *Cmd) template(chartPath string, opts *TemplateOpts) (string, string, error) { if c.HelmVer.getPostTemplateCallback != nil { if callback, err := c.HelmVer.getPostTemplateCallback(filepath.Clean(path.Join(c.WorkDir, chartPath))); err == nil { defer callback() } else { - return "", err + return "", "", err } } @@ -358,19 +361,19 @@ func (c *Cmd) template(chartPath string, opts *TemplateOpts) (string, error) { args = append(args, "--include-crds") } - out, err := c.run(args...) + out, command, err := c.run(args...) if err != nil { msg := err.Error() if strings.Contains(msg, "--api-versions") { log.Debug(msg) msg = apiVersionsRemover.ReplaceAllString(msg, " ") } - return "", errors.New(msg) + return "", "", errors.New(msg) } - return out, nil + return out, command, nil } -func (c *Cmd) Freestyle(args ...string) (string, error) { +func (c *Cmd) Freestyle(args ...string) (string, string, error) { return c.run(args...) } diff --git a/util/helm/helm.go b/util/helm/helm.go index f586691867648..52facbd03a6e2 100644 --- a/util/helm/helm.go +++ b/util/helm/helm.go @@ -30,14 +30,14 @@ type HelmRepository struct { // Helm provides wrapper functionality around the `helm` command. type Helm interface { - // Template returns a list of unstructured objects from a `helm template` command - Template(opts *TemplateOpts) (string, error) + // Template returns a list of unstructured objects from a `helm template` command and the full command that was run + Template(opts *TemplateOpts) (string, string, error) // GetParameters returns a list of chart parameters taking into account values in provided YAML files. - GetParameters(valuesFiles []pathutil.ResolvedFilePath, appPath, repoRoot string) (map[string]string, error) + GetParameters(valuesFiles []pathutil.ResolvedFilePath, appPath, repoRoot string) (map[string]string, string, error) // DependencyBuild runs `helm dependency build` to download a chart's dependencies - DependencyBuild() error + DependencyBuild() ([]string, error) // Init runs `helm init --client-only` - Init() error + Init() (string, error) // Dispose deletes temp resources Dispose() } @@ -67,51 +67,58 @@ func IsMissingDependencyErr(err error) bool { strings.Contains(err.Error(), "found in Chart.yaml, but missing in charts/ directory") } -func (h *helm) Template(templateOpts *TemplateOpts) (string, error) { - out, err := h.cmd.template(".", templateOpts) +func (h *helm) Template(templateOpts *TemplateOpts) (string, string, error) { + out, command, err := h.cmd.template(".", templateOpts) if err != nil { - return "", err + return "", "", err } - return out, nil + return out, command, nil } -func (h *helm) DependencyBuild() error { +func (h *helm) DependencyBuild() ([]string, error) { isHelmOci := h.cmd.IsHelmOci defer func() { h.cmd.IsHelmOci = isHelmOci }() + var commands []string for i := range h.repos { repo := h.repos[i] if repo.EnableOci { h.cmd.IsHelmOci = true if repo.Creds.Username != "" && repo.Creds.Password != "" { - _, err := h.cmd.RegistryLogin(repo.Repo, repo.Creds) + _, command, err := h.cmd.RegistryLogin(repo.Repo, repo.Creds) + commands = append(commands, command) defer func() { - _, _ = h.cmd.RegistryLogout(repo.Repo, repo.Creds) + _, _, _ = h.cmd.RegistryLogout(repo.Repo, repo.Creds) }() if err != nil { - return err + return []string{}, err } } } else { - _, err := h.cmd.RepoAdd(repo.Name, repo.Repo, repo.Creds, h.passCredentials) + _, command, err := h.cmd.RepoAdd(repo.Name, repo.Repo, repo.Creds, h.passCredentials) + commands = append(commands, command) if err != nil { - return err + return []string{}, err } } } h.repos = nil - _, err := h.cmd.dependencyBuild() - return err + _, command, err := h.cmd.dependencyBuild() + if err != nil { + return []string{}, err + } + commands = append(commands, command) + return commands, nil } -func (h *helm) Init() error { - _, err := h.cmd.Init() - return err +func (h *helm) Init() (string, error) { + _, command, err := h.cmd.Init() + return command, err } func (h *helm) Dispose() { @@ -135,13 +142,15 @@ func Version(shortForm bool) (string, error) { return strings.TrimSpace(version), nil } -func (h *helm) GetParameters(valuesFiles []pathutil.ResolvedFilePath, appPath, repoRoot string) (map[string]string, error) { +func (h *helm) GetParameters(valuesFiles []pathutil.ResolvedFilePath, appPath, repoRoot string) (map[string]string, string, error) { var values []string + var command string // Don't load values.yaml if it's an out-of-bounds link. if _, _, err := pathutil.ResolveValueFilePathOrUrl(appPath, repoRoot, "values.yaml", []string{}); err == nil { - out, err := h.cmd.inspectValues(".") + var out string + out, command, err = h.cmd.inspectValues(".") if err != nil { - return nil, err + return nil, "", err } values = append(values, out) } else { @@ -160,7 +169,7 @@ func (h *helm) GetParameters(valuesFiles []pathutil.ResolvedFilePath, appPath, r fileValues, err = os.ReadFile(file) } if err != nil { - return nil, fmt.Errorf("failed to read value file %s: %s", file, err) + return nil, "", fmt.Errorf("failed to read value file %s: %s", file, err) } values = append(values, string(fileValues)) } @@ -169,12 +178,12 @@ func (h *helm) GetParameters(valuesFiles []pathutil.ResolvedFilePath, appPath, r for _, file := range values { values := map[string]interface{}{} if err := yaml.Unmarshal([]byte(file), &values); err != nil { - return nil, fmt.Errorf("failed to parse values: %s", err) + return nil, "", fmt.Errorf("failed to parse values: %s", err) } flatVals(values, output) } - return output, nil + return output, command, nil } func flatVals(input interface{}, output map[string]string, prefixes ...string) { From f64f396ef2d17325baed085d48b16bf029dcff2e Mon Sep 17 00:00:00 2001 From: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> Date: Fri, 26 Apr 2024 13:15:52 -0400 Subject: [PATCH 05/15] handle missing branches, missing manifest files, and no-op changes Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> --- controller/appcontroller.go | 7 ++++--- controller/commit/commit.go | 29 +++++++++++++++++++++----- pkg/apis/application/v1alpha1/types.go | 16 ++++++++++++++ 3 files changed, 44 insertions(+), 8 deletions(-) diff --git a/controller/appcontroller.go b/controller/appcontroller.go index 50bdf84e0e18a..3a7e85096a3df 100644 --- a/controller/appcontroller.go +++ b/controller/appcontroller.go @@ -1590,13 +1590,14 @@ func (ctrl *ApplicationController) processAppRefreshQueueItem() (processNext boo for i, obj := range objs { manifestDetails[i] = commit.ManifestDetails{Manifest: *obj} } + hydrateToSource := app.Spec.GetHydrateToSource() paths := []commit.PathDetails{{ - Path: app.Spec.SourceHydrator.SyncSource.Path, + Path: hydrateToSource.Path, Manifests: manifestDetails, }} manifestsRequest := commit.ManifestsRequest{ - RepoURL: app.Spec.SourceHydrator.DrySource.RepoURL, - TargetBranch: app.Spec.SourceHydrator.SyncSource.TargetRevision, + RepoURL: hydrateToSource.RepoURL, + TargetBranch: hydrateToSource.TargetRevision, DrySHA: revision, CommitAuthorName: "Michael Crenshaw", CommitAuthorEmail: "350466+crenshaw-dev@users.noreply.github.com", diff --git a/controller/commit/commit.go b/controller/commit/commit.go index ba8425112349f..d36018ee0fb2b 100644 --- a/controller/commit/commit.go +++ b/controller/commit/commit.go @@ -10,6 +10,7 @@ import ( "os/exec" "path" "sigs.k8s.io/yaml" + "strings" "text/template" "time" ) @@ -81,8 +82,20 @@ func (s *service) Commit(r ManifestsRequest) (ManifestsResponse, error) { checkoutCmd.Dir = dirPath out, err := checkoutCmd.CombinedOutput() if err != nil { - log.WithError(err).WithField("output", string(out)).Error("failed to checkout branch") - return ManifestsResponse{}, fmt.Errorf("failed to checkout branch: %w", err) + if strings.Contains(string(out), "did not match any file(s) known to git") { + // If the branch does not exist, create any empty branch + + checkoutCmd = exec.Command("git", "switch", "--orphan", r.TargetBranch) + checkoutCmd.Dir = dirPath + out, err = checkoutCmd.CombinedOutput() + if err != nil { + log.WithError(err).WithField("output", string(out)).Error("failed to create branch") + return ManifestsResponse{}, fmt.Errorf("failed to create branch: %w", err) + } + } else { + log.WithError(err).WithField("output", string(out)).Error("failed to checkout branch") + return ManifestsResponse{}, fmt.Errorf("failed to checkout branch: %w", err) + } } // Write the manifests to the temp dir @@ -97,9 +110,11 @@ func (s *service) Commit(r ManifestsRequest) (ManifestsResponse, error) { } // If the file exists, truncate it. - err = os.Truncate(path.Join(dirPath, hydratePath, "manifest.yaml"), 0) - if err != nil { - return ManifestsResponse{}, fmt.Errorf("failed to empty manifest file: %w", err) + if _, err := os.Stat(path.Join(dirPath, hydratePath, "manifest.yaml")); err == nil { + err = os.Truncate(path.Join(dirPath, hydratePath, "manifest.yaml"), 0) + if err != nil { + return ManifestsResponse{}, fmt.Errorf("failed to empty manifest file: %w", err) + } } file, err := os.OpenFile(path.Join(dirPath, hydratePath, "manifest.yaml"), os.O_APPEND|os.O_CREATE|os.O_WRONLY, os.ModePerm) @@ -193,6 +208,10 @@ func (s *service) Commit(r ManifestsRequest) (ManifestsResponse, error) { commitCmd.Dir = dirPath out, err = commitCmd.CombinedOutput() if err != nil { + if strings.Contains(err.Error(), "nothing to commit, working tree clean") { + logCtx.Info("no changes to commit") + return ManifestsResponse{}, nil + } log.WithError(err).WithField("output", string(out)).Error("failed to commit files") return ManifestsResponse{}, fmt.Errorf("failed to commit: %w", err) } diff --git a/pkg/apis/application/v1alpha1/types.go b/pkg/apis/application/v1alpha1/types.go index 030a6ba3c47ac..8cc3288954ef4 100644 --- a/pkg/apis/application/v1alpha1/types.go +++ b/pkg/apis/application/v1alpha1/types.go @@ -222,6 +222,22 @@ func (a *ApplicationSpec) GetSource() ApplicationSource { return ApplicationSource{} } +// GetHydrateToSource returns the hydrateTo source if it exists, otherwise returns the sync source. +func (a *ApplicationSpec) GetHydrateToSource() ApplicationSource { + if a.SourceHydrator != nil { + var targetRevision = a.SourceHydrator.SyncSource.TargetRevision + if a.SourceHydrator.HydrateTo != nil { + targetRevision = a.SourceHydrator.HydrateTo.TargetRevision + } + return ApplicationSource{ + RepoURL: a.SourceHydrator.DrySource.RepoURL, + Path: a.SourceHydrator.SyncSource.Path, + TargetRevision: targetRevision, + } + } + return ApplicationSource{} +} + func (a *ApplicationSpec) GetSources() ApplicationSources { if a.HasMultipleSources() { return a.Sources From 5552e771d178db0714427602873dff8af96b7f68 Mon Sep 17 00:00:00 2001 From: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> Date: Fri, 26 Apr 2024 13:56:07 -0400 Subject: [PATCH 06/15] don't set release name or namespace to values from the app CR Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> --- cmpserver/plugin/plugin_test.go | 5 +++++ controller/appcontroller.go | 3 +-- controller/hook.go | 2 +- controller/state.go | 21 ++++++++++++------- .../generators/cluster_generator.go | 2 +- util/exec/exec.go | 5 +++++ util/helm/cmd.go | 5 ++++- 7 files changed, 31 insertions(+), 12 deletions(-) diff --git a/cmpserver/plugin/plugin_test.go b/cmpserver/plugin/plugin_test.go index 8dba1d2c2bab1..d79c9ef064d38 100644 --- a/cmpserver/plugin/plugin_test.go +++ b/cmpserver/plugin/plugin_test.go @@ -796,6 +796,11 @@ func Test_getCommandArgsToLog(t *testing.T) { args: []string{"sh", "-c", `echo "hello world"`}, expected: `sh -c "echo \"hello world\""`, }, + { + name: "empty string arg", + args: []string{"sh", "-c", ""}, + expected: `sh -c ""`, + }, } for _, tc := range testCases { diff --git a/controller/appcontroller.go b/controller/appcontroller.go index 3a7e85096a3df..341ccad8ea2fc 100644 --- a/controller/appcontroller.go +++ b/controller/appcontroller.go @@ -1578,8 +1578,7 @@ func (ctrl *ApplicationController) processAppRefreshQueueItem() (processNext boo } // TODO: enable signature verification - objs, resp, err := ctrl.appStateManager.GetRepoObjs(app, drySources, appLabelKey, revisions, refreshType == appv1.RefreshTypeHard, - comparisonLevel == CompareWithLatestForceResolve, false, project) + objs, resp, err := ctrl.appStateManager.GetRepoObjs(app, drySources, appLabelKey, revisions, refreshType == appv1.RefreshTypeHard, comparisonLevel == CompareWithLatestForceResolve, false, project, false) if err != nil { logCtx.Errorf("Failed to get repo objects: %v", err) return diff --git a/controller/hook.go b/controller/hook.go index 0c019ac6a1e08..9e98fdaade3ae 100644 --- a/controller/hook.go +++ b/controller/hook.go @@ -51,7 +51,7 @@ func (ctrl *ApplicationController) executePostDeleteHooks(app *v1alpha1.Applicat revisions = append(revisions, src.TargetRevision) } - targets, _, err := ctrl.appStateManager.GetRepoObjs(app, app.Spec.GetSources(), appLabelKey, revisions, false, false, false, proj) + targets, _, err := ctrl.appStateManager.GetRepoObjs(app, app.Spec.GetSources(), appLabelKey, revisions, false, false, false, proj, true) if err != nil { return false, err } diff --git a/controller/state.go b/controller/state.go index 6e1a01d377f2d..8e93efa8feb20 100644 --- a/controller/state.go +++ b/controller/state.go @@ -72,7 +72,7 @@ type managedResource struct { type AppStateManager interface { CompareAppState(app *v1alpha1.Application, project *v1alpha1.AppProject, revisions []string, sources []v1alpha1.ApplicationSource, noCache bool, noRevisionCache bool, localObjects []string, hasMultipleSources bool) (*comparisonResult, error) SyncAppState(app *v1alpha1.Application, state *v1alpha1.OperationState) - GetRepoObjs(app *v1alpha1.Application, sources []v1alpha1.ApplicationSource, appLabelKey string, revisions []string, noCache, noRevisionCache, verifySignature bool, proj *v1alpha1.AppProject) ([]*unstructured.Unstructured, []*apiclient.ManifestResponse, error) + GetRepoObjs(app *v1alpha1.Application, sources []v1alpha1.ApplicationSource, appLabelKey string, revisions []string, noCache, noRevisionCache, verifySignature bool, proj *v1alpha1.AppProject, sendAppName bool) ([]*unstructured.Unstructured, []*apiclient.ManifestResponse, error) ResolveDryRevision(app *v1alpha1.Application) (string, error) } @@ -125,7 +125,7 @@ type appStateManager struct { // task to the repo-server. It returns the list of generated manifests as unstructured // objects. It also returns the full response from all calls to the repo server as the // second argument. -func (m *appStateManager) GetRepoObjs(app *v1alpha1.Application, sources []v1alpha1.ApplicationSource, appLabelKey string, revisions []string, noCache, noRevisionCache, verifySignature bool, proj *v1alpha1.AppProject) ([]*unstructured.Unstructured, []*apiclient.ManifestResponse, error) { +func (m *appStateManager) GetRepoObjs(app *v1alpha1.Application, sources []v1alpha1.ApplicationSource, appLabelKey string, revisions []string, noCache, noRevisionCache, verifySignature bool, proj *v1alpha1.AppProject, sendAppNameAndNamespace bool) ([]*unstructured.Unstructured, []*apiclient.ManifestResponse, error) { ts := stats.NewTimingStats() helmRepos, err := m.db.ListHelmRepositories(context.Background()) if err != nil { @@ -205,6 +205,13 @@ func (m *appStateManager) GetRepoObjs(app *v1alpha1.Application, sources []v1alp } } + appName := app.InstanceName(m.namespace) + appNamespace := app.Spec.Destination.Namespace + if !sendAppNameAndNamespace { + appName = "" + appNamespace = "" + } + val, ok := app.Annotations[v1alpha1.AnnotationKeyManifestGeneratePaths] if !source.IsHelm() && syncedRevision != "" && ok && val != "" { // Validate the manifest-generate-path annotation to avoid generating manifests if it has not changed. @@ -214,8 +221,8 @@ func (m *appStateManager) GetRepoObjs(app *v1alpha1.Application, sources []v1alp SyncedRevision: syncedRevision, Paths: path.GetAppRefreshPaths(app), AppLabelKey: appLabelKey, - AppName: app.InstanceName(m.namespace), - Namespace: app.Spec.Destination.Namespace, + AppName: appName, + Namespace: appNamespace, ApplicationSource: &source, KubeVersion: serverVersion, ApiVersions: argo.APIResourcesToStrings(apiResources, true), @@ -237,8 +244,8 @@ func (m *appStateManager) GetRepoObjs(app *v1alpha1.Application, sources []v1alp NoCache: noCache, NoRevisionCache: noRevisionCache, AppLabelKey: appLabelKey, - AppName: app.InstanceName(m.namespace), - Namespace: app.Spec.Destination.Namespace, + AppName: appName, + Namespace: appNamespace, ApplicationSource: &source, KustomizeOptions: kustomizeOptions, KubeVersion: serverVersion, @@ -475,7 +482,7 @@ func (m *appStateManager) CompareAppState(app *v1alpha1.Application, project *v1 } } - targetObjs, manifestInfos, err = m.GetRepoObjs(app, sources, appLabelKey, revisions, noCache, noRevisionCache, verifySignature, project) + targetObjs, manifestInfos, err = m.GetRepoObjs(app, sources, appLabelKey, revisions, noCache, noRevisionCache, verifySignature, project, true) if err != nil { targetObjs = make([]*unstructured.Unstructured, 0) msg := fmt.Sprintf("Failed to load target state: %s", err.Error()) diff --git a/hack/gen-resources/generators/cluster_generator.go b/hack/gen-resources/generators/cluster_generator.go index 6f125723c35ef..9ca3b6e549244 100644 --- a/hack/gen-resources/generators/cluster_generator.go +++ b/hack/gen-resources/generators/cluster_generator.go @@ -144,7 +144,7 @@ func (cg *ClusterGenerator) installVCluster(opts *util.GenerateOpts, namespace s return err } log.Print("Execute helm install command") - _, err = cmd.Freestyle("upgrade", "--install", releaseName, "vcluster", "--values", opts.ClusterOpts.ValuesFilePath, "--repo", "https://charts.loft.sh", "--namespace", namespace, "--repository-config", "", "--create-namespace", "--wait") + _, _, err = cmd.Freestyle("upgrade", "--install", releaseName, "vcluster", "--values", opts.ClusterOpts.ValuesFilePath, "--repo", "https://charts.loft.sh", "--namespace", namespace, "--repository-config", "", "--create-namespace", "--wait") if err != nil { return err } diff --git a/util/exec/exec.go b/util/exec/exec.go index 5bd7325695390..493d8855c8c80 100644 --- a/util/exec/exec.go +++ b/util/exec/exec.go @@ -66,6 +66,11 @@ func RunWithExecRunOpts(cmd *exec.Cmd, opts ExecRunOpts) (string, error) { func GetCommandArgsToLog(cmd *exec.Cmd) string { var argsToLog []string for _, arg := range cmd.Args { + if arg == "" { + argsToLog = append(argsToLog, `""`) + continue + } + containsSpace := false for _, r := range arg { if unicode.IsSpace(r) { diff --git a/util/helm/cmd.go b/util/helm/cmd.go index eafee54ca668c..dc2c236b31df6 100644 --- a/util/helm/cmd.go +++ b/util/helm/cmd.go @@ -334,8 +334,11 @@ func (c *Cmd) template(chartPath string, opts *TemplateOpts) (string, string, er } } - args := []string{"template", chartPath, c.templateNameArg, opts.Name} + args := []string{"template", chartPath} + if opts.Name != "" { + args = append(args, c.templateNameArg, opts.Name) + } if opts.Namespace != "" { args = append(args, "--namespace", opts.Namespace) } From c5138b1a79dfddb8db350b07a157c3dc7a6cc157 Mon Sep 17 00:00:00 2001 From: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> Date: Fri, 26 Apr 2024 15:28:24 -0400 Subject: [PATCH 07/15] more determinism Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> --- assets/swagger.json | 11 + controller/appcontroller.go | 2 +- controller/state.go | 11 +- docs/operator-manual/application.yaml | 14 + manifests/core-install.yaml | 434 +++++++ manifests/crds/application-crd.yaml | 146 +++ manifests/crds/applicationset-crd.yaml | 288 +++++ manifests/ha/install.yaml | 434 +++++++ manifests/install.yaml | 434 +++++++ pkg/apis/api-rules/violation_exceptions.list | 1 + pkg/apis/application/v1alpha1/generated.pb.go | 1112 +++++++++-------- pkg/apis/application/v1alpha1/generated.proto | 6 + .../application/v1alpha1/openapi_generated.go | 22 + pkg/apis/application/v1alpha1/types.go | 4 + .../v1alpha1/zz_generated.deepcopy.go | 5 + reposerver/repository/repository.go | 23 +- 16 files changed, 2429 insertions(+), 518 deletions(-) diff --git a/assets/swagger.json b/assets/swagger.json index 7cdc7383b2d14..20e2399816296 100644 --- a/assets/swagger.json +++ b/assets/swagger.json @@ -6329,6 +6329,13 @@ "type": "object", "title": "ApplicationSourceHelm holds helm specific options", "properties": { + "apiVersions": { + "description": "APIVersions is a list of Kubernetes API versions to use for templating. If not set, defaults to the server's preferred API versions.", + "type": "array", + "items": { + "type": "string" + } + }, "fileParameters": { "type": "array", "title": "FileParameters are file parameters to the helm template", @@ -6340,6 +6347,10 @@ "type": "boolean", "title": "IgnoreMissingValueFiles prevents helm template from failing when valueFiles do not exist locally by not appending them to helm template --values" }, + "kubeVersion": { + "description": "KubeVersions is the Kubernetes version to use for templating. If not set, defaults to the server's current Kubernetes version.", + "type": "string" + }, "parameters": { "type": "array", "title": "Parameters is a list of Helm parameters which are passed to the helm template command upon manifest generation", diff --git a/controller/appcontroller.go b/controller/appcontroller.go index 341ccad8ea2fc..4539e978853ef 100644 --- a/controller/appcontroller.go +++ b/controller/appcontroller.go @@ -1600,7 +1600,7 @@ func (ctrl *ApplicationController) processAppRefreshQueueItem() (processNext boo DrySHA: revision, CommitAuthorName: "Michael Crenshaw", CommitAuthorEmail: "350466+crenshaw-dev@users.noreply.github.com", - CommitMessage: fmt.Sprintf("hydrate %s", revision), + CommitMessage: fmt.Sprintf("[Argo CD Bot] hydrate %s", revision), CommitTime: time.Now(), Paths: paths, Commands: resp[0].Commands, diff --git a/controller/state.go b/controller/state.go index 8e93efa8feb20..9dbf10b446519 100644 --- a/controller/state.go +++ b/controller/state.go @@ -125,7 +125,7 @@ type appStateManager struct { // task to the repo-server. It returns the list of generated manifests as unstructured // objects. It also returns the full response from all calls to the repo server as the // second argument. -func (m *appStateManager) GetRepoObjs(app *v1alpha1.Application, sources []v1alpha1.ApplicationSource, appLabelKey string, revisions []string, noCache, noRevisionCache, verifySignature bool, proj *v1alpha1.AppProject, sendAppNameAndNamespace bool) ([]*unstructured.Unstructured, []*apiclient.ManifestResponse, error) { +func (m *appStateManager) GetRepoObjs(app *v1alpha1.Application, sources []v1alpha1.ApplicationSource, appLabelKey string, revisions []string, noCache, noRevisionCache, verifySignature bool, proj *v1alpha1.AppProject, sendRuntimeState bool) ([]*unstructured.Unstructured, []*apiclient.ManifestResponse, error) { ts := stats.NewTimingStats() helmRepos, err := m.db.ListHelmRepositories(context.Background()) if err != nil { @@ -207,9 +207,12 @@ func (m *appStateManager) GetRepoObjs(app *v1alpha1.Application, sources []v1alp appName := app.InstanceName(m.namespace) appNamespace := app.Spec.Destination.Namespace - if !sendAppNameAndNamespace { + apiVersions := argo.APIResourcesToStrings(apiResources, true) + if !sendRuntimeState { appName = "" appNamespace = "" + apiVersions = nil + serverVersion = "" } val, ok := app.Annotations[v1alpha1.AnnotationKeyManifestGeneratePaths] @@ -225,7 +228,7 @@ func (m *appStateManager) GetRepoObjs(app *v1alpha1.Application, sources []v1alp Namespace: appNamespace, ApplicationSource: &source, KubeVersion: serverVersion, - ApiVersions: argo.APIResourcesToStrings(apiResources, true), + ApiVersions: apiVersions, TrackingMethod: string(argo.GetTrackingMethod(m.settingsMgr)), RefSources: refSources, HasMultipleSources: app.Spec.HasMultipleSources(), @@ -249,7 +252,7 @@ func (m *appStateManager) GetRepoObjs(app *v1alpha1.Application, sources []v1alp ApplicationSource: &source, KustomizeOptions: kustomizeOptions, KubeVersion: serverVersion, - ApiVersions: argo.APIResourcesToStrings(apiResources, true), + ApiVersions: apiVersions, VerifySignature: verifySignature, HelmRepoCreds: permittedHelmCredentials, TrackingMethod: string(argo.GetTrackingMethod(m.settingsMgr)), diff --git a/docs/operator-manual/application.yaml b/docs/operator-manual/application.yaml index 864a293ce6890..a8a805af08a27 100644 --- a/docs/operator-manual/application.yaml +++ b/docs/operator-manual/application.yaml @@ -90,6 +90,20 @@ spec: # and decide which Helm binary to use automatically. This field can be either 'v2' or 'v3'. version: v2 + # You can specify the Kubernetes API version to pass to Helm when templating manifests. By default, Argo CD uses + # the Kubernetes version of the target cluster. + # This field is useful primarily when using sourceHydrator, which requires the Kubernetes version to be set + # explicitly in .argocd-source.yaml. + kubeVersion: v1.30 + + # You can specify the Kubernetes API version to pass to Helm when templating manifests. By default, Argo CD uses + # the API versions of the target cluster. The format is [group/]version/kind. + # This field is useful primarily when using sourceHydrator, which requires the API versions to be set explicitly + # in .argocd-source.yaml. + apiVersions: + - traefik.io/v1alpha1/TLSOption + - v1/Service + # kustomize specific config kustomize: # Optional kustomize version. Note: version must be configured in argocd-cm ConfigMap diff --git a/manifests/core-install.yaml b/manifests/core-install.yaml index e091d1873ac25..fd4de9aa987bb 100644 --- a/manifests/core-install.yaml +++ b/manifests/core-install.yaml @@ -230,6 +230,13 @@ spec: helm: description: Helm holds helm specific options properties: + apiVersions: + description: APIVersions is a list of Kubernetes API versions + to use for templating. If not set, defaults to the server's + preferred API versions. + items: + type: string + type: array fileParameters: description: FileParameters are file parameters to the helm template @@ -251,6 +258,11 @@ spec: from failing when valueFiles do not exist locally by not appending them to helm template --values type: boolean + kubeVersion: + description: KubeVersions is the Kubernetes version to + use for templating. If not set, defaults to the server's + current Kubernetes version. + type: string parameters: description: Parameters is a list of Helm parameters which are passed to the helm template command upon manifest @@ -566,6 +578,13 @@ spec: helm: description: Helm holds helm specific options properties: + apiVersions: + description: APIVersions is a list of Kubernetes API + versions to use for templating. If not set, defaults + to the server's preferred API versions. + items: + type: string + type: array fileParameters: description: FileParameters are file parameters to the helm template @@ -587,6 +606,11 @@ spec: from failing when valueFiles do not exist locally by not appending them to helm template --values type: boolean + kubeVersion: + description: KubeVersions is the Kubernetes version + to use for templating. If not set, defaults to the + server's current Kubernetes version. + type: string parameters: description: Parameters is a list of Helm parameters which are passed to the helm template command upon @@ -1021,6 +1045,13 @@ spec: helm: description: Helm holds helm specific options properties: + apiVersions: + description: APIVersions is a list of Kubernetes API versions + to use for templating. If not set, defaults to the server's + preferred API versions. + items: + type: string + type: array fileParameters: description: FileParameters are file parameters to the helm template @@ -1042,6 +1073,11 @@ spec: from failing when valueFiles do not exist locally by not appending them to helm template --values type: boolean + kubeVersion: + description: KubeVersions is the Kubernetes version to use + for templating. If not set, defaults to the server's current + Kubernetes version. + type: string parameters: description: Parameters is a list of Helm parameters which are passed to the helm template command upon manifest generation @@ -1393,6 +1429,13 @@ spec: helm: description: Helm holds helm specific options properties: + apiVersions: + description: APIVersions is a list of Kubernetes API versions + to use for templating. If not set, defaults to the server's + preferred API versions. + items: + type: string + type: array fileParameters: description: FileParameters are file parameters to the helm template @@ -1414,6 +1457,11 @@ spec: from failing when valueFiles do not exist locally by not appending them to helm template --values type: boolean + kubeVersion: + description: KubeVersions is the Kubernetes version to use + for templating. If not set, defaults to the server's current + Kubernetes version. + type: string parameters: description: Parameters is a list of Helm parameters which are passed to the helm template command upon manifest @@ -1885,6 +1933,13 @@ spec: helm: description: Helm holds helm specific options properties: + apiVersions: + description: APIVersions is a list of Kubernetes API + versions to use for templating. If not set, defaults + to the server's preferred API versions. + items: + type: string + type: array fileParameters: description: FileParameters are file parameters to the helm template @@ -1906,6 +1961,11 @@ spec: from failing when valueFiles do not exist locally by not appending them to helm template --values type: boolean + kubeVersion: + description: KubeVersions is the Kubernetes version + to use for templating. If not set, defaults to the + server's current Kubernetes version. + type: string parameters: description: Parameters is a list of Helm parameters which are passed to the helm template command upon @@ -2223,6 +2283,13 @@ spec: helm: description: Helm holds helm specific options properties: + apiVersions: + description: APIVersions is a list of Kubernetes API + versions to use for templating. If not set, defaults + to the server's preferred API versions. + items: + type: string + type: array fileParameters: description: FileParameters are file parameters to the helm template @@ -2245,6 +2312,11 @@ spec: template from failing when valueFiles do not exist locally by not appending them to helm template --values type: boolean + kubeVersion: + description: KubeVersions is the Kubernetes version + to use for templating. If not set, defaults to the + server's current Kubernetes version. + type: string parameters: description: Parameters is a list of Helm parameters which are passed to the helm template command upon @@ -2704,6 +2776,13 @@ spec: helm: description: Helm holds helm specific options properties: + apiVersions: + description: APIVersions is a list of Kubernetes + API versions to use for templating. If not set, + defaults to the server's preferred API versions. + items: + type: string + type: array fileParameters: description: FileParameters are file parameters to the helm template @@ -2728,6 +2807,11 @@ spec: not exist locally by not appending them to helm template --values type: boolean + kubeVersion: + description: KubeVersions is the Kubernetes version + to use for templating. If not set, defaults + to the server's current Kubernetes version. + type: string parameters: description: Parameters is a list of Helm parameters which are passed to the helm template command @@ -3061,6 +3145,14 @@ spec: helm: description: Helm holds helm specific options properties: + apiVersions: + description: APIVersions is a list of Kubernetes + API versions to use for templating. If not + set, defaults to the server's preferred API + versions. + items: + type: string + type: array fileParameters: description: FileParameters are file parameters to the helm template @@ -3085,6 +3177,12 @@ spec: do not exist locally by not appending them to helm template --values type: boolean + kubeVersion: + description: KubeVersions is the Kubernetes + version to use for templating. If not set, + defaults to the server's current Kubernetes + version. + type: string parameters: description: Parameters is a list of Helm parameters which are passed to the helm template command @@ -3541,6 +3639,13 @@ spec: helm: description: Helm holds helm specific options properties: + apiVersions: + description: APIVersions is a list of Kubernetes API + versions to use for templating. If not set, defaults + to the server's preferred API versions. + items: + type: string + type: array fileParameters: description: FileParameters are file parameters to the helm template @@ -3563,6 +3668,11 @@ spec: template from failing when valueFiles do not exist locally by not appending them to helm template --values type: boolean + kubeVersion: + description: KubeVersions is the Kubernetes version + to use for templating. If not set, defaults to the + server's current Kubernetes version. + type: string parameters: description: Parameters is a list of Helm parameters which are passed to the helm template command upon @@ -3889,6 +3999,13 @@ spec: helm: description: Helm holds helm specific options properties: + apiVersions: + description: APIVersions is a list of Kubernetes + API versions to use for templating. If not set, + defaults to the server's preferred API versions. + items: + type: string + type: array fileParameters: description: FileParameters are file parameters to the helm template @@ -3913,6 +4030,11 @@ spec: locally by not appending them to helm template --values type: boolean + kubeVersion: + description: KubeVersions is the Kubernetes version + to use for templating. If not set, defaults to + the server's current Kubernetes version. + type: string parameters: description: Parameters is a list of Helm parameters which are passed to the helm template command @@ -4413,6 +4535,13 @@ spec: helm: description: Helm holds helm specific options properties: + apiVersions: + description: APIVersions is a list of Kubernetes API + versions to use for templating. If not set, defaults + to the server's preferred API versions. + items: + type: string + type: array fileParameters: description: FileParameters are file parameters to the helm template @@ -4435,6 +4564,11 @@ spec: template from failing when valueFiles do not exist locally by not appending them to helm template --values type: boolean + kubeVersion: + description: KubeVersions is the Kubernetes version + to use for templating. If not set, defaults to the + server's current Kubernetes version. + type: string parameters: description: Parameters is a list of Helm parameters which are passed to the helm template command upon @@ -4761,6 +4895,13 @@ spec: helm: description: Helm holds helm specific options properties: + apiVersions: + description: APIVersions is a list of Kubernetes + API versions to use for templating. If not set, + defaults to the server's preferred API versions. + items: + type: string + type: array fileParameters: description: FileParameters are file parameters to the helm template @@ -4785,6 +4926,11 @@ spec: locally by not appending them to helm template --values type: boolean + kubeVersion: + description: KubeVersions is the Kubernetes version + to use for templating. If not set, defaults to + the server's current Kubernetes version. + type: string parameters: description: Parameters is a list of Helm parameters which are passed to the helm template command @@ -5259,6 +5405,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -5270,6 +5420,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -5511,6 +5663,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -5522,6 +5678,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -5887,6 +6045,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -5898,6 +6060,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -6139,6 +6303,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -6150,6 +6318,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -6518,6 +6688,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -6529,6 +6703,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -6770,6 +6946,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -6781,6 +6961,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -7129,6 +7311,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -7140,6 +7326,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -7381,6 +7569,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -7392,6 +7584,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -7763,6 +7957,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -7774,6 +7972,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -8015,6 +8215,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -8026,6 +8230,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -8391,6 +8597,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -8402,6 +8612,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -8643,6 +8855,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -8654,6 +8870,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -9022,6 +9240,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -9033,6 +9255,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -9274,6 +9498,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -9285,6 +9513,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -9633,6 +9863,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -9644,6 +9878,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -9885,6 +10121,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -9896,6 +10136,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -10252,6 +10494,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -10263,6 +10509,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -10504,6 +10752,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -10515,6 +10767,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -11053,6 +11307,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -11064,6 +11322,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -11305,6 +11565,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -11316,6 +11580,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -11849,6 +12115,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -11860,6 +12130,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -12101,6 +12373,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -12112,6 +12388,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -12475,6 +12753,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -12486,6 +12768,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -12727,6 +13011,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -12738,6 +13026,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -13111,6 +13401,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -13122,6 +13416,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -13363,6 +13659,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -13374,6 +13674,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -13739,6 +14041,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -13750,6 +14056,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -13991,6 +14299,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -14002,6 +14314,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -14370,6 +14684,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -14381,6 +14699,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -14622,6 +14942,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -14633,6 +14957,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -14981,6 +15307,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -14992,6 +15322,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -15233,6 +15565,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -15244,6 +15580,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -15600,6 +15938,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -15611,6 +15953,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -15852,6 +16196,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -15863,6 +16211,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -16401,6 +16751,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -16412,6 +16766,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -16653,6 +17009,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -16664,6 +17024,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -17197,6 +17559,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -17208,6 +17574,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -17449,6 +17817,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -17460,6 +17832,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -17827,6 +18201,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -17838,6 +18216,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -18079,6 +18459,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -18090,6 +18474,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -18445,6 +18831,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -18456,6 +18846,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -18697,6 +19089,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -18708,6 +19104,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -19246,6 +19644,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -19257,6 +19659,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -19498,6 +19902,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -19509,6 +19917,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -20042,6 +20452,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -20053,6 +20467,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -20294,6 +20710,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -20305,6 +20725,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -20743,6 +21165,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -20754,6 +21180,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -20995,6 +21423,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -21006,6 +21438,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: diff --git a/manifests/crds/application-crd.yaml b/manifests/crds/application-crd.yaml index 21d4cdfb2aa87..c276a5ad14760 100644 --- a/manifests/crds/application-crd.yaml +++ b/manifests/crds/application-crd.yaml @@ -229,6 +229,13 @@ spec: helm: description: Helm holds helm specific options properties: + apiVersions: + description: APIVersions is a list of Kubernetes API versions + to use for templating. If not set, defaults to the server's + preferred API versions. + items: + type: string + type: array fileParameters: description: FileParameters are file parameters to the helm template @@ -250,6 +257,11 @@ spec: from failing when valueFiles do not exist locally by not appending them to helm template --values type: boolean + kubeVersion: + description: KubeVersions is the Kubernetes version to + use for templating. If not set, defaults to the server's + current Kubernetes version. + type: string parameters: description: Parameters is a list of Helm parameters which are passed to the helm template command upon manifest @@ -565,6 +577,13 @@ spec: helm: description: Helm holds helm specific options properties: + apiVersions: + description: APIVersions is a list of Kubernetes API + versions to use for templating. If not set, defaults + to the server's preferred API versions. + items: + type: string + type: array fileParameters: description: FileParameters are file parameters to the helm template @@ -586,6 +605,11 @@ spec: from failing when valueFiles do not exist locally by not appending them to helm template --values type: boolean + kubeVersion: + description: KubeVersions is the Kubernetes version + to use for templating. If not set, defaults to the + server's current Kubernetes version. + type: string parameters: description: Parameters is a list of Helm parameters which are passed to the helm template command upon @@ -1020,6 +1044,13 @@ spec: helm: description: Helm holds helm specific options properties: + apiVersions: + description: APIVersions is a list of Kubernetes API versions + to use for templating. If not set, defaults to the server's + preferred API versions. + items: + type: string + type: array fileParameters: description: FileParameters are file parameters to the helm template @@ -1041,6 +1072,11 @@ spec: from failing when valueFiles do not exist locally by not appending them to helm template --values type: boolean + kubeVersion: + description: KubeVersions is the Kubernetes version to use + for templating. If not set, defaults to the server's current + Kubernetes version. + type: string parameters: description: Parameters is a list of Helm parameters which are passed to the helm template command upon manifest generation @@ -1392,6 +1428,13 @@ spec: helm: description: Helm holds helm specific options properties: + apiVersions: + description: APIVersions is a list of Kubernetes API versions + to use for templating. If not set, defaults to the server's + preferred API versions. + items: + type: string + type: array fileParameters: description: FileParameters are file parameters to the helm template @@ -1413,6 +1456,11 @@ spec: from failing when valueFiles do not exist locally by not appending them to helm template --values type: boolean + kubeVersion: + description: KubeVersions is the Kubernetes version to use + for templating. If not set, defaults to the server's current + Kubernetes version. + type: string parameters: description: Parameters is a list of Helm parameters which are passed to the helm template command upon manifest @@ -1884,6 +1932,13 @@ spec: helm: description: Helm holds helm specific options properties: + apiVersions: + description: APIVersions is a list of Kubernetes API + versions to use for templating. If not set, defaults + to the server's preferred API versions. + items: + type: string + type: array fileParameters: description: FileParameters are file parameters to the helm template @@ -1905,6 +1960,11 @@ spec: from failing when valueFiles do not exist locally by not appending them to helm template --values type: boolean + kubeVersion: + description: KubeVersions is the Kubernetes version + to use for templating. If not set, defaults to the + server's current Kubernetes version. + type: string parameters: description: Parameters is a list of Helm parameters which are passed to the helm template command upon @@ -2222,6 +2282,13 @@ spec: helm: description: Helm holds helm specific options properties: + apiVersions: + description: APIVersions is a list of Kubernetes API + versions to use for templating. If not set, defaults + to the server's preferred API versions. + items: + type: string + type: array fileParameters: description: FileParameters are file parameters to the helm template @@ -2244,6 +2311,11 @@ spec: template from failing when valueFiles do not exist locally by not appending them to helm template --values type: boolean + kubeVersion: + description: KubeVersions is the Kubernetes version + to use for templating. If not set, defaults to the + server's current Kubernetes version. + type: string parameters: description: Parameters is a list of Helm parameters which are passed to the helm template command upon @@ -2703,6 +2775,13 @@ spec: helm: description: Helm holds helm specific options properties: + apiVersions: + description: APIVersions is a list of Kubernetes + API versions to use for templating. If not set, + defaults to the server's preferred API versions. + items: + type: string + type: array fileParameters: description: FileParameters are file parameters to the helm template @@ -2727,6 +2806,11 @@ spec: not exist locally by not appending them to helm template --values type: boolean + kubeVersion: + description: KubeVersions is the Kubernetes version + to use for templating. If not set, defaults + to the server's current Kubernetes version. + type: string parameters: description: Parameters is a list of Helm parameters which are passed to the helm template command @@ -3060,6 +3144,14 @@ spec: helm: description: Helm holds helm specific options properties: + apiVersions: + description: APIVersions is a list of Kubernetes + API versions to use for templating. If not + set, defaults to the server's preferred API + versions. + items: + type: string + type: array fileParameters: description: FileParameters are file parameters to the helm template @@ -3084,6 +3176,12 @@ spec: do not exist locally by not appending them to helm template --values type: boolean + kubeVersion: + description: KubeVersions is the Kubernetes + version to use for templating. If not set, + defaults to the server's current Kubernetes + version. + type: string parameters: description: Parameters is a list of Helm parameters which are passed to the helm template command @@ -3540,6 +3638,13 @@ spec: helm: description: Helm holds helm specific options properties: + apiVersions: + description: APIVersions is a list of Kubernetes API + versions to use for templating. If not set, defaults + to the server's preferred API versions. + items: + type: string + type: array fileParameters: description: FileParameters are file parameters to the helm template @@ -3562,6 +3667,11 @@ spec: template from failing when valueFiles do not exist locally by not appending them to helm template --values type: boolean + kubeVersion: + description: KubeVersions is the Kubernetes version + to use for templating. If not set, defaults to the + server's current Kubernetes version. + type: string parameters: description: Parameters is a list of Helm parameters which are passed to the helm template command upon @@ -3888,6 +3998,13 @@ spec: helm: description: Helm holds helm specific options properties: + apiVersions: + description: APIVersions is a list of Kubernetes + API versions to use for templating. If not set, + defaults to the server's preferred API versions. + items: + type: string + type: array fileParameters: description: FileParameters are file parameters to the helm template @@ -3912,6 +4029,11 @@ spec: locally by not appending them to helm template --values type: boolean + kubeVersion: + description: KubeVersions is the Kubernetes version + to use for templating. If not set, defaults to + the server's current Kubernetes version. + type: string parameters: description: Parameters is a list of Helm parameters which are passed to the helm template command @@ -4412,6 +4534,13 @@ spec: helm: description: Helm holds helm specific options properties: + apiVersions: + description: APIVersions is a list of Kubernetes API + versions to use for templating. If not set, defaults + to the server's preferred API versions. + items: + type: string + type: array fileParameters: description: FileParameters are file parameters to the helm template @@ -4434,6 +4563,11 @@ spec: template from failing when valueFiles do not exist locally by not appending them to helm template --values type: boolean + kubeVersion: + description: KubeVersions is the Kubernetes version + to use for templating. If not set, defaults to the + server's current Kubernetes version. + type: string parameters: description: Parameters is a list of Helm parameters which are passed to the helm template command upon @@ -4760,6 +4894,13 @@ spec: helm: description: Helm holds helm specific options properties: + apiVersions: + description: APIVersions is a list of Kubernetes + API versions to use for templating. If not set, + defaults to the server's preferred API versions. + items: + type: string + type: array fileParameters: description: FileParameters are file parameters to the helm template @@ -4784,6 +4925,11 @@ spec: locally by not appending them to helm template --values type: boolean + kubeVersion: + description: KubeVersions is the Kubernetes version + to use for templating. If not set, defaults to + the server's current Kubernetes version. + type: string parameters: description: Parameters is a list of Helm parameters which are passed to the helm template command diff --git a/manifests/crds/applicationset-crd.yaml b/manifests/crds/applicationset-crd.yaml index 2c5f6b75708f9..c565c43750e7f 100644 --- a/manifests/crds/applicationset-crd.yaml +++ b/manifests/crds/applicationset-crd.yaml @@ -193,6 +193,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -204,6 +208,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -445,6 +451,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -456,6 +466,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -821,6 +833,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -832,6 +848,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -1073,6 +1091,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -1084,6 +1106,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -1452,6 +1476,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -1463,6 +1491,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -1704,6 +1734,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -1715,6 +1749,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -2063,6 +2099,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -2074,6 +2114,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -2315,6 +2357,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -2326,6 +2372,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -2697,6 +2745,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -2708,6 +2760,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -2949,6 +3003,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -2960,6 +3018,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -3325,6 +3385,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -3336,6 +3400,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -3577,6 +3643,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -3588,6 +3658,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -3956,6 +4028,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -3967,6 +4043,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -4208,6 +4286,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -4219,6 +4301,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -4567,6 +4651,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -4578,6 +4666,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -4819,6 +4909,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -4830,6 +4924,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -5186,6 +5282,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -5197,6 +5297,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -5438,6 +5540,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -5449,6 +5555,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -5987,6 +6095,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -5998,6 +6110,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -6239,6 +6353,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -6250,6 +6368,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -6783,6 +6903,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -6794,6 +6918,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -7035,6 +7161,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -7046,6 +7176,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -7409,6 +7541,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -7420,6 +7556,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -7661,6 +7799,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -7672,6 +7814,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -8045,6 +8189,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -8056,6 +8204,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -8297,6 +8447,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -8308,6 +8462,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -8673,6 +8829,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -8684,6 +8844,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -8925,6 +9087,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -8936,6 +9102,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -9304,6 +9472,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -9315,6 +9487,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -9556,6 +9730,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -9567,6 +9745,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -9915,6 +10095,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -9926,6 +10110,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -10167,6 +10353,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -10178,6 +10368,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -10534,6 +10726,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -10545,6 +10741,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -10786,6 +10984,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -10797,6 +10999,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -11335,6 +11539,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -11346,6 +11554,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -11587,6 +11797,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -11598,6 +11812,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -12131,6 +12347,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -12142,6 +12362,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -12383,6 +12605,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -12394,6 +12620,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -12761,6 +12989,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -12772,6 +13004,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -13013,6 +13247,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -13024,6 +13262,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -13379,6 +13619,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -13390,6 +13634,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -13631,6 +13877,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -13642,6 +13892,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -14180,6 +14432,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -14191,6 +14447,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -14432,6 +14690,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -14443,6 +14705,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -14976,6 +15240,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -14987,6 +15255,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -15228,6 +15498,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -15239,6 +15513,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -15677,6 +15953,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -15688,6 +15968,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -15929,6 +16211,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -15940,6 +16226,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: diff --git a/manifests/ha/install.yaml b/manifests/ha/install.yaml index 222c0e2f6f906..2b8ba0544da64 100644 --- a/manifests/ha/install.yaml +++ b/manifests/ha/install.yaml @@ -230,6 +230,13 @@ spec: helm: description: Helm holds helm specific options properties: + apiVersions: + description: APIVersions is a list of Kubernetes API versions + to use for templating. If not set, defaults to the server's + preferred API versions. + items: + type: string + type: array fileParameters: description: FileParameters are file parameters to the helm template @@ -251,6 +258,11 @@ spec: from failing when valueFiles do not exist locally by not appending them to helm template --values type: boolean + kubeVersion: + description: KubeVersions is the Kubernetes version to + use for templating. If not set, defaults to the server's + current Kubernetes version. + type: string parameters: description: Parameters is a list of Helm parameters which are passed to the helm template command upon manifest @@ -566,6 +578,13 @@ spec: helm: description: Helm holds helm specific options properties: + apiVersions: + description: APIVersions is a list of Kubernetes API + versions to use for templating. If not set, defaults + to the server's preferred API versions. + items: + type: string + type: array fileParameters: description: FileParameters are file parameters to the helm template @@ -587,6 +606,11 @@ spec: from failing when valueFiles do not exist locally by not appending them to helm template --values type: boolean + kubeVersion: + description: KubeVersions is the Kubernetes version + to use for templating. If not set, defaults to the + server's current Kubernetes version. + type: string parameters: description: Parameters is a list of Helm parameters which are passed to the helm template command upon @@ -1021,6 +1045,13 @@ spec: helm: description: Helm holds helm specific options properties: + apiVersions: + description: APIVersions is a list of Kubernetes API versions + to use for templating. If not set, defaults to the server's + preferred API versions. + items: + type: string + type: array fileParameters: description: FileParameters are file parameters to the helm template @@ -1042,6 +1073,11 @@ spec: from failing when valueFiles do not exist locally by not appending them to helm template --values type: boolean + kubeVersion: + description: KubeVersions is the Kubernetes version to use + for templating. If not set, defaults to the server's current + Kubernetes version. + type: string parameters: description: Parameters is a list of Helm parameters which are passed to the helm template command upon manifest generation @@ -1393,6 +1429,13 @@ spec: helm: description: Helm holds helm specific options properties: + apiVersions: + description: APIVersions is a list of Kubernetes API versions + to use for templating. If not set, defaults to the server's + preferred API versions. + items: + type: string + type: array fileParameters: description: FileParameters are file parameters to the helm template @@ -1414,6 +1457,11 @@ spec: from failing when valueFiles do not exist locally by not appending them to helm template --values type: boolean + kubeVersion: + description: KubeVersions is the Kubernetes version to use + for templating. If not set, defaults to the server's current + Kubernetes version. + type: string parameters: description: Parameters is a list of Helm parameters which are passed to the helm template command upon manifest @@ -1885,6 +1933,13 @@ spec: helm: description: Helm holds helm specific options properties: + apiVersions: + description: APIVersions is a list of Kubernetes API + versions to use for templating. If not set, defaults + to the server's preferred API versions. + items: + type: string + type: array fileParameters: description: FileParameters are file parameters to the helm template @@ -1906,6 +1961,11 @@ spec: from failing when valueFiles do not exist locally by not appending them to helm template --values type: boolean + kubeVersion: + description: KubeVersions is the Kubernetes version + to use for templating. If not set, defaults to the + server's current Kubernetes version. + type: string parameters: description: Parameters is a list of Helm parameters which are passed to the helm template command upon @@ -2223,6 +2283,13 @@ spec: helm: description: Helm holds helm specific options properties: + apiVersions: + description: APIVersions is a list of Kubernetes API + versions to use for templating. If not set, defaults + to the server's preferred API versions. + items: + type: string + type: array fileParameters: description: FileParameters are file parameters to the helm template @@ -2245,6 +2312,11 @@ spec: template from failing when valueFiles do not exist locally by not appending them to helm template --values type: boolean + kubeVersion: + description: KubeVersions is the Kubernetes version + to use for templating. If not set, defaults to the + server's current Kubernetes version. + type: string parameters: description: Parameters is a list of Helm parameters which are passed to the helm template command upon @@ -2704,6 +2776,13 @@ spec: helm: description: Helm holds helm specific options properties: + apiVersions: + description: APIVersions is a list of Kubernetes + API versions to use for templating. If not set, + defaults to the server's preferred API versions. + items: + type: string + type: array fileParameters: description: FileParameters are file parameters to the helm template @@ -2728,6 +2807,11 @@ spec: not exist locally by not appending them to helm template --values type: boolean + kubeVersion: + description: KubeVersions is the Kubernetes version + to use for templating. If not set, defaults + to the server's current Kubernetes version. + type: string parameters: description: Parameters is a list of Helm parameters which are passed to the helm template command @@ -3061,6 +3145,14 @@ spec: helm: description: Helm holds helm specific options properties: + apiVersions: + description: APIVersions is a list of Kubernetes + API versions to use for templating. If not + set, defaults to the server's preferred API + versions. + items: + type: string + type: array fileParameters: description: FileParameters are file parameters to the helm template @@ -3085,6 +3177,12 @@ spec: do not exist locally by not appending them to helm template --values type: boolean + kubeVersion: + description: KubeVersions is the Kubernetes + version to use for templating. If not set, + defaults to the server's current Kubernetes + version. + type: string parameters: description: Parameters is a list of Helm parameters which are passed to the helm template command @@ -3541,6 +3639,13 @@ spec: helm: description: Helm holds helm specific options properties: + apiVersions: + description: APIVersions is a list of Kubernetes API + versions to use for templating. If not set, defaults + to the server's preferred API versions. + items: + type: string + type: array fileParameters: description: FileParameters are file parameters to the helm template @@ -3563,6 +3668,11 @@ spec: template from failing when valueFiles do not exist locally by not appending them to helm template --values type: boolean + kubeVersion: + description: KubeVersions is the Kubernetes version + to use for templating. If not set, defaults to the + server's current Kubernetes version. + type: string parameters: description: Parameters is a list of Helm parameters which are passed to the helm template command upon @@ -3889,6 +3999,13 @@ spec: helm: description: Helm holds helm specific options properties: + apiVersions: + description: APIVersions is a list of Kubernetes + API versions to use for templating. If not set, + defaults to the server's preferred API versions. + items: + type: string + type: array fileParameters: description: FileParameters are file parameters to the helm template @@ -3913,6 +4030,11 @@ spec: locally by not appending them to helm template --values type: boolean + kubeVersion: + description: KubeVersions is the Kubernetes version + to use for templating. If not set, defaults to + the server's current Kubernetes version. + type: string parameters: description: Parameters is a list of Helm parameters which are passed to the helm template command @@ -4413,6 +4535,13 @@ spec: helm: description: Helm holds helm specific options properties: + apiVersions: + description: APIVersions is a list of Kubernetes API + versions to use for templating. If not set, defaults + to the server's preferred API versions. + items: + type: string + type: array fileParameters: description: FileParameters are file parameters to the helm template @@ -4435,6 +4564,11 @@ spec: template from failing when valueFiles do not exist locally by not appending them to helm template --values type: boolean + kubeVersion: + description: KubeVersions is the Kubernetes version + to use for templating. If not set, defaults to the + server's current Kubernetes version. + type: string parameters: description: Parameters is a list of Helm parameters which are passed to the helm template command upon @@ -4761,6 +4895,13 @@ spec: helm: description: Helm holds helm specific options properties: + apiVersions: + description: APIVersions is a list of Kubernetes + API versions to use for templating. If not set, + defaults to the server's preferred API versions. + items: + type: string + type: array fileParameters: description: FileParameters are file parameters to the helm template @@ -4785,6 +4926,11 @@ spec: locally by not appending them to helm template --values type: boolean + kubeVersion: + description: KubeVersions is the Kubernetes version + to use for templating. If not set, defaults to + the server's current Kubernetes version. + type: string parameters: description: Parameters is a list of Helm parameters which are passed to the helm template command @@ -5259,6 +5405,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -5270,6 +5420,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -5511,6 +5663,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -5522,6 +5678,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -5887,6 +6045,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -5898,6 +6060,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -6139,6 +6303,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -6150,6 +6318,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -6518,6 +6688,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -6529,6 +6703,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -6770,6 +6946,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -6781,6 +6961,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -7129,6 +7311,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -7140,6 +7326,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -7381,6 +7569,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -7392,6 +7584,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -7763,6 +7957,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -7774,6 +7972,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -8015,6 +8215,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -8026,6 +8230,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -8391,6 +8597,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -8402,6 +8612,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -8643,6 +8855,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -8654,6 +8870,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -9022,6 +9240,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -9033,6 +9255,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -9274,6 +9498,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -9285,6 +9513,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -9633,6 +9863,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -9644,6 +9878,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -9885,6 +10121,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -9896,6 +10136,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -10252,6 +10494,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -10263,6 +10509,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -10504,6 +10752,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -10515,6 +10767,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -11053,6 +11307,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -11064,6 +11322,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -11305,6 +11565,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -11316,6 +11580,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -11849,6 +12115,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -11860,6 +12130,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -12101,6 +12373,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -12112,6 +12388,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -12475,6 +12753,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -12486,6 +12768,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -12727,6 +13011,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -12738,6 +13026,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -13111,6 +13401,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -13122,6 +13416,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -13363,6 +13659,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -13374,6 +13674,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -13739,6 +14041,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -13750,6 +14056,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -13991,6 +14299,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -14002,6 +14314,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -14370,6 +14684,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -14381,6 +14699,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -14622,6 +14942,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -14633,6 +14957,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -14981,6 +15307,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -14992,6 +15322,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -15233,6 +15565,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -15244,6 +15580,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -15600,6 +15938,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -15611,6 +15953,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -15852,6 +16196,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -15863,6 +16211,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -16401,6 +16751,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -16412,6 +16766,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -16653,6 +17009,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -16664,6 +17024,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -17197,6 +17559,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -17208,6 +17574,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -17449,6 +17817,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -17460,6 +17832,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -17827,6 +18201,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -17838,6 +18216,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -18079,6 +18459,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -18090,6 +18474,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -18445,6 +18831,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -18456,6 +18846,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -18697,6 +19089,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -18708,6 +19104,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -19246,6 +19644,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -19257,6 +19659,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -19498,6 +19902,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -19509,6 +19917,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -20042,6 +20452,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -20053,6 +20467,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -20294,6 +20710,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -20305,6 +20725,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -20743,6 +21165,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -20754,6 +21180,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -20995,6 +21423,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -21006,6 +21438,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: diff --git a/manifests/install.yaml b/manifests/install.yaml index 7101203253864..dc8a86e7558e8 100644 --- a/manifests/install.yaml +++ b/manifests/install.yaml @@ -230,6 +230,13 @@ spec: helm: description: Helm holds helm specific options properties: + apiVersions: + description: APIVersions is a list of Kubernetes API versions + to use for templating. If not set, defaults to the server's + preferred API versions. + items: + type: string + type: array fileParameters: description: FileParameters are file parameters to the helm template @@ -251,6 +258,11 @@ spec: from failing when valueFiles do not exist locally by not appending them to helm template --values type: boolean + kubeVersion: + description: KubeVersions is the Kubernetes version to + use for templating. If not set, defaults to the server's + current Kubernetes version. + type: string parameters: description: Parameters is a list of Helm parameters which are passed to the helm template command upon manifest @@ -566,6 +578,13 @@ spec: helm: description: Helm holds helm specific options properties: + apiVersions: + description: APIVersions is a list of Kubernetes API + versions to use for templating. If not set, defaults + to the server's preferred API versions. + items: + type: string + type: array fileParameters: description: FileParameters are file parameters to the helm template @@ -587,6 +606,11 @@ spec: from failing when valueFiles do not exist locally by not appending them to helm template --values type: boolean + kubeVersion: + description: KubeVersions is the Kubernetes version + to use for templating. If not set, defaults to the + server's current Kubernetes version. + type: string parameters: description: Parameters is a list of Helm parameters which are passed to the helm template command upon @@ -1021,6 +1045,13 @@ spec: helm: description: Helm holds helm specific options properties: + apiVersions: + description: APIVersions is a list of Kubernetes API versions + to use for templating. If not set, defaults to the server's + preferred API versions. + items: + type: string + type: array fileParameters: description: FileParameters are file parameters to the helm template @@ -1042,6 +1073,11 @@ spec: from failing when valueFiles do not exist locally by not appending them to helm template --values type: boolean + kubeVersion: + description: KubeVersions is the Kubernetes version to use + for templating. If not set, defaults to the server's current + Kubernetes version. + type: string parameters: description: Parameters is a list of Helm parameters which are passed to the helm template command upon manifest generation @@ -1393,6 +1429,13 @@ spec: helm: description: Helm holds helm specific options properties: + apiVersions: + description: APIVersions is a list of Kubernetes API versions + to use for templating. If not set, defaults to the server's + preferred API versions. + items: + type: string + type: array fileParameters: description: FileParameters are file parameters to the helm template @@ -1414,6 +1457,11 @@ spec: from failing when valueFiles do not exist locally by not appending them to helm template --values type: boolean + kubeVersion: + description: KubeVersions is the Kubernetes version to use + for templating. If not set, defaults to the server's current + Kubernetes version. + type: string parameters: description: Parameters is a list of Helm parameters which are passed to the helm template command upon manifest @@ -1885,6 +1933,13 @@ spec: helm: description: Helm holds helm specific options properties: + apiVersions: + description: APIVersions is a list of Kubernetes API + versions to use for templating. If not set, defaults + to the server's preferred API versions. + items: + type: string + type: array fileParameters: description: FileParameters are file parameters to the helm template @@ -1906,6 +1961,11 @@ spec: from failing when valueFiles do not exist locally by not appending them to helm template --values type: boolean + kubeVersion: + description: KubeVersions is the Kubernetes version + to use for templating. If not set, defaults to the + server's current Kubernetes version. + type: string parameters: description: Parameters is a list of Helm parameters which are passed to the helm template command upon @@ -2223,6 +2283,13 @@ spec: helm: description: Helm holds helm specific options properties: + apiVersions: + description: APIVersions is a list of Kubernetes API + versions to use for templating. If not set, defaults + to the server's preferred API versions. + items: + type: string + type: array fileParameters: description: FileParameters are file parameters to the helm template @@ -2245,6 +2312,11 @@ spec: template from failing when valueFiles do not exist locally by not appending them to helm template --values type: boolean + kubeVersion: + description: KubeVersions is the Kubernetes version + to use for templating. If not set, defaults to the + server's current Kubernetes version. + type: string parameters: description: Parameters is a list of Helm parameters which are passed to the helm template command upon @@ -2704,6 +2776,13 @@ spec: helm: description: Helm holds helm specific options properties: + apiVersions: + description: APIVersions is a list of Kubernetes + API versions to use for templating. If not set, + defaults to the server's preferred API versions. + items: + type: string + type: array fileParameters: description: FileParameters are file parameters to the helm template @@ -2728,6 +2807,11 @@ spec: not exist locally by not appending them to helm template --values type: boolean + kubeVersion: + description: KubeVersions is the Kubernetes version + to use for templating. If not set, defaults + to the server's current Kubernetes version. + type: string parameters: description: Parameters is a list of Helm parameters which are passed to the helm template command @@ -3061,6 +3145,14 @@ spec: helm: description: Helm holds helm specific options properties: + apiVersions: + description: APIVersions is a list of Kubernetes + API versions to use for templating. If not + set, defaults to the server's preferred API + versions. + items: + type: string + type: array fileParameters: description: FileParameters are file parameters to the helm template @@ -3085,6 +3177,12 @@ spec: do not exist locally by not appending them to helm template --values type: boolean + kubeVersion: + description: KubeVersions is the Kubernetes + version to use for templating. If not set, + defaults to the server's current Kubernetes + version. + type: string parameters: description: Parameters is a list of Helm parameters which are passed to the helm template command @@ -3541,6 +3639,13 @@ spec: helm: description: Helm holds helm specific options properties: + apiVersions: + description: APIVersions is a list of Kubernetes API + versions to use for templating. If not set, defaults + to the server's preferred API versions. + items: + type: string + type: array fileParameters: description: FileParameters are file parameters to the helm template @@ -3563,6 +3668,11 @@ spec: template from failing when valueFiles do not exist locally by not appending them to helm template --values type: boolean + kubeVersion: + description: KubeVersions is the Kubernetes version + to use for templating. If not set, defaults to the + server's current Kubernetes version. + type: string parameters: description: Parameters is a list of Helm parameters which are passed to the helm template command upon @@ -3889,6 +3999,13 @@ spec: helm: description: Helm holds helm specific options properties: + apiVersions: + description: APIVersions is a list of Kubernetes + API versions to use for templating. If not set, + defaults to the server's preferred API versions. + items: + type: string + type: array fileParameters: description: FileParameters are file parameters to the helm template @@ -3913,6 +4030,11 @@ spec: locally by not appending them to helm template --values type: boolean + kubeVersion: + description: KubeVersions is the Kubernetes version + to use for templating. If not set, defaults to + the server's current Kubernetes version. + type: string parameters: description: Parameters is a list of Helm parameters which are passed to the helm template command @@ -4413,6 +4535,13 @@ spec: helm: description: Helm holds helm specific options properties: + apiVersions: + description: APIVersions is a list of Kubernetes API + versions to use for templating. If not set, defaults + to the server's preferred API versions. + items: + type: string + type: array fileParameters: description: FileParameters are file parameters to the helm template @@ -4435,6 +4564,11 @@ spec: template from failing when valueFiles do not exist locally by not appending them to helm template --values type: boolean + kubeVersion: + description: KubeVersions is the Kubernetes version + to use for templating. If not set, defaults to the + server's current Kubernetes version. + type: string parameters: description: Parameters is a list of Helm parameters which are passed to the helm template command upon @@ -4761,6 +4895,13 @@ spec: helm: description: Helm holds helm specific options properties: + apiVersions: + description: APIVersions is a list of Kubernetes + API versions to use for templating. If not set, + defaults to the server's preferred API versions. + items: + type: string + type: array fileParameters: description: FileParameters are file parameters to the helm template @@ -4785,6 +4926,11 @@ spec: locally by not appending them to helm template --values type: boolean + kubeVersion: + description: KubeVersions is the Kubernetes version + to use for templating. If not set, defaults to + the server's current Kubernetes version. + type: string parameters: description: Parameters is a list of Helm parameters which are passed to the helm template command @@ -5259,6 +5405,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -5270,6 +5420,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -5511,6 +5663,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -5522,6 +5678,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -5887,6 +6045,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -5898,6 +6060,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -6139,6 +6303,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -6150,6 +6318,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -6518,6 +6688,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -6529,6 +6703,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -6770,6 +6946,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -6781,6 +6961,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -7129,6 +7311,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -7140,6 +7326,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -7381,6 +7569,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -7392,6 +7584,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -7763,6 +7957,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -7774,6 +7972,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -8015,6 +8215,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -8026,6 +8230,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -8391,6 +8597,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -8402,6 +8612,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -8643,6 +8855,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -8654,6 +8870,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -9022,6 +9240,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -9033,6 +9255,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -9274,6 +9498,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -9285,6 +9513,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -9633,6 +9863,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -9644,6 +9878,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -9885,6 +10121,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -9896,6 +10136,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -10252,6 +10494,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -10263,6 +10509,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -10504,6 +10752,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -10515,6 +10767,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -11053,6 +11307,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -11064,6 +11322,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -11305,6 +11565,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -11316,6 +11580,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -11849,6 +12115,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -11860,6 +12130,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -12101,6 +12373,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -12112,6 +12388,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -12475,6 +12753,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -12486,6 +12768,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -12727,6 +13011,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -12738,6 +13026,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -13111,6 +13401,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -13122,6 +13416,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -13363,6 +13659,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -13374,6 +13674,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -13739,6 +14041,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -13750,6 +14056,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -13991,6 +14299,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -14002,6 +14314,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -14370,6 +14684,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -14381,6 +14699,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -14622,6 +14942,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -14633,6 +14957,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -14981,6 +15307,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -14992,6 +15322,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -15233,6 +15565,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -15244,6 +15580,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -15600,6 +15938,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -15611,6 +15953,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -15852,6 +16196,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -15863,6 +16211,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -16401,6 +16751,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -16412,6 +16766,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -16653,6 +17009,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -16664,6 +17024,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -17197,6 +17559,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -17208,6 +17574,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -17449,6 +17817,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -17460,6 +17832,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -17827,6 +18201,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -17838,6 +18216,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -18079,6 +18459,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -18090,6 +18474,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -18445,6 +18831,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -18456,6 +18846,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -18697,6 +19089,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -18708,6 +19104,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -19246,6 +19644,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -19257,6 +19659,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -19498,6 +19902,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -19509,6 +19917,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -20042,6 +20452,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -20053,6 +20467,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -20294,6 +20710,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -20305,6 +20725,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -20743,6 +21165,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -20754,6 +21180,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: @@ -20995,6 +21423,10 @@ spec: type: object helm: properties: + apiVersions: + items: + type: string + type: array fileParameters: items: properties: @@ -21006,6 +21438,8 @@ spec: type: array ignoreMissingValueFiles: type: boolean + kubeVersion: + type: string parameters: items: properties: diff --git a/pkg/apis/api-rules/violation_exceptions.list b/pkg/apis/api-rules/violation_exceptions.list index 5630d8d4bceb2..8b8bd4be14428 100644 --- a/pkg/apis/api-rules/violation_exceptions.list +++ b/pkg/apis/api-rules/violation_exceptions.list @@ -19,6 +19,7 @@ API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/ap API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,ApplicationSetStatus,ApplicationStatus API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,ApplicationSetStatus,Conditions API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,ApplicationSetTemplateMeta,Finalizers +API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,ApplicationSourceHelm,ApiVersions API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,ApplicationSourceHelm,FileParameters API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,ApplicationSourceHelm,Parameters API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,ApplicationSourceHelm,ValueFiles diff --git a/pkg/apis/application/v1alpha1/generated.pb.go b/pkg/apis/application/v1alpha1/generated.pb.go index a9672312fc0c7..98a09f333f49f 100644 --- a/pkg/apis/application/v1alpha1/generated.pb.go +++ b/pkg/apis/application/v1alpha1/generated.pb.go @@ -4622,15 +4622,15 @@ func init() { } var fileDescriptor_030104ce3b95bcac = []byte{ - // 11227 bytes of a gzipped FileDescriptorProto + // 11251 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x7d, 0x70, 0x1c, 0xc9, 0x75, 0x18, 0xae, 0xd9, 0xc5, 0x02, 0xbb, 0x0f, 0x1f, 0x24, 0x9b, 0xe4, 0x1d, 0x8e, 0xba, 0x3b, 0xd0, 0x73, 0xf6, 0xe9, 0xf4, 0xd3, 0x1d, 0xe0, 0xa3, 0xee, 0xe4, 0xfb, 0xe9, 0x6c, 0xc9, 0xf8, 0x20, 0x41, 0x90, 0x00, 0x81, 0x6b, 0x80, 0xa4, 0x74, 0xf2, 0xe9, 0x34, 0xd8, 0x6d, 0x2c, 0x86, 0x98, 0x9d, 0x99, 0x9b, 0x99, 0x05, 0x81, 0xb3, 0x24, 0x4b, 0x96, 0x6c, 0x2b, 0xd1, 0x67, 0xa4, - 0xa4, 0x74, 0x4e, 0x2c, 0x45, 0xb6, 0x94, 0x54, 0x5c, 0x89, 0x2a, 0x4e, 0xf2, 0x47, 0x9c, 0x38, - 0x89, 0xcb, 0x76, 0x2a, 0xa5, 0x94, 0x92, 0xb2, 0xcb, 0xe5, 0xb2, 0x9c, 0xc4, 0x46, 0x24, 0xa6, - 0x52, 0x49, 0xa5, 0x2a, 0xae, 0x72, 0xe2, 0x3f, 0x12, 0x26, 0x95, 0x4a, 0xf5, 0x77, 0xcf, 0xec, + 0x54, 0xe9, 0x9c, 0x58, 0x8a, 0x6c, 0x29, 0xa9, 0xb8, 0x12, 0x55, 0x9c, 0xe4, 0x8f, 0x38, 0x71, + 0x12, 0x97, 0xed, 0x54, 0x4a, 0x29, 0x25, 0x65, 0x97, 0xcb, 0x65, 0x39, 0x89, 0x8d, 0x48, 0x4c, + 0xa5, 0x92, 0x4a, 0x55, 0x5c, 0xe5, 0xc4, 0x7f, 0x24, 0x4c, 0x2a, 0x49, 0xf5, 0x77, 0xcf, 0xec, 0x2c, 0xb0, 0x0b, 0x0c, 0x48, 0x4a, 0xb9, 0xff, 0x76, 0xfb, 0xbd, 0x79, 0xaf, 0xa7, 0xa7, 0xfb, 0xbd, 0xd7, 0xaf, 0xdf, 0x7b, 0x0d, 0x8b, 0x4d, 0x37, 0xd9, 0x6c, 0xaf, 0x4f, 0xd6, 0x83, 0xd6, 0x94, 0x13, 0x35, 0x83, 0x30, 0x0a, 0x6e, 0xb1, 0x1f, 0xcf, 0xd4, 0x1b, 0x53, 0xdb, 0x17, 0xa6, @@ -4685,7 +4685,7 @@ var fileDescriptor_030104ce3b95bcac = []byte{ 0xcf, 0xdc, 0xd9, 0x9b, 0x38, 0xb9, 0x9a, 0x81, 0xe1, 0x0e, 0x6c, 0xf4, 0x1a, 0x4c, 0x84, 0x24, 0x6a, 0xb9, 0xc9, 0xb2, 0xef, 0xed, 0x4a, 0xf1, 0x5d, 0x0f, 0x42, 0xd2, 0x10, 0xdd, 0x89, 0xc7, 0x47, 0xcf, 0x5b, 0x4f, 0x55, 0x67, 0xde, 0x26, 0xba, 0x39, 0xb1, 0xb2, 0x3f, 0x3a, 0x3e, 0x88, - 0x9e, 0xfd, 0x2f, 0x4b, 0x70, 0x32, 0xab, 0x38, 0xd1, 0xdf, 0xb4, 0xe0, 0xc4, 0xad, 0xdb, 0xc9, + 0x9e, 0xfd, 0x2f, 0x4a, 0x70, 0x32, 0xab, 0x38, 0xd1, 0xdf, 0xb0, 0xe0, 0xc4, 0xad, 0xdb, 0xc9, 0x5a, 0xb0, 0x45, 0xfc, 0x78, 0x66, 0x97, 0x8a, 0x37, 0xa6, 0x32, 0x86, 0x2f, 0xd4, 0x8b, 0x55, 0xd1, 0x93, 0x57, 0xd2, 0x5c, 0x2e, 0xfa, 0x49, 0xb4, 0x3b, 0xf3, 0xb0, 0x78, 0xbb, 0x13, 0x57, 0x6e, 0xae, 0x99, 0x50, 0x9c, 0xed, 0xd4, 0xb9, 0x4f, 0x5b, 0x70, 0x26, 0x8f, 0x04, 0x3a, 0x09, @@ -4702,7 +4702,7 @@ var fileDescriptor_030104ce3b95bcac = []byte{ 0x3b, 0x28, 0xe1, 0x1c, 0xea, 0xf6, 0x97, 0x2c, 0x78, 0x28, 0xdf, 0x16, 0x43, 0x4f, 0xc2, 0x20, 0xdf, 0x1e, 0x8a, 0xb7, 0xd3, 0x9f, 0x84, 0xb5, 0x62, 0x01, 0x45, 0x53, 0x50, 0x53, 0x7a, 0x42, 0xbc, 0xe3, 0x29, 0x81, 0x5a, 0xd3, 0xca, 0x45, 0xe3, 0xd0, 0x41, 0xa3, 0x7f, 0x84, 0xe5, 0xa6, - 0x06, 0x8d, 0xed, 0xa7, 0x18, 0xc4, 0xfe, 0xf7, 0x16, 0x9c, 0x30, 0x7a, 0x75, 0x0f, 0x4c, 0x73, + 0x06, 0x8d, 0xed, 0xa7, 0x18, 0xc4, 0xfe, 0x77, 0x16, 0x9c, 0x30, 0x7a, 0x75, 0x0f, 0x4c, 0x73, 0x3f, 0x6d, 0x9a, 0x2f, 0x14, 0x36, 0x9f, 0xbb, 0xd8, 0xe6, 0x9f, 0xb5, 0xe0, 0x9c, 0x81, 0xb5, 0xe4, 0x24, 0xf5, 0xcd, 0x8b, 0x3b, 0x61, 0x44, 0x62, 0xba, 0xf5, 0x46, 0x8f, 0x19, 0x72, 0x6b, 0x66, 0x58, 0x50, 0x28, 0x5f, 0x25, 0xbb, 0x5c, 0x88, 0x3d, 0x0d, 0x55, 0x3e, 0x39, 0x83, 0x48, @@ -4716,7 +4716,7 @@ var fileDescriptor_030104ce3b95bcac = []byte{ 0x6e, 0xa9, 0x0c, 0x46, 0x59, 0x7f, 0x87, 0x81, 0x8f, 0x4d, 0xbc, 0x2e, 0x02, 0xab, 0x74, 0x9c, 0x02, 0xcb, 0x94, 0xa7, 0xe5, 0x03, 0xe4, 0xe9, 0x93, 0x6a, 0xd4, 0x07, 0x32, 0x02, 0x2c, 0xad, 0x53, 0xce, 0xc3, 0x40, 0x9c, 0x90, 0x70, 0xbc, 0x92, 0x96, 0x47, 0xab, 0x09, 0x09, 0x31, 0x83, - 0xd8, 0xff, 0xa5, 0x04, 0x0f, 0xa7, 0xc7, 0x50, 0xab, 0x80, 0xf7, 0xa6, 0x54, 0xc0, 0x3b, 0x4c, + 0xd8, 0xff, 0xb9, 0x04, 0x0f, 0xa7, 0xc7, 0x50, 0xab, 0x80, 0xf7, 0xa6, 0x54, 0xc0, 0x3b, 0x4c, 0x15, 0x70, 0x77, 0x6f, 0xe2, 0xad, 0x5d, 0x1e, 0xfb, 0xbe, 0xd1, 0x10, 0x68, 0x3e, 0x33, 0x8a, 0x53, 0xe9, 0x51, 0xbc, 0xbb, 0x37, 0xf1, 0x58, 0x97, 0x77, 0xcc, 0x0c, 0xf3, 0x93, 0x30, 0x18, 0x11, 0x27, 0x0e, 0x7c, 0x31, 0xd0, 0xea, 0x73, 0x60, 0xd6, 0x8a, 0x05, 0xd4, 0xfe, 0xfd, 0x5a, @@ -4736,17 +4736,17 @@ var fileDescriptor_030104ce3b95bcac = []byte{ 0x52, 0x9a, 0x61, 0x8d, 0x5a, 0x47, 0xac, 0x0d, 0x73, 0x2e, 0xe8, 0x15, 0xa8, 0xc6, 0xc4, 0x23, 0x75, 0x6a, 0xdf, 0xd4, 0x18, 0xc7, 0x77, 0xf6, 0x68, 0xeb, 0x51, 0xc3, 0x62, 0x55, 0x3c, 0xca, 0x17, 0x98, 0xfc, 0x87, 0x15, 0x49, 0x3a, 0x80, 0xa1, 0xd7, 0x6e, 0xba, 0xfe, 0x38, 0x14, 0x31, - 0x80, 0x2b, 0x8c, 0x56, 0x66, 0x00, 0x79, 0x23, 0x16, 0x8c, 0xec, 0xff, 0x68, 0x01, 0x4a, 0x0b, + 0x80, 0x2b, 0x8c, 0x56, 0x66, 0x00, 0x79, 0x23, 0x16, 0x8c, 0xec, 0xff, 0x60, 0x01, 0x4a, 0x0b, 0xb5, 0x7b, 0x60, 0xd4, 0xbe, 0x96, 0x36, 0x6a, 0x17, 0x8b, 0xb4, 0x3a, 0xba, 0xd8, 0xb5, 0xbf, 0x51, 0x83, 0x8c, 0x3a, 0xb8, 0x46, 0xe2, 0x84, 0x34, 0xde, 0x14, 0xe1, 0x6f, 0x8a, 0xf0, 0x37, 0x45, 0xb8, 0x12, 0xe1, 0xeb, 0x19, 0x11, 0xfe, 0x1e, 0x63, 0xd5, 0xeb, 0x03, 0xd8, 0x57, 0xd5, 0x09, 0xad, 0xd9, 0x03, 0x03, 0x81, 0x4a, 0x82, 0x2b, 0xab, 0xcb, 0xd7, 0x72, 0x65, 0xf6, 0xab, - 0x69, 0x99, 0x7d, 0x54, 0x16, 0xff, 0x2f, 0x48, 0xe9, 0x7f, 0x61, 0xc1, 0xdb, 0xd2, 0xd2, 0x4b, + 0x69, 0x99, 0x7d, 0x54, 0x16, 0xff, 0x2f, 0x48, 0xe9, 0x7f, 0x6e, 0xc1, 0xdb, 0xd2, 0xd2, 0x4b, 0xce, 0x9c, 0x85, 0xa6, 0x1f, 0x44, 0x64, 0xce, 0xdd, 0xd8, 0x20, 0x11, 0xf1, 0xeb, 0x24, 0x56, 0x5e, 0x0c, 0xab, 0x9b, 0x17, 0x03, 0x3d, 0x07, 0x23, 0xb7, 0xe2, 0xc0, 0x5f, 0x09, 0x5c, 0x5f, 0x88, 0x20, 0xba, 0x11, 0x3e, 0x79, 0x67, 0x6f, 0x62, 0x84, 0x8e, 0xa8, 0x6c, 0xc7, 0x29, 0x2c, 0x34, 0x0b, 0xa7, 0x6e, 0xbd, 0xb6, 0xe2, 0x24, 0x86, 0x3b, 0x40, 0x6e, 0xdc, 0xd9, 0x81, 0xc5, - 0x95, 0x97, 0x32, 0x40, 0xdc, 0x89, 0x6f, 0xff, 0xb5, 0x12, 0x3c, 0x92, 0x79, 0x91, 0xc0, 0xf3, + 0x95, 0x97, 0x32, 0x40, 0xdc, 0x89, 0x6f, 0xff, 0xd5, 0x12, 0x3c, 0x92, 0x79, 0x91, 0xc0, 0xf3, 0x82, 0x76, 0x42, 0x37, 0x35, 0xe8, 0xab, 0x16, 0x9c, 0x6c, 0xa5, 0x3d, 0x0e, 0xb1, 0x70, 0xec, 0xbe, 0xaf, 0x30, 0x1d, 0x91, 0x71, 0x69, 0xcc, 0x8c, 0x8b, 0x11, 0x3a, 0x99, 0x01, 0xc4, 0xb8, 0xa3, 0x2f, 0xe8, 0x15, 0xa8, 0xb5, 0x9c, 0x9d, 0xeb, 0x61, 0xc3, 0x49, 0xe4, 0x7e, 0xb2, 0xbb, @@ -4780,14 +4780,14 @@ var fileDescriptor_030104ce3b95bcac = []byte{ 0x95, 0xee, 0xa8, 0x78, 0x3f, 0x3a, 0xe8, 0x65, 0x38, 0x69, 0xbc, 0x57, 0xac, 0x06, 0xa6, 0x36, 0x33, 0x49, 0x2d, 0x90, 0xe9, 0x0c, 0xec, 0xee, 0xde, 0xc4, 0x43, 0xd9, 0x36, 0x21, 0xb1, 0x3b, 0xe8, 0xd8, 0xdf, 0x28, 0x65, 0xbf, 0x96, 0x52, 0xb6, 0x6f, 0x58, 0x1d, 0xdb, 0xf9, 0xf7, 0x1d, - 0x87, 0x82, 0x63, 0x1b, 0x7f, 0x15, 0xc0, 0xd1, 0x1d, 0xe7, 0x3e, 0x9e, 0x10, 0xdb, 0xff, 0x6a, + 0x87, 0x82, 0x63, 0x1b, 0x7f, 0x15, 0xc0, 0xd1, 0x1d, 0xe7, 0x3e, 0x9e, 0x10, 0xdb, 0xff, 0x72, 0x00, 0xf6, 0xe9, 0x59, 0x0f, 0xd6, 0x73, 0xdf, 0xc7, 0x8a, 0x9f, 0xb1, 0xd4, 0x91, 0x53, 0x99, 0x2d, 0xf2, 0xc6, 0x71, 0x8d, 0x3d, 0xdf, 0xc0, 0xc4, 0x3c, 0x4a, 0x41, 0xb9, 0xb1, 0xd3, 0x87, 0x5b, 0xe8, 0x6b, 0x56, 0xfa, 0xd0, 0x8c, 0x87, 0x9d, 0xb9, 0xc7, 0xd6, 0x27, 0xe3, 0x24, 0x8e, 0x77, 0x4c, 0x9f, 0xdf, 0x74, 0x3b, 0xa3, 0x9b, 0x04, 0xd8, 0x70, 0x7d, 0xc7, 0x73, 0x5f, 0xa7, 0xdb, 0x93, 0x0a, 0xd3, 0xb0, 0xcc, 0x64, 0xb9, 0xa4, 0x5a, 0xb1, 0x81, 0x71, 0xee, 0xff, 0x87, 0x61, 0xe3, 0xcd, 0x73, 0x82, 0x2b, 0xce, 0x98, 0xc1, 0x15, 0x35, 0x23, 0x26, 0xe2, 0xdc, 0x7b, - 0xe0, 0x64, 0xb6, 0x83, 0xfd, 0x3c, 0x6f, 0xff, 0x8f, 0xa1, 0xec, 0x29, 0xd6, 0x1a, 0x89, 0x5a, + 0xe0, 0x64, 0xb6, 0x83, 0xfd, 0x3c, 0x6f, 0xff, 0xf7, 0xa1, 0xec, 0x29, 0xd6, 0x1a, 0x89, 0x5a, 0xb4, 0x6b, 0x6f, 0x7a, 0x96, 0xde, 0xf4, 0x2c, 0xbd, 0xe9, 0x59, 0x32, 0x0f, 0x07, 0x84, 0xd7, 0x64, 0xe8, 0x1e, 0x79, 0x4d, 0x52, 0x7e, 0xa0, 0x6a, 0xe1, 0x7e, 0x20, 0xfb, 0x4e, 0x05, 0x52, 0x76, 0x14, 0x1f, 0xef, 0xb7, 0xc3, 0x50, 0x44, 0xc2, 0xe0, 0x3a, 0x5e, 0x14, 0x3a, 0x44, 0xc7, @@ -4806,7 +4806,7 @@ var fileDescriptor_030104ce3b95bcac = []byte{ 0xba, 0x15, 0x07, 0xbe, 0x4f, 0x12, 0xa1, 0x9a, 0x6e, 0x14, 0x3c, 0x14, 0x57, 0x38, 0x75, 0xdd, 0x07, 0xd1, 0x80, 0x25, 0x5f, 0xda, 0x5d, 0xb2, 0x53, 0xf7, 0xda, 0x8d, 0x8e, 0x20, 0x8d, 0x8b, 0xbc, 0x19, 0x4b, 0x38, 0x45, 0x75, 0x7d, 0x8e, 0x3a, 0x90, 0x46, 0x5d, 0xf0, 0x05, 0xaa, 0x80, - 0xdb, 0x7f, 0x65, 0x10, 0xce, 0xe6, 0x2e, 0x0e, 0x6a, 0xc8, 0x30, 0x53, 0xe1, 0x92, 0xeb, 0x11, + 0xdb, 0xff, 0x67, 0x10, 0xce, 0xe6, 0x2e, 0x0e, 0x6a, 0xc8, 0x30, 0x53, 0xe1, 0x92, 0xeb, 0x11, 0x19, 0x9e, 0xc4, 0x0c, 0x99, 0x1b, 0xaa, 0x15, 0x1b, 0x18, 0xe8, 0x67, 0x00, 0x42, 0x27, 0x72, 0x5a, 0x44, 0xf9, 0x65, 0x8f, 0x6c, 0x2f, 0xd0, 0x7e, 0xac, 0x48, 0x9a, 0x7a, 0x6f, 0xaa, 0x9a, 0x62, 0x6c, 0xb0, 0x44, 0xcf, 0xc3, 0x70, 0x44, 0x3c, 0xe2, 0xc4, 0x2c, 0xec, 0x37, 0x9b, 0xc3, @@ -4820,511 +4820,513 @@ var fileDescriptor_030104ce3b95bcac = []byte{ 0xbc, 0xe5, 0x86, 0xb3, 0x51, 0x23, 0x66, 0x87, 0x1e, 0x55, 0xed, 0x6d, 0x5c, 0x15, 0xed, 0x58, 0x61, 0xa0, 0x3a, 0x8c, 0xf0, 0x4f, 0xc2, 0x43, 0xd1, 0x84, 0x7c, 0x7c, 0xa6, 0xab, 0x7a, 0x14, 0xe9, 0x6d, 0x93, 0xd8, 0xb9, 0x7d, 0x51, 0x1e, 0xc1, 0xf0, 0x13, 0x83, 0x1b, 0x06, 0x19, 0x9c, - 0x22, 0x6a, 0xff, 0x62, 0x29, 0xbd, 0xe3, 0x36, 0x17, 0x29, 0x8a, 0xe9, 0x52, 0x4c, 0x6e, 0x38, - 0x91, 0xf4, 0xc6, 0x1c, 0x31, 0x6d, 0x41, 0xd0, 0xbd, 0xe1, 0x44, 0xe6, 0xa2, 0x66, 0x0c, 0xb0, - 0xe4, 0x84, 0x6e, 0xc1, 0x40, 0xe2, 0x39, 0x05, 0xe5, 0x39, 0x19, 0x1c, 0xb5, 0x03, 0x64, 0x71, - 0x3a, 0xc6, 0x8c, 0x07, 0x7a, 0x94, 0x5a, 0xfd, 0xeb, 0xf2, 0x88, 0x44, 0x18, 0xea, 0xeb, 0x31, - 0x66, 0xad, 0xf6, 0x5d, 0xc8, 0x91, 0xab, 0x4a, 0x91, 0xa1, 0x0b, 0x00, 0x74, 0x03, 0xb9, 0x12, - 0x91, 0x0d, 0x77, 0x47, 0x18, 0x12, 0x6a, 0xed, 0x5e, 0x53, 0x10, 0x6c, 0x60, 0xc9, 0x67, 0x56, - 0xdb, 0x1b, 0xf4, 0x99, 0x52, 0xe7, 0x33, 0x1c, 0x82, 0x0d, 0x2c, 0xf4, 0x1c, 0x0c, 0xba, 0x2d, - 0xa7, 0xa9, 0x42, 0x30, 0x1f, 0xa5, 0x8b, 0x76, 0x81, 0xb5, 0xdc, 0xdd, 0x9b, 0x18, 0x53, 0x1d, - 0x62, 0x4d, 0x58, 0xe0, 0xa2, 0x6f, 0x58, 0x30, 0x52, 0x0f, 0x5a, 0xad, 0xc0, 0xe7, 0xdb, 0x2e, - 0xb1, 0x87, 0xbc, 0x75, 0x5c, 0x6a, 0x7e, 0x72, 0xd6, 0x60, 0xc6, 0x37, 0x91, 0x2a, 0x21, 0xcb, - 0x04, 0xe1, 0x54, 0xaf, 0xcc, 0xb5, 0x5d, 0x39, 0x60, 0x6d, 0xff, 0xba, 0x05, 0xa7, 0xf8, 0xb3, - 0xc6, 0x6e, 0x50, 0xe4, 0x1e, 0x05, 0xc7, 0xfc, 0x5a, 0x1d, 0x1b, 0x64, 0xe5, 0xa5, 0xeb, 0x80, - 0xe3, 0xce, 0x4e, 0xa2, 0x79, 0x38, 0xb5, 0x11, 0x44, 0x75, 0x62, 0x0e, 0x84, 0x10, 0x4c, 0x8a, - 0xd0, 0xa5, 0x2c, 0x02, 0xee, 0x7c, 0x06, 0xdd, 0x80, 0x87, 0x8c, 0x46, 0x73, 0x1c, 0xb8, 0x6c, - 0x7a, 0x5c, 0x50, 0x7b, 0xe8, 0x52, 0x2e, 0x16, 0xee, 0xf2, 0x74, 0xda, 0x61, 0x52, 0xeb, 0xc1, - 0x61, 0xf2, 0x2a, 0x3c, 0x52, 0xef, 0x1c, 0x99, 0xed, 0xb8, 0xbd, 0x1e, 0x73, 0x49, 0x55, 0x9d, - 0xf9, 0x21, 0x41, 0xe0, 0x91, 0xd9, 0x6e, 0x88, 0xb8, 0x3b, 0x0d, 0xf4, 0x61, 0xa8, 0x46, 0x84, - 0x7d, 0x95, 0x58, 0x24, 0xe2, 0x1c, 0x71, 0x97, 0xac, 0x2d, 0x50, 0x4e, 0x56, 0xcb, 0x5e, 0xd1, - 0x10, 0x63, 0xc5, 0x11, 0xdd, 0x86, 0xa1, 0xd0, 0x49, 0xea, 0x9b, 0x22, 0xfd, 0xe6, 0xc8, 0xf1, - 0x2f, 0x8a, 0x39, 0xf3, 0x81, 0x1b, 0x09, 0xbb, 0x9c, 0x09, 0x96, 0xdc, 0xa8, 0x35, 0x52, 0x0f, - 0x5a, 0x61, 0xe0, 0x13, 0x3f, 0x89, 0xc7, 0x47, 0xb5, 0x35, 0x32, 0xab, 0x5a, 0xb1, 0x81, 0x81, - 0x56, 0xe0, 0x0c, 0xf3, 0x19, 0xdd, 0x74, 0x93, 0xcd, 0xa0, 0x9d, 0xc8, 0x2d, 0xd0, 0xf8, 0x58, - 0xfa, 0xa8, 0x62, 0x31, 0x07, 0x07, 0xe7, 0x3e, 0x79, 0xee, 0xbd, 0x70, 0xaa, 0x63, 0x29, 0xf7, - 0xe5, 0xae, 0x99, 0x83, 0x87, 0xf2, 0x17, 0x4d, 0x5f, 0x4e, 0x9b, 0x7f, 0x90, 0x09, 0x9b, 0x35, - 0x0c, 0xe9, 0x1e, 0x1c, 0x80, 0x0e, 0x94, 0x89, 0xbf, 0x2d, 0x74, 0xc8, 0xa5, 0xa3, 0x7d, 0xbb, - 0x8b, 0xfe, 0x36, 0x5f, 0xf3, 0xcc, 0xcb, 0x71, 0xd1, 0xdf, 0xc6, 0x94, 0x36, 0xfa, 0xa2, 0x95, - 0x32, 0x04, 0xb9, 0xdb, 0xf0, 0x83, 0xc7, 0xb2, 0x73, 0xe8, 0xd9, 0x36, 0xb4, 0xff, 0x75, 0x09, - 0xce, 0x1f, 0x44, 0xa4, 0x87, 0xe1, 0x7b, 0x02, 0x06, 0x63, 0x76, 0x10, 0x2e, 0x84, 0xf2, 0x30, - 0x9d, 0xab, 0xfc, 0x68, 0xfc, 0x55, 0x2c, 0x40, 0xc8, 0x83, 0x72, 0xcb, 0x09, 0x85, 0x37, 0x69, - 0xe1, 0xa8, 0x89, 0x34, 0xf4, 0xbf, 0xe3, 0x2d, 0x39, 0x21, 0xf7, 0x51, 0x18, 0x0d, 0x98, 0xb2, - 0x41, 0x09, 0x54, 0x9c, 0x28, 0x72, 0xe4, 0xa9, 0xeb, 0xd5, 0x62, 0xf8, 0x4d, 0x53, 0x92, 0xfc, - 0xd0, 0x2a, 0xd5, 0x84, 0x39, 0x33, 0xfb, 0xcb, 0xd5, 0x54, 0x32, 0x09, 0x3b, 0x4a, 0x8f, 0x61, - 0x50, 0x38, 0x91, 0xac, 0xa2, 0xf3, 0x97, 0x78, 0x36, 0x20, 0xdb, 0x27, 0x8a, 0x9c, 0x6a, 0xc1, - 0x0a, 0x7d, 0xda, 0x62, 0x99, 0xcb, 0x32, 0xc1, 0x46, 0xec, 0xce, 0x8e, 0x27, 0x91, 0xda, 0xcc, - 0x87, 0x96, 0x8d, 0xd8, 0xe4, 0x2e, 0x2a, 0x10, 0x30, 0xab, 0xb4, 0xb3, 0x02, 0x01, 0xb3, 0x32, - 0x25, 0x1c, 0xed, 0xe4, 0x1c, 0x99, 0x17, 0x90, 0xfd, 0xda, 0xc3, 0x21, 0xf9, 0xd7, 0x2c, 0x38, - 0xe5, 0x66, 0xcf, 0x3e, 0xc5, 0x5e, 0xe6, 0x88, 0x41, 0x19, 0xdd, 0x8f, 0x56, 0x95, 0x3a, 0xef, - 0x00, 0xe1, 0xce, 0xce, 0xa0, 0x06, 0x0c, 0xb8, 0xfe, 0x46, 0x20, 0x8c, 0x98, 0x99, 0xa3, 0x75, - 0x6a, 0xc1, 0xdf, 0x08, 0xf4, 0x6a, 0xa6, 0xff, 0x30, 0xa3, 0x8e, 0x16, 0xe1, 0x4c, 0x24, 0xbc, - 0x4d, 0x97, 0xdd, 0x38, 0x09, 0xa2, 0xdd, 0x45, 0xb7, 0xe5, 0x26, 0xcc, 0x00, 0x29, 0xcf, 0x8c, - 0x53, 0xfd, 0x80, 0x73, 0xe0, 0x38, 0xf7, 0x29, 0xf4, 0x3a, 0x0c, 0xc9, 0x54, 0xeb, 0x6a, 0x11, - 0xfb, 0xc2, 0xce, 0xf9, 0xaf, 0x26, 0xd3, 0xaa, 0xc8, 0xaa, 0x96, 0x0c, 0xd1, 0xa7, 0x2c, 0x18, - 0xe3, 0xbf, 0x2f, 0xef, 0x36, 0x78, 0x0a, 0x53, 0xad, 0x88, 0xa0, 0xe2, 0xd5, 0x14, 0xcd, 0x19, - 0x44, 0x37, 0xa5, 0xe9, 0x36, 0x9c, 0xe1, 0x6b, 0x7f, 0x63, 0x04, 0x3a, 0x4f, 0x68, 0xd1, 0x47, - 0xa0, 0x16, 0xa9, 0x4c, 0x74, 0xab, 0x08, 0xcb, 0x41, 0x4e, 0x35, 0x71, 0x3a, 0xac, 0xac, 0x32, - 0x9d, 0x73, 0xae, 0x39, 0xd2, 0xbd, 0x53, 0xac, 0x0f, 0x72, 0x0b, 0x58, 0x66, 0x82, 0xab, 0x3e, - 0xa4, 0xdb, 0xf5, 0xeb, 0x98, 0xf1, 0x40, 0x11, 0x0c, 0x6e, 0x12, 0xc7, 0x4b, 0x36, 0x8b, 0x39, - 0x4f, 0xb8, 0xcc, 0x68, 0x65, 0xf3, 0x91, 0x78, 0x2b, 0x16, 0x9c, 0xd0, 0x0e, 0x0c, 0x6d, 0xf2, - 0xb9, 0x28, 0xb6, 0x33, 0x4b, 0x47, 0x1d, 0xdc, 0xd4, 0x04, 0xd7, 0x33, 0x4f, 0x34, 0x60, 0xc9, - 0x8e, 0x85, 0xfe, 0x18, 0xc1, 0x09, 0x5c, 0x8a, 0x14, 0x97, 0x8a, 0xd5, 0x7b, 0x64, 0xc2, 0x87, - 0x60, 0x24, 0x22, 0xf5, 0xc0, 0xaf, 0xbb, 0x1e, 0x69, 0x4c, 0xcb, 0xb3, 0x82, 0x7e, 0x12, 0x78, - 0x98, 0x4b, 0x00, 0x1b, 0x34, 0x70, 0x8a, 0x22, 0x5b, 0x64, 0x2a, 0x7d, 0x95, 0x7e, 0x10, 0x22, - 0x7c, 0xd3, 0x8b, 0x05, 0x25, 0xcb, 0x32, 0x9a, 0x7c, 0x91, 0xa5, 0xdb, 0x70, 0x86, 0x2f, 0x7a, - 0x19, 0x20, 0x58, 0xe7, 0xf1, 0x3d, 0xd3, 0x89, 0x70, 0x54, 0xf7, 0xf3, 0xaa, 0x63, 0x3c, 0x93, - 0x4f, 0x52, 0xc0, 0x06, 0x35, 0x74, 0x15, 0x80, 0x2f, 0x9b, 0xb5, 0xdd, 0x50, 0xee, 0x79, 0x64, - 0x06, 0x16, 0xac, 0x2a, 0xc8, 0xdd, 0xbd, 0x89, 0x4e, 0xc7, 0x21, 0x8b, 0xa1, 0x30, 0x1e, 0x47, - 0x3f, 0x0d, 0x43, 0x71, 0xbb, 0xd5, 0x72, 0x94, 0x1b, 0xbb, 0xc0, 0xdc, 0x40, 0x4e, 0xd7, 0x90, - 0x8a, 0xbc, 0x01, 0x4b, 0x8e, 0xe8, 0x16, 0x95, 0xef, 0x42, 0x3c, 0xf1, 0x55, 0xc4, 0xcd, 0x93, - 0x61, 0xf6, 0x4e, 0xef, 0x92, 0x7b, 0x00, 0x9c, 0x83, 0x73, 0x77, 0x6f, 0xe2, 0xa1, 0x74, 0xfb, - 0x62, 0x20, 0xb2, 0xf5, 0x72, 0x69, 0xa2, 0x2b, 0xb2, 0x08, 0x0c, 0x7d, 0x6d, 0x59, 0x9b, 0xe0, - 0x29, 0x5d, 0x04, 0x86, 0x35, 0x77, 0x1f, 0x33, 0xf3, 0x61, 0xb4, 0x04, 0xa7, 0xeb, 0x81, 0x9f, - 0x44, 0x81, 0xe7, 0xf1, 0x22, 0x48, 0x7c, 0xfb, 0xc9, 0xdd, 0xdc, 0x6f, 0x15, 0xdd, 0x3e, 0x3d, - 0xdb, 0x89, 0x82, 0xf3, 0x9e, 0xa3, 0x06, 0x79, 0x56, 0x39, 0x8c, 0x15, 0x72, 0xf2, 0x98, 0xa2, - 0x29, 0x24, 0x94, 0xf2, 0x5d, 0x1e, 0xa0, 0x26, 0xfc, 0x74, 0x34, 0xa6, 0xf8, 0x62, 0xcf, 0xc1, - 0x08, 0xd9, 0x49, 0x48, 0xe4, 0x3b, 0xde, 0x75, 0xbc, 0x28, 0xbd, 0xce, 0x6c, 0x61, 0x5e, 0x34, - 0xda, 0x71, 0x0a, 0x0b, 0xd9, 0xca, 0x11, 0x64, 0xa4, 0xc5, 0x72, 0x47, 0x90, 0x74, 0xfb, 0xd8, - 0xff, 0xb3, 0x94, 0x32, 0x58, 0xd7, 0x22, 0x42, 0x50, 0x00, 0x15, 0x3f, 0x68, 0x28, 0x85, 0x74, - 0xa5, 0x18, 0x85, 0x74, 0x2d, 0x68, 0x18, 0xe5, 0x6b, 0xe8, 0xbf, 0x18, 0x73, 0x3e, 0xac, 0xbe, - 0x87, 0x2c, 0x84, 0xc2, 0x00, 0x62, 0x23, 0x56, 0x24, 0x67, 0x55, 0xdf, 0x63, 0xd9, 0x64, 0x84, + 0x22, 0x4a, 0x27, 0xd3, 0x56, 0x7b, 0x9d, 0x88, 0x81, 0x64, 0xf2, 0xcf, 0x98, 0x4c, 0x57, 0x35, + 0x08, 0x9b, 0x78, 0x2c, 0xa8, 0x2f, 0x74, 0xc5, 0x3f, 0x19, 0xa2, 0xce, 0x83, 0xfa, 0x74, 0x33, + 0x36, 0x71, 0xec, 0x5f, 0x2c, 0xa5, 0xf7, 0xf6, 0xa6, 0x38, 0x40, 0x31, 0x5d, 0xf4, 0xc9, 0x0d, + 0x27, 0x92, 0x7e, 0x9f, 0x23, 0x26, 0x48, 0x08, 0xba, 0x37, 0x9c, 0xc8, 0x14, 0x1f, 0x8c, 0x01, + 0x96, 0x9c, 0xd0, 0x2d, 0x18, 0x48, 0x3c, 0xa7, 0xa0, 0x8c, 0x2a, 0x83, 0xa3, 0x76, 0xb5, 0x2c, + 0x4e, 0xc7, 0x98, 0xf1, 0x40, 0x8f, 0xd2, 0xfd, 0xc5, 0xba, 0x3c, 0x8c, 0x11, 0x5b, 0x82, 0xf5, + 0x18, 0xb3, 0x56, 0xfb, 0x2e, 0xe4, 0x48, 0x70, 0xa5, 0x32, 0xd1, 0x05, 0x00, 0xba, 0x55, 0x5d, + 0x89, 0xc8, 0x86, 0xbb, 0x23, 0x4c, 0x16, 0x25, 0x25, 0xae, 0x29, 0x08, 0x36, 0xb0, 0xe4, 0x33, + 0xab, 0xed, 0x0d, 0xfa, 0x4c, 0xa9, 0xf3, 0x19, 0x0e, 0xc1, 0x06, 0x16, 0x7a, 0x0e, 0x06, 0xdd, + 0x96, 0xd3, 0x54, 0xc1, 0x9e, 0x8f, 0x52, 0xf1, 0xb0, 0xc0, 0x5a, 0xee, 0xee, 0x4d, 0x8c, 0xa9, + 0x0e, 0xb1, 0x26, 0x2c, 0x70, 0xd1, 0x37, 0x2c, 0x18, 0xa9, 0x07, 0xad, 0x56, 0xe0, 0xf3, 0x0d, + 0x9e, 0xd8, 0xad, 0xde, 0x3a, 0x2e, 0x83, 0x62, 0x72, 0xd6, 0x60, 0xc6, 0xb7, 0xab, 0x2a, 0xf5, + 0xcb, 0x04, 0xe1, 0x54, 0xaf, 0x4c, 0x29, 0x52, 0x39, 0x40, 0x8a, 0xfc, 0xba, 0x05, 0xa7, 0xf8, + 0xb3, 0xc6, 0xbe, 0x53, 0x64, 0x39, 0x05, 0xc7, 0xfc, 0x5a, 0x1d, 0x5b, 0x71, 0xe5, 0x0f, 0xec, + 0x80, 0xe3, 0xce, 0x4e, 0xa2, 0x79, 0x38, 0xb5, 0x11, 0x44, 0x75, 0x62, 0x0e, 0x84, 0x10, 0x81, + 0x8a, 0xd0, 0xa5, 0x2c, 0x02, 0xee, 0x7c, 0x06, 0xdd, 0x80, 0x87, 0x8c, 0x46, 0x73, 0x1c, 0xb8, + 0x14, 0x7c, 0x5c, 0x50, 0x7b, 0xe8, 0x52, 0x2e, 0x16, 0xee, 0xf2, 0x74, 0xda, 0x35, 0x53, 0xeb, + 0xc1, 0x35, 0xf3, 0x2a, 0x3c, 0x52, 0xef, 0x1c, 0x99, 0xed, 0xb8, 0xbd, 0x1e, 0x73, 0x99, 0x58, + 0x9d, 0xf9, 0x21, 0x41, 0xe0, 0x91, 0xd9, 0x6e, 0x88, 0xb8, 0x3b, 0x0d, 0xf4, 0x61, 0xa8, 0x46, + 0x84, 0x7d, 0x95, 0x58, 0xa4, 0xfc, 0x1c, 0x71, 0x3f, 0xae, 0x6d, 0x5d, 0x4e, 0x56, 0x4b, 0x79, + 0xd1, 0x10, 0x63, 0xc5, 0x11, 0xdd, 0x86, 0xa1, 0xd0, 0x49, 0xea, 0x9b, 0x22, 0xd1, 0xe7, 0xc8, + 0x91, 0x36, 0x8a, 0x39, 0xf3, 0xb6, 0x1b, 0xa9, 0xc1, 0x9c, 0x09, 0x96, 0xdc, 0xa8, 0xdd, 0x53, + 0x0f, 0x5a, 0x61, 0xe0, 0x13, 0x3f, 0x89, 0xc7, 0x47, 0xb5, 0xdd, 0x33, 0xab, 0x5a, 0xb1, 0x81, + 0x81, 0x56, 0xe0, 0x0c, 0xf3, 0x4e, 0xdd, 0x74, 0x93, 0xcd, 0xa0, 0x9d, 0xc8, 0xcd, 0xd6, 0xf8, + 0x58, 0xfa, 0x50, 0x64, 0x31, 0x07, 0x07, 0xe7, 0x3e, 0x79, 0xee, 0xbd, 0x70, 0xaa, 0x63, 0x29, + 0xf7, 0xe5, 0x18, 0x9a, 0x83, 0x87, 0xf2, 0x17, 0x4d, 0x5f, 0xee, 0xa1, 0xbf, 0x9f, 0x09, 0xd0, + 0x35, 0x4c, 0xf6, 0x1e, 0x5c, 0x8d, 0x0e, 0x94, 0x89, 0xbf, 0x2d, 0x74, 0xc8, 0xa5, 0xa3, 0x7d, + 0xbb, 0x8b, 0xfe, 0x36, 0x5f, 0xf3, 0xcc, 0x9f, 0x72, 0xd1, 0xdf, 0xc6, 0x94, 0x36, 0xfa, 0xa2, + 0x95, 0x32, 0x39, 0xb9, 0x83, 0xf2, 0x83, 0xc7, 0xb2, 0x47, 0xe9, 0xd9, 0x0a, 0xb5, 0xff, 0x55, + 0x09, 0xce, 0x1f, 0x44, 0xa4, 0x87, 0xe1, 0x7b, 0x02, 0x06, 0x63, 0x76, 0xe4, 0x2e, 0x84, 0xf2, + 0x30, 0x9d, 0xab, 0xfc, 0x10, 0xfe, 0x55, 0x2c, 0x40, 0xc8, 0x83, 0x72, 0xcb, 0x09, 0x85, 0xdf, + 0x6a, 0xe1, 0xa8, 0x29, 0x3b, 0xf4, 0xbf, 0xe3, 0x2d, 0x39, 0x21, 0x37, 0x58, 0x8c, 0x06, 0x4c, + 0xd9, 0xa0, 0x04, 0x2a, 0x4e, 0x14, 0x39, 0xf2, 0x7c, 0xf7, 0x6a, 0x31, 0xfc, 0xa6, 0x29, 0x49, + 0x7e, 0x3c, 0x96, 0x6a, 0xc2, 0x9c, 0x99, 0xfd, 0xe5, 0x6a, 0x2a, 0x6d, 0x85, 0x1d, 0xda, 0xc7, + 0x30, 0x28, 0xdc, 0x55, 0x56, 0xd1, 0x99, 0x52, 0x3c, 0xef, 0x90, 0xed, 0x48, 0x45, 0xf6, 0xb6, + 0x60, 0x85, 0x3e, 0x6d, 0xb1, 0x1c, 0x69, 0x99, 0xca, 0x23, 0xf6, 0x81, 0xc7, 0x93, 0xb2, 0x6d, + 0x66, 0x5e, 0xcb, 0x46, 0x6c, 0x72, 0x17, 0xb5, 0x0e, 0x98, 0xfd, 0xdb, 0x59, 0xeb, 0x80, 0xd9, + 0xb3, 0x12, 0x8e, 0x76, 0x72, 0x0e, 0xe7, 0x0b, 0xc8, 0xb3, 0xed, 0xe1, 0x38, 0xfe, 0x6b, 0x16, + 0x9c, 0x72, 0xb3, 0xa7, 0xac, 0x62, 0xd7, 0x74, 0xc4, 0xf0, 0x8f, 0xee, 0x87, 0xb8, 0x4a, 0x9d, + 0x77, 0x80, 0x70, 0x67, 0x67, 0x50, 0x03, 0x06, 0x5c, 0x7f, 0x23, 0x10, 0x46, 0xcc, 0xcc, 0xd1, + 0x3a, 0xb5, 0xe0, 0x6f, 0x04, 0x7a, 0x35, 0xd3, 0x7f, 0x98, 0x51, 0x47, 0x8b, 0x70, 0x26, 0x12, + 0x7e, 0xad, 0xcb, 0x6e, 0x9c, 0x04, 0xd1, 0xee, 0xa2, 0xdb, 0x72, 0x13, 0x66, 0x80, 0x94, 0x67, + 0xc6, 0xa9, 0x7e, 0xc0, 0x39, 0x70, 0x9c, 0xfb, 0x14, 0x7a, 0x1d, 0x86, 0x64, 0x52, 0x77, 0xb5, + 0x88, 0x1d, 0x68, 0xe7, 0xfc, 0x57, 0x93, 0x69, 0x55, 0xe4, 0x6f, 0x4b, 0x86, 0xe8, 0x53, 0x16, + 0x8c, 0xf1, 0xdf, 0x97, 0x77, 0x1b, 0x3c, 0x59, 0xaa, 0x56, 0x44, 0xf8, 0xf2, 0x6a, 0x8a, 0xe6, + 0x0c, 0xa2, 0xdb, 0xdf, 0x74, 0x1b, 0xce, 0xf0, 0xb5, 0xbf, 0x31, 0x02, 0x9d, 0x67, 0xc1, 0xe8, + 0x23, 0x50, 0x8b, 0x54, 0xce, 0xbb, 0x55, 0x84, 0xe5, 0x20, 0xa7, 0x9a, 0x38, 0x87, 0x56, 0x56, + 0x99, 0xce, 0x6e, 0xd7, 0x1c, 0xe9, 0xde, 0x29, 0xd6, 0x47, 0xc6, 0x05, 0x2c, 0x33, 0xc1, 0x55, + 0x1f, 0x07, 0xee, 0xfa, 0x75, 0xcc, 0x78, 0xa0, 0x08, 0x06, 0x37, 0x89, 0xe3, 0x25, 0x9b, 0xc5, + 0x9c, 0x5c, 0x5c, 0x66, 0xb4, 0xb2, 0x99, 0x4f, 0xbc, 0x15, 0x0b, 0x4e, 0x68, 0x07, 0x86, 0x36, + 0xf9, 0x5c, 0x14, 0xdb, 0x99, 0xa5, 0xa3, 0x0e, 0x6e, 0x6a, 0x82, 0xeb, 0x99, 0x27, 0x1a, 0xb0, + 0x64, 0xc7, 0x82, 0x8c, 0x8c, 0x30, 0x08, 0x2e, 0x45, 0x8a, 0x4b, 0xfa, 0xea, 0x3d, 0x06, 0xe2, + 0x43, 0x30, 0x12, 0x91, 0x7a, 0xe0, 0xd7, 0x5d, 0x8f, 0x34, 0xa6, 0xe5, 0xa9, 0x44, 0x3f, 0xa9, + 0x42, 0xcc, 0xf9, 0x80, 0x0d, 0x1a, 0x38, 0x45, 0x91, 0x2d, 0x32, 0x95, 0x28, 0x4b, 0x3f, 0x08, + 0x11, 0x5e, 0xf0, 0xc5, 0x82, 0xd2, 0x72, 0x19, 0x4d, 0xbe, 0xc8, 0xd2, 0x6d, 0x38, 0xc3, 0x17, + 0xbd, 0x0c, 0x10, 0xac, 0xf3, 0x48, 0xa2, 0xe9, 0x44, 0xb8, 0xc4, 0xfb, 0x79, 0xd5, 0x31, 0x9e, + 0x33, 0x28, 0x29, 0x60, 0x83, 0x1a, 0xba, 0x0a, 0xc0, 0x97, 0xcd, 0xda, 0x6e, 0x28, 0xf7, 0x3c, + 0x32, 0xd7, 0x0b, 0x56, 0x15, 0xe4, 0xee, 0xde, 0x44, 0xa7, 0x8b, 0x92, 0x45, 0x6b, 0x18, 0x8f, + 0xa3, 0x9f, 0x86, 0xa1, 0xb8, 0xdd, 0x6a, 0x39, 0xca, 0x61, 0x5e, 0x60, 0x16, 0x22, 0xa7, 0x6b, + 0x48, 0x45, 0xde, 0x80, 0x25, 0x47, 0x74, 0x8b, 0xca, 0x77, 0x21, 0x9e, 0xf8, 0x2a, 0xe2, 0xe6, + 0x09, 0x77, 0x1b, 0xbd, 0x4b, 0xee, 0x01, 0x70, 0x0e, 0xce, 0xdd, 0xbd, 0x89, 0x87, 0xd2, 0xed, + 0x8b, 0x81, 0xc8, 0x0b, 0xcc, 0xa5, 0x89, 0xae, 0xc8, 0x72, 0x33, 0xf4, 0xb5, 0xa5, 0x8b, 0xe9, + 0x29, 0x5d, 0x6e, 0x86, 0x35, 0x77, 0x1f, 0x33, 0xf3, 0x61, 0xb4, 0x04, 0xa7, 0xeb, 0x81, 0x9f, + 0x44, 0x81, 0xe7, 0xf1, 0x72, 0x4b, 0x7c, 0xfb, 0xc9, 0x1d, 0xea, 0x6f, 0x15, 0xdd, 0x3e, 0x3d, + 0xdb, 0x89, 0x82, 0xf3, 0x9e, 0xa3, 0x06, 0x79, 0x56, 0x39, 0x8c, 0x15, 0x72, 0xc6, 0x99, 0xa2, + 0x29, 0x24, 0x94, 0xf2, 0x92, 0x1e, 0xa0, 0x26, 0xfc, 0x74, 0xdc, 0xa7, 0xf8, 0x62, 0xcf, 0xc1, + 0x08, 0xd9, 0x49, 0x48, 0xe4, 0x3b, 0xde, 0x75, 0xbc, 0x28, 0xfd, 0xdb, 0x6c, 0x61, 0x5e, 0x34, + 0xda, 0x71, 0x0a, 0x0b, 0xd9, 0xca, 0x11, 0x64, 0x24, 0xe0, 0x72, 0x47, 0x90, 0x74, 0xfb, 0xd8, + 0xff, 0xa3, 0x94, 0x32, 0x58, 0xd7, 0x22, 0x42, 0x50, 0x00, 0x15, 0x3f, 0x68, 0x28, 0x85, 0x74, + 0xa5, 0x18, 0x85, 0x74, 0x2d, 0x68, 0x18, 0x85, 0x72, 0xe8, 0xbf, 0x18, 0x73, 0x3e, 0xac, 0x92, + 0x88, 0x2c, 0xb9, 0xc2, 0x00, 0x62, 0x23, 0x56, 0x24, 0x67, 0x55, 0x49, 0x64, 0xd9, 0x64, 0x84, 0xd3, 0x7c, 0xd1, 0x16, 0x54, 0x36, 0x83, 0x38, 0x91, 0xdb, 0xb3, 0x23, 0xee, 0x04, 0x2f, 0x07, - 0x71, 0xc2, 0xac, 0x2c, 0xf5, 0xda, 0xb4, 0x25, 0xc6, 0x9c, 0x87, 0xfd, 0x9f, 0xac, 0xd4, 0x19, - 0xc3, 0x4d, 0x16, 0x99, 0xbc, 0x4d, 0x7c, 0x2a, 0x6b, 0xcc, 0x50, 0xac, 0x1f, 0xcb, 0xe4, 0x79, - 0xbe, 0xad, 0x5b, 0xe1, 0xb1, 0xdb, 0x94, 0xc2, 0x24, 0x23, 0x61, 0x44, 0x6d, 0x7d, 0xcc, 0x4a, - 0x67, 0xdc, 0x96, 0x8a, 0xd8, 0x80, 0x99, 0x59, 0xe7, 0x07, 0x26, 0xef, 0xda, 0x5f, 0xb4, 0x60, - 0x68, 0xc6, 0xa9, 0x6f, 0x05, 0x1b, 0x1b, 0xe8, 0x69, 0xa8, 0x36, 0xda, 0x91, 0x99, 0xfc, 0xab, - 0x1c, 0x2b, 0x73, 0xa2, 0x1d, 0x2b, 0x0c, 0x3a, 0x87, 0x37, 0x9c, 0xba, 0xcc, 0x3d, 0x2f, 0xf3, - 0x39, 0x7c, 0x89, 0xb5, 0x60, 0x01, 0x41, 0xcf, 0xc3, 0x70, 0xcb, 0xd9, 0x91, 0x0f, 0x67, 0x0f, - 0x38, 0x96, 0x34, 0x08, 0x9b, 0x78, 0xf6, 0x3f, 0xb7, 0x60, 0x7c, 0xc6, 0x89, 0xdd, 0xfa, 0x74, - 0x3b, 0xd9, 0x9c, 0x71, 0x93, 0xf5, 0x76, 0x7d, 0x8b, 0x24, 0xbc, 0xe0, 0x00, 0xed, 0x65, 0x3b, + 0x71, 0xc2, 0xac, 0x2c, 0xf5, 0xda, 0xb4, 0x25, 0xc6, 0x9c, 0x87, 0xfd, 0x1f, 0xad, 0xd4, 0x69, + 0xc6, 0x4d, 0x16, 0x03, 0xbd, 0x4d, 0x7c, 0x2a, 0x6b, 0xcc, 0xa0, 0xaf, 0x1f, 0xcb, 0x64, 0x94, + 0xbe, 0xad, 0x5b, 0x89, 0xb3, 0xdb, 0x94, 0xc2, 0x24, 0x23, 0x61, 0xc4, 0x87, 0x7d, 0xcc, 0x4a, + 0xe7, 0xf6, 0x96, 0x8a, 0xd8, 0x80, 0x99, 0xf9, 0xed, 0x07, 0xa6, 0x09, 0xdb, 0x5f, 0xb4, 0x60, + 0x68, 0xc6, 0xa9, 0x6f, 0x05, 0x1b, 0x1b, 0xe8, 0x69, 0xa8, 0x36, 0xda, 0x91, 0x99, 0x66, 0xac, + 0x1c, 0x2b, 0x73, 0xa2, 0x1d, 0x2b, 0x0c, 0x3a, 0x87, 0x37, 0x9c, 0xba, 0xcc, 0x72, 0x2f, 0xf3, + 0x39, 0x7c, 0x89, 0xb5, 0x60, 0x01, 0x41, 0xcf, 0xc3, 0x70, 0xcb, 0xd9, 0x91, 0x0f, 0x67, 0x8f, + 0x52, 0x96, 0x34, 0x08, 0x9b, 0x78, 0xf6, 0x3f, 0xb3, 0x60, 0x7c, 0xc6, 0x89, 0xdd, 0xfa, 0x74, + 0x3b, 0xd9, 0x9c, 0x71, 0x93, 0xf5, 0x76, 0x7d, 0x8b, 0x24, 0xbc, 0xb4, 0x01, 0xed, 0x65, 0x3b, 0xa6, 0x4b, 0x49, 0xed, 0x7b, 0x55, 0x2f, 0xaf, 0x8b, 0x76, 0xac, 0x30, 0xd0, 0xeb, 0x30, 0x1c, - 0x3a, 0x71, 0x7c, 0x3b, 0x88, 0x1a, 0x98, 0x6c, 0x14, 0x53, 0xee, 0x63, 0x95, 0xd4, 0x23, 0x92, - 0x60, 0xb2, 0x21, 0x0e, 0xe1, 0x35, 0x7d, 0x6c, 0x32, 0xb3, 0x3f, 0x67, 0xc1, 0x23, 0x33, 0xc4, - 0x89, 0x48, 0xc4, 0xaa, 0x83, 0xa8, 0x17, 0x99, 0xf5, 0x82, 0x76, 0x03, 0xbd, 0x06, 0xd5, 0x84, - 0x36, 0xd3, 0x6e, 0x59, 0xc5, 0x76, 0x8b, 0x9d, 0xa1, 0xaf, 0x09, 0xe2, 0x58, 0xb1, 0xb1, 0xff, - 0xaa, 0x05, 0x23, 0xec, 0x38, 0x72, 0x8e, 0x24, 0x8e, 0xeb, 0x75, 0x14, 0xd1, 0xb2, 0x7a, 0x2c, - 0xa2, 0x75, 0x1e, 0x06, 0x36, 0x83, 0x16, 0xc9, 0x1e, 0xa5, 0x5f, 0x0e, 0x5a, 0x04, 0x33, 0x08, + 0x3a, 0x71, 0x7c, 0x3b, 0x88, 0x1a, 0x98, 0x6c, 0x14, 0x53, 0x58, 0x64, 0x95, 0xd4, 0x23, 0x92, + 0x60, 0xb2, 0x21, 0x8e, 0xfb, 0x35, 0x7d, 0x6c, 0x32, 0xb3, 0x3f, 0x67, 0xc1, 0x23, 0x33, 0xc4, + 0x89, 0x48, 0xc4, 0xea, 0x90, 0xa8, 0x17, 0x99, 0xf5, 0x82, 0x76, 0x03, 0xbd, 0x06, 0xd5, 0x84, + 0x36, 0xd3, 0x6e, 0x59, 0xc5, 0x76, 0x8b, 0x9d, 0xd6, 0xaf, 0x09, 0xe2, 0x58, 0xb1, 0xb1, 0xff, + 0x8a, 0x05, 0x23, 0xec, 0xe0, 0x73, 0x8e, 0x24, 0x8e, 0xeb, 0x75, 0x94, 0xeb, 0xb2, 0x7a, 0x2c, + 0xd7, 0x75, 0x1e, 0x06, 0x36, 0x83, 0x16, 0xc9, 0x1e, 0xda, 0x5f, 0x0e, 0x5a, 0x04, 0x33, 0x08, 0x7a, 0x96, 0x7e, 0x78, 0xd7, 0x4f, 0x1c, 0xba, 0x04, 0xa4, 0xbb, 0xfb, 0x04, 0xff, 0xe8, 0xaa, - 0x19, 0x9b, 0x38, 0xf6, 0x6f, 0xd5, 0x60, 0x48, 0xc4, 0x5b, 0xf4, 0x5c, 0x74, 0x42, 0xfa, 0x3f, - 0x4a, 0x5d, 0xfd, 0x1f, 0x31, 0x0c, 0xd6, 0x59, 0x35, 0x3f, 0x61, 0xdb, 0x5e, 0x2d, 0x24, 0x40, - 0x87, 0x17, 0x08, 0xd4, 0xdd, 0xe2, 0xff, 0xb1, 0x60, 0x85, 0xbe, 0x60, 0xc1, 0x89, 0x7a, 0xe0, - 0xfb, 0xa4, 0xae, 0x0d, 0xaf, 0x81, 0x22, 0xe2, 0x30, 0x66, 0xd3, 0x44, 0xf5, 0x59, 0x58, 0x06, - 0x80, 0xb3, 0xec, 0xd1, 0x8b, 0x30, 0xca, 0xc7, 0xec, 0x46, 0xca, 0x47, 0xaf, 0x6b, 0x2b, 0x99, - 0x40, 0x9c, 0xc6, 0x45, 0x93, 0xfc, 0xac, 0x43, 0x54, 0x31, 0x1a, 0xd4, 0xae, 0x4c, 0xa3, 0x7e, - 0x91, 0x81, 0x81, 0x22, 0x40, 0x11, 0xd9, 0x88, 0x48, 0xbc, 0x29, 0xe2, 0x51, 0x98, 0xd1, 0x37, - 0x74, 0xb8, 0x04, 0x75, 0xdc, 0x41, 0x09, 0xe7, 0x50, 0x47, 0x5b, 0x62, 0x03, 0x5e, 0x2d, 0x42, + 0x19, 0x9b, 0x38, 0xf6, 0x6f, 0xd5, 0x60, 0x48, 0x44, 0x76, 0xf4, 0x5c, 0xde, 0x42, 0xfa, 0x3f, + 0x4a, 0x5d, 0xfd, 0x1f, 0x31, 0x0c, 0xd6, 0x59, 0xdd, 0x40, 0x61, 0xdb, 0x5e, 0x2d, 0x24, 0x14, + 0x88, 0x97, 0x22, 0xd4, 0xdd, 0xe2, 0xff, 0xb1, 0x60, 0x85, 0xbe, 0x60, 0xc1, 0x89, 0x7a, 0xe0, + 0xfb, 0xa4, 0xae, 0x0d, 0xaf, 0x81, 0x22, 0x22, 0x3e, 0x66, 0xd3, 0x44, 0xf5, 0xa9, 0x5b, 0x06, + 0x80, 0xb3, 0xec, 0xd1, 0x8b, 0x30, 0xca, 0xc7, 0xec, 0x46, 0xca, 0x47, 0xaf, 0xab, 0x38, 0x99, + 0x40, 0x9c, 0xc6, 0x45, 0x93, 0xfc, 0xac, 0x43, 0xd4, 0x4b, 0x1a, 0xd4, 0xae, 0x4c, 0xa3, 0x52, + 0x92, 0x81, 0x81, 0x22, 0x40, 0x11, 0xd9, 0x88, 0x48, 0xbc, 0x29, 0x22, 0x5f, 0x98, 0xd1, 0x37, + 0x74, 0xb8, 0x54, 0x78, 0xdc, 0x41, 0x09, 0xe7, 0x50, 0x47, 0x5b, 0x62, 0x03, 0x5e, 0x2d, 0x42, 0x86, 0x8a, 0xcf, 0xdc, 0x75, 0x1f, 0x3e, 0x01, 0x95, 0x78, 0xd3, 0x89, 0x1a, 0xcc, 0xd8, 0x2c, - 0xf3, 0xa4, 0xa8, 0x55, 0xda, 0x80, 0x79, 0x3b, 0x9a, 0x83, 0x93, 0x99, 0xca, 0x50, 0xb1, 0xf0, - 0xa5, 0xab, 0x04, 0x98, 0x4c, 0x4d, 0xa9, 0x18, 0x77, 0x3c, 0x61, 0x3a, 0x67, 0x86, 0x0f, 0x70, - 0xce, 0xec, 0xaa, 0xa8, 0x47, 0xee, 0xe5, 0x7e, 0xa9, 0x90, 0x01, 0xe8, 0x29, 0xc4, 0xf1, 0xb3, - 0x99, 0x10, 0xc7, 0x51, 0xd6, 0x81, 0x1b, 0xc5, 0x74, 0xa0, 0xff, 0x78, 0xc6, 0xfb, 0x19, 0x9f, - 0xf8, 0xe7, 0x16, 0xc8, 0xef, 0x3a, 0xeb, 0xd4, 0x37, 0x09, 0x9d, 0x32, 0xe8, 0x3d, 0x30, 0xa6, - 0xf6, 0xf5, 0xb3, 0x41, 0xdb, 0xe7, 0xa1, 0x89, 0x65, 0x6d, 0x78, 0xe2, 0x14, 0x14, 0x67, 0xb0, + 0xf3, 0xf4, 0xab, 0x55, 0xda, 0x80, 0x79, 0x3b, 0x9a, 0x83, 0x93, 0x99, 0x1a, 0x54, 0xb1, 0xf0, + 0xa5, 0xab, 0x54, 0x9b, 0x4c, 0xf5, 0xaa, 0x18, 0x77, 0x3c, 0x61, 0x3a, 0x67, 0x86, 0x0f, 0x70, + 0xce, 0xec, 0xaa, 0xf8, 0x4a, 0xee, 0xe5, 0x7e, 0xa9, 0x90, 0x01, 0xe8, 0x29, 0x98, 0xf2, 0xb3, + 0x99, 0x60, 0xca, 0x51, 0xd6, 0x81, 0x1b, 0xc5, 0x74, 0xa0, 0xff, 0xc8, 0xc9, 0xfb, 0x19, 0x09, + 0xf9, 0xe7, 0x16, 0xc8, 0xef, 0x3a, 0xeb, 0xd4, 0x37, 0x09, 0x9d, 0x32, 0xe8, 0x3d, 0x30, 0xa6, + 0xf6, 0xf5, 0xb3, 0x41, 0xdb, 0xe7, 0x41, 0x90, 0x65, 0x6d, 0x78, 0xe2, 0x14, 0x14, 0x67, 0xb0, 0xd1, 0x14, 0xd4, 0xe8, 0x38, 0xf1, 0x47, 0xb9, 0xae, 0x55, 0xbe, 0x83, 0xe9, 0x95, 0x05, 0xf1, - 0x94, 0xc6, 0x41, 0x01, 0x9c, 0xf2, 0x9c, 0x38, 0x61, 0x3d, 0xa0, 0xdb, 0xfc, 0x43, 0x96, 0x87, - 0x60, 0x59, 0x16, 0x8b, 0x59, 0x42, 0xb8, 0x93, 0xb6, 0xfd, 0x9d, 0x01, 0x18, 0x4d, 0x49, 0xc6, - 0x3e, 0x95, 0xf4, 0xd3, 0x50, 0x95, 0x7a, 0x33, 0x5b, 0xc8, 0x46, 0x29, 0x57, 0x85, 0x41, 0x95, + 0x94, 0xc6, 0x41, 0x01, 0x9c, 0xf2, 0x9c, 0x38, 0x61, 0x3d, 0xa0, 0xdb, 0xfc, 0x43, 0x16, 0xa2, + 0x60, 0xf9, 0x1c, 0x8b, 0x59, 0x42, 0xb8, 0x93, 0xb6, 0xfd, 0x9d, 0x01, 0x18, 0x4d, 0x49, 0xc6, + 0x3e, 0x95, 0xf4, 0xd3, 0x50, 0x95, 0x7a, 0x33, 0x5b, 0x32, 0x47, 0x29, 0x57, 0x85, 0x41, 0x95, 0xd6, 0xba, 0xd6, 0xaa, 0x59, 0xa3, 0xc2, 0x50, 0xb8, 0xd8, 0xc4, 0x63, 0x42, 0x39, 0xf1, 0xe2, 0x59, 0xcf, 0x25, 0x7e, 0xc2, 0xbb, 0x59, 0x8c, 0x50, 0x5e, 0x5b, 0x5c, 0x35, 0x89, 0x6a, 0xa1, - 0x9c, 0x01, 0xe0, 0x2c, 0x7b, 0xf4, 0x49, 0x0b, 0x46, 0x9d, 0xdb, 0xb1, 0x2e, 0x39, 0x2b, 0x82, - 0x19, 0x8f, 0xa8, 0xa4, 0x52, 0x55, 0x6c, 0xb9, 0x4b, 0x3c, 0xd5, 0x84, 0xd3, 0x4c, 0xd1, 0x1b, - 0x16, 0x20, 0xb2, 0x43, 0xea, 0x32, 0xdc, 0x52, 0xf4, 0x65, 0xb0, 0x88, 0xed, 0xef, 0xc5, 0x0e, - 0xba, 0x5c, 0xaa, 0x77, 0xb6, 0xe3, 0x9c, 0x3e, 0xd8, 0xff, 0xb8, 0xac, 0x16, 0x94, 0x8e, 0xf0, - 0x75, 0x8c, 0x48, 0x43, 0xeb, 0xf0, 0x91, 0x86, 0x3a, 0x62, 0xa3, 0x33, 0xeb, 0x34, 0x95, 0xa4, - 0x56, 0xba, 0x4f, 0x49, 0x6a, 0x3f, 0x6b, 0xa5, 0x4a, 0x36, 0x0d, 0x5f, 0x78, 0xb9, 0xd8, 0xe8, - 0xe2, 0x49, 0x1e, 0x4d, 0x92, 0x91, 0xee, 0xe9, 0x20, 0x22, 0x2a, 0x4d, 0x0d, 0xb4, 0xbe, 0xa4, - 0xe1, 0xbf, 0x2d, 0xc3, 0xb0, 0xa1, 0x49, 0x73, 0xcd, 0x22, 0xeb, 0x01, 0x33, 0x8b, 0x4a, 0x7d, - 0x98, 0x45, 0x3f, 0x03, 0xb5, 0xba, 0x94, 0xf2, 0xc5, 0x14, 0x2d, 0xce, 0xea, 0x0e, 0x2d, 0xe8, - 0x55, 0x13, 0xd6, 0x3c, 0xd1, 0x7c, 0x2a, 0xb5, 0x49, 0x68, 0x88, 0x01, 0xa6, 0x21, 0xf2, 0x72, - 0x8f, 0x84, 0xa6, 0xe8, 0x7c, 0x86, 0x55, 0xf6, 0x0a, 0x5d, 0xf1, 0x5e, 0x32, 0x07, 0x80, 0x57, - 0xf6, 0x5a, 0x59, 0x90, 0xcd, 0xd8, 0xc4, 0xb1, 0xbf, 0x63, 0xa9, 0x8f, 0x7b, 0x0f, 0x6a, 0x58, - 0xdc, 0x4a, 0xd7, 0xb0, 0xb8, 0x58, 0xc8, 0x30, 0x77, 0x29, 0x5e, 0x71, 0x0d, 0x86, 0x66, 0x83, - 0x56, 0xcb, 0xf1, 0x1b, 0xe8, 0x47, 0x60, 0xa8, 0xce, 0x7f, 0x0a, 0xc7, 0x0e, 0x3b, 0x3e, 0x15, - 0x50, 0x2c, 0x61, 0xe8, 0x51, 0x18, 0x70, 0xa2, 0xa6, 0x74, 0xe6, 0xb0, 0xe0, 0xa3, 0xe9, 0xa8, - 0x19, 0x63, 0xd6, 0x6a, 0xff, 0xfd, 0x01, 0x60, 0x67, 0xfe, 0x4e, 0x44, 0x1a, 0x6b, 0x01, 0x2b, - 0x9a, 0x78, 0xac, 0x87, 0x8e, 0x7a, 0xb3, 0xf4, 0x20, 0x1f, 0x3c, 0x1a, 0x87, 0x4f, 0xe5, 0x7b, - 0x7d, 0xf8, 0x94, 0x7f, 0x9e, 0x38, 0xf0, 0x00, 0x9d, 0x27, 0xda, 0x9f, 0xb1, 0x00, 0xa9, 0x40, - 0x11, 0x7d, 0xe0, 0x3f, 0x05, 0x35, 0x15, 0x32, 0x22, 0x0c, 0x2b, 0x2d, 0x22, 0x24, 0x00, 0x6b, - 0x9c, 0x1e, 0x76, 0xc8, 0x4f, 0x48, 0xf9, 0x5d, 0x4e, 0xc7, 0x2d, 0x33, 0xa9, 0x2f, 0xc4, 0xb9, - 0xfd, 0xdb, 0x25, 0x78, 0x88, 0xab, 0xe4, 0x25, 0xc7, 0x77, 0x9a, 0xa4, 0x45, 0x7b, 0xd5, 0x6b, - 0x08, 0x47, 0x9d, 0x6e, 0xcd, 0x5c, 0x19, 0x87, 0x7c, 0xd4, 0xb5, 0xcb, 0xd7, 0x1c, 0x5f, 0x65, - 0x0b, 0xbe, 0x9b, 0x60, 0x46, 0x1c, 0xc5, 0x50, 0x95, 0x15, 0xfd, 0x85, 0x2c, 0x2e, 0x88, 0x91, - 0x12, 0x4b, 0x42, 0x6f, 0x12, 0xac, 0x18, 0x51, 0xc3, 0xd5, 0x0b, 0xea, 0x5b, 0x98, 0x84, 0x01, - 0x93, 0xbb, 0x46, 0x18, 0xe8, 0xa2, 0x68, 0xc7, 0x0a, 0xc3, 0xfe, 0x6d, 0x0b, 0xb2, 0x1a, 0xc9, - 0xa8, 0x4e, 0x67, 0xed, 0x5b, 0x9d, 0xae, 0x8f, 0xf2, 0x70, 0x3f, 0x05, 0xc3, 0x4e, 0x42, 0x8d, - 0x08, 0xbe, 0xed, 0x2e, 0x1f, 0xee, 0xac, 0x65, 0x29, 0x68, 0xb8, 0x1b, 0x2e, 0xdb, 0x6e, 0x9b, - 0xe4, 0xec, 0x37, 0x2c, 0xa8, 0xcd, 0x45, 0xbb, 0xfd, 0xe7, 0x5f, 0x74, 0x66, 0x57, 0x94, 0xfa, - 0xca, 0xae, 0x90, 0xf9, 0x1b, 0xe5, 0x6e, 0xf9, 0x1b, 0xf6, 0x7f, 0x1b, 0x80, 0x53, 0x1d, 0x89, - 0x3c, 0xe8, 0x05, 0x18, 0xa9, 0x8b, 0x99, 0x1b, 0x4a, 0x5f, 0x5b, 0xcd, 0x8c, 0x68, 0xd4, 0x30, - 0x9c, 0xc2, 0xec, 0x61, 0xed, 0x2c, 0xc0, 0xe9, 0x88, 0xbc, 0xd6, 0x26, 0x6d, 0x32, 0xbd, 0x91, - 0x90, 0x68, 0x95, 0xd4, 0x03, 0xbf, 0xc1, 0xcb, 0x3b, 0x96, 0x67, 0x1e, 0xbe, 0xb3, 0x37, 0x71, - 0x1a, 0x77, 0x82, 0x71, 0xde, 0x33, 0x28, 0x84, 0x51, 0xcf, 0x34, 0x4f, 0xc5, 0xde, 0xe4, 0x50, - 0x96, 0xad, 0x32, 0x5f, 0x52, 0xcd, 0x38, 0xcd, 0x20, 0x6d, 0xe3, 0x56, 0xee, 0x93, 0x8d, 0xfb, - 0x09, 0x6d, 0xe3, 0xf2, 0xd0, 0x89, 0x0f, 0x14, 0x9c, 0xc8, 0x75, 0xdc, 0x46, 0xee, 0x4b, 0x50, - 0x95, 0x61, 0x65, 0x3d, 0x85, 0x63, 0x99, 0x74, 0xba, 0x08, 0xdb, 0x27, 0xe1, 0x87, 0x2f, 0x46, - 0x91, 0x31, 0x98, 0xd7, 0x82, 0x64, 0xda, 0xf3, 0x82, 0xdb, 0xd4, 0x7e, 0xb8, 0x1e, 0x13, 0xe1, - 0xfc, 0xb1, 0xef, 0x96, 0x20, 0x67, 0x1f, 0x45, 0xd7, 0xa4, 0x36, 0x5a, 0x52, 0x6b, 0xb2, 0x3f, - 0xc3, 0x05, 0xed, 0xf0, 0xd0, 0x3b, 0xae, 0x9e, 0xdf, 0x5f, 0xf4, 0x3e, 0x50, 0x47, 0xe3, 0xa9, - 0x3c, 0x18, 0x15, 0x91, 0x77, 0x01, 0x40, 0xdb, 0x9a, 0x22, 0xcb, 0x41, 0x1d, 0xa7, 0x6b, 0x93, - 0x14, 0x1b, 0x58, 0xe8, 0x79, 0x18, 0x76, 0xfd, 0x38, 0x71, 0x3c, 0xef, 0xb2, 0xeb, 0x27, 0xc2, - 0xbf, 0xa9, 0xec, 0x90, 0x05, 0x0d, 0xc2, 0x26, 0xde, 0xb9, 0x77, 0x19, 0xdf, 0xaf, 0x9f, 0xef, - 0xbe, 0x09, 0x8f, 0xcc, 0xbb, 0x89, 0xca, 0xcd, 0x51, 0xf3, 0x8d, 0x9a, 0x92, 0x4a, 0x56, 0x59, - 0x5d, 0x73, 0xcd, 0x8c, 0xdc, 0x98, 0x52, 0x3a, 0x95, 0x27, 0x9b, 0x1b, 0x63, 0xbf, 0x00, 0x67, - 0xe6, 0xdd, 0xe4, 0x92, 0xeb, 0x91, 0x3e, 0x99, 0xd8, 0xbf, 0x39, 0x08, 0x23, 0x66, 0x76, 0x67, - 0x3f, 0xe2, 0xfa, 0x73, 0xd4, 0x5a, 0x14, 0x6f, 0xe7, 0xaa, 0x73, 0xbf, 0x9b, 0x47, 0x4e, 0x35, - 0xcd, 0x1f, 0x31, 0xc3, 0x60, 0xd4, 0x3c, 0xb1, 0xd9, 0x01, 0x74, 0x1b, 0x2a, 0x1b, 0x2c, 0x77, - 0xa3, 0x5c, 0x44, 0xc4, 0x46, 0xde, 0x88, 0xea, 0xe5, 0xc8, 0xb3, 0x3f, 0x38, 0x3f, 0xaa, 0xe4, - 0xa3, 0x74, 0x42, 0xa0, 0x11, 0x6f, 0x2c, 0x94, 0x95, 0xc2, 0xe8, 0xa6, 0x12, 0x2a, 0x87, 0x50, - 0x09, 0x29, 0x01, 0x3d, 0x78, 0x9f, 0x04, 0x34, 0xcb, 0xc3, 0x49, 0x36, 0x99, 0x09, 0x2a, 0x12, - 0x24, 0x86, 0xd8, 0x20, 0x18, 0x79, 0x38, 0x29, 0x30, 0xce, 0xe2, 0xa3, 0x8f, 0x2a, 0x11, 0x5f, - 0x2d, 0xc2, 0x35, 0x6c, 0xce, 0xe8, 0xe3, 0x96, 0xee, 0x9f, 0x29, 0xc1, 0xd8, 0xbc, 0xdf, 0x5e, - 0x99, 0x5f, 0x69, 0xaf, 0x7b, 0x6e, 0xfd, 0x2a, 0xd9, 0xa5, 0x22, 0x7c, 0x8b, 0xec, 0x2e, 0xcc, - 0x89, 0x15, 0xa4, 0xe6, 0xcc, 0x55, 0xda, 0x88, 0x39, 0x8c, 0x0a, 0xa3, 0x0d, 0xd7, 0x6f, 0x92, - 0x28, 0x8c, 0x5c, 0xe1, 0xb5, 0x35, 0x84, 0xd1, 0x25, 0x0d, 0xc2, 0x26, 0x1e, 0xa5, 0x1d, 0xdc, - 0xf6, 0x49, 0x94, 0xb5, 0xc5, 0x97, 0x69, 0x23, 0xe6, 0x30, 0x8a, 0x94, 0x44, 0xed, 0x38, 0x11, - 0x93, 0x51, 0x21, 0xad, 0xd1, 0x46, 0xcc, 0x61, 0x74, 0xa5, 0xc7, 0xed, 0x75, 0x16, 0x10, 0x93, - 0xc9, 0xc6, 0x58, 0xe5, 0xcd, 0x58, 0xc2, 0x29, 0xea, 0x16, 0xd9, 0x9d, 0xa3, 0x1b, 0xf7, 0x4c, - 0x52, 0xd6, 0x55, 0xde, 0x8c, 0x25, 0x9c, 0xd5, 0xaf, 0x4c, 0x0f, 0xc7, 0xf7, 0x5d, 0xfd, 0xca, - 0x74, 0xf7, 0xbb, 0xb8, 0x00, 0x7e, 0xc5, 0x82, 0x11, 0x33, 0x8c, 0x0d, 0x35, 0x33, 0x66, 0xfa, - 0x72, 0x47, 0xf9, 0xe3, 0x9f, 0xc8, 0xbb, 0x3b, 0xae, 0xe9, 0x26, 0x41, 0x18, 0x3f, 0x43, 0xfc, - 0xa6, 0xeb, 0x13, 0x16, 0x08, 0xc0, 0xc3, 0xdf, 0x52, 0x31, 0x72, 0xb3, 0x41, 0x83, 0x1c, 0xc2, - 0xce, 0xb7, 0x6f, 0xc2, 0xa9, 0x8e, 0x4c, 0xbc, 0x1e, 0x4c, 0x90, 0x03, 0xf3, 0xa0, 0x6d, 0x0c, - 0xc3, 0x94, 0xb0, 0xac, 0xa1, 0x34, 0x0b, 0xa7, 0xf8, 0x42, 0xa2, 0x9c, 0x56, 0xeb, 0x9b, 0xa4, - 0xa5, 0xb2, 0x2b, 0xd9, 0x11, 0xc1, 0x8d, 0x2c, 0x10, 0x77, 0xe2, 0xdb, 0x9f, 0xb5, 0x60, 0x34, - 0x95, 0x1c, 0x59, 0x90, 0xb1, 0xc4, 0x56, 0x5a, 0xc0, 0xa2, 0x2a, 0x59, 0x94, 0x7b, 0x99, 0x29, - 0x53, 0xbd, 0xd2, 0x34, 0x08, 0x9b, 0x78, 0xf6, 0x17, 0x4b, 0x50, 0x95, 0x41, 0x20, 0x3d, 0x74, - 0xe5, 0xd3, 0x16, 0x8c, 0xaa, 0x63, 0x19, 0xe6, 0xef, 0x2b, 0x15, 0x91, 0xc9, 0x42, 0x7b, 0xa0, - 0x3c, 0x06, 0xfe, 0x46, 0xa0, 0x2d, 0x77, 0x6c, 0x32, 0xc3, 0x69, 0xde, 0xe8, 0x06, 0x40, 0xbc, - 0x1b, 0x27, 0xa4, 0x65, 0x78, 0x1e, 0x6d, 0x63, 0xc5, 0x4d, 0xd6, 0x83, 0x88, 0xd0, 0xf5, 0x75, - 0x2d, 0x68, 0x90, 0x55, 0x85, 0xa9, 0x4d, 0x28, 0xdd, 0x86, 0x0d, 0x4a, 0xf6, 0xdf, 0x2d, 0xc1, - 0xc9, 0x6c, 0x97, 0xd0, 0x07, 0x60, 0x44, 0x72, 0x37, 0xae, 0xc1, 0x93, 0x91, 0x2f, 0x23, 0xd8, - 0x80, 0xdd, 0xdd, 0x9b, 0x98, 0xe8, 0xbc, 0x87, 0x70, 0xd2, 0x44, 0xc1, 0x29, 0x62, 0xfc, 0x6c, - 0x4c, 0x1c, 0xe2, 0xce, 0xec, 0x4e, 0x87, 0xa1, 0x38, 0xe0, 0x32, 0xce, 0xc6, 0x4c, 0x28, 0xce, - 0x60, 0xa3, 0x15, 0x38, 0x63, 0xb4, 0x5c, 0x23, 0x6e, 0x73, 0x73, 0x3d, 0x88, 0xe4, 0x0e, 0xec, - 0x51, 0x1d, 0x30, 0xd7, 0x89, 0x83, 0x73, 0x9f, 0xa4, 0xda, 0xbe, 0xee, 0x84, 0x4e, 0xdd, 0x4d, - 0x76, 0x85, 0x2b, 0x55, 0xc9, 0xa6, 0x59, 0xd1, 0x8e, 0x15, 0x86, 0x7d, 0x15, 0x6a, 0x3c, 0x40, - 0x8c, 0xac, 0x05, 0x39, 0x3b, 0x5c, 0xab, 0x9f, 0x1d, 0xae, 0xbd, 0x04, 0x03, 0x3d, 0x4e, 0xc7, - 0x9e, 0xb6, 0x11, 0x2f, 0x41, 0x95, 0x92, 0x93, 0xb6, 0x62, 0x11, 0x24, 0x03, 0xa8, 0xca, 0xbb, - 0x6e, 0x90, 0x0d, 0x65, 0xd7, 0x91, 0x67, 0x99, 0x6a, 0x8c, 0x16, 0xe2, 0xb8, 0xcd, 0x9c, 0x06, - 0x14, 0x88, 0x9e, 0x80, 0x32, 0xd9, 0x09, 0xb3, 0x87, 0x96, 0x17, 0x77, 0x42, 0x37, 0x22, 0x31, - 0x45, 0x22, 0x3b, 0x21, 0x3a, 0x07, 0x25, 0xb7, 0x21, 0x34, 0x1e, 0x08, 0x9c, 0xd2, 0xc2, 0x1c, - 0x2e, 0xb9, 0x0d, 0x7b, 0x07, 0x6a, 0xea, 0x72, 0x1d, 0xb4, 0x25, 0x15, 0x81, 0x55, 0x44, 0x08, - 0x98, 0xa4, 0xdb, 0x45, 0x05, 0xb4, 0x01, 0x74, 0xca, 0x69, 0x51, 0xc2, 0xea, 0x3c, 0x0c, 0xd4, - 0x03, 0x91, 0x0e, 0x5f, 0xd5, 0x64, 0x98, 0x06, 0x60, 0x10, 0xfb, 0x26, 0x8c, 0x5d, 0xf5, 0x83, - 0xdb, 0xec, 0x66, 0x00, 0x56, 0x08, 0x8f, 0x12, 0xde, 0xa0, 0x3f, 0xb2, 0xf6, 0x06, 0x83, 0x62, - 0x0e, 0x53, 0x15, 0xc2, 0x4a, 0xdd, 0x2a, 0x84, 0xd9, 0x1f, 0xb3, 0x60, 0x44, 0xe5, 0xae, 0xcd, - 0x6f, 0x6f, 0x51, 0xba, 0xcd, 0x28, 0x68, 0x87, 0x59, 0xba, 0xec, 0xfa, 0x2b, 0xcc, 0x61, 0x66, - 0x52, 0x67, 0xe9, 0x80, 0xa4, 0xce, 0xf3, 0x30, 0xb0, 0xe5, 0xfa, 0x8d, 0xac, 0x7f, 0xe6, 0xaa, - 0xeb, 0x37, 0x30, 0x83, 0xd0, 0x2e, 0x9c, 0x54, 0x5d, 0x90, 0xda, 0xe5, 0x05, 0x18, 0x59, 0x6f, - 0xbb, 0x5e, 0x43, 0x56, 0xf8, 0xcb, 0xb8, 0x67, 0x66, 0x0c, 0x18, 0x4e, 0x61, 0xd2, 0x4d, 0xe2, - 0xba, 0xeb, 0x3b, 0xd1, 0xee, 0x8a, 0x56, 0x67, 0x4a, 0xc2, 0xcd, 0x28, 0x08, 0x36, 0xb0, 0xec, - 0xcf, 0x97, 0x61, 0x2c, 0x9d, 0xc1, 0xd7, 0xc3, 0x5e, 0xed, 0x09, 0xa8, 0xb0, 0xa4, 0xbe, 0xec, - 0xa7, 0xe5, 0x45, 0xf1, 0x38, 0x0c, 0xc5, 0x30, 0xc8, 0x97, 0x73, 0x31, 0x77, 0x21, 0xa9, 0x4e, - 0x2a, 0xa7, 0x0e, 0x8b, 0xaf, 0x13, 0x12, 0x44, 0xb0, 0x42, 0x9f, 0xb4, 0x60, 0x28, 0x08, 0xcd, - 0xca, 0x52, 0xef, 0x2f, 0x32, 0xbb, 0x51, 0x24, 0x57, 0x09, 0xf3, 0x5a, 0x7d, 0x7a, 0xf9, 0x39, - 0x24, 0xeb, 0x73, 0xef, 0x86, 0x11, 0x13, 0xf3, 0x20, 0x0b, 0xbb, 0x6a, 0x5a, 0xd8, 0x9f, 0x36, - 0x27, 0x85, 0xc8, 0xdf, 0xec, 0x61, 0xb9, 0x5d, 0x87, 0x4a, 0x5d, 0x05, 0x44, 0x1c, 0xaa, 0x2e, - 0xac, 0xaa, 0xcf, 0xc1, 0x0e, 0xc5, 0x38, 0x35, 0xfb, 0x3b, 0x96, 0x31, 0x3f, 0x30, 0x89, 0x17, - 0x1a, 0x28, 0x82, 0x72, 0x73, 0x7b, 0x4b, 0xd8, 0xb5, 0x57, 0x0a, 0x1a, 0xde, 0xf9, 0xed, 0x2d, - 0x3d, 0xc7, 0xcd, 0x56, 0x4c, 0x99, 0xf5, 0xe0, 0x79, 0x4c, 0xa5, 0xf9, 0x96, 0x0f, 0x4e, 0xf3, - 0xb5, 0xdf, 0x28, 0xc1, 0xa9, 0x8e, 0x49, 0x85, 0x5e, 0x87, 0x4a, 0x44, 0xdf, 0x52, 0xbc, 0xde, - 0x62, 0x61, 0x89, 0xb9, 0xf1, 0x42, 0x43, 0xeb, 0xbd, 0x74, 0x3b, 0xe6, 0x2c, 0xd1, 0x15, 0x40, - 0x3a, 0x6c, 0x47, 0xb9, 0x3d, 0xf9, 0x2b, 0x9f, 0x13, 0x8f, 0xa2, 0xe9, 0x0e, 0x0c, 0x9c, 0xf3, - 0x14, 0x7a, 0x31, 0xeb, 0x3d, 0x2d, 0xa7, 0xcf, 0x71, 0xf7, 0x73, 0x84, 0xda, 0xff, 0xa4, 0x04, - 0xa3, 0xa9, 0x42, 0x5f, 0xc8, 0x83, 0x2a, 0xf1, 0xd8, 0x21, 0x87, 0x54, 0x36, 0x47, 0xad, 0x9b, - 0xad, 0x14, 0xe4, 0x45, 0x41, 0x17, 0x2b, 0x0e, 0x0f, 0x46, 0xb0, 0xc1, 0x0b, 0x30, 0x22, 0x3b, - 0xf4, 0x7e, 0xa7, 0xe5, 0x89, 0x01, 0x54, 0x73, 0xf4, 0xa2, 0x01, 0xc3, 0x29, 0x4c, 0xfb, 0x77, - 0xca, 0x30, 0xce, 0x4f, 0x85, 0x1a, 0x6a, 0xe6, 0x2d, 0xc9, 0xcd, 0xdb, 0x5f, 0xd4, 0xe5, 0xf8, - 0xf8, 0x40, 0xae, 0x1f, 0xf5, 0x9a, 0x8a, 0x7c, 0x46, 0x3d, 0x45, 0xaa, 0x7d, 0x35, 0x13, 0xa9, - 0xc6, 0x6d, 0xf8, 0xe6, 0x31, 0xf5, 0xe8, 0xfb, 0x2b, 0x74, 0xed, 0x6f, 0x95, 0xe0, 0x44, 0xe6, - 0x0e, 0x10, 0xf4, 0xf9, 0x74, 0xd9, 0x68, 0xab, 0x08, 0x07, 0xfd, 0xbe, 0xd7, 0x42, 0xf4, 0x57, - 0x3c, 0xfa, 0x3e, 0x2d, 0x15, 0xfb, 0x0f, 0x4a, 0x30, 0x96, 0xbe, 0xbc, 0xe4, 0x01, 0x1c, 0xa9, - 0x77, 0x40, 0x8d, 0xd5, 0xe7, 0x67, 0x97, 0xb2, 0x72, 0xff, 0x3e, 0x2f, 0x85, 0x2e, 0x1b, 0xb1, - 0x86, 0x3f, 0x10, 0x35, 0xb9, 0xed, 0xbf, 0x6d, 0xc1, 0x59, 0xfe, 0x96, 0xd9, 0x79, 0xf8, 0x97, - 0xf2, 0x46, 0xf7, 0x95, 0x62, 0x3b, 0x98, 0x29, 0x23, 0x79, 0xd0, 0xf8, 0xb2, 0xcb, 0x20, 0x45, - 0x6f, 0xd3, 0x53, 0xe1, 0x01, 0xec, 0x6c, 0x5f, 0x93, 0xc1, 0xfe, 0x83, 0x32, 0xe8, 0xfb, 0x2f, - 0x91, 0x2b, 0x12, 0x51, 0x0b, 0x29, 0xa7, 0xb9, 0xba, 0xeb, 0xd7, 0xf5, 0x4d, 0x9b, 0xd5, 0x4c, - 0x1e, 0xea, 0x2f, 0x58, 0x30, 0xec, 0xfa, 0x6e, 0xe2, 0x3a, 0x6c, 0x4f, 0x5e, 0xcc, 0xdd, 0x7c, - 0x8a, 0xdd, 0x02, 0xa7, 0x1c, 0x44, 0xe6, 0xa1, 0x90, 0x62, 0x86, 0x4d, 0xce, 0xe8, 0x43, 0x22, - 0x98, 0xbc, 0x5c, 0x58, 0x36, 0x77, 0x35, 0x13, 0x41, 0x1e, 0x52, 0xc3, 0x2b, 0x89, 0x0a, 0x2a, - 0x82, 0x80, 0x29, 0x29, 0x55, 0x99, 0x59, 0xdf, 0x44, 0x4e, 0x9b, 0x31, 0x67, 0x64, 0xc7, 0x80, - 0x3a, 0xc7, 0xa2, 0xcf, 0x40, 0xdd, 0x29, 0xa8, 0x39, 0xed, 0x24, 0x68, 0xd1, 0x61, 0x12, 0xe7, - 0x56, 0x3a, 0x14, 0x59, 0x02, 0xb0, 0xc6, 0xb1, 0x3f, 0x5f, 0x81, 0x4c, 0x66, 0x28, 0xda, 0x31, - 0xef, 0x6e, 0xb5, 0x8a, 0xbd, 0xbb, 0x55, 0x75, 0x26, 0xef, 0xfe, 0x56, 0xd4, 0x84, 0x4a, 0xb8, - 0xe9, 0xc4, 0xd2, 0xac, 0x7e, 0x49, 0xed, 0xe3, 0x68, 0xe3, 0xdd, 0xbd, 0x89, 0x9f, 0xec, 0xcd, - 0x85, 0x4b, 0xe7, 0xea, 0x14, 0x2f, 0x77, 0xa3, 0x59, 0x33, 0x1a, 0x98, 0xd3, 0xef, 0xe7, 0x76, - 0xc2, 0x8f, 0x8b, 0x8b, 0x08, 0x30, 0x89, 0xdb, 0x5e, 0x22, 0x66, 0xc3, 0x4b, 0x05, 0xae, 0x32, - 0x4e, 0x58, 0x97, 0x57, 0xe0, 0xff, 0xb1, 0xc1, 0x14, 0x7d, 0x00, 0x6a, 0x71, 0xe2, 0x44, 0xc9, - 0x21, 0xb3, 0x90, 0xd5, 0xa0, 0xaf, 0x4a, 0x22, 0x58, 0xd3, 0x43, 0x2f, 0xb3, 0xea, 0xc2, 0x6e, - 0xbc, 0x79, 0xc8, 0x1c, 0x10, 0x59, 0x89, 0x58, 0x50, 0xc0, 0x06, 0x35, 0x74, 0x01, 0x80, 0xcd, - 0x6d, 0x1e, 0xf8, 0x58, 0x65, 0x5e, 0x26, 0x25, 0x0a, 0xb1, 0x82, 0x60, 0x03, 0xcb, 0xfe, 0x51, - 0x48, 0xd7, 0x07, 0x41, 0x13, 0xb2, 0x1c, 0x09, 0x77, 0x69, 0xb3, 0x5c, 0x8e, 0x54, 0xe5, 0x90, - 0x5f, 0xb7, 0xc0, 0x2c, 0x62, 0x82, 0x5e, 0xe3, 0xd5, 0x52, 0xac, 0x22, 0x8e, 0x21, 0x0d, 0xba, - 0x93, 0x4b, 0x4e, 0x98, 0x39, 0x0f, 0x97, 0x25, 0x53, 0xce, 0xbd, 0x0b, 0xaa, 0x12, 0xda, 0x97, - 0x51, 0xf7, 0x51, 0x38, 0x9d, 0xbd, 0xd9, 0x5e, 0x1c, 0x61, 0x1d, 0xec, 0xfa, 0x91, 0xfe, 0x9c, - 0x52, 0x37, 0x7f, 0x4e, 0x0f, 0x37, 0xf8, 0xfe, 0x86, 0x05, 0xe7, 0x0f, 0xba, 0x80, 0x1f, 0x3d, - 0x0a, 0x03, 0xb7, 0x9d, 0x48, 0x96, 0x7d, 0x67, 0x82, 0xf2, 0xa6, 0x13, 0xf9, 0x98, 0xb5, 0xa2, - 0x5d, 0x18, 0xe4, 0xd1, 0x71, 0xc2, 0x5a, 0x3f, 0xe2, 0xda, 0xc8, 0x19, 0x0e, 0xbd, 0x5d, 0xe0, - 0x91, 0x79, 0x58, 0x30, 0xb4, 0xbf, 0x6b, 0x01, 0x5a, 0xde, 0x26, 0x51, 0xe4, 0x36, 0x8c, 0x78, - 0x3e, 0x76, 0xa1, 0x8f, 0x71, 0x71, 0x8f, 0x99, 0xf2, 0x9b, 0xb9, 0xd0, 0xc7, 0xf8, 0x97, 0x7f, - 0xa1, 0x4f, 0xa9, 0xbf, 0x0b, 0x7d, 0xd0, 0x32, 0x9c, 0x6d, 0xf1, 0xed, 0x06, 0xbf, 0x24, 0x83, - 0xef, 0x3d, 0x54, 0x82, 0xdd, 0x23, 0x77, 0xf6, 0x26, 0xce, 0x2e, 0xe5, 0x21, 0xe0, 0xfc, 0xe7, - 0xec, 0x77, 0x01, 0xe2, 0x61, 0x7c, 0xb3, 0x79, 0x81, 0x4f, 0x5d, 0xdd, 0x2f, 0xf6, 0x57, 0x2a, - 0x70, 0x22, 0x53, 0x14, 0x98, 0x6e, 0xf5, 0x3a, 0x23, 0xad, 0x8e, 0xac, 0xbf, 0x3b, 0xbb, 0xd7, - 0x53, 0xec, 0x96, 0x0f, 0x15, 0xd7, 0x0f, 0xdb, 0x49, 0x31, 0x39, 0xb5, 0xbc, 0x13, 0x0b, 0x94, - 0xa0, 0xe1, 0x2e, 0xa6, 0x7f, 0x31, 0x67, 0x53, 0x64, 0x24, 0x58, 0xca, 0x18, 0x1f, 0xb8, 0x4f, - 0xee, 0x80, 0x8f, 0xeb, 0xb8, 0xac, 0x4a, 0x11, 0x8e, 0xc5, 0xcc, 0x64, 0x39, 0xee, 0x73, 0xfb, - 0x5f, 0x2b, 0xc1, 0xb0, 0xf1, 0xd1, 0xd0, 0x2f, 0xa7, 0x4b, 0x7c, 0x59, 0xc5, 0xbd, 0x12, 0xa3, - 0x3f, 0xa9, 0x8b, 0x78, 0xf1, 0x57, 0x7a, 0xb2, 0xb3, 0xba, 0xd7, 0xdd, 0xbd, 0x89, 0x93, 0x99, - 0xfa, 0x5d, 0xa9, 0x8a, 0x5f, 0xe7, 0x3e, 0x02, 0x27, 0x32, 0x64, 0x72, 0x5e, 0x79, 0xcd, 0x7c, - 0xe5, 0x23, 0xbb, 0xa5, 0xcc, 0x21, 0xfb, 0x26, 0x1d, 0x32, 0x91, 0x56, 0x18, 0x78, 0xa4, 0x07, - 0x1f, 0x6c, 0x26, 0x7b, 0xb8, 0xd4, 0x63, 0xf6, 0xf0, 0x53, 0x50, 0x0d, 0x03, 0xcf, 0xad, 0xbb, - 0xaa, 0x0e, 0x26, 0xcb, 0x57, 0x5e, 0x11, 0x6d, 0x58, 0x41, 0xd1, 0x6d, 0xa8, 0xdd, 0xba, 0x9d, - 0xf0, 0xd3, 0x1f, 0xe1, 0xdf, 0x2e, 0xea, 0xd0, 0x47, 0x19, 0x2d, 0xea, 0x78, 0x09, 0x6b, 0x5e, - 0xc8, 0x86, 0x41, 0xa6, 0x04, 0x65, 0x2a, 0x04, 0xf3, 0xbd, 0x33, 0xed, 0x18, 0x63, 0x01, 0xb1, - 0xbf, 0x5e, 0x83, 0x33, 0x79, 0x95, 0xd9, 0xd1, 0x87, 0x61, 0x90, 0xf7, 0xb1, 0x98, 0xcb, 0x3f, - 0xf2, 0x78, 0xcc, 0x33, 0x82, 0xa2, 0x5b, 0xec, 0x37, 0x16, 0x3c, 0x05, 0x77, 0xcf, 0x59, 0x17, - 0x33, 0xe4, 0x78, 0xb8, 0x2f, 0x3a, 0x9a, 0xfb, 0xa2, 0xc3, 0xb9, 0x7b, 0xce, 0x3a, 0xda, 0x81, - 0x4a, 0xd3, 0x4d, 0x88, 0x23, 0x9c, 0x08, 0x37, 0x8f, 0x85, 0x39, 0x71, 0xb8, 0x95, 0xc6, 0x7e, - 0x62, 0xce, 0x10, 0x7d, 0xcd, 0x82, 0x13, 0xeb, 0xe9, 0x52, 0x01, 0x42, 0x78, 0x3a, 0xc7, 0x50, - 0x7d, 0x3f, 0xcd, 0x88, 0xdf, 0x68, 0x95, 0x69, 0xc4, 0xd9, 0xee, 0xa0, 0x4f, 0x58, 0x30, 0xb4, - 0xe1, 0x7a, 0x46, 0x21, 0xe6, 0x63, 0xf8, 0x38, 0x97, 0x18, 0x03, 0xbd, 0xe3, 0xe0, 0xff, 0x63, - 0x2c, 0x39, 0x77, 0xd3, 0x54, 0x83, 0x47, 0xd5, 0x54, 0x43, 0xf7, 0x49, 0x53, 0x7d, 0xca, 0x82, - 0x9a, 0x1a, 0x69, 0x91, 0xfe, 0xfd, 0x81, 0x63, 0xfc, 0xe4, 0xdc, 0x73, 0xa2, 0xfe, 0x62, 0xcd, - 0x1c, 0x7d, 0xc1, 0x82, 0x61, 0xe7, 0xf5, 0x76, 0x44, 0x1a, 0x64, 0x3b, 0x08, 0x63, 0x51, 0xd1, - 0xec, 0x95, 0xe2, 0x3b, 0x33, 0x4d, 0x99, 0xcc, 0x91, 0xed, 0xe5, 0x30, 0x16, 0x69, 0x5a, 0xba, - 0x01, 0x9b, 0x5d, 0xb0, 0xf7, 0x4a, 0x30, 0x71, 0x00, 0x05, 0xf4, 0x02, 0x8c, 0x04, 0x51, 0xd3, - 0xf1, 0xdd, 0xd7, 0xcd, 0xda, 0x1f, 0xca, 0xca, 0x5a, 0x36, 0x60, 0x38, 0x85, 0x69, 0x26, 0xa8, - 0x97, 0x0e, 0x48, 0x50, 0x3f, 0x0f, 0x03, 0x11, 0x09, 0x83, 0xec, 0x66, 0x81, 0xa5, 0x48, 0x30, - 0x08, 0x7a, 0x0c, 0xca, 0x4e, 0xe8, 0x8a, 0xa8, 0x36, 0xb5, 0x07, 0x9a, 0x5e, 0x59, 0xc0, 0xb4, - 0x3d, 0x55, 0x2f, 0xa3, 0x72, 0x4f, 0xea, 0x65, 0x50, 0x35, 0x20, 0xce, 0x2e, 0x06, 0xb5, 0x1a, - 0x48, 0x9f, 0x29, 0xd8, 0x6f, 0x94, 0xe1, 0xb1, 0x7d, 0xe7, 0x8b, 0x0e, 0xea, 0xb3, 0xf6, 0x09, - 0xea, 0x93, 0xc3, 0x53, 0x3a, 0x68, 0x78, 0xca, 0x5d, 0x86, 0xe7, 0x13, 0x74, 0x19, 0xc8, 0x9a, - 0x29, 0xc5, 0x5c, 0x68, 0xd8, 0xad, 0x04, 0x8b, 0x58, 0x01, 0x12, 0x8a, 0x35, 0x5f, 0xba, 0x07, - 0x48, 0x25, 0x67, 0x57, 0x8a, 0x50, 0x03, 0x5d, 0x6b, 0xa8, 0xf0, 0xb9, 0xdf, 0x2d, 0xe3, 0xdb, - 0xfe, 0x72, 0x09, 0x9e, 0xe8, 0x41, 0x7a, 0x9b, 0xb3, 0xd8, 0xea, 0x71, 0x16, 0x7f, 0x7f, 0x7f, - 0x26, 0xfb, 0x2f, 0x5b, 0x70, 0xae, 0xbb, 0xf2, 0x40, 0xcf, 0xc2, 0xf0, 0x7a, 0xe4, 0xf8, 0xf5, - 0x4d, 0x76, 0x49, 0xab, 0x1c, 0x14, 0x36, 0xd6, 0xba, 0x19, 0x9b, 0x38, 0x74, 0x7b, 0xcb, 0x63, - 0x12, 0x0c, 0x0c, 0x99, 0x4c, 0x4b, 0xb7, 0xb7, 0x6b, 0x59, 0x20, 0xee, 0xc4, 0xb7, 0xff, 0xac, - 0x94, 0xdf, 0x2d, 0x6e, 0x64, 0xf4, 0xf3, 0x9d, 0xc4, 0x57, 0x28, 0xf5, 0x20, 0x4b, 0xca, 0xf7, - 0x5a, 0x96, 0x0c, 0x74, 0x93, 0x25, 0x68, 0x0e, 0x4e, 0x1a, 0x97, 0xf8, 0xf0, 0x04, 0x69, 0x1e, - 0xbd, 0xab, 0xaa, 0x86, 0xac, 0x64, 0xe0, 0xb8, 0xe3, 0x09, 0xf4, 0x34, 0x54, 0x5d, 0x3f, 0x26, - 0xf5, 0x76, 0xc4, 0xa3, 0xc6, 0x8d, 0xa4, 0xb4, 0x05, 0xd1, 0x8e, 0x15, 0x86, 0xfd, 0x2b, 0x25, - 0x78, 0xa4, 0xab, 0x9d, 0x75, 0x8f, 0x64, 0x97, 0xf9, 0x39, 0x06, 0xee, 0xcd, 0xe7, 0x30, 0x07, - 0xa9, 0x72, 0xe0, 0x20, 0xfd, 0x61, 0xf7, 0x89, 0x49, 0x6d, 0xee, 0x1f, 0xd8, 0x51, 0x7a, 0x11, - 0x46, 0x9d, 0x30, 0xe4, 0x78, 0x2c, 0xf8, 0x33, 0x53, 0x35, 0x68, 0xda, 0x04, 0xe2, 0x34, 0x6e, - 0x4f, 0xda, 0xf3, 0x8f, 0x2d, 0xa8, 0x61, 0xb2, 0xc1, 0xa5, 0x03, 0xba, 0x25, 0x86, 0xc8, 0x2a, - 0xa2, 0xe8, 0x29, 0x1d, 0xd8, 0xd8, 0x65, 0xc5, 0x40, 0xf3, 0x06, 0xfb, 0xa8, 0xe9, 0x88, 0xea, - 0xba, 0x9f, 0x72, 0xf7, 0xeb, 0x7e, 0xec, 0x6f, 0x0e, 0xd1, 0xd7, 0x0b, 0x83, 0xd9, 0x88, 0x34, - 0x62, 0xfa, 0x7d, 0xdb, 0x91, 0x27, 0x26, 0x89, 0xfa, 0xbe, 0xd7, 0xf1, 0x22, 0xa6, 0xed, 0xa9, - 0xa3, 0x98, 0x52, 0x5f, 0x35, 0x53, 0xca, 0x07, 0xd6, 0x4c, 0x79, 0x11, 0x46, 0xe3, 0x78, 0x73, - 0x25, 0x72, 0xb7, 0x9d, 0x84, 0x5c, 0x25, 0xbb, 0xc2, 0xca, 0xd2, 0x75, 0x0e, 0x56, 0x2f, 0x6b, - 0x20, 0x4e, 0xe3, 0xa2, 0x79, 0x38, 0xa5, 0x2b, 0x97, 0x90, 0x28, 0x61, 0xa9, 0x02, 0x7c, 0x26, - 0xa8, 0xa4, 0x66, 0x5d, 0xeb, 0x44, 0x20, 0xe0, 0xce, 0x67, 0xa8, 0x7c, 0x4b, 0x35, 0xd2, 0x8e, - 0x0c, 0xa6, 0xe5, 0x5b, 0x8a, 0x0e, 0xed, 0x4b, 0xc7, 0x13, 0x68, 0x09, 0x4e, 0xf3, 0x89, 0x31, - 0x1d, 0x86, 0xc6, 0x1b, 0x0d, 0xa5, 0x8b, 0x4d, 0xce, 0x77, 0xa2, 0xe0, 0xbc, 0xe7, 0xd0, 0xf3, - 0x30, 0xac, 0x9a, 0x17, 0xe6, 0xc4, 0x29, 0x82, 0xf2, 0x62, 0x28, 0x32, 0x0b, 0x0d, 0x6c, 0xe2, - 0xa1, 0xf7, 0xc3, 0xc3, 0xfa, 0x2f, 0xcf, 0x27, 0xe3, 0x47, 0x6b, 0x73, 0xa2, 0x28, 0x94, 0xba, - 0x5c, 0x66, 0x3e, 0x17, 0xad, 0x81, 0xbb, 0x3d, 0x8f, 0xd6, 0xe1, 0x9c, 0x02, 0x5d, 0xf4, 0x13, - 0x96, 0x1c, 0x12, 0x93, 0x19, 0x27, 0x26, 0xd7, 0x23, 0x4f, 0xdc, 0xce, 0xab, 0xee, 0xfd, 0x9c, - 0x77, 0x93, 0xcb, 0x79, 0x98, 0x78, 0x11, 0xef, 0x43, 0x05, 0x4d, 0x41, 0x8d, 0xf8, 0xce, 0xba, - 0x47, 0x96, 0x67, 0x17, 0x58, 0x71, 0x29, 0xe3, 0x24, 0xef, 0xa2, 0x04, 0x60, 0x8d, 0xa3, 0x22, - 0x4c, 0x47, 0xba, 0xde, 0x41, 0xbb, 0x02, 0x67, 0x9a, 0xf5, 0x90, 0xda, 0x1e, 0x6e, 0x9d, 0x4c, - 0xd7, 0x59, 0x40, 0x1d, 0xfd, 0x30, 0xbc, 0x0a, 0xa8, 0x8a, 0xc5, 0x9e, 0x9f, 0x5d, 0xe9, 0xc0, - 0xc1, 0xb9, 0x4f, 0xb2, 0xc0, 0xcb, 0x28, 0xd8, 0xd9, 0x1d, 0x3f, 0x9d, 0x09, 0xbc, 0xa4, 0x8d, - 0x98, 0xc3, 0xd0, 0x15, 0x40, 0x2c, 0xb0, 0xff, 0x72, 0x92, 0x84, 0xca, 0xd8, 0x19, 0x3f, 0xc3, - 0x5e, 0x49, 0x85, 0x91, 0x5d, 0xea, 0xc0, 0xc0, 0x39, 0x4f, 0xd9, 0xff, 0xce, 0x82, 0x51, 0xb5, - 0x5e, 0xef, 0x41, 0x6a, 0x8b, 0x97, 0x4e, 0x6d, 0x99, 0x3f, 0xba, 0xc4, 0x63, 0x3d, 0xef, 0x12, - 0xd2, 0xfc, 0x73, 0xc3, 0x00, 0x5a, 0x2a, 0x2a, 0x85, 0x64, 0x75, 0x55, 0x48, 0x0f, 0xac, 0x44, - 0xca, 0xab, 0x24, 0x53, 0xb9, 0xbf, 0x95, 0x64, 0x56, 0xe1, 0xac, 0x34, 0x17, 0xf8, 0x59, 0xd1, - 0xe5, 0x20, 0x56, 0x02, 0xae, 0x3a, 0xf3, 0x98, 0x20, 0x74, 0x76, 0x21, 0x0f, 0x09, 0xe7, 0x3f, - 0x9b, 0xb2, 0x52, 0x86, 0x0e, 0xb2, 0x52, 0xf4, 0x9a, 0x5e, 0xdc, 0x90, 0xb7, 0xc8, 0x64, 0xd6, - 0xf4, 0xe2, 0xa5, 0x55, 0xac, 0x71, 0xf2, 0x05, 0x7b, 0xad, 0x20, 0xc1, 0x0e, 0x7d, 0x0b, 0x76, - 0x29, 0x62, 0x86, 0xbb, 0x8a, 0x18, 0xe9, 0x93, 0x1e, 0xe9, 0xea, 0x93, 0x7e, 0x0f, 0x8c, 0xb9, - 0xfe, 0x26, 0x89, 0xdc, 0x84, 0x34, 0xd8, 0x5a, 0x60, 0xe2, 0xa7, 0xaa, 0xd5, 0xfa, 0x42, 0x0a, - 0x8a, 0x33, 0xd8, 0x69, 0xb9, 0x38, 0xd6, 0x83, 0x5c, 0xec, 0xa2, 0x8d, 0x4e, 0x14, 0xa3, 0x8d, - 0x4e, 0x1e, 0x5d, 0x1b, 0x9d, 0x3a, 0x56, 0x6d, 0x84, 0x0a, 0xd1, 0x46, 0x3d, 0x09, 0x7a, 0x63, - 0xfb, 0x77, 0xe6, 0x80, 0xed, 0x5f, 0x37, 0x55, 0x74, 0xf6, 0xd0, 0xaa, 0x28, 0x5f, 0xcb, 0x3c, - 0x74, 0x28, 0x2d, 0xf3, 0xa9, 0x12, 0x9c, 0xd5, 0x72, 0x98, 0xce, 0x7e, 0x77, 0x83, 0x4a, 0x22, - 0x76, 0x11, 0x19, 0x3f, 0xb7, 0x31, 0x32, 0xad, 0x74, 0xd2, 0x96, 0x82, 0x60, 0x03, 0x8b, 0x25, - 0x2c, 0x91, 0x88, 0x95, 0x15, 0xce, 0x0a, 0xe9, 0x59, 0xd1, 0x8e, 0x15, 0x06, 0x9d, 0x5f, 0xf4, - 0xb7, 0x48, 0x02, 0xcd, 0x16, 0xcf, 0x9b, 0xd5, 0x20, 0x6c, 0xe2, 0xa1, 0xa7, 0x38, 0x13, 0x26, - 0x20, 0xa8, 0xa0, 0x1e, 0x11, 0x37, 0x13, 0x4b, 0x99, 0xa0, 0xa0, 0xb2, 0x3b, 0x2c, 0x33, 0xad, - 0xd2, 0xd9, 0x1d, 0x16, 0x02, 0xa5, 0x30, 0xec, 0xff, 0x6e, 0xc1, 0x23, 0xb9, 0x43, 0x71, 0x0f, - 0x94, 0xef, 0x4e, 0x5a, 0xf9, 0xae, 0x16, 0xb5, 0xdd, 0x30, 0xde, 0xa2, 0x8b, 0x22, 0xfe, 0x37, - 0x16, 0x8c, 0x69, 0xfc, 0x7b, 0xf0, 0xaa, 0x6e, 0xfa, 0x55, 0x8b, 0xdb, 0x59, 0xd5, 0x3a, 0xde, - 0xed, 0x77, 0x4a, 0xa0, 0x0a, 0x5a, 0x4e, 0xd7, 0x65, 0xb9, 0xe0, 0x03, 0x4e, 0x12, 0x77, 0x61, - 0x90, 0x1d, 0x84, 0xc6, 0xc5, 0x04, 0x79, 0xa4, 0xf9, 0xb3, 0x43, 0x55, 0x7d, 0xc8, 0xcc, 0xfe, - 0xc6, 0x58, 0x30, 0x64, 0x45, 0xaf, 0xdd, 0x98, 0x4a, 0xf3, 0x86, 0x48, 0xcb, 0xd2, 0x45, 0xaf, - 0x45, 0x3b, 0x56, 0x18, 0x54, 0x3d, 0xb8, 0xf5, 0xc0, 0x9f, 0xf5, 0x9c, 0x58, 0xde, 0xbe, 0xa9, - 0xd4, 0xc3, 0x82, 0x04, 0x60, 0x8d, 0xc3, 0xce, 0x48, 0xdd, 0x38, 0xf4, 0x9c, 0x5d, 0x63, 0xff, - 0x6c, 0x14, 0x3b, 0x50, 0x20, 0x6c, 0xe2, 0xd9, 0x2d, 0x18, 0x4f, 0xbf, 0xc4, 0x1c, 0xd9, 0x60, - 0x01, 0x8a, 0x3d, 0x0d, 0xe7, 0x14, 0xd4, 0x1c, 0xf6, 0xd4, 0x62, 0xdb, 0xc9, 0x5e, 0x9a, 0x3f, - 0x2d, 0x01, 0x58, 0xe3, 0xd8, 0xbf, 0x6a, 0xc1, 0xe9, 0x9c, 0x41, 0x2b, 0x30, 0xed, 0x2d, 0xd1, - 0xd2, 0x26, 0x4f, 0xb1, 0xbf, 0x1d, 0x86, 0x1a, 0x64, 0xc3, 0x91, 0x21, 0x70, 0x86, 0x6c, 0x9f, - 0xe3, 0xcd, 0x58, 0xc2, 0xed, 0xff, 0x6a, 0xc1, 0x89, 0x74, 0x5f, 0x63, 0x96, 0x4a, 0xc2, 0x87, - 0xc9, 0x8d, 0xeb, 0xc1, 0x36, 0x89, 0x76, 0xe9, 0x9b, 0x5b, 0x99, 0x54, 0x92, 0x0e, 0x0c, 0x9c, - 0xf3, 0x14, 0x2b, 0x67, 0xdb, 0x50, 0xa3, 0x2d, 0x67, 0xe4, 0x8d, 0x22, 0x67, 0xa4, 0xfe, 0x98, - 0xe6, 0x71, 0xb9, 0x62, 0x89, 0x4d, 0xfe, 0xf6, 0x77, 0x07, 0x40, 0x25, 0xd9, 0xb2, 0xf8, 0xa3, - 0x82, 0xa2, 0xb7, 0xfa, 0xcd, 0x20, 0x52, 0x93, 0x61, 0x60, 0xbf, 0x80, 0x00, 0xee, 0x25, 0x31, - 0x5d, 0x97, 0xea, 0x0d, 0xd7, 0x34, 0x08, 0x9b, 0x78, 0xb4, 0x27, 0x9e, 0xbb, 0x4d, 0xf8, 0x43, - 0x83, 0xe9, 0x9e, 0x2c, 0x4a, 0x00, 0xd6, 0x38, 0xb4, 0x27, 0x0d, 0x77, 0x63, 0x43, 0x6c, 0xf9, - 0x55, 0x4f, 0xe8, 0xe8, 0x60, 0x06, 0xe1, 0x15, 0xca, 0x83, 0x2d, 0x61, 0x05, 0x1b, 0x15, 0xca, - 0x83, 0x2d, 0xcc, 0x20, 0xd4, 0x6e, 0xf3, 0x83, 0xa8, 0xe5, 0x78, 0xee, 0xeb, 0xa4, 0xa1, 0xb8, - 0x08, 0xeb, 0x57, 0xd9, 0x6d, 0xd7, 0x3a, 0x51, 0x70, 0xde, 0x73, 0x74, 0x06, 0x86, 0x11, 0x69, - 0xb8, 0xf5, 0xc4, 0xa4, 0x06, 0xe9, 0x19, 0xb8, 0xd2, 0x81, 0x81, 0x73, 0x9e, 0x42, 0xd3, 0x70, - 0x42, 0x26, 0x49, 0xcb, 0x12, 0x38, 0xc3, 0xe9, 0x92, 0x1b, 0x38, 0x0d, 0xc6, 0x59, 0x7c, 0x2a, - 0xd5, 0x5a, 0xa2, 0x80, 0x17, 0x33, 0x96, 0x0d, 0xa9, 0x26, 0x0b, 0x7b, 0x61, 0x85, 0x61, 0x7f, - 0xbc, 0x4c, 0xb5, 0x70, 0x97, 0xc2, 0x75, 0xf7, 0x2c, 0x5a, 0x30, 0x3d, 0x23, 0x07, 0x7a, 0x98, - 0x91, 0xcf, 0xc1, 0xc8, 0xad, 0x38, 0xf0, 0x55, 0x24, 0x5e, 0xa5, 0x6b, 0x24, 0x9e, 0x81, 0x95, - 0x1f, 0x89, 0x37, 0x58, 0x54, 0x24, 0xde, 0xd0, 0x21, 0x23, 0xf1, 0xbe, 0x5d, 0x01, 0x75, 0x7f, - 0xcb, 0x35, 0x92, 0xdc, 0x0e, 0xa2, 0x2d, 0xd7, 0x6f, 0xb2, 0x7c, 0xf0, 0xaf, 0x59, 0x30, 0xc2, - 0xd7, 0xcb, 0xa2, 0x99, 0x49, 0xb5, 0x51, 0xd0, 0x1d, 0x1c, 0x29, 0x66, 0x93, 0x6b, 0x06, 0xa3, - 0xcc, 0xe5, 0xaf, 0x26, 0x08, 0xa7, 0x7a, 0x84, 0x3e, 0x02, 0x20, 0xfd, 0xa3, 0x1b, 0x52, 0x64, - 0x2e, 0x14, 0xd3, 0x3f, 0x4c, 0x36, 0xb4, 0x0d, 0xbc, 0xa6, 0x98, 0x60, 0x83, 0x21, 0xfa, 0x94, - 0xce, 0x32, 0xe3, 0x21, 0xfb, 0x1f, 0x3a, 0x96, 0xb1, 0xe9, 0x25, 0xc7, 0x0c, 0xc3, 0x90, 0xeb, - 0x37, 0xe9, 0x3c, 0x11, 0x11, 0x4b, 0x6f, 0xcb, 0x2b, 0xcc, 0xb0, 0x18, 0x38, 0x8d, 0x19, 0xc7, - 0x73, 0xfc, 0x3a, 0x89, 0x16, 0x38, 0xba, 0x79, 0xe5, 0x39, 0x6b, 0xc0, 0x92, 0x50, 0xc7, 0x25, - 0x33, 0x95, 0x5e, 0x2e, 0x99, 0x39, 0xf7, 0x5e, 0x38, 0xd5, 0xf1, 0x31, 0xfb, 0x4a, 0x29, 0x3b, - 0x7c, 0x36, 0x9a, 0xfd, 0x4f, 0x07, 0xb5, 0xd2, 0xba, 0x16, 0x34, 0xf8, 0x55, 0x27, 0x91, 0xfe, - 0xa2, 0xc2, 0xc6, 0x2d, 0x70, 0x8a, 0x18, 0xd7, 0xa6, 0xab, 0x46, 0x6c, 0xb2, 0xa4, 0x73, 0x34, - 0x74, 0x22, 0xe2, 0x1f, 0xf7, 0x1c, 0x5d, 0x51, 0x4c, 0xb0, 0xc1, 0x10, 0x6d, 0xa6, 0x72, 0x4a, - 0x2e, 0x1d, 0x3d, 0xa7, 0x84, 0x95, 0xac, 0xca, 0xbb, 0x9d, 0xe0, 0x0b, 0x16, 0x8c, 0xf9, 0xa9, - 0x99, 0x5b, 0x4c, 0x18, 0x69, 0xfe, 0xaa, 0xe0, 0xd7, 0x7f, 0xa5, 0xdb, 0x70, 0x86, 0x7f, 0x9e, - 0x4a, 0xab, 0xf4, 0xa9, 0xd2, 0xf4, 0x9d, 0x49, 0x83, 0xdd, 0xee, 0x4c, 0x42, 0xbe, 0xba, 0xc9, - 0x6e, 0xa8, 0xf0, 0x9b, 0xec, 0x20, 0xe7, 0x16, 0xbb, 0x9b, 0x50, 0xab, 0x47, 0xc4, 0x49, 0x0e, - 0x79, 0xa9, 0x19, 0x3b, 0xa0, 0x9f, 0x95, 0x04, 0xb0, 0xa6, 0x65, 0xff, 0xaf, 0x01, 0x38, 0x29, - 0x47, 0x44, 0x86, 0xa0, 0x53, 0xfd, 0xc8, 0xf9, 0x6a, 0xe3, 0x56, 0xe9, 0xc7, 0xcb, 0x12, 0x80, - 0x35, 0x0e, 0xb5, 0xc7, 0xda, 0x31, 0x59, 0x0e, 0x89, 0xbf, 0xe8, 0xae, 0xc7, 0xe2, 0x9c, 0x53, - 0x2d, 0x94, 0xeb, 0x1a, 0x84, 0x4d, 0x3c, 0x6a, 0x8c, 0x73, 0xbb, 0x38, 0xce, 0xa6, 0xaf, 0x08, - 0x7b, 0x1b, 0x4b, 0x38, 0xfa, 0xc5, 0xdc, 0x4a, 0xba, 0xc5, 0x24, 0x6e, 0x75, 0x44, 0xde, 0xf7, - 0x79, 0x25, 0xe7, 0xdf, 0xb0, 0xe0, 0x2c, 0x6f, 0x95, 0x23, 0x79, 0x3d, 0x6c, 0x38, 0x09, 0x89, - 0x8b, 0xa9, 0x6c, 0x9f, 0xd3, 0x3f, 0xed, 0xe4, 0xcd, 0x63, 0x8b, 0xf3, 0x7b, 0x83, 0x3e, 0x6f, - 0xc1, 0x89, 0xad, 0x54, 0xcd, 0x0f, 0xa9, 0x3a, 0x8e, 0x9a, 0x8e, 0x9f, 0x22, 0xaa, 0x97, 0x5a, - 0xba, 0x3d, 0xc6, 0x59, 0xee, 0xf6, 0x9f, 0x59, 0x60, 0x8a, 0xd1, 0x7b, 0x5f, 0x2a, 0xa4, 0x7f, - 0x53, 0x50, 0x5a, 0x97, 0x95, 0xae, 0xd6, 0xe5, 0x63, 0x50, 0x6e, 0xbb, 0x0d, 0xb1, 0xbf, 0xd0, - 0xa7, 0xaf, 0x0b, 0x73, 0x98, 0xb6, 0xdb, 0xff, 0xa8, 0xa2, 0xfd, 0x16, 0x22, 0x2f, 0xea, 0x07, - 0xe2, 0xb5, 0x37, 0x54, 0xe5, 0x32, 0xfe, 0xe6, 0xd7, 0x3a, 0x2a, 0x97, 0xfd, 0x78, 0xff, 0x69, - 0x6f, 0x7c, 0x80, 0xba, 0x15, 0x2e, 0x1b, 0x3a, 0x20, 0xe7, 0xed, 0x16, 0x54, 0xe9, 0x16, 0x8c, - 0x39, 0x20, 0xab, 0xa9, 0x4e, 0x55, 0x2f, 0x8b, 0xf6, 0xbb, 0x7b, 0x13, 0xef, 0xee, 0xbf, 0x5b, - 0xf2, 0x69, 0xac, 0xe8, 0xa3, 0x18, 0x6a, 0xf4, 0x37, 0x4b, 0xcf, 0x13, 0x9b, 0xbb, 0xeb, 0x4a, - 0x66, 0x4a, 0x40, 0x21, 0xb9, 0x7f, 0x9a, 0x0f, 0xf2, 0xa1, 0xc6, 0x6e, 0x2f, 0x66, 0x4c, 0xf9, - 0x1e, 0x70, 0x45, 0x25, 0xc9, 0x49, 0xc0, 0xdd, 0xbd, 0x89, 0x17, 0xfb, 0x67, 0xaa, 0x1e, 0xc7, - 0x9a, 0x85, 0xfd, 0xc5, 0x01, 0x3d, 0x77, 0x45, 0xc1, 0xba, 0x1f, 0x88, 0xb9, 0xfb, 0x42, 0x66, - 0xee, 0x9e, 0xef, 0x98, 0xbb, 0x63, 0xfa, 0x6a, 0xdb, 0xd4, 0x6c, 0xbc, 0xd7, 0x86, 0xc0, 0xc1, - 0xfe, 0x06, 0x66, 0x01, 0xbd, 0xd6, 0x76, 0x23, 0x12, 0xaf, 0x44, 0x6d, 0xdf, 0xf5, 0x9b, 0x6c, - 0x3a, 0x56, 0x4d, 0x0b, 0x28, 0x05, 0xc6, 0x59, 0x7c, 0xba, 0xa9, 0xa7, 0xdf, 0xfc, 0xa6, 0xb3, - 0xcd, 0x67, 0x95, 0x51, 0x76, 0x6b, 0x55, 0xb4, 0x63, 0x85, 0x61, 0x7f, 0x93, 0x9d, 0x65, 0x1b, - 0x79, 0xc1, 0x74, 0x4e, 0x78, 0xec, 0xba, 0x68, 0x5e, 0xb3, 0x4b, 0xcd, 0x09, 0x7e, 0x47, 0x34, - 0x87, 0xa1, 0xdb, 0x30, 0xb4, 0xce, 0xef, 0x03, 0x2c, 0xa6, 0x5e, 0xbb, 0xb8, 0x5c, 0x90, 0xdd, - 0xfa, 0x22, 0x6f, 0x1a, 0xbc, 0xab, 0x7f, 0x62, 0xc9, 0xcd, 0xfe, 0xfd, 0x0a, 0x9c, 0xc8, 0xdc, - 0xe2, 0x9b, 0x2a, 0xbd, 0x5a, 0x3a, 0xb0, 0xf4, 0xea, 0x07, 0x01, 0x1a, 0x24, 0xf4, 0x82, 0x5d, - 0x66, 0x8e, 0x0d, 0xf4, 0x6d, 0x8e, 0x29, 0x0b, 0x7e, 0x4e, 0x51, 0xc1, 0x06, 0x45, 0x51, 0xa8, - 0x8c, 0x57, 0x72, 0xcd, 0x14, 0x2a, 0x33, 0x6e, 0x75, 0x18, 0xbc, 0xb7, 0xb7, 0x3a, 0xb8, 0x70, - 0x82, 0x77, 0x51, 0x65, 0xdf, 0x1e, 0x22, 0xc9, 0x96, 0xe5, 0x2f, 0xcc, 0xa5, 0xc9, 0xe0, 0x2c, - 0xdd, 0xfb, 0x7a, 0x5f, 0xf8, 0x3b, 0xa0, 0x26, 0xbf, 0x73, 0x3c, 0x5e, 0xd3, 0x15, 0x0c, 0xe4, - 0x34, 0x60, 0x97, 0x67, 0x8b, 0x9f, 0x1d, 0x85, 0x04, 0xe0, 0x7e, 0x15, 0x12, 0xb0, 0x3f, 0x57, - 0xa2, 0x76, 0x3c, 0xef, 0x97, 0xaa, 0x89, 0xf3, 0x24, 0x0c, 0x3a, 0xed, 0x64, 0x33, 0xe8, 0xb8, - 0xdd, 0x70, 0x9a, 0xb5, 0x62, 0x01, 0x45, 0x8b, 0x30, 0xd0, 0xd0, 0x75, 0x4e, 0xfa, 0xf9, 0x9e, - 0xda, 0x25, 0xea, 0x24, 0x04, 0x33, 0x2a, 0xe8, 0x51, 0x18, 0x48, 0x9c, 0xa6, 0x4c, 0xb9, 0x62, - 0x69, 0xb6, 0x6b, 0x4e, 0x33, 0xc6, 0xac, 0xd5, 0x54, 0xdf, 0x03, 0x07, 0xa8, 0xef, 0x17, 0x61, - 0x34, 0x76, 0x9b, 0xbe, 0x93, 0xb4, 0x23, 0x62, 0x1c, 0xf3, 0xe9, 0xc8, 0x0d, 0x13, 0x88, 0xd3, - 0xb8, 0xf6, 0x6f, 0x8e, 0xc0, 0x99, 0xd5, 0xd9, 0x25, 0x59, 0x0a, 0xfc, 0xd8, 0xb2, 0xa6, 0xf2, - 0x78, 0xdc, 0xbb, 0xac, 0xa9, 0x2e, 0xdc, 0x3d, 0x23, 0x6b, 0xca, 0x33, 0xb2, 0xa6, 0xd2, 0x29, - 0x2c, 0xe5, 0x22, 0x52, 0x58, 0xf2, 0x7a, 0xd0, 0x4b, 0x0a, 0xcb, 0xb1, 0xa5, 0x51, 0xed, 0xdb, - 0xa1, 0xbe, 0xd2, 0xa8, 0x54, 0x8e, 0x59, 0x21, 0xc9, 0x05, 0x5d, 0x3e, 0x55, 0x6e, 0x8e, 0x99, - 0xca, 0xef, 0xe1, 0x89, 0x33, 0x42, 0xd4, 0xbf, 0x52, 0x7c, 0x07, 0x7a, 0xc8, 0xef, 0x11, 0xb9, - 0x3b, 0x66, 0x4e, 0xd9, 0x50, 0x11, 0x39, 0x65, 0x79, 0xdd, 0x39, 0x30, 0xa7, 0xec, 0x45, 0x18, - 0xad, 0x7b, 0x81, 0x4f, 0x56, 0xa2, 0x20, 0x09, 0xea, 0x81, 0x27, 0xcc, 0x7a, 0x25, 0x12, 0x66, - 0x4d, 0x20, 0x4e, 0xe3, 0x76, 0x4b, 0x48, 0xab, 0x1d, 0x35, 0x21, 0x0d, 0xee, 0x53, 0x42, 0xda, - 0xcf, 0xeb, 0xd4, 0xe9, 0x61, 0xf6, 0x45, 0x3e, 0x58, 0xfc, 0x17, 0xe9, 0x25, 0x7f, 0x1a, 0xbd, - 0xc1, 0xaf, 0x17, 0xa4, 0x86, 0xf1, 0x6c, 0xd0, 0xa2, 0x86, 0xdf, 0x08, 0x1b, 0x92, 0x57, 0x8f, - 0x61, 0xc2, 0xde, 0x5c, 0xd5, 0x6c, 0xd4, 0x95, 0x83, 0xba, 0x09, 0xa7, 0x3b, 0x72, 0x94, 0xd4, - 0xee, 0xaf, 0x94, 0xe0, 0x87, 0x0e, 0xec, 0x02, 0xba, 0x0d, 0x90, 0x38, 0x4d, 0x31, 0x51, 0xc5, - 0x81, 0xc9, 0x11, 0xc3, 0x2b, 0xd7, 0x24, 0x3d, 0x5e, 0x93, 0x44, 0xfd, 0x65, 0x47, 0x11, 0xf2, - 0x37, 0x8b, 0xaa, 0x0c, 0xbc, 0x8e, 0xd2, 0x8d, 0x38, 0xf0, 0x08, 0x66, 0x10, 0xaa, 0xfe, 0x23, - 0xd2, 0xd4, 0xf7, 0x61, 0xab, 0xcf, 0x87, 0x59, 0x2b, 0x16, 0x50, 0xf4, 0x3c, 0x0c, 0x3b, 0x9e, - 0xc7, 0xf3, 0x63, 0x48, 0x2c, 0xee, 0x17, 0xd2, 0x35, 0xe4, 0x34, 0x08, 0x9b, 0x78, 0xf6, 0x9f, - 0x96, 0x60, 0xe2, 0x00, 0x99, 0xd2, 0x91, 0xf1, 0x57, 0xe9, 0x39, 0xe3, 0x4f, 0xe4, 0x28, 0x0c, - 0x76, 0xc9, 0x51, 0x78, 0x1e, 0x86, 0x13, 0xe2, 0xb4, 0x44, 0x40, 0x96, 0xf0, 0x04, 0xe8, 0x13, - 0x60, 0x0d, 0xc2, 0x26, 0x1e, 0x95, 0x62, 0x63, 0x4e, 0xbd, 0x4e, 0xe2, 0x58, 0x26, 0x21, 0x08, - 0x6f, 0x6a, 0x61, 0x19, 0x0e, 0xcc, 0x49, 0x3d, 0x9d, 0x62, 0x81, 0x33, 0x2c, 0xb3, 0x03, 0x5e, - 0xeb, 0x71, 0xc0, 0xbf, 0x5e, 0x82, 0xc7, 0xf6, 0xd5, 0x6e, 0x3d, 0xe7, 0x87, 0xb4, 0x63, 0x12, - 0x65, 0x27, 0xce, 0xf5, 0x98, 0x44, 0x98, 0x41, 0xf8, 0x28, 0x85, 0xa1, 0x71, 0xdf, 0x78, 0xd1, - 0xc9, 0x4b, 0x7c, 0x94, 0x52, 0x2c, 0x70, 0x86, 0xe5, 0x61, 0xa7, 0xe5, 0xdf, 0x29, 0xc1, 0x13, - 0x3d, 0xd8, 0x00, 0x05, 0x26, 0x79, 0xa5, 0x53, 0xed, 0xca, 0xf7, 0x29, 0x23, 0xf2, 0x90, 0xc3, - 0xf5, 0xcd, 0x12, 0x9c, 0xeb, 0xae, 0x8a, 0xd1, 0x4f, 0xc0, 0x89, 0x48, 0x45, 0x61, 0x99, 0x59, - 0x7a, 0xa7, 0xb9, 0x27, 0x21, 0x05, 0xc2, 0x59, 0x5c, 0x34, 0x09, 0x10, 0x3a, 0xc9, 0x66, 0x7c, - 0x71, 0xc7, 0x8d, 0x13, 0x51, 0x85, 0x66, 0x8c, 0x9f, 0x5d, 0xc9, 0x56, 0x6c, 0x60, 0x50, 0x76, - 0xec, 0xdf, 0x5c, 0x70, 0x2d, 0x48, 0xf8, 0x43, 0x7c, 0x1b, 0x71, 0x5a, 0x5e, 0x00, 0x62, 0x80, - 0x70, 0x16, 0x97, 0xb2, 0x63, 0xa7, 0xa3, 0xbc, 0xa3, 0x7c, 0x7f, 0xc1, 0xd8, 0x2d, 0xaa, 0x56, - 0x6c, 0x60, 0x64, 0xf3, 0x0f, 0x2b, 0x07, 0xe7, 0x1f, 0xda, 0xff, 0xb0, 0x04, 0x8f, 0x74, 0x35, - 0xe5, 0x7a, 0x5b, 0x80, 0x0f, 0x5e, 0xce, 0xe0, 0xe1, 0xe6, 0x4e, 0x9f, 0xb9, 0x6d, 0x7f, 0xdc, - 0x65, 0xa6, 0x89, 0xdc, 0xb6, 0xc3, 0x27, 0x87, 0x3f, 0x78, 0xe3, 0xd9, 0x91, 0xce, 0x36, 0xd0, - 0x47, 0x3a, 0x5b, 0xe6, 0x63, 0x54, 0x7a, 0x5c, 0xc8, 0x7f, 0x5e, 0xee, 0x3a, 0xbc, 0x74, 0xeb, - 0xd7, 0x93, 0x9f, 0x76, 0x0e, 0x4e, 0xba, 0x3e, 0xbb, 0x0c, 0x6a, 0xb5, 0xbd, 0x2e, 0x0a, 0x93, - 0x94, 0xd2, 0xb7, 0xc9, 0x2f, 0x64, 0xe0, 0xb8, 0xe3, 0x89, 0x07, 0x30, 0xbd, 0xf0, 0x70, 0x43, - 0xda, 0x5f, 0x82, 0x2b, 0x5a, 0x86, 0xb3, 0x72, 0x28, 0x36, 0x9d, 0x88, 0x34, 0x84, 0x1a, 0x89, - 0x45, 0x42, 0xc5, 0x23, 0x3c, 0x29, 0x23, 0x07, 0x01, 0xe7, 0x3f, 0xc7, 0xee, 0xdf, 0x09, 0x42, - 0xb7, 0x2e, 0x36, 0x39, 0xfa, 0xfe, 0x1d, 0xda, 0x88, 0x39, 0xcc, 0xfe, 0x20, 0xd4, 0xd4, 0xfb, - 0xf3, 0xb0, 0x6e, 0x35, 0xe9, 0x3a, 0xc2, 0xba, 0xd5, 0x8c, 0x33, 0xb0, 0xe8, 0xd7, 0xa2, 0x26, - 0x71, 0x66, 0xf5, 0x5c, 0x25, 0xbb, 0xcc, 0x3e, 0xb6, 0xdf, 0x09, 0x23, 0xca, 0xcf, 0xd2, 0xeb, - 0xad, 0x44, 0xf6, 0xff, 0x29, 0xc1, 0x18, 0xf7, 0xac, 0xf1, 0x4b, 0x2b, 0x02, 0xba, 0x99, 0xae, - 0x35, 0xe4, 0x6d, 0x8e, 0xc5, 0x54, 0x63, 0x54, 0x97, 0x43, 0x6a, 0xf7, 0xbf, 0x6a, 0xc2, 0x9a, - 0x19, 0xfa, 0x30, 0x2f, 0x7c, 0x28, 0x58, 0x97, 0x8a, 0x48, 0xf9, 0x5c, 0x55, 0xf4, 0xcc, 0xab, - 0x4e, 0x64, 0x1b, 0x36, 0xf8, 0xa1, 0x04, 0x6a, 0x9b, 0xf2, 0xe2, 0x8e, 0x62, 0xc4, 0x8f, 0xba, - 0x07, 0x84, 0x1b, 0x03, 0xea, 0x2f, 0xd6, 0x8c, 0xec, 0x7f, 0x66, 0xc1, 0x99, 0xf4, 0x07, 0x10, - 0xc7, 0x35, 0xf7, 0xef, 0x33, 0xf4, 0xe5, 0x62, 0xb7, 0xbf, 0x38, 0x08, 0xa3, 0xa9, 0xf2, 0x92, - 0xa9, 0xe7, 0xad, 0x03, 0x5d, 0xf4, 0x2c, 0xd1, 0xa3, 0xed, 0xcb, 0x4b, 0xef, 0x8c, 0x44, 0x8f, - 0xb6, 0x4f, 0x30, 0x87, 0xd1, 0x0d, 0x52, 0x23, 0xda, 0xc5, 0x6d, 0x5f, 0x04, 0x64, 0xab, 0x0d, - 0xd2, 0x1c, 0x6b, 0xc5, 0x02, 0x8a, 0x3e, 0x66, 0xc1, 0x08, 0xfb, 0xa4, 0xe2, 0x80, 0x43, 0x88, - 0xad, 0x2b, 0x05, 0x4c, 0x22, 0x59, 0x4a, 0x95, 0xc5, 0x58, 0x99, 0x2d, 0x38, 0xc5, 0x11, 0x7d, - 0xd2, 0x82, 0x9a, 0xba, 0x9b, 0x47, 0xdc, 0x60, 0xb9, 0x5a, 0x6c, 0xf5, 0xce, 0xcc, 0x47, 0x54, - 0x65, 0x14, 0xb1, 0x66, 0x8c, 0x62, 0x75, 0xfa, 0x30, 0x74, 0x3c, 0xa7, 0x0f, 0x90, 0x73, 0xf2, - 0xf0, 0x0e, 0xa8, 0xb5, 0x1c, 0xdf, 0xdd, 0x20, 0x71, 0xc2, 0x0f, 0x04, 0x64, 0x51, 0x61, 0xd9, - 0x88, 0x35, 0x9c, 0x9a, 0x74, 0x31, 0x7b, 0xb1, 0xc4, 0xf0, 0xe0, 0x33, 0x93, 0x6e, 0x55, 0x37, - 0x63, 0x13, 0xc7, 0x3c, 0x6e, 0x80, 0xfb, 0x7a, 0xdc, 0x30, 0xbc, 0xff, 0x71, 0x83, 0xfd, 0xf7, - 0x2c, 0x38, 0x9b, 0xfb, 0xd5, 0x1e, 0xdc, 0xd0, 0x59, 0xfb, 0x4b, 0x15, 0x38, 0x9d, 0x53, 0x27, - 0x16, 0xed, 0x9a, 0xf3, 0xd9, 0x2a, 0x22, 0x0a, 0x25, 0x1d, 0x54, 0x21, 0x87, 0x31, 0x67, 0x12, - 0xf7, 0x77, 0xd8, 0xa7, 0x0f, 0xdc, 0xca, 0xf7, 0xf6, 0xc0, 0xcd, 0x98, 0x96, 0x03, 0xf7, 0x75, - 0x5a, 0x56, 0x0e, 0x38, 0x05, 0xfb, 0x35, 0x0b, 0xc6, 0x5b, 0x5d, 0x2e, 0x27, 0x10, 0xae, 0xeb, - 0x1b, 0xc7, 0x73, 0xf5, 0xc1, 0xcc, 0xa3, 0x77, 0xf6, 0x26, 0xba, 0xde, 0x09, 0x81, 0xbb, 0xf6, - 0xca, 0xfe, 0x6e, 0x19, 0x98, 0xc2, 0x66, 0xb5, 0x00, 0x77, 0xd1, 0x47, 0xcd, 0x72, 0xd3, 0x56, - 0x51, 0xa5, 0x91, 0x39, 0x71, 0x55, 0xae, 0x9a, 0x8f, 0x60, 0x5e, 0xf5, 0xea, 0xac, 0xd0, 0x2a, - 0xf5, 0x20, 0xb4, 0x3c, 0x59, 0xd7, 0xbb, 0x5c, 0x7c, 0x5d, 0xef, 0x5a, 0xb6, 0xa6, 0xf7, 0xfe, - 0x9f, 0x78, 0xe0, 0x81, 0xfc, 0xc4, 0xbf, 0x64, 0x71, 0xc1, 0x93, 0xf9, 0x0a, 0xda, 0x32, 0xb0, - 0xf6, 0xb1, 0x0c, 0x9e, 0x86, 0x6a, 0x4c, 0xbc, 0x8d, 0xcb, 0xc4, 0xf1, 0x84, 0x05, 0xa1, 0x23, - 0x20, 0x44, 0x3b, 0x56, 0x18, 0xec, 0x16, 0x61, 0xcf, 0x0b, 0x6e, 0x5f, 0x6c, 0x85, 0xc9, 0xae, - 0xb0, 0x25, 0xf4, 0x2d, 0xc2, 0x0a, 0x82, 0x0d, 0x2c, 0xdb, 0x07, 0xc3, 0x62, 0x3c, 0xea, 0x8d, - 0x6e, 0x3d, 0xdc, 0xb5, 0xf8, 0xd7, 0x4b, 0x82, 0x21, 0xb7, 0x03, 0x5f, 0xc8, 0xdc, 0x33, 0xd9, - 0x7b, 0xc4, 0xcb, 0x87, 0x01, 0xea, 0x41, 0x2b, 0xa4, 0x3b, 0x95, 0xb5, 0xa0, 0x18, 0x73, 0x7a, - 0x56, 0xd1, 0xd3, 0xc3, 0xa6, 0xdb, 0xb0, 0xc1, 0x2f, 0x25, 0xbb, 0xcb, 0x07, 0xca, 0xee, 0x94, - 0x18, 0x1b, 0x38, 0x40, 0xbb, 0xfe, 0xa9, 0x05, 0x29, 0x0b, 0x0c, 0x85, 0x50, 0xa1, 0xdd, 0xdd, - 0x15, 0x12, 0x61, 0xb9, 0x38, 0x73, 0x8f, 0x8a, 0x62, 0xb1, 0xcc, 0xd8, 0x4f, 0xcc, 0x19, 0x21, - 0x4f, 0x44, 0xf7, 0xf0, 0x51, 0xbd, 0x56, 0x1c, 0xc3, 0xcb, 0x41, 0xb0, 0xc5, 0x8f, 0xe2, 0x75, - 0xa4, 0x90, 0xfd, 0x02, 0x9c, 0xea, 0xe8, 0x14, 0xbb, 0x05, 0x2e, 0x90, 0x9b, 0x03, 0x63, 0x79, - 0xb0, 0x94, 0x63, 0xcc, 0x61, 0xf6, 0x37, 0x2d, 0x38, 0x99, 0x25, 0x8f, 0xde, 0xb0, 0xe0, 0x54, - 0x9c, 0xa5, 0x77, 0x5c, 0x63, 0xa7, 0x22, 0x74, 0x3b, 0x40, 0xb8, 0xb3, 0x13, 0xf6, 0xff, 0x16, - 0x93, 0xff, 0xa6, 0xeb, 0x37, 0x82, 0xdb, 0xca, 0x10, 0xb2, 0xba, 0x1a, 0x42, 0x74, 0xfd, 0xd7, - 0x37, 0x49, 0xa3, 0xed, 0x75, 0xe4, 0x3a, 0xaf, 0x8a, 0x76, 0xac, 0x30, 0x58, 0x6a, 0x67, 0x5b, - 0x5c, 0x34, 0x90, 0x99, 0x94, 0x73, 0xa2, 0x1d, 0x2b, 0x0c, 0xf4, 0x1c, 0x8c, 0x18, 0x2f, 0x29, - 0xe7, 0x25, 0xdb, 0x00, 0x18, 0x2a, 0x3a, 0xc6, 0x29, 0x2c, 0x34, 0x09, 0xa0, 0x8c, 0x2a, 0xa9, - 0x92, 0x99, 0x6b, 0x53, 0x49, 0xbe, 0x18, 0x1b, 0x18, 0x2c, 0x91, 0xda, 0x6b, 0xc7, 0xec, 0x54, - 0x6a, 0x50, 0x17, 0xbf, 0x9d, 0x15, 0x6d, 0x58, 0x41, 0xa9, 0xf4, 0x6a, 0x39, 0x7e, 0xdb, 0xf1, - 0xe8, 0x08, 0x09, 0x67, 0x85, 0x5a, 0x86, 0x4b, 0x0a, 0x82, 0x0d, 0x2c, 0xfa, 0xc6, 0x89, 0xdb, - 0x22, 0x2f, 0x07, 0xbe, 0x8c, 0xac, 0xd4, 0x07, 0x95, 0xa2, 0x1d, 0x2b, 0x0c, 0xfb, 0x3f, 0x5b, - 0x70, 0x42, 0x97, 0x65, 0xe0, 0x97, 0xc7, 0x9b, 0xbe, 0x15, 0xeb, 0x40, 0xdf, 0x4a, 0x3a, 0x5f, - 0xbd, 0xd4, 0x53, 0xbe, 0xba, 0x99, 0x4a, 0x5e, 0xde, 0x37, 0x95, 0xfc, 0x47, 0xf4, 0xc5, 0xc4, - 0x3c, 0xe7, 0x7c, 0x38, 0xef, 0x52, 0x62, 0x64, 0xc3, 0x60, 0xdd, 0x51, 0x35, 0x89, 0x46, 0xf8, - 0x5e, 0x65, 0x76, 0x9a, 0x21, 0x09, 0x88, 0xbd, 0x0c, 0x35, 0x75, 0x5e, 0x27, 0x5d, 0x2b, 0x56, - 0xbe, 0x6b, 0xa5, 0xa7, 0x94, 0xd6, 0x99, 0xf5, 0x6f, 0x7d, 0xef, 0xf1, 0xb7, 0xfc, 0xde, 0xf7, - 0x1e, 0x7f, 0xcb, 0x1f, 0x7d, 0xef, 0xf1, 0xb7, 0x7c, 0xec, 0xce, 0xe3, 0xd6, 0xb7, 0xee, 0x3c, - 0x6e, 0xfd, 0xde, 0x9d, 0xc7, 0xad, 0x3f, 0xba, 0xf3, 0xb8, 0xf5, 0xdd, 0x3b, 0x8f, 0x5b, 0x5f, - 0xf8, 0x0f, 0x8f, 0xbf, 0xe5, 0xe5, 0xdc, 0xd0, 0x5a, 0xfa, 0xe3, 0x99, 0x7a, 0x63, 0x6a, 0xfb, - 0x02, 0x8b, 0xee, 0xa4, 0xcb, 0x6b, 0xca, 0x98, 0x53, 0x53, 0x72, 0x79, 0xfd, 0xdf, 0x00, 0x00, - 0x00, 0xff, 0xff, 0x52, 0x7b, 0x3d, 0xa1, 0x8f, 0xe6, 0x00, 0x00, + 0x9c, 0x01, 0xe0, 0x2c, 0x7b, 0xf4, 0x49, 0x0b, 0x46, 0x9d, 0xdb, 0xb1, 0x2e, 0x6e, 0x2b, 0xc2, + 0x26, 0x8f, 0xa8, 0xa4, 0x52, 0xf5, 0x72, 0xb9, 0x4b, 0x3c, 0xd5, 0x84, 0xd3, 0x4c, 0xd1, 0x1b, + 0x16, 0x20, 0xb2, 0x43, 0xea, 0x32, 0xb0, 0x53, 0xf4, 0x65, 0xb0, 0x88, 0xed, 0xef, 0xc5, 0x0e, + 0xba, 0x5c, 0xaa, 0x77, 0xb6, 0xe3, 0x9c, 0x3e, 0xd8, 0xff, 0xa8, 0xac, 0x16, 0x94, 0x8e, 0x25, + 0x76, 0x8c, 0x98, 0x46, 0xeb, 0xf0, 0x31, 0x8d, 0x3a, 0x36, 0xa4, 0x33, 0xbf, 0x35, 0x95, 0x0e, + 0x57, 0xba, 0x4f, 0xe9, 0x70, 0x3f, 0x6b, 0xa5, 0x8a, 0x43, 0x0d, 0x5f, 0x78, 0xb9, 0xd8, 0x38, + 0xe6, 0x49, 0x1e, 0xb7, 0x92, 0x91, 0xee, 0xe9, 0x70, 0x25, 0x2a, 0x4d, 0x0d, 0xb4, 0xbe, 0xa4, + 0xe1, 0xbf, 0x29, 0xc3, 0xb0, 0xa1, 0x49, 0x73, 0xcd, 0x22, 0xeb, 0x01, 0x33, 0x8b, 0x4a, 0x7d, + 0x98, 0x45, 0x3f, 0x03, 0xb5, 0xba, 0x94, 0xf2, 0xc5, 0x94, 0x47, 0xce, 0xea, 0x0e, 0x2d, 0xe8, + 0x55, 0x13, 0xd6, 0x3c, 0xd1, 0x7c, 0x2a, 0x89, 0x4a, 0x68, 0x88, 0x01, 0xa6, 0x21, 0xf2, 0xb2, + 0x9c, 0x84, 0xa6, 0xe8, 0x7c, 0x26, 0x1b, 0x6e, 0x54, 0x31, 0xc2, 0x8d, 0x56, 0x16, 0xf2, 0xc3, + 0x8d, 0xbe, 0x63, 0xa9, 0x8f, 0x7b, 0x0f, 0xaa, 0x65, 0xdc, 0x4a, 0x57, 0xcb, 0xb8, 0x58, 0xc8, + 0x30, 0x77, 0x29, 0x93, 0x71, 0x0d, 0x86, 0x66, 0x83, 0x56, 0xcb, 0xf1, 0x1b, 0xe8, 0x47, 0x60, + 0xa8, 0xce, 0x7f, 0x0a, 0xc7, 0x0e, 0x3b, 0x3e, 0x15, 0x50, 0x2c, 0x61, 0xe8, 0x51, 0x18, 0x70, + 0xa2, 0xa6, 0x74, 0xe6, 0xb0, 0xe0, 0xa3, 0xe9, 0xa8, 0x19, 0x63, 0xd6, 0x6a, 0xff, 0xbd, 0x01, + 0x60, 0x67, 0xfe, 0x4e, 0x44, 0x1a, 0x6b, 0x01, 0x2b, 0xcf, 0x78, 0xac, 0x87, 0x8e, 0x7a, 0xb3, + 0xf4, 0x20, 0x1f, 0x3c, 0x1a, 0x87, 0x4f, 0xe5, 0x7b, 0x7d, 0xf8, 0x94, 0x7f, 0x9e, 0x38, 0xf0, + 0x00, 0x9d, 0x27, 0xda, 0x9f, 0xb1, 0x00, 0xa9, 0x40, 0x11, 0x7d, 0xe0, 0x3f, 0x05, 0x35, 0x15, + 0x32, 0x22, 0x0c, 0x2b, 0x2d, 0x22, 0x24, 0x00, 0x6b, 0x9c, 0x1e, 0x76, 0xc8, 0x4f, 0x48, 0xf9, + 0x5d, 0x4e, 0x47, 0x48, 0x33, 0xa9, 0x2f, 0xc4, 0xb9, 0xfd, 0xdb, 0x25, 0x78, 0x88, 0xab, 0xe4, + 0x25, 0xc7, 0x77, 0x9a, 0xa4, 0x45, 0x7b, 0xd5, 0x6b, 0x08, 0x47, 0x9d, 0x6e, 0xcd, 0x5c, 0x19, + 0xf1, 0x7c, 0xd4, 0xb5, 0xcb, 0xd7, 0x1c, 0x5f, 0x65, 0x0b, 0xbe, 0x9b, 0x60, 0x46, 0x1c, 0xc5, + 0x50, 0x95, 0x77, 0x07, 0x08, 0x59, 0x5c, 0x10, 0x23, 0x25, 0x96, 0x84, 0xde, 0x24, 0x58, 0x31, + 0xa2, 0x86, 0xab, 0x17, 0xd4, 0xb7, 0x30, 0x09, 0x03, 0x26, 0x77, 0x8d, 0x80, 0xd3, 0x45, 0xd1, + 0x8e, 0x15, 0x86, 0xfd, 0xdb, 0x16, 0x64, 0x35, 0x92, 0x51, 0x07, 0xcf, 0xda, 0xb7, 0x0e, 0x5e, + 0x1f, 0x85, 0xe8, 0x7e, 0x0a, 0x86, 0x9d, 0x84, 0x1a, 0x11, 0x7c, 0xdb, 0x5d, 0x3e, 0xdc, 0x59, + 0xcb, 0x52, 0xd0, 0x70, 0x37, 0x5c, 0xb6, 0xdd, 0x36, 0xc9, 0xd9, 0x6f, 0x58, 0x50, 0x9b, 0x8b, + 0x76, 0xfb, 0xcf, 0xf4, 0xe8, 0xcc, 0xe3, 0x28, 0xf5, 0x95, 0xc7, 0x21, 0x33, 0x45, 0xca, 0xdd, + 0x32, 0x45, 0xec, 0xff, 0x3a, 0x00, 0xa7, 0x3a, 0x52, 0x86, 0xd0, 0x0b, 0x30, 0x52, 0x17, 0x33, + 0x37, 0x94, 0xbe, 0xb6, 0x9a, 0x19, 0xd1, 0xa8, 0x61, 0x38, 0x85, 0xd9, 0xc3, 0xda, 0x59, 0x80, + 0xd3, 0x11, 0x79, 0xad, 0x4d, 0xda, 0x64, 0x7a, 0x23, 0x21, 0xd1, 0x2a, 0xa9, 0x07, 0x7e, 0x83, + 0x17, 0x92, 0x2c, 0xcf, 0x3c, 0x7c, 0x67, 0x6f, 0xe2, 0x34, 0xee, 0x04, 0xe3, 0xbc, 0x67, 0x50, + 0x08, 0xa3, 0x9e, 0x69, 0x9e, 0x8a, 0xbd, 0xc9, 0xa1, 0x2c, 0x5b, 0x65, 0xbe, 0xa4, 0x9a, 0x71, + 0x9a, 0x41, 0xda, 0xc6, 0xad, 0xdc, 0x27, 0x1b, 0xf7, 0x13, 0xda, 0xc6, 0xe5, 0xa1, 0x13, 0x1f, + 0x28, 0x38, 0x65, 0xec, 0xb8, 0x8d, 0xdc, 0x97, 0xa0, 0x2a, 0xc3, 0xca, 0x7a, 0x0a, 0xc7, 0x32, + 0xe9, 0x74, 0x11, 0xb6, 0x4f, 0xc2, 0x0f, 0x5f, 0x8c, 0x22, 0x63, 0x30, 0xaf, 0x05, 0xc9, 0xb4, + 0xe7, 0x05, 0xb7, 0xa9, 0xfd, 0x70, 0x3d, 0x26, 0xc2, 0xf9, 0x63, 0xdf, 0x2d, 0x41, 0xce, 0x3e, + 0x8a, 0xae, 0x49, 0x6d, 0xb4, 0xa4, 0xd6, 0x64, 0x7f, 0x86, 0x0b, 0xda, 0xe1, 0xa1, 0x77, 0x5c, + 0x3d, 0xbf, 0xbf, 0xe8, 0x7d, 0xa0, 0x8e, 0xc6, 0x53, 0x19, 0x37, 0x2a, 0x22, 0xef, 0x02, 0x80, + 0xb6, 0x35, 0x45, 0x3e, 0x85, 0x3a, 0x4e, 0xd7, 0x26, 0x29, 0x36, 0xb0, 0xd0, 0xf3, 0x30, 0xec, + 0xfa, 0x71, 0xe2, 0x78, 0xde, 0x65, 0xd7, 0x4f, 0x84, 0x7f, 0x53, 0xd9, 0x21, 0x0b, 0x1a, 0x84, + 0x4d, 0xbc, 0x73, 0xef, 0x32, 0xbe, 0x5f, 0x3f, 0xdf, 0x7d, 0x13, 0x1e, 0x99, 0x77, 0x13, 0x95, + 0x05, 0xa4, 0xe6, 0x1b, 0x35, 0x25, 0x95, 0xac, 0xb2, 0xba, 0x66, 0xb5, 0x19, 0x59, 0x38, 0xa5, + 0x74, 0xd2, 0x50, 0x36, 0x0b, 0xc7, 0x7e, 0x01, 0xce, 0xcc, 0xbb, 0xc9, 0x25, 0xd7, 0x23, 0x7d, + 0x32, 0xb1, 0x7f, 0x73, 0x10, 0x46, 0xcc, 0x3c, 0xd2, 0x7e, 0xc4, 0xf5, 0xe7, 0xa8, 0xb5, 0x28, + 0xde, 0xce, 0x55, 0xe7, 0x7e, 0x37, 0x8f, 0x9c, 0xd4, 0x9a, 0x3f, 0x62, 0x86, 0xc1, 0xa8, 0x79, + 0x62, 0xb3, 0x03, 0xe8, 0x36, 0x54, 0x36, 0x58, 0x96, 0x48, 0xb9, 0x88, 0x88, 0x8d, 0xbc, 0x11, + 0xd5, 0xcb, 0x91, 0xe7, 0x99, 0x70, 0x7e, 0x54, 0xc9, 0x47, 0xe9, 0xd4, 0x43, 0x23, 0xde, 0x58, + 0x28, 0x2b, 0x85, 0xd1, 0x4d, 0x25, 0x54, 0x0e, 0xa1, 0x12, 0x52, 0x02, 0x7a, 0xf0, 0x3e, 0x09, + 0x68, 0x96, 0xf1, 0x93, 0x6c, 0x32, 0x13, 0x54, 0x24, 0x48, 0x0c, 0xb1, 0x41, 0x30, 0x32, 0x7e, + 0x52, 0x60, 0x9c, 0xc5, 0x47, 0x1f, 0x55, 0x22, 0xbe, 0x5a, 0x84, 0x6b, 0xd8, 0x9c, 0xd1, 0xc7, + 0x2d, 0xdd, 0x3f, 0x53, 0x82, 0xb1, 0x79, 0xbf, 0xbd, 0x32, 0xbf, 0xd2, 0x5e, 0xf7, 0xdc, 0xfa, + 0x55, 0xb2, 0x4b, 0x45, 0xf8, 0x16, 0xd9, 0x5d, 0x98, 0x13, 0x2b, 0x48, 0xcd, 0x99, 0xab, 0xb4, + 0x11, 0x73, 0x18, 0x15, 0x46, 0x1b, 0xae, 0xdf, 0x24, 0x51, 0x18, 0xb9, 0xc2, 0x6b, 0x6b, 0x08, + 0xa3, 0x4b, 0x1a, 0x84, 0x4d, 0x3c, 0x4a, 0x3b, 0xb8, 0xed, 0x93, 0x28, 0x6b, 0x8b, 0x2f, 0xd3, + 0x46, 0xcc, 0x61, 0x14, 0x29, 0x89, 0xda, 0x71, 0x22, 0x26, 0xa3, 0x42, 0x5a, 0xa3, 0x8d, 0x98, + 0xc3, 0xe8, 0x4a, 0x8f, 0xdb, 0xeb, 0x2c, 0x20, 0x26, 0x93, 0x8d, 0xb1, 0xca, 0x9b, 0xb1, 0x84, + 0x53, 0xd4, 0x2d, 0xb2, 0x3b, 0x47, 0x37, 0xee, 0x99, 0xf4, 0xaf, 0xab, 0xbc, 0x19, 0x4b, 0x38, + 0xab, 0x94, 0x99, 0x1e, 0x8e, 0xef, 0xbb, 0x4a, 0x99, 0xe9, 0xee, 0x77, 0x71, 0x01, 0xfc, 0x8a, + 0x05, 0x23, 0x66, 0x18, 0x1b, 0x6a, 0x66, 0xcc, 0xf4, 0xe5, 0x8e, 0x42, 0xcb, 0x3f, 0x91, 0x77, + 0x4b, 0x5d, 0xd3, 0x4d, 0x82, 0x30, 0x7e, 0x86, 0xf8, 0x4d, 0xd7, 0x27, 0x2c, 0x10, 0x80, 0x87, + 0xbf, 0xa5, 0x62, 0xe4, 0x66, 0x83, 0x06, 0x39, 0x84, 0x9d, 0x6f, 0xdf, 0x84, 0x53, 0x1d, 0x39, + 0x7f, 0x3d, 0x98, 0x20, 0x07, 0x66, 0x5c, 0xdb, 0x18, 0x86, 0x29, 0x61, 0x59, 0xad, 0x69, 0x16, + 0x4e, 0xf1, 0x85, 0x44, 0x39, 0xad, 0xd6, 0x37, 0x49, 0x4b, 0xe5, 0x71, 0xb2, 0x23, 0x82, 0x1b, + 0x59, 0x20, 0xee, 0xc4, 0xb7, 0x3f, 0x6b, 0xc1, 0x68, 0x2a, 0x0d, 0xb3, 0x20, 0x63, 0x89, 0xad, + 0xb4, 0x80, 0x45, 0x55, 0xb2, 0x28, 0xf7, 0x32, 0x53, 0xa6, 0x7a, 0xa5, 0x69, 0x10, 0x36, 0xf1, + 0xec, 0x2f, 0x96, 0xa0, 0x2a, 0x83, 0x40, 0x7a, 0xe8, 0xca, 0xa7, 0x2d, 0x18, 0x55, 0xc7, 0x32, + 0xcc, 0xdf, 0x57, 0x2a, 0x22, 0x93, 0x85, 0xf6, 0x40, 0x79, 0x0c, 0xfc, 0x8d, 0x40, 0x5b, 0xee, + 0xd8, 0x64, 0x86, 0xd3, 0xbc, 0xd1, 0x0d, 0x80, 0x78, 0x37, 0x4e, 0x48, 0xcb, 0xf0, 0x3c, 0xda, + 0xc6, 0x8a, 0x9b, 0xac, 0x07, 0x11, 0xa1, 0xeb, 0xeb, 0x5a, 0xd0, 0x20, 0xab, 0x0a, 0x53, 0x9b, + 0x50, 0xba, 0x0d, 0x1b, 0x94, 0xec, 0xbf, 0x53, 0x82, 0x93, 0xd9, 0x2e, 0xa1, 0x0f, 0xc0, 0x88, + 0xe4, 0x6e, 0x5c, 0xb8, 0x27, 0x23, 0x5f, 0x46, 0xb0, 0x01, 0xbb, 0xbb, 0x37, 0x31, 0xd1, 0x79, + 0xe3, 0xe1, 0xa4, 0x89, 0x82, 0x53, 0xc4, 0xf8, 0xd9, 0x98, 0x38, 0xc4, 0x9d, 0xd9, 0x9d, 0x0e, + 0x43, 0x71, 0xc0, 0x65, 0x9c, 0x8d, 0x99, 0x50, 0x9c, 0xc1, 0x46, 0x2b, 0x70, 0xc6, 0x68, 0xb9, + 0x46, 0xdc, 0xe6, 0xe6, 0x7a, 0x10, 0xc9, 0x1d, 0xd8, 0xa3, 0x3a, 0x60, 0xae, 0x13, 0x07, 0xe7, + 0x3e, 0x49, 0xb5, 0x7d, 0xdd, 0x09, 0x9d, 0xba, 0x9b, 0xec, 0x0a, 0x57, 0xaa, 0x92, 0x4d, 0xb3, + 0xa2, 0x1d, 0x2b, 0x0c, 0xfb, 0x2a, 0xd4, 0x78, 0x80, 0x18, 0x59, 0x0b, 0x72, 0x76, 0xb8, 0x56, + 0x3f, 0x3b, 0x5c, 0x7b, 0x09, 0x06, 0x7a, 0x9c, 0x8e, 0x3d, 0x6d, 0x23, 0x5e, 0x82, 0x2a, 0x25, + 0x27, 0x6d, 0xc5, 0x22, 0x48, 0x06, 0x50, 0x95, 0xb7, 0xea, 0x20, 0x1b, 0xca, 0xae, 0x23, 0xcf, + 0x32, 0xd5, 0x18, 0x2d, 0xc4, 0x71, 0x9b, 0x39, 0x0d, 0x28, 0x10, 0x3d, 0x01, 0x65, 0xb2, 0x13, + 0x66, 0x0f, 0x2d, 0x2f, 0xee, 0x84, 0x6e, 0x44, 0x62, 0x8a, 0x44, 0x76, 0x42, 0x74, 0x0e, 0x4a, + 0x6e, 0x43, 0x68, 0x3c, 0x10, 0x38, 0xa5, 0x85, 0x39, 0x5c, 0x72, 0x1b, 0xf6, 0x0e, 0xd4, 0xd4, + 0x35, 0x3e, 0x68, 0x4b, 0x2a, 0x02, 0xab, 0x88, 0x10, 0x30, 0x49, 0xb7, 0x8b, 0x0a, 0x68, 0x03, + 0xe8, 0x94, 0xd3, 0xa2, 0x84, 0xd5, 0x79, 0x18, 0xa8, 0x07, 0x22, 0xf1, 0xbe, 0xaa, 0xc9, 0x30, + 0x0d, 0xc0, 0x20, 0xf6, 0x4d, 0x18, 0xbb, 0xea, 0x07, 0xb7, 0xd9, 0x1d, 0x04, 0xac, 0xe4, 0x1e, + 0x25, 0xbc, 0x41, 0x7f, 0x64, 0xed, 0x0d, 0x06, 0xc5, 0x1c, 0xa6, 0x6a, 0x91, 0x95, 0xba, 0xd5, + 0x22, 0xb3, 0x3f, 0x66, 0xc1, 0x88, 0xca, 0x5d, 0x9b, 0xdf, 0xde, 0xa2, 0x74, 0x9b, 0x51, 0xd0, + 0x0e, 0xb3, 0x74, 0xd9, 0x45, 0x5b, 0x98, 0xc3, 0xcc, 0xa4, 0xce, 0xd2, 0x01, 0x49, 0x9d, 0xe7, + 0x61, 0x60, 0xcb, 0xf5, 0x1b, 0x59, 0xff, 0xcc, 0x55, 0xd7, 0x6f, 0x60, 0x06, 0xa1, 0x5d, 0x38, + 0xa9, 0xba, 0x20, 0xb5, 0xcb, 0x0b, 0x30, 0xb2, 0xde, 0x76, 0xbd, 0x86, 0xac, 0x25, 0x98, 0x71, + 0xcf, 0xcc, 0x18, 0x30, 0x9c, 0xc2, 0xa4, 0x9b, 0xc4, 0x75, 0xd7, 0x77, 0xa2, 0xdd, 0x15, 0xad, + 0xce, 0x94, 0x84, 0x9b, 0x51, 0x10, 0x6c, 0x60, 0xd9, 0x9f, 0x2f, 0xc3, 0x58, 0x3a, 0x83, 0xaf, + 0x87, 0xbd, 0xda, 0x13, 0x50, 0x61, 0x49, 0x7d, 0xd9, 0x4f, 0xcb, 0xcb, 0xef, 0x71, 0x18, 0x8a, + 0x61, 0x90, 0x2f, 0xe7, 0x62, 0x6e, 0x5d, 0x52, 0x9d, 0x54, 0x4e, 0x1d, 0x16, 0x5f, 0x27, 0x24, + 0x88, 0x60, 0x85, 0x3e, 0x69, 0xc1, 0x50, 0x10, 0x9a, 0x35, 0xac, 0xde, 0x5f, 0x64, 0x76, 0xa3, + 0x48, 0xae, 0x12, 0xe6, 0xb5, 0xfa, 0xf4, 0xf2, 0x73, 0x48, 0xd6, 0xe7, 0xde, 0x0d, 0x23, 0x26, + 0xe6, 0x41, 0x16, 0x76, 0xd5, 0xb4, 0xb0, 0x3f, 0x6d, 0x4e, 0x0a, 0x91, 0xbf, 0xd9, 0xc3, 0x72, + 0xbb, 0x0e, 0x95, 0xba, 0x0a, 0x88, 0x38, 0x54, 0x05, 0x5a, 0x55, 0x09, 0x84, 0x1d, 0x8a, 0x71, + 0x6a, 0xf6, 0x77, 0x2c, 0x63, 0x7e, 0x60, 0x12, 0x2f, 0x34, 0x50, 0x04, 0xe5, 0xe6, 0xf6, 0x96, + 0xb0, 0x6b, 0xaf, 0x14, 0x34, 0xbc, 0xf3, 0xdb, 0x5b, 0x7a, 0x8e, 0x9b, 0xad, 0x98, 0x32, 0xeb, + 0xc1, 0xf3, 0x98, 0x4a, 0xf3, 0x2d, 0x1f, 0x9c, 0xe6, 0x6b, 0xbf, 0x51, 0x82, 0x53, 0x1d, 0x93, + 0x0a, 0xbd, 0x0e, 0x95, 0x88, 0xbe, 0xa5, 0x78, 0xbd, 0xc5, 0xc2, 0x12, 0x73, 0xe3, 0x85, 0x86, + 0xd6, 0x7b, 0xe9, 0x76, 0xcc, 0x59, 0xa2, 0x2b, 0x80, 0x74, 0xd8, 0x8e, 0x72, 0x7b, 0xf2, 0x57, + 0x3e, 0x27, 0x1e, 0x45, 0xd3, 0x1d, 0x18, 0x38, 0xe7, 0x29, 0xf4, 0x62, 0xd6, 0x7b, 0x5a, 0x4e, + 0x9f, 0xe3, 0xee, 0xe7, 0x08, 0xb5, 0xff, 0x71, 0x09, 0x46, 0x53, 0x25, 0xc5, 0x90, 0x07, 0x55, + 0xe2, 0xb1, 0x43, 0x0e, 0xa9, 0x6c, 0x8e, 0x5a, 0xa1, 0x5b, 0x29, 0xc8, 0x8b, 0x82, 0x2e, 0x56, + 0x1c, 0x1e, 0x8c, 0x60, 0x83, 0x17, 0x60, 0x44, 0x76, 0xe8, 0xfd, 0x4e, 0xcb, 0x13, 0x03, 0xa8, + 0xe6, 0xe8, 0x45, 0x03, 0x86, 0x53, 0x98, 0xf6, 0xef, 0x94, 0x61, 0x9c, 0x9f, 0x0a, 0x35, 0xd4, + 0xcc, 0x5b, 0x92, 0x9b, 0xb7, 0xbf, 0xa8, 0x0b, 0xff, 0xf1, 0x81, 0x5c, 0x3f, 0xea, 0x85, 0x18, + 0xf9, 0x8c, 0x7a, 0x8a, 0x54, 0xfb, 0x6a, 0x26, 0x52, 0x8d, 0xdb, 0xf0, 0xcd, 0x63, 0xea, 0xd1, + 0xf7, 0x57, 0xe8, 0xda, 0xdf, 0x2c, 0xc1, 0x89, 0xcc, 0x6d, 0x23, 0xe8, 0xf3, 0xe9, 0x02, 0xd5, + 0x56, 0x11, 0x0e, 0xfa, 0x7d, 0x2f, 0xa0, 0xe8, 0xaf, 0x4c, 0xf5, 0x7d, 0x5a, 0x2a, 0xf6, 0x1f, + 0x94, 0x60, 0x2c, 0x7d, 0x4d, 0xca, 0x03, 0x38, 0x52, 0xef, 0x80, 0x1a, 0xbb, 0x09, 0x80, 0x5d, + 0xff, 0xca, 0xfd, 0xfb, 0xbc, 0xe8, 0xba, 0x6c, 0xc4, 0x1a, 0xfe, 0x40, 0x54, 0xff, 0xb6, 0xff, + 0x96, 0x05, 0x67, 0xf9, 0x5b, 0x66, 0xe7, 0xe1, 0x5f, 0xca, 0x1b, 0xdd, 0x57, 0x8a, 0xed, 0x60, + 0xa6, 0x60, 0xe5, 0x41, 0xe3, 0xcb, 0xae, 0x9d, 0x14, 0xbd, 0x4d, 0x4f, 0x85, 0x07, 0xb0, 0xb3, + 0x7d, 0x4d, 0x06, 0xfb, 0x0f, 0xca, 0xa0, 0x6f, 0xda, 0x44, 0xae, 0x48, 0x44, 0x2d, 0xa4, 0x70, + 0xe7, 0xea, 0xae, 0x5f, 0xd7, 0x77, 0x7a, 0x56, 0x33, 0x79, 0xa8, 0xbf, 0x60, 0xc1, 0xb0, 0xeb, + 0xbb, 0x89, 0xeb, 0xb0, 0x3d, 0x79, 0x31, 0xb7, 0x00, 0x2a, 0x76, 0x0b, 0x9c, 0x72, 0x10, 0x99, + 0x87, 0x42, 0x8a, 0x19, 0x36, 0x39, 0xa3, 0x0f, 0x89, 0x60, 0xf2, 0x72, 0x61, 0xd9, 0xdc, 0xd5, + 0x4c, 0x04, 0x79, 0x48, 0x0d, 0xaf, 0x24, 0x2a, 0xa8, 0x08, 0x02, 0xa6, 0xa4, 0x54, 0x0d, 0x68, + 0x7d, 0xe7, 0x39, 0x6d, 0xc6, 0x9c, 0x91, 0x1d, 0x03, 0xea, 0x1c, 0x8b, 0x3e, 0x03, 0x75, 0xa7, + 0xa0, 0xe6, 0xb4, 0x93, 0xa0, 0x45, 0x87, 0x49, 0x9c, 0x5b, 0xe9, 0x50, 0x64, 0x09, 0xc0, 0x1a, + 0xc7, 0xfe, 0x7c, 0x05, 0x32, 0x99, 0xa1, 0x68, 0xc7, 0xbc, 0x25, 0xd6, 0x2a, 0xf6, 0x96, 0x58, + 0xd5, 0x99, 0xbc, 0x9b, 0x62, 0x51, 0x13, 0x2a, 0xe1, 0xa6, 0x13, 0x4b, 0xb3, 0xfa, 0x25, 0xb5, + 0x8f, 0xa3, 0x8d, 0x77, 0xf7, 0x26, 0x7e, 0xb2, 0x37, 0x17, 0x2e, 0x9d, 0xab, 0x53, 0xbc, 0xdc, + 0x8d, 0x66, 0xcd, 0x68, 0x60, 0x4e, 0xbf, 0x9f, 0x7b, 0x10, 0x3f, 0x2e, 0xae, 0x3c, 0xc0, 0x24, + 0x6e, 0x7b, 0x89, 0x98, 0x0d, 0x2f, 0x15, 0xb8, 0xca, 0x38, 0x61, 0x5d, 0x5e, 0x81, 0xff, 0xc7, + 0x06, 0x53, 0xf4, 0x01, 0xa8, 0xc5, 0x89, 0x13, 0x25, 0x87, 0xcc, 0x42, 0x56, 0x83, 0xbe, 0x2a, + 0x89, 0x60, 0x4d, 0x0f, 0xbd, 0xcc, 0xea, 0x18, 0xbb, 0xf1, 0xe6, 0x21, 0x73, 0x40, 0x64, 0xcd, + 0x63, 0x41, 0x01, 0x1b, 0xd4, 0xd0, 0x05, 0x00, 0x36, 0xb7, 0x79, 0xe0, 0x63, 0x95, 0x79, 0x99, + 0x94, 0x28, 0xc4, 0x0a, 0x82, 0x0d, 0x2c, 0xfb, 0x47, 0x21, 0x5d, 0x1f, 0x04, 0x4d, 0xc8, 0x72, + 0x24, 0xdc, 0xa5, 0xcd, 0x72, 0x39, 0x52, 0x95, 0x43, 0x7e, 0xdd, 0x02, 0xb3, 0x88, 0x09, 0x7a, + 0x8d, 0x57, 0x4b, 0xb1, 0x8a, 0x38, 0x86, 0x34, 0xe8, 0x4e, 0x2e, 0x39, 0x61, 0xe6, 0x3c, 0x5c, + 0x96, 0x4c, 0x39, 0xf7, 0x2e, 0xa8, 0x4a, 0x68, 0x5f, 0x46, 0xdd, 0x47, 0xe1, 0x74, 0xf6, 0x0e, + 0x7d, 0x71, 0x84, 0x75, 0xb0, 0xeb, 0x47, 0xfa, 0x73, 0x4a, 0xdd, 0xfc, 0x39, 0x3d, 0xdc, 0x15, + 0xfc, 0x1b, 0x16, 0x9c, 0x3f, 0xe8, 0xaa, 0x7f, 0xf4, 0x28, 0x0c, 0xdc, 0x76, 0x22, 0x59, 0x60, + 0x9e, 0x09, 0xca, 0x9b, 0x4e, 0xe4, 0x63, 0xd6, 0x8a, 0x76, 0x61, 0x90, 0x47, 0xc7, 0x09, 0x6b, + 0xfd, 0x88, 0x6b, 0x23, 0x67, 0x38, 0xf4, 0x76, 0x81, 0x47, 0xe6, 0x61, 0xc1, 0xd0, 0xfe, 0xae, + 0x05, 0x68, 0x79, 0x9b, 0x44, 0x91, 0xdb, 0x30, 0xe2, 0xf9, 0xd8, 0xd5, 0x41, 0xc6, 0x15, 0x41, + 0x66, 0xca, 0x6f, 0xe6, 0xea, 0x20, 0xe3, 0x5f, 0xfe, 0xd5, 0x41, 0xa5, 0xfe, 0xae, 0x0e, 0x42, + 0xcb, 0x70, 0xb6, 0xc5, 0xb7, 0x1b, 0xfc, 0x3a, 0x0e, 0xbe, 0xf7, 0x50, 0x09, 0x76, 0x8f, 0xdc, + 0xd9, 0x9b, 0x38, 0xbb, 0x94, 0x87, 0x80, 0xf3, 0x9f, 0xb3, 0xdf, 0x05, 0x88, 0x87, 0xf1, 0xcd, + 0xe6, 0x05, 0x3e, 0x75, 0x75, 0xbf, 0xd8, 0x5f, 0xa9, 0xc0, 0x89, 0x4c, 0xf9, 0x61, 0xba, 0xd5, + 0xeb, 0x8c, 0xb4, 0x3a, 0xb2, 0xfe, 0xee, 0xec, 0x5e, 0x4f, 0xb1, 0x5b, 0x3e, 0x54, 0x5c, 0x3f, + 0x6c, 0x27, 0xc5, 0xe4, 0xd4, 0xf2, 0x4e, 0x2c, 0x50, 0x82, 0x86, 0xbb, 0x98, 0xfe, 0xc5, 0x9c, + 0x4d, 0x91, 0x91, 0x60, 0x29, 0x63, 0x7c, 0xe0, 0x3e, 0xb9, 0x03, 0x3e, 0xae, 0xe3, 0xb2, 0x2a, + 0x45, 0x38, 0x16, 0x33, 0x93, 0xe5, 0xb8, 0xcf, 0xed, 0x7f, 0xad, 0x04, 0xc3, 0xc6, 0x47, 0x43, + 0xbf, 0x9c, 0x2e, 0xf1, 0x65, 0x15, 0xf7, 0x4a, 0x8c, 0xfe, 0xa4, 0x2e, 0xe2, 0xc5, 0x5f, 0xe9, + 0xc9, 0xce, 0xea, 0x5e, 0x77, 0xf7, 0x26, 0x4e, 0x66, 0xea, 0x77, 0xa5, 0x2a, 0x7e, 0x9d, 0xfb, + 0x08, 0x9c, 0xc8, 0x90, 0xc9, 0x79, 0xe5, 0x35, 0xf3, 0x95, 0x8f, 0xec, 0x96, 0x32, 0x87, 0xec, + 0x9b, 0x74, 0xc8, 0x44, 0x5a, 0x61, 0xe0, 0x91, 0x1e, 0x7c, 0xb0, 0x99, 0xec, 0xe1, 0x52, 0x8f, + 0xd9, 0xc3, 0x4f, 0x41, 0x35, 0x0c, 0x3c, 0xb7, 0xee, 0xaa, 0x3a, 0x98, 0x2c, 0x5f, 0x79, 0x45, + 0xb4, 0x61, 0x05, 0x45, 0xb7, 0xa1, 0x76, 0xeb, 0x76, 0xc2, 0x4f, 0x7f, 0x84, 0x7f, 0xbb, 0xa8, + 0x43, 0x1f, 0x65, 0xb4, 0xa8, 0xe3, 0x25, 0xac, 0x79, 0x21, 0x1b, 0x06, 0x99, 0x12, 0x94, 0xa9, + 0x10, 0xcc, 0xf7, 0xce, 0xb4, 0x63, 0x8c, 0x05, 0xc4, 0xfe, 0x7a, 0x0d, 0xce, 0xe4, 0xd5, 0x80, + 0x47, 0x1f, 0x86, 0x41, 0xde, 0xc7, 0x62, 0xae, 0x19, 0xc9, 0xe3, 0x31, 0xcf, 0x08, 0x8a, 0x6e, + 0xb1, 0xdf, 0x58, 0xf0, 0x14, 0xdc, 0x3d, 0x67, 0x5d, 0xcc, 0x90, 0xe3, 0xe1, 0xbe, 0xe8, 0x68, + 0xee, 0x8b, 0x0e, 0xe7, 0xee, 0x39, 0xeb, 0x68, 0x07, 0x2a, 0x4d, 0x37, 0x21, 0x8e, 0x70, 0x22, + 0xdc, 0x3c, 0x16, 0xe6, 0xc4, 0xe1, 0x56, 0x1a, 0xfb, 0x89, 0x39, 0x43, 0xf4, 0x35, 0x0b, 0x4e, + 0xac, 0xa7, 0x4b, 0x05, 0x08, 0xe1, 0xe9, 0x1c, 0x43, 0x9d, 0xff, 0x34, 0x23, 0x7e, 0x77, 0x56, + 0xa6, 0x11, 0x67, 0xbb, 0x83, 0x3e, 0x61, 0xc1, 0xd0, 0x86, 0xeb, 0x19, 0x25, 0x9f, 0x8f, 0xe1, + 0xe3, 0x5c, 0x62, 0x0c, 0xf4, 0x8e, 0x83, 0xff, 0x8f, 0xb1, 0xe4, 0xdc, 0x4d, 0x53, 0x0d, 0x1e, + 0x55, 0x53, 0x0d, 0xdd, 0x27, 0x4d, 0xf5, 0x29, 0x0b, 0x6a, 0x6a, 0xa4, 0x45, 0xfa, 0xf7, 0x07, + 0x8e, 0xf1, 0x93, 0x73, 0xcf, 0x89, 0xfa, 0x8b, 0x35, 0x73, 0xf4, 0x05, 0x0b, 0x86, 0x9d, 0xd7, + 0xdb, 0x11, 0x69, 0x90, 0xed, 0x20, 0x8c, 0x45, 0x45, 0xb3, 0x57, 0x8a, 0xef, 0xcc, 0x34, 0x65, + 0x32, 0x47, 0xb6, 0x97, 0xc3, 0x58, 0xa4, 0x69, 0xe9, 0x06, 0x6c, 0x76, 0xc1, 0xde, 0x2b, 0xc1, + 0xc4, 0x01, 0x14, 0xd0, 0x0b, 0x30, 0x12, 0x44, 0x4d, 0xc7, 0x77, 0x5f, 0x37, 0x6b, 0x7f, 0x28, + 0x2b, 0x6b, 0xd9, 0x80, 0xe1, 0x14, 0xa6, 0x99, 0xa0, 0x5e, 0x3a, 0x20, 0x41, 0xfd, 0x3c, 0x0c, + 0x44, 0x24, 0x0c, 0xb2, 0x9b, 0x05, 0x96, 0x22, 0xc1, 0x20, 0xe8, 0x31, 0x28, 0x3b, 0xa1, 0x2b, + 0xa2, 0xda, 0xd4, 0x1e, 0x68, 0x7a, 0x65, 0x01, 0xd3, 0xf6, 0x54, 0xbd, 0x8c, 0xca, 0x3d, 0xa9, + 0x97, 0x41, 0xd5, 0x80, 0x38, 0xbb, 0x18, 0xd4, 0x6a, 0x20, 0x7d, 0xa6, 0x60, 0xbf, 0x51, 0x86, + 0xc7, 0xf6, 0x9d, 0x2f, 0x3a, 0xa8, 0xcf, 0xda, 0x27, 0xa8, 0x4f, 0x0e, 0x4f, 0xe9, 0xa0, 0xe1, + 0x29, 0x77, 0x19, 0x9e, 0x4f, 0xd0, 0x65, 0x20, 0x6b, 0xa6, 0x14, 0x73, 0x75, 0x62, 0xb7, 0x12, + 0x2c, 0x62, 0x05, 0x48, 0x28, 0xd6, 0x7c, 0xe9, 0x1e, 0x20, 0x95, 0x9c, 0x5d, 0x29, 0x42, 0x0d, + 0x74, 0xad, 0xa1, 0xc2, 0xe7, 0x7e, 0xb7, 0x8c, 0x6f, 0xfb, 0xcb, 0x25, 0x78, 0xa2, 0x07, 0xe9, + 0x6d, 0xce, 0x62, 0xab, 0xc7, 0x59, 0xfc, 0xfd, 0xfd, 0x99, 0xec, 0xbf, 0x6c, 0xc1, 0xb9, 0xee, + 0xca, 0x03, 0x3d, 0x0b, 0xc3, 0xeb, 0x91, 0xe3, 0xd7, 0x37, 0xd9, 0x75, 0xb0, 0x72, 0x50, 0xd8, + 0x58, 0xeb, 0x66, 0x6c, 0xe2, 0xd0, 0xed, 0x2d, 0x8f, 0x49, 0x30, 0x30, 0x64, 0x32, 0x2d, 0xdd, + 0xde, 0xae, 0x65, 0x81, 0xb8, 0x13, 0xdf, 0xfe, 0xb3, 0x52, 0x7e, 0xb7, 0xb8, 0x91, 0xd1, 0xcf, + 0x77, 0x12, 0x5f, 0xa1, 0xd4, 0x83, 0x2c, 0x29, 0xdf, 0x6b, 0x59, 0x32, 0xd0, 0x4d, 0x96, 0xa0, + 0x39, 0x38, 0x69, 0x5c, 0x17, 0xc4, 0x13, 0xa4, 0x79, 0xf4, 0xae, 0xaa, 0x1a, 0xb2, 0x92, 0x81, + 0xe3, 0x8e, 0x27, 0xd0, 0xd3, 0x50, 0x75, 0xfd, 0x98, 0xd4, 0xdb, 0x11, 0x8f, 0x1a, 0x37, 0x92, + 0xd2, 0x16, 0x44, 0x3b, 0x56, 0x18, 0xf6, 0xaf, 0x94, 0xe0, 0x91, 0xae, 0x76, 0xd6, 0x3d, 0x92, + 0x5d, 0xe6, 0xe7, 0x18, 0xb8, 0x37, 0x9f, 0xc3, 0x1c, 0xa4, 0xca, 0x81, 0x83, 0xf4, 0x87, 0xdd, + 0x27, 0x26, 0xb5, 0xb9, 0x7f, 0x60, 0x47, 0xe9, 0x45, 0x18, 0x75, 0xc2, 0x90, 0xe3, 0xb1, 0xe0, + 0xcf, 0x4c, 0xd5, 0xa0, 0x69, 0x13, 0x88, 0xd3, 0xb8, 0x3d, 0x69, 0xcf, 0x3f, 0xb6, 0xa0, 0x86, + 0xc9, 0x06, 0x97, 0x0e, 0xe8, 0x96, 0x18, 0x22, 0xab, 0x88, 0xa2, 0xa7, 0x74, 0x60, 0x63, 0x97, + 0x15, 0x03, 0xcd, 0x1b, 0xec, 0xa3, 0xa6, 0x23, 0xaa, 0x8b, 0x85, 0xca, 0xdd, 0x2f, 0x16, 0xb2, + 0xbf, 0x39, 0x44, 0x5f, 0x2f, 0x0c, 0x66, 0x23, 0xd2, 0x88, 0xe9, 0xf7, 0x6d, 0x47, 0x9e, 0x98, + 0x24, 0xea, 0xfb, 0x5e, 0xc7, 0x8b, 0x98, 0xb6, 0xa7, 0x8e, 0x62, 0x4a, 0x7d, 0xd5, 0x4c, 0x29, + 0x1f, 0x58, 0x33, 0xe5, 0x45, 0x18, 0x8d, 0xe3, 0xcd, 0x95, 0xc8, 0xdd, 0x76, 0x12, 0x72, 0x95, + 0xec, 0x0a, 0x2b, 0x4b, 0xd7, 0x39, 0x58, 0xbd, 0xac, 0x81, 0x38, 0x8d, 0x8b, 0xe6, 0xe1, 0x94, + 0xae, 0x5c, 0x42, 0xa2, 0x84, 0xa5, 0x0a, 0xf0, 0x99, 0xa0, 0x92, 0x9a, 0x75, 0xad, 0x13, 0x81, + 0x80, 0x3b, 0x9f, 0xa1, 0xf2, 0x2d, 0xd5, 0x48, 0x3b, 0x32, 0x98, 0x96, 0x6f, 0x29, 0x3a, 0xb4, + 0x2f, 0x1d, 0x4f, 0xa0, 0x25, 0x38, 0xcd, 0x27, 0xc6, 0x74, 0x18, 0x1a, 0x6f, 0x34, 0x94, 0x2e, + 0x36, 0x39, 0xdf, 0x89, 0x82, 0xf3, 0x9e, 0x43, 0xcf, 0xc3, 0xb0, 0x6a, 0x5e, 0x98, 0x13, 0xa7, + 0x08, 0xca, 0x8b, 0xa1, 0xc8, 0x2c, 0x34, 0xb0, 0x89, 0x87, 0xde, 0x0f, 0x0f, 0xeb, 0xbf, 0x3c, + 0x9f, 0x8c, 0x1f, 0xad, 0xcd, 0x89, 0xa2, 0x50, 0xea, 0x1a, 0x9b, 0xf9, 0x5c, 0xb4, 0x06, 0xee, + 0xf6, 0x3c, 0x5a, 0x87, 0x73, 0x0a, 0x74, 0xd1, 0x4f, 0x58, 0x72, 0x48, 0x4c, 0x66, 0x9c, 0x98, + 0x5c, 0x8f, 0x3c, 0x71, 0x0f, 0xb0, 0xba, 0x61, 0x74, 0xde, 0x4d, 0x2e, 0xe7, 0x61, 0xe2, 0x45, + 0xbc, 0x0f, 0x15, 0x34, 0x05, 0x35, 0xe2, 0x3b, 0xeb, 0x1e, 0x59, 0x9e, 0x5d, 0x60, 0xc5, 0xa5, + 0x8c, 0x93, 0xbc, 0x8b, 0x12, 0x80, 0x35, 0x8e, 0x8a, 0x30, 0x1d, 0xe9, 0x7a, 0xdb, 0xed, 0x0a, + 0x9c, 0x69, 0xd6, 0x43, 0x6a, 0x7b, 0xb8, 0x75, 0x32, 0x5d, 0x67, 0x01, 0x75, 0xf4, 0xc3, 0xf0, + 0x2a, 0xa0, 0x2a, 0x16, 0x7b, 0x7e, 0x76, 0xa5, 0x03, 0x07, 0xe7, 0x3e, 0xc9, 0x02, 0x2f, 0xa3, + 0x60, 0x67, 0x77, 0xfc, 0x74, 0x26, 0xf0, 0x92, 0x36, 0x62, 0x0e, 0x43, 0x57, 0x00, 0xb1, 0xc0, + 0xfe, 0xcb, 0x49, 0x12, 0x2a, 0x63, 0x67, 0xfc, 0x0c, 0x7b, 0x25, 0x15, 0x46, 0x76, 0xa9, 0x03, + 0x03, 0xe7, 0x3c, 0x65, 0xff, 0x5b, 0x0b, 0x46, 0xd5, 0x7a, 0xbd, 0x07, 0xa9, 0x2d, 0x5e, 0x3a, + 0xb5, 0x65, 0xfe, 0xe8, 0x12, 0x8f, 0xf5, 0xbc, 0x4b, 0x48, 0xf3, 0xcf, 0x0d, 0x03, 0x68, 0xa9, + 0xa8, 0x14, 0x92, 0xd5, 0x55, 0x21, 0x3d, 0xb0, 0x12, 0x29, 0xaf, 0x92, 0x4c, 0xe5, 0xfe, 0x56, + 0x92, 0x59, 0x85, 0xb3, 0xd2, 0x5c, 0xe0, 0x67, 0x45, 0x97, 0x83, 0x58, 0x09, 0xb8, 0xea, 0xcc, + 0x63, 0x82, 0xd0, 0xd9, 0x85, 0x3c, 0x24, 0x9c, 0xff, 0x6c, 0xca, 0x4a, 0x19, 0x3a, 0xc8, 0x4a, + 0xd1, 0x6b, 0x7a, 0x71, 0x43, 0xde, 0x22, 0x93, 0x59, 0xd3, 0x8b, 0x97, 0x56, 0xb1, 0xc6, 0xc9, + 0x17, 0xec, 0xb5, 0x82, 0x04, 0x3b, 0xf4, 0x2d, 0xd8, 0xa5, 0x88, 0x19, 0xee, 0x2a, 0x62, 0xa4, + 0x4f, 0x7a, 0xa4, 0xab, 0x4f, 0xfa, 0x3d, 0x30, 0xe6, 0xfa, 0x9b, 0x24, 0x72, 0x13, 0xd2, 0x60, + 0x6b, 0x81, 0x89, 0x9f, 0xaa, 0x56, 0xeb, 0x0b, 0x29, 0x28, 0xce, 0x60, 0xa7, 0xe5, 0xe2, 0x58, + 0x0f, 0x72, 0xb1, 0x8b, 0x36, 0x3a, 0x51, 0x8c, 0x36, 0x3a, 0x79, 0x74, 0x6d, 0x74, 0xea, 0x58, + 0xb5, 0x11, 0x2a, 0x44, 0x1b, 0xf5, 0x24, 0xe8, 0x8d, 0xed, 0xdf, 0x99, 0x03, 0xb6, 0x7f, 0xdd, + 0x54, 0xd1, 0xd9, 0x43, 0xab, 0xa2, 0x7c, 0x2d, 0xf3, 0xd0, 0xa1, 0xb4, 0xcc, 0xa7, 0x4a, 0x70, + 0x56, 0xcb, 0x61, 0x3a, 0xfb, 0xdd, 0x0d, 0x2a, 0x89, 0xd8, 0x45, 0x64, 0xfc, 0xdc, 0xc6, 0xc8, + 0xb4, 0xd2, 0x49, 0x5b, 0x0a, 0x82, 0x0d, 0x2c, 0x96, 0xb0, 0x44, 0x22, 0x56, 0x56, 0x38, 0x2b, + 0xa4, 0x67, 0x45, 0x3b, 0x56, 0x18, 0x74, 0x7e, 0xd1, 0xdf, 0x22, 0x09, 0x34, 0x5b, 0x3c, 0x6f, + 0x56, 0x83, 0xb0, 0x89, 0x87, 0x9e, 0xe2, 0x4c, 0x98, 0x80, 0xa0, 0x82, 0x7a, 0x44, 0xdc, 0x81, + 0x2c, 0x65, 0x82, 0x82, 0xca, 0xee, 0xb0, 0xcc, 0xb4, 0x4a, 0x67, 0x77, 0x58, 0x08, 0x94, 0xc2, + 0xb0, 0xff, 0x9b, 0x05, 0x8f, 0xe4, 0x0e, 0xc5, 0x3d, 0x50, 0xbe, 0x3b, 0x69, 0xe5, 0xbb, 0x5a, + 0xd4, 0x76, 0xc3, 0x78, 0x8b, 0x2e, 0x8a, 0xf8, 0x5f, 0x5b, 0x30, 0xa6, 0xf1, 0xef, 0xc1, 0xab, + 0xba, 0xe9, 0x57, 0x2d, 0x6e, 0x67, 0x55, 0xeb, 0x78, 0xb7, 0xdf, 0x29, 0x81, 0x2a, 0x68, 0x39, + 0x5d, 0x97, 0xe5, 0x82, 0x0f, 0x38, 0x49, 0xdc, 0x85, 0x41, 0x76, 0x10, 0x1a, 0x17, 0x13, 0xe4, + 0x91, 0xe6, 0xcf, 0x0e, 0x55, 0xf5, 0x21, 0x33, 0xfb, 0x1b, 0x63, 0xc1, 0x90, 0x15, 0xbd, 0x76, + 0x63, 0x2a, 0xcd, 0x1b, 0x22, 0x2d, 0x4b, 0x17, 0xbd, 0x16, 0xed, 0x58, 0x61, 0x50, 0xf5, 0xe0, + 0xd6, 0x03, 0x7f, 0xd6, 0x73, 0x62, 0x79, 0xcf, 0xa7, 0x52, 0x0f, 0x0b, 0x12, 0x80, 0x35, 0x0e, + 0x3b, 0x23, 0x75, 0xe3, 0xd0, 0x73, 0x76, 0x8d, 0xfd, 0xb3, 0x51, 0xec, 0x40, 0x81, 0xb0, 0x89, + 0x67, 0xb7, 0x60, 0x3c, 0xfd, 0x12, 0x73, 0x64, 0x83, 0x05, 0x28, 0xf6, 0x34, 0x9c, 0x53, 0x50, + 0x73, 0xd8, 0x53, 0x8b, 0x6d, 0x27, 0x7b, 0x3d, 0xff, 0xb4, 0x04, 0x60, 0x8d, 0x63, 0xff, 0xaa, + 0x05, 0xa7, 0x73, 0x06, 0xad, 0xc0, 0xb4, 0xb7, 0x44, 0x4b, 0x9b, 0x3c, 0xc5, 0xfe, 0x76, 0x18, + 0x6a, 0x90, 0x0d, 0x47, 0x86, 0xc0, 0x19, 0xb2, 0x7d, 0x8e, 0x37, 0x63, 0x09, 0xb7, 0xff, 0x8b, + 0x05, 0x27, 0xd2, 0x7d, 0x8d, 0x59, 0x2a, 0x09, 0x1f, 0x26, 0x37, 0xae, 0x07, 0xdb, 0x24, 0xda, + 0xa5, 0x6f, 0x6e, 0x65, 0x52, 0x49, 0x3a, 0x30, 0x70, 0xce, 0x53, 0xac, 0x9c, 0x6d, 0x43, 0x8d, + 0xb6, 0x9c, 0x91, 0x37, 0x8a, 0x9c, 0x91, 0xfa, 0x63, 0x9a, 0xc7, 0xe5, 0x8a, 0x25, 0x36, 0xf9, + 0xdb, 0xdf, 0x1d, 0x00, 0x95, 0x64, 0xcb, 0xe2, 0x8f, 0x0a, 0x8a, 0xde, 0xea, 0x37, 0x83, 0x48, + 0x4d, 0x86, 0x81, 0xfd, 0x02, 0x02, 0xb8, 0x97, 0xc4, 0x74, 0x5d, 0xaa, 0x37, 0x5c, 0xd3, 0x20, + 0x6c, 0xe2, 0xd1, 0x9e, 0x78, 0xee, 0x36, 0xe1, 0x0f, 0x0d, 0xa6, 0x7b, 0xb2, 0x28, 0x01, 0x58, + 0xe3, 0xd0, 0x9e, 0x34, 0xdc, 0x8d, 0x0d, 0xb1, 0xe5, 0x57, 0x3d, 0xa1, 0xa3, 0x83, 0x19, 0x84, + 0x57, 0x28, 0x0f, 0xb6, 0x84, 0x15, 0x6c, 0x54, 0x28, 0x0f, 0xb6, 0x30, 0x83, 0x50, 0xbb, 0xcd, + 0x0f, 0xa2, 0x96, 0xe3, 0xb9, 0xaf, 0x93, 0x86, 0xe2, 0x22, 0xac, 0x5f, 0x65, 0xb7, 0x5d, 0xeb, + 0x44, 0xc1, 0x79, 0xcf, 0xd1, 0x19, 0x18, 0x46, 0xa4, 0xe1, 0xd6, 0x13, 0x93, 0x1a, 0xa4, 0x67, + 0xe0, 0x4a, 0x07, 0x06, 0xce, 0x79, 0x0a, 0x4d, 0xc3, 0x09, 0x99, 0x24, 0x9d, 0xbe, 0x37, 0x56, + 0xed, 0x46, 0x70, 0x1a, 0x8c, 0xb3, 0xf8, 0x54, 0xaa, 0xb5, 0x44, 0x01, 0x2f, 0x66, 0x2c, 0x1b, + 0x52, 0x4d, 0x16, 0xf6, 0xc2, 0x0a, 0xc3, 0xfe, 0x78, 0x99, 0x6a, 0xe1, 0x2e, 0x85, 0xeb, 0xee, + 0x59, 0xb4, 0x60, 0x7a, 0x46, 0x0e, 0xf4, 0x30, 0x23, 0x9f, 0x83, 0x91, 0x5b, 0x71, 0xe0, 0xab, + 0x48, 0xbc, 0x4a, 0xd7, 0x48, 0x3c, 0x03, 0x2b, 0x3f, 0x12, 0x6f, 0xb0, 0xa8, 0x48, 0xbc, 0xa1, + 0x43, 0x46, 0xe2, 0x7d, 0xbb, 0x02, 0xea, 0xfe, 0x96, 0x6b, 0x24, 0xb9, 0x1d, 0x44, 0x5b, 0xae, + 0xdf, 0x64, 0xf9, 0xe0, 0x5f, 0xb3, 0x60, 0x84, 0xaf, 0x97, 0x45, 0x33, 0x93, 0x6a, 0xa3, 0xa0, + 0x3b, 0x38, 0x52, 0xcc, 0x26, 0xd7, 0x0c, 0x46, 0x99, 0xcb, 0x5f, 0x4d, 0x10, 0x4e, 0xf5, 0x08, + 0x7d, 0x04, 0x40, 0xfa, 0x47, 0x37, 0xa4, 0xc8, 0x5c, 0x28, 0xa6, 0x7f, 0x98, 0x6c, 0x68, 0x1b, + 0x78, 0x4d, 0x31, 0xc1, 0x06, 0x43, 0xf4, 0x29, 0x9d, 0x65, 0xc6, 0x43, 0xf6, 0x3f, 0x74, 0x2c, + 0x63, 0xd3, 0x4b, 0x8e, 0x19, 0x86, 0x21, 0xd7, 0x6f, 0xd2, 0x79, 0x22, 0x22, 0x96, 0xde, 0x96, + 0x57, 0x98, 0x61, 0x31, 0x70, 0x1a, 0x33, 0x8e, 0xe7, 0xf8, 0x75, 0x12, 0x2d, 0x70, 0x74, 0xf3, + 0x72, 0x75, 0xd6, 0x80, 0x25, 0xa1, 0x8e, 0x4b, 0x66, 0x2a, 0xbd, 0x5c, 0x32, 0x73, 0xee, 0xbd, + 0x70, 0xaa, 0xe3, 0x63, 0xf6, 0x95, 0x52, 0x76, 0xf8, 0x6c, 0x34, 0xfb, 0x9f, 0x0c, 0x6a, 0xa5, + 0x75, 0x2d, 0x68, 0xf0, 0xab, 0x4e, 0x22, 0xfd, 0x45, 0x85, 0x8d, 0x5b, 0xe0, 0x14, 0x31, 0x2e, + 0x68, 0x57, 0x8d, 0xd8, 0x64, 0x49, 0xe7, 0x68, 0xe8, 0x44, 0xc4, 0x3f, 0xee, 0x39, 0xba, 0xa2, + 0x98, 0x60, 0x83, 0x21, 0xda, 0x4c, 0xe5, 0x94, 0x5c, 0x3a, 0x7a, 0x4e, 0x09, 0x2b, 0x59, 0x95, + 0x77, 0x3b, 0xc1, 0x17, 0x2c, 0x18, 0xf3, 0x53, 0x33, 0xb7, 0x98, 0x30, 0xd2, 0xfc, 0x55, 0xc1, + 0xaf, 0xff, 0x4a, 0xb7, 0xe1, 0x0c, 0xff, 0x3c, 0x95, 0x56, 0xe9, 0x53, 0xa5, 0xe9, 0x3b, 0x93, + 0x06, 0xbb, 0xdd, 0x99, 0x84, 0x7c, 0x75, 0x93, 0xdd, 0x50, 0xe1, 0x37, 0xd9, 0x41, 0xce, 0x2d, + 0x76, 0x37, 0xa1, 0x56, 0x8f, 0x88, 0x93, 0x1c, 0xf2, 0x52, 0x33, 0x76, 0x40, 0x3f, 0x2b, 0x09, + 0x60, 0x4d, 0xcb, 0xfe, 0x9f, 0x03, 0x70, 0x52, 0x8e, 0x88, 0x0c, 0x41, 0xa7, 0xfa, 0x91, 0xf3, + 0xd5, 0xc6, 0xad, 0xd2, 0x8f, 0x97, 0x25, 0x00, 0x6b, 0x1c, 0x6a, 0x8f, 0xb5, 0x63, 0xb2, 0x1c, + 0x12, 0x7f, 0xd1, 0x5d, 0x8f, 0xc5, 0x39, 0xa7, 0x5a, 0x28, 0xd7, 0x35, 0x08, 0x9b, 0x78, 0xd4, + 0x18, 0xe7, 0x76, 0x71, 0x9c, 0x4d, 0x5f, 0x11, 0xf6, 0x36, 0x96, 0x70, 0xf4, 0x8b, 0xb9, 0x95, + 0x74, 0x8b, 0x49, 0xdc, 0xea, 0x88, 0xbc, 0xef, 0xf3, 0x4a, 0xce, 0xbf, 0x6e, 0xc1, 0x59, 0xde, + 0x2a, 0x47, 0xf2, 0x7a, 0xd8, 0x70, 0x12, 0x12, 0x17, 0x53, 0xd9, 0x3e, 0xa7, 0x7f, 0xda, 0xc9, + 0x9b, 0xc7, 0x16, 0xe7, 0xf7, 0x06, 0x7d, 0xde, 0x82, 0x13, 0x5b, 0xa9, 0x9a, 0x1f, 0x52, 0x75, + 0x1c, 0x35, 0x1d, 0x3f, 0x45, 0x54, 0x2f, 0xb5, 0x74, 0x7b, 0x8c, 0xb3, 0xdc, 0xed, 0x3f, 0xb3, + 0xc0, 0x14, 0xa3, 0xf7, 0xbe, 0x54, 0x48, 0xff, 0xa6, 0xa0, 0xb4, 0x2e, 0x2b, 0x5d, 0xad, 0xcb, + 0xc7, 0xa0, 0xdc, 0x76, 0x1b, 0x62, 0x7f, 0xa1, 0x4f, 0x5f, 0x17, 0xe6, 0x30, 0x6d, 0xb7, 0xff, + 0x61, 0x45, 0xfb, 0x2d, 0x44, 0x5e, 0xd4, 0x0f, 0xc4, 0x6b, 0x6f, 0xa8, 0xca, 0x65, 0xfc, 0xcd, + 0xaf, 0x75, 0x54, 0x2e, 0xfb, 0xf1, 0xfe, 0xd3, 0xde, 0xf8, 0x00, 0x75, 0x2b, 0x5c, 0x36, 0x74, + 0x40, 0xce, 0xdb, 0x2d, 0xa8, 0xd2, 0x2d, 0x18, 0x73, 0x40, 0x56, 0x53, 0x9d, 0xaa, 0x5e, 0x16, + 0xed, 0x77, 0xf7, 0x26, 0xde, 0xdd, 0x7f, 0xb7, 0xe4, 0xd3, 0x58, 0xd1, 0x47, 0x31, 0xd4, 0xe8, + 0x6f, 0x96, 0x9e, 0x27, 0x36, 0x77, 0xd7, 0x95, 0xcc, 0x94, 0x80, 0x42, 0x72, 0xff, 0x34, 0x1f, + 0xe4, 0x43, 0x8d, 0xdd, 0x5e, 0xcc, 0x98, 0xf2, 0x3d, 0xe0, 0x8a, 0x4a, 0x92, 0x93, 0x80, 0xbb, + 0x7b, 0x13, 0x2f, 0xf6, 0xcf, 0x54, 0x3d, 0x8e, 0x35, 0x0b, 0xfb, 0x8b, 0x03, 0x7a, 0xee, 0x8a, + 0x82, 0x75, 0x3f, 0x10, 0x73, 0xf7, 0x85, 0xcc, 0xdc, 0x3d, 0xdf, 0x31, 0x77, 0xc7, 0xf4, 0xd5, + 0xb6, 0xa9, 0xd9, 0x78, 0xaf, 0x0d, 0x81, 0x83, 0xfd, 0x0d, 0xcc, 0x02, 0x7a, 0xad, 0xed, 0x46, + 0x24, 0x5e, 0x89, 0xda, 0xbe, 0xeb, 0x37, 0xd9, 0x74, 0xac, 0x9a, 0x16, 0x50, 0x0a, 0x8c, 0xb3, + 0xf8, 0x74, 0x53, 0x4f, 0xbf, 0xf9, 0x4d, 0x67, 0x9b, 0xcf, 0x2a, 0xa3, 0xec, 0xd6, 0xaa, 0x68, + 0xc7, 0x0a, 0xc3, 0xfe, 0x26, 0x3b, 0xcb, 0x36, 0xf2, 0x82, 0xe9, 0x9c, 0xf0, 0xd8, 0x75, 0xd1, + 0xbc, 0x66, 0x97, 0x9a, 0x13, 0xfc, 0x8e, 0x68, 0x0e, 0x43, 0xb7, 0x61, 0x68, 0x9d, 0xdf, 0x07, + 0x58, 0x4c, 0xbd, 0x76, 0x71, 0xb9, 0x20, 0xbb, 0xf5, 0x45, 0xde, 0x34, 0x78, 0x57, 0xff, 0xc4, + 0x92, 0x9b, 0xfd, 0xfb, 0x15, 0x38, 0x91, 0xb9, 0xc5, 0x37, 0x55, 0x7a, 0xb5, 0x74, 0x60, 0xe9, + 0xd5, 0x0f, 0x02, 0x34, 0x48, 0xe8, 0x05, 0xbb, 0xcc, 0x1c, 0x1b, 0xe8, 0xdb, 0x1c, 0x53, 0x16, + 0xfc, 0x9c, 0xa2, 0x82, 0x0d, 0x8a, 0xa2, 0x50, 0x19, 0xaf, 0xe4, 0x9a, 0x29, 0x54, 0x66, 0xdc, + 0xea, 0x30, 0x78, 0x6f, 0x6f, 0x75, 0x70, 0xe1, 0x04, 0xef, 0xa2, 0xca, 0xbe, 0x3d, 0x44, 0x92, + 0x2d, 0xcb, 0x5f, 0x98, 0x4b, 0x93, 0xc1, 0x59, 0xba, 0xf7, 0xf5, 0xbe, 0xf0, 0x77, 0x40, 0x4d, + 0x7e, 0xe7, 0x78, 0xbc, 0xa6, 0x2b, 0x18, 0xc8, 0x69, 0xc0, 0x2e, 0xcf, 0x16, 0x3f, 0x3b, 0x0a, + 0x09, 0xc0, 0xfd, 0x2a, 0x24, 0x60, 0x7f, 0xae, 0x44, 0xed, 0x78, 0xde, 0x2f, 0x55, 0x13, 0xe7, + 0x49, 0x18, 0x74, 0xda, 0xc9, 0x66, 0xd0, 0x71, 0xbb, 0xe1, 0x34, 0x6b, 0xc5, 0x02, 0x8a, 0x16, + 0x61, 0xa0, 0xa1, 0xeb, 0x9c, 0xf4, 0xf3, 0x3d, 0xb5, 0x4b, 0xd4, 0x49, 0x08, 0x66, 0x54, 0xd0, + 0xa3, 0x30, 0x90, 0x38, 0x4d, 0x99, 0x72, 0xc5, 0xd2, 0x6c, 0xd7, 0x9c, 0x66, 0x8c, 0x59, 0xab, + 0xa9, 0xbe, 0x07, 0x0e, 0x50, 0xdf, 0x2f, 0xc2, 0x68, 0xec, 0x36, 0x7d, 0x27, 0x69, 0x47, 0xc4, + 0x38, 0xe6, 0xd3, 0x91, 0x1b, 0x26, 0x10, 0xa7, 0x71, 0xed, 0xdf, 0x1c, 0x81, 0x33, 0xab, 0xb3, + 0x4b, 0xb2, 0x14, 0xf8, 0xb1, 0x65, 0x4d, 0xe5, 0xf1, 0xb8, 0x77, 0x59, 0x53, 0x5d, 0xb8, 0x7b, + 0x46, 0xd6, 0x94, 0x67, 0x64, 0x4d, 0xa5, 0x53, 0x58, 0xca, 0x45, 0xa4, 0xb0, 0xe4, 0xf5, 0xa0, + 0x97, 0x14, 0x96, 0x63, 0x4b, 0xa3, 0xda, 0xb7, 0x43, 0x7d, 0xa5, 0x51, 0xa9, 0x1c, 0xb3, 0x42, + 0x92, 0x0b, 0xba, 0x7c, 0xaa, 0xdc, 0x1c, 0x33, 0x95, 0xdf, 0xc3, 0x13, 0x67, 0x84, 0xa8, 0x7f, + 0xa5, 0xf8, 0x0e, 0xf4, 0x90, 0xdf, 0x23, 0x72, 0x77, 0xcc, 0x9c, 0xb2, 0xa1, 0x22, 0x72, 0xca, + 0xf2, 0xba, 0x73, 0x60, 0x4e, 0xd9, 0x8b, 0x30, 0x5a, 0xf7, 0x02, 0x9f, 0xac, 0x44, 0x41, 0x12, + 0xd4, 0x03, 0x4f, 0x98, 0xf5, 0x4a, 0x24, 0xcc, 0x9a, 0x40, 0x9c, 0xc6, 0xed, 0x96, 0x90, 0x56, + 0x3b, 0x6a, 0x42, 0x1a, 0xdc, 0xa7, 0x84, 0xb4, 0x9f, 0xd7, 0xa9, 0xd3, 0xc3, 0xec, 0x8b, 0x7c, + 0xb0, 0xf8, 0x2f, 0xd2, 0x4b, 0xfe, 0x34, 0x7a, 0x83, 0x5f, 0x2f, 0x48, 0x0d, 0xe3, 0xd9, 0xa0, + 0x45, 0x0d, 0xbf, 0x11, 0x36, 0x24, 0xaf, 0x1e, 0xc3, 0x84, 0xbd, 0xb9, 0xaa, 0xd9, 0xa8, 0x2b, + 0x07, 0x75, 0x13, 0x4e, 0x77, 0xe4, 0x28, 0xa9, 0xdd, 0x5f, 0x29, 0xc1, 0x0f, 0x1d, 0xd8, 0x05, + 0x74, 0x1b, 0x20, 0x71, 0x9a, 0x62, 0xa2, 0x8a, 0x03, 0x93, 0x23, 0x86, 0x57, 0xae, 0x49, 0x7a, + 0xbc, 0x26, 0x89, 0xfa, 0xcb, 0x8e, 0x22, 0xe4, 0x6f, 0x16, 0x55, 0x19, 0x78, 0x1d, 0xa5, 0x1b, + 0x71, 0xe0, 0x11, 0xcc, 0x20, 0x54, 0xfd, 0x47, 0xa4, 0xa9, 0xef, 0xc3, 0x56, 0x9f, 0x0f, 0xb3, + 0x56, 0x2c, 0xa0, 0xe8, 0x79, 0x18, 0x76, 0x3c, 0x8f, 0xe7, 0xc7, 0x90, 0x58, 0xdc, 0x2f, 0xa4, + 0x6b, 0xc8, 0x69, 0x10, 0x36, 0xf1, 0xec, 0x3f, 0x2d, 0xc1, 0xc4, 0x01, 0x32, 0xa5, 0x23, 0xe3, + 0xaf, 0xd2, 0x73, 0xc6, 0x9f, 0xc8, 0x51, 0x18, 0xec, 0x92, 0xa3, 0xf0, 0x3c, 0x0c, 0x27, 0xc4, + 0x69, 0x89, 0x80, 0x2c, 0xe1, 0x09, 0xd0, 0x27, 0xc0, 0x1a, 0x84, 0x4d, 0x3c, 0x2a, 0xc5, 0xc6, + 0x9c, 0x7a, 0x9d, 0xc4, 0xb1, 0x4c, 0x42, 0x10, 0xde, 0xd4, 0xc2, 0x32, 0x1c, 0x98, 0x93, 0x7a, + 0x3a, 0xc5, 0x02, 0x67, 0x58, 0x66, 0x07, 0xbc, 0xd6, 0xe3, 0x80, 0x7f, 0xbd, 0x04, 0x8f, 0xed, + 0xab, 0xdd, 0x7a, 0xce, 0x0f, 0x69, 0xc7, 0x24, 0xca, 0x4e, 0x9c, 0xeb, 0x31, 0x89, 0x30, 0x83, + 0xf0, 0x51, 0x0a, 0x43, 0xe3, 0xbe, 0xf1, 0xa2, 0x93, 0x97, 0xf8, 0x28, 0xa5, 0x58, 0xe0, 0x0c, + 0xcb, 0xc3, 0x4e, 0xcb, 0xbf, 0x5d, 0x82, 0x27, 0x7a, 0xb0, 0x01, 0x0a, 0x4c, 0xf2, 0x4a, 0xa7, + 0xda, 0x95, 0xef, 0x53, 0x46, 0xe4, 0x21, 0x87, 0xeb, 0x9b, 0x25, 0x38, 0xd7, 0x5d, 0x15, 0xa3, + 0x9f, 0x80, 0x13, 0x91, 0x8a, 0xc2, 0x32, 0xb3, 0xf4, 0x4e, 0x73, 0x4f, 0x42, 0x0a, 0x84, 0xb3, + 0xb8, 0x68, 0x12, 0x20, 0x74, 0x92, 0xcd, 0xf8, 0xe2, 0x8e, 0x1b, 0x27, 0xa2, 0x0a, 0xcd, 0x18, + 0x3f, 0xbb, 0x92, 0xad, 0xd8, 0xc0, 0xa0, 0xec, 0xd8, 0xbf, 0xb9, 0xe0, 0x5a, 0x90, 0xf0, 0x87, + 0xf8, 0x36, 0xe2, 0xb4, 0xbc, 0x00, 0xc4, 0x00, 0xe1, 0x2c, 0x2e, 0x65, 0xc7, 0x4e, 0x47, 0x79, + 0x47, 0xf9, 0xfe, 0x82, 0xb1, 0x5b, 0x54, 0xad, 0xd8, 0xc0, 0xc8, 0xe6, 0x1f, 0x56, 0x0e, 0xce, + 0x3f, 0xb4, 0xff, 0x41, 0x09, 0x1e, 0xe9, 0x6a, 0xca, 0xf5, 0xb6, 0x00, 0x1f, 0xbc, 0x9c, 0xc1, + 0xc3, 0xcd, 0x9d, 0x3e, 0x73, 0xdb, 0xfe, 0xb8, 0xcb, 0x4c, 0x13, 0xb9, 0x6d, 0x87, 0x4f, 0x0e, + 0x7f, 0xf0, 0xc6, 0xb3, 0x23, 0x9d, 0x6d, 0xa0, 0x8f, 0x74, 0xb6, 0xcc, 0xc7, 0xa8, 0xf4, 0xb8, + 0x90, 0xff, 0xbc, 0xdc, 0x75, 0x78, 0xe9, 0xd6, 0xaf, 0x27, 0x3f, 0xed, 0x1c, 0x9c, 0x74, 0x7d, + 0x76, 0x19, 0xd4, 0x6a, 0x7b, 0x5d, 0x14, 0x26, 0x29, 0xa5, 0x6f, 0x93, 0x5f, 0xc8, 0xc0, 0x71, + 0xc7, 0x13, 0x0f, 0x60, 0x7a, 0xe1, 0xe1, 0x86, 0xb4, 0xbf, 0x04, 0x57, 0xb4, 0x0c, 0x67, 0xe5, + 0x50, 0x6c, 0x3a, 0x11, 0x69, 0x08, 0x35, 0x12, 0x8b, 0x84, 0x8a, 0x47, 0x78, 0x52, 0x46, 0x0e, + 0x02, 0xce, 0x7f, 0x8e, 0xdd, 0xbf, 0x13, 0x84, 0x6e, 0x5d, 0x6c, 0x72, 0xf4, 0xfd, 0x3b, 0xb4, + 0x11, 0x73, 0x98, 0xfd, 0x41, 0xa8, 0xa9, 0xf7, 0xe7, 0x61, 0xdd, 0x6a, 0xd2, 0x75, 0x84, 0x75, + 0xab, 0x19, 0x67, 0x60, 0xd1, 0xaf, 0x45, 0x4d, 0xe2, 0xcc, 0xea, 0xb9, 0x4a, 0x76, 0x99, 0x7d, + 0x6c, 0xbf, 0x13, 0x46, 0x94, 0x9f, 0xa5, 0xd7, 0x5b, 0x89, 0xec, 0xff, 0x5d, 0x82, 0x31, 0xee, + 0x59, 0xe3, 0x97, 0x56, 0x04, 0x74, 0x33, 0x5d, 0x6b, 0xc8, 0xdb, 0x1c, 0x8b, 0xa9, 0xc6, 0xa8, + 0x2e, 0x87, 0xd4, 0xee, 0x7f, 0xd5, 0x84, 0x35, 0x33, 0xf4, 0x61, 0x5e, 0xf8, 0x50, 0xb0, 0x2e, + 0x15, 0x91, 0xf2, 0xb9, 0xaa, 0xe8, 0x99, 0x57, 0x9d, 0xc8, 0x36, 0x6c, 0xf0, 0x43, 0x09, 0xd4, + 0x36, 0xe5, 0xc5, 0x1d, 0xc5, 0x88, 0x1f, 0x75, 0x0f, 0x08, 0x37, 0x06, 0xd4, 0x5f, 0xac, 0x19, + 0xd9, 0xff, 0xd4, 0x82, 0x33, 0xe9, 0x0f, 0x20, 0x8e, 0x6b, 0xee, 0xdf, 0x67, 0xe8, 0xcb, 0xc5, + 0x6e, 0x7f, 0x71, 0x10, 0x46, 0x53, 0xe5, 0x25, 0x53, 0xcf, 0x5b, 0x07, 0xba, 0xe8, 0x59, 0xa2, + 0x47, 0xdb, 0x97, 0x97, 0xde, 0x19, 0x89, 0x1e, 0x6d, 0x9f, 0x60, 0x0e, 0xa3, 0x1b, 0xa4, 0x46, + 0xb4, 0x8b, 0xdb, 0xbe, 0x08, 0xc8, 0x56, 0x1b, 0xa4, 0x39, 0xd6, 0x8a, 0x05, 0x14, 0x7d, 0xcc, + 0x82, 0x11, 0xf6, 0x49, 0xc5, 0x01, 0x87, 0x10, 0x5b, 0x57, 0x0a, 0x98, 0x44, 0xb2, 0x94, 0x2a, + 0x8b, 0xb1, 0x32, 0x5b, 0x70, 0x8a, 0x23, 0xfa, 0xa4, 0x05, 0x35, 0x75, 0x37, 0x8f, 0xb8, 0xc1, + 0x72, 0xb5, 0xd8, 0xea, 0x9d, 0x99, 0x8f, 0xa8, 0xca, 0x28, 0x62, 0xcd, 0x18, 0xc5, 0xea, 0xf4, + 0x61, 0xe8, 0x78, 0x4e, 0x1f, 0x20, 0xe7, 0xe4, 0xe1, 0x1d, 0x50, 0x6b, 0x39, 0xbe, 0xbb, 0x41, + 0xe2, 0x84, 0x1f, 0x08, 0xc8, 0xa2, 0xc2, 0xb2, 0x11, 0x6b, 0x38, 0x35, 0xe9, 0x62, 0xf6, 0x62, + 0x89, 0xe1, 0xc1, 0x67, 0x26, 0xdd, 0xaa, 0x6e, 0xc6, 0x26, 0x8e, 0x79, 0xdc, 0x00, 0xf7, 0xf5, + 0xb8, 0x61, 0x78, 0xff, 0xe3, 0x06, 0xfb, 0xef, 0x5a, 0x70, 0x36, 0xf7, 0xab, 0x3d, 0xb8, 0xa1, + 0xb3, 0xf6, 0x97, 0x2a, 0x70, 0x3a, 0xa7, 0x4e, 0x2c, 0xda, 0x35, 0xe7, 0xb3, 0x55, 0x44, 0x14, + 0x4a, 0x3a, 0xa8, 0x42, 0x0e, 0x63, 0xce, 0x24, 0xee, 0xef, 0xb0, 0x4f, 0x1f, 0xb8, 0x95, 0xef, + 0xed, 0x81, 0x9b, 0x31, 0x2d, 0x07, 0xee, 0xeb, 0xb4, 0xac, 0x1c, 0x70, 0x0a, 0xf6, 0x6b, 0x16, + 0x8c, 0xb7, 0xba, 0x5c, 0x4e, 0x20, 0x5c, 0xd7, 0x37, 0x8e, 0xe7, 0xea, 0x83, 0x99, 0x47, 0xef, + 0xec, 0x4d, 0x74, 0xbd, 0x13, 0x02, 0x77, 0xed, 0x95, 0xfd, 0xdd, 0x32, 0x30, 0x85, 0xcd, 0x6a, + 0x01, 0xee, 0xa2, 0x8f, 0x9a, 0xe5, 0xa6, 0xad, 0xa2, 0x4a, 0x23, 0x73, 0xe2, 0xaa, 0x5c, 0x35, + 0x1f, 0xc1, 0xbc, 0xea, 0xd5, 0x59, 0xa1, 0x55, 0xea, 0x41, 0x68, 0x79, 0xb2, 0xae, 0x77, 0xb9, + 0xf8, 0xba, 0xde, 0xb5, 0x6c, 0x4d, 0xef, 0xfd, 0x3f, 0xf1, 0xc0, 0x03, 0xf9, 0x89, 0x7f, 0xc9, + 0xe2, 0x82, 0x27, 0xf3, 0x15, 0xb4, 0x65, 0x60, 0xed, 0x63, 0x19, 0x3c, 0x0d, 0xd5, 0x98, 0x78, + 0x1b, 0x97, 0x89, 0xe3, 0x09, 0x0b, 0x42, 0x47, 0x40, 0x88, 0x76, 0xac, 0x30, 0xd8, 0x2d, 0xc2, + 0x9e, 0x17, 0xdc, 0xbe, 0xd8, 0x0a, 0x93, 0x5d, 0x61, 0x4b, 0xe8, 0x5b, 0x84, 0x15, 0x04, 0x1b, + 0x58, 0xb6, 0x0f, 0x86, 0xc5, 0x78, 0xd4, 0x1b, 0xdd, 0x7a, 0xb8, 0x6b, 0xf1, 0xaf, 0x95, 0x04, + 0x43, 0x6e, 0x07, 0xbe, 0x90, 0xb9, 0x67, 0xb2, 0xf7, 0x88, 0x97, 0x0f, 0x03, 0xd4, 0x83, 0x56, + 0x48, 0x77, 0x2a, 0x6b, 0x41, 0x31, 0xe6, 0xf4, 0xac, 0xa2, 0xa7, 0x87, 0x4d, 0xb7, 0x61, 0x83, + 0x5f, 0x4a, 0x76, 0x97, 0x0f, 0x94, 0xdd, 0x29, 0x31, 0x36, 0x70, 0x80, 0x76, 0xfd, 0x53, 0x0b, + 0x52, 0x16, 0x18, 0x0a, 0xa1, 0x42, 0xbb, 0xbb, 0x2b, 0x24, 0xc2, 0x72, 0x71, 0xe6, 0x1e, 0x15, + 0xc5, 0x62, 0x99, 0xb1, 0x9f, 0x98, 0x33, 0x42, 0x9e, 0x88, 0xee, 0xe1, 0xa3, 0x7a, 0xad, 0x38, + 0x86, 0x97, 0x83, 0x60, 0x8b, 0x1f, 0xc5, 0xeb, 0x48, 0x21, 0xfb, 0x05, 0x38, 0xd5, 0xd1, 0x29, + 0x76, 0x0b, 0x5c, 0x20, 0x37, 0x07, 0xc6, 0xf2, 0x60, 0x29, 0xc7, 0x98, 0xc3, 0xec, 0x6f, 0x5a, + 0x70, 0x32, 0x4b, 0x1e, 0xbd, 0x61, 0xc1, 0xa9, 0x38, 0x4b, 0xef, 0xb8, 0xc6, 0x4e, 0x45, 0xe8, + 0x76, 0x80, 0x70, 0x67, 0x27, 0xec, 0xff, 0x25, 0x26, 0xff, 0x4d, 0xd7, 0x6f, 0x04, 0xb7, 0x95, + 0x21, 0x64, 0x75, 0x35, 0x84, 0xe8, 0xfa, 0xaf, 0x6f, 0x92, 0x46, 0xdb, 0xeb, 0xc8, 0x75, 0x5e, + 0x15, 0xed, 0x58, 0x61, 0xb0, 0xd4, 0xce, 0xb6, 0xb8, 0x68, 0x20, 0x33, 0x29, 0xe7, 0x44, 0x3b, + 0x56, 0x18, 0xe8, 0x39, 0x18, 0x31, 0x5e, 0x52, 0xce, 0x4b, 0xb6, 0x01, 0x30, 0x54, 0x74, 0x8c, + 0x53, 0x58, 0x68, 0x12, 0x40, 0x19, 0x55, 0x52, 0x25, 0x33, 0xd7, 0xa6, 0x92, 0x7c, 0x31, 0x36, + 0x30, 0x58, 0x22, 0xb5, 0xd7, 0x8e, 0xd9, 0xa9, 0xd4, 0xa0, 0x2e, 0x7e, 0x3b, 0x2b, 0xda, 0xb0, + 0x82, 0x52, 0xe9, 0xd5, 0x72, 0xfc, 0xb6, 0xe3, 0xd1, 0x11, 0x12, 0xce, 0x0a, 0xb5, 0x0c, 0x97, + 0x14, 0x04, 0x1b, 0x58, 0xf4, 0x8d, 0x13, 0xb7, 0x45, 0x5e, 0x0e, 0x7c, 0x19, 0x59, 0xa9, 0x0f, + 0x2a, 0x45, 0x3b, 0x56, 0x18, 0xf6, 0x7f, 0xb2, 0xe0, 0x84, 0x2e, 0xcb, 0xc0, 0x2f, 0x8f, 0x37, + 0x7d, 0x2b, 0xd6, 0x81, 0xbe, 0x95, 0x74, 0xbe, 0x7a, 0xa9, 0xa7, 0x7c, 0x75, 0x33, 0x95, 0xbc, + 0xbc, 0x6f, 0x2a, 0xf9, 0x8f, 0xe8, 0x8b, 0x89, 0x79, 0xce, 0xf9, 0x70, 0xde, 0xa5, 0xc4, 0xc8, + 0x86, 0xc1, 0xba, 0xa3, 0x6a, 0x12, 0x8d, 0xf0, 0xbd, 0xca, 0xec, 0x34, 0x43, 0x12, 0x10, 0x7b, + 0x19, 0x6a, 0xea, 0xbc, 0x4e, 0xba, 0x56, 0xac, 0x7c, 0xd7, 0x4a, 0x4f, 0x29, 0xad, 0x33, 0xeb, + 0xdf, 0xfa, 0xde, 0xe3, 0x6f, 0xf9, 0xbd, 0xef, 0x3d, 0xfe, 0x96, 0x3f, 0xfa, 0xde, 0xe3, 0x6f, + 0xf9, 0xd8, 0x9d, 0xc7, 0xad, 0x6f, 0xdd, 0x79, 0xdc, 0xfa, 0xbd, 0x3b, 0x8f, 0x5b, 0x7f, 0x74, + 0xe7, 0x71, 0xeb, 0xbb, 0x77, 0x1e, 0xb7, 0xbe, 0xf0, 0xef, 0x1f, 0x7f, 0xcb, 0xcb, 0xb9, 0xa1, + 0xb5, 0xf4, 0xc7, 0x33, 0xf5, 0xc6, 0xd4, 0xf6, 0x05, 0x16, 0xdd, 0x49, 0x97, 0xd7, 0x94, 0x31, + 0xa7, 0xa6, 0xe4, 0xf2, 0xfa, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x2a, 0x54, 0xd3, 0xc0, 0xf9, + 0xe6, 0x00, 0x00, } func (m *AWSAuthConfig) Marshal() (dAtA []byte, err error) { @@ -7278,6 +7280,20 @@ func (m *ApplicationSourceHelm) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.ApiVersions) > 0 { + for iNdEx := len(m.ApiVersions) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.ApiVersions[iNdEx]) + copy(dAtA[i:], m.ApiVersions[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ApiVersions[iNdEx]))) + i-- + dAtA[i] = 0x62 + } + } + i -= len(m.KubeVersion) + copy(dAtA[i:], m.KubeVersion) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.KubeVersion))) + i-- + dAtA[i] = 0x5a if m.ValuesObject != nil { { size, err := m.ValuesObject.MarshalToSizedBuffer(dAtA[:i]) @@ -15538,6 +15554,14 @@ func (m *ApplicationSourceHelm) Size() (n int) { l = m.ValuesObject.Size() n += 1 + l + sovGenerated(uint64(l)) } + l = len(m.KubeVersion) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.ApiVersions) > 0 { + for _, s := range m.ApiVersions { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } return n } @@ -18850,6 +18874,8 @@ func (this *ApplicationSourceHelm) String() string { `IgnoreMissingValueFiles:` + fmt.Sprintf("%v", this.IgnoreMissingValueFiles) + `,`, `SkipCrds:` + fmt.Sprintf("%v", this.SkipCrds) + `,`, `ValuesObject:` + strings.Replace(fmt.Sprintf("%v", this.ValuesObject), "RawExtension", "runtime.RawExtension", 1) + `,`, + `KubeVersion:` + fmt.Sprintf("%v", this.KubeVersion) + `,`, + `ApiVersions:` + fmt.Sprintf("%v", this.ApiVersions) + `,`, `}`, }, "") return s @@ -27144,6 +27170,70 @@ func (m *ApplicationSourceHelm) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 11: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field KubeVersion", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.KubeVersion = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 12: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ApiVersions", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ApiVersions = append(m.ApiVersions, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) diff --git a/pkg/apis/application/v1alpha1/generated.proto b/pkg/apis/application/v1alpha1/generated.proto index c788006bcf1ff..19ae98d0d1160 100644 --- a/pkg/apis/application/v1alpha1/generated.proto +++ b/pkg/apis/application/v1alpha1/generated.proto @@ -475,6 +475,12 @@ message ApplicationSourceHelm { // ValuesObject specifies Helm values to be passed to helm template, defined as a map. This takes precedence over Values. // +kubebuilder:pruning:PreserveUnknownFields optional k8s.io.apimachinery.pkg.runtime.RawExtension valuesObject = 10; + + // KubeVersions is the Kubernetes version to use for templating. If not set, defaults to the server's current Kubernetes version. + optional string kubeVersion = 11; + + // APIVersions is a list of Kubernetes API versions to use for templating. If not set, defaults to the server's preferred API versions. + repeated string apiVersions = 12; } // ApplicationSourceJsonnet holds options specific to applications of type Jsonnet diff --git a/pkg/apis/application/v1alpha1/openapi_generated.go b/pkg/apis/application/v1alpha1/openapi_generated.go index 20f7756c2bc52..7bb544b4d6bb6 100644 --- a/pkg/apis/application/v1alpha1/openapi_generated.go +++ b/pkg/apis/application/v1alpha1/openapi_generated.go @@ -1779,6 +1779,28 @@ func schema_pkg_apis_application_v1alpha1_ApplicationSourceHelm(ref common.Refer Ref: ref("k8s.io/apimachinery/pkg/runtime.RawExtension"), }, }, + "kubeVersion": { + SchemaProps: spec.SchemaProps{ + Description: "KubeVersions is the Kubernetes version to use for templating. If not set, defaults to the server's current Kubernetes version.", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersions": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersions is a list of Kubernetes API versions to use for templating. If not set, defaults to the server's preferred API versions.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, }, }, }, diff --git a/pkg/apis/application/v1alpha1/types.go b/pkg/apis/application/v1alpha1/types.go index 8cc3288954ef4..6857747ecf396 100644 --- a/pkg/apis/application/v1alpha1/types.go +++ b/pkg/apis/application/v1alpha1/types.go @@ -397,6 +397,10 @@ type ApplicationSourceHelm struct { // ValuesObject specifies Helm values to be passed to helm template, defined as a map. This takes precedence over Values. // +kubebuilder:pruning:PreserveUnknownFields ValuesObject *runtime.RawExtension `json:"valuesObject,omitempty" protobuf:"bytes,10,opt,name=valuesObject"` + // KubeVersions is the Kubernetes version to use for templating. If not set, defaults to the server's current Kubernetes version. + KubeVersion string `json:"kubeVersion,omitempty" protobuf:"bytes,11,opt,name=kubeVersion"` + // APIVersions is a list of Kubernetes API versions to use for templating. If not set, defaults to the server's preferred API versions. + ApiVersions []string `json:"apiVersions,omitempty" protobuf:"bytes,12,opt,name=apiVersions"` } // HelmParameter is a parameter that's passed to helm template during manifest generation diff --git a/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go index 54db74a3b85a4..7b0a7869774d4 100644 --- a/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go +++ b/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go @@ -1030,6 +1030,11 @@ func (in *ApplicationSourceHelm) DeepCopyInto(out *ApplicationSourceHelm) { *out = new(runtime.RawExtension) (*in).DeepCopyInto(*out) } + if in.ApiVersions != nil { + in, out := &in.ApiVersions, &out.ApiVersions + *out = make([]string, len(*in)) + copy(*out, *in) + } return } diff --git a/reposerver/repository/repository.go b/reposerver/repository/repository.go index f4f63623dc9aa..880b380aa5afa 100644 --- a/reposerver/repository/repository.go +++ b/reposerver/repository/repository.go @@ -1118,11 +1118,29 @@ func helmTemplate(appPath string, repoRoot string, env *v1alpha1.Env, q *apiclie // templating, thus, we just use the name part of the identifier. appName, _ := argo.ParseInstanceName(q.AppName, "") + // If the API versions are not set in the application source, use the ones from the request. + var apiVersions []string + if q.ApplicationSource.Helm != nil { + apiVersions = q.ApplicationSource.Helm.ApiVersions + } + if len(apiVersions) == 0 { + apiVersions = q.ApiVersions + } + + // If the Kube version is not set in the application source, use the one from the request. + kubeVersion := "" + if q.ApplicationSource.Helm != nil { + kubeVersion = q.ApplicationSource.Helm.KubeVersion + } + if kubeVersion == "" { + kubeVersion = q.KubeVersion + } + templateOpts := &helm.TemplateOpts{ Name: appName, Namespace: q.Namespace, - KubeVersion: text.SemVer(q.KubeVersion), - APIVersions: q.ApiVersions, + KubeVersion: text.SemVer(kubeVersion), + APIVersions: apiVersions, Set: map[string]string{}, SetString: map[string]string{}, SetFile: map[string]pathutil.ResolvedFilePath{}, @@ -1393,6 +1411,7 @@ func GenerateManifests(ctx context.Context, appPath, repoRoot, revision string, env := newEnv(q, revision) + // This call mutates q.ApplicationSource to apply overrides appSourceType, err := GetAppSourceType(ctx, q.ApplicationSource, appPath, repoRoot, q.AppName, q.EnabledSourceTypes, opt.cmpTarExcludedGlobs, env.Environ()) if err != nil { return nil, fmt.Errorf("error getting app source type: %w", err) From 9b308e0c968d72f485ffcd8849f182034cdd912d Mon Sep 17 00:00:00 2001 From: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> Date: Thu, 2 May 2024 09:59:55 -0400 Subject: [PATCH 08/15] handle new branches Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> --- controller/appcontroller.go | 1 + controller/commit/commit.go | 91 ++++++++++++++++++++++++++++--------- controller/state.go | 6 +-- 3 files changed, 72 insertions(+), 26 deletions(-) diff --git a/controller/appcontroller.go b/controller/appcontroller.go index 4539e978853ef..61350f2799071 100644 --- a/controller/appcontroller.go +++ b/controller/appcontroller.go @@ -1596,6 +1596,7 @@ func (ctrl *ApplicationController) processAppRefreshQueueItem() (processNext boo }} manifestsRequest := commit.ManifestsRequest{ RepoURL: hydrateToSource.RepoURL, + SyncBranch: app.Spec.SourceHydrator.SyncSource.TargetRevision, TargetBranch: hydrateToSource.TargetRevision, DrySHA: revision, CommitAuthorName: "Michael Crenshaw", diff --git a/controller/commit/commit.go b/controller/commit/commit.go index d36018ee0fb2b..de0efbad910c1 100644 --- a/controller/commit/commit.go +++ b/controller/commit/commit.go @@ -25,6 +25,7 @@ type Service interface { type ManifestsRequest struct { RepoURL string + SyncBranch string TargetBranch string DrySHA string CommitAuthorName string @@ -77,15 +78,79 @@ func (s *service) Commit(r ManifestsRequest) (ManifestsResponse, error) { return ManifestsResponse{}, fmt.Errorf("failed to clone repo: %w", err) } + // Set author name + authorCmd := exec.Command("git", "config", "user.name", r.CommitAuthorName) + authorCmd.Dir = dirPath + out, err := authorCmd.CombinedOutput() + if err != nil { + log.WithError(err).WithField("output", string(out)).Error("failed to set author name") + return ManifestsResponse{}, fmt.Errorf("failed to set author name: %w", err) + } + + // Set author email + emailCmd := exec.Command("git", "config", "user.email", r.CommitAuthorEmail) + emailCmd.Dir = dirPath + out, err = emailCmd.CombinedOutput() + if err != nil { + log.WithError(err).WithField("output", string(out)).Error("failed to set author email") + return ManifestsResponse{}, fmt.Errorf("failed to set author email: %w", err) + } + + // Checkout the sync branch + checkoutCmd := exec.Command("git", "checkout", r.SyncBranch) + checkoutCmd.Dir = dirPath + out, err = checkoutCmd.CombinedOutput() + if err != nil { + // If the sync branch doesn't exist, create it as an orphan branch. + if strings.Contains(string(out), "did not match any file(s) known to git") { + checkoutCmd = exec.Command("git", "switch", "--orphan", r.SyncBranch) + checkoutCmd.Dir = dirPath + out, err = checkoutCmd.CombinedOutput() + if err != nil { + log.WithError(err).WithField("output", string(out)).Error("failed to create orphan branch") + return ManifestsResponse{}, fmt.Errorf("failed to create orphan branch: %w", err) + } + } else { + log.WithError(err).WithField("output", string(out)).Error("failed to checkout sync branch") + return ManifestsResponse{}, fmt.Errorf("failed to checkout sync branch: %w", err) + } + + // Make an empty initial commit. + commitCmd := exec.Command("git", "commit", "--allow-empty", "-m", "Initial commit") + commitCmd.Dir = dirPath + out, err = commitCmd.CombinedOutput() + if err != nil { + log.WithError(err).WithField("output", string(out)).Error("failed to commit initial commit") + return ManifestsResponse{}, fmt.Errorf("failed to commit initial commit: %w", err) + } + + // Push the commit. + pushCmd := exec.Command("git", "push", "origin", r.SyncBranch) + pushCmd.Dir = dirPath + out, err = pushCmd.CombinedOutput() + if err != nil { + log.WithError(err).WithField("output", string(out)).Error("failed to push sync branch") + return ManifestsResponse{}, fmt.Errorf("failed to push sync branch: %w", err) + } + } + // Checkout the target branch - checkoutCmd := exec.Command("git", "checkout", r.TargetBranch) + checkoutCmd = exec.Command("git", "checkout", r.TargetBranch) checkoutCmd.Dir = dirPath - out, err := checkoutCmd.CombinedOutput() + out, err = checkoutCmd.CombinedOutput() if err != nil { if strings.Contains(string(out), "did not match any file(s) known to git") { - // If the branch does not exist, create any empty branch + // If the branch does not exist, create any empty branch based on the sync branch + // First, checkout the sync branch. + checkoutCmd = exec.Command("git", "checkout", r.SyncBranch) + checkoutCmd.Dir = dirPath + out, err = checkoutCmd.CombinedOutput() + if err != nil { + log.WithError(err).WithField("output", string(out)).Error("failed to checkout sync branch") + return ManifestsResponse{}, fmt.Errorf("failed to checkout sync branch: %w", err) + } - checkoutCmd = exec.Command("git", "switch", "--orphan", r.TargetBranch) + checkoutCmd = exec.Command("git", "checkout", "-b", r.TargetBranch) checkoutCmd.Dir = dirPath out, err = checkoutCmd.CombinedOutput() if err != nil { @@ -186,24 +251,6 @@ func (s *service) Commit(r ManifestsRequest) (ManifestsResponse, error) { return ManifestsResponse{}, fmt.Errorf("failed to add files: %w", err) } - // Set author name - authorCmd := exec.Command("git", "config", "user.name", r.CommitAuthorName) - authorCmd.Dir = dirPath - out, err = authorCmd.CombinedOutput() - if err != nil { - log.WithError(err).WithField("output", string(out)).Error("failed to set author name") - return ManifestsResponse{}, fmt.Errorf("failed to set author name: %w", err) - } - - // Set author email - emailCmd := exec.Command("git", "config", "user.email", r.CommitAuthorEmail) - emailCmd.Dir = dirPath - out, err = emailCmd.CombinedOutput() - if err != nil { - log.WithError(err).WithField("output", string(out)).Error("failed to set author email") - return ManifestsResponse{}, fmt.Errorf("failed to set author email: %w", err) - } - commitCmd := exec.Command("git", "commit", "-m", r.CommitMessage) commitCmd.Dir = dirPath out, err = commitCmd.CombinedOutput() diff --git a/controller/state.go b/controller/state.go index 9dbf10b446519..bc7c9ef1f85c3 100644 --- a/controller/state.go +++ b/controller/state.go @@ -205,11 +205,9 @@ func (m *appStateManager) GetRepoObjs(app *v1alpha1.Application, sources []v1alp } } - appName := app.InstanceName(m.namespace) appNamespace := app.Spec.Destination.Namespace apiVersions := argo.APIResourcesToStrings(apiResources, true) if !sendRuntimeState { - appName = "" appNamespace = "" apiVersions = nil serverVersion = "" @@ -224,7 +222,7 @@ func (m *appStateManager) GetRepoObjs(app *v1alpha1.Application, sources []v1alp SyncedRevision: syncedRevision, Paths: path.GetAppRefreshPaths(app), AppLabelKey: appLabelKey, - AppName: appName, + AppName: app.InstanceName(m.namespace), Namespace: appNamespace, ApplicationSource: &source, KubeVersion: serverVersion, @@ -247,7 +245,7 @@ func (m *appStateManager) GetRepoObjs(app *v1alpha1.Application, sources []v1alp NoCache: noCache, NoRevisionCache: noRevisionCache, AppLabelKey: appLabelKey, - AppName: appName, + AppName: app.InstanceName(m.namespace), Namespace: appNamespace, ApplicationSource: &source, KustomizeOptions: kustomizeOptions, From 9a901fe0483f18ab8b2ea715ceba84cb983b166b Mon Sep 17 00:00:00 2001 From: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> Date: Mon, 6 May 2024 14:05:06 -0400 Subject: [PATCH 09/15] show hydration progress Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> --- assets/swagger.json | 22 + controller/appcontroller.go | 126 +- controller/commit/commit.go | 23 +- manifests/core-install.yaml | 25 + manifests/crds/application-crd.yaml | 25 + manifests/ha/install.yaml | 25 + manifests/install.yaml | 25 + pkg/apis/application/v1alpha1/generated.pb.go | 1940 ++++++++++------- pkg/apis/application/v1alpha1/generated.proto | 17 + .../application/v1alpha1/openapi_generated.go | 62 +- pkg/apis/application/v1alpha1/types.go | 21 + .../v1alpha1/zz_generated.deepcopy.go | 28 +- .../v1alpha1/fake/fake_application.go | 5 +- .../v1alpha1/fake/fake_applicationset.go | 5 +- .../v1alpha1/fake/fake_appproject.go | 5 +- .../informers/externalversions/factory.go | 14 +- .../application-status-panel.tsx | 23 +- ui/src/app/applications/components/utils.tsx | 23 + ui/src/app/shared/models.ts | 22 + 19 files changed, 1573 insertions(+), 863 deletions(-) diff --git a/assets/swagger.json b/assets/swagger.json index 20e2399816296..2677ebe39f97b 100644 --- a/assets/swagger.json +++ b/assets/swagger.json @@ -7296,6 +7296,25 @@ } } }, + "v1alpha1HydrateOperation": { + "type": "object", + "properties": { + "finishedAt": { + "$ref": "#/definitions/v1Time" + }, + "message": { + "type": "string", + "title": "Message contains a message describing the current status of the hydrate operation" + }, + "startedAt": { + "$ref": "#/definitions/v1Time" + }, + "status": { + "type": "string", + "title": "Status indicates the status of the hydrate operation" + } + } + }, "v1alpha1HydrateTo": { "description": "HydrateTo specifies a location to which hydrated manifests should be pushed as a \"staging area\" before being moved to\nthe SyncSource. The RepoURL and Path are assumed based on the associated SyncSource config in the SourceHydrator.", "type": "object", @@ -8936,6 +8955,9 @@ "drySource": { "$ref": "#/definitions/v1alpha1DrySource" }, + "hydrateOperation": { + "$ref": "#/definitions/v1alpha1HydrateOperation" + }, "revision": { "type": "string", "title": "Revision holds the resolved revision (sha) of the dry source as of the most recent reconciliation" diff --git a/controller/appcontroller.go b/controller/appcontroller.go index 61350f2799071..c2478b839fce9 100644 --- a/controller/appcontroller.go +++ b/controller/appcontroller.go @@ -111,6 +111,7 @@ type ApplicationController struct { appComparisonTypeRefreshQueue workqueue.RateLimitingInterface appOperationQueue workqueue.RateLimitingInterface projectRefreshQueue workqueue.RateLimitingInterface + hydrationQueue workqueue.RateLimitingInterface appInformer cache.SharedIndexInformer appLister applisters.ApplicationLister projInformer cache.SharedIndexInformer @@ -178,6 +179,7 @@ func NewApplicationController( appOperationQueue: workqueue.NewNamedRateLimitingQueue(ratelimiter.NewCustomAppControllerRateLimiter(rateLimiterConfig), "app_operation_processing_queue"), projectRefreshQueue: workqueue.NewNamedRateLimitingQueue(ratelimiter.NewCustomAppControllerRateLimiter(rateLimiterConfig), "project_reconciliation_queue"), appComparisonTypeRefreshQueue: workqueue.NewRateLimitingQueue(ratelimiter.NewCustomAppControllerRateLimiter(rateLimiterConfig)), + hydrationQueue: workqueue.NewRateLimitingQueue(ratelimiter.NewCustomAppControllerRateLimiter(rateLimiterConfig)), db: db, statusRefreshTimeout: appResyncPeriod, statusHardRefreshTimeout: appHardResyncPeriod, @@ -1558,61 +1560,42 @@ func (ctrl *ApplicationController) processAppRefreshQueueItem() (processNext boo revision, err := ctrl.appStateManager.ResolveDryRevision(app) if err != nil { logCtx.Errorf("Failed to check whether dry source has changed, skipping: %v", err) + return + } + if revision == "" { + logCtx.Errorf("Dry source has not been resolved, skipping") + return } if app.Status.SourceHydrator.Revision != revision { app.Status.SourceHydrator.Revision = revision - ctrl.persistAppStatus(origApp, &app.Status) - - drySource := appv1.ApplicationSource{ - RepoURL: app.Spec.SourceHydrator.DrySource.RepoURL, - Path: app.Spec.SourceHydrator.DrySource.Path, - TargetRevision: app.Spec.SourceHydrator.DrySource.TargetRevision, - } - drySources := []appv1.ApplicationSource{drySource} - revisions := []string{app.Spec.SourceHydrator.DrySource.TargetRevision} - - appLabelKey, err := ctrl.settingsMgr.GetAppInstanceLabelKey() - if err != nil { - logCtx.Errorf("Failed to get app instance label key: %s", err) - return + app.Status.SourceHydrator.HydrateOperation = &appv1.HydrateOperation{ + StartedAt: metav1.Now(), + FinishedAt: nil, + Status: appv1.HydrateOperationPhaseRunning, } + ctrl.persistAppStatus(origApp, &app.Status) + origApp.Status.SourceHydrator = app.Status.SourceHydrator - // TODO: enable signature verification - objs, resp, err := ctrl.appStateManager.GetRepoObjs(app, drySources, appLabelKey, revisions, refreshType == appv1.RefreshTypeHard, comparisonLevel == CompareWithLatestForceResolve, false, project, false) + err = ctrl.hydrate(app, refreshType, comparisonLevel, project, revision) if err != nil { - logCtx.Errorf("Failed to get repo objects: %v", err) + app.Status.SourceHydrator.HydrateOperation.Status = appv1.HydrateOperationPhaseFailed + failedAt := metav1.Now() + app.Status.SourceHydrator.HydrateOperation.FinishedAt = &failedAt + app.Status.SourceHydrator.HydrateOperation.Message = err.Error() + ctrl.persistAppStatus(origApp, &app.Status) + logCtx.Errorf("Failed to hydrate app: %v", err) return } - - // Set up a ManifestsRequest - manifestDetails := make([]commit.ManifestDetails, len(objs)) - for i, obj := range objs { - manifestDetails[i] = commit.ManifestDetails{Manifest: *obj} - } - hydrateToSource := app.Spec.GetHydrateToSource() - paths := []commit.PathDetails{{ - Path: hydrateToSource.Path, - Manifests: manifestDetails, - }} - manifestsRequest := commit.ManifestsRequest{ - RepoURL: hydrateToSource.RepoURL, - SyncBranch: app.Spec.SourceHydrator.SyncSource.TargetRevision, - TargetBranch: hydrateToSource.TargetRevision, - DrySHA: revision, - CommitAuthorName: "Michael Crenshaw", - CommitAuthorEmail: "350466+crenshaw-dev@users.noreply.github.com", - CommitMessage: fmt.Sprintf("[Argo CD Bot] hydrate %s", revision), - CommitTime: time.Now(), - Paths: paths, - Commands: resp[0].Commands, - } - - commitService := commit.NewService() - _, err = commitService.Commit(manifestsRequest) - if err != nil { - logCtx.Errorf("Failed to commit hydrated manifests: %v", err) - return + finishedAt := metav1.Now() + operation := &appv1.HydrateOperation{ + StartedAt: app.Status.SourceHydrator.HydrateOperation.StartedAt, + FinishedAt: &finishedAt, + Status: appv1.HydrateOperationPhaseSucceeded, + Message: "", } + app.Status.SourceHydrator.HydrateOperation = operation + ctrl.persistAppStatus(origApp, &app.Status) + origApp.Status.SourceHydrator = app.Status.SourceHydrator } } @@ -1719,6 +1702,57 @@ func (ctrl *ApplicationController) processAppRefreshQueueItem() (processNext boo return } +func (ctrl *ApplicationController) hydrate(app *appv1.Application, refreshType appv1.RefreshType, comparisonLevel CompareWith, project *appv1.AppProject, revision string) error { + drySource := appv1.ApplicationSource{ + RepoURL: app.Spec.SourceHydrator.DrySource.RepoURL, + Path: app.Spec.SourceHydrator.DrySource.Path, + TargetRevision: app.Spec.SourceHydrator.DrySource.TargetRevision, + } + drySources := []appv1.ApplicationSource{drySource} + revisions := []string{app.Spec.SourceHydrator.DrySource.TargetRevision} + + appLabelKey, err := ctrl.settingsMgr.GetAppInstanceLabelKey() + if err != nil { + return fmt.Errorf("failed to get app instance label key: %w", err) + } + + // TODO: enable signature verification + objs, resp, err := ctrl.appStateManager.GetRepoObjs(app, drySources, appLabelKey, revisions, refreshType == appv1.RefreshTypeHard, comparisonLevel == CompareWithLatestForceResolve, false, project, false) + if err != nil { + return fmt.Errorf("failed to get repo objects: %w", err) + } + + // Set up a ManifestsRequest + manifestDetails := make([]commit.ManifestDetails, len(objs)) + for i, obj := range objs { + manifestDetails[i] = commit.ManifestDetails{Manifest: *obj} + } + hydrateToSource := app.Spec.GetHydrateToSource() + paths := []commit.PathDetails{{ + Path: hydrateToSource.Path, + Manifests: manifestDetails, + }} + manifestsRequest := commit.ManifestsRequest{ + RepoURL: hydrateToSource.RepoURL, + SyncBranch: app.Spec.SourceHydrator.SyncSource.TargetRevision, + TargetBranch: hydrateToSource.TargetRevision, + DrySHA: revision, + CommitAuthorName: "Michael Crenshaw", + CommitAuthorEmail: "350466+crenshaw-dev@users.noreply.github.com", + CommitMessage: fmt.Sprintf("[Argo CD Bot] hydrate %s", revision), + CommitTime: time.Now(), + Paths: paths, + Commands: resp[0].Commands, + } + + commitService := commit.NewService() + _, err = commitService.Commit(manifestsRequest) + if err != nil { + return fmt.Errorf("failed to commit hydrated manifests: %w", err) + } + return nil +} + func resourceStatusKey(res appv1.ResourceStatus) string { return strings.Join([]string{res.Group, res.Kind, res.Namespace, res.Name}, "/") } diff --git a/controller/commit/commit.go b/controller/commit/commit.go index de0efbad910c1..b847564cf93f8 100644 --- a/controller/commit/commit.go +++ b/controller/commit/commit.go @@ -62,9 +62,8 @@ type service struct { func (s *service) Commit(r ManifestsRequest) (ManifestsResponse, error) { logCtx := log.WithFields(log.Fields{"repo": r.RepoURL, "branch": r.TargetBranch, "drySHA": r.DrySHA}) - logCtx.Info("committing") - // Create a temp dir with a UUID + logCtx.Debug("Creating temp dir") dirName, err := uuid.NewRandom() dirPath := path.Join("/tmp/_commit-service", dirName.String()) err = os.MkdirAll(dirPath, os.ModePerm) @@ -73,12 +72,14 @@ func (s *service) Commit(r ManifestsRequest) (ManifestsResponse, error) { } // Clone the repo into the temp dir using the git CLI + logCtx.Debugf("Cloning repo %s", r.RepoURL) err = exec.Command("git", "clone", r.RepoURL, dirPath).Run() if err != nil { return ManifestsResponse{}, fmt.Errorf("failed to clone repo: %w", err) } // Set author name + logCtx.Debugf("Setting author name %s", r.CommitAuthorName) authorCmd := exec.Command("git", "config", "user.name", r.CommitAuthorName) authorCmd.Dir = dirPath out, err := authorCmd.CombinedOutput() @@ -88,6 +89,7 @@ func (s *service) Commit(r ManifestsRequest) (ManifestsResponse, error) { } // Set author email + logCtx.Debugf("Setting author email %s", r.CommitAuthorEmail) emailCmd := exec.Command("git", "config", "user.email", r.CommitAuthorEmail) emailCmd.Dir = dirPath out, err = emailCmd.CombinedOutput() @@ -97,12 +99,14 @@ func (s *service) Commit(r ManifestsRequest) (ManifestsResponse, error) { } // Checkout the sync branch + logCtx.Debugf("Checking out sync branch %s", r.SyncBranch) checkoutCmd := exec.Command("git", "checkout", r.SyncBranch) checkoutCmd.Dir = dirPath out, err = checkoutCmd.CombinedOutput() if err != nil { // If the sync branch doesn't exist, create it as an orphan branch. if strings.Contains(string(out), "did not match any file(s) known to git") { + logCtx.Debug("Sync branch does not exist, creating orphan branch") checkoutCmd = exec.Command("git", "switch", "--orphan", r.SyncBranch) checkoutCmd.Dir = dirPath out, err = checkoutCmd.CombinedOutput() @@ -116,6 +120,7 @@ func (s *service) Commit(r ManifestsRequest) (ManifestsResponse, error) { } // Make an empty initial commit. + logCtx.Debug("Making initial commit") commitCmd := exec.Command("git", "commit", "--allow-empty", "-m", "Initial commit") commitCmd.Dir = dirPath out, err = commitCmd.CombinedOutput() @@ -125,6 +130,7 @@ func (s *service) Commit(r ManifestsRequest) (ManifestsResponse, error) { } // Push the commit. + logCtx.Debug("Pushing initial commit") pushCmd := exec.Command("git", "push", "origin", r.SyncBranch) pushCmd.Dir = dirPath out, err = pushCmd.CombinedOutput() @@ -135,6 +141,7 @@ func (s *service) Commit(r ManifestsRequest) (ManifestsResponse, error) { } // Checkout the target branch + logCtx.Debugf("Checking out target branch %s", r.TargetBranch) checkoutCmd = exec.Command("git", "checkout", r.TargetBranch) checkoutCmd.Dir = dirPath out, err = checkoutCmd.CombinedOutput() @@ -142,6 +149,7 @@ func (s *service) Commit(r ManifestsRequest) (ManifestsResponse, error) { if strings.Contains(string(out), "did not match any file(s) known to git") { // If the branch does not exist, create any empty branch based on the sync branch // First, checkout the sync branch. + logCtx.Debug("Checking out sync branch") checkoutCmd = exec.Command("git", "checkout", r.SyncBranch) checkoutCmd.Dir = dirPath out, err = checkoutCmd.CombinedOutput() @@ -150,6 +158,7 @@ func (s *service) Commit(r ManifestsRequest) (ManifestsResponse, error) { return ManifestsResponse{}, fmt.Errorf("failed to checkout sync branch: %w", err) } + logCtx.Debugf("Creating branch %s", r.TargetBranch) checkoutCmd = exec.Command("git", "checkout", "-b", r.TargetBranch) checkoutCmd.Dir = dirPath out, err = checkoutCmd.CombinedOutput() @@ -169,12 +178,14 @@ func (s *service) Commit(r ManifestsRequest) (ManifestsResponse, error) { if hydratePath == "." { hydratePath = "" } + logCtx.Debugf("Writing manifests to %s", hydratePath) err = os.MkdirAll(path.Join(dirPath, hydratePath), os.ModePerm) if err != nil { return ManifestsResponse{}, fmt.Errorf("failed to create path: %w", err) } // If the file exists, truncate it. + logCtx.Debugf("Emptying manifest file %s", path.Join(dirPath, hydratePath, "manifest.yaml")) if _, err := os.Stat(path.Join(dirPath, hydratePath, "manifest.yaml")); err == nil { err = os.Truncate(path.Join(dirPath, hydratePath, "manifest.yaml"), 0) if err != nil { @@ -182,6 +193,7 @@ func (s *service) Commit(r ManifestsRequest) (ManifestsResponse, error) { } } + logCtx.Debugf("Opening manifest file %s", path.Join(dirPath, hydratePath, "manifest.yaml")) file, err := os.OpenFile(path.Join(dirPath, hydratePath, "manifest.yaml"), os.O_APPEND|os.O_CREATE|os.O_WRONLY, os.ModePerm) if err != nil { return ManifestsResponse{}, fmt.Errorf("failed to open manifest file: %w", err) @@ -192,6 +204,7 @@ func (s *service) Commit(r ManifestsRequest) (ManifestsResponse, error) { log.WithError(err).Error("failed to close file") } }() + logCtx.Debugf("Writing manifests to %s", path.Join(dirPath, hydratePath, "manifest.yaml")) for _, m := range p.Manifests { // Marshal the manifests mYaml, err := yaml.Marshal(m.Manifest.Object) @@ -208,6 +221,7 @@ func (s *service) Commit(r ManifestsRequest) (ManifestsResponse, error) { } // Write hydrator.metadata containing information about the hydration process. + logCtx.Debug("Writing hydrator metadata") hydratorMetadata := hydratorMetadataFile{ Commands: r.Commands, DrySHA: r.DrySHA, @@ -223,6 +237,7 @@ func (s *service) Commit(r ManifestsRequest) (ManifestsResponse, error) { } // Write README + logCtx.Debugf("Writing README") readmeTemplate := template.New("readme") readmeTemplate, err = readmeTemplate.Parse(manifestHydrationReadmeTemplate) if err != nil { @@ -243,6 +258,7 @@ func (s *service) Commit(r ManifestsRequest) (ManifestsResponse, error) { } // Commit the changes + logCtx.Debugf("Committing changes") addCmd := exec.Command("git", "add", ".") addCmd.Dir = dirPath out, err = addCmd.CombinedOutput() @@ -255,7 +271,7 @@ func (s *service) Commit(r ManifestsRequest) (ManifestsResponse, error) { commitCmd.Dir = dirPath out, err = commitCmd.CombinedOutput() if err != nil { - if strings.Contains(err.Error(), "nothing to commit, working tree clean") { + if strings.Contains(string(out), "nothing to commit, working tree clean") { logCtx.Info("no changes to commit") return ManifestsResponse{}, nil } @@ -263,6 +279,7 @@ func (s *service) Commit(r ManifestsRequest) (ManifestsResponse, error) { return ManifestsResponse{}, fmt.Errorf("failed to commit: %w", err) } + logCtx.Debugf("Pushing changes") pushCmd := exec.Command("git", "push", "origin", r.TargetBranch) pushCmd.Dir = dirPath out, err = pushCmd.CombinedOutput() diff --git a/manifests/core-install.yaml b/manifests/core-install.yaml index fd4de9aa987bb..77e932ed38197 100644 --- a/manifests/core-install.yaml +++ b/manifests/core-install.yaml @@ -4366,6 +4366,31 @@ spec: - repoURL - targetRevision type: object + hydrateOperation: + description: HydrateOperation holds the status of the hydrate + operation + properties: + finishedAt: + description: FinishedAt indicates when the hydrate operation + finished + format: date-time + type: string + message: + description: Message contains a message describing the current + status of the hydrate operation + type: string + startedAt: + description: StartedAt indicates when the hydrate operation + started + format: date-time + type: string + status: + description: Status indicates the status of the hydrate operation + type: string + required: + - message + - status + type: object revision: description: Revision holds the resolved revision (sha) of the dry source as of the most recent reconciliation diff --git a/manifests/crds/application-crd.yaml b/manifests/crds/application-crd.yaml index c276a5ad14760..c76adf2ccb305 100644 --- a/manifests/crds/application-crd.yaml +++ b/manifests/crds/application-crd.yaml @@ -4365,6 +4365,31 @@ spec: - repoURL - targetRevision type: object + hydrateOperation: + description: HydrateOperation holds the status of the hydrate + operation + properties: + finishedAt: + description: FinishedAt indicates when the hydrate operation + finished + format: date-time + type: string + message: + description: Message contains a message describing the current + status of the hydrate operation + type: string + startedAt: + description: StartedAt indicates when the hydrate operation + started + format: date-time + type: string + status: + description: Status indicates the status of the hydrate operation + type: string + required: + - message + - status + type: object revision: description: Revision holds the resolved revision (sha) of the dry source as of the most recent reconciliation diff --git a/manifests/ha/install.yaml b/manifests/ha/install.yaml index 2b8ba0544da64..969ce91c36962 100644 --- a/manifests/ha/install.yaml +++ b/manifests/ha/install.yaml @@ -4366,6 +4366,31 @@ spec: - repoURL - targetRevision type: object + hydrateOperation: + description: HydrateOperation holds the status of the hydrate + operation + properties: + finishedAt: + description: FinishedAt indicates when the hydrate operation + finished + format: date-time + type: string + message: + description: Message contains a message describing the current + status of the hydrate operation + type: string + startedAt: + description: StartedAt indicates when the hydrate operation + started + format: date-time + type: string + status: + description: Status indicates the status of the hydrate operation + type: string + required: + - message + - status + type: object revision: description: Revision holds the resolved revision (sha) of the dry source as of the most recent reconciliation diff --git a/manifests/install.yaml b/manifests/install.yaml index dc8a86e7558e8..352814e1c2175 100644 --- a/manifests/install.yaml +++ b/manifests/install.yaml @@ -4366,6 +4366,31 @@ spec: - repoURL - targetRevision type: object + hydrateOperation: + description: HydrateOperation holds the status of the hydrate + operation + properties: + finishedAt: + description: FinishedAt indicates when the hydrate operation + finished + format: date-time + type: string + message: + description: Message contains a message describing the current + status of the hydrate operation + type: string + startedAt: + description: StartedAt indicates when the hydrate operation + started + format: date-time + type: string + status: + description: Status indicates the status of the hydrate operation + type: string + required: + - message + - status + type: object revision: description: Revision holds the resolved revision (sha) of the dry source as of the most recent reconciliation diff --git a/pkg/apis/application/v1alpha1/generated.pb.go b/pkg/apis/application/v1alpha1/generated.pb.go index 98a09f333f49f..79ed68a8963d1 100644 --- a/pkg/apis/application/v1alpha1/generated.pb.go +++ b/pkg/apis/application/v1alpha1/generated.pb.go @@ -2001,10 +2001,38 @@ func (m *HostResourceInfo) XXX_DiscardUnknown() { var xxx_messageInfo_HostResourceInfo proto.InternalMessageInfo +func (m *HydrateOperation) Reset() { *m = HydrateOperation{} } +func (*HydrateOperation) ProtoMessage() {} +func (*HydrateOperation) Descriptor() ([]byte, []int) { + return fileDescriptor_030104ce3b95bcac, []int{70} +} +func (m *HydrateOperation) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *HydrateOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *HydrateOperation) XXX_Merge(src proto.Message) { + xxx_messageInfo_HydrateOperation.Merge(m, src) +} +func (m *HydrateOperation) XXX_Size() int { + return m.Size() +} +func (m *HydrateOperation) XXX_DiscardUnknown() { + xxx_messageInfo_HydrateOperation.DiscardUnknown(m) +} + +var xxx_messageInfo_HydrateOperation proto.InternalMessageInfo + func (m *HydrateTo) Reset() { *m = HydrateTo{} } func (*HydrateTo) ProtoMessage() {} func (*HydrateTo) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{70} + return fileDescriptor_030104ce3b95bcac, []int{71} } func (m *HydrateTo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2032,7 +2060,7 @@ var xxx_messageInfo_HydrateTo proto.InternalMessageInfo func (m *Info) Reset() { *m = Info{} } func (*Info) ProtoMessage() {} func (*Info) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{71} + return fileDescriptor_030104ce3b95bcac, []int{72} } func (m *Info) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2060,7 +2088,7 @@ var xxx_messageInfo_Info proto.InternalMessageInfo func (m *InfoItem) Reset() { *m = InfoItem{} } func (*InfoItem) ProtoMessage() {} func (*InfoItem) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{72} + return fileDescriptor_030104ce3b95bcac, []int{73} } func (m *InfoItem) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2088,7 +2116,7 @@ var xxx_messageInfo_InfoItem proto.InternalMessageInfo func (m *JWTToken) Reset() { *m = JWTToken{} } func (*JWTToken) ProtoMessage() {} func (*JWTToken) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{73} + return fileDescriptor_030104ce3b95bcac, []int{74} } func (m *JWTToken) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2116,7 +2144,7 @@ var xxx_messageInfo_JWTToken proto.InternalMessageInfo func (m *JWTTokens) Reset() { *m = JWTTokens{} } func (*JWTTokens) ProtoMessage() {} func (*JWTTokens) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{74} + return fileDescriptor_030104ce3b95bcac, []int{75} } func (m *JWTTokens) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2144,7 +2172,7 @@ var xxx_messageInfo_JWTTokens proto.InternalMessageInfo func (m *JsonnetVar) Reset() { *m = JsonnetVar{} } func (*JsonnetVar) ProtoMessage() {} func (*JsonnetVar) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{75} + return fileDescriptor_030104ce3b95bcac, []int{76} } func (m *JsonnetVar) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2172,7 +2200,7 @@ var xxx_messageInfo_JsonnetVar proto.InternalMessageInfo func (m *KnownTypeField) Reset() { *m = KnownTypeField{} } func (*KnownTypeField) ProtoMessage() {} func (*KnownTypeField) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{76} + return fileDescriptor_030104ce3b95bcac, []int{77} } func (m *KnownTypeField) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2200,7 +2228,7 @@ var xxx_messageInfo_KnownTypeField proto.InternalMessageInfo func (m *KustomizeGvk) Reset() { *m = KustomizeGvk{} } func (*KustomizeGvk) ProtoMessage() {} func (*KustomizeGvk) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{77} + return fileDescriptor_030104ce3b95bcac, []int{78} } func (m *KustomizeGvk) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2228,7 +2256,7 @@ var xxx_messageInfo_KustomizeGvk proto.InternalMessageInfo func (m *KustomizeOptions) Reset() { *m = KustomizeOptions{} } func (*KustomizeOptions) ProtoMessage() {} func (*KustomizeOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{78} + return fileDescriptor_030104ce3b95bcac, []int{79} } func (m *KustomizeOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2256,7 +2284,7 @@ var xxx_messageInfo_KustomizeOptions proto.InternalMessageInfo func (m *KustomizePatch) Reset() { *m = KustomizePatch{} } func (*KustomizePatch) ProtoMessage() {} func (*KustomizePatch) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{79} + return fileDescriptor_030104ce3b95bcac, []int{80} } func (m *KustomizePatch) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2284,7 +2312,7 @@ var xxx_messageInfo_KustomizePatch proto.InternalMessageInfo func (m *KustomizeReplica) Reset() { *m = KustomizeReplica{} } func (*KustomizeReplica) ProtoMessage() {} func (*KustomizeReplica) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{80} + return fileDescriptor_030104ce3b95bcac, []int{81} } func (m *KustomizeReplica) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2312,7 +2340,7 @@ var xxx_messageInfo_KustomizeReplica proto.InternalMessageInfo func (m *KustomizeResId) Reset() { *m = KustomizeResId{} } func (*KustomizeResId) ProtoMessage() {} func (*KustomizeResId) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{81} + return fileDescriptor_030104ce3b95bcac, []int{82} } func (m *KustomizeResId) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2340,7 +2368,7 @@ var xxx_messageInfo_KustomizeResId proto.InternalMessageInfo func (m *KustomizeSelector) Reset() { *m = KustomizeSelector{} } func (*KustomizeSelector) ProtoMessage() {} func (*KustomizeSelector) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{82} + return fileDescriptor_030104ce3b95bcac, []int{83} } func (m *KustomizeSelector) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2368,7 +2396,7 @@ var xxx_messageInfo_KustomizeSelector proto.InternalMessageInfo func (m *ListGenerator) Reset() { *m = ListGenerator{} } func (*ListGenerator) ProtoMessage() {} func (*ListGenerator) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{83} + return fileDescriptor_030104ce3b95bcac, []int{84} } func (m *ListGenerator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2396,7 +2424,7 @@ var xxx_messageInfo_ListGenerator proto.InternalMessageInfo func (m *ManagedNamespaceMetadata) Reset() { *m = ManagedNamespaceMetadata{} } func (*ManagedNamespaceMetadata) ProtoMessage() {} func (*ManagedNamespaceMetadata) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{84} + return fileDescriptor_030104ce3b95bcac, []int{85} } func (m *ManagedNamespaceMetadata) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2424,7 +2452,7 @@ var xxx_messageInfo_ManagedNamespaceMetadata proto.InternalMessageInfo func (m *MatrixGenerator) Reset() { *m = MatrixGenerator{} } func (*MatrixGenerator) ProtoMessage() {} func (*MatrixGenerator) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{85} + return fileDescriptor_030104ce3b95bcac, []int{86} } func (m *MatrixGenerator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2452,7 +2480,7 @@ var xxx_messageInfo_MatrixGenerator proto.InternalMessageInfo func (m *MergeGenerator) Reset() { *m = MergeGenerator{} } func (*MergeGenerator) ProtoMessage() {} func (*MergeGenerator) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{86} + return fileDescriptor_030104ce3b95bcac, []int{87} } func (m *MergeGenerator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2480,7 +2508,7 @@ var xxx_messageInfo_MergeGenerator proto.InternalMessageInfo func (m *NestedMatrixGenerator) Reset() { *m = NestedMatrixGenerator{} } func (*NestedMatrixGenerator) ProtoMessage() {} func (*NestedMatrixGenerator) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{87} + return fileDescriptor_030104ce3b95bcac, []int{88} } func (m *NestedMatrixGenerator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2508,7 +2536,7 @@ var xxx_messageInfo_NestedMatrixGenerator proto.InternalMessageInfo func (m *NestedMergeGenerator) Reset() { *m = NestedMergeGenerator{} } func (*NestedMergeGenerator) ProtoMessage() {} func (*NestedMergeGenerator) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{88} + return fileDescriptor_030104ce3b95bcac, []int{89} } func (m *NestedMergeGenerator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2536,7 +2564,7 @@ var xxx_messageInfo_NestedMergeGenerator proto.InternalMessageInfo func (m *Operation) Reset() { *m = Operation{} } func (*Operation) ProtoMessage() {} func (*Operation) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{89} + return fileDescriptor_030104ce3b95bcac, []int{90} } func (m *Operation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2564,7 +2592,7 @@ var xxx_messageInfo_Operation proto.InternalMessageInfo func (m *OperationInitiator) Reset() { *m = OperationInitiator{} } func (*OperationInitiator) ProtoMessage() {} func (*OperationInitiator) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{90} + return fileDescriptor_030104ce3b95bcac, []int{91} } func (m *OperationInitiator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2592,7 +2620,7 @@ var xxx_messageInfo_OperationInitiator proto.InternalMessageInfo func (m *OperationState) Reset() { *m = OperationState{} } func (*OperationState) ProtoMessage() {} func (*OperationState) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{91} + return fileDescriptor_030104ce3b95bcac, []int{92} } func (m *OperationState) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2620,7 +2648,7 @@ var xxx_messageInfo_OperationState proto.InternalMessageInfo func (m *OptionalArray) Reset() { *m = OptionalArray{} } func (*OptionalArray) ProtoMessage() {} func (*OptionalArray) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{92} + return fileDescriptor_030104ce3b95bcac, []int{93} } func (m *OptionalArray) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2648,7 +2676,7 @@ var xxx_messageInfo_OptionalArray proto.InternalMessageInfo func (m *OptionalMap) Reset() { *m = OptionalMap{} } func (*OptionalMap) ProtoMessage() {} func (*OptionalMap) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{93} + return fileDescriptor_030104ce3b95bcac, []int{94} } func (m *OptionalMap) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2676,7 +2704,7 @@ var xxx_messageInfo_OptionalMap proto.InternalMessageInfo func (m *OrphanedResourceKey) Reset() { *m = OrphanedResourceKey{} } func (*OrphanedResourceKey) ProtoMessage() {} func (*OrphanedResourceKey) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{94} + return fileDescriptor_030104ce3b95bcac, []int{95} } func (m *OrphanedResourceKey) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2704,7 +2732,7 @@ var xxx_messageInfo_OrphanedResourceKey proto.InternalMessageInfo func (m *OrphanedResourcesMonitorSettings) Reset() { *m = OrphanedResourcesMonitorSettings{} } func (*OrphanedResourcesMonitorSettings) ProtoMessage() {} func (*OrphanedResourcesMonitorSettings) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{95} + return fileDescriptor_030104ce3b95bcac, []int{96} } func (m *OrphanedResourcesMonitorSettings) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2732,7 +2760,7 @@ var xxx_messageInfo_OrphanedResourcesMonitorSettings proto.InternalMessageInfo func (m *OverrideIgnoreDiff) Reset() { *m = OverrideIgnoreDiff{} } func (*OverrideIgnoreDiff) ProtoMessage() {} func (*OverrideIgnoreDiff) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{96} + return fileDescriptor_030104ce3b95bcac, []int{97} } func (m *OverrideIgnoreDiff) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2760,7 +2788,7 @@ var xxx_messageInfo_OverrideIgnoreDiff proto.InternalMessageInfo func (m *PluginConfigMapRef) Reset() { *m = PluginConfigMapRef{} } func (*PluginConfigMapRef) ProtoMessage() {} func (*PluginConfigMapRef) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{97} + return fileDescriptor_030104ce3b95bcac, []int{98} } func (m *PluginConfigMapRef) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2788,7 +2816,7 @@ var xxx_messageInfo_PluginConfigMapRef proto.InternalMessageInfo func (m *PluginGenerator) Reset() { *m = PluginGenerator{} } func (*PluginGenerator) ProtoMessage() {} func (*PluginGenerator) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{98} + return fileDescriptor_030104ce3b95bcac, []int{99} } func (m *PluginGenerator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2816,7 +2844,7 @@ var xxx_messageInfo_PluginGenerator proto.InternalMessageInfo func (m *PluginInput) Reset() { *m = PluginInput{} } func (*PluginInput) ProtoMessage() {} func (*PluginInput) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{99} + return fileDescriptor_030104ce3b95bcac, []int{100} } func (m *PluginInput) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2844,7 +2872,7 @@ var xxx_messageInfo_PluginInput proto.InternalMessageInfo func (m *ProjectRole) Reset() { *m = ProjectRole{} } func (*ProjectRole) ProtoMessage() {} func (*ProjectRole) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{100} + return fileDescriptor_030104ce3b95bcac, []int{101} } func (m *ProjectRole) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2872,7 +2900,7 @@ var xxx_messageInfo_ProjectRole proto.InternalMessageInfo func (m *PullRequestGenerator) Reset() { *m = PullRequestGenerator{} } func (*PullRequestGenerator) ProtoMessage() {} func (*PullRequestGenerator) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{101} + return fileDescriptor_030104ce3b95bcac, []int{102} } func (m *PullRequestGenerator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2900,7 +2928,7 @@ var xxx_messageInfo_PullRequestGenerator proto.InternalMessageInfo func (m *PullRequestGeneratorAzureDevOps) Reset() { *m = PullRequestGeneratorAzureDevOps{} } func (*PullRequestGeneratorAzureDevOps) ProtoMessage() {} func (*PullRequestGeneratorAzureDevOps) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{102} + return fileDescriptor_030104ce3b95bcac, []int{103} } func (m *PullRequestGeneratorAzureDevOps) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2928,7 +2956,7 @@ var xxx_messageInfo_PullRequestGeneratorAzureDevOps proto.InternalMessageInfo func (m *PullRequestGeneratorBitbucket) Reset() { *m = PullRequestGeneratorBitbucket{} } func (*PullRequestGeneratorBitbucket) ProtoMessage() {} func (*PullRequestGeneratorBitbucket) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{103} + return fileDescriptor_030104ce3b95bcac, []int{104} } func (m *PullRequestGeneratorBitbucket) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2956,7 +2984,7 @@ var xxx_messageInfo_PullRequestGeneratorBitbucket proto.InternalMessageInfo func (m *PullRequestGeneratorBitbucketServer) Reset() { *m = PullRequestGeneratorBitbucketServer{} } func (*PullRequestGeneratorBitbucketServer) ProtoMessage() {} func (*PullRequestGeneratorBitbucketServer) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{104} + return fileDescriptor_030104ce3b95bcac, []int{105} } func (m *PullRequestGeneratorBitbucketServer) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2984,7 +3012,7 @@ var xxx_messageInfo_PullRequestGeneratorBitbucketServer proto.InternalMessageInf func (m *PullRequestGeneratorFilter) Reset() { *m = PullRequestGeneratorFilter{} } func (*PullRequestGeneratorFilter) ProtoMessage() {} func (*PullRequestGeneratorFilter) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{105} + return fileDescriptor_030104ce3b95bcac, []int{106} } func (m *PullRequestGeneratorFilter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3012,7 +3040,7 @@ var xxx_messageInfo_PullRequestGeneratorFilter proto.InternalMessageInfo func (m *PullRequestGeneratorGitLab) Reset() { *m = PullRequestGeneratorGitLab{} } func (*PullRequestGeneratorGitLab) ProtoMessage() {} func (*PullRequestGeneratorGitLab) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{106} + return fileDescriptor_030104ce3b95bcac, []int{107} } func (m *PullRequestGeneratorGitLab) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3040,7 +3068,7 @@ var xxx_messageInfo_PullRequestGeneratorGitLab proto.InternalMessageInfo func (m *PullRequestGeneratorGitea) Reset() { *m = PullRequestGeneratorGitea{} } func (*PullRequestGeneratorGitea) ProtoMessage() {} func (*PullRequestGeneratorGitea) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{107} + return fileDescriptor_030104ce3b95bcac, []int{108} } func (m *PullRequestGeneratorGitea) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3068,7 +3096,7 @@ var xxx_messageInfo_PullRequestGeneratorGitea proto.InternalMessageInfo func (m *PullRequestGeneratorGithub) Reset() { *m = PullRequestGeneratorGithub{} } func (*PullRequestGeneratorGithub) ProtoMessage() {} func (*PullRequestGeneratorGithub) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{108} + return fileDescriptor_030104ce3b95bcac, []int{109} } func (m *PullRequestGeneratorGithub) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3096,7 +3124,7 @@ var xxx_messageInfo_PullRequestGeneratorGithub proto.InternalMessageInfo func (m *RefTarget) Reset() { *m = RefTarget{} } func (*RefTarget) ProtoMessage() {} func (*RefTarget) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{109} + return fileDescriptor_030104ce3b95bcac, []int{110} } func (m *RefTarget) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3124,7 +3152,7 @@ var xxx_messageInfo_RefTarget proto.InternalMessageInfo func (m *RepoCreds) Reset() { *m = RepoCreds{} } func (*RepoCreds) ProtoMessage() {} func (*RepoCreds) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{110} + return fileDescriptor_030104ce3b95bcac, []int{111} } func (m *RepoCreds) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3152,7 +3180,7 @@ var xxx_messageInfo_RepoCreds proto.InternalMessageInfo func (m *RepoCredsList) Reset() { *m = RepoCredsList{} } func (*RepoCredsList) ProtoMessage() {} func (*RepoCredsList) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{111} + return fileDescriptor_030104ce3b95bcac, []int{112} } func (m *RepoCredsList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3180,7 +3208,7 @@ var xxx_messageInfo_RepoCredsList proto.InternalMessageInfo func (m *Repository) Reset() { *m = Repository{} } func (*Repository) ProtoMessage() {} func (*Repository) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{112} + return fileDescriptor_030104ce3b95bcac, []int{113} } func (m *Repository) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3208,7 +3236,7 @@ var xxx_messageInfo_Repository proto.InternalMessageInfo func (m *RepositoryCertificate) Reset() { *m = RepositoryCertificate{} } func (*RepositoryCertificate) ProtoMessage() {} func (*RepositoryCertificate) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{113} + return fileDescriptor_030104ce3b95bcac, []int{114} } func (m *RepositoryCertificate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3236,7 +3264,7 @@ var xxx_messageInfo_RepositoryCertificate proto.InternalMessageInfo func (m *RepositoryCertificateList) Reset() { *m = RepositoryCertificateList{} } func (*RepositoryCertificateList) ProtoMessage() {} func (*RepositoryCertificateList) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{114} + return fileDescriptor_030104ce3b95bcac, []int{115} } func (m *RepositoryCertificateList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3264,7 +3292,7 @@ var xxx_messageInfo_RepositoryCertificateList proto.InternalMessageInfo func (m *RepositoryList) Reset() { *m = RepositoryList{} } func (*RepositoryList) ProtoMessage() {} func (*RepositoryList) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{115} + return fileDescriptor_030104ce3b95bcac, []int{116} } func (m *RepositoryList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3292,7 +3320,7 @@ var xxx_messageInfo_RepositoryList proto.InternalMessageInfo func (m *ResourceAction) Reset() { *m = ResourceAction{} } func (*ResourceAction) ProtoMessage() {} func (*ResourceAction) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{116} + return fileDescriptor_030104ce3b95bcac, []int{117} } func (m *ResourceAction) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3320,7 +3348,7 @@ var xxx_messageInfo_ResourceAction proto.InternalMessageInfo func (m *ResourceActionDefinition) Reset() { *m = ResourceActionDefinition{} } func (*ResourceActionDefinition) ProtoMessage() {} func (*ResourceActionDefinition) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{117} + return fileDescriptor_030104ce3b95bcac, []int{118} } func (m *ResourceActionDefinition) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3348,7 +3376,7 @@ var xxx_messageInfo_ResourceActionDefinition proto.InternalMessageInfo func (m *ResourceActionParam) Reset() { *m = ResourceActionParam{} } func (*ResourceActionParam) ProtoMessage() {} func (*ResourceActionParam) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{118} + return fileDescriptor_030104ce3b95bcac, []int{119} } func (m *ResourceActionParam) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3376,7 +3404,7 @@ var xxx_messageInfo_ResourceActionParam proto.InternalMessageInfo func (m *ResourceActions) Reset() { *m = ResourceActions{} } func (*ResourceActions) ProtoMessage() {} func (*ResourceActions) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{119} + return fileDescriptor_030104ce3b95bcac, []int{120} } func (m *ResourceActions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3404,7 +3432,7 @@ var xxx_messageInfo_ResourceActions proto.InternalMessageInfo func (m *ResourceDiff) Reset() { *m = ResourceDiff{} } func (*ResourceDiff) ProtoMessage() {} func (*ResourceDiff) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{120} + return fileDescriptor_030104ce3b95bcac, []int{121} } func (m *ResourceDiff) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3432,7 +3460,7 @@ var xxx_messageInfo_ResourceDiff proto.InternalMessageInfo func (m *ResourceIgnoreDifferences) Reset() { *m = ResourceIgnoreDifferences{} } func (*ResourceIgnoreDifferences) ProtoMessage() {} func (*ResourceIgnoreDifferences) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{121} + return fileDescriptor_030104ce3b95bcac, []int{122} } func (m *ResourceIgnoreDifferences) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3460,7 +3488,7 @@ var xxx_messageInfo_ResourceIgnoreDifferences proto.InternalMessageInfo func (m *ResourceNetworkingInfo) Reset() { *m = ResourceNetworkingInfo{} } func (*ResourceNetworkingInfo) ProtoMessage() {} func (*ResourceNetworkingInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{122} + return fileDescriptor_030104ce3b95bcac, []int{123} } func (m *ResourceNetworkingInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3488,7 +3516,7 @@ var xxx_messageInfo_ResourceNetworkingInfo proto.InternalMessageInfo func (m *ResourceNode) Reset() { *m = ResourceNode{} } func (*ResourceNode) ProtoMessage() {} func (*ResourceNode) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{123} + return fileDescriptor_030104ce3b95bcac, []int{124} } func (m *ResourceNode) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3516,7 +3544,7 @@ var xxx_messageInfo_ResourceNode proto.InternalMessageInfo func (m *ResourceOverride) Reset() { *m = ResourceOverride{} } func (*ResourceOverride) ProtoMessage() {} func (*ResourceOverride) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{124} + return fileDescriptor_030104ce3b95bcac, []int{125} } func (m *ResourceOverride) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3544,7 +3572,7 @@ var xxx_messageInfo_ResourceOverride proto.InternalMessageInfo func (m *ResourceRef) Reset() { *m = ResourceRef{} } func (*ResourceRef) ProtoMessage() {} func (*ResourceRef) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{125} + return fileDescriptor_030104ce3b95bcac, []int{126} } func (m *ResourceRef) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3572,7 +3600,7 @@ var xxx_messageInfo_ResourceRef proto.InternalMessageInfo func (m *ResourceResult) Reset() { *m = ResourceResult{} } func (*ResourceResult) ProtoMessage() {} func (*ResourceResult) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{126} + return fileDescriptor_030104ce3b95bcac, []int{127} } func (m *ResourceResult) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3600,7 +3628,7 @@ var xxx_messageInfo_ResourceResult proto.InternalMessageInfo func (m *ResourceStatus) Reset() { *m = ResourceStatus{} } func (*ResourceStatus) ProtoMessage() {} func (*ResourceStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{127} + return fileDescriptor_030104ce3b95bcac, []int{128} } func (m *ResourceStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3628,7 +3656,7 @@ var xxx_messageInfo_ResourceStatus proto.InternalMessageInfo func (m *RetryStrategy) Reset() { *m = RetryStrategy{} } func (*RetryStrategy) ProtoMessage() {} func (*RetryStrategy) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{128} + return fileDescriptor_030104ce3b95bcac, []int{129} } func (m *RetryStrategy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3656,7 +3684,7 @@ var xxx_messageInfo_RetryStrategy proto.InternalMessageInfo func (m *RevisionHistory) Reset() { *m = RevisionHistory{} } func (*RevisionHistory) ProtoMessage() {} func (*RevisionHistory) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{129} + return fileDescriptor_030104ce3b95bcac, []int{130} } func (m *RevisionHistory) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3684,7 +3712,7 @@ var xxx_messageInfo_RevisionHistory proto.InternalMessageInfo func (m *RevisionMetadata) Reset() { *m = RevisionMetadata{} } func (*RevisionMetadata) ProtoMessage() {} func (*RevisionMetadata) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{130} + return fileDescriptor_030104ce3b95bcac, []int{131} } func (m *RevisionMetadata) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3712,7 +3740,7 @@ var xxx_messageInfo_RevisionMetadata proto.InternalMessageInfo func (m *SCMProviderGenerator) Reset() { *m = SCMProviderGenerator{} } func (*SCMProviderGenerator) ProtoMessage() {} func (*SCMProviderGenerator) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{131} + return fileDescriptor_030104ce3b95bcac, []int{132} } func (m *SCMProviderGenerator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3740,7 +3768,7 @@ var xxx_messageInfo_SCMProviderGenerator proto.InternalMessageInfo func (m *SCMProviderGeneratorAWSCodeCommit) Reset() { *m = SCMProviderGeneratorAWSCodeCommit{} } func (*SCMProviderGeneratorAWSCodeCommit) ProtoMessage() {} func (*SCMProviderGeneratorAWSCodeCommit) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{132} + return fileDescriptor_030104ce3b95bcac, []int{133} } func (m *SCMProviderGeneratorAWSCodeCommit) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3768,7 +3796,7 @@ var xxx_messageInfo_SCMProviderGeneratorAWSCodeCommit proto.InternalMessageInfo func (m *SCMProviderGeneratorAzureDevOps) Reset() { *m = SCMProviderGeneratorAzureDevOps{} } func (*SCMProviderGeneratorAzureDevOps) ProtoMessage() {} func (*SCMProviderGeneratorAzureDevOps) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{133} + return fileDescriptor_030104ce3b95bcac, []int{134} } func (m *SCMProviderGeneratorAzureDevOps) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3796,7 +3824,7 @@ var xxx_messageInfo_SCMProviderGeneratorAzureDevOps proto.InternalMessageInfo func (m *SCMProviderGeneratorBitbucket) Reset() { *m = SCMProviderGeneratorBitbucket{} } func (*SCMProviderGeneratorBitbucket) ProtoMessage() {} func (*SCMProviderGeneratorBitbucket) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{134} + return fileDescriptor_030104ce3b95bcac, []int{135} } func (m *SCMProviderGeneratorBitbucket) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3824,7 +3852,7 @@ var xxx_messageInfo_SCMProviderGeneratorBitbucket proto.InternalMessageInfo func (m *SCMProviderGeneratorBitbucketServer) Reset() { *m = SCMProviderGeneratorBitbucketServer{} } func (*SCMProviderGeneratorBitbucketServer) ProtoMessage() {} func (*SCMProviderGeneratorBitbucketServer) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{135} + return fileDescriptor_030104ce3b95bcac, []int{136} } func (m *SCMProviderGeneratorBitbucketServer) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3852,7 +3880,7 @@ var xxx_messageInfo_SCMProviderGeneratorBitbucketServer proto.InternalMessageInf func (m *SCMProviderGeneratorFilter) Reset() { *m = SCMProviderGeneratorFilter{} } func (*SCMProviderGeneratorFilter) ProtoMessage() {} func (*SCMProviderGeneratorFilter) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{136} + return fileDescriptor_030104ce3b95bcac, []int{137} } func (m *SCMProviderGeneratorFilter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3880,7 +3908,7 @@ var xxx_messageInfo_SCMProviderGeneratorFilter proto.InternalMessageInfo func (m *SCMProviderGeneratorGitea) Reset() { *m = SCMProviderGeneratorGitea{} } func (*SCMProviderGeneratorGitea) ProtoMessage() {} func (*SCMProviderGeneratorGitea) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{137} + return fileDescriptor_030104ce3b95bcac, []int{138} } func (m *SCMProviderGeneratorGitea) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3908,7 +3936,7 @@ var xxx_messageInfo_SCMProviderGeneratorGitea proto.InternalMessageInfo func (m *SCMProviderGeneratorGithub) Reset() { *m = SCMProviderGeneratorGithub{} } func (*SCMProviderGeneratorGithub) ProtoMessage() {} func (*SCMProviderGeneratorGithub) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{138} + return fileDescriptor_030104ce3b95bcac, []int{139} } func (m *SCMProviderGeneratorGithub) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3936,7 +3964,7 @@ var xxx_messageInfo_SCMProviderGeneratorGithub proto.InternalMessageInfo func (m *SCMProviderGeneratorGitlab) Reset() { *m = SCMProviderGeneratorGitlab{} } func (*SCMProviderGeneratorGitlab) ProtoMessage() {} func (*SCMProviderGeneratorGitlab) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{139} + return fileDescriptor_030104ce3b95bcac, []int{140} } func (m *SCMProviderGeneratorGitlab) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3964,7 +3992,7 @@ var xxx_messageInfo_SCMProviderGeneratorGitlab proto.InternalMessageInfo func (m *SecretRef) Reset() { *m = SecretRef{} } func (*SecretRef) ProtoMessage() {} func (*SecretRef) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{140} + return fileDescriptor_030104ce3b95bcac, []int{141} } func (m *SecretRef) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3992,7 +4020,7 @@ var xxx_messageInfo_SecretRef proto.InternalMessageInfo func (m *SignatureKey) Reset() { *m = SignatureKey{} } func (*SignatureKey) ProtoMessage() {} func (*SignatureKey) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{141} + return fileDescriptor_030104ce3b95bcac, []int{142} } func (m *SignatureKey) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4020,7 +4048,7 @@ var xxx_messageInfo_SignatureKey proto.InternalMessageInfo func (m *SourceHydrator) Reset() { *m = SourceHydrator{} } func (*SourceHydrator) ProtoMessage() {} func (*SourceHydrator) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{142} + return fileDescriptor_030104ce3b95bcac, []int{143} } func (m *SourceHydrator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4048,7 +4076,7 @@ var xxx_messageInfo_SourceHydrator proto.InternalMessageInfo func (m *SourceHydratorStatus) Reset() { *m = SourceHydratorStatus{} } func (*SourceHydratorStatus) ProtoMessage() {} func (*SourceHydratorStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{143} + return fileDescriptor_030104ce3b95bcac, []int{144} } func (m *SourceHydratorStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4076,7 +4104,7 @@ var xxx_messageInfo_SourceHydratorStatus proto.InternalMessageInfo func (m *SyncOperation) Reset() { *m = SyncOperation{} } func (*SyncOperation) ProtoMessage() {} func (*SyncOperation) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{144} + return fileDescriptor_030104ce3b95bcac, []int{145} } func (m *SyncOperation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4104,7 +4132,7 @@ var xxx_messageInfo_SyncOperation proto.InternalMessageInfo func (m *SyncOperationResource) Reset() { *m = SyncOperationResource{} } func (*SyncOperationResource) ProtoMessage() {} func (*SyncOperationResource) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{145} + return fileDescriptor_030104ce3b95bcac, []int{146} } func (m *SyncOperationResource) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4132,7 +4160,7 @@ var xxx_messageInfo_SyncOperationResource proto.InternalMessageInfo func (m *SyncOperationResult) Reset() { *m = SyncOperationResult{} } func (*SyncOperationResult) ProtoMessage() {} func (*SyncOperationResult) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{146} + return fileDescriptor_030104ce3b95bcac, []int{147} } func (m *SyncOperationResult) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4160,7 +4188,7 @@ var xxx_messageInfo_SyncOperationResult proto.InternalMessageInfo func (m *SyncPolicy) Reset() { *m = SyncPolicy{} } func (*SyncPolicy) ProtoMessage() {} func (*SyncPolicy) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{147} + return fileDescriptor_030104ce3b95bcac, []int{148} } func (m *SyncPolicy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4188,7 +4216,7 @@ var xxx_messageInfo_SyncPolicy proto.InternalMessageInfo func (m *SyncPolicyAutomated) Reset() { *m = SyncPolicyAutomated{} } func (*SyncPolicyAutomated) ProtoMessage() {} func (*SyncPolicyAutomated) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{148} + return fileDescriptor_030104ce3b95bcac, []int{149} } func (m *SyncPolicyAutomated) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4216,7 +4244,7 @@ var xxx_messageInfo_SyncPolicyAutomated proto.InternalMessageInfo func (m *SyncSource) Reset() { *m = SyncSource{} } func (*SyncSource) ProtoMessage() {} func (*SyncSource) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{149} + return fileDescriptor_030104ce3b95bcac, []int{150} } func (m *SyncSource) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4244,7 +4272,7 @@ var xxx_messageInfo_SyncSource proto.InternalMessageInfo func (m *SyncStatus) Reset() { *m = SyncStatus{} } func (*SyncStatus) ProtoMessage() {} func (*SyncStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{150} + return fileDescriptor_030104ce3b95bcac, []int{151} } func (m *SyncStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4272,7 +4300,7 @@ var xxx_messageInfo_SyncStatus proto.InternalMessageInfo func (m *SyncStrategy) Reset() { *m = SyncStrategy{} } func (*SyncStrategy) ProtoMessage() {} func (*SyncStrategy) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{151} + return fileDescriptor_030104ce3b95bcac, []int{152} } func (m *SyncStrategy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4300,7 +4328,7 @@ var xxx_messageInfo_SyncStrategy proto.InternalMessageInfo func (m *SyncStrategyApply) Reset() { *m = SyncStrategyApply{} } func (*SyncStrategyApply) ProtoMessage() {} func (*SyncStrategyApply) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{152} + return fileDescriptor_030104ce3b95bcac, []int{153} } func (m *SyncStrategyApply) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4328,7 +4356,7 @@ var xxx_messageInfo_SyncStrategyApply proto.InternalMessageInfo func (m *SyncStrategyHook) Reset() { *m = SyncStrategyHook{} } func (*SyncStrategyHook) ProtoMessage() {} func (*SyncStrategyHook) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{153} + return fileDescriptor_030104ce3b95bcac, []int{154} } func (m *SyncStrategyHook) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4356,7 +4384,7 @@ var xxx_messageInfo_SyncStrategyHook proto.InternalMessageInfo func (m *SyncWindow) Reset() { *m = SyncWindow{} } func (*SyncWindow) ProtoMessage() {} func (*SyncWindow) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{154} + return fileDescriptor_030104ce3b95bcac, []int{155} } func (m *SyncWindow) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4384,7 +4412,7 @@ var xxx_messageInfo_SyncWindow proto.InternalMessageInfo func (m *TLSClientConfig) Reset() { *m = TLSClientConfig{} } func (*TLSClientConfig) ProtoMessage() {} func (*TLSClientConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{155} + return fileDescriptor_030104ce3b95bcac, []int{156} } func (m *TLSClientConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4412,7 +4440,7 @@ var xxx_messageInfo_TLSClientConfig proto.InternalMessageInfo func (m *TagFilter) Reset() { *m = TagFilter{} } func (*TagFilter) ProtoMessage() {} func (*TagFilter) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{156} + return fileDescriptor_030104ce3b95bcac, []int{157} } func (m *TagFilter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4519,6 +4547,7 @@ func init() { proto.RegisterType((*HelmParameter)(nil), "jackfan.us.kg.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.HelmParameter") proto.RegisterType((*HostInfo)(nil), "jackfan.us.kg.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.HostInfo") proto.RegisterType((*HostResourceInfo)(nil), "jackfan.us.kg.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.HostResourceInfo") + proto.RegisterType((*HydrateOperation)(nil), "jackfan.us.kg.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.HydrateOperation") proto.RegisterType((*HydrateTo)(nil), "jackfan.us.kg.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.HydrateTo") proto.RegisterType((*Info)(nil), "jackfan.us.kg.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.Info") proto.RegisterType((*InfoItem)(nil), "jackfan.us.kg.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.InfoItem") @@ -4622,711 +4651,715 @@ func init() { } var fileDescriptor_030104ce3b95bcac = []byte{ - // 11251 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x7d, 0x70, 0x1c, 0xc9, - 0x75, 0x18, 0xae, 0xd9, 0xc5, 0x02, 0xbb, 0x0f, 0x1f, 0x24, 0x9b, 0xe4, 0x1d, 0x8e, 0xba, 0x3b, - 0xd0, 0x73, 0xf6, 0xe9, 0xf4, 0xd3, 0x1d, 0xe0, 0xa3, 0xee, 0xe4, 0xfb, 0xe9, 0x6c, 0xc9, 0xf8, - 0x20, 0x41, 0x90, 0x00, 0x81, 0x6b, 0x80, 0xa4, 0x74, 0xf2, 0xe9, 0x34, 0xd8, 0x6d, 0x2c, 0x86, - 0x98, 0x9d, 0x99, 0x9b, 0x99, 0x05, 0x81, 0xb3, 0x24, 0x4b, 0x96, 0x6c, 0x2b, 0xd1, 0x67, 0xa4, - 0x54, 0xe9, 0x9c, 0x58, 0x8a, 0x6c, 0x29, 0xa9, 0xb8, 0x12, 0x55, 0x9c, 0xe4, 0x8f, 0x38, 0x71, - 0x12, 0x97, 0xed, 0x54, 0x4a, 0x29, 0x25, 0x65, 0x97, 0xcb, 0x65, 0x39, 0x89, 0x8d, 0x48, 0x4c, - 0xa5, 0x92, 0x4a, 0x55, 0x5c, 0xe5, 0xc4, 0x7f, 0x24, 0x4c, 0x2a, 0x49, 0xf5, 0x77, 0xcf, 0xec, - 0x2c, 0xb0, 0x0b, 0x0c, 0x48, 0x4a, 0xb9, 0xff, 0x76, 0xfb, 0xbd, 0x79, 0xaf, 0xa7, 0xa7, 0xfb, - 0xbd, 0xd7, 0xaf, 0xdf, 0x7b, 0x0d, 0x8b, 0x4d, 0x37, 0xd9, 0x6c, 0xaf, 0x4f, 0xd6, 0x83, 0xd6, - 0x94, 0x13, 0x35, 0x83, 0x30, 0x0a, 0x6e, 0xb1, 0x1f, 0xcf, 0xd4, 0x1b, 0x53, 0xdb, 0x17, 0xa6, - 0xc2, 0xad, 0xe6, 0x94, 0x13, 0xba, 0xf1, 0x94, 0x13, 0x86, 0x9e, 0x5b, 0x77, 0x12, 0x37, 0xf0, - 0xa7, 0xb6, 0x9f, 0x75, 0xbc, 0x70, 0xd3, 0x79, 0x76, 0xaa, 0x49, 0x7c, 0x12, 0x39, 0x09, 0x69, - 0x4c, 0x86, 0x51, 0x90, 0x04, 0xe8, 0xc7, 0x35, 0xb5, 0x49, 0x49, 0x8d, 0xfd, 0x78, 0xb5, 0xde, - 0x98, 0xdc, 0xbe, 0x30, 0x19, 0x6e, 0x35, 0x27, 0x29, 0xb5, 0x49, 0x83, 0xda, 0xa4, 0xa4, 0x76, - 0xee, 0x19, 0xa3, 0x2f, 0xcd, 0xa0, 0x19, 0x4c, 0x31, 0xa2, 0xeb, 0xed, 0x0d, 0xf6, 0x8f, 0xfd, - 0x61, 0xbf, 0x38, 0xb3, 0x73, 0xf6, 0xd6, 0x0b, 0xf1, 0xa4, 0x1b, 0xd0, 0xee, 0x4d, 0xd5, 0x83, - 0x88, 0x4c, 0x6d, 0x77, 0x74, 0xe8, 0xdc, 0x65, 0x8d, 0x43, 0x76, 0x12, 0xe2, 0xc7, 0x6e, 0xe0, - 0xc7, 0xcf, 0xd0, 0x2e, 0x90, 0x68, 0x9b, 0x44, 0xe6, 0xeb, 0x19, 0x08, 0x79, 0x94, 0x9e, 0xd3, - 0x94, 0x5a, 0x4e, 0x7d, 0xd3, 0xf5, 0x49, 0xb4, 0xab, 0x1f, 0x6f, 0x91, 0xc4, 0xc9, 0x7b, 0x6a, - 0xaa, 0xdb, 0x53, 0x51, 0xdb, 0x4f, 0xdc, 0x16, 0xe9, 0x78, 0xe0, 0x5d, 0x07, 0x3d, 0x10, 0xd7, - 0x37, 0x49, 0xcb, 0xe9, 0x78, 0xee, 0x9d, 0xdd, 0x9e, 0x6b, 0x27, 0xae, 0x37, 0xe5, 0xfa, 0x49, - 0x9c, 0x44, 0xd9, 0x87, 0xec, 0x5f, 0xb2, 0x60, 0x74, 0xfa, 0xe6, 0xea, 0x74, 0x3b, 0xd9, 0x9c, - 0x0d, 0xfc, 0x0d, 0xb7, 0x89, 0x9e, 0x87, 0xe1, 0xba, 0xd7, 0x8e, 0x13, 0x12, 0x5d, 0x73, 0x5a, - 0x64, 0xdc, 0x3a, 0x6f, 0x3d, 0x55, 0x9b, 0x39, 0xfd, 0xad, 0xbd, 0x89, 0xb7, 0xdc, 0xd9, 0x9b, - 0x18, 0x9e, 0xd5, 0x20, 0x6c, 0xe2, 0xa1, 0xb7, 0xc3, 0x50, 0x14, 0x78, 0x64, 0x1a, 0x5f, 0x1b, - 0x2f, 0xb1, 0x47, 0x4e, 0x88, 0x47, 0x86, 0x30, 0x6f, 0xc6, 0x12, 0x4e, 0x51, 0xc3, 0x28, 0xd8, - 0x70, 0x3d, 0x32, 0x5e, 0x4e, 0xa3, 0xae, 0xf0, 0x66, 0x2c, 0xe1, 0xf6, 0x1f, 0x96, 0x00, 0xa6, - 0xc3, 0x70, 0x25, 0x0a, 0x6e, 0x91, 0x7a, 0x82, 0x3e, 0x04, 0x55, 0x3a, 0xcc, 0x0d, 0x27, 0x71, - 0x58, 0xc7, 0x86, 0x2f, 0xfc, 0xe8, 0x24, 0x7f, 0xeb, 0x49, 0xf3, 0xad, 0xf5, 0x24, 0xa3, 0xd8, - 0x93, 0xdb, 0xcf, 0x4e, 0x2e, 0xaf, 0xd3, 0xe7, 0x97, 0x48, 0xe2, 0xcc, 0x20, 0xc1, 0x0c, 0x74, - 0x1b, 0x56, 0x54, 0x91, 0x0f, 0x03, 0x71, 0x48, 0xea, 0xec, 0x1d, 0x86, 0x2f, 0x2c, 0x4e, 0x1e, - 0x65, 0x36, 0x4f, 0xea, 0x9e, 0xaf, 0x86, 0xa4, 0x3e, 0x33, 0x22, 0x38, 0x0f, 0xd0, 0x7f, 0x98, - 0xf1, 0x41, 0xdb, 0x30, 0x18, 0x27, 0x4e, 0xd2, 0x8e, 0xd9, 0x50, 0x0c, 0x5f, 0xb8, 0x56, 0x18, - 0x47, 0x46, 0x75, 0x66, 0x4c, 0xf0, 0x1c, 0xe4, 0xff, 0xb1, 0xe0, 0x66, 0xff, 0x89, 0x05, 0x63, - 0x1a, 0x79, 0xd1, 0x8d, 0x13, 0xf4, 0x53, 0x1d, 0x83, 0x3b, 0xd9, 0xdb, 0xe0, 0xd2, 0xa7, 0xd9, - 0xd0, 0x9e, 0x14, 0xcc, 0xaa, 0xb2, 0xc5, 0x18, 0xd8, 0x16, 0x54, 0xdc, 0x84, 0xb4, 0xe2, 0xf1, - 0xd2, 0xf9, 0xf2, 0x53, 0xc3, 0x17, 0x2e, 0x17, 0xf5, 0x9e, 0x33, 0xa3, 0x82, 0x69, 0x65, 0x81, - 0x92, 0xc7, 0x9c, 0x8b, 0xfd, 0xab, 0x23, 0xe6, 0xfb, 0xd1, 0x01, 0x47, 0xcf, 0xc2, 0x70, 0x1c, - 0xb4, 0xa3, 0x3a, 0xc1, 0x24, 0x0c, 0xe2, 0x71, 0xeb, 0x7c, 0x99, 0x4e, 0x3d, 0x3a, 0xa9, 0x57, - 0x75, 0x33, 0x36, 0x71, 0xd0, 0xe7, 0x2c, 0x18, 0x69, 0x90, 0x38, 0x71, 0x7d, 0xc6, 0x5f, 0x76, - 0x7e, 0xed, 0xc8, 0x9d, 0x97, 0x8d, 0x73, 0x9a, 0xf8, 0xcc, 0x19, 0xf1, 0x22, 0x23, 0x46, 0x63, - 0x8c, 0x53, 0xfc, 0xe9, 0xe2, 0x6c, 0x90, 0xb8, 0x1e, 0xb9, 0x21, 0xfd, 0x2f, 0x96, 0x8f, 0x5a, - 0x9c, 0x73, 0x1a, 0x84, 0x4d, 0x3c, 0xe4, 0x43, 0x85, 0x2e, 0xbe, 0x78, 0x7c, 0x80, 0xf5, 0x7f, - 0xe1, 0x68, 0xfd, 0x17, 0x83, 0x4a, 0xd7, 0xb5, 0x1e, 0x7d, 0xfa, 0x2f, 0xc6, 0x9c, 0x0d, 0xfa, - 0xac, 0x05, 0xe3, 0x42, 0x38, 0x60, 0xc2, 0x07, 0xf4, 0xe6, 0xa6, 0x9b, 0x10, 0xcf, 0x8d, 0x93, - 0xf1, 0x0a, 0xeb, 0xc3, 0x54, 0x6f, 0x73, 0x6b, 0x3e, 0x0a, 0xda, 0xe1, 0x55, 0xd7, 0x6f, 0xcc, - 0x9c, 0x17, 0x9c, 0xc6, 0x67, 0xbb, 0x10, 0xc6, 0x5d, 0x59, 0xa2, 0x2f, 0x59, 0x70, 0xce, 0x77, - 0x5a, 0x24, 0x0e, 0x1d, 0xfa, 0x69, 0x39, 0x78, 0xc6, 0x73, 0xea, 0x5b, 0xac, 0x47, 0x83, 0x87, - 0xeb, 0x91, 0x2d, 0x7a, 0x74, 0xee, 0x5a, 0x57, 0xd2, 0x78, 0x1f, 0xb6, 0xe8, 0xeb, 0x16, 0x9c, - 0x0a, 0xa2, 0x70, 0xd3, 0xf1, 0x49, 0x43, 0x42, 0xe3, 0xf1, 0x21, 0xb6, 0xf4, 0x3e, 0x78, 0xb4, - 0x4f, 0xb4, 0x9c, 0x25, 0xbb, 0x14, 0xf8, 0x6e, 0x12, 0x44, 0xab, 0x24, 0x49, 0x5c, 0xbf, 0x19, - 0xcf, 0x9c, 0xbd, 0xb3, 0x37, 0x71, 0xaa, 0x03, 0x0b, 0x77, 0xf6, 0x07, 0xfd, 0x34, 0x0c, 0xc7, - 0xbb, 0x7e, 0xfd, 0xa6, 0xeb, 0x37, 0x82, 0xdb, 0xf1, 0x78, 0xb5, 0x88, 0xe5, 0xbb, 0xaa, 0x08, - 0x8a, 0x05, 0xa8, 0x19, 0x60, 0x93, 0x5b, 0xfe, 0x87, 0xd3, 0x53, 0xa9, 0x56, 0xf4, 0x87, 0xd3, - 0x93, 0x69, 0x1f, 0xb6, 0xe8, 0x17, 0x2c, 0x18, 0x8d, 0xdd, 0xa6, 0xef, 0x24, 0xed, 0x88, 0x5c, - 0x25, 0xbb, 0xf1, 0x38, 0xb0, 0x8e, 0x5c, 0x39, 0xe2, 0xa8, 0x18, 0x24, 0x67, 0xce, 0x8a, 0x3e, - 0x8e, 0x9a, 0xad, 0x31, 0x4e, 0xf3, 0xcd, 0x5b, 0x68, 0x7a, 0x5a, 0x0f, 0x17, 0xbb, 0xd0, 0xf4, - 0xa4, 0xee, 0xca, 0x12, 0xfd, 0x24, 0x9c, 0xe4, 0x4d, 0x6a, 0x64, 0xe3, 0xf1, 0x11, 0x26, 0x68, - 0xcf, 0xdc, 0xd9, 0x9b, 0x38, 0xb9, 0x9a, 0x81, 0xe1, 0x0e, 0x6c, 0xf4, 0x1a, 0x4c, 0x84, 0x24, - 0x6a, 0xb9, 0xc9, 0xb2, 0xef, 0xed, 0x4a, 0xf1, 0x5d, 0x0f, 0x42, 0xd2, 0x10, 0xdd, 0x89, 0xc7, - 0x47, 0xcf, 0x5b, 0x4f, 0x55, 0x67, 0xde, 0x26, 0xba, 0x39, 0xb1, 0xb2, 0x3f, 0x3a, 0x3e, 0x88, - 0x9e, 0xfd, 0x2f, 0x4a, 0x70, 0x32, 0xab, 0x38, 0xd1, 0xdf, 0xb0, 0xe0, 0xc4, 0xad, 0xdb, 0xc9, - 0x5a, 0xb0, 0x45, 0xfc, 0x78, 0x66, 0x97, 0x8a, 0x37, 0xa6, 0x32, 0x86, 0x2f, 0xd4, 0x8b, 0x55, - 0xd1, 0x93, 0x57, 0xd2, 0x5c, 0x2e, 0xfa, 0x49, 0xb4, 0x3b, 0xf3, 0xb0, 0x78, 0xbb, 0x13, 0x57, - 0x6e, 0xae, 0x99, 0x50, 0x9c, 0xed, 0xd4, 0xb9, 0x4f, 0x5b, 0x70, 0x26, 0x8f, 0x04, 0x3a, 0x09, - 0xe5, 0x2d, 0xb2, 0xcb, 0x0d, 0x38, 0x4c, 0x7f, 0xa2, 0x57, 0xa0, 0xb2, 0xed, 0x78, 0x6d, 0x22, - 0xac, 0x9b, 0xf9, 0xa3, 0xbd, 0x88, 0xea, 0x19, 0xe6, 0x54, 0xdf, 0x5d, 0x7a, 0xc1, 0xb2, 0x7f, - 0xb7, 0x0c, 0xc3, 0x86, 0x7e, 0xbb, 0x07, 0x16, 0x5b, 0x90, 0xb2, 0xd8, 0x96, 0x0a, 0x53, 0xcd, - 0x5d, 0x4d, 0xb6, 0xdb, 0x19, 0x93, 0x6d, 0xb9, 0x38, 0x96, 0xfb, 0xda, 0x6c, 0x28, 0x81, 0x5a, - 0x10, 0x52, 0xeb, 0x9d, 0xaa, 0xfe, 0x81, 0x22, 0x3e, 0xe1, 0xb2, 0x24, 0x37, 0x33, 0x7a, 0x67, - 0x6f, 0xa2, 0xa6, 0xfe, 0x62, 0xcd, 0xc8, 0xfe, 0x8e, 0x05, 0x67, 0x8c, 0x3e, 0xce, 0x06, 0x7e, - 0xc3, 0x65, 0x9f, 0xf6, 0x3c, 0x0c, 0x24, 0xbb, 0xa1, 0xdc, 0x21, 0xa8, 0x91, 0x5a, 0xdb, 0x0d, - 0x09, 0x66, 0x10, 0x6a, 0xe8, 0xb7, 0x48, 0x1c, 0x3b, 0x4d, 0x92, 0xdd, 0x13, 0x2c, 0xf1, 0x66, - 0x2c, 0xe1, 0x28, 0x02, 0xe4, 0x39, 0x71, 0xb2, 0x16, 0x39, 0x7e, 0xcc, 0xc8, 0xaf, 0xb9, 0x2d, - 0x22, 0x06, 0xf8, 0xff, 0xeb, 0x6d, 0xc6, 0xd0, 0x27, 0x66, 0x1e, 0xba, 0xb3, 0x37, 0x81, 0x16, - 0x3b, 0x28, 0xe1, 0x1c, 0xea, 0xf6, 0x97, 0x2c, 0x78, 0x28, 0xdf, 0x16, 0x43, 0x4f, 0xc2, 0x20, - 0xdf, 0x1e, 0x8a, 0xb7, 0xd3, 0x9f, 0x84, 0xb5, 0x62, 0x01, 0x45, 0x53, 0x50, 0x53, 0x7a, 0x42, - 0xbc, 0xe3, 0x29, 0x81, 0x5a, 0xd3, 0xca, 0x45, 0xe3, 0xd0, 0x41, 0xa3, 0x7f, 0x84, 0xe5, 0xa6, - 0x06, 0x8d, 0xed, 0xa7, 0x18, 0xc4, 0xfe, 0x77, 0x16, 0x9c, 0x30, 0x7a, 0x75, 0x0f, 0x4c, 0x73, - 0x3f, 0x6d, 0x9a, 0x2f, 0x14, 0x36, 0x9f, 0xbb, 0xd8, 0xe6, 0x9f, 0xb5, 0xe0, 0x9c, 0x81, 0xb5, - 0xe4, 0x24, 0xf5, 0xcd, 0x8b, 0x3b, 0x61, 0x44, 0x62, 0xba, 0xf5, 0x46, 0x8f, 0x19, 0x72, 0x6b, - 0x66, 0x58, 0x50, 0x28, 0x5f, 0x25, 0xbb, 0x5c, 0x88, 0x3d, 0x0d, 0x55, 0x3e, 0x39, 0x83, 0x48, - 0x8c, 0xb8, 0x7a, 0xb7, 0x65, 0xd1, 0x8e, 0x15, 0x06, 0xb2, 0x61, 0x90, 0x09, 0x27, 0xba, 0x58, - 0xa9, 0x1a, 0x02, 0xfa, 0x11, 0x6f, 0xb0, 0x16, 0x2c, 0x20, 0x76, 0x9c, 0xea, 0xce, 0x4a, 0x44, - 0xd8, 0xc7, 0x6d, 0x5c, 0x72, 0x89, 0xd7, 0x88, 0xe9, 0xb6, 0xc1, 0xf1, 0xfd, 0x20, 0x11, 0x3b, - 0x00, 0x63, 0xdb, 0x30, 0xad, 0x9b, 0xb1, 0x89, 0x43, 0x99, 0x7a, 0xce, 0x3a, 0xf1, 0xf8, 0x88, - 0x0a, 0xa6, 0x8b, 0xac, 0x05, 0x0b, 0x88, 0x7d, 0xa7, 0xc4, 0x36, 0x28, 0x6a, 0xe9, 0x93, 0x7b, - 0xb1, 0xbb, 0x8d, 0x52, 0xb2, 0x72, 0xa5, 0x38, 0xc1, 0x45, 0xba, 0xef, 0x70, 0x5f, 0xcf, 0x88, - 0x4b, 0x5c, 0x28, 0xd7, 0xfd, 0x77, 0xb9, 0xbf, 0x55, 0x82, 0x89, 0xf4, 0x03, 0x1d, 0xd2, 0x96, - 0x6e, 0xa9, 0x0c, 0x46, 0x59, 0x7f, 0x87, 0x81, 0x8f, 0x4d, 0xbc, 0x2e, 0x02, 0xab, 0x74, 0x9c, - 0x02, 0xcb, 0x94, 0xa7, 0xe5, 0x03, 0xe4, 0xe9, 0x93, 0x6a, 0xd4, 0x07, 0x32, 0x02, 0x2c, 0xad, - 0x53, 0xce, 0xc3, 0x40, 0x9c, 0x90, 0x70, 0xbc, 0x92, 0x96, 0x47, 0xab, 0x09, 0x09, 0x31, 0x83, - 0xd8, 0xff, 0xb9, 0x04, 0x0f, 0xa7, 0xc7, 0x50, 0xab, 0x80, 0xf7, 0xa6, 0x54, 0xc0, 0x3b, 0x4c, - 0x15, 0x70, 0x77, 0x6f, 0xe2, 0xad, 0x5d, 0x1e, 0xfb, 0xbe, 0xd1, 0x10, 0x68, 0x3e, 0x33, 0x8a, - 0x53, 0xe9, 0x51, 0xbc, 0xbb, 0x37, 0xf1, 0x58, 0x97, 0x77, 0xcc, 0x0c, 0xf3, 0x93, 0x30, 0x18, - 0x11, 0x27, 0x0e, 0x7c, 0x31, 0xd0, 0xea, 0x73, 0x60, 0xd6, 0x8a, 0x05, 0xd4, 0xfe, 0xfd, 0x5a, - 0x76, 0xb0, 0xe7, 0xb9, 0xc3, 0x2e, 0x88, 0x90, 0x0b, 0x03, 0xcc, 0xac, 0xe7, 0xa2, 0xe1, 0xea, - 0xd1, 0x96, 0x11, 0x55, 0x03, 0x8a, 0xf4, 0x4c, 0x95, 0x7e, 0x35, 0xda, 0x84, 0x19, 0x0b, 0xb4, - 0x03, 0xd5, 0xba, 0xb4, 0xb6, 0x4b, 0x45, 0xf8, 0xa5, 0x84, 0xad, 0xad, 0x39, 0x8e, 0x50, 0x79, - 0xad, 0x4c, 0x74, 0xc5, 0x0d, 0x11, 0x28, 0x37, 0xdd, 0x44, 0x7c, 0xd6, 0x23, 0xee, 0xa7, 0xe6, - 0x5d, 0xe3, 0x15, 0x87, 0xa8, 0x12, 0x99, 0x77, 0x13, 0x4c, 0xe9, 0xa3, 0x9f, 0xb3, 0x60, 0x38, - 0xae, 0xb7, 0x56, 0xa2, 0x60, 0xdb, 0x6d, 0x90, 0x48, 0x58, 0x53, 0x47, 0x14, 0x4d, 0xab, 0xb3, - 0x4b, 0x92, 0xa0, 0xe6, 0xcb, 0xf7, 0xb7, 0x1a, 0x82, 0x4d, 0xbe, 0x74, 0x97, 0xf1, 0xb0, 0x78, - 0xf7, 0x39, 0x52, 0x77, 0xa9, 0xfe, 0x93, 0x9b, 0x2a, 0x36, 0x53, 0x8e, 0x6c, 0x5d, 0xce, 0xb5, - 0xeb, 0x5b, 0x74, 0xbd, 0xe9, 0x0e, 0xbd, 0xf5, 0xce, 0xde, 0xc4, 0xc3, 0xb3, 0xf9, 0x3c, 0x71, - 0xb7, 0xce, 0xb0, 0x01, 0x0b, 0xdb, 0x9e, 0x87, 0xc9, 0x6b, 0x6d, 0xc2, 0x5c, 0x26, 0x05, 0x0c, - 0xd8, 0x8a, 0x26, 0x98, 0x19, 0x30, 0x03, 0x82, 0x4d, 0xbe, 0xe8, 0x35, 0x18, 0x6c, 0x39, 0x49, - 0xe4, 0xee, 0x08, 0x3f, 0xc9, 0x11, 0xed, 0xfd, 0x25, 0x46, 0x4b, 0x33, 0x67, 0x9a, 0x9a, 0x37, - 0x62, 0xc1, 0x08, 0xb5, 0xa0, 0xd2, 0x22, 0x51, 0x93, 0x8c, 0x57, 0x8b, 0xf0, 0x09, 0x2f, 0x51, - 0x52, 0x9a, 0x61, 0x8d, 0x5a, 0x47, 0xac, 0x0d, 0x73, 0x2e, 0xe8, 0x15, 0xa8, 0xc6, 0xc4, 0x23, - 0x75, 0x6a, 0xdf, 0xd4, 0x18, 0xc7, 0x77, 0xf6, 0x68, 0xeb, 0x51, 0xc3, 0x62, 0x55, 0x3c, 0xca, - 0x17, 0x98, 0xfc, 0x87, 0x15, 0x49, 0x3a, 0x80, 0xa1, 0xd7, 0x6e, 0xba, 0xfe, 0x38, 0x14, 0x31, - 0x80, 0x2b, 0x8c, 0x56, 0x66, 0x00, 0x79, 0x23, 0x16, 0x8c, 0xec, 0xff, 0x60, 0x01, 0x4a, 0x0b, - 0xb5, 0x7b, 0x60, 0xd4, 0xbe, 0x96, 0x36, 0x6a, 0x17, 0x8b, 0xb4, 0x3a, 0xba, 0xd8, 0xb5, 0xbf, - 0x51, 0x83, 0x8c, 0x3a, 0xb8, 0x46, 0xe2, 0x84, 0x34, 0xde, 0x14, 0xe1, 0x6f, 0x8a, 0xf0, 0x37, - 0x45, 0xb8, 0x12, 0xe1, 0xeb, 0x19, 0x11, 0xfe, 0x1e, 0x63, 0xd5, 0xeb, 0x03, 0xd8, 0x57, 0xd5, - 0x09, 0xad, 0xd9, 0x03, 0x03, 0x81, 0x4a, 0x82, 0x2b, 0xab, 0xcb, 0xd7, 0x72, 0x65, 0xf6, 0xab, - 0x69, 0x99, 0x7d, 0x54, 0x16, 0xff, 0x2f, 0x48, 0xe9, 0x7f, 0x6e, 0xc1, 0xdb, 0xd2, 0xd2, 0x4b, - 0xce, 0x9c, 0x85, 0xa6, 0x1f, 0x44, 0x64, 0xce, 0xdd, 0xd8, 0x20, 0x11, 0xf1, 0xeb, 0x24, 0x56, - 0x5e, 0x0c, 0xab, 0x9b, 0x17, 0x03, 0x3d, 0x07, 0x23, 0xb7, 0xe2, 0xc0, 0x5f, 0x09, 0x5c, 0x5f, - 0x88, 0x20, 0xba, 0x11, 0x3e, 0x79, 0x67, 0x6f, 0x62, 0x84, 0x8e, 0xa8, 0x6c, 0xc7, 0x29, 0x2c, - 0x34, 0x0b, 0xa7, 0x6e, 0xbd, 0xb6, 0xe2, 0x24, 0x86, 0x3b, 0x40, 0x6e, 0xdc, 0xd9, 0x81, 0xc5, - 0x95, 0x97, 0x32, 0x40, 0xdc, 0x89, 0x6f, 0xff, 0xd5, 0x12, 0x3c, 0x92, 0x79, 0x91, 0xc0, 0xf3, - 0x82, 0x76, 0x42, 0x37, 0x35, 0xe8, 0xab, 0x16, 0x9c, 0x6c, 0xa5, 0x3d, 0x0e, 0xb1, 0x70, 0xec, - 0xbe, 0xaf, 0x30, 0x1d, 0x91, 0x71, 0x69, 0xcc, 0x8c, 0x8b, 0x11, 0x3a, 0x99, 0x01, 0xc4, 0xb8, - 0xa3, 0x2f, 0xe8, 0x15, 0xa8, 0xb5, 0x9c, 0x9d, 0xeb, 0x61, 0xc3, 0x49, 0xe4, 0x7e, 0xb2, 0xbb, - 0x1b, 0xa0, 0x9d, 0xb8, 0xde, 0x24, 0x3f, 0xda, 0x9f, 0x5c, 0xf0, 0x93, 0xe5, 0x68, 0x35, 0x89, - 0x5c, 0xbf, 0xc9, 0xdd, 0x79, 0x4b, 0x92, 0x0c, 0xd6, 0x14, 0xed, 0xaf, 0x58, 0x59, 0x25, 0xa5, - 0x46, 0x27, 0x72, 0x12, 0xd2, 0xdc, 0x45, 0x1f, 0x86, 0x0a, 0xdd, 0xf8, 0xc9, 0x51, 0xb9, 0x59, - 0xa4, 0xe6, 0x34, 0xbe, 0x84, 0x56, 0xa2, 0xf4, 0x5f, 0x8c, 0x39, 0x53, 0xfb, 0xab, 0xb5, 0xac, - 0xb1, 0xc0, 0x0e, 0x6f, 0x2f, 0x00, 0x34, 0x83, 0x35, 0xd2, 0x0a, 0x3d, 0x3a, 0x2c, 0x16, 0x3b, - 0x01, 0x50, 0xbe, 0x8e, 0x79, 0x05, 0xc1, 0x06, 0x16, 0xfa, 0x0b, 0x16, 0x40, 0x53, 0xce, 0x79, - 0x69, 0x08, 0x5c, 0x2f, 0xf2, 0x75, 0xf4, 0x8a, 0xd2, 0x7d, 0x51, 0x0c, 0xb1, 0xc1, 0x1c, 0xfd, - 0xac, 0x05, 0xd5, 0x44, 0x76, 0x9f, 0xab, 0xc6, 0xb5, 0x22, 0x7b, 0x22, 0x5f, 0x5a, 0xdb, 0x44, - 0x6a, 0x48, 0x14, 0x5f, 0xf4, 0xf3, 0x16, 0x40, 0xbc, 0xeb, 0xd7, 0x57, 0x02, 0xcf, 0xad, 0xef, - 0x0a, 0x8d, 0x79, 0xa3, 0x50, 0x7f, 0x8c, 0xa2, 0x3e, 0x33, 0x46, 0x47, 0x43, 0xff, 0xc7, 0x06, - 0x67, 0xf4, 0x51, 0xa8, 0xc6, 0x62, 0xba, 0x09, 0x1d, 0xb9, 0x56, 0xac, 0x57, 0x88, 0xd3, 0x16, - 0xe2, 0x55, 0xfc, 0xc3, 0x8a, 0x27, 0xfa, 0xb2, 0x05, 0x27, 0xc2, 0xb4, 0x9f, 0x4f, 0xa8, 0xc3, - 0xe2, 0x64, 0x40, 0xc6, 0x8f, 0x38, 0x73, 0xfa, 0xce, 0xde, 0xc4, 0x89, 0x4c, 0x23, 0xce, 0xf6, - 0x82, 0x4a, 0x40, 0x3d, 0x83, 0x97, 0x43, 0xee, 0x73, 0x1c, 0xd2, 0x12, 0x70, 0x3e, 0x0b, 0xc4, - 0x9d, 0xf8, 0x68, 0x05, 0xce, 0xd0, 0xde, 0xed, 0x72, 0xf3, 0x53, 0xaa, 0x97, 0x98, 0x29, 0xc3, - 0xea, 0xcc, 0xa3, 0x62, 0x86, 0x30, 0xaf, 0x7e, 0x16, 0x07, 0xe7, 0x3e, 0x89, 0x7e, 0xd7, 0x82, - 0x47, 0x5d, 0xa6, 0x06, 0x4c, 0x87, 0xb9, 0xd6, 0x08, 0xe2, 0x24, 0x96, 0x14, 0x2a, 0x2b, 0xba, - 0xa9, 0x9f, 0x99, 0x1f, 0x16, 0x6f, 0xf0, 0xe8, 0xc2, 0x3e, 0x5d, 0xc2, 0xfb, 0x76, 0x18, 0xfd, - 0x18, 0x8c, 0xca, 0x75, 0xb1, 0x42, 0x45, 0x30, 0x53, 0xb4, 0xb5, 0x99, 0x53, 0x77, 0xf6, 0x26, - 0x46, 0xd7, 0x4c, 0x00, 0x4e, 0xe3, 0xd9, 0xdf, 0x2e, 0xa5, 0xce, 0x43, 0x94, 0x13, 0x92, 0x89, - 0x9b, 0xba, 0xf4, 0xff, 0x48, 0xe9, 0x59, 0xa8, 0xb8, 0x51, 0xde, 0x25, 0x2d, 0x6e, 0x54, 0x53, - 0x8c, 0x0d, 0xe6, 0xd4, 0x28, 0x3d, 0xe5, 0x64, 0x5d, 0x9d, 0x42, 0x02, 0xbe, 0x52, 0x64, 0x97, - 0x3a, 0x4f, 0xaf, 0x1e, 0x11, 0x5d, 0x3b, 0xd5, 0x01, 0xc2, 0x9d, 0x5d, 0xb2, 0xbf, 0x9d, 0x3e, - 0x83, 0x31, 0x16, 0x6f, 0x0f, 0xe7, 0x4b, 0x9f, 0xb3, 0x60, 0x38, 0x0a, 0x3c, 0xcf, 0xf5, 0x9b, - 0x54, 0xd0, 0x08, 0x6d, 0xf9, 0x81, 0x63, 0x51, 0x58, 0x42, 0xa2, 0x30, 0xd3, 0x16, 0x6b, 0x9e, - 0xd8, 0xec, 0x80, 0xfd, 0x27, 0x16, 0x8c, 0x77, 0x13, 0x88, 0x88, 0xc0, 0x5b, 0xe5, 0x6a, 0x57, - 0xd1, 0x15, 0xcb, 0xfe, 0x1c, 0xf1, 0x88, 0x72, 0x3c, 0x57, 0x67, 0x9e, 0x10, 0xaf, 0xf9, 0xd6, - 0x95, 0xee, 0xa8, 0x78, 0x3f, 0x3a, 0xe8, 0x65, 0x38, 0x69, 0xbc, 0x57, 0xac, 0x06, 0xa6, 0x36, - 0x33, 0x49, 0x2d, 0x90, 0xe9, 0x0c, 0xec, 0xee, 0xde, 0xc4, 0x43, 0xd9, 0x36, 0x21, 0xb1, 0x3b, - 0xe8, 0xd8, 0xdf, 0x28, 0x65, 0xbf, 0x96, 0x52, 0xb6, 0x6f, 0x58, 0x1d, 0xdb, 0xf9, 0xf7, 0x1d, - 0x87, 0x82, 0x63, 0x1b, 0x7f, 0x15, 0xc0, 0xd1, 0x1d, 0xe7, 0x3e, 0x9e, 0x10, 0xdb, 0xff, 0x72, - 0x00, 0xf6, 0xe9, 0x59, 0x0f, 0xd6, 0x73, 0xdf, 0xc7, 0x8a, 0x9f, 0xb1, 0xd4, 0x91, 0x53, 0x99, - 0x2d, 0xf2, 0xc6, 0x71, 0x8d, 0x3d, 0xdf, 0xc0, 0xc4, 0x3c, 0x4a, 0x41, 0xb9, 0xb1, 0xd3, 0x87, - 0x5b, 0xe8, 0x6b, 0x56, 0xfa, 0xd0, 0x8c, 0x87, 0x9d, 0xb9, 0xc7, 0xd6, 0x27, 0xe3, 0x24, 0x8e, - 0x77, 0x4c, 0x9f, 0xdf, 0x74, 0x3b, 0xa3, 0x9b, 0x04, 0xd8, 0x70, 0x7d, 0xc7, 0x73, 0x5f, 0xa7, - 0xdb, 0x93, 0x0a, 0xd3, 0xb0, 0xcc, 0x64, 0xb9, 0xa4, 0x5a, 0xb1, 0x81, 0x71, 0xee, 0xff, 0x87, - 0x61, 0xe3, 0xcd, 0x73, 0x82, 0x2b, 0xce, 0x98, 0xc1, 0x15, 0x35, 0x23, 0x26, 0xe2, 0xdc, 0x7b, - 0xe0, 0x64, 0xb6, 0x83, 0xfd, 0x3c, 0x6f, 0xff, 0xf7, 0xa1, 0xec, 0x29, 0xd6, 0x1a, 0x89, 0x5a, - 0xb4, 0x6b, 0x6f, 0x7a, 0x96, 0xde, 0xf4, 0x2c, 0xbd, 0xe9, 0x59, 0x32, 0x0f, 0x07, 0x84, 0xd7, - 0x64, 0xe8, 0x1e, 0x79, 0x4d, 0x52, 0x7e, 0xa0, 0x6a, 0xe1, 0x7e, 0x20, 0xfb, 0x4e, 0x05, 0x52, - 0x76, 0x14, 0x1f, 0xef, 0xb7, 0xc3, 0x50, 0x44, 0xc2, 0xe0, 0x3a, 0x5e, 0x14, 0x3a, 0x44, 0xc7, - 0xda, 0xf3, 0x66, 0x2c, 0xe1, 0x54, 0xd7, 0x84, 0x4e, 0xb2, 0x29, 0x94, 0x88, 0xd2, 0x35, 0x2b, - 0x4e, 0xb2, 0x89, 0x19, 0x04, 0xbd, 0x07, 0xc6, 0x12, 0x27, 0x6a, 0x52, 0x7b, 0x7b, 0x9b, 0x7d, - 0x56, 0x71, 0xd6, 0xf9, 0x90, 0xc0, 0x1d, 0x5b, 0x4b, 0x41, 0x71, 0x06, 0x1b, 0xbd, 0x06, 0x03, - 0x9b, 0xc4, 0x6b, 0x89, 0x21, 0x5f, 0x2d, 0x4e, 0xc6, 0xb3, 0x77, 0xbd, 0x4c, 0xbc, 0x16, 0x97, - 0x40, 0xf4, 0x17, 0x66, 0xac, 0xe8, 0x7c, 0xab, 0x6d, 0xb5, 0xe3, 0x24, 0x68, 0xb9, 0xaf, 0x4b, - 0x17, 0xdf, 0xfb, 0x0a, 0x66, 0x7c, 0x55, 0xd2, 0xe7, 0xbe, 0x14, 0xf5, 0x17, 0x6b, 0xce, 0xac, - 0x1f, 0x0d, 0x37, 0x62, 0x9f, 0x6a, 0x57, 0x78, 0xea, 0x8a, 0xee, 0xc7, 0x9c, 0xa4, 0xcf, 0xfb, - 0xa1, 0xfe, 0x62, 0xcd, 0x19, 0xed, 0xaa, 0x79, 0x3f, 0xcc, 0xfa, 0x70, 0xbd, 0xe0, 0x3e, 0xf0, - 0x39, 0x9f, 0x3b, 0xff, 0x9f, 0x80, 0x4a, 0x7d, 0xd3, 0x89, 0x92, 0xf1, 0x11, 0x36, 0x69, 0x94, - 0x4f, 0x67, 0x96, 0x36, 0x62, 0x0e, 0x43, 0x8f, 0x41, 0x39, 0x22, 0x1b, 0x2c, 0x6e, 0xd3, 0x88, - 0xe8, 0xc1, 0x64, 0x03, 0xd3, 0x76, 0xfb, 0x97, 0x4b, 0x69, 0x73, 0x29, 0xfd, 0xde, 0x7c, 0xb6, - 0xd7, 0xdb, 0x51, 0x2c, 0xfd, 0x3e, 0xc6, 0x6c, 0x67, 0xcd, 0x58, 0xc2, 0xd1, 0xc7, 0x2d, 0x18, - 0xba, 0x15, 0x07, 0xbe, 0x4f, 0x12, 0xa1, 0x9a, 0x6e, 0x14, 0x3c, 0x14, 0x57, 0x38, 0x75, 0xdd, - 0x07, 0xd1, 0x80, 0x25, 0x5f, 0xda, 0x5d, 0xb2, 0x53, 0xf7, 0xda, 0x8d, 0x8e, 0x20, 0x8d, 0x8b, - 0xbc, 0x19, 0x4b, 0x38, 0x45, 0x75, 0x7d, 0x8e, 0x3a, 0x90, 0x46, 0x5d, 0xf0, 0x05, 0xaa, 0x80, - 0xdb, 0xff, 0x67, 0x10, 0xce, 0xe6, 0x2e, 0x0e, 0x6a, 0xc8, 0x30, 0x53, 0xe1, 0x92, 0xeb, 0x11, - 0x19, 0x9e, 0xc4, 0x0c, 0x99, 0x1b, 0xaa, 0x15, 0x1b, 0x18, 0xe8, 0x67, 0x00, 0x42, 0x27, 0x72, - 0x5a, 0x44, 0xf9, 0x65, 0x8f, 0x6c, 0x2f, 0xd0, 0x7e, 0xac, 0x48, 0x9a, 0x7a, 0x6f, 0xaa, 0x9a, - 0x62, 0x6c, 0xb0, 0x44, 0xcf, 0xc3, 0x70, 0x44, 0x3c, 0xe2, 0xc4, 0x2c, 0xec, 0x37, 0x9b, 0xc3, - 0x80, 0x35, 0x08, 0x9b, 0x78, 0xe8, 0x49, 0x15, 0xc9, 0x95, 0x89, 0x68, 0x49, 0x47, 0x73, 0xa1, - 0xcf, 0x5b, 0x30, 0xb6, 0xe1, 0x7a, 0x44, 0x73, 0x17, 0x19, 0x07, 0xcb, 0x47, 0x7f, 0xc9, 0x4b, - 0x26, 0x5d, 0x2d, 0x21, 0x53, 0xcd, 0x31, 0xce, 0xb0, 0xa7, 0x9f, 0x79, 0x9b, 0x44, 0x4c, 0xb4, - 0x0e, 0xa6, 0x3f, 0xf3, 0x0d, 0xde, 0x8c, 0x25, 0x1c, 0x4d, 0xc3, 0x89, 0xd0, 0x89, 0xe3, 0xd9, - 0x88, 0x34, 0x88, 0x9f, 0xb8, 0x8e, 0xc7, 0xf3, 0x01, 0xaa, 0x3a, 0x1e, 0x78, 0x25, 0x0d, 0xc6, - 0x59, 0x7c, 0xf4, 0x7e, 0x78, 0x98, 0x3b, 0x3e, 0x96, 0xdc, 0x38, 0x76, 0xfd, 0xa6, 0x9e, 0x06, - 0xc2, 0xff, 0x33, 0x21, 0x48, 0x3d, 0xbc, 0x90, 0x8f, 0x86, 0xbb, 0x3d, 0x8f, 0x9e, 0x86, 0x6a, - 0xbc, 0xe5, 0x86, 0xb3, 0x51, 0x23, 0x66, 0x87, 0x1e, 0x55, 0xed, 0x6d, 0x5c, 0x15, 0xed, 0x58, - 0x61, 0xa0, 0x3a, 0x8c, 0xf0, 0x4f, 0xc2, 0x43, 0xd1, 0x84, 0x7c, 0x7c, 0xa6, 0xab, 0x7a, 0x14, - 0xe9, 0x6d, 0x93, 0xd8, 0xb9, 0x7d, 0x51, 0x1e, 0xc1, 0xf0, 0x13, 0x83, 0x1b, 0x06, 0x19, 0x9c, - 0x22, 0x4a, 0x27, 0xd3, 0x56, 0x7b, 0x9d, 0x88, 0x81, 0x64, 0xf2, 0xcf, 0x98, 0x4c, 0x57, 0x35, - 0x08, 0x9b, 0x78, 0x2c, 0xa8, 0x2f, 0x74, 0xc5, 0x3f, 0x19, 0xa2, 0xce, 0x83, 0xfa, 0x74, 0x33, - 0x36, 0x71, 0xec, 0x5f, 0x2c, 0xa5, 0xf7, 0xf6, 0xa6, 0x38, 0x40, 0x31, 0x5d, 0xf4, 0xc9, 0x0d, - 0x27, 0x92, 0x7e, 0x9f, 0x23, 0x26, 0x48, 0x08, 0xba, 0x37, 0x9c, 0xc8, 0x14, 0x1f, 0x8c, 0x01, - 0x96, 0x9c, 0xd0, 0x2d, 0x18, 0x48, 0x3c, 0xa7, 0xa0, 0x8c, 0x2a, 0x83, 0xa3, 0x76, 0xb5, 0x2c, - 0x4e, 0xc7, 0x98, 0xf1, 0x40, 0x8f, 0xd2, 0xfd, 0xc5, 0xba, 0x3c, 0x8c, 0x11, 0x5b, 0x82, 0xf5, - 0x18, 0xb3, 0x56, 0xfb, 0x2e, 0xe4, 0x48, 0x70, 0xa5, 0x32, 0xd1, 0x05, 0x00, 0xba, 0x55, 0x5d, - 0x89, 0xc8, 0x86, 0xbb, 0x23, 0x4c, 0x16, 0x25, 0x25, 0xae, 0x29, 0x08, 0x36, 0xb0, 0xe4, 0x33, - 0xab, 0xed, 0x0d, 0xfa, 0x4c, 0xa9, 0xf3, 0x19, 0x0e, 0xc1, 0x06, 0x16, 0x7a, 0x0e, 0x06, 0xdd, - 0x96, 0xd3, 0x54, 0xc1, 0x9e, 0x8f, 0x52, 0xf1, 0xb0, 0xc0, 0x5a, 0xee, 0xee, 0x4d, 0x8c, 0xa9, - 0x0e, 0xb1, 0x26, 0x2c, 0x70, 0xd1, 0x37, 0x2c, 0x18, 0xa9, 0x07, 0xad, 0x56, 0xe0, 0xf3, 0x0d, - 0x9e, 0xd8, 0xad, 0xde, 0x3a, 0x2e, 0x83, 0x62, 0x72, 0xd6, 0x60, 0xc6, 0xb7, 0xab, 0x2a, 0xf5, - 0xcb, 0x04, 0xe1, 0x54, 0xaf, 0x4c, 0x29, 0x52, 0x39, 0x40, 0x8a, 0xfc, 0xba, 0x05, 0xa7, 0xf8, - 0xb3, 0xc6, 0xbe, 0x53, 0x64, 0x39, 0x05, 0xc7, 0xfc, 0x5a, 0x1d, 0x5b, 0x71, 0xe5, 0x0f, 0xec, - 0x80, 0xe3, 0xce, 0x4e, 0xa2, 0x79, 0x38, 0xb5, 0x11, 0x44, 0x75, 0x62, 0x0e, 0x84, 0x10, 0x81, - 0x8a, 0xd0, 0xa5, 0x2c, 0x02, 0xee, 0x7c, 0x06, 0xdd, 0x80, 0x87, 0x8c, 0x46, 0x73, 0x1c, 0xb8, - 0x14, 0x7c, 0x5c, 0x50, 0x7b, 0xe8, 0x52, 0x2e, 0x16, 0xee, 0xf2, 0x74, 0xda, 0x35, 0x53, 0xeb, - 0xc1, 0x35, 0xf3, 0x2a, 0x3c, 0x52, 0xef, 0x1c, 0x99, 0xed, 0xb8, 0xbd, 0x1e, 0x73, 0x99, 0x58, - 0x9d, 0xf9, 0x21, 0x41, 0xe0, 0x91, 0xd9, 0x6e, 0x88, 0xb8, 0x3b, 0x0d, 0xf4, 0x61, 0xa8, 0x46, - 0x84, 0x7d, 0x95, 0x58, 0xa4, 0xfc, 0x1c, 0x71, 0x3f, 0xae, 0x6d, 0x5d, 0x4e, 0x56, 0x4b, 0x79, - 0xd1, 0x10, 0x63, 0xc5, 0x11, 0xdd, 0x86, 0xa1, 0xd0, 0x49, 0xea, 0x9b, 0x22, 0xd1, 0xe7, 0xc8, - 0x91, 0x36, 0x8a, 0x39, 0xf3, 0xb6, 0x1b, 0xa9, 0xc1, 0x9c, 0x09, 0x96, 0xdc, 0xa8, 0xdd, 0x53, - 0x0f, 0x5a, 0x61, 0xe0, 0x13, 0x3f, 0x89, 0xc7, 0x47, 0xb5, 0xdd, 0x33, 0xab, 0x5a, 0xb1, 0x81, - 0x81, 0x56, 0xe0, 0x0c, 0xf3, 0x4e, 0xdd, 0x74, 0x93, 0xcd, 0xa0, 0x9d, 0xc8, 0xcd, 0xd6, 0xf8, - 0x58, 0xfa, 0x50, 0x64, 0x31, 0x07, 0x07, 0xe7, 0x3e, 0x79, 0xee, 0xbd, 0x70, 0xaa, 0x63, 0x29, - 0xf7, 0xe5, 0x18, 0x9a, 0x83, 0x87, 0xf2, 0x17, 0x4d, 0x5f, 0xee, 0xa1, 0xbf, 0x9f, 0x09, 0xd0, - 0x35, 0x4c, 0xf6, 0x1e, 0x5c, 0x8d, 0x0e, 0x94, 0x89, 0xbf, 0x2d, 0x74, 0xc8, 0xa5, 0xa3, 0x7d, - 0xbb, 0x8b, 0xfe, 0x36, 0x5f, 0xf3, 0xcc, 0x9f, 0x72, 0xd1, 0xdf, 0xc6, 0x94, 0x36, 0xfa, 0xa2, - 0x95, 0x32, 0x39, 0xb9, 0x83, 0xf2, 0x83, 0xc7, 0xb2, 0x47, 0xe9, 0xd9, 0x0a, 0xb5, 0xff, 0x55, - 0x09, 0xce, 0x1f, 0x44, 0xa4, 0x87, 0xe1, 0x7b, 0x02, 0x06, 0x63, 0x76, 0xe4, 0x2e, 0x84, 0xf2, - 0x30, 0x9d, 0xab, 0xfc, 0x10, 0xfe, 0x55, 0x2c, 0x40, 0xc8, 0x83, 0x72, 0xcb, 0x09, 0x85, 0xdf, - 0x6a, 0xe1, 0xa8, 0x29, 0x3b, 0xf4, 0xbf, 0xe3, 0x2d, 0x39, 0x21, 0x37, 0x58, 0x8c, 0x06, 0x4c, - 0xd9, 0xa0, 0x04, 0x2a, 0x4e, 0x14, 0x39, 0xf2, 0x7c, 0xf7, 0x6a, 0x31, 0xfc, 0xa6, 0x29, 0x49, - 0x7e, 0x3c, 0x96, 0x6a, 0xc2, 0x9c, 0x99, 0xfd, 0xe5, 0x6a, 0x2a, 0x6d, 0x85, 0x1d, 0xda, 0xc7, - 0x30, 0x28, 0xdc, 0x55, 0x56, 0xd1, 0x99, 0x52, 0x3c, 0xef, 0x90, 0xed, 0x48, 0x45, 0xf6, 0xb6, - 0x60, 0x85, 0x3e, 0x6d, 0xb1, 0x1c, 0x69, 0x99, 0xca, 0x23, 0xf6, 0x81, 0xc7, 0x93, 0xb2, 0x6d, - 0x66, 0x5e, 0xcb, 0x46, 0x6c, 0x72, 0x17, 0xb5, 0x0e, 0x98, 0xfd, 0xdb, 0x59, 0xeb, 0x80, 0xd9, - 0xb3, 0x12, 0x8e, 0x76, 0x72, 0x0e, 0xe7, 0x0b, 0xc8, 0xb3, 0xed, 0xe1, 0x38, 0xfe, 0x6b, 0x16, - 0x9c, 0x72, 0xb3, 0xa7, 0xac, 0x62, 0xd7, 0x74, 0xc4, 0xf0, 0x8f, 0xee, 0x87, 0xb8, 0x4a, 0x9d, - 0x77, 0x80, 0x70, 0x67, 0x67, 0x50, 0x03, 0x06, 0x5c, 0x7f, 0x23, 0x10, 0x46, 0xcc, 0xcc, 0xd1, - 0x3a, 0xb5, 0xe0, 0x6f, 0x04, 0x7a, 0x35, 0xd3, 0x7f, 0x98, 0x51, 0x47, 0x8b, 0x70, 0x26, 0x12, - 0x7e, 0xad, 0xcb, 0x6e, 0x9c, 0x04, 0xd1, 0xee, 0xa2, 0xdb, 0x72, 0x13, 0x66, 0x80, 0x94, 0x67, - 0xc6, 0xa9, 0x7e, 0xc0, 0x39, 0x70, 0x9c, 0xfb, 0x14, 0x7a, 0x1d, 0x86, 0x64, 0x52, 0x77, 0xb5, - 0x88, 0x1d, 0x68, 0xe7, 0xfc, 0x57, 0x93, 0x69, 0x55, 0xe4, 0x6f, 0x4b, 0x86, 0xe8, 0x53, 0x16, - 0x8c, 0xf1, 0xdf, 0x97, 0x77, 0x1b, 0x3c, 0x59, 0xaa, 0x56, 0x44, 0xf8, 0xf2, 0x6a, 0x8a, 0xe6, - 0x0c, 0xa2, 0xdb, 0xdf, 0x74, 0x1b, 0xce, 0xf0, 0xb5, 0xbf, 0x31, 0x02, 0x9d, 0x67, 0xc1, 0xe8, - 0x23, 0x50, 0x8b, 0x54, 0xce, 0xbb, 0x55, 0x84, 0xe5, 0x20, 0xa7, 0x9a, 0x38, 0x87, 0x56, 0x56, - 0x99, 0xce, 0x6e, 0xd7, 0x1c, 0xe9, 0xde, 0x29, 0xd6, 0x47, 0xc6, 0x05, 0x2c, 0x33, 0xc1, 0x55, - 0x1f, 0x07, 0xee, 0xfa, 0x75, 0xcc, 0x78, 0xa0, 0x08, 0x06, 0x37, 0x89, 0xe3, 0x25, 0x9b, 0xc5, - 0x9c, 0x5c, 0x5c, 0x66, 0xb4, 0xb2, 0x99, 0x4f, 0xbc, 0x15, 0x0b, 0x4e, 0x68, 0x07, 0x86, 0x36, - 0xf9, 0x5c, 0x14, 0xdb, 0x99, 0xa5, 0xa3, 0x0e, 0x6e, 0x6a, 0x82, 0xeb, 0x99, 0x27, 0x1a, 0xb0, - 0x64, 0xc7, 0x82, 0x8c, 0x8c, 0x30, 0x08, 0x2e, 0x45, 0x8a, 0x4b, 0xfa, 0xea, 0x3d, 0x06, 0xe2, - 0x43, 0x30, 0x12, 0x91, 0x7a, 0xe0, 0xd7, 0x5d, 0x8f, 0x34, 0xa6, 0xe5, 0xa9, 0x44, 0x3f, 0xa9, - 0x42, 0xcc, 0xf9, 0x80, 0x0d, 0x1a, 0x38, 0x45, 0x91, 0x2d, 0x32, 0x95, 0x28, 0x4b, 0x3f, 0x08, - 0x11, 0x5e, 0xf0, 0xc5, 0x82, 0xd2, 0x72, 0x19, 0x4d, 0xbe, 0xc8, 0xd2, 0x6d, 0x38, 0xc3, 0x17, - 0xbd, 0x0c, 0x10, 0xac, 0xf3, 0x48, 0xa2, 0xe9, 0x44, 0xb8, 0xc4, 0xfb, 0x79, 0xd5, 0x31, 0x9e, - 0x33, 0x28, 0x29, 0x60, 0x83, 0x1a, 0xba, 0x0a, 0xc0, 0x97, 0xcd, 0xda, 0x6e, 0x28, 0xf7, 0x3c, - 0x32, 0xd7, 0x0b, 0x56, 0x15, 0xe4, 0xee, 0xde, 0x44, 0xa7, 0x8b, 0x92, 0x45, 0x6b, 0x18, 0x8f, - 0xa3, 0x9f, 0x86, 0xa1, 0xb8, 0xdd, 0x6a, 0x39, 0xca, 0x61, 0x5e, 0x60, 0x16, 0x22, 0xa7, 0x6b, - 0x48, 0x45, 0xde, 0x80, 0x25, 0x47, 0x74, 0x8b, 0xca, 0x77, 0x21, 0x9e, 0xf8, 0x2a, 0xe2, 0xe6, - 0x09, 0x77, 0x1b, 0xbd, 0x4b, 0xee, 0x01, 0x70, 0x0e, 0xce, 0xdd, 0xbd, 0x89, 0x87, 0xd2, 0xed, - 0x8b, 0x81, 0xc8, 0x0b, 0xcc, 0xa5, 0x89, 0xae, 0xc8, 0x72, 0x33, 0xf4, 0xb5, 0xa5, 0x8b, 0xe9, - 0x29, 0x5d, 0x6e, 0x86, 0x35, 0x77, 0x1f, 0x33, 0xf3, 0x61, 0xb4, 0x04, 0xa7, 0xeb, 0x81, 0x9f, - 0x44, 0x81, 0xe7, 0xf1, 0x72, 0x4b, 0x7c, 0xfb, 0xc9, 0x1d, 0xea, 0x6f, 0x15, 0xdd, 0x3e, 0x3d, - 0xdb, 0x89, 0x82, 0xf3, 0x9e, 0xa3, 0x06, 0x79, 0x56, 0x39, 0x8c, 0x15, 0x72, 0xc6, 0x99, 0xa2, - 0x29, 0x24, 0x94, 0xf2, 0x92, 0x1e, 0xa0, 0x26, 0xfc, 0x74, 0xdc, 0xa7, 0xf8, 0x62, 0xcf, 0xc1, - 0x08, 0xd9, 0x49, 0x48, 0xe4, 0x3b, 0xde, 0x75, 0xbc, 0x28, 0xfd, 0xdb, 0x6c, 0x61, 0x5e, 0x34, - 0xda, 0x71, 0x0a, 0x0b, 0xd9, 0xca, 0x11, 0x64, 0x24, 0xe0, 0x72, 0x47, 0x90, 0x74, 0xfb, 0xd8, - 0xff, 0xa3, 0x94, 0x32, 0x58, 0xd7, 0x22, 0x42, 0x50, 0x00, 0x15, 0x3f, 0x68, 0x28, 0x85, 0x74, - 0xa5, 0x18, 0x85, 0x74, 0x2d, 0x68, 0x18, 0x85, 0x72, 0xe8, 0xbf, 0x18, 0x73, 0x3e, 0xac, 0x92, - 0x88, 0x2c, 0xb9, 0xc2, 0x00, 0x62, 0x23, 0x56, 0x24, 0x67, 0x55, 0x49, 0x64, 0xd9, 0x64, 0x84, - 0xd3, 0x7c, 0xd1, 0x16, 0x54, 0x36, 0x83, 0x38, 0x91, 0xdb, 0xb3, 0x23, 0xee, 0x04, 0x2f, 0x07, - 0x71, 0xc2, 0xac, 0x2c, 0xf5, 0xda, 0xb4, 0x25, 0xc6, 0x9c, 0x87, 0xfd, 0x1f, 0xad, 0xd4, 0x69, - 0xc6, 0x4d, 0x16, 0x03, 0xbd, 0x4d, 0x7c, 0x2a, 0x6b, 0xcc, 0xa0, 0xaf, 0x1f, 0xcb, 0x64, 0x94, - 0xbe, 0xad, 0x5b, 0x89, 0xb3, 0xdb, 0x94, 0xc2, 0x24, 0x23, 0x61, 0xc4, 0x87, 0x7d, 0xcc, 0x4a, - 0xe7, 0xf6, 0x96, 0x8a, 0xd8, 0x80, 0x99, 0xf9, 0xed, 0x07, 0xa6, 0x09, 0xdb, 0x5f, 0xb4, 0x60, - 0x68, 0xc6, 0xa9, 0x6f, 0x05, 0x1b, 0x1b, 0xe8, 0x69, 0xa8, 0x36, 0xda, 0x91, 0x99, 0x66, 0xac, - 0x1c, 0x2b, 0x73, 0xa2, 0x1d, 0x2b, 0x0c, 0x3a, 0x87, 0x37, 0x9c, 0xba, 0xcc, 0x72, 0x2f, 0xf3, - 0x39, 0x7c, 0x89, 0xb5, 0x60, 0x01, 0x41, 0xcf, 0xc3, 0x70, 0xcb, 0xd9, 0x91, 0x0f, 0x67, 0x8f, - 0x52, 0x96, 0x34, 0x08, 0x9b, 0x78, 0xf6, 0x3f, 0xb3, 0x60, 0x7c, 0xc6, 0x89, 0xdd, 0xfa, 0x74, - 0x3b, 0xd9, 0x9c, 0x71, 0x93, 0xf5, 0x76, 0x7d, 0x8b, 0x24, 0xbc, 0xb4, 0x01, 0xed, 0x65, 0x3b, - 0xa6, 0x4b, 0x49, 0xed, 0x7b, 0x55, 0x2f, 0xaf, 0x8b, 0x76, 0xac, 0x30, 0xd0, 0xeb, 0x30, 0x1c, - 0x3a, 0x71, 0x7c, 0x3b, 0x88, 0x1a, 0x98, 0x6c, 0x14, 0x53, 0x58, 0x64, 0x95, 0xd4, 0x23, 0x92, - 0x60, 0xb2, 0x21, 0x8e, 0xfb, 0x35, 0x7d, 0x6c, 0x32, 0xb3, 0x3f, 0x67, 0xc1, 0x23, 0x33, 0xc4, - 0x89, 0x48, 0xc4, 0xea, 0x90, 0xa8, 0x17, 0x99, 0xf5, 0x82, 0x76, 0x03, 0xbd, 0x06, 0xd5, 0x84, - 0x36, 0xd3, 0x6e, 0x59, 0xc5, 0x76, 0x8b, 0x9d, 0xd6, 0xaf, 0x09, 0xe2, 0x58, 0xb1, 0xb1, 0xff, - 0x8a, 0x05, 0x23, 0xec, 0xe0, 0x73, 0x8e, 0x24, 0x8e, 0xeb, 0x75, 0x94, 0xeb, 0xb2, 0x7a, 0x2c, - 0xd7, 0x75, 0x1e, 0x06, 0x36, 0x83, 0x16, 0xc9, 0x1e, 0xda, 0x5f, 0x0e, 0x5a, 0x04, 0x33, 0x08, - 0x7a, 0x96, 0x7e, 0x78, 0xd7, 0x4f, 0x1c, 0xba, 0x04, 0xa4, 0xbb, 0xfb, 0x04, 0xff, 0xe8, 0xaa, - 0x19, 0x9b, 0x38, 0xf6, 0x6f, 0xd5, 0x60, 0x48, 0x44, 0x76, 0xf4, 0x5c, 0xde, 0x42, 0xfa, 0x3f, - 0x4a, 0x5d, 0xfd, 0x1f, 0x31, 0x0c, 0xd6, 0x59, 0xdd, 0x40, 0x61, 0xdb, 0x5e, 0x2d, 0x24, 0x14, - 0x88, 0x97, 0x22, 0xd4, 0xdd, 0xe2, 0xff, 0xb1, 0x60, 0x85, 0xbe, 0x60, 0xc1, 0x89, 0x7a, 0xe0, - 0xfb, 0xa4, 0xae, 0x0d, 0xaf, 0x81, 0x22, 0x22, 0x3e, 0x66, 0xd3, 0x44, 0xf5, 0xa9, 0x5b, 0x06, - 0x80, 0xb3, 0xec, 0xd1, 0x8b, 0x30, 0xca, 0xc7, 0xec, 0x46, 0xca, 0x47, 0xaf, 0xab, 0x38, 0x99, - 0x40, 0x9c, 0xc6, 0x45, 0x93, 0xfc, 0xac, 0x43, 0xd4, 0x4b, 0x1a, 0xd4, 0xae, 0x4c, 0xa3, 0x52, - 0x92, 0x81, 0x81, 0x22, 0x40, 0x11, 0xd9, 0x88, 0x48, 0xbc, 0x29, 0x22, 0x5f, 0x98, 0xd1, 0x37, - 0x74, 0xb8, 0x54, 0x78, 0xdc, 0x41, 0x09, 0xe7, 0x50, 0x47, 0x5b, 0x62, 0x03, 0x5e, 0x2d, 0x42, - 0x86, 0x8a, 0xcf, 0xdc, 0x75, 0x1f, 0x3e, 0x01, 0x95, 0x78, 0xd3, 0x89, 0x1a, 0xcc, 0xd8, 0x2c, - 0xf3, 0xf4, 0xab, 0x55, 0xda, 0x80, 0x79, 0x3b, 0x9a, 0x83, 0x93, 0x99, 0x1a, 0x54, 0xb1, 0xf0, - 0xa5, 0xab, 0x54, 0x9b, 0x4c, 0xf5, 0xaa, 0x18, 0x77, 0x3c, 0x61, 0x3a, 0x67, 0x86, 0x0f, 0x70, - 0xce, 0xec, 0xaa, 0xf8, 0x4a, 0xee, 0xe5, 0x7e, 0xa9, 0x90, 0x01, 0xe8, 0x29, 0x98, 0xf2, 0xb3, - 0x99, 0x60, 0xca, 0x51, 0xd6, 0x81, 0x1b, 0xc5, 0x74, 0xa0, 0xff, 0xc8, 0xc9, 0xfb, 0x19, 0x09, - 0xf9, 0xe7, 0x16, 0xc8, 0xef, 0x3a, 0xeb, 0xd4, 0x37, 0x09, 0x9d, 0x32, 0xe8, 0x3d, 0x30, 0xa6, - 0xf6, 0xf5, 0xb3, 0x41, 0xdb, 0xe7, 0x41, 0x90, 0x65, 0x6d, 0x78, 0xe2, 0x14, 0x14, 0x67, 0xb0, - 0xd1, 0x14, 0xd4, 0xe8, 0x38, 0xf1, 0x47, 0xb9, 0xae, 0x55, 0xbe, 0x83, 0xe9, 0x95, 0x05, 0xf1, - 0x94, 0xc6, 0x41, 0x01, 0x9c, 0xf2, 0x9c, 0x38, 0x61, 0x3d, 0xa0, 0xdb, 0xfc, 0x43, 0x16, 0xa2, - 0x60, 0xf9, 0x1c, 0x8b, 0x59, 0x42, 0xb8, 0x93, 0xb6, 0xfd, 0x9d, 0x01, 0x18, 0x4d, 0x49, 0xc6, - 0x3e, 0x95, 0xf4, 0xd3, 0x50, 0x95, 0x7a, 0x33, 0x5b, 0x32, 0x47, 0x29, 0x57, 0x85, 0x41, 0x95, - 0xd6, 0xba, 0xd6, 0xaa, 0x59, 0xa3, 0xc2, 0x50, 0xb8, 0xd8, 0xc4, 0x63, 0x42, 0x39, 0xf1, 0xe2, - 0x59, 0xcf, 0x25, 0x7e, 0xc2, 0xbb, 0x59, 0x8c, 0x50, 0x5e, 0x5b, 0x5c, 0x35, 0x89, 0x6a, 0xa1, - 0x9c, 0x01, 0xe0, 0x2c, 0x7b, 0xf4, 0x49, 0x0b, 0x46, 0x9d, 0xdb, 0xb1, 0x2e, 0x6e, 0x2b, 0xc2, - 0x26, 0x8f, 0xa8, 0xa4, 0x52, 0xf5, 0x72, 0xb9, 0x4b, 0x3c, 0xd5, 0x84, 0xd3, 0x4c, 0xd1, 0x1b, - 0x16, 0x20, 0xb2, 0x43, 0xea, 0x32, 0xb0, 0x53, 0xf4, 0x65, 0xb0, 0x88, 0xed, 0xef, 0xc5, 0x0e, - 0xba, 0x5c, 0xaa, 0x77, 0xb6, 0xe3, 0x9c, 0x3e, 0xd8, 0xff, 0xa8, 0xac, 0x16, 0x94, 0x8e, 0x25, - 0x76, 0x8c, 0x98, 0x46, 0xeb, 0xf0, 0x31, 0x8d, 0x3a, 0x36, 0xa4, 0x33, 0xbf, 0x35, 0x95, 0x0e, - 0x57, 0xba, 0x4f, 0xe9, 0x70, 0x3f, 0x6b, 0xa5, 0x8a, 0x43, 0x0d, 0x5f, 0x78, 0xb9, 0xd8, 0x38, - 0xe6, 0x49, 0x1e, 0xb7, 0x92, 0x91, 0xee, 0xe9, 0x70, 0x25, 0x2a, 0x4d, 0x0d, 0xb4, 0xbe, 0xa4, - 0xe1, 0xbf, 0x29, 0xc3, 0xb0, 0xa1, 0x49, 0x73, 0xcd, 0x22, 0xeb, 0x01, 0x33, 0x8b, 0x4a, 0x7d, - 0x98, 0x45, 0x3f, 0x03, 0xb5, 0xba, 0x94, 0xf2, 0xc5, 0x94, 0x47, 0xce, 0xea, 0x0e, 0x2d, 0xe8, - 0x55, 0x13, 0xd6, 0x3c, 0xd1, 0x7c, 0x2a, 0x89, 0x4a, 0x68, 0x88, 0x01, 0xa6, 0x21, 0xf2, 0xb2, - 0x9c, 0x84, 0xa6, 0xe8, 0x7c, 0x26, 0x1b, 0x6e, 0x54, 0x31, 0xc2, 0x8d, 0x56, 0x16, 0xf2, 0xc3, - 0x8d, 0xbe, 0x63, 0xa9, 0x8f, 0x7b, 0x0f, 0xaa, 0x65, 0xdc, 0x4a, 0x57, 0xcb, 0xb8, 0x58, 0xc8, - 0x30, 0x77, 0x29, 0x93, 0x71, 0x0d, 0x86, 0x66, 0x83, 0x56, 0xcb, 0xf1, 0x1b, 0xe8, 0x47, 0x60, - 0xa8, 0xce, 0x7f, 0x0a, 0xc7, 0x0e, 0x3b, 0x3e, 0x15, 0x50, 0x2c, 0x61, 0xe8, 0x51, 0x18, 0x70, - 0xa2, 0xa6, 0x74, 0xe6, 0xb0, 0xe0, 0xa3, 0xe9, 0xa8, 0x19, 0x63, 0xd6, 0x6a, 0xff, 0xbd, 0x01, - 0x60, 0x67, 0xfe, 0x4e, 0x44, 0x1a, 0x6b, 0x01, 0x2b, 0xcf, 0x78, 0xac, 0x87, 0x8e, 0x7a, 0xb3, - 0xf4, 0x20, 0x1f, 0x3c, 0x1a, 0x87, 0x4f, 0xe5, 0x7b, 0x7d, 0xf8, 0x94, 0x7f, 0x9e, 0x38, 0xf0, - 0x00, 0x9d, 0x27, 0xda, 0x9f, 0xb1, 0x00, 0xa9, 0x40, 0x11, 0x7d, 0xe0, 0x3f, 0x05, 0x35, 0x15, - 0x32, 0x22, 0x0c, 0x2b, 0x2d, 0x22, 0x24, 0x00, 0x6b, 0x9c, 0x1e, 0x76, 0xc8, 0x4f, 0x48, 0xf9, - 0x5d, 0x4e, 0x47, 0x48, 0x33, 0xa9, 0x2f, 0xc4, 0xb9, 0xfd, 0xdb, 0x25, 0x78, 0x88, 0xab, 0xe4, - 0x25, 0xc7, 0x77, 0x9a, 0xa4, 0x45, 0x7b, 0xd5, 0x6b, 0x08, 0x47, 0x9d, 0x6e, 0xcd, 0x5c, 0x19, - 0xf1, 0x7c, 0xd4, 0xb5, 0xcb, 0xd7, 0x1c, 0x5f, 0x65, 0x0b, 0xbe, 0x9b, 0x60, 0x46, 0x1c, 0xc5, - 0x50, 0x95, 0x77, 0x07, 0x08, 0x59, 0x5c, 0x10, 0x23, 0x25, 0x96, 0x84, 0xde, 0x24, 0x58, 0x31, - 0xa2, 0x86, 0xab, 0x17, 0xd4, 0xb7, 0x30, 0x09, 0x03, 0x26, 0x77, 0x8d, 0x80, 0xd3, 0x45, 0xd1, - 0x8e, 0x15, 0x86, 0xfd, 0xdb, 0x16, 0x64, 0x35, 0x92, 0x51, 0x07, 0xcf, 0xda, 0xb7, 0x0e, 0x5e, - 0x1f, 0x85, 0xe8, 0x7e, 0x0a, 0x86, 0x9d, 0x84, 0x1a, 0x11, 0x7c, 0xdb, 0x5d, 0x3e, 0xdc, 0x59, - 0xcb, 0x52, 0xd0, 0x70, 0x37, 0x5c, 0xb6, 0xdd, 0x36, 0xc9, 0xd9, 0x6f, 0x58, 0x50, 0x9b, 0x8b, - 0x76, 0xfb, 0xcf, 0xf4, 0xe8, 0xcc, 0xe3, 0x28, 0xf5, 0x95, 0xc7, 0x21, 0x33, 0x45, 0xca, 0xdd, - 0x32, 0x45, 0xec, 0xff, 0x3a, 0x00, 0xa7, 0x3a, 0x52, 0x86, 0xd0, 0x0b, 0x30, 0x52, 0x17, 0x33, - 0x37, 0x94, 0xbe, 0xb6, 0x9a, 0x19, 0xd1, 0xa8, 0x61, 0x38, 0x85, 0xd9, 0xc3, 0xda, 0x59, 0x80, - 0xd3, 0x11, 0x79, 0xad, 0x4d, 0xda, 0x64, 0x7a, 0x23, 0x21, 0xd1, 0x2a, 0xa9, 0x07, 0x7e, 0x83, - 0x17, 0x92, 0x2c, 0xcf, 0x3c, 0x7c, 0x67, 0x6f, 0xe2, 0x34, 0xee, 0x04, 0xe3, 0xbc, 0x67, 0x50, - 0x08, 0xa3, 0x9e, 0x69, 0x9e, 0x8a, 0xbd, 0xc9, 0xa1, 0x2c, 0x5b, 0x65, 0xbe, 0xa4, 0x9a, 0x71, - 0x9a, 0x41, 0xda, 0xc6, 0xad, 0xdc, 0x27, 0x1b, 0xf7, 0x13, 0xda, 0xc6, 0xe5, 0xa1, 0x13, 0x1f, - 0x28, 0x38, 0x65, 0xec, 0xb8, 0x8d, 0xdc, 0x97, 0xa0, 0x2a, 0xc3, 0xca, 0x7a, 0x0a, 0xc7, 0x32, - 0xe9, 0x74, 0x11, 0xb6, 0x4f, 0xc2, 0x0f, 0x5f, 0x8c, 0x22, 0x63, 0x30, 0xaf, 0x05, 0xc9, 0xb4, - 0xe7, 0x05, 0xb7, 0xa9, 0xfd, 0x70, 0x3d, 0x26, 0xc2, 0xf9, 0x63, 0xdf, 0x2d, 0x41, 0xce, 0x3e, - 0x8a, 0xae, 0x49, 0x6d, 0xb4, 0xa4, 0xd6, 0x64, 0x7f, 0x86, 0x0b, 0xda, 0xe1, 0xa1, 0x77, 0x5c, - 0x3d, 0xbf, 0xbf, 0xe8, 0x7d, 0xa0, 0x8e, 0xc6, 0x53, 0x19, 0x37, 0x2a, 0x22, 0xef, 0x02, 0x80, - 0xb6, 0x35, 0x45, 0x3e, 0x85, 0x3a, 0x4e, 0xd7, 0x26, 0x29, 0x36, 0xb0, 0xd0, 0xf3, 0x30, 0xec, - 0xfa, 0x71, 0xe2, 0x78, 0xde, 0x65, 0xd7, 0x4f, 0x84, 0x7f, 0x53, 0xd9, 0x21, 0x0b, 0x1a, 0x84, - 0x4d, 0xbc, 0x73, 0xef, 0x32, 0xbe, 0x5f, 0x3f, 0xdf, 0x7d, 0x13, 0x1e, 0x99, 0x77, 0x13, 0x95, - 0x05, 0xa4, 0xe6, 0x1b, 0x35, 0x25, 0x95, 0xac, 0xb2, 0xba, 0x66, 0xb5, 0x19, 0x59, 0x38, 0xa5, - 0x74, 0xd2, 0x50, 0x36, 0x0b, 0xc7, 0x7e, 0x01, 0xce, 0xcc, 0xbb, 0xc9, 0x25, 0xd7, 0x23, 0x7d, - 0x32, 0xb1, 0x7f, 0x73, 0x10, 0x46, 0xcc, 0x3c, 0xd2, 0x7e, 0xc4, 0xf5, 0xe7, 0xa8, 0xb5, 0x28, - 0xde, 0xce, 0x55, 0xe7, 0x7e, 0x37, 0x8f, 0x9c, 0xd4, 0x9a, 0x3f, 0x62, 0x86, 0xc1, 0xa8, 0x79, - 0x62, 0xb3, 0x03, 0xe8, 0x36, 0x54, 0x36, 0x58, 0x96, 0x48, 0xb9, 0x88, 0x88, 0x8d, 0xbc, 0x11, - 0xd5, 0xcb, 0x91, 0xe7, 0x99, 0x70, 0x7e, 0x54, 0xc9, 0x47, 0xe9, 0xd4, 0x43, 0x23, 0xde, 0x58, - 0x28, 0x2b, 0x85, 0xd1, 0x4d, 0x25, 0x54, 0x0e, 0xa1, 0x12, 0x52, 0x02, 0x7a, 0xf0, 0x3e, 0x09, - 0x68, 0x96, 0xf1, 0x93, 0x6c, 0x32, 0x13, 0x54, 0x24, 0x48, 0x0c, 0xb1, 0x41, 0x30, 0x32, 0x7e, - 0x52, 0x60, 0x9c, 0xc5, 0x47, 0x1f, 0x55, 0x22, 0xbe, 0x5a, 0x84, 0x6b, 0xd8, 0x9c, 0xd1, 0xc7, - 0x2d, 0xdd, 0x3f, 0x53, 0x82, 0xb1, 0x79, 0xbf, 0xbd, 0x32, 0xbf, 0xd2, 0x5e, 0xf7, 0xdc, 0xfa, - 0x55, 0xb2, 0x4b, 0x45, 0xf8, 0x16, 0xd9, 0x5d, 0x98, 0x13, 0x2b, 0x48, 0xcd, 0x99, 0xab, 0xb4, - 0x11, 0x73, 0x18, 0x15, 0x46, 0x1b, 0xae, 0xdf, 0x24, 0x51, 0x18, 0xb9, 0xc2, 0x6b, 0x6b, 0x08, - 0xa3, 0x4b, 0x1a, 0x84, 0x4d, 0x3c, 0x4a, 0x3b, 0xb8, 0xed, 0x93, 0x28, 0x6b, 0x8b, 0x2f, 0xd3, - 0x46, 0xcc, 0x61, 0x14, 0x29, 0x89, 0xda, 0x71, 0x22, 0x26, 0xa3, 0x42, 0x5a, 0xa3, 0x8d, 0x98, - 0xc3, 0xe8, 0x4a, 0x8f, 0xdb, 0xeb, 0x2c, 0x20, 0x26, 0x93, 0x8d, 0xb1, 0xca, 0x9b, 0xb1, 0x84, - 0x53, 0xd4, 0x2d, 0xb2, 0x3b, 0x47, 0x37, 0xee, 0x99, 0xf4, 0xaf, 0xab, 0xbc, 0x19, 0x4b, 0x38, - 0xab, 0x94, 0x99, 0x1e, 0x8e, 0xef, 0xbb, 0x4a, 0x99, 0xe9, 0xee, 0x77, 0x71, 0x01, 0xfc, 0x8a, - 0x05, 0x23, 0x66, 0x18, 0x1b, 0x6a, 0x66, 0xcc, 0xf4, 0xe5, 0x8e, 0x42, 0xcb, 0x3f, 0x91, 0x77, - 0x4b, 0x5d, 0xd3, 0x4d, 0x82, 0x30, 0x7e, 0x86, 0xf8, 0x4d, 0xd7, 0x27, 0x2c, 0x10, 0x80, 0x87, - 0xbf, 0xa5, 0x62, 0xe4, 0x66, 0x83, 0x06, 0x39, 0x84, 0x9d, 0x6f, 0xdf, 0x84, 0x53, 0x1d, 0x39, - 0x7f, 0x3d, 0x98, 0x20, 0x07, 0x66, 0x5c, 0xdb, 0x18, 0x86, 0x29, 0x61, 0x59, 0xad, 0x69, 0x16, - 0x4e, 0xf1, 0x85, 0x44, 0x39, 0xad, 0xd6, 0x37, 0x49, 0x4b, 0xe5, 0x71, 0xb2, 0x23, 0x82, 0x1b, - 0x59, 0x20, 0xee, 0xc4, 0xb7, 0x3f, 0x6b, 0xc1, 0x68, 0x2a, 0x0d, 0xb3, 0x20, 0x63, 0x89, 0xad, - 0xb4, 0x80, 0x45, 0x55, 0xb2, 0x28, 0xf7, 0x32, 0x53, 0xa6, 0x7a, 0xa5, 0x69, 0x10, 0x36, 0xf1, - 0xec, 0x2f, 0x96, 0xa0, 0x2a, 0x83, 0x40, 0x7a, 0xe8, 0xca, 0xa7, 0x2d, 0x18, 0x55, 0xc7, 0x32, - 0xcc, 0xdf, 0x57, 0x2a, 0x22, 0x93, 0x85, 0xf6, 0x40, 0x79, 0x0c, 0xfc, 0x8d, 0x40, 0x5b, 0xee, - 0xd8, 0x64, 0x86, 0xd3, 0xbc, 0xd1, 0x0d, 0x80, 0x78, 0x37, 0x4e, 0x48, 0xcb, 0xf0, 0x3c, 0xda, - 0xc6, 0x8a, 0x9b, 0xac, 0x07, 0x11, 0xa1, 0xeb, 0xeb, 0x5a, 0xd0, 0x20, 0xab, 0x0a, 0x53, 0x9b, - 0x50, 0xba, 0x0d, 0x1b, 0x94, 0xec, 0xbf, 0x53, 0x82, 0x93, 0xd9, 0x2e, 0xa1, 0x0f, 0xc0, 0x88, - 0xe4, 0x6e, 0x5c, 0xb8, 0x27, 0x23, 0x5f, 0x46, 0xb0, 0x01, 0xbb, 0xbb, 0x37, 0x31, 0xd1, 0x79, - 0xe3, 0xe1, 0xa4, 0x89, 0x82, 0x53, 0xc4, 0xf8, 0xd9, 0x98, 0x38, 0xc4, 0x9d, 0xd9, 0x9d, 0x0e, - 0x43, 0x71, 0xc0, 0x65, 0x9c, 0x8d, 0x99, 0x50, 0x9c, 0xc1, 0x46, 0x2b, 0x70, 0xc6, 0x68, 0xb9, - 0x46, 0xdc, 0xe6, 0xe6, 0x7a, 0x10, 0xc9, 0x1d, 0xd8, 0xa3, 0x3a, 0x60, 0xae, 0x13, 0x07, 0xe7, - 0x3e, 0x49, 0xb5, 0x7d, 0xdd, 0x09, 0x9d, 0xba, 0x9b, 0xec, 0x0a, 0x57, 0xaa, 0x92, 0x4d, 0xb3, - 0xa2, 0x1d, 0x2b, 0x0c, 0xfb, 0x2a, 0xd4, 0x78, 0x80, 0x18, 0x59, 0x0b, 0x72, 0x76, 0xb8, 0x56, - 0x3f, 0x3b, 0x5c, 0x7b, 0x09, 0x06, 0x7a, 0x9c, 0x8e, 0x3d, 0x6d, 0x23, 0x5e, 0x82, 0x2a, 0x25, - 0x27, 0x6d, 0xc5, 0x22, 0x48, 0x06, 0x50, 0x95, 0xb7, 0xea, 0x20, 0x1b, 0xca, 0xae, 0x23, 0xcf, - 0x32, 0xd5, 0x18, 0x2d, 0xc4, 0x71, 0x9b, 0x39, 0x0d, 0x28, 0x10, 0x3d, 0x01, 0x65, 0xb2, 0x13, - 0x66, 0x0f, 0x2d, 0x2f, 0xee, 0x84, 0x6e, 0x44, 0x62, 0x8a, 0x44, 0x76, 0x42, 0x74, 0x0e, 0x4a, - 0x6e, 0x43, 0x68, 0x3c, 0x10, 0x38, 0xa5, 0x85, 0x39, 0x5c, 0x72, 0x1b, 0xf6, 0x0e, 0xd4, 0xd4, - 0x35, 0x3e, 0x68, 0x4b, 0x2a, 0x02, 0xab, 0x88, 0x10, 0x30, 0x49, 0xb7, 0x8b, 0x0a, 0x68, 0x03, - 0xe8, 0x94, 0xd3, 0xa2, 0x84, 0xd5, 0x79, 0x18, 0xa8, 0x07, 0x22, 0xf1, 0xbe, 0xaa, 0xc9, 0x30, - 0x0d, 0xc0, 0x20, 0xf6, 0x4d, 0x18, 0xbb, 0xea, 0x07, 0xb7, 0xd9, 0x1d, 0x04, 0xac, 0xe4, 0x1e, - 0x25, 0xbc, 0x41, 0x7f, 0x64, 0xed, 0x0d, 0x06, 0xc5, 0x1c, 0xa6, 0x6a, 0x91, 0x95, 0xba, 0xd5, - 0x22, 0xb3, 0x3f, 0x66, 0xc1, 0x88, 0xca, 0x5d, 0x9b, 0xdf, 0xde, 0xa2, 0x74, 0x9b, 0x51, 0xd0, - 0x0e, 0xb3, 0x74, 0xd9, 0x45, 0x5b, 0x98, 0xc3, 0xcc, 0xa4, 0xce, 0xd2, 0x01, 0x49, 0x9d, 0xe7, - 0x61, 0x60, 0xcb, 0xf5, 0x1b, 0x59, 0xff, 0xcc, 0x55, 0xd7, 0x6f, 0x60, 0x06, 0xa1, 0x5d, 0x38, - 0xa9, 0xba, 0x20, 0xb5, 0xcb, 0x0b, 0x30, 0xb2, 0xde, 0x76, 0xbd, 0x86, 0xac, 0x25, 0x98, 0x71, - 0xcf, 0xcc, 0x18, 0x30, 0x9c, 0xc2, 0xa4, 0x9b, 0xc4, 0x75, 0xd7, 0x77, 0xa2, 0xdd, 0x15, 0xad, - 0xce, 0x94, 0x84, 0x9b, 0x51, 0x10, 0x6c, 0x60, 0xd9, 0x9f, 0x2f, 0xc3, 0x58, 0x3a, 0x83, 0xaf, - 0x87, 0xbd, 0xda, 0x13, 0x50, 0x61, 0x49, 0x7d, 0xd9, 0x4f, 0xcb, 0xcb, 0xef, 0x71, 0x18, 0x8a, - 0x61, 0x90, 0x2f, 0xe7, 0x62, 0x6e, 0x5d, 0x52, 0x9d, 0x54, 0x4e, 0x1d, 0x16, 0x5f, 0x27, 0x24, - 0x88, 0x60, 0x85, 0x3e, 0x69, 0xc1, 0x50, 0x10, 0x9a, 0x35, 0xac, 0xde, 0x5f, 0x64, 0x76, 0xa3, - 0x48, 0xae, 0x12, 0xe6, 0xb5, 0xfa, 0xf4, 0xf2, 0x73, 0x48, 0xd6, 0xe7, 0xde, 0x0d, 0x23, 0x26, - 0xe6, 0x41, 0x16, 0x76, 0xd5, 0xb4, 0xb0, 0x3f, 0x6d, 0x4e, 0x0a, 0x91, 0xbf, 0xd9, 0xc3, 0x72, - 0xbb, 0x0e, 0x95, 0xba, 0x0a, 0x88, 0x38, 0x54, 0x05, 0x5a, 0x55, 0x09, 0x84, 0x1d, 0x8a, 0x71, - 0x6a, 0xf6, 0x77, 0x2c, 0x63, 0x7e, 0x60, 0x12, 0x2f, 0x34, 0x50, 0x04, 0xe5, 0xe6, 0xf6, 0x96, - 0xb0, 0x6b, 0xaf, 0x14, 0x34, 0xbc, 0xf3, 0xdb, 0x5b, 0x7a, 0x8e, 0x9b, 0xad, 0x98, 0x32, 0xeb, - 0xc1, 0xf3, 0x98, 0x4a, 0xf3, 0x2d, 0x1f, 0x9c, 0xe6, 0x6b, 0xbf, 0x51, 0x82, 0x53, 0x1d, 0x93, - 0x0a, 0xbd, 0x0e, 0x95, 0x88, 0xbe, 0xa5, 0x78, 0xbd, 0xc5, 0xc2, 0x12, 0x73, 0xe3, 0x85, 0x86, - 0xd6, 0x7b, 0xe9, 0x76, 0xcc, 0x59, 0xa2, 0x2b, 0x80, 0x74, 0xd8, 0x8e, 0x72, 0x7b, 0xf2, 0x57, - 0x3e, 0x27, 0x1e, 0x45, 0xd3, 0x1d, 0x18, 0x38, 0xe7, 0x29, 0xf4, 0x62, 0xd6, 0x7b, 0x5a, 0x4e, - 0x9f, 0xe3, 0xee, 0xe7, 0x08, 0xb5, 0xff, 0x71, 0x09, 0x46, 0x53, 0x25, 0xc5, 0x90, 0x07, 0x55, - 0xe2, 0xb1, 0x43, 0x0e, 0xa9, 0x6c, 0x8e, 0x5a, 0xa1, 0x5b, 0x29, 0xc8, 0x8b, 0x82, 0x2e, 0x56, - 0x1c, 0x1e, 0x8c, 0x60, 0x83, 0x17, 0x60, 0x44, 0x76, 0xe8, 0xfd, 0x4e, 0xcb, 0x13, 0x03, 0xa8, - 0xe6, 0xe8, 0x45, 0x03, 0x86, 0x53, 0x98, 0xf6, 0xef, 0x94, 0x61, 0x9c, 0x9f, 0x0a, 0x35, 0xd4, - 0xcc, 0x5b, 0x92, 0x9b, 0xb7, 0xbf, 0xa8, 0x0b, 0xff, 0xf1, 0x81, 0x5c, 0x3f, 0xea, 0x85, 0x18, - 0xf9, 0x8c, 0x7a, 0x8a, 0x54, 0xfb, 0x6a, 0x26, 0x52, 0x8d, 0xdb, 0xf0, 0xcd, 0x63, 0xea, 0xd1, - 0xf7, 0x57, 0xe8, 0xda, 0xdf, 0x2c, 0xc1, 0x89, 0xcc, 0x6d, 0x23, 0xe8, 0xf3, 0xe9, 0x02, 0xd5, - 0x56, 0x11, 0x0e, 0xfa, 0x7d, 0x2f, 0xa0, 0xe8, 0xaf, 0x4c, 0xf5, 0x7d, 0x5a, 0x2a, 0xf6, 0x1f, - 0x94, 0x60, 0x2c, 0x7d, 0x4d, 0xca, 0x03, 0x38, 0x52, 0xef, 0x80, 0x1a, 0xbb, 0x09, 0x80, 0x5d, - 0xff, 0xca, 0xfd, 0xfb, 0xbc, 0xe8, 0xba, 0x6c, 0xc4, 0x1a, 0xfe, 0x40, 0x54, 0xff, 0xb6, 0xff, - 0x96, 0x05, 0x67, 0xf9, 0x5b, 0x66, 0xe7, 0xe1, 0x5f, 0xca, 0x1b, 0xdd, 0x57, 0x8a, 0xed, 0x60, - 0xa6, 0x60, 0xe5, 0x41, 0xe3, 0xcb, 0xae, 0x9d, 0x14, 0xbd, 0x4d, 0x4f, 0x85, 0x07, 0xb0, 0xb3, - 0x7d, 0x4d, 0x06, 0xfb, 0x0f, 0xca, 0xa0, 0x6f, 0xda, 0x44, 0xae, 0x48, 0x44, 0x2d, 0xa4, 0x70, - 0xe7, 0xea, 0xae, 0x5f, 0xd7, 0x77, 0x7a, 0x56, 0x33, 0x79, 0xa8, 0xbf, 0x60, 0xc1, 0xb0, 0xeb, - 0xbb, 0x89, 0xeb, 0xb0, 0x3d, 0x79, 0x31, 0xb7, 0x00, 0x2a, 0x76, 0x0b, 0x9c, 0x72, 0x10, 0x99, - 0x87, 0x42, 0x8a, 0x19, 0x36, 0x39, 0xa3, 0x0f, 0x89, 0x60, 0xf2, 0x72, 0x61, 0xd9, 0xdc, 0xd5, - 0x4c, 0x04, 0x79, 0x48, 0x0d, 0xaf, 0x24, 0x2a, 0xa8, 0x08, 0x02, 0xa6, 0xa4, 0x54, 0x0d, 0x68, - 0x7d, 0xe7, 0x39, 0x6d, 0xc6, 0x9c, 0x91, 0x1d, 0x03, 0xea, 0x1c, 0x8b, 0x3e, 0x03, 0x75, 0xa7, - 0xa0, 0xe6, 0xb4, 0x93, 0xa0, 0x45, 0x87, 0x49, 0x9c, 0x5b, 0xe9, 0x50, 0x64, 0x09, 0xc0, 0x1a, - 0xc7, 0xfe, 0x7c, 0x05, 0x32, 0x99, 0xa1, 0x68, 0xc7, 0xbc, 0x25, 0xd6, 0x2a, 0xf6, 0x96, 0x58, - 0xd5, 0x99, 0xbc, 0x9b, 0x62, 0x51, 0x13, 0x2a, 0xe1, 0xa6, 0x13, 0x4b, 0xb3, 0xfa, 0x25, 0xb5, - 0x8f, 0xa3, 0x8d, 0x77, 0xf7, 0x26, 0x7e, 0xb2, 0x37, 0x17, 0x2e, 0x9d, 0xab, 0x53, 0xbc, 0xdc, - 0x8d, 0x66, 0xcd, 0x68, 0x60, 0x4e, 0xbf, 0x9f, 0x7b, 0x10, 0x3f, 0x2e, 0xae, 0x3c, 0xc0, 0x24, - 0x6e, 0x7b, 0x89, 0x98, 0x0d, 0x2f, 0x15, 0xb8, 0xca, 0x38, 0x61, 0x5d, 0x5e, 0x81, 0xff, 0xc7, - 0x06, 0x53, 0xf4, 0x01, 0xa8, 0xc5, 0x89, 0x13, 0x25, 0x87, 0xcc, 0x42, 0x56, 0x83, 0xbe, 0x2a, - 0x89, 0x60, 0x4d, 0x0f, 0xbd, 0xcc, 0xea, 0x18, 0xbb, 0xf1, 0xe6, 0x21, 0x73, 0x40, 0x64, 0xcd, - 0x63, 0x41, 0x01, 0x1b, 0xd4, 0xd0, 0x05, 0x00, 0x36, 0xb7, 0x79, 0xe0, 0x63, 0x95, 0x79, 0x99, - 0x94, 0x28, 0xc4, 0x0a, 0x82, 0x0d, 0x2c, 0xfb, 0x47, 0x21, 0x5d, 0x1f, 0x04, 0x4d, 0xc8, 0x72, - 0x24, 0xdc, 0xa5, 0xcd, 0x72, 0x39, 0x52, 0x95, 0x43, 0x7e, 0xdd, 0x02, 0xb3, 0x88, 0x09, 0x7a, - 0x8d, 0x57, 0x4b, 0xb1, 0x8a, 0x38, 0x86, 0x34, 0xe8, 0x4e, 0x2e, 0x39, 0x61, 0xe6, 0x3c, 0x5c, - 0x96, 0x4c, 0x39, 0xf7, 0x2e, 0xa8, 0x4a, 0x68, 0x5f, 0x46, 0xdd, 0x47, 0xe1, 0x74, 0xf6, 0x0e, - 0x7d, 0x71, 0x84, 0x75, 0xb0, 0xeb, 0x47, 0xfa, 0x73, 0x4a, 0xdd, 0xfc, 0x39, 0x3d, 0xdc, 0x15, - 0xfc, 0x1b, 0x16, 0x9c, 0x3f, 0xe8, 0xaa, 0x7f, 0xf4, 0x28, 0x0c, 0xdc, 0x76, 0x22, 0x59, 0x60, - 0x9e, 0x09, 0xca, 0x9b, 0x4e, 0xe4, 0x63, 0xd6, 0x8a, 0x76, 0x61, 0x90, 0x47, 0xc7, 0x09, 0x6b, - 0xfd, 0x88, 0x6b, 0x23, 0x67, 0x38, 0xf4, 0x76, 0x81, 0x47, 0xe6, 0x61, 0xc1, 0xd0, 0xfe, 0xae, - 0x05, 0x68, 0x79, 0x9b, 0x44, 0x91, 0xdb, 0x30, 0xe2, 0xf9, 0xd8, 0xd5, 0x41, 0xc6, 0x15, 0x41, - 0x66, 0xca, 0x6f, 0xe6, 0xea, 0x20, 0xe3, 0x5f, 0xfe, 0xd5, 0x41, 0xa5, 0xfe, 0xae, 0x0e, 0x42, - 0xcb, 0x70, 0xb6, 0xc5, 0xb7, 0x1b, 0xfc, 0x3a, 0x0e, 0xbe, 0xf7, 0x50, 0x09, 0x76, 0x8f, 0xdc, - 0xd9, 0x9b, 0x38, 0xbb, 0x94, 0x87, 0x80, 0xf3, 0x9f, 0xb3, 0xdf, 0x05, 0x88, 0x87, 0xf1, 0xcd, - 0xe6, 0x05, 0x3e, 0x75, 0x75, 0xbf, 0xd8, 0x5f, 0xa9, 0xc0, 0x89, 0x4c, 0xf9, 0x61, 0xba, 0xd5, - 0xeb, 0x8c, 0xb4, 0x3a, 0xb2, 0xfe, 0xee, 0xec, 0x5e, 0x4f, 0xb1, 0x5b, 0x3e, 0x54, 0x5c, 0x3f, - 0x6c, 0x27, 0xc5, 0xe4, 0xd4, 0xf2, 0x4e, 0x2c, 0x50, 0x82, 0x86, 0xbb, 0x98, 0xfe, 0xc5, 0x9c, - 0x4d, 0x91, 0x91, 0x60, 0x29, 0x63, 0x7c, 0xe0, 0x3e, 0xb9, 0x03, 0x3e, 0xae, 0xe3, 0xb2, 0x2a, - 0x45, 0x38, 0x16, 0x33, 0x93, 0xe5, 0xb8, 0xcf, 0xed, 0x7f, 0xad, 0x04, 0xc3, 0xc6, 0x47, 0x43, - 0xbf, 0x9c, 0x2e, 0xf1, 0x65, 0x15, 0xf7, 0x4a, 0x8c, 0xfe, 0xa4, 0x2e, 0xe2, 0xc5, 0x5f, 0xe9, - 0xc9, 0xce, 0xea, 0x5e, 0x77, 0xf7, 0x26, 0x4e, 0x66, 0xea, 0x77, 0xa5, 0x2a, 0x7e, 0x9d, 0xfb, - 0x08, 0x9c, 0xc8, 0x90, 0xc9, 0x79, 0xe5, 0x35, 0xf3, 0x95, 0x8f, 0xec, 0x96, 0x32, 0x87, 0xec, - 0x9b, 0x74, 0xc8, 0x44, 0x5a, 0x61, 0xe0, 0x91, 0x1e, 0x7c, 0xb0, 0x99, 0xec, 0xe1, 0x52, 0x8f, - 0xd9, 0xc3, 0x4f, 0x41, 0x35, 0x0c, 0x3c, 0xb7, 0xee, 0xaa, 0x3a, 0x98, 0x2c, 0x5f, 0x79, 0x45, - 0xb4, 0x61, 0x05, 0x45, 0xb7, 0xa1, 0x76, 0xeb, 0x76, 0xc2, 0x4f, 0x7f, 0x84, 0x7f, 0xbb, 0xa8, - 0x43, 0x1f, 0x65, 0xb4, 0xa8, 0xe3, 0x25, 0xac, 0x79, 0x21, 0x1b, 0x06, 0x99, 0x12, 0x94, 0xa9, - 0x10, 0xcc, 0xf7, 0xce, 0xb4, 0x63, 0x8c, 0x05, 0xc4, 0xfe, 0x7a, 0x0d, 0xce, 0xe4, 0xd5, 0x80, - 0x47, 0x1f, 0x86, 0x41, 0xde, 0xc7, 0x62, 0xae, 0x19, 0xc9, 0xe3, 0x31, 0xcf, 0x08, 0x8a, 0x6e, - 0xb1, 0xdf, 0x58, 0xf0, 0x14, 0xdc, 0x3d, 0x67, 0x5d, 0xcc, 0x90, 0xe3, 0xe1, 0xbe, 0xe8, 0x68, - 0xee, 0x8b, 0x0e, 0xe7, 0xee, 0x39, 0xeb, 0x68, 0x07, 0x2a, 0x4d, 0x37, 0x21, 0x8e, 0x70, 0x22, - 0xdc, 0x3c, 0x16, 0xe6, 0xc4, 0xe1, 0x56, 0x1a, 0xfb, 0x89, 0x39, 0x43, 0xf4, 0x35, 0x0b, 0x4e, - 0xac, 0xa7, 0x4b, 0x05, 0x08, 0xe1, 0xe9, 0x1c, 0x43, 0x9d, 0xff, 0x34, 0x23, 0x7e, 0x77, 0x56, - 0xa6, 0x11, 0x67, 0xbb, 0x83, 0x3e, 0x61, 0xc1, 0xd0, 0x86, 0xeb, 0x19, 0x25, 0x9f, 0x8f, 0xe1, - 0xe3, 0x5c, 0x62, 0x0c, 0xf4, 0x8e, 0x83, 0xff, 0x8f, 0xb1, 0xe4, 0xdc, 0x4d, 0x53, 0x0d, 0x1e, - 0x55, 0x53, 0x0d, 0xdd, 0x27, 0x4d, 0xf5, 0x29, 0x0b, 0x6a, 0x6a, 0xa4, 0x45, 0xfa, 0xf7, 0x07, - 0x8e, 0xf1, 0x93, 0x73, 0xcf, 0x89, 0xfa, 0x8b, 0x35, 0x73, 0xf4, 0x05, 0x0b, 0x86, 0x9d, 0xd7, - 0xdb, 0x11, 0x69, 0x90, 0xed, 0x20, 0x8c, 0x45, 0x45, 0xb3, 0x57, 0x8a, 0xef, 0xcc, 0x34, 0x65, - 0x32, 0x47, 0xb6, 0x97, 0xc3, 0x58, 0xa4, 0x69, 0xe9, 0x06, 0x6c, 0x76, 0xc1, 0xde, 0x2b, 0xc1, - 0xc4, 0x01, 0x14, 0xd0, 0x0b, 0x30, 0x12, 0x44, 0x4d, 0xc7, 0x77, 0x5f, 0x37, 0x6b, 0x7f, 0x28, - 0x2b, 0x6b, 0xd9, 0x80, 0xe1, 0x14, 0xa6, 0x99, 0xa0, 0x5e, 0x3a, 0x20, 0x41, 0xfd, 0x3c, 0x0c, - 0x44, 0x24, 0x0c, 0xb2, 0x9b, 0x05, 0x96, 0x22, 0xc1, 0x20, 0xe8, 0x31, 0x28, 0x3b, 0xa1, 0x2b, - 0xa2, 0xda, 0xd4, 0x1e, 0x68, 0x7a, 0x65, 0x01, 0xd3, 0xf6, 0x54, 0xbd, 0x8c, 0xca, 0x3d, 0xa9, - 0x97, 0x41, 0xd5, 0x80, 0x38, 0xbb, 0x18, 0xd4, 0x6a, 0x20, 0x7d, 0xa6, 0x60, 0xbf, 0x51, 0x86, - 0xc7, 0xf6, 0x9d, 0x2f, 0x3a, 0xa8, 0xcf, 0xda, 0x27, 0xa8, 0x4f, 0x0e, 0x4f, 0xe9, 0xa0, 0xe1, - 0x29, 0x77, 0x19, 0x9e, 0x4f, 0xd0, 0x65, 0x20, 0x6b, 0xa6, 0x14, 0x73, 0x75, 0x62, 0xb7, 0x12, - 0x2c, 0x62, 0x05, 0x48, 0x28, 0xd6, 0x7c, 0xe9, 0x1e, 0x20, 0x95, 0x9c, 0x5d, 0x29, 0x42, 0x0d, - 0x74, 0xad, 0xa1, 0xc2, 0xe7, 0x7e, 0xb7, 0x8c, 0x6f, 0xfb, 0xcb, 0x25, 0x78, 0xa2, 0x07, 0xe9, - 0x6d, 0xce, 0x62, 0xab, 0xc7, 0x59, 0xfc, 0xfd, 0xfd, 0x99, 0xec, 0xbf, 0x6c, 0xc1, 0xb9, 0xee, - 0xca, 0x03, 0x3d, 0x0b, 0xc3, 0xeb, 0x91, 0xe3, 0xd7, 0x37, 0xd9, 0x75, 0xb0, 0x72, 0x50, 0xd8, - 0x58, 0xeb, 0x66, 0x6c, 0xe2, 0xd0, 0xed, 0x2d, 0x8f, 0x49, 0x30, 0x30, 0x64, 0x32, 0x2d, 0xdd, - 0xde, 0xae, 0x65, 0x81, 0xb8, 0x13, 0xdf, 0xfe, 0xb3, 0x52, 0x7e, 0xb7, 0xb8, 0x91, 0xd1, 0xcf, - 0x77, 0x12, 0x5f, 0xa1, 0xd4, 0x83, 0x2c, 0x29, 0xdf, 0x6b, 0x59, 0x32, 0xd0, 0x4d, 0x96, 0xa0, - 0x39, 0x38, 0x69, 0x5c, 0x17, 0xc4, 0x13, 0xa4, 0x79, 0xf4, 0xae, 0xaa, 0x1a, 0xb2, 0x92, 0x81, - 0xe3, 0x8e, 0x27, 0xd0, 0xd3, 0x50, 0x75, 0xfd, 0x98, 0xd4, 0xdb, 0x11, 0x8f, 0x1a, 0x37, 0x92, - 0xd2, 0x16, 0x44, 0x3b, 0x56, 0x18, 0xf6, 0xaf, 0x94, 0xe0, 0x91, 0xae, 0x76, 0xd6, 0x3d, 0x92, - 0x5d, 0xe6, 0xe7, 0x18, 0xb8, 0x37, 0x9f, 0xc3, 0x1c, 0xa4, 0xca, 0x81, 0x83, 0xf4, 0x87, 0xdd, - 0x27, 0x26, 0xb5, 0xb9, 0x7f, 0x60, 0x47, 0xe9, 0x45, 0x18, 0x75, 0xc2, 0x90, 0xe3, 0xb1, 0xe0, - 0xcf, 0x4c, 0xd5, 0xa0, 0x69, 0x13, 0x88, 0xd3, 0xb8, 0x3d, 0x69, 0xcf, 0x3f, 0xb6, 0xa0, 0x86, - 0xc9, 0x06, 0x97, 0x0e, 0xe8, 0x96, 0x18, 0x22, 0xab, 0x88, 0xa2, 0xa7, 0x74, 0x60, 0x63, 0x97, - 0x15, 0x03, 0xcd, 0x1b, 0xec, 0xa3, 0xa6, 0x23, 0xaa, 0x8b, 0x85, 0xca, 0xdd, 0x2f, 0x16, 0xb2, - 0xbf, 0x39, 0x44, 0x5f, 0x2f, 0x0c, 0x66, 0x23, 0xd2, 0x88, 0xe9, 0xf7, 0x6d, 0x47, 0x9e, 0x98, - 0x24, 0xea, 0xfb, 0x5e, 0xc7, 0x8b, 0x98, 0xb6, 0xa7, 0x8e, 0x62, 0x4a, 0x7d, 0xd5, 0x4c, 0x29, - 0x1f, 0x58, 0x33, 0xe5, 0x45, 0x18, 0x8d, 0xe3, 0xcd, 0x95, 0xc8, 0xdd, 0x76, 0x12, 0x72, 0x95, - 0xec, 0x0a, 0x2b, 0x4b, 0xd7, 0x39, 0x58, 0xbd, 0xac, 0x81, 0x38, 0x8d, 0x8b, 0xe6, 0xe1, 0x94, - 0xae, 0x5c, 0x42, 0xa2, 0x84, 0xa5, 0x0a, 0xf0, 0x99, 0xa0, 0x92, 0x9a, 0x75, 0xad, 0x13, 0x81, - 0x80, 0x3b, 0x9f, 0xa1, 0xf2, 0x2d, 0xd5, 0x48, 0x3b, 0x32, 0x98, 0x96, 0x6f, 0x29, 0x3a, 0xb4, - 0x2f, 0x1d, 0x4f, 0xa0, 0x25, 0x38, 0xcd, 0x27, 0xc6, 0x74, 0x18, 0x1a, 0x6f, 0x34, 0x94, 0x2e, - 0x36, 0x39, 0xdf, 0x89, 0x82, 0xf3, 0x9e, 0x43, 0xcf, 0xc3, 0xb0, 0x6a, 0x5e, 0x98, 0x13, 0xa7, - 0x08, 0xca, 0x8b, 0xa1, 0xc8, 0x2c, 0x34, 0xb0, 0x89, 0x87, 0xde, 0x0f, 0x0f, 0xeb, 0xbf, 0x3c, - 0x9f, 0x8c, 0x1f, 0xad, 0xcd, 0x89, 0xa2, 0x50, 0xea, 0x1a, 0x9b, 0xf9, 0x5c, 0xb4, 0x06, 0xee, - 0xf6, 0x3c, 0x5a, 0x87, 0x73, 0x0a, 0x74, 0xd1, 0x4f, 0x58, 0x72, 0x48, 0x4c, 0x66, 0x9c, 0x98, - 0x5c, 0x8f, 0x3c, 0x71, 0x0f, 0xb0, 0xba, 0x61, 0x74, 0xde, 0x4d, 0x2e, 0xe7, 0x61, 0xe2, 0x45, - 0xbc, 0x0f, 0x15, 0x34, 0x05, 0x35, 0xe2, 0x3b, 0xeb, 0x1e, 0x59, 0x9e, 0x5d, 0x60, 0xc5, 0xa5, - 0x8c, 0x93, 0xbc, 0x8b, 0x12, 0x80, 0x35, 0x8e, 0x8a, 0x30, 0x1d, 0xe9, 0x7a, 0xdb, 0xed, 0x0a, - 0x9c, 0x69, 0xd6, 0x43, 0x6a, 0x7b, 0xb8, 0x75, 0x32, 0x5d, 0x67, 0x01, 0x75, 0xf4, 0xc3, 0xf0, - 0x2a, 0xa0, 0x2a, 0x16, 0x7b, 0x7e, 0x76, 0xa5, 0x03, 0x07, 0xe7, 0x3e, 0xc9, 0x02, 0x2f, 0xa3, - 0x60, 0x67, 0x77, 0xfc, 0x74, 0x26, 0xf0, 0x92, 0x36, 0x62, 0x0e, 0x43, 0x57, 0x00, 0xb1, 0xc0, - 0xfe, 0xcb, 0x49, 0x12, 0x2a, 0x63, 0x67, 0xfc, 0x0c, 0x7b, 0x25, 0x15, 0x46, 0x76, 0xa9, 0x03, - 0x03, 0xe7, 0x3c, 0x65, 0xff, 0x5b, 0x0b, 0x46, 0xd5, 0x7a, 0xbd, 0x07, 0xa9, 0x2d, 0x5e, 0x3a, - 0xb5, 0x65, 0xfe, 0xe8, 0x12, 0x8f, 0xf5, 0xbc, 0x4b, 0x48, 0xf3, 0xcf, 0x0d, 0x03, 0x68, 0xa9, - 0xa8, 0x14, 0x92, 0xd5, 0x55, 0x21, 0x3d, 0xb0, 0x12, 0x29, 0xaf, 0x92, 0x4c, 0xe5, 0xfe, 0x56, - 0x92, 0x59, 0x85, 0xb3, 0xd2, 0x5c, 0xe0, 0x67, 0x45, 0x97, 0x83, 0x58, 0x09, 0xb8, 0xea, 0xcc, - 0x63, 0x82, 0xd0, 0xd9, 0x85, 0x3c, 0x24, 0x9c, 0xff, 0x6c, 0xca, 0x4a, 0x19, 0x3a, 0xc8, 0x4a, - 0xd1, 0x6b, 0x7a, 0x71, 0x43, 0xde, 0x22, 0x93, 0x59, 0xd3, 0x8b, 0x97, 0x56, 0xb1, 0xc6, 0xc9, - 0x17, 0xec, 0xb5, 0x82, 0x04, 0x3b, 0xf4, 0x2d, 0xd8, 0xa5, 0x88, 0x19, 0xee, 0x2a, 0x62, 0xa4, - 0x4f, 0x7a, 0xa4, 0xab, 0x4f, 0xfa, 0x3d, 0x30, 0xe6, 0xfa, 0x9b, 0x24, 0x72, 0x13, 0xd2, 0x60, - 0x6b, 0x81, 0x89, 0x9f, 0xaa, 0x56, 0xeb, 0x0b, 0x29, 0x28, 0xce, 0x60, 0xa7, 0xe5, 0xe2, 0x58, - 0x0f, 0x72, 0xb1, 0x8b, 0x36, 0x3a, 0x51, 0x8c, 0x36, 0x3a, 0x79, 0x74, 0x6d, 0x74, 0xea, 0x58, - 0xb5, 0x11, 0x2a, 0x44, 0x1b, 0xf5, 0x24, 0xe8, 0x8d, 0xed, 0xdf, 0x99, 0x03, 0xb6, 0x7f, 0xdd, - 0x54, 0xd1, 0xd9, 0x43, 0xab, 0xa2, 0x7c, 0x2d, 0xf3, 0xd0, 0xa1, 0xb4, 0xcc, 0xa7, 0x4a, 0x70, - 0x56, 0xcb, 0x61, 0x3a, 0xfb, 0xdd, 0x0d, 0x2a, 0x89, 0xd8, 0x45, 0x64, 0xfc, 0xdc, 0xc6, 0xc8, - 0xb4, 0xd2, 0x49, 0x5b, 0x0a, 0x82, 0x0d, 0x2c, 0x96, 0xb0, 0x44, 0x22, 0x56, 0x56, 0x38, 0x2b, - 0xa4, 0x67, 0x45, 0x3b, 0x56, 0x18, 0x74, 0x7e, 0xd1, 0xdf, 0x22, 0x09, 0x34, 0x5b, 0x3c, 0x6f, - 0x56, 0x83, 0xb0, 0x89, 0x87, 0x9e, 0xe2, 0x4c, 0x98, 0x80, 0xa0, 0x82, 0x7a, 0x44, 0xdc, 0x81, - 0x2c, 0x65, 0x82, 0x82, 0xca, 0xee, 0xb0, 0xcc, 0xb4, 0x4a, 0x67, 0x77, 0x58, 0x08, 0x94, 0xc2, - 0xb0, 0xff, 0x9b, 0x05, 0x8f, 0xe4, 0x0e, 0xc5, 0x3d, 0x50, 0xbe, 0x3b, 0x69, 0xe5, 0xbb, 0x5a, - 0xd4, 0x76, 0xc3, 0x78, 0x8b, 0x2e, 0x8a, 0xf8, 0x5f, 0x5b, 0x30, 0xa6, 0xf1, 0xef, 0xc1, 0xab, - 0xba, 0xe9, 0x57, 0x2d, 0x6e, 0x67, 0x55, 0xeb, 0x78, 0xb7, 0xdf, 0x29, 0x81, 0x2a, 0x68, 0x39, - 0x5d, 0x97, 0xe5, 0x82, 0x0f, 0x38, 0x49, 0xdc, 0x85, 0x41, 0x76, 0x10, 0x1a, 0x17, 0x13, 0xe4, - 0x91, 0xe6, 0xcf, 0x0e, 0x55, 0xf5, 0x21, 0x33, 0xfb, 0x1b, 0x63, 0xc1, 0x90, 0x15, 0xbd, 0x76, - 0x63, 0x2a, 0xcd, 0x1b, 0x22, 0x2d, 0x4b, 0x17, 0xbd, 0x16, 0xed, 0x58, 0x61, 0x50, 0xf5, 0xe0, - 0xd6, 0x03, 0x7f, 0xd6, 0x73, 0x62, 0x79, 0xcf, 0xa7, 0x52, 0x0f, 0x0b, 0x12, 0x80, 0x35, 0x0e, - 0x3b, 0x23, 0x75, 0xe3, 0xd0, 0x73, 0x76, 0x8d, 0xfd, 0xb3, 0x51, 0xec, 0x40, 0x81, 0xb0, 0x89, - 0x67, 0xb7, 0x60, 0x3c, 0xfd, 0x12, 0x73, 0x64, 0x83, 0x05, 0x28, 0xf6, 0x34, 0x9c, 0x53, 0x50, - 0x73, 0xd8, 0x53, 0x8b, 0x6d, 0x27, 0x7b, 0x3d, 0xff, 0xb4, 0x04, 0x60, 0x8d, 0x63, 0xff, 0xaa, - 0x05, 0xa7, 0x73, 0x06, 0xad, 0xc0, 0xb4, 0xb7, 0x44, 0x4b, 0x9b, 0x3c, 0xc5, 0xfe, 0x76, 0x18, - 0x6a, 0x90, 0x0d, 0x47, 0x86, 0xc0, 0x19, 0xb2, 0x7d, 0x8e, 0x37, 0x63, 0x09, 0xb7, 0xff, 0x8b, - 0x05, 0x27, 0xd2, 0x7d, 0x8d, 0x59, 0x2a, 0x09, 0x1f, 0x26, 0x37, 0xae, 0x07, 0xdb, 0x24, 0xda, - 0xa5, 0x6f, 0x6e, 0x65, 0x52, 0x49, 0x3a, 0x30, 0x70, 0xce, 0x53, 0xac, 0x9c, 0x6d, 0x43, 0x8d, - 0xb6, 0x9c, 0x91, 0x37, 0x8a, 0x9c, 0x91, 0xfa, 0x63, 0x9a, 0xc7, 0xe5, 0x8a, 0x25, 0x36, 0xf9, - 0xdb, 0xdf, 0x1d, 0x00, 0x95, 0x64, 0xcb, 0xe2, 0x8f, 0x0a, 0x8a, 0xde, 0xea, 0x37, 0x83, 0x48, - 0x4d, 0x86, 0x81, 0xfd, 0x02, 0x02, 0xb8, 0x97, 0xc4, 0x74, 0x5d, 0xaa, 0x37, 0x5c, 0xd3, 0x20, - 0x6c, 0xe2, 0xd1, 0x9e, 0x78, 0xee, 0x36, 0xe1, 0x0f, 0x0d, 0xa6, 0x7b, 0xb2, 0x28, 0x01, 0x58, - 0xe3, 0xd0, 0x9e, 0x34, 0xdc, 0x8d, 0x0d, 0xb1, 0xe5, 0x57, 0x3d, 0xa1, 0xa3, 0x83, 0x19, 0x84, - 0x57, 0x28, 0x0f, 0xb6, 0x84, 0x15, 0x6c, 0x54, 0x28, 0x0f, 0xb6, 0x30, 0x83, 0x50, 0xbb, 0xcd, - 0x0f, 0xa2, 0x96, 0xe3, 0xb9, 0xaf, 0x93, 0x86, 0xe2, 0x22, 0xac, 0x5f, 0x65, 0xb7, 0x5d, 0xeb, - 0x44, 0xc1, 0x79, 0xcf, 0xd1, 0x19, 0x18, 0x46, 0xa4, 0xe1, 0xd6, 0x13, 0x93, 0x1a, 0xa4, 0x67, - 0xe0, 0x4a, 0x07, 0x06, 0xce, 0x79, 0x0a, 0x4d, 0xc3, 0x09, 0x99, 0x24, 0x9d, 0xbe, 0x37, 0x56, - 0xed, 0x46, 0x70, 0x1a, 0x8c, 0xb3, 0xf8, 0x54, 0xaa, 0xb5, 0x44, 0x01, 0x2f, 0x66, 0x2c, 0x1b, - 0x52, 0x4d, 0x16, 0xf6, 0xc2, 0x0a, 0xc3, 0xfe, 0x78, 0x99, 0x6a, 0xe1, 0x2e, 0x85, 0xeb, 0xee, - 0x59, 0xb4, 0x60, 0x7a, 0x46, 0x0e, 0xf4, 0x30, 0x23, 0x9f, 0x83, 0x91, 0x5b, 0x71, 0xe0, 0xab, - 0x48, 0xbc, 0x4a, 0xd7, 0x48, 0x3c, 0x03, 0x2b, 0x3f, 0x12, 0x6f, 0xb0, 0xa8, 0x48, 0xbc, 0xa1, - 0x43, 0x46, 0xe2, 0x7d, 0xbb, 0x02, 0xea, 0xfe, 0x96, 0x6b, 0x24, 0xb9, 0x1d, 0x44, 0x5b, 0xae, - 0xdf, 0x64, 0xf9, 0xe0, 0x5f, 0xb3, 0x60, 0x84, 0xaf, 0x97, 0x45, 0x33, 0x93, 0x6a, 0xa3, 0xa0, - 0x3b, 0x38, 0x52, 0xcc, 0x26, 0xd7, 0x0c, 0x46, 0x99, 0xcb, 0x5f, 0x4d, 0x10, 0x4e, 0xf5, 0x08, - 0x7d, 0x04, 0x40, 0xfa, 0x47, 0x37, 0xa4, 0xc8, 0x5c, 0x28, 0xa6, 0x7f, 0x98, 0x6c, 0x68, 0x1b, - 0x78, 0x4d, 0x31, 0xc1, 0x06, 0x43, 0xf4, 0x29, 0x9d, 0x65, 0xc6, 0x43, 0xf6, 0x3f, 0x74, 0x2c, - 0x63, 0xd3, 0x4b, 0x8e, 0x19, 0x86, 0x21, 0xd7, 0x6f, 0xd2, 0x79, 0x22, 0x22, 0x96, 0xde, 0x96, - 0x57, 0x98, 0x61, 0x31, 0x70, 0x1a, 0x33, 0x8e, 0xe7, 0xf8, 0x75, 0x12, 0x2d, 0x70, 0x74, 0xf3, - 0x72, 0x75, 0xd6, 0x80, 0x25, 0xa1, 0x8e, 0x4b, 0x66, 0x2a, 0xbd, 0x5c, 0x32, 0x73, 0xee, 0xbd, - 0x70, 0xaa, 0xe3, 0x63, 0xf6, 0x95, 0x52, 0x76, 0xf8, 0x6c, 0x34, 0xfb, 0x9f, 0x0c, 0x6a, 0xa5, - 0x75, 0x2d, 0x68, 0xf0, 0xab, 0x4e, 0x22, 0xfd, 0x45, 0x85, 0x8d, 0x5b, 0xe0, 0x14, 0x31, 0x2e, - 0x68, 0x57, 0x8d, 0xd8, 0x64, 0x49, 0xe7, 0x68, 0xe8, 0x44, 0xc4, 0x3f, 0xee, 0x39, 0xba, 0xa2, - 0x98, 0x60, 0x83, 0x21, 0xda, 0x4c, 0xe5, 0x94, 0x5c, 0x3a, 0x7a, 0x4e, 0x09, 0x2b, 0x59, 0x95, - 0x77, 0x3b, 0xc1, 0x17, 0x2c, 0x18, 0xf3, 0x53, 0x33, 0xb7, 0x98, 0x30, 0xd2, 0xfc, 0x55, 0xc1, - 0xaf, 0xff, 0x4a, 0xb7, 0xe1, 0x0c, 0xff, 0x3c, 0x95, 0x56, 0xe9, 0x53, 0xa5, 0xe9, 0x3b, 0x93, - 0x06, 0xbb, 0xdd, 0x99, 0x84, 0x7c, 0x75, 0x93, 0xdd, 0x50, 0xe1, 0x37, 0xd9, 0x41, 0xce, 0x2d, - 0x76, 0x37, 0xa1, 0x56, 0x8f, 0x88, 0x93, 0x1c, 0xf2, 0x52, 0x33, 0x76, 0x40, 0x3f, 0x2b, 0x09, - 0x60, 0x4d, 0xcb, 0xfe, 0x9f, 0x03, 0x70, 0x52, 0x8e, 0x88, 0x0c, 0x41, 0xa7, 0xfa, 0x91, 0xf3, - 0xd5, 0xc6, 0xad, 0xd2, 0x8f, 0x97, 0x25, 0x00, 0x6b, 0x1c, 0x6a, 0x8f, 0xb5, 0x63, 0xb2, 0x1c, - 0x12, 0x7f, 0xd1, 0x5d, 0x8f, 0xc5, 0x39, 0xa7, 0x5a, 0x28, 0xd7, 0x35, 0x08, 0x9b, 0x78, 0xd4, - 0x18, 0xe7, 0x76, 0x71, 0x9c, 0x4d, 0x5f, 0x11, 0xf6, 0x36, 0x96, 0x70, 0xf4, 0x8b, 0xb9, 0x95, - 0x74, 0x8b, 0x49, 0xdc, 0xea, 0x88, 0xbc, 0xef, 0xf3, 0x4a, 0xce, 0xbf, 0x6e, 0xc1, 0x59, 0xde, - 0x2a, 0x47, 0xf2, 0x7a, 0xd8, 0x70, 0x12, 0x12, 0x17, 0x53, 0xd9, 0x3e, 0xa7, 0x7f, 0xda, 0xc9, - 0x9b, 0xc7, 0x16, 0xe7, 0xf7, 0x06, 0x7d, 0xde, 0x82, 0x13, 0x5b, 0xa9, 0x9a, 0x1f, 0x52, 0x75, - 0x1c, 0x35, 0x1d, 0x3f, 0x45, 0x54, 0x2f, 0xb5, 0x74, 0x7b, 0x8c, 0xb3, 0xdc, 0xed, 0x3f, 0xb3, - 0xc0, 0x14, 0xa3, 0xf7, 0xbe, 0x54, 0x48, 0xff, 0xa6, 0xa0, 0xb4, 0x2e, 0x2b, 0x5d, 0xad, 0xcb, - 0xc7, 0xa0, 0xdc, 0x76, 0x1b, 0x62, 0x7f, 0xa1, 0x4f, 0x5f, 0x17, 0xe6, 0x30, 0x6d, 0xb7, 0xff, - 0x61, 0x45, 0xfb, 0x2d, 0x44, 0x5e, 0xd4, 0x0f, 0xc4, 0x6b, 0x6f, 0xa8, 0xca, 0x65, 0xfc, 0xcd, - 0xaf, 0x75, 0x54, 0x2e, 0xfb, 0xf1, 0xfe, 0xd3, 0xde, 0xf8, 0x00, 0x75, 0x2b, 0x5c, 0x36, 0x74, - 0x40, 0xce, 0xdb, 0x2d, 0xa8, 0xd2, 0x2d, 0x18, 0x73, 0x40, 0x56, 0x53, 0x9d, 0xaa, 0x5e, 0x16, - 0xed, 0x77, 0xf7, 0x26, 0xde, 0xdd, 0x7f, 0xb7, 0xe4, 0xd3, 0x58, 0xd1, 0x47, 0x31, 0xd4, 0xe8, - 0x6f, 0x96, 0x9e, 0x27, 0x36, 0x77, 0xd7, 0x95, 0xcc, 0x94, 0x80, 0x42, 0x72, 0xff, 0x34, 0x1f, - 0xe4, 0x43, 0x8d, 0xdd, 0x5e, 0xcc, 0x98, 0xf2, 0x3d, 0xe0, 0x8a, 0x4a, 0x92, 0x93, 0x80, 0xbb, - 0x7b, 0x13, 0x2f, 0xf6, 0xcf, 0x54, 0x3d, 0x8e, 0x35, 0x0b, 0xfb, 0x8b, 0x03, 0x7a, 0xee, 0x8a, - 0x82, 0x75, 0x3f, 0x10, 0x73, 0xf7, 0x85, 0xcc, 0xdc, 0x3d, 0xdf, 0x31, 0x77, 0xc7, 0xf4, 0xd5, - 0xb6, 0xa9, 0xd9, 0x78, 0xaf, 0x0d, 0x81, 0x83, 0xfd, 0x0d, 0xcc, 0x02, 0x7a, 0xad, 0xed, 0x46, - 0x24, 0x5e, 0x89, 0xda, 0xbe, 0xeb, 0x37, 0xd9, 0x74, 0xac, 0x9a, 0x16, 0x50, 0x0a, 0x8c, 0xb3, - 0xf8, 0x74, 0x53, 0x4f, 0xbf, 0xf9, 0x4d, 0x67, 0x9b, 0xcf, 0x2a, 0xa3, 0xec, 0xd6, 0xaa, 0x68, - 0xc7, 0x0a, 0xc3, 0xfe, 0x26, 0x3b, 0xcb, 0x36, 0xf2, 0x82, 0xe9, 0x9c, 0xf0, 0xd8, 0x75, 0xd1, - 0xbc, 0x66, 0x97, 0x9a, 0x13, 0xfc, 0x8e, 0x68, 0x0e, 0x43, 0xb7, 0x61, 0x68, 0x9d, 0xdf, 0x07, - 0x58, 0x4c, 0xbd, 0x76, 0x71, 0xb9, 0x20, 0xbb, 0xf5, 0x45, 0xde, 0x34, 0x78, 0x57, 0xff, 0xc4, - 0x92, 0x9b, 0xfd, 0xfb, 0x15, 0x38, 0x91, 0xb9, 0xc5, 0x37, 0x55, 0x7a, 0xb5, 0x74, 0x60, 0xe9, - 0xd5, 0x0f, 0x02, 0x34, 0x48, 0xe8, 0x05, 0xbb, 0xcc, 0x1c, 0x1b, 0xe8, 0xdb, 0x1c, 0x53, 0x16, - 0xfc, 0x9c, 0xa2, 0x82, 0x0d, 0x8a, 0xa2, 0x50, 0x19, 0xaf, 0xe4, 0x9a, 0x29, 0x54, 0x66, 0xdc, - 0xea, 0x30, 0x78, 0x6f, 0x6f, 0x75, 0x70, 0xe1, 0x04, 0xef, 0xa2, 0xca, 0xbe, 0x3d, 0x44, 0x92, - 0x2d, 0xcb, 0x5f, 0x98, 0x4b, 0x93, 0xc1, 0x59, 0xba, 0xf7, 0xf5, 0xbe, 0xf0, 0x77, 0x40, 0x4d, - 0x7e, 0xe7, 0x78, 0xbc, 0xa6, 0x2b, 0x18, 0xc8, 0x69, 0xc0, 0x2e, 0xcf, 0x16, 0x3f, 0x3b, 0x0a, - 0x09, 0xc0, 0xfd, 0x2a, 0x24, 0x60, 0x7f, 0xae, 0x44, 0xed, 0x78, 0xde, 0x2f, 0x55, 0x13, 0xe7, - 0x49, 0x18, 0x74, 0xda, 0xc9, 0x66, 0xd0, 0x71, 0xbb, 0xe1, 0x34, 0x6b, 0xc5, 0x02, 0x8a, 0x16, - 0x61, 0xa0, 0xa1, 0xeb, 0x9c, 0xf4, 0xf3, 0x3d, 0xb5, 0x4b, 0xd4, 0x49, 0x08, 0x66, 0x54, 0xd0, - 0xa3, 0x30, 0x90, 0x38, 0x4d, 0x99, 0x72, 0xc5, 0xd2, 0x6c, 0xd7, 0x9c, 0x66, 0x8c, 0x59, 0xab, - 0xa9, 0xbe, 0x07, 0x0e, 0x50, 0xdf, 0x2f, 0xc2, 0x68, 0xec, 0x36, 0x7d, 0x27, 0x69, 0x47, 0xc4, - 0x38, 0xe6, 0xd3, 0x91, 0x1b, 0x26, 0x10, 0xa7, 0x71, 0xed, 0xdf, 0x1c, 0x81, 0x33, 0xab, 0xb3, - 0x4b, 0xb2, 0x14, 0xf8, 0xb1, 0x65, 0x4d, 0xe5, 0xf1, 0xb8, 0x77, 0x59, 0x53, 0x5d, 0xb8, 0x7b, - 0x46, 0xd6, 0x94, 0x67, 0x64, 0x4d, 0xa5, 0x53, 0x58, 0xca, 0x45, 0xa4, 0xb0, 0xe4, 0xf5, 0xa0, - 0x97, 0x14, 0x96, 0x63, 0x4b, 0xa3, 0xda, 0xb7, 0x43, 0x7d, 0xa5, 0x51, 0xa9, 0x1c, 0xb3, 0x42, - 0x92, 0x0b, 0xba, 0x7c, 0xaa, 0xdc, 0x1c, 0x33, 0x95, 0xdf, 0xc3, 0x13, 0x67, 0x84, 0xa8, 0x7f, - 0xa5, 0xf8, 0x0e, 0xf4, 0x90, 0xdf, 0x23, 0x72, 0x77, 0xcc, 0x9c, 0xb2, 0xa1, 0x22, 0x72, 0xca, - 0xf2, 0xba, 0x73, 0x60, 0x4e, 0xd9, 0x8b, 0x30, 0x5a, 0xf7, 0x02, 0x9f, 0xac, 0x44, 0x41, 0x12, - 0xd4, 0x03, 0x4f, 0x98, 0xf5, 0x4a, 0x24, 0xcc, 0x9a, 0x40, 0x9c, 0xc6, 0xed, 0x96, 0x90, 0x56, - 0x3b, 0x6a, 0x42, 0x1a, 0xdc, 0xa7, 0x84, 0xb4, 0x9f, 0xd7, 0xa9, 0xd3, 0xc3, 0xec, 0x8b, 0x7c, - 0xb0, 0xf8, 0x2f, 0xd2, 0x4b, 0xfe, 0x34, 0x7a, 0x83, 0x5f, 0x2f, 0x48, 0x0d, 0xe3, 0xd9, 0xa0, - 0x45, 0x0d, 0xbf, 0x11, 0x36, 0x24, 0xaf, 0x1e, 0xc3, 0x84, 0xbd, 0xb9, 0xaa, 0xd9, 0xa8, 0x2b, - 0x07, 0x75, 0x13, 0x4e, 0x77, 0xe4, 0x28, 0xa9, 0xdd, 0x5f, 0x29, 0xc1, 0x0f, 0x1d, 0xd8, 0x05, - 0x74, 0x1b, 0x20, 0x71, 0x9a, 0x62, 0xa2, 0x8a, 0x03, 0x93, 0x23, 0x86, 0x57, 0xae, 0x49, 0x7a, - 0xbc, 0x26, 0x89, 0xfa, 0xcb, 0x8e, 0x22, 0xe4, 0x6f, 0x16, 0x55, 0x19, 0x78, 0x1d, 0xa5, 0x1b, - 0x71, 0xe0, 0x11, 0xcc, 0x20, 0x54, 0xfd, 0x47, 0xa4, 0xa9, 0xef, 0xc3, 0x56, 0x9f, 0x0f, 0xb3, - 0x56, 0x2c, 0xa0, 0xe8, 0x79, 0x18, 0x76, 0x3c, 0x8f, 0xe7, 0xc7, 0x90, 0x58, 0xdc, 0x2f, 0xa4, - 0x6b, 0xc8, 0x69, 0x10, 0x36, 0xf1, 0xec, 0x3f, 0x2d, 0xc1, 0xc4, 0x01, 0x32, 0xa5, 0x23, 0xe3, - 0xaf, 0xd2, 0x73, 0xc6, 0x9f, 0xc8, 0x51, 0x18, 0xec, 0x92, 0xa3, 0xf0, 0x3c, 0x0c, 0x27, 0xc4, - 0x69, 0x89, 0x80, 0x2c, 0xe1, 0x09, 0xd0, 0x27, 0xc0, 0x1a, 0x84, 0x4d, 0x3c, 0x2a, 0xc5, 0xc6, - 0x9c, 0x7a, 0x9d, 0xc4, 0xb1, 0x4c, 0x42, 0x10, 0xde, 0xd4, 0xc2, 0x32, 0x1c, 0x98, 0x93, 0x7a, - 0x3a, 0xc5, 0x02, 0x67, 0x58, 0x66, 0x07, 0xbc, 0xd6, 0xe3, 0x80, 0x7f, 0xbd, 0x04, 0x8f, 0xed, - 0xab, 0xdd, 0x7a, 0xce, 0x0f, 0x69, 0xc7, 0x24, 0xca, 0x4e, 0x9c, 0xeb, 0x31, 0x89, 0x30, 0x83, - 0xf0, 0x51, 0x0a, 0x43, 0xe3, 0xbe, 0xf1, 0xa2, 0x93, 0x97, 0xf8, 0x28, 0xa5, 0x58, 0xe0, 0x0c, - 0xcb, 0xc3, 0x4e, 0xcb, 0xbf, 0x5d, 0x82, 0x27, 0x7a, 0xb0, 0x01, 0x0a, 0x4c, 0xf2, 0x4a, 0xa7, - 0xda, 0x95, 0xef, 0x53, 0x46, 0xe4, 0x21, 0x87, 0xeb, 0x9b, 0x25, 0x38, 0xd7, 0x5d, 0x15, 0xa3, - 0x9f, 0x80, 0x13, 0x91, 0x8a, 0xc2, 0x32, 0xb3, 0xf4, 0x4e, 0x73, 0x4f, 0x42, 0x0a, 0x84, 0xb3, - 0xb8, 0x68, 0x12, 0x20, 0x74, 0x92, 0xcd, 0xf8, 0xe2, 0x8e, 0x1b, 0x27, 0xa2, 0x0a, 0xcd, 0x18, - 0x3f, 0xbb, 0x92, 0xad, 0xd8, 0xc0, 0xa0, 0xec, 0xd8, 0xbf, 0xb9, 0xe0, 0x5a, 0x90, 0xf0, 0x87, - 0xf8, 0x36, 0xe2, 0xb4, 0xbc, 0x00, 0xc4, 0x00, 0xe1, 0x2c, 0x2e, 0x65, 0xc7, 0x4e, 0x47, 0x79, - 0x47, 0xf9, 0xfe, 0x82, 0xb1, 0x5b, 0x54, 0xad, 0xd8, 0xc0, 0xc8, 0xe6, 0x1f, 0x56, 0x0e, 0xce, - 0x3f, 0xb4, 0xff, 0x41, 0x09, 0x1e, 0xe9, 0x6a, 0xca, 0xf5, 0xb6, 0x00, 0x1f, 0xbc, 0x9c, 0xc1, - 0xc3, 0xcd, 0x9d, 0x3e, 0x73, 0xdb, 0xfe, 0xb8, 0xcb, 0x4c, 0x13, 0xb9, 0x6d, 0x87, 0x4f, 0x0e, - 0x7f, 0xf0, 0xc6, 0xb3, 0x23, 0x9d, 0x6d, 0xa0, 0x8f, 0x74, 0xb6, 0xcc, 0xc7, 0xa8, 0xf4, 0xb8, - 0x90, 0xff, 0xbc, 0xdc, 0x75, 0x78, 0xe9, 0xd6, 0xaf, 0x27, 0x3f, 0xed, 0x1c, 0x9c, 0x74, 0x7d, - 0x76, 0x19, 0xd4, 0x6a, 0x7b, 0x5d, 0x14, 0x26, 0x29, 0xa5, 0x6f, 0x93, 0x5f, 0xc8, 0xc0, 0x71, - 0xc7, 0x13, 0x0f, 0x60, 0x7a, 0xe1, 0xe1, 0x86, 0xb4, 0xbf, 0x04, 0x57, 0xb4, 0x0c, 0x67, 0xe5, - 0x50, 0x6c, 0x3a, 0x11, 0x69, 0x08, 0x35, 0x12, 0x8b, 0x84, 0x8a, 0x47, 0x78, 0x52, 0x46, 0x0e, - 0x02, 0xce, 0x7f, 0x8e, 0xdd, 0xbf, 0x13, 0x84, 0x6e, 0x5d, 0x6c, 0x72, 0xf4, 0xfd, 0x3b, 0xb4, - 0x11, 0x73, 0x98, 0xfd, 0x41, 0xa8, 0xa9, 0xf7, 0xe7, 0x61, 0xdd, 0x6a, 0xd2, 0x75, 0x84, 0x75, - 0xab, 0x19, 0x67, 0x60, 0xd1, 0xaf, 0x45, 0x4d, 0xe2, 0xcc, 0xea, 0xb9, 0x4a, 0x76, 0x99, 0x7d, - 0x6c, 0xbf, 0x13, 0x46, 0x94, 0x9f, 0xa5, 0xd7, 0x5b, 0x89, 0xec, 0xff, 0x5d, 0x82, 0x31, 0xee, - 0x59, 0xe3, 0x97, 0x56, 0x04, 0x74, 0x33, 0x5d, 0x6b, 0xc8, 0xdb, 0x1c, 0x8b, 0xa9, 0xc6, 0xa8, - 0x2e, 0x87, 0xd4, 0xee, 0x7f, 0xd5, 0x84, 0x35, 0x33, 0xf4, 0x61, 0x5e, 0xf8, 0x50, 0xb0, 0x2e, - 0x15, 0x91, 0xf2, 0xb9, 0xaa, 0xe8, 0x99, 0x57, 0x9d, 0xc8, 0x36, 0x6c, 0xf0, 0x43, 0x09, 0xd4, - 0x36, 0xe5, 0xc5, 0x1d, 0xc5, 0x88, 0x1f, 0x75, 0x0f, 0x08, 0x37, 0x06, 0xd4, 0x5f, 0xac, 0x19, - 0xd9, 0xff, 0xd4, 0x82, 0x33, 0xe9, 0x0f, 0x20, 0x8e, 0x6b, 0xee, 0xdf, 0x67, 0xe8, 0xcb, 0xc5, - 0x6e, 0x7f, 0x71, 0x10, 0x46, 0x53, 0xe5, 0x25, 0x53, 0xcf, 0x5b, 0x07, 0xba, 0xe8, 0x59, 0xa2, - 0x47, 0xdb, 0x97, 0x97, 0xde, 0x19, 0x89, 0x1e, 0x6d, 0x9f, 0x60, 0x0e, 0xa3, 0x1b, 0xa4, 0x46, - 0xb4, 0x8b, 0xdb, 0xbe, 0x08, 0xc8, 0x56, 0x1b, 0xa4, 0x39, 0xd6, 0x8a, 0x05, 0x14, 0x7d, 0xcc, - 0x82, 0x11, 0xf6, 0x49, 0xc5, 0x01, 0x87, 0x10, 0x5b, 0x57, 0x0a, 0x98, 0x44, 0xb2, 0x94, 0x2a, - 0x8b, 0xb1, 0x32, 0x5b, 0x70, 0x8a, 0x23, 0xfa, 0xa4, 0x05, 0x35, 0x75, 0x37, 0x8f, 0xb8, 0xc1, - 0x72, 0xb5, 0xd8, 0xea, 0x9d, 0x99, 0x8f, 0xa8, 0xca, 0x28, 0x62, 0xcd, 0x18, 0xc5, 0xea, 0xf4, - 0x61, 0xe8, 0x78, 0x4e, 0x1f, 0x20, 0xe7, 0xe4, 0xe1, 0x1d, 0x50, 0x6b, 0x39, 0xbe, 0xbb, 0x41, - 0xe2, 0x84, 0x1f, 0x08, 0xc8, 0xa2, 0xc2, 0xb2, 0x11, 0x6b, 0x38, 0x35, 0xe9, 0x62, 0xf6, 0x62, - 0x89, 0xe1, 0xc1, 0x67, 0x26, 0xdd, 0xaa, 0x6e, 0xc6, 0x26, 0x8e, 0x79, 0xdc, 0x00, 0xf7, 0xf5, - 0xb8, 0x61, 0x78, 0xff, 0xe3, 0x06, 0xfb, 0xef, 0x5a, 0x70, 0x36, 0xf7, 0xab, 0x3d, 0xb8, 0xa1, - 0xb3, 0xf6, 0x97, 0x2a, 0x70, 0x3a, 0xa7, 0x4e, 0x2c, 0xda, 0x35, 0xe7, 0xb3, 0x55, 0x44, 0x14, - 0x4a, 0x3a, 0xa8, 0x42, 0x0e, 0x63, 0xce, 0x24, 0xee, 0xef, 0xb0, 0x4f, 0x1f, 0xb8, 0x95, 0xef, - 0xed, 0x81, 0x9b, 0x31, 0x2d, 0x07, 0xee, 0xeb, 0xb4, 0xac, 0x1c, 0x70, 0x0a, 0xf6, 0x6b, 0x16, - 0x8c, 0xb7, 0xba, 0x5c, 0x4e, 0x20, 0x5c, 0xd7, 0x37, 0x8e, 0xe7, 0xea, 0x83, 0x99, 0x47, 0xef, - 0xec, 0x4d, 0x74, 0xbd, 0x13, 0x02, 0x77, 0xed, 0x95, 0xfd, 0xdd, 0x32, 0x30, 0x85, 0xcd, 0x6a, - 0x01, 0xee, 0xa2, 0x8f, 0x9a, 0xe5, 0xa6, 0xad, 0xa2, 0x4a, 0x23, 0x73, 0xe2, 0xaa, 0x5c, 0x35, - 0x1f, 0xc1, 0xbc, 0xea, 0xd5, 0x59, 0xa1, 0x55, 0xea, 0x41, 0x68, 0x79, 0xb2, 0xae, 0x77, 0xb9, - 0xf8, 0xba, 0xde, 0xb5, 0x6c, 0x4d, 0xef, 0xfd, 0x3f, 0xf1, 0xc0, 0x03, 0xf9, 0x89, 0x7f, 0xc9, - 0xe2, 0x82, 0x27, 0xf3, 0x15, 0xb4, 0x65, 0x60, 0xed, 0x63, 0x19, 0x3c, 0x0d, 0xd5, 0x98, 0x78, - 0x1b, 0x97, 0x89, 0xe3, 0x09, 0x0b, 0x42, 0x47, 0x40, 0x88, 0x76, 0xac, 0x30, 0xd8, 0x2d, 0xc2, - 0x9e, 0x17, 0xdc, 0xbe, 0xd8, 0x0a, 0x93, 0x5d, 0x61, 0x4b, 0xe8, 0x5b, 0x84, 0x15, 0x04, 0x1b, - 0x58, 0xb6, 0x0f, 0x86, 0xc5, 0x78, 0xd4, 0x1b, 0xdd, 0x7a, 0xb8, 0x6b, 0xf1, 0xaf, 0x95, 0x04, - 0x43, 0x6e, 0x07, 0xbe, 0x90, 0xb9, 0x67, 0xb2, 0xf7, 0x88, 0x97, 0x0f, 0x03, 0xd4, 0x83, 0x56, - 0x48, 0x77, 0x2a, 0x6b, 0x41, 0x31, 0xe6, 0xf4, 0xac, 0xa2, 0xa7, 0x87, 0x4d, 0xb7, 0x61, 0x83, - 0x5f, 0x4a, 0x76, 0x97, 0x0f, 0x94, 0xdd, 0x29, 0x31, 0x36, 0x70, 0x80, 0x76, 0xfd, 0x53, 0x0b, - 0x52, 0x16, 0x18, 0x0a, 0xa1, 0x42, 0xbb, 0xbb, 0x2b, 0x24, 0xc2, 0x72, 0x71, 0xe6, 0x1e, 0x15, - 0xc5, 0x62, 0x99, 0xb1, 0x9f, 0x98, 0x33, 0x42, 0x9e, 0x88, 0xee, 0xe1, 0xa3, 0x7a, 0xad, 0x38, - 0x86, 0x97, 0x83, 0x60, 0x8b, 0x1f, 0xc5, 0xeb, 0x48, 0x21, 0xfb, 0x05, 0x38, 0xd5, 0xd1, 0x29, - 0x76, 0x0b, 0x5c, 0x20, 0x37, 0x07, 0xc6, 0xf2, 0x60, 0x29, 0xc7, 0x98, 0xc3, 0xec, 0x6f, 0x5a, - 0x70, 0x32, 0x4b, 0x1e, 0xbd, 0x61, 0xc1, 0xa9, 0x38, 0x4b, 0xef, 0xb8, 0xc6, 0x4e, 0x45, 0xe8, - 0x76, 0x80, 0x70, 0x67, 0x27, 0xec, 0xff, 0x25, 0x26, 0xff, 0x4d, 0xd7, 0x6f, 0x04, 0xb7, 0x95, - 0x21, 0x64, 0x75, 0x35, 0x84, 0xe8, 0xfa, 0xaf, 0x6f, 0x92, 0x46, 0xdb, 0xeb, 0xc8, 0x75, 0x5e, - 0x15, 0xed, 0x58, 0x61, 0xb0, 0xd4, 0xce, 0xb6, 0xb8, 0x68, 0x20, 0x33, 0x29, 0xe7, 0x44, 0x3b, - 0x56, 0x18, 0xe8, 0x39, 0x18, 0x31, 0x5e, 0x52, 0xce, 0x4b, 0xb6, 0x01, 0x30, 0x54, 0x74, 0x8c, - 0x53, 0x58, 0x68, 0x12, 0x40, 0x19, 0x55, 0x52, 0x25, 0x33, 0xd7, 0xa6, 0x92, 0x7c, 0x31, 0x36, - 0x30, 0x58, 0x22, 0xb5, 0xd7, 0x8e, 0xd9, 0xa9, 0xd4, 0xa0, 0x2e, 0x7e, 0x3b, 0x2b, 0xda, 0xb0, - 0x82, 0x52, 0xe9, 0xd5, 0x72, 0xfc, 0xb6, 0xe3, 0xd1, 0x11, 0x12, 0xce, 0x0a, 0xb5, 0x0c, 0x97, - 0x14, 0x04, 0x1b, 0x58, 0xf4, 0x8d, 0x13, 0xb7, 0x45, 0x5e, 0x0e, 0x7c, 0x19, 0x59, 0xa9, 0x0f, - 0x2a, 0x45, 0x3b, 0x56, 0x18, 0xf6, 0x7f, 0xb2, 0xe0, 0x84, 0x2e, 0xcb, 0xc0, 0x2f, 0x8f, 0x37, - 0x7d, 0x2b, 0xd6, 0x81, 0xbe, 0x95, 0x74, 0xbe, 0x7a, 0xa9, 0xa7, 0x7c, 0x75, 0x33, 0x95, 0xbc, - 0xbc, 0x6f, 0x2a, 0xf9, 0x8f, 0xe8, 0x8b, 0x89, 0x79, 0xce, 0xf9, 0x70, 0xde, 0xa5, 0xc4, 0xc8, - 0x86, 0xc1, 0xba, 0xa3, 0x6a, 0x12, 0x8d, 0xf0, 0xbd, 0xca, 0xec, 0x34, 0x43, 0x12, 0x10, 0x7b, - 0x19, 0x6a, 0xea, 0xbc, 0x4e, 0xba, 0x56, 0xac, 0x7c, 0xd7, 0x4a, 0x4f, 0x29, 0xad, 0x33, 0xeb, - 0xdf, 0xfa, 0xde, 0xe3, 0x6f, 0xf9, 0xbd, 0xef, 0x3d, 0xfe, 0x96, 0x3f, 0xfa, 0xde, 0xe3, 0x6f, - 0xf9, 0xd8, 0x9d, 0xc7, 0xad, 0x6f, 0xdd, 0x79, 0xdc, 0xfa, 0xbd, 0x3b, 0x8f, 0x5b, 0x7f, 0x74, - 0xe7, 0x71, 0xeb, 0xbb, 0x77, 0x1e, 0xb7, 0xbe, 0xf0, 0xef, 0x1f, 0x7f, 0xcb, 0xcb, 0xb9, 0xa1, - 0xb5, 0xf4, 0xc7, 0x33, 0xf5, 0xc6, 0xd4, 0xf6, 0x05, 0x16, 0xdd, 0x49, 0x97, 0xd7, 0x94, 0x31, - 0xa7, 0xa6, 0xe4, 0xf2, 0xfa, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x2a, 0x54, 0xd3, 0xc0, 0xf9, - 0xe6, 0x00, 0x00, + // 11328 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x6d, 0x70, 0x1c, 0xc9, + 0x75, 0x98, 0x66, 0x17, 0x0b, 0xec, 0x3e, 0x80, 0x20, 0xd9, 0x24, 0xef, 0x70, 0xd4, 0xdd, 0x81, + 0x9e, 0xb3, 0x4f, 0xe7, 0xe8, 0x0e, 0xf0, 0x51, 0x77, 0xf2, 0x45, 0x67, 0x4b, 0xc6, 0x07, 0x09, + 0x82, 0x04, 0x08, 0x5c, 0x03, 0x24, 0xa5, 0x93, 0x4f, 0xa7, 0xc1, 0x6e, 0x63, 0x31, 0xc4, 0xec, + 0xcc, 0xdc, 0xcc, 0x2c, 0x88, 0x3d, 0x4b, 0xb2, 0x64, 0xc9, 0xb6, 0x12, 0x7d, 0x46, 0x4a, 0x95, + 0xce, 0x89, 0xa5, 0xc8, 0x96, 0x92, 0x8a, 0x2b, 0x51, 0xc5, 0x49, 0x7e, 0xd8, 0x89, 0x93, 0x72, + 0xd9, 0x4e, 0xa5, 0x94, 0x52, 0x52, 0x76, 0x5c, 0x2e, 0xcb, 0x49, 0x6c, 0x44, 0x62, 0x2a, 0x95, + 0x54, 0xaa, 0xe2, 0x2a, 0x27, 0xfe, 0x91, 0x30, 0xa9, 0x24, 0xd5, 0xdf, 0x3d, 0xb3, 0xb3, 0xc0, + 0x2e, 0x31, 0x20, 0x29, 0xe5, 0xfe, 0xed, 0xf6, 0x7b, 0xf3, 0x5e, 0x4f, 0x4f, 0xf7, 0x7b, 0xaf, + 0x5f, 0xbf, 0xf7, 0x1a, 0x96, 0x9a, 0x6e, 0xb2, 0xd5, 0xde, 0x98, 0xaa, 0x07, 0xad, 0x69, 0x27, + 0x6a, 0x06, 0x61, 0x14, 0xdc, 0x64, 0x3f, 0x9e, 0xa9, 0x37, 0xa6, 0x77, 0xce, 0x4f, 0x87, 0xdb, + 0xcd, 0x69, 0x27, 0x74, 0xe3, 0x69, 0x27, 0x0c, 0x3d, 0xb7, 0xee, 0x24, 0x6e, 0xe0, 0x4f, 0xef, + 0x3c, 0xeb, 0x78, 0xe1, 0x96, 0xf3, 0xec, 0x74, 0x93, 0xf8, 0x24, 0x72, 0x12, 0xd2, 0x98, 0x0a, + 0xa3, 0x20, 0x09, 0xd0, 0x8f, 0x69, 0x6a, 0x53, 0x92, 0x1a, 0xfb, 0xf1, 0x6a, 0xbd, 0x31, 0xb5, + 0x73, 0x7e, 0x2a, 0xdc, 0x6e, 0x4e, 0x51, 0x6a, 0x53, 0x06, 0xb5, 0x29, 0x49, 0xed, 0xec, 0x33, + 0x46, 0x5f, 0x9a, 0x41, 0x33, 0x98, 0x66, 0x44, 0x37, 0xda, 0x9b, 0xec, 0x1f, 0xfb, 0xc3, 0x7e, + 0x71, 0x66, 0x67, 0xed, 0xed, 0x17, 0xe2, 0x29, 0x37, 0xa0, 0xdd, 0x9b, 0xae, 0x07, 0x11, 0x99, + 0xde, 0xe9, 0xea, 0xd0, 0xd9, 0x4b, 0x1a, 0x87, 0xec, 0x26, 0xc4, 0x8f, 0xdd, 0xc0, 0x8f, 0x9f, + 0xa1, 0x5d, 0x20, 0xd1, 0x0e, 0x89, 0xcc, 0xd7, 0x33, 0x10, 0xf2, 0x28, 0x3d, 0xa7, 0x29, 0xb5, + 0x9c, 0xfa, 0x96, 0xeb, 0x93, 0xa8, 0xa3, 0x1f, 0x6f, 0x91, 0xc4, 0xc9, 0x7b, 0x6a, 0xba, 0xd7, + 0x53, 0x51, 0xdb, 0x4f, 0xdc, 0x16, 0xe9, 0x7a, 0xe0, 0x9d, 0x07, 0x3d, 0x10, 0xd7, 0xb7, 0x48, + 0xcb, 0xe9, 0x7a, 0xee, 0x1d, 0xbd, 0x9e, 0x6b, 0x27, 0xae, 0x37, 0xed, 0xfa, 0x49, 0x9c, 0x44, + 0xd9, 0x87, 0xec, 0x5f, 0xb4, 0xe0, 0xd8, 0xcc, 0x8d, 0xb5, 0x99, 0x76, 0xb2, 0x35, 0x17, 0xf8, + 0x9b, 0x6e, 0x13, 0x3d, 0x0f, 0xa3, 0x75, 0xaf, 0x1d, 0x27, 0x24, 0xba, 0xea, 0xb4, 0xc8, 0x84, + 0x75, 0xce, 0x7a, 0xaa, 0x36, 0x7b, 0xea, 0x9b, 0x7b, 0x93, 0x6f, 0xb9, 0xbd, 0x37, 0x39, 0x3a, + 0xa7, 0x41, 0xd8, 0xc4, 0x43, 0x3f, 0x0c, 0x23, 0x51, 0xe0, 0x91, 0x19, 0x7c, 0x75, 0xa2, 0xc4, + 0x1e, 0x39, 0x2e, 0x1e, 0x19, 0xc1, 0xbc, 0x19, 0x4b, 0x38, 0x45, 0x0d, 0xa3, 0x60, 0xd3, 0xf5, + 0xc8, 0x44, 0x39, 0x8d, 0xba, 0xca, 0x9b, 0xb1, 0x84, 0xdb, 0x7f, 0x58, 0x02, 0x98, 0x09, 0xc3, + 0xd5, 0x28, 0xb8, 0x49, 0xea, 0x09, 0xfa, 0x20, 0x54, 0xe9, 0x30, 0x37, 0x9c, 0xc4, 0x61, 0x1d, + 0x1b, 0x3d, 0xff, 0x23, 0x53, 0xfc, 0xad, 0xa7, 0xcc, 0xb7, 0xd6, 0x93, 0x8c, 0x62, 0x4f, 0xed, + 0x3c, 0x3b, 0xb5, 0xb2, 0x41, 0x9f, 0x5f, 0x26, 0x89, 0x33, 0x8b, 0x04, 0x33, 0xd0, 0x6d, 0x58, + 0x51, 0x45, 0x3e, 0x0c, 0xc5, 0x21, 0xa9, 0xb3, 0x77, 0x18, 0x3d, 0xbf, 0x34, 0x75, 0x98, 0xd9, + 0x3c, 0xa5, 0x7b, 0xbe, 0x16, 0x92, 0xfa, 0xec, 0x98, 0xe0, 0x3c, 0x44, 0xff, 0x61, 0xc6, 0x07, + 0xed, 0xc0, 0x70, 0x9c, 0x38, 0x49, 0x3b, 0x66, 0x43, 0x31, 0x7a, 0xfe, 0x6a, 0x61, 0x1c, 0x19, + 0xd5, 0xd9, 0x71, 0xc1, 0x73, 0x98, 0xff, 0xc7, 0x82, 0x9b, 0xfd, 0x27, 0x16, 0x8c, 0x6b, 0xe4, + 0x25, 0x37, 0x4e, 0xd0, 0x4f, 0x76, 0x0d, 0xee, 0x54, 0x7f, 0x83, 0x4b, 0x9f, 0x66, 0x43, 0x7b, + 0x42, 0x30, 0xab, 0xca, 0x16, 0x63, 0x60, 0x5b, 0x50, 0x71, 0x13, 0xd2, 0x8a, 0x27, 0x4a, 0xe7, + 0xca, 0x4f, 0x8d, 0x9e, 0xbf, 0x54, 0xd4, 0x7b, 0xce, 0x1e, 0x13, 0x4c, 0x2b, 0x8b, 0x94, 0x3c, + 0xe6, 0x5c, 0xec, 0x5f, 0x19, 0x33, 0xdf, 0x8f, 0x0e, 0x38, 0x7a, 0x16, 0x46, 0xe3, 0xa0, 0x1d, + 0xd5, 0x09, 0x26, 0x61, 0x10, 0x4f, 0x58, 0xe7, 0xca, 0x74, 0xea, 0xd1, 0x49, 0xbd, 0xa6, 0x9b, + 0xb1, 0x89, 0x83, 0x3e, 0x6b, 0xc1, 0x58, 0x83, 0xc4, 0x89, 0xeb, 0x33, 0xfe, 0xb2, 0xf3, 0xeb, + 0x87, 0xee, 0xbc, 0x6c, 0x9c, 0xd7, 0xc4, 0x67, 0x4f, 0x8b, 0x17, 0x19, 0x33, 0x1a, 0x63, 0x9c, + 0xe2, 0x4f, 0x17, 0x67, 0x83, 0xc4, 0xf5, 0xc8, 0x0d, 0xe9, 0x7f, 0xb1, 0x7c, 0xd4, 0xe2, 0x9c, + 0xd7, 0x20, 0x6c, 0xe2, 0x21, 0x1f, 0x2a, 0x74, 0xf1, 0xc5, 0x13, 0x43, 0xac, 0xff, 0x8b, 0x87, + 0xeb, 0xbf, 0x18, 0x54, 0xba, 0xae, 0xf5, 0xe8, 0xd3, 0x7f, 0x31, 0xe6, 0x6c, 0xd0, 0x67, 0x2c, + 0x98, 0x10, 0xc2, 0x01, 0x13, 0x3e, 0xa0, 0x37, 0xb6, 0xdc, 0x84, 0x78, 0x6e, 0x9c, 0x4c, 0x54, + 0x58, 0x1f, 0xa6, 0xfb, 0x9b, 0x5b, 0x0b, 0x51, 0xd0, 0x0e, 0xaf, 0xb8, 0x7e, 0x63, 0xf6, 0x9c, + 0xe0, 0x34, 0x31, 0xd7, 0x83, 0x30, 0xee, 0xc9, 0x12, 0x7d, 0xd1, 0x82, 0xb3, 0xbe, 0xd3, 0x22, + 0x71, 0xe8, 0xd0, 0x4f, 0xcb, 0xc1, 0xb3, 0x9e, 0x53, 0xdf, 0x66, 0x3d, 0x1a, 0xbe, 0xbb, 0x1e, + 0xd9, 0xa2, 0x47, 0x67, 0xaf, 0xf6, 0x24, 0x8d, 0xf7, 0x61, 0x8b, 0xbe, 0x66, 0xc1, 0xc9, 0x20, + 0x0a, 0xb7, 0x1c, 0x9f, 0x34, 0x24, 0x34, 0x9e, 0x18, 0x61, 0x4b, 0xef, 0x03, 0x87, 0xfb, 0x44, + 0x2b, 0x59, 0xb2, 0xcb, 0x81, 0xef, 0x26, 0x41, 0xb4, 0x46, 0x92, 0xc4, 0xf5, 0x9b, 0xf1, 0xec, + 0x99, 0xdb, 0x7b, 0x93, 0x27, 0xbb, 0xb0, 0x70, 0x77, 0x7f, 0xd0, 0x4f, 0xc1, 0x68, 0xdc, 0xf1, + 0xeb, 0x37, 0x5c, 0xbf, 0x11, 0xdc, 0x8a, 0x27, 0xaa, 0x45, 0x2c, 0xdf, 0x35, 0x45, 0x50, 0x2c, + 0x40, 0xcd, 0x00, 0x9b, 0xdc, 0xf2, 0x3f, 0x9c, 0x9e, 0x4a, 0xb5, 0xa2, 0x3f, 0x9c, 0x9e, 0x4c, + 0xfb, 0xb0, 0x45, 0x3f, 0x6f, 0xc1, 0xb1, 0xd8, 0x6d, 0xfa, 0x4e, 0xd2, 0x8e, 0xc8, 0x15, 0xd2, + 0x89, 0x27, 0x80, 0x75, 0xe4, 0xf2, 0x21, 0x47, 0xc5, 0x20, 0x39, 0x7b, 0x46, 0xf4, 0xf1, 0x98, + 0xd9, 0x1a, 0xe3, 0x34, 0xdf, 0xbc, 0x85, 0xa6, 0xa7, 0xf5, 0x68, 0xb1, 0x0b, 0x4d, 0x4f, 0xea, + 0x9e, 0x2c, 0xd1, 0x4f, 0xc0, 0x09, 0xde, 0xa4, 0x46, 0x36, 0x9e, 0x18, 0x63, 0x82, 0xf6, 0xf4, + 0xed, 0xbd, 0xc9, 0x13, 0x6b, 0x19, 0x18, 0xee, 0xc2, 0x46, 0xaf, 0xc1, 0x64, 0x48, 0xa2, 0x96, + 0x9b, 0xac, 0xf8, 0x5e, 0x47, 0x8a, 0xef, 0x7a, 0x10, 0x92, 0x86, 0xe8, 0x4e, 0x3c, 0x71, 0xec, + 0x9c, 0xf5, 0x54, 0x75, 0xf6, 0x6d, 0xa2, 0x9b, 0x93, 0xab, 0xfb, 0xa3, 0xe3, 0x83, 0xe8, 0xd9, + 0xff, 0xa2, 0x04, 0x27, 0xb2, 0x8a, 0x13, 0xfd, 0x2d, 0x0b, 0x8e, 0xdf, 0xbc, 0x95, 0xac, 0x07, + 0xdb, 0xc4, 0x8f, 0x67, 0x3b, 0x54, 0xbc, 0x31, 0x95, 0x31, 0x7a, 0xbe, 0x5e, 0xac, 0x8a, 0x9e, + 0xba, 0x9c, 0xe6, 0x72, 0xc1, 0x4f, 0xa2, 0xce, 0xec, 0xc3, 0xe2, 0xed, 0x8e, 0x5f, 0xbe, 0xb1, + 0x6e, 0x42, 0x71, 0xb6, 0x53, 0x67, 0x3f, 0x65, 0xc1, 0xe9, 0x3c, 0x12, 0xe8, 0x04, 0x94, 0xb7, + 0x49, 0x87, 0x1b, 0x70, 0x98, 0xfe, 0x44, 0xaf, 0x40, 0x65, 0xc7, 0xf1, 0xda, 0x44, 0x58, 0x37, + 0x0b, 0x87, 0x7b, 0x11, 0xd5, 0x33, 0xcc, 0xa9, 0xbe, 0xab, 0xf4, 0x82, 0x65, 0xff, 0x6e, 0x19, + 0x46, 0x0d, 0xfd, 0x76, 0x0f, 0x2c, 0xb6, 0x20, 0x65, 0xb1, 0x2d, 0x17, 0xa6, 0x9a, 0x7b, 0x9a, + 0x6c, 0xb7, 0x32, 0x26, 0xdb, 0x4a, 0x71, 0x2c, 0xf7, 0xb5, 0xd9, 0x50, 0x02, 0xb5, 0x20, 0xa4, + 0xd6, 0x3b, 0x55, 0xfd, 0x43, 0x45, 0x7c, 0xc2, 0x15, 0x49, 0x6e, 0xf6, 0xd8, 0xed, 0xbd, 0xc9, + 0x9a, 0xfa, 0x8b, 0x35, 0x23, 0xfb, 0xdb, 0x16, 0x9c, 0x36, 0xfa, 0x38, 0x17, 0xf8, 0x0d, 0x97, + 0x7d, 0xda, 0x73, 0x30, 0x94, 0x74, 0x42, 0xb9, 0x43, 0x50, 0x23, 0xb5, 0xde, 0x09, 0x09, 0x66, + 0x10, 0x6a, 0xe8, 0xb7, 0x48, 0x1c, 0x3b, 0x4d, 0x92, 0xdd, 0x13, 0x2c, 0xf3, 0x66, 0x2c, 0xe1, + 0x28, 0x02, 0xe4, 0x39, 0x71, 0xb2, 0x1e, 0x39, 0x7e, 0xcc, 0xc8, 0xaf, 0xbb, 0x2d, 0x22, 0x06, + 0xf8, 0x2f, 0xf4, 0x37, 0x63, 0xe8, 0x13, 0xb3, 0x0f, 0xdd, 0xde, 0x9b, 0x44, 0x4b, 0x5d, 0x94, + 0x70, 0x0e, 0x75, 0xfb, 0x8b, 0x16, 0x3c, 0x94, 0x6f, 0x8b, 0xa1, 0x27, 0x61, 0x98, 0x6f, 0x0f, + 0xc5, 0xdb, 0xe9, 0x4f, 0xc2, 0x5a, 0xb1, 0x80, 0xa2, 0x69, 0xa8, 0x29, 0x3d, 0x21, 0xde, 0xf1, + 0xa4, 0x40, 0xad, 0x69, 0xe5, 0xa2, 0x71, 0xe8, 0xa0, 0xd1, 0x3f, 0xc2, 0x72, 0x53, 0x83, 0xc6, + 0xf6, 0x53, 0x0c, 0x62, 0xff, 0x7b, 0x0b, 0x8e, 0x1b, 0xbd, 0xba, 0x07, 0xa6, 0xb9, 0x9f, 0x36, + 0xcd, 0x17, 0x0b, 0x9b, 0xcf, 0x3d, 0x6c, 0xf3, 0xcf, 0x58, 0x70, 0xd6, 0xc0, 0x5a, 0x76, 0x92, + 0xfa, 0xd6, 0x85, 0xdd, 0x30, 0x22, 0x31, 0xdd, 0x7a, 0xa3, 0xc7, 0x0c, 0xb9, 0x35, 0x3b, 0x2a, + 0x28, 0x94, 0xaf, 0x90, 0x0e, 0x17, 0x62, 0x4f, 0x43, 0x95, 0x4f, 0xce, 0x20, 0x12, 0x23, 0xae, + 0xde, 0x6d, 0x45, 0xb4, 0x63, 0x85, 0x81, 0x6c, 0x18, 0x66, 0xc2, 0x89, 0x2e, 0x56, 0xaa, 0x86, + 0x80, 0x7e, 0xc4, 0xeb, 0xac, 0x05, 0x0b, 0x88, 0x1d, 0xa7, 0xba, 0xb3, 0x1a, 0x11, 0xf6, 0x71, + 0x1b, 0x17, 0x5d, 0xe2, 0x35, 0x62, 0xba, 0x6d, 0x70, 0x7c, 0x3f, 0x48, 0xc4, 0x0e, 0xc0, 0xd8, + 0x36, 0xcc, 0xe8, 0x66, 0x6c, 0xe2, 0x50, 0xa6, 0x9e, 0xb3, 0x41, 0x3c, 0x3e, 0xa2, 0x82, 0xe9, + 0x12, 0x6b, 0xc1, 0x02, 0x62, 0xdf, 0x2e, 0xb1, 0x0d, 0x8a, 0x5a, 0xfa, 0xe4, 0x5e, 0xec, 0x6e, + 0xa3, 0x94, 0xac, 0x5c, 0x2d, 0x4e, 0x70, 0x91, 0xde, 0x3b, 0xdc, 0xd7, 0x33, 0xe2, 0x12, 0x17, + 0xca, 0x75, 0xff, 0x5d, 0xee, 0x6f, 0x95, 0x60, 0x32, 0xfd, 0x40, 0x97, 0xb4, 0xa5, 0x5b, 0x2a, + 0x83, 0x51, 0xd6, 0xdf, 0x61, 0xe0, 0x63, 0x13, 0xaf, 0x87, 0xc0, 0x2a, 0x1d, 0xa5, 0xc0, 0x32, + 0xe5, 0x69, 0xf9, 0x00, 0x79, 0xfa, 0xa4, 0x1a, 0xf5, 0xa1, 0x8c, 0x00, 0x4b, 0xeb, 0x94, 0x73, + 0x30, 0x14, 0x27, 0x24, 0x9c, 0xa8, 0xa4, 0xe5, 0xd1, 0x5a, 0x42, 0x42, 0xcc, 0x20, 0xf6, 0x7f, + 0x29, 0xc1, 0xc3, 0xe9, 0x31, 0xd4, 0x2a, 0xe0, 0x3d, 0x29, 0x15, 0xf0, 0x76, 0x53, 0x05, 0xdc, + 0xd9, 0x9b, 0x7c, 0x6b, 0x8f, 0xc7, 0xbe, 0x67, 0x34, 0x04, 0x5a, 0xc8, 0x8c, 0xe2, 0x74, 0x7a, + 0x14, 0xef, 0xec, 0x4d, 0x3e, 0xd6, 0xe3, 0x1d, 0x33, 0xc3, 0xfc, 0x24, 0x0c, 0x47, 0xc4, 0x89, + 0x03, 0x5f, 0x0c, 0xb4, 0xfa, 0x1c, 0x98, 0xb5, 0x62, 0x01, 0xb5, 0x7f, 0xbf, 0x96, 0x1d, 0xec, + 0x05, 0xee, 0xb0, 0x0b, 0x22, 0xe4, 0xc2, 0x10, 0x33, 0xeb, 0xb9, 0x68, 0xb8, 0x72, 0xb8, 0x65, + 0x44, 0xd5, 0x80, 0x22, 0x3d, 0x5b, 0xa5, 0x5f, 0x8d, 0x36, 0x61, 0xc6, 0x02, 0xed, 0x42, 0xb5, + 0x2e, 0xad, 0xed, 0x52, 0x11, 0x7e, 0x29, 0x61, 0x6b, 0x6b, 0x8e, 0x63, 0x54, 0x5e, 0x2b, 0x13, + 0x5d, 0x71, 0x43, 0x04, 0xca, 0x4d, 0x37, 0x11, 0x9f, 0xf5, 0x90, 0xfb, 0xa9, 0x05, 0xd7, 0x78, + 0xc5, 0x11, 0xaa, 0x44, 0x16, 0xdc, 0x04, 0x53, 0xfa, 0xe8, 0x67, 0x2d, 0x18, 0x8d, 0xeb, 0xad, + 0xd5, 0x28, 0xd8, 0x71, 0x1b, 0x24, 0x12, 0xd6, 0xd4, 0x21, 0x45, 0xd3, 0xda, 0xdc, 0xb2, 0x24, + 0xa8, 0xf9, 0xf2, 0xfd, 0xad, 0x86, 0x60, 0x93, 0x2f, 0xdd, 0x65, 0x3c, 0x2c, 0xde, 0x7d, 0x9e, + 0xd4, 0x5d, 0xaa, 0xff, 0xe4, 0xa6, 0x8a, 0xcd, 0x94, 0x43, 0x5b, 0x97, 0xf3, 0xed, 0xfa, 0x36, + 0x5d, 0x6f, 0xba, 0x43, 0x6f, 0xbd, 0xbd, 0x37, 0xf9, 0xf0, 0x5c, 0x3e, 0x4f, 0xdc, 0xab, 0x33, + 0x6c, 0xc0, 0xc2, 0xb6, 0xe7, 0x61, 0xf2, 0x5a, 0x9b, 0x30, 0x97, 0x49, 0x01, 0x03, 0xb6, 0xaa, + 0x09, 0x66, 0x06, 0xcc, 0x80, 0x60, 0x93, 0x2f, 0x7a, 0x0d, 0x86, 0x5b, 0x4e, 0x12, 0xb9, 0xbb, + 0xc2, 0x4f, 0x72, 0x48, 0x7b, 0x7f, 0x99, 0xd1, 0xd2, 0xcc, 0x99, 0xa6, 0xe6, 0x8d, 0x58, 0x30, + 0x42, 0x2d, 0xa8, 0xb4, 0x48, 0xd4, 0x24, 0x13, 0xd5, 0x22, 0x7c, 0xc2, 0xcb, 0x94, 0x94, 0x66, + 0x58, 0xa3, 0xd6, 0x11, 0x6b, 0xc3, 0x9c, 0x0b, 0x7a, 0x05, 0xaa, 0x31, 0xf1, 0x48, 0x9d, 0xda, + 0x37, 0x35, 0xc6, 0xf1, 0x1d, 0x7d, 0xda, 0x7a, 0xd4, 0xb0, 0x58, 0x13, 0x8f, 0xf2, 0x05, 0x26, + 0xff, 0x61, 0x45, 0x92, 0x0e, 0x60, 0xe8, 0xb5, 0x9b, 0xae, 0x3f, 0x01, 0x45, 0x0c, 0xe0, 0x2a, + 0xa3, 0x95, 0x19, 0x40, 0xde, 0x88, 0x05, 0x23, 0xfb, 0x3f, 0x5a, 0x80, 0xd2, 0x42, 0xed, 0x1e, + 0x18, 0xb5, 0xaf, 0xa5, 0x8d, 0xda, 0xa5, 0x22, 0xad, 0x8e, 0x1e, 0x76, 0xed, 0x6f, 0xd4, 0x20, + 0xa3, 0x0e, 0xae, 0x92, 0x38, 0x21, 0x8d, 0x37, 0x45, 0xf8, 0x9b, 0x22, 0xfc, 0x4d, 0x11, 0xae, + 0x44, 0xf8, 0x46, 0x46, 0x84, 0xbf, 0xdb, 0x58, 0xf5, 0xfa, 0x00, 0xf6, 0x55, 0x75, 0x42, 0x6b, + 0xf6, 0xc0, 0x40, 0xa0, 0x92, 0xe0, 0xf2, 0xda, 0xca, 0xd5, 0x5c, 0x99, 0xfd, 0x6a, 0x5a, 0x66, + 0x1f, 0x96, 0xc5, 0xff, 0x0f, 0x52, 0xfa, 0x9f, 0x5b, 0xf0, 0xb6, 0xb4, 0xf4, 0x92, 0x33, 0x67, + 0xb1, 0xe9, 0x07, 0x11, 0x99, 0x77, 0x37, 0x37, 0x49, 0x44, 0xfc, 0x3a, 0x89, 0x95, 0x17, 0xc3, + 0xea, 0xe5, 0xc5, 0x40, 0xcf, 0xc1, 0xd8, 0xcd, 0x38, 0xf0, 0x57, 0x03, 0xd7, 0x17, 0x22, 0x88, + 0x6e, 0x84, 0x4f, 0xdc, 0xde, 0x9b, 0x1c, 0xa3, 0x23, 0x2a, 0xdb, 0x71, 0x0a, 0x0b, 0xcd, 0xc1, + 0xc9, 0x9b, 0xaf, 0xad, 0x3a, 0x89, 0xe1, 0x0e, 0x90, 0x1b, 0x77, 0x76, 0x60, 0x71, 0xf9, 0xa5, + 0x0c, 0x10, 0x77, 0xe3, 0xdb, 0x7f, 0xbd, 0x04, 0x8f, 0x64, 0x5e, 0x24, 0xf0, 0xbc, 0xa0, 0x9d, + 0xd0, 0x4d, 0x0d, 0xfa, 0x8a, 0x05, 0x27, 0x5a, 0x69, 0x8f, 0x43, 0x2c, 0x1c, 0xbb, 0xef, 0x2d, + 0x4c, 0x47, 0x64, 0x5c, 0x1a, 0xb3, 0x13, 0x62, 0x84, 0x4e, 0x64, 0x00, 0x31, 0xee, 0xea, 0x0b, + 0x7a, 0x05, 0x6a, 0x2d, 0x67, 0xf7, 0x5a, 0xd8, 0x70, 0x12, 0xb9, 0x9f, 0xec, 0xed, 0x06, 0x68, + 0x27, 0xae, 0x37, 0xc5, 0x8f, 0xf6, 0xa7, 0x16, 0xfd, 0x64, 0x25, 0x5a, 0x4b, 0x22, 0xd7, 0x6f, + 0x72, 0x77, 0xde, 0xb2, 0x24, 0x83, 0x35, 0x45, 0xfb, 0xcb, 0x56, 0x56, 0x49, 0xa9, 0xd1, 0x89, + 0x9c, 0x84, 0x34, 0x3b, 0xe8, 0x43, 0x50, 0xa1, 0x1b, 0x3f, 0x39, 0x2a, 0x37, 0x8a, 0xd4, 0x9c, + 0xc6, 0x97, 0xd0, 0x4a, 0x94, 0xfe, 0x8b, 0x31, 0x67, 0x6a, 0x7f, 0xa5, 0x96, 0x35, 0x16, 0xd8, + 0xe1, 0xed, 0x79, 0x80, 0x66, 0xb0, 0x4e, 0x5a, 0xa1, 0x47, 0x87, 0xc5, 0x62, 0x27, 0x00, 0xca, + 0xd7, 0xb1, 0xa0, 0x20, 0xd8, 0xc0, 0x42, 0x7f, 0xc9, 0x02, 0x68, 0xca, 0x39, 0x2f, 0x0d, 0x81, + 0x6b, 0x45, 0xbe, 0x8e, 0x5e, 0x51, 0xba, 0x2f, 0x8a, 0x21, 0x36, 0x98, 0xa3, 0x9f, 0xb1, 0xa0, + 0x9a, 0xc8, 0xee, 0x73, 0xd5, 0xb8, 0x5e, 0x64, 0x4f, 0xe4, 0x4b, 0x6b, 0x9b, 0x48, 0x0d, 0x89, + 0xe2, 0x8b, 0x7e, 0xce, 0x02, 0x88, 0x3b, 0x7e, 0x7d, 0x35, 0xf0, 0xdc, 0x7a, 0x47, 0x68, 0xcc, + 0xeb, 0x85, 0xfa, 0x63, 0x14, 0xf5, 0xd9, 0x71, 0x3a, 0x1a, 0xfa, 0x3f, 0x36, 0x38, 0xa3, 0x8f, + 0x40, 0x35, 0x16, 0xd3, 0x4d, 0xe8, 0xc8, 0xf5, 0x62, 0xbd, 0x42, 0x9c, 0xb6, 0x10, 0xaf, 0xe2, + 0x1f, 0x56, 0x3c, 0xd1, 0x97, 0x2c, 0x38, 0x1e, 0xa6, 0xfd, 0x7c, 0x42, 0x1d, 0x16, 0x27, 0x03, + 0x32, 0x7e, 0xc4, 0xd9, 0x53, 0xb7, 0xf7, 0x26, 0x8f, 0x67, 0x1a, 0x71, 0xb6, 0x17, 0x54, 0x02, + 0xea, 0x19, 0xbc, 0x12, 0x72, 0x9f, 0xe3, 0x88, 0x96, 0x80, 0x0b, 0x59, 0x20, 0xee, 0xc6, 0x47, + 0xab, 0x70, 0x9a, 0xf6, 0xae, 0xc3, 0xcd, 0x4f, 0xa9, 0x5e, 0x62, 0xa6, 0x0c, 0xab, 0xb3, 0x8f, + 0x8a, 0x19, 0xc2, 0xbc, 0xfa, 0x59, 0x1c, 0x9c, 0xfb, 0x24, 0xfa, 0x5d, 0x0b, 0x1e, 0x75, 0x99, + 0x1a, 0x30, 0x1d, 0xe6, 0x5a, 0x23, 0x88, 0x93, 0x58, 0x52, 0xa8, 0xac, 0xe8, 0xa5, 0x7e, 0x66, + 0x7f, 0x50, 0xbc, 0xc1, 0xa3, 0x8b, 0xfb, 0x74, 0x09, 0xef, 0xdb, 0x61, 0xf4, 0xa3, 0x70, 0x4c, + 0xae, 0x8b, 0x55, 0x2a, 0x82, 0x99, 0xa2, 0xad, 0xcd, 0x9e, 0xbc, 0xbd, 0x37, 0x79, 0x6c, 0xdd, + 0x04, 0xe0, 0x34, 0x9e, 0xfd, 0xad, 0x52, 0xea, 0x3c, 0x44, 0x39, 0x21, 0x99, 0xb8, 0xa9, 0x4b, + 0xff, 0x8f, 0x94, 0x9e, 0x85, 0x8a, 0x1b, 0xe5, 0x5d, 0xd2, 0xe2, 0x46, 0x35, 0xc5, 0xd8, 0x60, + 0x4e, 0x8d, 0xd2, 0x93, 0x4e, 0xd6, 0xd5, 0x29, 0x24, 0xe0, 0x2b, 0x45, 0x76, 0xa9, 0xfb, 0xf4, + 0xea, 0x11, 0xd1, 0xb5, 0x93, 0x5d, 0x20, 0xdc, 0xdd, 0x25, 0xfb, 0x5b, 0xe9, 0x33, 0x18, 0x63, + 0xf1, 0xf6, 0x71, 0xbe, 0xf4, 0x59, 0x0b, 0x46, 0xa3, 0xc0, 0xf3, 0x5c, 0xbf, 0x49, 0x05, 0x8d, + 0xd0, 0x96, 0xef, 0x3f, 0x12, 0x85, 0x25, 0x24, 0x0a, 0x33, 0x6d, 0xb1, 0xe6, 0x89, 0xcd, 0x0e, + 0xd8, 0x7f, 0x62, 0xc1, 0x44, 0x2f, 0x81, 0x88, 0x08, 0xbc, 0x55, 0xae, 0x76, 0x15, 0x5d, 0xb1, + 0xe2, 0xcf, 0x13, 0x8f, 0x28, 0xc7, 0x73, 0x75, 0xf6, 0x09, 0xf1, 0x9a, 0x6f, 0x5d, 0xed, 0x8d, + 0x8a, 0xf7, 0xa3, 0x83, 0x5e, 0x86, 0x13, 0xc6, 0x7b, 0xc5, 0x6a, 0x60, 0x6a, 0xb3, 0x53, 0xd4, + 0x02, 0x99, 0xc9, 0xc0, 0xee, 0xec, 0x4d, 0x3e, 0x94, 0x6d, 0x13, 0x12, 0xbb, 0x8b, 0x8e, 0xfd, + 0xf5, 0x52, 0xf6, 0x6b, 0x29, 0x65, 0xfb, 0x86, 0xd5, 0xb5, 0x9d, 0x7f, 0xef, 0x51, 0x28, 0x38, + 0xb6, 0xf1, 0x57, 0x01, 0x1c, 0xbd, 0x71, 0xee, 0xe3, 0x09, 0xb1, 0xfd, 0x2f, 0x87, 0x60, 0x9f, + 0x9e, 0xf5, 0x61, 0x3d, 0x0f, 0x7c, 0xac, 0xf8, 0x69, 0x4b, 0x1d, 0x39, 0x95, 0xd9, 0x22, 0x6f, + 0x1c, 0xd5, 0xd8, 0xf3, 0x0d, 0x4c, 0xcc, 0xa3, 0x14, 0x94, 0x1b, 0x3b, 0x7d, 0xb8, 0x85, 0xbe, + 0x6a, 0xa5, 0x0f, 0xcd, 0x78, 0xd8, 0x99, 0x7b, 0x64, 0x7d, 0x32, 0x4e, 0xe2, 0x78, 0xc7, 0xf4, + 0xf9, 0x4d, 0xaf, 0x33, 0xba, 0x29, 0x80, 0x4d, 0xd7, 0x77, 0x3c, 0xf7, 0x75, 0xba, 0x3d, 0xa9, + 0x30, 0x0d, 0xcb, 0x4c, 0x96, 0x8b, 0xaa, 0x15, 0x1b, 0x18, 0x67, 0xff, 0x22, 0x8c, 0x1a, 0x6f, + 0x9e, 0x13, 0x5c, 0x71, 0xda, 0x0c, 0xae, 0xa8, 0x19, 0x31, 0x11, 0x67, 0xdf, 0x0d, 0x27, 0xb2, + 0x1d, 0x1c, 0xe4, 0x79, 0xfb, 0x7f, 0x8c, 0x64, 0x4f, 0xb1, 0xd6, 0x49, 0xd4, 0xa2, 0x5d, 0x7b, + 0xd3, 0xb3, 0xf4, 0xa6, 0x67, 0xe9, 0x4d, 0xcf, 0x92, 0x79, 0x38, 0x20, 0xbc, 0x26, 0x23, 0xf7, + 0xc8, 0x6b, 0x92, 0xf2, 0x03, 0x55, 0x0b, 0xf7, 0x03, 0xd9, 0xb7, 0x2b, 0x90, 0xb2, 0xa3, 0xf8, + 0x78, 0xff, 0x30, 0x8c, 0x44, 0x24, 0x0c, 0xae, 0xe1, 0x25, 0xa1, 0x43, 0x74, 0xac, 0x3d, 0x6f, + 0xc6, 0x12, 0x4e, 0x75, 0x4d, 0xe8, 0x24, 0x5b, 0x42, 0x89, 0x28, 0x5d, 0xb3, 0xea, 0x24, 0x5b, + 0x98, 0x41, 0xd0, 0xbb, 0x61, 0x3c, 0x71, 0xa2, 0x26, 0xb5, 0xb7, 0x77, 0xd8, 0x67, 0x15, 0x67, + 0x9d, 0x0f, 0x09, 0xdc, 0xf1, 0xf5, 0x14, 0x14, 0x67, 0xb0, 0xd1, 0x6b, 0x30, 0xb4, 0x45, 0xbc, + 0x96, 0x18, 0xf2, 0xb5, 0xe2, 0x64, 0x3c, 0x7b, 0xd7, 0x4b, 0xc4, 0x6b, 0x71, 0x09, 0x44, 0x7f, + 0x61, 0xc6, 0x8a, 0xce, 0xb7, 0xda, 0x76, 0x3b, 0x4e, 0x82, 0x96, 0xfb, 0xba, 0x74, 0xf1, 0xbd, + 0xb7, 0x60, 0xc6, 0x57, 0x24, 0x7d, 0xee, 0x4b, 0x51, 0x7f, 0xb1, 0xe6, 0xcc, 0xfa, 0xd1, 0x70, + 0x23, 0xf6, 0xa9, 0x3a, 0xc2, 0x53, 0x57, 0x74, 0x3f, 0xe6, 0x25, 0x7d, 0xde, 0x0f, 0xf5, 0x17, + 0x6b, 0xce, 0xa8, 0xa3, 0xe6, 0xfd, 0x28, 0xeb, 0xc3, 0xb5, 0x82, 0xfb, 0xc0, 0xe7, 0x7c, 0xee, + 0xfc, 0x7f, 0x02, 0x2a, 0xf5, 0x2d, 0x27, 0x4a, 0x26, 0xc6, 0xd8, 0xa4, 0x51, 0x3e, 0x9d, 0x39, + 0xda, 0x88, 0x39, 0x0c, 0x3d, 0x06, 0xe5, 0x88, 0x6c, 0xb2, 0xb8, 0x4d, 0x23, 0xa2, 0x07, 0x93, + 0x4d, 0x4c, 0xdb, 0xed, 0x5f, 0x2a, 0xa5, 0xcd, 0xa5, 0xf4, 0x7b, 0xf3, 0xd9, 0x5e, 0x6f, 0x47, + 0xb1, 0xf4, 0xfb, 0x18, 0xb3, 0x9d, 0x35, 0x63, 0x09, 0x47, 0x1f, 0xb3, 0x60, 0xe4, 0x66, 0x1c, + 0xf8, 0x3e, 0x49, 0x84, 0x6a, 0xba, 0x5e, 0xf0, 0x50, 0x5c, 0xe6, 0xd4, 0x75, 0x1f, 0x44, 0x03, + 0x96, 0x7c, 0x69, 0x77, 0xc9, 0x6e, 0xdd, 0x6b, 0x37, 0xba, 0x82, 0x34, 0x2e, 0xf0, 0x66, 0x2c, + 0xe1, 0x14, 0xd5, 0xf5, 0x39, 0xea, 0x50, 0x1a, 0x75, 0xd1, 0x17, 0xa8, 0x02, 0x6e, 0xff, 0xdf, + 0x61, 0x38, 0x93, 0xbb, 0x38, 0xa8, 0x21, 0xc3, 0x4c, 0x85, 0x8b, 0xae, 0x47, 0x64, 0x78, 0x12, + 0x33, 0x64, 0xae, 0xab, 0x56, 0x6c, 0x60, 0xa0, 0x9f, 0x06, 0x08, 0x9d, 0xc8, 0x69, 0x11, 0xe5, + 0x97, 0x3d, 0xb4, 0xbd, 0x40, 0xfb, 0xb1, 0x2a, 0x69, 0xea, 0xbd, 0xa9, 0x6a, 0x8a, 0xb1, 0xc1, + 0x12, 0x3d, 0x0f, 0xa3, 0x11, 0xf1, 0x88, 0x13, 0xb3, 0xb0, 0xdf, 0x6c, 0x0e, 0x03, 0xd6, 0x20, + 0x6c, 0xe2, 0xa1, 0x27, 0x55, 0x24, 0x57, 0x26, 0xa2, 0x25, 0x1d, 0xcd, 0x85, 0x3e, 0x67, 0xc1, + 0xf8, 0xa6, 0xeb, 0x11, 0xcd, 0x5d, 0x64, 0x1c, 0xac, 0x1c, 0xfe, 0x25, 0x2f, 0x9a, 0x74, 0xb5, + 0x84, 0x4c, 0x35, 0xc7, 0x38, 0xc3, 0x9e, 0x7e, 0xe6, 0x1d, 0x12, 0x31, 0xd1, 0x3a, 0x9c, 0xfe, + 0xcc, 0xd7, 0x79, 0x33, 0x96, 0x70, 0x34, 0x03, 0xc7, 0x43, 0x27, 0x8e, 0xe7, 0x22, 0xd2, 0x20, + 0x7e, 0xe2, 0x3a, 0x1e, 0xcf, 0x07, 0xa8, 0xea, 0x78, 0xe0, 0xd5, 0x34, 0x18, 0x67, 0xf1, 0xd1, + 0xfb, 0xe0, 0x61, 0xee, 0xf8, 0x58, 0x76, 0xe3, 0xd8, 0xf5, 0x9b, 0x7a, 0x1a, 0x08, 0xff, 0xcf, + 0xa4, 0x20, 0xf5, 0xf0, 0x62, 0x3e, 0x1a, 0xee, 0xf5, 0x3c, 0x7a, 0x1a, 0xaa, 0xf1, 0xb6, 0x1b, + 0xce, 0x45, 0x8d, 0x98, 0x1d, 0x7a, 0x54, 0xb5, 0xb7, 0x71, 0x4d, 0xb4, 0x63, 0x85, 0x81, 0xea, + 0x30, 0xc6, 0x3f, 0x09, 0x0f, 0x45, 0x13, 0xf2, 0xf1, 0x99, 0x9e, 0xea, 0x51, 0xa4, 0xb7, 0x4d, + 0x61, 0xe7, 0xd6, 0x05, 0x79, 0x04, 0xc3, 0x4f, 0x0c, 0xae, 0x1b, 0x64, 0x70, 0x8a, 0x28, 0x9d, + 0x4c, 0xdb, 0xed, 0x0d, 0x22, 0x06, 0x92, 0xc9, 0x3f, 0x63, 0x32, 0x5d, 0xd1, 0x20, 0x6c, 0xe2, + 0xb1, 0xa0, 0xbe, 0xd0, 0x15, 0xff, 0x64, 0x88, 0x3a, 0x0f, 0xea, 0xd3, 0xcd, 0xd8, 0xc4, 0xb1, + 0x7f, 0xa1, 0x94, 0xde, 0xdb, 0x9b, 0xe2, 0x00, 0xc5, 0x74, 0xd1, 0x27, 0xd7, 0x9d, 0x48, 0xfa, + 0x7d, 0x0e, 0x99, 0x20, 0x21, 0xe8, 0x5e, 0x77, 0x22, 0x53, 0x7c, 0x30, 0x06, 0x58, 0x72, 0x42, + 0x37, 0x61, 0x28, 0xf1, 0x9c, 0x82, 0x32, 0xaa, 0x0c, 0x8e, 0xda, 0xd5, 0xb2, 0x34, 0x13, 0x63, + 0xc6, 0x03, 0x3d, 0x4a, 0xf7, 0x17, 0x1b, 0xf2, 0x30, 0x46, 0x6c, 0x09, 0x36, 0x62, 0xcc, 0x5a, + 0xed, 0x3b, 0x90, 0x23, 0xc1, 0x95, 0xca, 0x44, 0xe7, 0x01, 0xe8, 0x56, 0x75, 0x35, 0x22, 0x9b, + 0xee, 0xae, 0x30, 0x59, 0x94, 0x94, 0xb8, 0xaa, 0x20, 0xd8, 0xc0, 0x92, 0xcf, 0xac, 0xb5, 0x37, + 0xe9, 0x33, 0xa5, 0xee, 0x67, 0x38, 0x04, 0x1b, 0x58, 0xe8, 0x39, 0x18, 0x76, 0x5b, 0x4e, 0x53, + 0x05, 0x7b, 0x3e, 0x4a, 0xc5, 0xc3, 0x22, 0x6b, 0xb9, 0xb3, 0x37, 0x39, 0xae, 0x3a, 0xc4, 0x9a, + 0xb0, 0xc0, 0x45, 0x5f, 0xb7, 0x60, 0xac, 0x1e, 0xb4, 0x5a, 0x81, 0xcf, 0x37, 0x78, 0x62, 0xb7, + 0x7a, 0xf3, 0xa8, 0x0c, 0x8a, 0xa9, 0x39, 0x83, 0x19, 0xdf, 0xae, 0xaa, 0xd4, 0x2f, 0x13, 0x84, + 0x53, 0xbd, 0x32, 0xa5, 0x48, 0xe5, 0x00, 0x29, 0xf2, 0xeb, 0x16, 0x9c, 0xe4, 0xcf, 0x1a, 0xfb, + 0x4e, 0x91, 0xe5, 0x14, 0x1c, 0xf1, 0x6b, 0x75, 0x6d, 0xc5, 0x95, 0x3f, 0xb0, 0x0b, 0x8e, 0xbb, + 0x3b, 0x89, 0x16, 0xe0, 0xe4, 0x66, 0x10, 0xd5, 0x89, 0x39, 0x10, 0x42, 0x04, 0x2a, 0x42, 0x17, + 0xb3, 0x08, 0xb8, 0xfb, 0x19, 0x74, 0x1d, 0x1e, 0x32, 0x1a, 0xcd, 0x71, 0xe0, 0x52, 0xf0, 0x71, + 0x41, 0xed, 0xa1, 0x8b, 0xb9, 0x58, 0xb8, 0xc7, 0xd3, 0x69, 0xd7, 0x4c, 0xad, 0x0f, 0xd7, 0xcc, + 0xab, 0xf0, 0x48, 0xbd, 0x7b, 0x64, 0x76, 0xe2, 0xf6, 0x46, 0xcc, 0x65, 0x62, 0x75, 0xf6, 0x07, + 0x04, 0x81, 0x47, 0xe6, 0x7a, 0x21, 0xe2, 0xde, 0x34, 0xd0, 0x87, 0xa0, 0x1a, 0x11, 0xf6, 0x55, + 0x62, 0x91, 0xf2, 0x73, 0xc8, 0xfd, 0xb8, 0xb6, 0x75, 0x39, 0x59, 0x2d, 0xe5, 0x45, 0x43, 0x8c, + 0x15, 0x47, 0x74, 0x0b, 0x46, 0x42, 0x27, 0xa9, 0x6f, 0x89, 0x44, 0x9f, 0x43, 0x47, 0xda, 0x28, + 0xe6, 0xcc, 0xdb, 0x6e, 0xa4, 0x06, 0x73, 0x26, 0x58, 0x72, 0xa3, 0x76, 0x4f, 0x3d, 0x68, 0x85, + 0x81, 0x4f, 0xfc, 0x24, 0x9e, 0x38, 0xa6, 0xed, 0x9e, 0x39, 0xd5, 0x8a, 0x0d, 0x0c, 0xb4, 0x0a, + 0xa7, 0x99, 0x77, 0xea, 0x86, 0x9b, 0x6c, 0x05, 0xed, 0x44, 0x6e, 0xb6, 0x26, 0xc6, 0xd3, 0x87, + 0x22, 0x4b, 0x39, 0x38, 0x38, 0xf7, 0xc9, 0xb3, 0xef, 0x81, 0x93, 0x5d, 0x4b, 0x79, 0x20, 0xc7, + 0xd0, 0x3c, 0x3c, 0x94, 0xbf, 0x68, 0x06, 0x72, 0x0f, 0xfd, 0xc3, 0x4c, 0x80, 0xae, 0x61, 0xb2, + 0xf7, 0xe1, 0x6a, 0x74, 0xa0, 0x4c, 0xfc, 0x1d, 0xa1, 0x43, 0x2e, 0x1e, 0xee, 0xdb, 0x5d, 0xf0, + 0x77, 0xf8, 0x9a, 0x67, 0xfe, 0x94, 0x0b, 0xfe, 0x0e, 0xa6, 0xb4, 0xd1, 0x17, 0xac, 0x94, 0xc9, + 0xc9, 0x1d, 0x94, 0x1f, 0x38, 0x92, 0x3d, 0x4a, 0xdf, 0x56, 0xa8, 0xfd, 0xaf, 0x4a, 0x70, 0xee, + 0x20, 0x22, 0x7d, 0x0c, 0xdf, 0x13, 0x30, 0x1c, 0xb3, 0x23, 0x77, 0x21, 0x94, 0x47, 0xe9, 0x5c, + 0xe5, 0x87, 0xf0, 0xaf, 0x62, 0x01, 0x42, 0x1e, 0x94, 0x5b, 0x4e, 0x28, 0xfc, 0x56, 0x8b, 0x87, + 0x4d, 0xd9, 0xa1, 0xff, 0x1d, 0x6f, 0xd9, 0x09, 0xb9, 0xc1, 0x62, 0x34, 0x60, 0xca, 0x06, 0x25, + 0x50, 0x71, 0xa2, 0xc8, 0x91, 0xe7, 0xbb, 0x57, 0x8a, 0xe1, 0x37, 0x43, 0x49, 0xf2, 0xe3, 0xb1, + 0x54, 0x13, 0xe6, 0xcc, 0xec, 0x2f, 0x55, 0x53, 0x69, 0x2b, 0xec, 0xd0, 0x3e, 0x86, 0x61, 0xe1, + 0xae, 0xb2, 0x8a, 0xce, 0x94, 0xe2, 0x79, 0x87, 0x6c, 0x47, 0x2a, 0xb2, 0xb7, 0x05, 0x2b, 0xf4, + 0x29, 0x8b, 0xe5, 0x48, 0xcb, 0x54, 0x1e, 0xb1, 0x0f, 0x3c, 0x9a, 0x94, 0x6d, 0x33, 0xf3, 0x5a, + 0x36, 0x62, 0x93, 0xbb, 0xa8, 0x75, 0xc0, 0xec, 0xdf, 0xee, 0x5a, 0x07, 0xcc, 0x9e, 0x95, 0x70, + 0xb4, 0x9b, 0x73, 0x38, 0x5f, 0x40, 0x9e, 0x6d, 0x1f, 0xc7, 0xf1, 0x5f, 0xb5, 0xe0, 0xa4, 0x9b, + 0x3d, 0x65, 0x15, 0xbb, 0xa6, 0x43, 0x86, 0x7f, 0xf4, 0x3e, 0xc4, 0x55, 0xea, 0xbc, 0x0b, 0x84, + 0xbb, 0x3b, 0x83, 0x1a, 0x30, 0xe4, 0xfa, 0x9b, 0x81, 0x30, 0x62, 0x66, 0x0f, 0xd7, 0xa9, 0x45, + 0x7f, 0x33, 0xd0, 0xab, 0x99, 0xfe, 0xc3, 0x8c, 0x3a, 0x5a, 0x82, 0xd3, 0x91, 0xf0, 0x6b, 0x5d, + 0x72, 0xe3, 0x24, 0x88, 0x3a, 0x4b, 0x6e, 0xcb, 0x4d, 0x98, 0x01, 0x52, 0x9e, 0x9d, 0xa0, 0xfa, + 0x01, 0xe7, 0xc0, 0x71, 0xee, 0x53, 0xe8, 0x75, 0x18, 0x91, 0x49, 0xdd, 0xd5, 0x22, 0x76, 0xa0, + 0xdd, 0xf3, 0x5f, 0x4d, 0xa6, 0x35, 0x91, 0xbf, 0x2d, 0x19, 0xa2, 0x4f, 0x5a, 0x30, 0xce, 0x7f, + 0x5f, 0xea, 0x34, 0x78, 0xb2, 0x54, 0xad, 0x88, 0xf0, 0xe5, 0xb5, 0x14, 0xcd, 0x59, 0x44, 0xb7, + 0xbf, 0xe9, 0x36, 0x9c, 0xe1, 0x6b, 0x7f, 0x7d, 0x0c, 0xba, 0xcf, 0x82, 0xd1, 0x87, 0xa1, 0x16, + 0xa9, 0x9c, 0x77, 0xab, 0x08, 0xcb, 0x41, 0x4e, 0x35, 0x71, 0x0e, 0xad, 0xac, 0x32, 0x9d, 0xdd, + 0xae, 0x39, 0xd2, 0xbd, 0x53, 0xac, 0x8f, 0x8c, 0x0b, 0x58, 0x66, 0x82, 0xab, 0x3e, 0x0e, 0xec, + 0xf8, 0x75, 0xcc, 0x78, 0xa0, 0x08, 0x86, 0xb7, 0x88, 0xe3, 0x25, 0x5b, 0xc5, 0x9c, 0x5c, 0x5c, + 0x62, 0xb4, 0xb2, 0x99, 0x4f, 0xbc, 0x15, 0x0b, 0x4e, 0x68, 0x17, 0x46, 0xb6, 0xf8, 0x5c, 0x14, + 0xdb, 0x99, 0xe5, 0xc3, 0x0e, 0x6e, 0x6a, 0x82, 0xeb, 0x99, 0x27, 0x1a, 0xb0, 0x64, 0xc7, 0x82, + 0x8c, 0x8c, 0x30, 0x08, 0x2e, 0x45, 0x8a, 0x4b, 0xfa, 0xea, 0x3f, 0x06, 0xe2, 0x83, 0x30, 0x16, + 0x91, 0x7a, 0xe0, 0xd7, 0x5d, 0x8f, 0x34, 0x66, 0xe4, 0xa9, 0xc4, 0x20, 0xa9, 0x42, 0xcc, 0xf9, + 0x80, 0x0d, 0x1a, 0x38, 0x45, 0x91, 0x2d, 0x32, 0x95, 0x28, 0x4b, 0x3f, 0x08, 0x11, 0x5e, 0xf0, + 0xa5, 0x82, 0xd2, 0x72, 0x19, 0x4d, 0xbe, 0xc8, 0xd2, 0x6d, 0x38, 0xc3, 0x17, 0xbd, 0x0c, 0x10, + 0x6c, 0xf0, 0x48, 0xa2, 0x99, 0x44, 0xb8, 0xc4, 0x07, 0x79, 0xd5, 0x71, 0x9e, 0x33, 0x28, 0x29, + 0x60, 0x83, 0x1a, 0xba, 0x02, 0xc0, 0x97, 0xcd, 0x7a, 0x27, 0x94, 0x7b, 0x1e, 0x99, 0xeb, 0x05, + 0x6b, 0x0a, 0x72, 0x67, 0x6f, 0xb2, 0xdb, 0x45, 0xc9, 0xa2, 0x35, 0x8c, 0xc7, 0xd1, 0x4f, 0xc1, + 0x48, 0xdc, 0x6e, 0xb5, 0x1c, 0xe5, 0x30, 0x2f, 0x30, 0x0b, 0x91, 0xd3, 0x35, 0xa4, 0x22, 0x6f, + 0xc0, 0x92, 0x23, 0xba, 0x49, 0xe5, 0xbb, 0x10, 0x4f, 0x7c, 0x15, 0x71, 0xf3, 0x84, 0xbb, 0x8d, + 0xde, 0x29, 0xf7, 0x00, 0x38, 0x07, 0xe7, 0xce, 0xde, 0xe4, 0x43, 0xe9, 0xf6, 0xa5, 0x40, 0xe4, + 0x05, 0xe6, 0xd2, 0x44, 0x97, 0x65, 0xb9, 0x19, 0xfa, 0xda, 0xd2, 0xc5, 0xf4, 0x94, 0x2e, 0x37, + 0xc3, 0x9a, 0x7b, 0x8f, 0x99, 0xf9, 0x30, 0x5a, 0x86, 0x53, 0xf5, 0xc0, 0x4f, 0xa2, 0xc0, 0xf3, + 0x78, 0xb9, 0x25, 0xbe, 0xfd, 0xe4, 0x0e, 0xf5, 0xb7, 0x8a, 0x6e, 0x9f, 0x9a, 0xeb, 0x46, 0xc1, + 0x79, 0xcf, 0x51, 0x83, 0x3c, 0xab, 0x1c, 0xc6, 0x0b, 0x39, 0xe3, 0x4c, 0xd1, 0x14, 0x12, 0x4a, + 0x79, 0x49, 0x0f, 0x50, 0x13, 0x7e, 0x3a, 0xee, 0x53, 0x7c, 0xb1, 0xe7, 0x60, 0x8c, 0xec, 0x26, + 0x24, 0xf2, 0x1d, 0xef, 0x1a, 0x5e, 0x92, 0xfe, 0x6d, 0xb6, 0x30, 0x2f, 0x18, 0xed, 0x38, 0x85, + 0x85, 0x6c, 0xe5, 0x08, 0x32, 0x12, 0x70, 0xb9, 0x23, 0x48, 0xba, 0x7d, 0xec, 0xff, 0x59, 0x4a, + 0x19, 0xac, 0xeb, 0x11, 0x21, 0x28, 0x80, 0x8a, 0x1f, 0x34, 0x94, 0x42, 0xba, 0x5c, 0x8c, 0x42, + 0xba, 0x1a, 0x34, 0x8c, 0x42, 0x39, 0xf4, 0x5f, 0x8c, 0x39, 0x1f, 0x56, 0x49, 0x44, 0x96, 0x5c, + 0x61, 0x00, 0xb1, 0x11, 0x2b, 0x92, 0xb3, 0xaa, 0x24, 0xb2, 0x62, 0x32, 0xc2, 0x69, 0xbe, 0x68, + 0x1b, 0x2a, 0x5b, 0x41, 0x9c, 0xc8, 0xed, 0xd9, 0x21, 0x77, 0x82, 0x97, 0x82, 0x38, 0x61, 0x56, + 0x96, 0x7a, 0x6d, 0xda, 0x12, 0x63, 0xce, 0xc3, 0xfe, 0x4f, 0x56, 0xea, 0x34, 0xe3, 0x06, 0x8b, + 0x81, 0xde, 0x21, 0x3e, 0x95, 0x35, 0x66, 0xd0, 0xd7, 0x8f, 0x66, 0x32, 0x4a, 0xdf, 0xd6, 0xab, + 0xc4, 0xd9, 0x2d, 0x4a, 0x61, 0x8a, 0x91, 0x30, 0xe2, 0xc3, 0x3e, 0x6a, 0xa5, 0x73, 0x7b, 0x4b, + 0x45, 0x6c, 0xc0, 0xcc, 0xfc, 0xf6, 0x03, 0xd3, 0x84, 0xed, 0x2f, 0x58, 0x30, 0x32, 0xeb, 0xd4, + 0xb7, 0x83, 0xcd, 0x4d, 0xf4, 0x34, 0x54, 0x1b, 0xed, 0xc8, 0x4c, 0x33, 0x56, 0x8e, 0x95, 0x79, + 0xd1, 0x8e, 0x15, 0x06, 0x9d, 0xc3, 0x9b, 0x4e, 0x5d, 0x66, 0xb9, 0x97, 0xf9, 0x1c, 0xbe, 0xc8, + 0x5a, 0xb0, 0x80, 0xa0, 0xe7, 0x61, 0xb4, 0xe5, 0xec, 0xca, 0x87, 0xb3, 0x47, 0x29, 0xcb, 0x1a, + 0x84, 0x4d, 0x3c, 0xfb, 0x9f, 0x59, 0x30, 0x31, 0xeb, 0xc4, 0x6e, 0x7d, 0xa6, 0x9d, 0x6c, 0xcd, + 0xba, 0xc9, 0x46, 0xbb, 0xbe, 0x4d, 0x12, 0x5e, 0xda, 0x80, 0xf6, 0xb2, 0x1d, 0xd3, 0xa5, 0xa4, + 0xf6, 0xbd, 0xaa, 0x97, 0xd7, 0x44, 0x3b, 0x56, 0x18, 0xe8, 0x75, 0x18, 0x0d, 0x9d, 0x38, 0xbe, + 0x15, 0x44, 0x0d, 0x4c, 0x36, 0x8b, 0x29, 0x2c, 0xb2, 0x46, 0xea, 0x11, 0x49, 0x30, 0xd9, 0x14, + 0xc7, 0xfd, 0x9a, 0x3e, 0x36, 0x99, 0xd9, 0x9f, 0xb5, 0xe0, 0x91, 0x59, 0xe2, 0x44, 0x24, 0x62, + 0x75, 0x48, 0xd4, 0x8b, 0xcc, 0x79, 0x41, 0xbb, 0x81, 0x5e, 0x83, 0x6a, 0x42, 0x9b, 0x69, 0xb7, + 0xac, 0x62, 0xbb, 0xc5, 0x4e, 0xeb, 0xd7, 0x05, 0x71, 0xac, 0xd8, 0xd8, 0x7f, 0xcd, 0x82, 0x31, + 0x76, 0xf0, 0x39, 0x4f, 0x12, 0xc7, 0xf5, 0xba, 0xca, 0x75, 0x59, 0x7d, 0x96, 0xeb, 0x3a, 0x07, + 0x43, 0x5b, 0x41, 0x8b, 0x64, 0x0f, 0xed, 0x2f, 0x05, 0x2d, 0x82, 0x19, 0x04, 0x3d, 0x4b, 0x3f, + 0xbc, 0xeb, 0x27, 0x0e, 0x5d, 0x02, 0xd2, 0xdd, 0x7d, 0x9c, 0x7f, 0x74, 0xd5, 0x8c, 0x4d, 0x1c, + 0xfb, 0xb7, 0x6a, 0x30, 0x22, 0x22, 0x3b, 0xfa, 0x2e, 0x6f, 0x21, 0xfd, 0x1f, 0xa5, 0x9e, 0xfe, + 0x8f, 0x18, 0x86, 0xeb, 0xac, 0x6e, 0xa0, 0xb0, 0x6d, 0xaf, 0x14, 0x12, 0x0a, 0xc4, 0x4b, 0x11, + 0xea, 0x6e, 0xf1, 0xff, 0x58, 0xb0, 0x42, 0x9f, 0xb7, 0xe0, 0x78, 0x3d, 0xf0, 0x7d, 0x52, 0xd7, + 0x86, 0xd7, 0x50, 0x11, 0x11, 0x1f, 0x73, 0x69, 0xa2, 0xfa, 0xd4, 0x2d, 0x03, 0xc0, 0x59, 0xf6, + 0xe8, 0x45, 0x38, 0xc6, 0xc7, 0xec, 0x7a, 0xca, 0x47, 0xaf, 0xab, 0x38, 0x99, 0x40, 0x9c, 0xc6, + 0x45, 0x53, 0xfc, 0xac, 0x43, 0xd4, 0x4b, 0x1a, 0xd6, 0xae, 0x4c, 0xa3, 0x52, 0x92, 0x81, 0x81, + 0x22, 0x40, 0x11, 0xd9, 0x8c, 0x48, 0xbc, 0x25, 0x22, 0x5f, 0x98, 0xd1, 0x37, 0x72, 0x77, 0xa9, + 0xf0, 0xb8, 0x8b, 0x12, 0xce, 0xa1, 0x8e, 0xb6, 0xc5, 0x06, 0xbc, 0x5a, 0x84, 0x0c, 0x15, 0x9f, + 0xb9, 0xe7, 0x3e, 0x7c, 0x12, 0x2a, 0xf1, 0x96, 0x13, 0x35, 0x98, 0xb1, 0x59, 0xe6, 0xe9, 0x57, + 0x6b, 0xb4, 0x01, 0xf3, 0x76, 0x34, 0x0f, 0x27, 0x32, 0x35, 0xa8, 0x62, 0xe1, 0x4b, 0x57, 0xa9, + 0x36, 0x99, 0xea, 0x55, 0x31, 0xee, 0x7a, 0xc2, 0x74, 0xce, 0x8c, 0x1e, 0xe0, 0x9c, 0xe9, 0xa8, + 0xf8, 0x4a, 0xee, 0xe5, 0x7e, 0xa9, 0x90, 0x01, 0xe8, 0x2b, 0x98, 0xf2, 0x33, 0x99, 0x60, 0xca, + 0x63, 0xac, 0x03, 0xd7, 0x8b, 0xe9, 0xc0, 0xe0, 0x91, 0x93, 0xf7, 0x33, 0x12, 0xf2, 0xcf, 0x2d, + 0x90, 0xdf, 0x75, 0xce, 0xa9, 0x6f, 0x11, 0x3a, 0x65, 0xd0, 0xbb, 0x61, 0x5c, 0xed, 0xeb, 0xe7, + 0x82, 0xb6, 0xcf, 0x83, 0x20, 0xcb, 0xda, 0xf0, 0xc4, 0x29, 0x28, 0xce, 0x60, 0xa3, 0x69, 0xa8, + 0xd1, 0x71, 0xe2, 0x8f, 0x72, 0x5d, 0xab, 0x7c, 0x07, 0x33, 0xab, 0x8b, 0xe2, 0x29, 0x8d, 0x83, + 0x02, 0x38, 0xe9, 0x39, 0x71, 0xc2, 0x7a, 0x40, 0xb7, 0xf9, 0x77, 0x59, 0x88, 0x82, 0xe5, 0x73, + 0x2c, 0x65, 0x09, 0xe1, 0x6e, 0xda, 0xf6, 0xb7, 0x87, 0xe0, 0x58, 0x4a, 0x32, 0x0e, 0xa8, 0xa4, + 0x9f, 0x86, 0xaa, 0xd4, 0x9b, 0xd9, 0x92, 0x39, 0x4a, 0xb9, 0x2a, 0x0c, 0xaa, 0xb4, 0x36, 0xb4, + 0x56, 0xcd, 0x1a, 0x15, 0x86, 0xc2, 0xc5, 0x26, 0x1e, 0x13, 0xca, 0x89, 0x17, 0xcf, 0x79, 0x2e, + 0xf1, 0x13, 0xde, 0xcd, 0x62, 0x84, 0xf2, 0xfa, 0xd2, 0x9a, 0x49, 0x54, 0x0b, 0xe5, 0x0c, 0x00, + 0x67, 0xd9, 0xa3, 0x4f, 0x58, 0x70, 0xcc, 0xb9, 0x15, 0xeb, 0xe2, 0xb6, 0x22, 0x6c, 0xf2, 0x90, + 0x4a, 0x2a, 0x55, 0x2f, 0x97, 0xbb, 0xc4, 0x53, 0x4d, 0x38, 0xcd, 0x14, 0xbd, 0x61, 0x01, 0x22, + 0xbb, 0xa4, 0x2e, 0x03, 0x3b, 0x45, 0x5f, 0x86, 0x8b, 0xd8, 0xfe, 0x5e, 0xe8, 0xa2, 0xcb, 0xa5, + 0x7a, 0x77, 0x3b, 0xce, 0xe9, 0x83, 0xfd, 0x8f, 0xcb, 0x6a, 0x41, 0xe9, 0x58, 0x62, 0xc7, 0x88, + 0x69, 0xb4, 0xee, 0x3e, 0xa6, 0x51, 0xc7, 0x86, 0x74, 0xe7, 0xb7, 0xa6, 0xd2, 0xe1, 0x4a, 0xf7, + 0x29, 0x1d, 0xee, 0x67, 0xac, 0x54, 0x71, 0xa8, 0xd1, 0xf3, 0x2f, 0x17, 0x1b, 0xc7, 0x3c, 0xc5, + 0xe3, 0x56, 0x32, 0xd2, 0x3d, 0x1d, 0xae, 0x44, 0xa5, 0xa9, 0x81, 0x36, 0x90, 0x34, 0xfc, 0xb7, + 0x65, 0x18, 0x35, 0x34, 0x69, 0xae, 0x59, 0x64, 0x3d, 0x60, 0x66, 0x51, 0x69, 0x00, 0xb3, 0xe8, + 0xa7, 0xa1, 0x56, 0x97, 0x52, 0xbe, 0x98, 0xf2, 0xc8, 0x59, 0xdd, 0xa1, 0x05, 0xbd, 0x6a, 0xc2, + 0x9a, 0x27, 0x5a, 0x48, 0x25, 0x51, 0x09, 0x0d, 0x31, 0xc4, 0x34, 0x44, 0x5e, 0x96, 0x93, 0xd0, + 0x14, 0xdd, 0xcf, 0x64, 0xc3, 0x8d, 0x2a, 0x46, 0xb8, 0xd1, 0xea, 0x62, 0x7e, 0xb8, 0xd1, 0xb7, + 0x2d, 0xf5, 0x71, 0xef, 0x41, 0xb5, 0x8c, 0x9b, 0xe9, 0x6a, 0x19, 0x17, 0x0a, 0x19, 0xe6, 0x1e, + 0x65, 0x32, 0xae, 0xc2, 0xc8, 0x5c, 0xd0, 0x6a, 0x39, 0x7e, 0x03, 0xfd, 0x10, 0x8c, 0xd4, 0xf9, + 0x4f, 0xe1, 0xd8, 0x61, 0xc7, 0xa7, 0x02, 0x8a, 0x25, 0x0c, 0x3d, 0x0a, 0x43, 0x4e, 0xd4, 0x94, + 0xce, 0x1c, 0x16, 0x7c, 0x34, 0x13, 0x35, 0x63, 0xcc, 0x5a, 0xed, 0x7f, 0x30, 0x04, 0xec, 0xcc, + 0xdf, 0x89, 0x48, 0x63, 0x3d, 0x60, 0xe5, 0x19, 0x8f, 0xf4, 0xd0, 0x51, 0x6f, 0x96, 0x1e, 0xe4, + 0x83, 0x47, 0xe3, 0xf0, 0xa9, 0x7c, 0xaf, 0x0f, 0x9f, 0xf2, 0xcf, 0x13, 0x87, 0x1e, 0xa0, 0xf3, + 0x44, 0xfb, 0xd3, 0x16, 0x20, 0x15, 0x28, 0xa2, 0x0f, 0xfc, 0xa7, 0xa1, 0xa6, 0x42, 0x46, 0x84, + 0x61, 0xa5, 0x45, 0x84, 0x04, 0x60, 0x8d, 0xd3, 0xc7, 0x0e, 0xf9, 0x09, 0x29, 0xbf, 0xcb, 0xe9, + 0x08, 0x69, 0x26, 0xf5, 0x85, 0x38, 0xb7, 0x7f, 0xbb, 0x04, 0x0f, 0x71, 0x95, 0xbc, 0xec, 0xf8, + 0x4e, 0x93, 0xb4, 0x68, 0xaf, 0xfa, 0x0d, 0xe1, 0xa8, 0xd3, 0xad, 0x99, 0x2b, 0x23, 0x9e, 0x0f, + 0xbb, 0x76, 0xf9, 0x9a, 0xe3, 0xab, 0x6c, 0xd1, 0x77, 0x13, 0xcc, 0x88, 0xa3, 0x18, 0xaa, 0xf2, + 0xee, 0x00, 0x21, 0x8b, 0x0b, 0x62, 0xa4, 0xc4, 0x92, 0xd0, 0x9b, 0x04, 0x2b, 0x46, 0xd4, 0x70, + 0xf5, 0x82, 0xfa, 0x36, 0x26, 0x61, 0xc0, 0xe4, 0xae, 0x11, 0x70, 0xba, 0x24, 0xda, 0xb1, 0xc2, + 0xb0, 0x7f, 0xdb, 0x82, 0xac, 0x46, 0x32, 0xea, 0xe0, 0x59, 0xfb, 0xd6, 0xc1, 0x1b, 0xa0, 0x10, + 0xdd, 0x4f, 0xc2, 0xa8, 0x93, 0x50, 0x23, 0x82, 0x6f, 0xbb, 0xcb, 0x77, 0x77, 0xd6, 0xb2, 0x1c, + 0x34, 0xdc, 0x4d, 0x97, 0x6d, 0xb7, 0x4d, 0x72, 0xf6, 0x1b, 0x16, 0xd4, 0xe6, 0xa3, 0xce, 0xe0, + 0x99, 0x1e, 0xdd, 0x79, 0x1c, 0xa5, 0x81, 0xf2, 0x38, 0x64, 0xa6, 0x48, 0xb9, 0x57, 0xa6, 0x88, + 0xfd, 0xdf, 0x86, 0xe0, 0x64, 0x57, 0xca, 0x10, 0x7a, 0x01, 0xc6, 0xea, 0x62, 0xe6, 0x86, 0xd2, + 0xd7, 0x56, 0x33, 0x23, 0x1a, 0x35, 0x0c, 0xa7, 0x30, 0xfb, 0x58, 0x3b, 0x8b, 0x70, 0x2a, 0x22, + 0xaf, 0xb5, 0x49, 0x9b, 0xcc, 0x6c, 0x26, 0x24, 0x5a, 0x23, 0xf5, 0xc0, 0x6f, 0xf0, 0x42, 0x92, + 0xe5, 0xd9, 0x87, 0x6f, 0xef, 0x4d, 0x9e, 0xc2, 0xdd, 0x60, 0x9c, 0xf7, 0x0c, 0x0a, 0xe1, 0x98, + 0x67, 0x9a, 0xa7, 0x62, 0x6f, 0x72, 0x57, 0x96, 0xad, 0x32, 0x5f, 0x52, 0xcd, 0x38, 0xcd, 0x20, + 0x6d, 0xe3, 0x56, 0xee, 0x93, 0x8d, 0xfb, 0x71, 0x6d, 0xe3, 0xf2, 0xd0, 0x89, 0xf7, 0x17, 0x9c, + 0x32, 0x76, 0xd4, 0x46, 0xee, 0x4b, 0x50, 0x95, 0x61, 0x65, 0x7d, 0x85, 0x63, 0x99, 0x74, 0x7a, + 0x08, 0xdb, 0x27, 0xe1, 0x07, 0x2f, 0x44, 0x91, 0x31, 0x98, 0x57, 0x83, 0x64, 0xc6, 0xf3, 0x82, + 0x5b, 0xd4, 0x7e, 0xb8, 0x16, 0x13, 0xe1, 0xfc, 0xb1, 0xef, 0x94, 0x20, 0x67, 0x1f, 0x45, 0xd7, + 0xa4, 0x36, 0x5a, 0x52, 0x6b, 0x72, 0x30, 0xc3, 0x05, 0xed, 0xf2, 0xd0, 0x3b, 0xae, 0x9e, 0xdf, + 0x57, 0xf4, 0x3e, 0x50, 0x47, 0xe3, 0xa9, 0x8c, 0x1b, 0x15, 0x91, 0x77, 0x1e, 0x40, 0xdb, 0x9a, + 0x22, 0x9f, 0x42, 0x1d, 0xa7, 0x6b, 0x93, 0x14, 0x1b, 0x58, 0xe8, 0x79, 0x18, 0x75, 0xfd, 0x38, + 0x71, 0x3c, 0xef, 0x92, 0xeb, 0x27, 0xc2, 0xbf, 0xa9, 0xec, 0x90, 0x45, 0x0d, 0xc2, 0x26, 0xde, + 0xd9, 0x77, 0x1a, 0xdf, 0x6f, 0x90, 0xef, 0xbe, 0x05, 0x8f, 0x2c, 0xb8, 0x89, 0xca, 0x02, 0x52, + 0xf3, 0x8d, 0x9a, 0x92, 0x4a, 0x56, 0x59, 0x3d, 0xb3, 0xda, 0x8c, 0x2c, 0x9c, 0x52, 0x3a, 0x69, + 0x28, 0x9b, 0x85, 0x63, 0xbf, 0x00, 0xa7, 0x17, 0xdc, 0xe4, 0xa2, 0xeb, 0x91, 0x01, 0x99, 0xd8, + 0xbf, 0x39, 0x0c, 0x63, 0x66, 0x1e, 0xe9, 0x20, 0xe2, 0xfa, 0xb3, 0xd4, 0x5a, 0x14, 0x6f, 0xe7, + 0xaa, 0x73, 0xbf, 0x1b, 0x87, 0x4e, 0x6a, 0xcd, 0x1f, 0x31, 0xc3, 0x60, 0xd4, 0x3c, 0xb1, 0xd9, + 0x01, 0x74, 0x0b, 0x2a, 0x9b, 0x2c, 0x4b, 0xa4, 0x5c, 0x44, 0xc4, 0x46, 0xde, 0x88, 0xea, 0xe5, + 0xc8, 0xf3, 0x4c, 0x38, 0x3f, 0xaa, 0xe4, 0xa3, 0x74, 0xea, 0xa1, 0x11, 0x6f, 0x2c, 0x94, 0x95, + 0xc2, 0xe8, 0xa5, 0x12, 0x2a, 0x77, 0xa1, 0x12, 0x52, 0x02, 0x7a, 0xf8, 0x3e, 0x09, 0x68, 0x96, + 0xf1, 0x93, 0x6c, 0x31, 0x13, 0x54, 0x24, 0x48, 0x8c, 0xb0, 0x41, 0x30, 0x32, 0x7e, 0x52, 0x60, + 0x9c, 0xc5, 0x47, 0x1f, 0x51, 0x22, 0xbe, 0x5a, 0x84, 0x6b, 0xd8, 0x9c, 0xd1, 0x47, 0x2d, 0xdd, + 0x3f, 0x5d, 0x82, 0xf1, 0x05, 0xbf, 0xbd, 0xba, 0xb0, 0xda, 0xde, 0xf0, 0xdc, 0xfa, 0x15, 0xd2, + 0xa1, 0x22, 0x7c, 0x9b, 0x74, 0x16, 0xe7, 0xc5, 0x0a, 0x52, 0x73, 0xe6, 0x0a, 0x6d, 0xc4, 0x1c, + 0x46, 0x85, 0xd1, 0xa6, 0xeb, 0x37, 0x49, 0x14, 0x46, 0xae, 0xf0, 0xda, 0x1a, 0xc2, 0xe8, 0xa2, + 0x06, 0x61, 0x13, 0x8f, 0xd2, 0x0e, 0x6e, 0xf9, 0x24, 0xca, 0xda, 0xe2, 0x2b, 0xb4, 0x11, 0x73, + 0x18, 0x45, 0x4a, 0xa2, 0x76, 0x9c, 0x88, 0xc9, 0xa8, 0x90, 0xd6, 0x69, 0x23, 0xe6, 0x30, 0xba, + 0xd2, 0xe3, 0xf6, 0x06, 0x0b, 0x88, 0xc9, 0x64, 0x63, 0xac, 0xf1, 0x66, 0x2c, 0xe1, 0x14, 0x75, + 0x9b, 0x74, 0xe6, 0xe9, 0xc6, 0x3d, 0x93, 0xfe, 0x75, 0x85, 0x37, 0x63, 0x09, 0x67, 0x95, 0x32, + 0xd3, 0xc3, 0xf1, 0x3d, 0x57, 0x29, 0x33, 0xdd, 0xfd, 0x1e, 0x2e, 0x80, 0x5f, 0xb6, 0x60, 0xcc, + 0x0c, 0x63, 0x43, 0xcd, 0x8c, 0x99, 0xbe, 0xd2, 0x55, 0x68, 0xf9, 0xc7, 0xf3, 0x6e, 0xa9, 0x6b, + 0xba, 0x49, 0x10, 0xc6, 0xcf, 0x10, 0xbf, 0xe9, 0xfa, 0x84, 0x05, 0x02, 0xf0, 0xf0, 0xb7, 0x54, + 0x8c, 0xdc, 0x5c, 0xd0, 0x20, 0x77, 0x61, 0xe7, 0xdb, 0x37, 0xe0, 0x64, 0x57, 0xce, 0x5f, 0x1f, + 0x26, 0xc8, 0x81, 0x19, 0xd7, 0x36, 0x86, 0x51, 0x4a, 0x58, 0x56, 0x6b, 0x9a, 0x83, 0x93, 0x7c, + 0x21, 0x51, 0x4e, 0x6b, 0xf5, 0x2d, 0xd2, 0x52, 0x79, 0x9c, 0xec, 0x88, 0xe0, 0x7a, 0x16, 0x88, + 0xbb, 0xf1, 0xed, 0xcf, 0x58, 0x70, 0x2c, 0x95, 0x86, 0x59, 0x90, 0xb1, 0xc4, 0x56, 0x5a, 0xc0, + 0xa2, 0x2a, 0x59, 0x94, 0x7b, 0x99, 0x29, 0x53, 0xbd, 0xd2, 0x34, 0x08, 0x9b, 0x78, 0xf6, 0x17, + 0x4a, 0x50, 0x95, 0x41, 0x20, 0x7d, 0x74, 0xe5, 0x53, 0x16, 0x1c, 0x53, 0xc7, 0x32, 0xcc, 0xdf, + 0x57, 0x2a, 0x22, 0x93, 0x85, 0xf6, 0x40, 0x79, 0x0c, 0xfc, 0xcd, 0x40, 0x5b, 0xee, 0xd8, 0x64, + 0x86, 0xd3, 0xbc, 0xd1, 0x75, 0x80, 0xb8, 0x13, 0x27, 0xa4, 0x65, 0x78, 0x1e, 0x6d, 0x63, 0xc5, + 0x4d, 0xd5, 0x83, 0x88, 0xd0, 0xf5, 0x75, 0x35, 0x68, 0x90, 0x35, 0x85, 0xa9, 0x4d, 0x28, 0xdd, + 0x86, 0x0d, 0x4a, 0xf6, 0xdf, 0x2b, 0xc1, 0x89, 0x6c, 0x97, 0xd0, 0xfb, 0x61, 0x4c, 0x72, 0x37, + 0x2e, 0xdc, 0x93, 0x91, 0x2f, 0x63, 0xd8, 0x80, 0xdd, 0xd9, 0x9b, 0x9c, 0xec, 0xbe, 0xf1, 0x70, + 0xca, 0x44, 0xc1, 0x29, 0x62, 0xfc, 0x6c, 0x4c, 0x1c, 0xe2, 0xce, 0x76, 0x66, 0xc2, 0x50, 0x1c, + 0x70, 0x19, 0x67, 0x63, 0x26, 0x14, 0x67, 0xb0, 0xd1, 0x2a, 0x9c, 0x36, 0x5a, 0xae, 0x12, 0xb7, + 0xb9, 0xb5, 0x11, 0x44, 0x72, 0x07, 0xf6, 0xa8, 0x0e, 0x98, 0xeb, 0xc6, 0xc1, 0xb9, 0x4f, 0x52, + 0x6d, 0x5f, 0x77, 0x42, 0xa7, 0xee, 0x26, 0x1d, 0xe1, 0x4a, 0x55, 0xb2, 0x69, 0x4e, 0xb4, 0x63, + 0x85, 0x61, 0xff, 0x1a, 0x1d, 0x31, 0x16, 0x21, 0x46, 0x54, 0x00, 0x24, 0x7a, 0x3f, 0xd4, 0xe2, + 0xc4, 0x89, 0xf8, 0xf6, 0xdb, 0x1a, 0x78, 0xfb, 0xad, 0x1c, 0x3a, 0x6b, 0x92, 0x08, 0xd6, 0xf4, + 0xd0, 0xcb, 0xac, 0x2e, 0x8c, 0x1b, 0x6f, 0x31, 0xea, 0xa5, 0xbb, 0xdb, 0xdc, 0x5f, 0x54, 0x14, + 0xb0, 0x41, 0x0d, 0xbd, 0x27, 0x75, 0x15, 0x42, 0x4d, 0x5d, 0x61, 0xa4, 0xa5, 0xdc, 0x99, 0xec, + 0xcb, 0xae, 0x6e, 0x39, 0x71, 0xae, 0xf4, 0x1a, 0x3a, 0x40, 0x7a, 0x5d, 0x81, 0x9a, 0xa0, 0xb5, + 0x1e, 0xe4, 0xf8, 0x06, 0xac, 0x41, 0x7c, 0x03, 0xf6, 0x32, 0x0c, 0xf5, 0xb9, 0x90, 0xfb, 0xda, + 0x80, 0xbd, 0x04, 0x55, 0x4a, 0x4e, 0x5a, 0xd9, 0x45, 0x90, 0x0c, 0xa0, 0x2a, 0xef, 0x23, 0x42, + 0x36, 0x94, 0x5d, 0x47, 0x9e, 0x02, 0xab, 0xd9, 0xb5, 0x18, 0xc7, 0x6d, 0xf6, 0x45, 0x28, 0x10, + 0x3d, 0x01, 0x65, 0xb2, 0x1b, 0x66, 0x8f, 0x7b, 0x2f, 0xec, 0x86, 0x6e, 0x44, 0x62, 0x8a, 0x44, + 0x76, 0x43, 0x74, 0x16, 0x4a, 0x6e, 0x43, 0x7c, 0x2b, 0x10, 0x38, 0xa5, 0xc5, 0x79, 0x5c, 0x72, + 0x1b, 0xf6, 0x2e, 0xd4, 0xd4, 0x05, 0x48, 0x68, 0x5b, 0xaa, 0x50, 0xab, 0x88, 0xe0, 0x39, 0x49, + 0xb7, 0x87, 0xf2, 0x6c, 0x03, 0xe8, 0x64, 0xdd, 0xa2, 0xc4, 0xfc, 0x39, 0x18, 0xaa, 0x07, 0xa2, + 0x64, 0x41, 0x55, 0x93, 0x61, 0xba, 0x93, 0x41, 0xec, 0x1b, 0x30, 0x7e, 0xc5, 0x0f, 0x6e, 0xb1, + 0xdb, 0x1b, 0x58, 0xb1, 0x42, 0x4a, 0x78, 0x93, 0xfe, 0xc8, 0x5a, 0x6a, 0x0c, 0x8a, 0x39, 0x4c, + 0x55, 0x71, 0x2b, 0xf5, 0xaa, 0xe2, 0x66, 0x7f, 0xd4, 0x82, 0x31, 0x95, 0xf5, 0xb7, 0xb0, 0xb3, + 0x4d, 0xe9, 0x36, 0xa3, 0xa0, 0x1d, 0x66, 0xe9, 0xb2, 0x2b, 0xca, 0x30, 0x87, 0x99, 0xe9, 0xb0, + 0xa5, 0x03, 0xd2, 0x61, 0xcf, 0xc1, 0xd0, 0xb6, 0xeb, 0x37, 0xb2, 0x9e, 0xad, 0x2b, 0xae, 0xdf, + 0xc0, 0x0c, 0x42, 0xbb, 0x70, 0x42, 0x75, 0x41, 0xea, 0xe5, 0x17, 0x60, 0x6c, 0xa3, 0xed, 0x7a, + 0x0d, 0x59, 0x85, 0x31, 0xe3, 0xd8, 0x9a, 0x35, 0x60, 0x38, 0x85, 0x49, 0xb7, 0xd7, 0x1b, 0xae, + 0xef, 0x44, 0x9d, 0x55, 0x6d, 0x08, 0x28, 0xdd, 0x30, 0xab, 0x20, 0xd8, 0xc0, 0xb2, 0x3f, 0x57, + 0x86, 0xf1, 0x74, 0xee, 0x63, 0x1f, 0xbb, 0xdc, 0x27, 0xa0, 0xc2, 0xd2, 0x21, 0xb3, 0x9f, 0x96, + 0x17, 0x2e, 0xe4, 0x30, 0x14, 0xc3, 0x30, 0x5f, 0xce, 0xc5, 0xdc, 0x57, 0xa5, 0x3a, 0xa9, 0xdc, + 0x61, 0x2c, 0x32, 0x51, 0x48, 0x10, 0xc1, 0x0a, 0x7d, 0xc2, 0x82, 0x91, 0x20, 0x34, 0xab, 0x7f, + 0xbd, 0xaf, 0xc8, 0xbc, 0x50, 0x91, 0x96, 0x26, 0x36, 0x26, 0xea, 0xd3, 0xcb, 0xcf, 0x21, 0x59, + 0x9f, 0x7d, 0x17, 0x8c, 0x99, 0x98, 0x07, 0xed, 0x4d, 0xaa, 0xe6, 0xde, 0xe4, 0x53, 0xe6, 0xa4, + 0x10, 0x99, 0xaf, 0x7d, 0x2c, 0xb7, 0x6b, 0x50, 0xa9, 0xab, 0x50, 0x92, 0xbb, 0xaa, 0xdd, 0xab, + 0x6a, 0xa8, 0xb0, 0xe3, 0x44, 0x4e, 0xcd, 0xfe, 0xb6, 0x65, 0xcc, 0x0f, 0x4c, 0xe2, 0xc5, 0x06, + 0x8a, 0xa0, 0xdc, 0xdc, 0xd9, 0x16, 0x1a, 0xf0, 0x72, 0x41, 0xc3, 0xbb, 0xb0, 0xb3, 0xad, 0xe7, + 0xb8, 0xd9, 0x8a, 0x29, 0xb3, 0x3e, 0x7c, 0xb6, 0xa9, 0x04, 0xe9, 0xf2, 0xc1, 0x09, 0xd2, 0xf6, + 0x1b, 0x25, 0x38, 0xd9, 0x35, 0xa9, 0xd0, 0xeb, 0x50, 0x89, 0xe8, 0x5b, 0x8a, 0xd7, 0x5b, 0x2a, + 0x2c, 0xa5, 0x39, 0x5e, 0x6c, 0x68, 0xbd, 0x97, 0x6e, 0xc7, 0x9c, 0x25, 0xba, 0x0c, 0x48, 0x07, + 0x3c, 0x29, 0x87, 0x31, 0x7f, 0xe5, 0xb3, 0xe2, 0x51, 0x34, 0xd3, 0x85, 0x81, 0x73, 0x9e, 0x42, + 0x2f, 0x66, 0xfd, 0xce, 0xe5, 0xf4, 0x09, 0xf8, 0x7e, 0x2e, 0x64, 0xfb, 0x9f, 0x94, 0xe0, 0x58, + 0xaa, 0x18, 0x1b, 0xf2, 0xa0, 0x4a, 0x3c, 0x76, 0x3c, 0x24, 0x95, 0xcd, 0x61, 0x6b, 0x9b, 0x2b, + 0x05, 0x79, 0x41, 0xd0, 0xc5, 0x8a, 0xc3, 0x83, 0x11, 0xa6, 0xf1, 0x02, 0x8c, 0xc9, 0x0e, 0xbd, + 0xcf, 0x69, 0x79, 0x62, 0x00, 0xd5, 0x1c, 0xbd, 0x60, 0xc0, 0x70, 0x0a, 0xd3, 0xfe, 0x9d, 0x32, + 0x4c, 0xf0, 0xf3, 0xb4, 0x86, 0x9a, 0x79, 0xcb, 0x72, 0xdb, 0xfb, 0x97, 0x75, 0xc9, 0x44, 0x3e, + 0x90, 0x1b, 0x87, 0xbd, 0x4a, 0x24, 0x9f, 0x51, 0x5f, 0x31, 0x7e, 0x5f, 0xc9, 0xc4, 0xf8, 0xf1, + 0xdd, 0x4f, 0xf3, 0x88, 0x7a, 0xf4, 0xbd, 0x15, 0xf4, 0xf7, 0xb7, 0x4b, 0x70, 0x3c, 0x73, 0x4f, + 0x0b, 0xfa, 0x5c, 0xba, 0xb4, 0xb7, 0x55, 0xc4, 0xd1, 0xc6, 0xbe, 0x57, 0x77, 0x0c, 0x56, 0xe0, + 0xfb, 0x3e, 0x2d, 0x15, 0xfb, 0x0f, 0x4a, 0x30, 0x9e, 0xbe, 0x60, 0xe6, 0x01, 0x1c, 0xa9, 0xb7, + 0x43, 0x8d, 0xdd, 0xa1, 0xc0, 0x2e, 0xce, 0xe5, 0x27, 0x23, 0xbc, 0x5c, 0xbd, 0x6c, 0xc4, 0x1a, + 0xfe, 0x40, 0xd4, 0x4d, 0xb7, 0xff, 0x8e, 0x05, 0x67, 0xf8, 0x5b, 0x66, 0xe7, 0xe1, 0x5f, 0xc9, + 0x1b, 0xdd, 0x57, 0x8a, 0xed, 0x60, 0xa6, 0xd4, 0xe7, 0x41, 0xe3, 0xcb, 0x2e, 0xec, 0x14, 0xbd, + 0x4d, 0x4f, 0x85, 0x07, 0xb0, 0xb3, 0x03, 0x4d, 0x06, 0xfb, 0x0f, 0xca, 0xa0, 0xef, 0x28, 0x45, + 0xae, 0x48, 0xe1, 0x2d, 0xa4, 0xe4, 0xe9, 0x5a, 0xc7, 0xaf, 0xeb, 0xdb, 0x50, 0xab, 0x99, 0x0c, + 0xde, 0x9f, 0xb7, 0x60, 0xd4, 0xf5, 0xdd, 0xc4, 0x75, 0x98, 0x37, 0xa3, 0x98, 0xfb, 0x13, 0x15, + 0xbb, 0x45, 0x4e, 0x39, 0x88, 0xcc, 0xe3, 0x34, 0xc5, 0x0c, 0x9b, 0x9c, 0xd1, 0x07, 0x45, 0x18, + 0x7e, 0xb9, 0xb0, 0x3c, 0xf8, 0x6a, 0x26, 0xf6, 0x3e, 0xa4, 0x86, 0x57, 0x12, 0x15, 0x54, 0x3e, + 0x02, 0x53, 0x52, 0xaa, 0x7a, 0xb6, 0xbe, 0x2d, 0x9e, 0x36, 0x63, 0xce, 0xc8, 0x8e, 0x01, 0x75, + 0x8f, 0xc5, 0x80, 0x21, 0xce, 0xd3, 0x50, 0x73, 0xda, 0x49, 0xd0, 0xa2, 0xc3, 0x24, 0x4e, 0xfc, + 0x74, 0x10, 0xb7, 0x04, 0x60, 0x8d, 0x63, 0x7f, 0xae, 0x02, 0x99, 0x9c, 0x5a, 0xb4, 0x6b, 0xde, + 0xaf, 0x6b, 0x15, 0x7b, 0xbf, 0xae, 0xea, 0x4c, 0xde, 0x1d, 0xbb, 0xa8, 0x09, 0x95, 0x70, 0xcb, + 0x89, 0xa5, 0x59, 0xfd, 0x92, 0xda, 0xc7, 0xd1, 0xc6, 0x3b, 0x7b, 0x93, 0x3f, 0xd1, 0x9f, 0xf3, + 0x9b, 0xce, 0xd5, 0x69, 0x5e, 0x28, 0x68, 0x2a, 0xe3, 0x41, 0xe2, 0xf4, 0x07, 0xb9, 0x41, 0xf2, + 0x63, 0xe2, 0xb2, 0x08, 0x4c, 0xe2, 0xb6, 0x97, 0x88, 0xd9, 0xf0, 0x52, 0x81, 0xab, 0x8c, 0x13, + 0xd6, 0x85, 0x29, 0xf8, 0x7f, 0x6c, 0x30, 0x4d, 0x7b, 0xfa, 0x86, 0x8f, 0xd4, 0xd3, 0x37, 0x52, + 0xa8, 0xa7, 0xef, 0x3c, 0x00, 0x9b, 0xdb, 0x3c, 0x64, 0xb4, 0xca, 0xbc, 0x4c, 0x4a, 0x14, 0x62, + 0x05, 0xc1, 0x06, 0x96, 0xfd, 0x23, 0x90, 0xae, 0xac, 0x82, 0x26, 0x65, 0x21, 0x17, 0x7e, 0x18, + 0xc0, 0xb2, 0x60, 0x52, 0x35, 0x57, 0x7e, 0xdd, 0x02, 0xb3, 0xfc, 0x0b, 0x7a, 0x8d, 0xd7, 0x99, + 0xb1, 0x8a, 0x38, 0xc0, 0x35, 0xe8, 0x4e, 0x2d, 0x3b, 0x61, 0x26, 0x92, 0x40, 0x16, 0x9b, 0x39, + 0xfb, 0x4e, 0xa8, 0x4a, 0xe8, 0x40, 0x46, 0xdd, 0x47, 0xe0, 0x94, 0x4c, 0x47, 0x95, 0xee, 0x6b, + 0x71, 0xf8, 0x77, 0xb0, 0xeb, 0x47, 0xfa, 0x73, 0x4a, 0xbd, 0xfc, 0x39, 0x7d, 0xdc, 0xb2, 0xfc, + 0x1b, 0x16, 0x9c, 0xcb, 0x76, 0x20, 0x5e, 0x0e, 0x7c, 0x37, 0x09, 0xa2, 0x35, 0x92, 0x24, 0xae, + 0xdf, 0x64, 0x45, 0xef, 0x6e, 0x39, 0x91, 0x2c, 0xcd, 0xcf, 0x04, 0xe5, 0x0d, 0x27, 0xf2, 0x31, + 0x6b, 0x45, 0x1d, 0x18, 0xe6, 0x71, 0x85, 0xc2, 0x5a, 0x3f, 0xe4, 0xda, 0xc8, 0x19, 0x0e, 0xbd, + 0x5d, 0xe0, 0x31, 0x8d, 0x58, 0x30, 0xb4, 0xbf, 0x63, 0x01, 0x5a, 0xd9, 0x21, 0x51, 0xe4, 0x36, + 0x8c, 0x48, 0x48, 0x76, 0xe9, 0x92, 0x71, 0xb9, 0x92, 0x99, 0x2c, 0x9d, 0xb9, 0x74, 0xc9, 0xf8, + 0x97, 0x7f, 0xe9, 0x52, 0x69, 0xb0, 0x4b, 0x97, 0xd0, 0x0a, 0x9c, 0x69, 0xf1, 0xed, 0x06, 0xbf, + 0xc8, 0x84, 0xef, 0x3d, 0x54, 0x6a, 0xe2, 0x23, 0xb7, 0xf7, 0x26, 0xcf, 0x2c, 0xe7, 0x21, 0xe0, + 0xfc, 0xe7, 0xec, 0x77, 0x02, 0xe2, 0x01, 0x90, 0x73, 0x79, 0x21, 0x63, 0x3d, 0xdd, 0x2f, 0xf6, + 0x97, 0x2b, 0x70, 0x3c, 0x53, 0xb8, 0x99, 0x6e, 0xf5, 0xba, 0x63, 0xd4, 0x0e, 0xad, 0xbf, 0xbb, + 0xbb, 0xd7, 0x57, 0xd4, 0x9b, 0x0f, 0x15, 0xd7, 0x0f, 0xdb, 0x49, 0x31, 0xd9, 0xc8, 0xbc, 0x13, + 0x8b, 0x94, 0xa0, 0xe1, 0x2e, 0xa6, 0x7f, 0x31, 0x67, 0x53, 0x64, 0x0c, 0x5d, 0xca, 0x18, 0x1f, + 0xba, 0x4f, 0xee, 0x80, 0x8f, 0xe9, 0x88, 0xb6, 0x4a, 0x11, 0x8e, 0xc5, 0xcc, 0x64, 0x39, 0xea, + 0x88, 0x87, 0x5f, 0x2d, 0xc1, 0xa8, 0xf1, 0xd1, 0xd0, 0x2f, 0xa5, 0x8b, 0xa3, 0x59, 0xc5, 0xbd, + 0x12, 0xa3, 0x3f, 0xa5, 0xcb, 0x9f, 0xf1, 0x57, 0x7a, 0xb2, 0xbb, 0x2e, 0xda, 0x9d, 0xbd, 0xc9, + 0x13, 0x99, 0xca, 0x67, 0xa9, 0x5a, 0x69, 0x67, 0x3f, 0x0c, 0xc7, 0x33, 0x64, 0x72, 0x5e, 0x79, + 0xdd, 0x7c, 0xe5, 0x43, 0xbb, 0xa5, 0xcc, 0x21, 0xfb, 0x06, 0x1d, 0x32, 0x91, 0x90, 0x19, 0x78, + 0xa4, 0x0f, 0x1f, 0x6c, 0x26, 0xef, 0xba, 0xd4, 0x67, 0xde, 0xf5, 0x53, 0x50, 0x0d, 0x03, 0xcf, + 0xad, 0xbb, 0xaa, 0x82, 0x28, 0xcb, 0xf4, 0x5e, 0x15, 0x6d, 0x58, 0x41, 0xd1, 0x2d, 0xa8, 0xdd, + 0xbc, 0x95, 0xf0, 0xd3, 0x1f, 0xe1, 0xdf, 0x2e, 0xea, 0xd0, 0x47, 0x19, 0x2d, 0xea, 0x78, 0x09, + 0x6b, 0x5e, 0xc8, 0x86, 0x61, 0xa6, 0x04, 0x65, 0x12, 0x09, 0xf3, 0xbd, 0x33, 0xed, 0x18, 0x63, + 0x01, 0xb1, 0xbf, 0x56, 0x83, 0xd3, 0x79, 0xd5, 0xf3, 0xd1, 0x87, 0x60, 0x98, 0xf7, 0xb1, 0x98, + 0x0b, 0x5a, 0xf2, 0x78, 0x2c, 0x30, 0x82, 0xa2, 0x5b, 0xec, 0x37, 0x16, 0x3c, 0x05, 0x77, 0xcf, + 0xd9, 0x10, 0x33, 0xe4, 0x68, 0xb8, 0x2f, 0x39, 0x9a, 0xfb, 0x92, 0xc3, 0xb9, 0x7b, 0xce, 0x06, + 0xda, 0x85, 0x4a, 0xd3, 0x4d, 0x88, 0x23, 0x9c, 0x08, 0x37, 0x8e, 0x84, 0x39, 0x71, 0xb8, 0x95, + 0xc6, 0x7e, 0x62, 0xce, 0x10, 0x7d, 0xd5, 0x82, 0xe3, 0x1b, 0xe9, 0x22, 0x0b, 0x42, 0x78, 0x3a, + 0x47, 0x70, 0x43, 0x42, 0x9a, 0x11, 0xbf, 0x75, 0x2c, 0xd3, 0x88, 0xb3, 0xdd, 0x41, 0x1f, 0xb7, + 0x60, 0x64, 0xd3, 0xf5, 0x8c, 0x62, 0xd9, 0x47, 0xf0, 0x71, 0x2e, 0x32, 0x06, 0x7a, 0xc7, 0xc1, + 0xff, 0xc7, 0x58, 0x72, 0xee, 0xa5, 0xa9, 0x86, 0x0f, 0xab, 0xa9, 0x46, 0xee, 0x93, 0xa6, 0xfa, + 0xa4, 0x05, 0x35, 0x35, 0xd2, 0x22, 0x71, 0xfe, 0xfd, 0x47, 0xf8, 0xc9, 0xb9, 0xe7, 0x44, 0xfd, + 0xc5, 0x9a, 0x39, 0xfa, 0xbc, 0x05, 0xa3, 0xce, 0xeb, 0xed, 0x88, 0x34, 0xc8, 0x4e, 0x10, 0xc6, + 0xa2, 0x16, 0xdc, 0x2b, 0xc5, 0x77, 0x66, 0x86, 0x32, 0x99, 0x27, 0x3b, 0x2b, 0x61, 0x2c, 0x12, + 0xdc, 0x74, 0x03, 0x36, 0xbb, 0x60, 0xef, 0x95, 0x60, 0xf2, 0x00, 0x0a, 0xe8, 0x05, 0x18, 0x0b, + 0xa2, 0xa6, 0xe3, 0xbb, 0xaf, 0x9b, 0x55, 0x53, 0x94, 0x95, 0xb5, 0x62, 0xc0, 0x70, 0x0a, 0xd3, + 0x4c, 0xed, 0x2f, 0x1d, 0x90, 0xda, 0x7f, 0x0e, 0x86, 0x22, 0x12, 0x06, 0xd9, 0xcd, 0x02, 0x4b, + 0x2e, 0x61, 0x10, 0xf4, 0x18, 0x94, 0x9d, 0xd0, 0x15, 0x21, 0x17, 0x6a, 0x0f, 0x34, 0xb3, 0xba, + 0x88, 0x69, 0x7b, 0xaa, 0xd2, 0x48, 0xe5, 0x9e, 0x54, 0x1a, 0xa1, 0x6a, 0x40, 0x9c, 0x5d, 0x0c, + 0x6b, 0x35, 0x90, 0x3e, 0x53, 0xb0, 0xdf, 0x28, 0xc3, 0x63, 0xfb, 0xce, 0x17, 0x1d, 0x0e, 0x69, + 0xed, 0x13, 0x0e, 0x29, 0x87, 0xa7, 0x74, 0xd0, 0xf0, 0x94, 0x7b, 0x0c, 0xcf, 0xc7, 0xe9, 0x32, + 0x90, 0xd5, 0x66, 0x8a, 0xb9, 0x74, 0xb2, 0x57, 0xf1, 0x1a, 0xb1, 0x02, 0x24, 0x14, 0x6b, 0xbe, + 0x74, 0x0f, 0x90, 0x4a, 0x6b, 0xaf, 0x14, 0xa1, 0x06, 0x7a, 0x56, 0x9f, 0xe1, 0x73, 0xbf, 0x57, + 0xae, 0xbc, 0xfd, 0xa5, 0x12, 0x3c, 0xd1, 0x87, 0xf4, 0x36, 0x67, 0xb1, 0xd5, 0xe7, 0x2c, 0xfe, + 0xde, 0xfe, 0x4c, 0xf6, 0x5f, 0xb5, 0xe0, 0x6c, 0x6f, 0xe5, 0x81, 0x9e, 0x85, 0xd1, 0x8d, 0xc8, + 0xf1, 0xeb, 0x5b, 0xec, 0x22, 0x5d, 0x39, 0x28, 0x6c, 0xac, 0x75, 0x33, 0x36, 0x71, 0xe8, 0xf6, + 0x96, 0xc7, 0x24, 0x18, 0x18, 0x32, 0x0d, 0x99, 0x6e, 0x6f, 0xd7, 0xb3, 0x40, 0xdc, 0x8d, 0x6f, + 0xff, 0x59, 0x29, 0xbf, 0x5b, 0xdc, 0xc8, 0x18, 0xe4, 0x3b, 0x89, 0xaf, 0x50, 0xea, 0x43, 0x96, + 0x94, 0xef, 0xb5, 0x2c, 0x19, 0xea, 0x25, 0x4b, 0xd0, 0x3c, 0x9c, 0x30, 0x2e, 0x5a, 0xe2, 0xa9, + 0xe5, 0x3c, 0xee, 0x59, 0xd5, 0x5b, 0x59, 0xcd, 0xc0, 0x71, 0xd7, 0x13, 0xe8, 0x69, 0xa8, 0xba, + 0x7e, 0x4c, 0xea, 0xed, 0x88, 0xc7, 0xdb, 0x1b, 0xe9, 0x7c, 0x8b, 0xa2, 0x1d, 0x2b, 0x0c, 0xfb, + 0x97, 0x4b, 0xf0, 0x48, 0x4f, 0x3b, 0xeb, 0x1e, 0xc9, 0x2e, 0xf3, 0x73, 0x0c, 0xdd, 0x9b, 0xcf, + 0x61, 0x0e, 0x52, 0xe5, 0xc0, 0x41, 0xfa, 0xc3, 0xde, 0x13, 0x93, 0xda, 0xdc, 0xdf, 0xb7, 0xa3, + 0xf4, 0x22, 0x1c, 0x73, 0xc2, 0x90, 0xe3, 0xb1, 0xb0, 0xd9, 0x4c, 0xbd, 0xa5, 0x19, 0x13, 0x88, + 0xd3, 0xb8, 0x7d, 0x69, 0xcf, 0x3f, 0xb6, 0xa0, 0x86, 0xc9, 0x26, 0x97, 0x0e, 0xe8, 0xa6, 0x18, + 0x22, 0xab, 0x88, 0x72, 0xb1, 0x74, 0x60, 0x63, 0x97, 0x95, 0x51, 0xcd, 0x1b, 0xec, 0xc3, 0x26, + 0x72, 0xaa, 0x2b, 0x99, 0xca, 0xbd, 0xaf, 0x64, 0xb2, 0xbf, 0x31, 0x42, 0x5f, 0x2f, 0x0c, 0xe6, + 0x22, 0xd2, 0x88, 0xe9, 0xf7, 0x6d, 0x47, 0x9e, 0x98, 0x24, 0xea, 0xfb, 0x5e, 0xc3, 0x4b, 0x98, + 0xb6, 0xa7, 0x8e, 0x62, 0x4a, 0x03, 0x55, 0x9b, 0x29, 0x1f, 0x58, 0x6d, 0xe6, 0x45, 0x38, 0x16, + 0xc7, 0x5b, 0xab, 0x91, 0xbb, 0xe3, 0x24, 0xe4, 0x0a, 0xe9, 0x08, 0x2b, 0x4b, 0x57, 0x88, 0x58, + 0xbb, 0xa4, 0x81, 0x38, 0x8d, 0x8b, 0x16, 0xe0, 0xa4, 0xae, 0xf9, 0x42, 0xa2, 0x84, 0x25, 0x59, + 0xf0, 0x99, 0xa0, 0xd2, 0xc1, 0x75, 0x95, 0x18, 0x81, 0x80, 0xbb, 0x9f, 0xa1, 0xf2, 0x2d, 0xd5, + 0x48, 0x3b, 0x32, 0x9c, 0x96, 0x6f, 0x29, 0x3a, 0xb4, 0x2f, 0x5d, 0x4f, 0xa0, 0x65, 0x38, 0xc5, + 0x27, 0xc6, 0x4c, 0x18, 0x1a, 0x6f, 0x34, 0x92, 0x2e, 0xd3, 0xb9, 0xd0, 0x8d, 0x82, 0xf3, 0x9e, + 0x43, 0xcf, 0xc3, 0xa8, 0x6a, 0x5e, 0x9c, 0x17, 0xa7, 0x08, 0xca, 0x8b, 0xa1, 0xc8, 0x2c, 0x36, + 0xb0, 0x89, 0x87, 0xde, 0x07, 0x0f, 0xeb, 0xbf, 0x3c, 0x13, 0x8f, 0x1f, 0xad, 0xcd, 0x8b, 0x72, + 0x5a, 0xea, 0x02, 0xa0, 0x85, 0x5c, 0xb4, 0x06, 0xee, 0xf5, 0x3c, 0xda, 0x80, 0xb3, 0x0a, 0x74, + 0xc1, 0x4f, 0x58, 0x5a, 0x4d, 0x4c, 0x66, 0x9d, 0x98, 0x5c, 0x8b, 0x3c, 0x71, 0x83, 0xb2, 0xba, + 0x9b, 0x75, 0xc1, 0x4d, 0x2e, 0xe5, 0x61, 0xe2, 0x25, 0xbc, 0x0f, 0x15, 0x34, 0x0d, 0x35, 0xe2, + 0x3b, 0x1b, 0x1e, 0x59, 0x99, 0x5b, 0x64, 0x65, 0xb9, 0x8c, 0x93, 0xbc, 0x0b, 0x12, 0x80, 0x35, + 0x8e, 0x8a, 0x30, 0x1d, 0xeb, 0x79, 0x4f, 0xf0, 0x2a, 0x9c, 0x6e, 0xd6, 0x43, 0x6a, 0x7b, 0xb8, + 0x75, 0x32, 0x53, 0x67, 0x01, 0x75, 0xf4, 0xc3, 0xf0, 0xfa, 0xa9, 0x2a, 0x8a, 0x7d, 0x61, 0x6e, + 0xb5, 0x0b, 0x07, 0xe7, 0x3e, 0xc9, 0x02, 0x2f, 0xa3, 0x60, 0xb7, 0x33, 0x71, 0x2a, 0x13, 0x78, + 0x49, 0x1b, 0x31, 0x87, 0xa1, 0xcb, 0x80, 0x58, 0x4a, 0xc4, 0xa5, 0x24, 0x09, 0x95, 0xb1, 0x33, + 0x71, 0x9a, 0xbd, 0x92, 0x0a, 0x23, 0xbb, 0xd8, 0x85, 0x81, 0x73, 0x9e, 0xb2, 0xff, 0x9d, 0x05, + 0xc7, 0xd4, 0x7a, 0xbd, 0x07, 0x49, 0x41, 0x5e, 0x3a, 0x29, 0x68, 0xe1, 0xf0, 0x12, 0x8f, 0xf5, + 0xbc, 0x47, 0x48, 0xf3, 0xcf, 0x8e, 0x02, 0x68, 0xa9, 0xa8, 0x14, 0x92, 0xd5, 0x53, 0x21, 0x3d, + 0xb0, 0x12, 0x29, 0xaf, 0x06, 0x4f, 0xe5, 0xfe, 0xd6, 0xe0, 0x59, 0x83, 0x33, 0xd2, 0x5c, 0xe0, + 0x67, 0x45, 0x97, 0x82, 0x58, 0x09, 0xb8, 0xea, 0xec, 0x63, 0x82, 0xd0, 0x99, 0xc5, 0x3c, 0x24, + 0x9c, 0xff, 0x6c, 0xca, 0x4a, 0x19, 0x39, 0xc8, 0x4a, 0xd1, 0x6b, 0x7a, 0x69, 0x53, 0xde, 0xbf, + 0x93, 0x59, 0xd3, 0x4b, 0x17, 0xd7, 0xb0, 0xc6, 0xc9, 0x17, 0xec, 0xb5, 0x82, 0x04, 0x3b, 0x0c, + 0x2c, 0xd8, 0xa5, 0x88, 0x19, 0xed, 0x29, 0x62, 0xa4, 0x4f, 0x7a, 0xac, 0xa7, 0x4f, 0xfa, 0xdd, + 0x30, 0xee, 0xfa, 0x5b, 0x24, 0x72, 0x13, 0xd2, 0x60, 0x6b, 0x81, 0x89, 0x9f, 0xaa, 0x56, 0xeb, + 0x8b, 0x29, 0x28, 0xce, 0x60, 0xa7, 0xe5, 0xe2, 0x78, 0x1f, 0x72, 0xb1, 0x87, 0x36, 0x3a, 0x5e, + 0x8c, 0x36, 0x3a, 0x71, 0x78, 0x6d, 0x74, 0xf2, 0x48, 0xb5, 0x11, 0x2a, 0x44, 0x1b, 0xf5, 0x25, + 0xe8, 0x8d, 0xed, 0xdf, 0xe9, 0x03, 0xb6, 0x7f, 0xbd, 0x54, 0xd1, 0x99, 0xbb, 0x56, 0x45, 0xf9, + 0x5a, 0xe6, 0xa1, 0xbb, 0xd2, 0x32, 0x9f, 0x2c, 0xc1, 0x19, 0x2d, 0x87, 0xe9, 0xec, 0x77, 0x37, + 0xa9, 0x24, 0x62, 0x57, 0xb8, 0xf1, 0x73, 0x1b, 0x23, 0x47, 0x4d, 0xa7, 0xbb, 0x29, 0x08, 0x36, + 0xb0, 0x58, 0xaa, 0x17, 0x89, 0x58, 0x41, 0xe6, 0xac, 0x90, 0x9e, 0x13, 0xed, 0x58, 0x61, 0xd0, + 0xf9, 0x45, 0x7f, 0x8b, 0xf4, 0xd9, 0x6c, 0xd9, 0xc1, 0x39, 0x0d, 0xc2, 0x26, 0x1e, 0x7a, 0x8a, + 0x33, 0x61, 0x02, 0x82, 0x0a, 0xea, 0x31, 0x71, 0x7b, 0xb4, 0x94, 0x09, 0x0a, 0x2a, 0xbb, 0xc3, + 0x72, 0xfa, 0x2a, 0xdd, 0xdd, 0x61, 0x21, 0x50, 0x0a, 0xc3, 0xfe, 0xef, 0x16, 0x3c, 0x92, 0x3b, + 0x14, 0xf7, 0x40, 0xf9, 0xee, 0xa6, 0x95, 0xef, 0x5a, 0x51, 0xdb, 0x0d, 0xe3, 0x2d, 0x7a, 0x28, + 0xe2, 0x7f, 0x63, 0xc1, 0xb8, 0xc6, 0xbf, 0x07, 0xaf, 0xea, 0xa6, 0x5f, 0xb5, 0xb8, 0x9d, 0x55, + 0xad, 0xeb, 0xdd, 0x7e, 0xa7, 0x04, 0xaa, 0x14, 0xe8, 0x4c, 0x5d, 0x16, 0x5a, 0x3e, 0xe0, 0x24, + 0xb1, 0x03, 0xc3, 0xec, 0x20, 0x34, 0x2e, 0x26, 0xc8, 0x23, 0xcd, 0x9f, 0x1d, 0xaa, 0xea, 0x43, + 0x66, 0xf6, 0x37, 0xc6, 0x82, 0x21, 0x2b, 0x17, 0xee, 0xc6, 0x54, 0x9a, 0x37, 0x44, 0x5a, 0x96, + 0x2e, 0x17, 0x2e, 0xda, 0xb1, 0xc2, 0xa0, 0xea, 0xc1, 0xad, 0x07, 0xfe, 0x9c, 0xe7, 0xc4, 0xf2, + 0x86, 0x54, 0xa5, 0x1e, 0x16, 0x25, 0x00, 0x6b, 0x1c, 0x76, 0x46, 0xea, 0xc6, 0xa1, 0xe7, 0x74, + 0x8c, 0xfd, 0xb3, 0x51, 0x26, 0x42, 0x81, 0xb0, 0x89, 0x67, 0xb7, 0x60, 0x22, 0xfd, 0x12, 0xf3, + 0x64, 0x93, 0x05, 0x28, 0xf6, 0x35, 0x9c, 0xd3, 0x50, 0x73, 0xd8, 0x53, 0x4b, 0x6d, 0x47, 0xc8, + 0x04, 0x1d, 0xa6, 0x27, 0x01, 0x58, 0xe3, 0xd8, 0xbf, 0x62, 0xc1, 0xa9, 0x9c, 0x41, 0x2b, 0x30, + 0xed, 0x2d, 0xd1, 0xd2, 0x26, 0x4f, 0xb1, 0xff, 0x30, 0x8c, 0x34, 0xc8, 0xa6, 0x23, 0x43, 0xe0, + 0x0c, 0xd9, 0x3e, 0xcf, 0x9b, 0xb1, 0x84, 0xdb, 0xff, 0xd5, 0x82, 0xe3, 0xe9, 0xbe, 0xc6, 0x2c, + 0x95, 0x84, 0x0f, 0x93, 0x1b, 0xd7, 0x83, 0x1d, 0x12, 0x75, 0xe8, 0x9b, 0x5b, 0x99, 0x54, 0x92, + 0x2e, 0x0c, 0x9c, 0xf3, 0x14, 0x2b, 0x04, 0xdc, 0x50, 0xa3, 0x2d, 0x67, 0xe4, 0xf5, 0x22, 0x67, + 0xa4, 0xfe, 0x98, 0xe6, 0x71, 0xb9, 0x62, 0x89, 0x4d, 0xfe, 0xf6, 0x77, 0x86, 0x40, 0xa5, 0x27, + 0xb3, 0xf8, 0xa3, 0x82, 0xa2, 0xb7, 0x06, 0xcd, 0x20, 0x52, 0x93, 0x61, 0x68, 0xbf, 0x80, 0x00, + 0xee, 0x25, 0x31, 0x5d, 0x97, 0xea, 0x0d, 0xd7, 0x35, 0x08, 0x9b, 0x78, 0xb4, 0x27, 0x9e, 0xbb, + 0x43, 0xf8, 0x43, 0xc3, 0xe9, 0x9e, 0x2c, 0x49, 0x00, 0xd6, 0x38, 0xb4, 0x27, 0x0d, 0x77, 0x73, + 0x53, 0x6c, 0xf9, 0x55, 0x4f, 0xe8, 0xe8, 0x60, 0x06, 0xe1, 0xb5, 0xdd, 0x83, 0x6d, 0x61, 0x05, + 0x1b, 0xb5, 0xdd, 0x83, 0x6d, 0xcc, 0x20, 0xd4, 0x6e, 0xf3, 0x83, 0xa8, 0xe5, 0x78, 0xee, 0xeb, + 0xa4, 0xa1, 0xb8, 0x08, 0xeb, 0x57, 0xd9, 0x6d, 0x57, 0xbb, 0x51, 0x70, 0xde, 0x73, 0x74, 0x06, + 0x86, 0x11, 0x69, 0xb8, 0xf5, 0xc4, 0xa4, 0x06, 0xe9, 0x19, 0xb8, 0xda, 0x85, 0x81, 0x73, 0x9e, + 0x42, 0x33, 0x70, 0x5c, 0xa6, 0x97, 0xa7, 0x6f, 0xdc, 0x55, 0xbb, 0x11, 0x9c, 0x06, 0xe3, 0x2c, + 0x3e, 0x95, 0x6a, 0x2d, 0x51, 0xfa, 0x8c, 0x19, 0xcb, 0x86, 0x54, 0x93, 0x25, 0xd1, 0xb0, 0xc2, + 0xb0, 0x3f, 0x56, 0xa6, 0x5a, 0xb8, 0x47, 0xc9, 0xbf, 0x7b, 0x16, 0x2d, 0x98, 0x9e, 0x91, 0x43, + 0x7d, 0xcc, 0xc8, 0xe7, 0x60, 0xec, 0x66, 0x1c, 0xf8, 0x2a, 0x12, 0xaf, 0xd2, 0x33, 0x12, 0xcf, + 0xc0, 0xca, 0x8f, 0xc4, 0x1b, 0x2e, 0x2a, 0x12, 0x6f, 0xe4, 0x2e, 0x23, 0xf1, 0xbe, 0x55, 0x01, + 0x75, 0xf3, 0xcd, 0x55, 0x92, 0xdc, 0x0a, 0xa2, 0x6d, 0xd7, 0x6f, 0xb2, 0x7c, 0xf0, 0xaf, 0x5a, + 0x30, 0xc6, 0xd7, 0xcb, 0x92, 0x99, 0x49, 0xb5, 0x59, 0xd0, 0xed, 0x25, 0x29, 0x66, 0x53, 0xeb, + 0x06, 0xa3, 0xcc, 0xb5, 0xb9, 0x26, 0x08, 0xa7, 0x7a, 0x84, 0x3e, 0x0c, 0x20, 0xfd, 0xa3, 0x9b, + 0x52, 0x64, 0x2e, 0x16, 0xd3, 0x3f, 0x4c, 0x36, 0xb5, 0x0d, 0xbc, 0xae, 0x98, 0x60, 0x83, 0x21, + 0xfa, 0xa4, 0xce, 0x32, 0xe3, 0x21, 0xfb, 0x1f, 0x3c, 0x92, 0xb1, 0xe9, 0x27, 0xc7, 0x0c, 0xc3, + 0x88, 0xeb, 0x37, 0xe9, 0x3c, 0x11, 0x11, 0x4b, 0x6f, 0xcb, 0x2b, 0x69, 0xb1, 0x14, 0x38, 0x8d, + 0x59, 0xc7, 0x73, 0xfc, 0x3a, 0x89, 0x16, 0x39, 0xba, 0x79, 0x2d, 0x3d, 0x6b, 0xc0, 0x92, 0x50, + 0xd7, 0xf5, 0x3c, 0x95, 0x7e, 0xae, 0xe7, 0x39, 0xfb, 0x1e, 0x38, 0xd9, 0xf5, 0x31, 0x07, 0x4a, + 0x29, 0xbb, 0xfb, 0x6c, 0x34, 0xfb, 0x9f, 0x0e, 0x6b, 0xa5, 0x75, 0x35, 0x68, 0xf0, 0x4b, 0x62, + 0x22, 0xfd, 0x45, 0x85, 0x8d, 0x5b, 0xe0, 0x14, 0x31, 0xae, 0xb6, 0x57, 0x8d, 0xd8, 0x64, 0x49, + 0xe7, 0x68, 0xe8, 0x44, 0xc4, 0x3f, 0xea, 0x39, 0xba, 0xaa, 0x98, 0x60, 0x83, 0x21, 0xda, 0x4a, + 0xe5, 0x94, 0x5c, 0x3c, 0x7c, 0x4e, 0x09, 0x2b, 0xf6, 0x95, 0x77, 0xaf, 0xc3, 0xe7, 0x2d, 0x18, + 0xf7, 0x53, 0x33, 0xb7, 0x98, 0x30, 0xd2, 0xfc, 0x55, 0xc1, 0x2f, 0x4e, 0x4b, 0xb7, 0xe1, 0x0c, + 0xff, 0x3c, 0x95, 0x56, 0x19, 0x50, 0xa5, 0xe9, 0xdb, 0xa6, 0x86, 0x7b, 0xdd, 0x36, 0x85, 0x7c, + 0x75, 0x07, 0xe0, 0x48, 0xe1, 0x77, 0x00, 0x42, 0xce, 0xfd, 0x7f, 0x37, 0xa0, 0x56, 0x8f, 0x88, + 0x93, 0xdc, 0xe5, 0x75, 0x70, 0xec, 0x80, 0x7e, 0x4e, 0x12, 0xc0, 0x9a, 0x96, 0xfd, 0xbf, 0x86, + 0xe0, 0x84, 0x1c, 0x11, 0x19, 0x82, 0x4e, 0xf5, 0x23, 0xe7, 0xab, 0x8d, 0x5b, 0xa5, 0x1f, 0x2f, + 0x49, 0x00, 0xd6, 0x38, 0xd4, 0x1e, 0x6b, 0xc7, 0x64, 0x25, 0x24, 0xfe, 0x92, 0xbb, 0x11, 0x8b, + 0x73, 0x4e, 0xb5, 0x50, 0xae, 0x69, 0x10, 0x36, 0xf1, 0xa8, 0x31, 0xce, 0xed, 0xe2, 0x38, 0x9b, + 0xbe, 0x22, 0xec, 0x6d, 0x2c, 0xe1, 0xe8, 0x17, 0x72, 0x6b, 0x10, 0x17, 0x93, 0xb8, 0xd5, 0x15, + 0x79, 0x3f, 0xe0, 0x65, 0xa6, 0x7f, 0xd3, 0x82, 0x33, 0xbc, 0x55, 0x8e, 0xe4, 0xb5, 0xb0, 0xe1, + 0x24, 0x24, 0x2e, 0xe6, 0x4e, 0x80, 0x9c, 0xfe, 0x69, 0x27, 0x6f, 0x1e, 0x5b, 0x9c, 0xdf, 0x1b, + 0xf4, 0x39, 0x0b, 0x8e, 0x6f, 0xa7, 0x6a, 0x7e, 0x48, 0xd5, 0x71, 0xd8, 0x74, 0xfc, 0x14, 0x51, + 0xbd, 0xd4, 0xd2, 0xed, 0x31, 0xce, 0x72, 0xb7, 0xff, 0xcc, 0x02, 0x53, 0x8c, 0xde, 0xfb, 0x52, + 0x21, 0x83, 0x9b, 0x82, 0xd2, 0xba, 0xac, 0xf4, 0xb4, 0x2e, 0x1f, 0x83, 0x72, 0xdb, 0x6d, 0x88, + 0xfd, 0x85, 0x3e, 0x7d, 0x5d, 0x9c, 0xc7, 0xb4, 0xdd, 0xfe, 0x47, 0x15, 0xed, 0xb7, 0x10, 0x79, + 0x51, 0xdf, 0x17, 0xaf, 0xbd, 0xa9, 0xaa, 0x21, 0xf1, 0x37, 0xbf, 0xda, 0x55, 0x0d, 0xe9, 0xc7, + 0x06, 0x4f, 0x7b, 0xe3, 0x03, 0xd4, 0xab, 0xe4, 0xdb, 0xc8, 0x01, 0x39, 0x6f, 0x37, 0xa1, 0x4a, + 0xb7, 0x60, 0xcc, 0x01, 0x59, 0x4d, 0x75, 0xaa, 0x7a, 0x49, 0xb4, 0xdf, 0xd9, 0x9b, 0x7c, 0xd7, + 0xe0, 0xdd, 0x92, 0x4f, 0x63, 0x45, 0x1f, 0xc5, 0x50, 0xa3, 0xbf, 0x59, 0x7a, 0x9e, 0xd8, 0xdc, + 0x5d, 0x53, 0x32, 0x53, 0x02, 0x0a, 0xc9, 0xfd, 0xd3, 0x7c, 0x90, 0x0f, 0x35, 0x76, 0xef, 0x33, + 0x63, 0xca, 0xf7, 0x80, 0xab, 0x2a, 0x49, 0x4e, 0x02, 0xee, 0xec, 0x4d, 0xbe, 0x38, 0x38, 0x53, + 0xf5, 0x38, 0xd6, 0x2c, 0xec, 0x2f, 0x0c, 0xe9, 0xb9, 0x2b, 0x4a, 0xfd, 0x7d, 0x5f, 0xcc, 0xdd, + 0x17, 0x32, 0x73, 0xf7, 0x5c, 0xd7, 0xdc, 0x1d, 0xd7, 0x97, 0x02, 0xa7, 0x66, 0xe3, 0xbd, 0x36, + 0x04, 0x0e, 0xf6, 0x37, 0x30, 0x0b, 0xe8, 0xb5, 0xb6, 0x1b, 0x91, 0x78, 0x35, 0x6a, 0xfb, 0xae, + 0xdf, 0x64, 0xd3, 0xb1, 0x6a, 0x5a, 0x40, 0x29, 0x30, 0xce, 0xe2, 0xd3, 0x4d, 0x3d, 0xfd, 0xe6, + 0x37, 0x9c, 0x1d, 0x3e, 0xab, 0x8c, 0xb2, 0x5b, 0x6b, 0xa2, 0x1d, 0x2b, 0x0c, 0xfb, 0x1b, 0xec, + 0x2c, 0xdb, 0xc8, 0x0b, 0xa6, 0x73, 0xc2, 0x63, 0x17, 0x6d, 0xf3, 0x9a, 0x5d, 0x6a, 0x4e, 0xf0, + 0xdb, 0xb5, 0x39, 0x0c, 0xdd, 0x82, 0x91, 0x0d, 0x7e, 0x93, 0x62, 0x31, 0x95, 0xee, 0xc5, 0xb5, + 0x8c, 0xec, 0xbe, 0x1c, 0x79, 0x47, 0xe3, 0x1d, 0xfd, 0x13, 0x4b, 0x6e, 0xf6, 0xef, 0x57, 0xe0, + 0x78, 0xe6, 0xfe, 0xe3, 0x54, 0xd1, 0xda, 0xd2, 0x81, 0x45, 0x6b, 0x3f, 0x00, 0xd0, 0x20, 0xa1, + 0x17, 0x74, 0x98, 0x39, 0x36, 0x34, 0xb0, 0x39, 0xa6, 0x2c, 0xf8, 0x79, 0x45, 0x05, 0x1b, 0x14, + 0x45, 0xa1, 0x32, 0x5e, 0x03, 0x37, 0x53, 0xa8, 0xcc, 0xb8, 0x0f, 0x63, 0xf8, 0xde, 0xde, 0x87, + 0xe1, 0xc2, 0x71, 0xde, 0x45, 0x95, 0x7d, 0x7b, 0x17, 0x49, 0xb6, 0x2c, 0x7f, 0x61, 0x3e, 0x4d, + 0x06, 0x67, 0xe9, 0xde, 0xd7, 0x9b, 0xd6, 0xdf, 0x0e, 0x35, 0xf9, 0x9d, 0xe3, 0x89, 0x9a, 0xae, + 0x60, 0x20, 0xa7, 0x01, 0xbb, 0x76, 0x5c, 0xfc, 0xec, 0x2a, 0x24, 0x00, 0xf7, 0xab, 0x90, 0x80, + 0xfd, 0xd9, 0x12, 0xb5, 0xe3, 0x79, 0xbf, 0x54, 0x4d, 0x9c, 0x27, 0x61, 0xd8, 0x69, 0x27, 0x5b, + 0x41, 0xd7, 0xbd, 0x90, 0x33, 0xac, 0x15, 0x0b, 0x28, 0x5a, 0x82, 0xa1, 0x86, 0xae, 0x73, 0x32, + 0xc8, 0xf7, 0xd4, 0x2e, 0x51, 0x27, 0x21, 0x98, 0x51, 0x41, 0x8f, 0xc2, 0x50, 0xe2, 0x34, 0x65, + 0xca, 0x15, 0x4b, 0xb3, 0x5d, 0x77, 0x9a, 0x31, 0x66, 0xad, 0x03, 0xd4, 0x3c, 0x64, 0x91, 0x1b, + 0x6e, 0xd3, 0x77, 0x92, 0x76, 0x44, 0x8c, 0x63, 0x3e, 0x1d, 0xb9, 0x61, 0x02, 0x71, 0x1a, 0xd7, + 0xfe, 0xcd, 0x31, 0x38, 0xbd, 0x36, 0xb7, 0x2c, 0x8b, 0xa8, 0x1f, 0x59, 0xd6, 0x54, 0x1e, 0x8f, + 0x7b, 0x97, 0x35, 0xd5, 0x83, 0xbb, 0x67, 0x64, 0x4d, 0x79, 0x46, 0xd6, 0x54, 0x3a, 0x85, 0xa5, + 0x5c, 0x44, 0x0a, 0x4b, 0x5e, 0x0f, 0xfa, 0x49, 0x61, 0x39, 0xb2, 0x34, 0xaa, 0x7d, 0x3b, 0x34, + 0x50, 0x1a, 0x95, 0xca, 0x31, 0x2b, 0x24, 0xb9, 0xa0, 0xc7, 0xa7, 0xca, 0xcd, 0x31, 0x53, 0xf9, + 0x3d, 0x3c, 0x71, 0x46, 0x88, 0xfa, 0x57, 0x8a, 0xef, 0x40, 0x1f, 0xf9, 0x3d, 0x22, 0x77, 0xc7, + 0xcc, 0x29, 0x1b, 0x29, 0x22, 0xa7, 0x2c, 0xaf, 0x3b, 0x07, 0xe6, 0x94, 0xbd, 0x08, 0xc7, 0xea, + 0x5e, 0xe0, 0x93, 0xd5, 0x28, 0x48, 0x82, 0x7a, 0xe0, 0x09, 0xb3, 0x5e, 0x89, 0x84, 0x39, 0x13, + 0x88, 0xd3, 0xb8, 0xbd, 0x12, 0xd2, 0x6a, 0x87, 0x4d, 0x48, 0x83, 0xfb, 0x94, 0x90, 0xf6, 0x73, + 0x3a, 0x75, 0x7a, 0x94, 0x7d, 0x91, 0x0f, 0x14, 0xff, 0x45, 0xfa, 0xc9, 0x9f, 0x46, 0x6f, 0xf0, + 0x8b, 0x19, 0xa9, 0x61, 0x3c, 0x17, 0xb4, 0xa8, 0xe1, 0x37, 0xc6, 0x86, 0xe4, 0xd5, 0x23, 0x98, + 0xb0, 0x37, 0xd6, 0x34, 0x1b, 0x75, 0x59, 0xa3, 0x6e, 0xc2, 0xe9, 0x8e, 0x1c, 0x26, 0xb5, 0xfb, + 0xcb, 0x25, 0xf8, 0x81, 0x03, 0xbb, 0x80, 0x6e, 0x01, 0x24, 0x4e, 0x53, 0x4c, 0x54, 0x71, 0x60, + 0x72, 0xc8, 0xf0, 0xca, 0x75, 0x49, 0x8f, 0xd7, 0x24, 0x51, 0x7f, 0xd9, 0x51, 0x84, 0xfc, 0xcd, + 0xa2, 0x2a, 0x03, 0xaf, 0xab, 0x74, 0x23, 0x0e, 0x3c, 0x82, 0x19, 0x84, 0xaa, 0xff, 0x88, 0x34, + 0xf5, 0x4d, 0xe2, 0xea, 0xf3, 0x61, 0xd6, 0x8a, 0x05, 0x14, 0x3d, 0x0f, 0xa3, 0x8e, 0xe7, 0xf1, + 0xfc, 0x18, 0x12, 0x8b, 0x9b, 0x99, 0x74, 0x0d, 0x39, 0x0d, 0xc2, 0x26, 0x9e, 0xfd, 0xa7, 0x25, + 0x98, 0x3c, 0x40, 0xa6, 0x74, 0x65, 0xfc, 0x55, 0xfa, 0xce, 0xf8, 0x13, 0x39, 0x0a, 0xc3, 0x3d, + 0x72, 0x14, 0x9e, 0x87, 0xd1, 0x84, 0x38, 0x2d, 0x11, 0x90, 0x25, 0x3c, 0x01, 0xfa, 0x04, 0x58, + 0x83, 0xb0, 0x89, 0x47, 0xa5, 0xd8, 0xb8, 0x53, 0xaf, 0x93, 0x38, 0x96, 0x49, 0x08, 0xc2, 0x9b, + 0x5a, 0x58, 0x86, 0x03, 0x73, 0x52, 0xcf, 0xa4, 0x58, 0xe0, 0x0c, 0xcb, 0xec, 0x80, 0xd7, 0xfa, + 0x1c, 0xf0, 0xaf, 0x95, 0xe0, 0xb1, 0x7d, 0xb5, 0x5b, 0xdf, 0xf9, 0x21, 0xed, 0x98, 0x44, 0xd9, + 0x89, 0x73, 0x2d, 0x26, 0x11, 0x66, 0x10, 0x3e, 0x4a, 0x61, 0x68, 0xdc, 0xd4, 0x5e, 0x74, 0xf2, + 0x12, 0x1f, 0xa5, 0x14, 0x0b, 0x9c, 0x61, 0x79, 0xb7, 0xd3, 0xf2, 0xef, 0x96, 0xe0, 0x89, 0x3e, + 0x6c, 0x80, 0x02, 0x93, 0xbc, 0xd2, 0xa9, 0x76, 0xe5, 0xfb, 0x94, 0x11, 0x79, 0x97, 0xc3, 0xf5, + 0x8d, 0x12, 0x9c, 0xed, 0xad, 0x8a, 0xd1, 0x8f, 0xc3, 0xf1, 0x48, 0x45, 0x61, 0x99, 0x59, 0x7a, + 0xa7, 0xb8, 0x27, 0x21, 0x05, 0xc2, 0x59, 0x5c, 0x34, 0x05, 0x10, 0x3a, 0xc9, 0x56, 0x7c, 0x61, + 0xd7, 0x8d, 0x13, 0x51, 0x85, 0x66, 0x9c, 0x9f, 0x5d, 0xc9, 0x56, 0x6c, 0x60, 0x50, 0x76, 0xec, + 0xdf, 0x7c, 0x70, 0x35, 0x48, 0xf8, 0x43, 0x7c, 0x1b, 0x71, 0x4a, 0x5e, 0x9d, 0x62, 0x80, 0x70, + 0x16, 0x97, 0xb2, 0x63, 0xa7, 0xa3, 0xbc, 0xa3, 0x7c, 0x7f, 0xc1, 0xd8, 0x2d, 0xa9, 0x56, 0x6c, + 0x60, 0x64, 0xf3, 0x0f, 0x2b, 0x07, 0xe7, 0x1f, 0xda, 0xbf, 0x56, 0x82, 0x47, 0x7a, 0x9a, 0x72, + 0xfd, 0x2d, 0xc0, 0x07, 0x2f, 0x67, 0xf0, 0xee, 0xe6, 0xce, 0x80, 0xb9, 0x6d, 0x7f, 0xdc, 0x63, + 0xa6, 0x89, 0xdc, 0xb6, 0xbb, 0x4f, 0x0e, 0x7f, 0xf0, 0xc6, 0xb3, 0x2b, 0x9d, 0x6d, 0x68, 0x80, + 0x74, 0xb6, 0xcc, 0xc7, 0xa8, 0xf4, 0xb9, 0x90, 0xff, 0xbc, 0xdc, 0x73, 0x78, 0xe9, 0xd6, 0xaf, + 0x2f, 0x3f, 0xed, 0x3c, 0x9c, 0x70, 0x7d, 0x76, 0x8d, 0xd6, 0x5a, 0x7b, 0x43, 0x14, 0x26, 0x29, + 0xa5, 0xef, 0xe1, 0x5f, 0xcc, 0xc0, 0x71, 0xd7, 0x13, 0x0f, 0x60, 0x7a, 0xe1, 0xdd, 0x0d, 0xe9, + 0x60, 0x09, 0xae, 0x68, 0x05, 0xce, 0xc8, 0xa1, 0xd8, 0x72, 0x22, 0xd2, 0x10, 0x6a, 0x24, 0x16, + 0x09, 0x15, 0x8f, 0xf0, 0xa4, 0x8c, 0x1c, 0x04, 0x9c, 0xff, 0x1c, 0xbb, 0xb9, 0x28, 0x08, 0xdd, + 0xba, 0xd8, 0xe4, 0xe8, 0x9b, 0x8b, 0x68, 0x23, 0xe6, 0x30, 0xfb, 0x03, 0x50, 0x53, 0xef, 0xcf, + 0xc3, 0xba, 0xd5, 0xa4, 0xeb, 0x0a, 0xeb, 0x56, 0x33, 0xce, 0xc0, 0xa2, 0x5f, 0x8b, 0x9a, 0xc4, + 0x99, 0xd5, 0x73, 0x85, 0x74, 0x98, 0x7d, 0x6c, 0xbf, 0x03, 0xc6, 0x94, 0x9f, 0xa5, 0xdf, 0xfb, + 0x9c, 0xec, 0xff, 0x53, 0x82, 0x71, 0xee, 0x59, 0xe3, 0x97, 0x56, 0x04, 0x74, 0x33, 0x5d, 0x6b, + 0xc8, 0x7b, 0x30, 0x8b, 0xa9, 0xc6, 0xa8, 0xae, 0xd5, 0xd4, 0xee, 0x7f, 0xd5, 0x84, 0x35, 0x33, + 0xf4, 0x21, 0x5e, 0xf8, 0x50, 0xb0, 0x2e, 0x15, 0x91, 0xf2, 0xb9, 0xa6, 0xe8, 0x99, 0x97, 0xc4, + 0xc8, 0x36, 0x6c, 0xf0, 0x43, 0x09, 0xd4, 0xb6, 0xe4, 0xc5, 0x1d, 0xc5, 0x88, 0x1f, 0x75, 0x0f, + 0x08, 0x37, 0x06, 0xd4, 0x5f, 0xac, 0x19, 0xd9, 0xff, 0xba, 0x04, 0xa7, 0xd3, 0x1f, 0x40, 0x1c, + 0xd7, 0xdc, 0xbf, 0xcf, 0x30, 0x98, 0x8b, 0xfd, 0xf3, 0x16, 0x9c, 0xd8, 0xca, 0x5c, 0x9e, 0x52, + 0xcc, 0xa5, 0xe1, 0xd9, 0x2b, 0x59, 0x66, 0x4f, 0x53, 0xb1, 0x96, 0x6d, 0xc5, 0x5d, 0xdc, 0xed, + 0x2f, 0x0c, 0xc3, 0xb1, 0x54, 0xc5, 0xcb, 0xd4, 0x2b, 0x59, 0x07, 0xbe, 0x12, 0xcb, 0x3d, 0x69, + 0xfb, 0xf2, 0x06, 0x43, 0x23, 0xf7, 0xa4, 0xed, 0x13, 0xcc, 0x61, 0x74, 0xcf, 0xd6, 0x88, 0x3a, + 0xb8, 0xed, 0x8b, 0x18, 0x71, 0xb5, 0x67, 0x9b, 0x67, 0xad, 0x58, 0x40, 0xd1, 0x47, 0x2d, 0x18, + 0x63, 0xb3, 0x4c, 0x9c, 0xb9, 0x08, 0x49, 0x7a, 0xb9, 0x80, 0x79, 0x2d, 0xab, 0xbb, 0xb2, 0xb0, + 0x2f, 0xb3, 0x05, 0xa7, 0x38, 0xa2, 0x4f, 0x58, 0x50, 0x53, 0x17, 0x2d, 0x89, 0xeb, 0x48, 0xd7, + 0x8a, 0x2d, 0x28, 0x9a, 0x99, 0x57, 0xaa, 0xb2, 0x23, 0xd6, 0x8c, 0x51, 0xac, 0x0e, 0x44, 0x46, + 0x8e, 0xe6, 0x40, 0x04, 0x72, 0x0e, 0x43, 0xde, 0x0e, 0xb5, 0x96, 0xe3, 0xbb, 0x9b, 0x24, 0x4e, + 0xf8, 0x19, 0x85, 0xac, 0x73, 0x2c, 0x1b, 0xb1, 0x86, 0x53, 0x2b, 0x33, 0x66, 0x2f, 0x96, 0x18, + 0x87, 0x0a, 0xcc, 0xca, 0x5c, 0xd3, 0xcd, 0xd8, 0xc4, 0x31, 0x4f, 0x40, 0xe0, 0xbe, 0x9e, 0x80, + 0x8c, 0xee, 0x7f, 0x02, 0x62, 0xff, 0x7d, 0x0b, 0xce, 0xe4, 0x7e, 0xb5, 0x07, 0x37, 0x9a, 0xd7, + 0xfe, 0x62, 0x05, 0x4e, 0xe5, 0x94, 0xae, 0x45, 0x1d, 0x73, 0x3e, 0x5b, 0x45, 0x04, 0xc6, 0xa4, + 0xe3, 0x3c, 0xe4, 0x30, 0xe6, 0x4c, 0xe2, 0xc1, 0x84, 0xa3, 0x3e, 0x03, 0x2c, 0xdf, 0xdb, 0x33, + 0x40, 0x63, 0x5a, 0x0e, 0xdd, 0xd7, 0x69, 0x59, 0x39, 0xe0, 0x60, 0xee, 0x57, 0x2d, 0x98, 0x68, + 0xf5, 0xb8, 0x2f, 0x41, 0x78, 0xd3, 0xaf, 0x1f, 0xcd, 0x6d, 0x0c, 0xb3, 0x8f, 0xde, 0xde, 0x9b, + 0xec, 0x79, 0x4d, 0x05, 0xee, 0xd9, 0x2b, 0xfb, 0x3b, 0x65, 0x60, 0x36, 0x04, 0x2b, 0x4f, 0xd8, + 0x41, 0x1f, 0x31, 0x2b, 0x60, 0x5b, 0x45, 0x55, 0x6b, 0xe6, 0xc4, 0x55, 0x05, 0x6d, 0x3e, 0x82, + 0x79, 0x05, 0xb5, 0xb3, 0x42, 0xab, 0xd4, 0x87, 0xd0, 0xf2, 0x64, 0xa9, 0xf1, 0x72, 0xf1, 0xa5, + 0xc6, 0x6b, 0xd9, 0x32, 0xe3, 0xfb, 0x7f, 0xe2, 0xa1, 0x07, 0xf2, 0x13, 0xff, 0xa2, 0xc5, 0x05, + 0x4f, 0xe6, 0x2b, 0x68, 0xcb, 0xc0, 0xda, 0xc7, 0x32, 0x78, 0x1a, 0xaa, 0x31, 0xf1, 0x36, 0x2f, + 0x11, 0xc7, 0x13, 0x16, 0x84, 0x0e, 0xca, 0x10, 0xed, 0x58, 0x61, 0xb0, 0x2b, 0xa1, 0x3d, 0x2f, + 0xb8, 0x75, 0xa1, 0x15, 0x26, 0x1d, 0x61, 0x4b, 0xe8, 0x2b, 0xa1, 0x15, 0x04, 0x1b, 0x58, 0xb6, + 0x0f, 0x86, 0x11, 0x7b, 0xd8, 0x4b, 0xe6, 0xfa, 0xb8, 0x38, 0xf3, 0x6f, 0x94, 0x04, 0x43, 0x6e, + 0x9a, 0xbe, 0x90, 0xb9, 0x34, 0xb4, 0xff, 0x20, 0x9c, 0x0f, 0x01, 0xd4, 0x83, 0x56, 0x48, 0x37, + 0x4f, 0xeb, 0x41, 0x31, 0x16, 0xfe, 0x9c, 0xa2, 0xa7, 0x87, 0x4d, 0xb7, 0x61, 0x83, 0x5f, 0x4a, + 0x76, 0x97, 0x0f, 0x94, 0xdd, 0x29, 0x31, 0x36, 0x74, 0x80, 0x76, 0xfd, 0x53, 0x0b, 0x52, 0x16, + 0x18, 0x0a, 0xa1, 0x42, 0xbb, 0xdb, 0x11, 0x12, 0x61, 0xa5, 0x38, 0x73, 0x8f, 0x8a, 0x62, 0xb1, + 0xcc, 0xd8, 0x4f, 0xcc, 0x19, 0x21, 0x4f, 0x04, 0x1c, 0x95, 0x8a, 0xb0, 0xbd, 0x4d, 0x86, 0x97, + 0x82, 0x60, 0x9b, 0x47, 0x07, 0xe8, 0xe0, 0x25, 0xfb, 0x05, 0x38, 0xd9, 0xd5, 0x29, 0x76, 0x31, + 0x5d, 0x20, 0xf7, 0x2b, 0xc6, 0xf2, 0x60, 0x59, 0xd0, 0x98, 0xc3, 0xec, 0x6f, 0x58, 0x70, 0x22, + 0x4b, 0x1e, 0xbd, 0x61, 0xc1, 0xc9, 0x38, 0x4b, 0xef, 0xa8, 0xc6, 0x4e, 0x05, 0x0d, 0x77, 0x81, + 0x70, 0x77, 0x27, 0xec, 0xff, 0x2d, 0x26, 0xff, 0x0d, 0xd7, 0x6f, 0x04, 0xb7, 0x94, 0x21, 0x64, + 0xf5, 0x34, 0x84, 0xe8, 0xfa, 0xaf, 0x6f, 0x91, 0x46, 0xdb, 0xeb, 0x4a, 0xbf, 0x5e, 0x13, 0xed, + 0x58, 0x61, 0xb0, 0x6c, 0xd3, 0xb6, 0xb1, 0x6d, 0x32, 0xb0, 0xe7, 0x45, 0x3b, 0x56, 0x18, 0xe8, + 0x39, 0x18, 0x33, 0x5e, 0x52, 0xce, 0x4b, 0xb6, 0x01, 0x30, 0x54, 0x74, 0x8c, 0x53, 0x58, 0x68, + 0x0a, 0x40, 0x19, 0x55, 0x52, 0x25, 0x33, 0x6f, 0xab, 0x92, 0x7c, 0x31, 0x36, 0x30, 0x58, 0x6e, + 0xb7, 0xd7, 0x8e, 0xd9, 0x41, 0xd9, 0xb0, 0xae, 0xc7, 0x3b, 0x27, 0xda, 0xb0, 0x82, 0x52, 0xe9, + 0xd5, 0x72, 0xfc, 0xb6, 0xe3, 0xd1, 0x11, 0x12, 0xfe, 0x13, 0xb5, 0x0c, 0x97, 0x15, 0x04, 0x1b, + 0x58, 0xf4, 0x8d, 0x13, 0xb7, 0x45, 0x5e, 0x0e, 0x7c, 0x19, 0xec, 0xa9, 0xcf, 0x4e, 0x45, 0x3b, + 0x56, 0x18, 0xf6, 0x7f, 0xb6, 0xe0, 0xb8, 0xae, 0x14, 0xc1, 0x0a, 0x7a, 0xa7, 0xdc, 0x3d, 0xd6, + 0x81, 0xee, 0x9e, 0x74, 0x0a, 0x7d, 0xa9, 0xaf, 0x14, 0x7a, 0x33, 0xbb, 0xbd, 0xbc, 0x6f, 0x76, + 0xfb, 0x0f, 0xe9, 0x5b, 0xa6, 0x79, 0x1a, 0xfc, 0x68, 0xde, 0x0d, 0xd3, 0xc8, 0x86, 0xe1, 0xba, + 0xa3, 0xca, 0x24, 0x8d, 0xf1, 0xbd, 0xca, 0xdc, 0x0c, 0x43, 0x12, 0x10, 0x7b, 0x05, 0x6a, 0xea, + 0x08, 0x51, 0x7a, 0x7b, 0xac, 0x7c, 0x6f, 0x4f, 0x5f, 0x59, 0xb6, 0xb3, 0x1b, 0xdf, 0xfc, 0xee, + 0xe3, 0x6f, 0xf9, 0xbd, 0xef, 0x3e, 0xfe, 0x96, 0x3f, 0xfa, 0xee, 0xe3, 0x6f, 0xf9, 0xe8, 0xed, + 0xc7, 0xad, 0x6f, 0xde, 0x7e, 0xdc, 0xfa, 0xbd, 0xdb, 0x8f, 0x5b, 0x7f, 0x74, 0xfb, 0x71, 0xeb, + 0x3b, 0xb7, 0x1f, 0xb7, 0x3e, 0xff, 0x1f, 0x1e, 0x7f, 0xcb, 0xcb, 0xb9, 0xd1, 0xbe, 0xf4, 0xc7, + 0x33, 0xf5, 0xc6, 0xf4, 0xce, 0x79, 0x16, 0x70, 0x4a, 0x97, 0xd7, 0xb4, 0x31, 0xa7, 0xa6, 0xe5, + 0xf2, 0xfa, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x04, 0x44, 0xe5, 0xbe, 0xc6, 0xe8, 0x00, 0x00, } func (m *AWSAuthConfig) Marshal() (dAtA []byte, err error) { @@ -9753,6 +9786,61 @@ func (m *HostResourceInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *HydrateOperation) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *HydrateOperation) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *HydrateOperation) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.Message) + copy(dAtA[i:], m.Message) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) + i-- + dAtA[i] = 0x22 + i -= len(m.Status) + copy(dAtA[i:], m.Status) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Status))) + i-- + dAtA[i] = 0x1a + if m.FinishedAt != nil { + { + size, err := m.FinishedAt.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + { + size, err := m.StartedAt.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + func (m *HydrateTo) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -14041,6 +14129,18 @@ func (m *SourceHydratorStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.HydrateOperation != nil { + { + size, err := m.HydrateOperation.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } i -= len(m.Revision) copy(dAtA[i:], m.Revision) i = encodeVarintGenerated(dAtA, i, uint64(len(m.Revision))) @@ -16460,6 +16560,25 @@ func (m *HostResourceInfo) Size() (n int) { return n } +func (m *HydrateOperation) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.StartedAt.Size() + n += 1 + l + sovGenerated(uint64(l)) + if m.FinishedAt != nil { + l = m.FinishedAt.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + l = len(m.Status) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Message) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + func (m *HydrateTo) Size() (n int) { if m == nil { return 0 @@ -18053,6 +18172,10 @@ func (m *SourceHydratorStatus) Size() (n int) { n += 1 + l + sovGenerated(uint64(l)) l = len(m.Revision) n += 1 + l + sovGenerated(uint64(l)) + if m.HydrateOperation != nil { + l = m.HydrateOperation.Size() + n += 1 + l + sovGenerated(uint64(l)) + } return n } @@ -19591,6 +19714,19 @@ func (this *HostResourceInfo) String() string { }, "") return s } +func (this *HydrateOperation) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&HydrateOperation{`, + `StartedAt:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.StartedAt), "Time", "v1.Time", 1), `&`, ``, 1) + `,`, + `FinishedAt:` + strings.Replace(fmt.Sprintf("%v", this.FinishedAt), "Time", "v1.Time", 1) + `,`, + `Status:` + fmt.Sprintf("%v", this.Status) + `,`, + `Message:` + fmt.Sprintf("%v", this.Message) + `,`, + `}`, + }, "") + return s +} func (this *HydrateTo) String() string { if this == nil { return "nil" @@ -20783,6 +20919,7 @@ func (this *SourceHydratorStatus) String() string { s := strings.Join([]string{`&SourceHydratorStatus{`, `DrySource:` + strings.Replace(strings.Replace(this.DrySource.String(), "DrySource", "DrySource", 1), `&`, ``, 1) + `,`, `Revision:` + fmt.Sprintf("%v", this.Revision) + `,`, + `HydrateOperation:` + strings.Replace(this.HydrateOperation.String(), "HydrateOperation", "HydrateOperation", 1) + `,`, `}`, }, "") return s @@ -35065,6 +35202,189 @@ func (m *HostResourceInfo) Unmarshal(dAtA []byte) error { } return nil } +func (m *HydrateOperation) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: HydrateOperation: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: HydrateOperation: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field StartedAt", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.StartedAt.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FinishedAt", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.FinishedAt == nil { + m.FinishedAt = &v1.Time{} + } + if err := m.FinishedAt.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Status = HydrateOperationPhase(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Message = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *HydrateTo) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -49696,6 +50016,42 @@ func (m *SourceHydratorStatus) Unmarshal(dAtA []byte) error { } m.Revision = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HydrateOperation", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.HydrateOperation == nil { + m.HydrateOperation = &HydrateOperation{} + } + if err := m.HydrateOperation.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) diff --git a/pkg/apis/application/v1alpha1/generated.proto b/pkg/apis/application/v1alpha1/generated.proto index 19ae98d0d1160..89b5695ec3d3e 100644 --- a/pkg/apis/application/v1alpha1/generated.proto +++ b/pkg/apis/application/v1alpha1/generated.proto @@ -1061,6 +1061,20 @@ message HostResourceInfo { optional int64 capacity = 4; } +message HydrateOperation { + // StartedAt indicates when the hydrate operation started + optional k8s.io.apimachinery.pkg.apis.meta.v1.Time startedAt = 1; + + // FinishedAt indicates when the hydrate operation finished + optional k8s.io.apimachinery.pkg.apis.meta.v1.Time finishedAt = 2; + + // Status indicates the status of the hydrate operation + optional string status = 3; + + // Message contains a message describing the current status of the hydrate operation + optional string message = 4; +} + // HydrateTo specifies a location to which hydrated manifests should be pushed as a "staging area" before being moved to // the SyncSource. The RepoURL and Path are assumed based on the associated SyncSource config in the SourceHydrator. message HydrateTo { @@ -2172,6 +2186,9 @@ message SourceHydratorStatus { // Revision holds the resolved revision (sha) of the dry source as of the most recent reconciliation optional string revision = 2; + + // HydrateOperation holds the status of the hydrate operation + optional HydrateOperation hydrateOperation = 3; } // SyncOperation contains details about a sync operation. diff --git a/pkg/apis/application/v1alpha1/openapi_generated.go b/pkg/apis/application/v1alpha1/openapi_generated.go index 7bb544b4d6bb6..127e88270175e 100644 --- a/pkg/apis/application/v1alpha1/openapi_generated.go +++ b/pkg/apis/application/v1alpha1/openapi_generated.go @@ -84,6 +84,7 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.HelmParameter": schema_pkg_apis_application_v1alpha1_HelmParameter(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.HostInfo": schema_pkg_apis_application_v1alpha1_HostInfo(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.HostResourceInfo": schema_pkg_apis_application_v1alpha1_HostResourceInfo(ref), + "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.HydrateOperation": schema_pkg_apis_application_v1alpha1_HydrateOperation(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.HydrateTo": schema_pkg_apis_application_v1alpha1_HydrateTo(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.Info": schema_pkg_apis_application_v1alpha1_Info(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.InfoItem": schema_pkg_apis_application_v1alpha1_InfoItem(ref), @@ -3815,6 +3816,49 @@ func schema_pkg_apis_application_v1alpha1_HostResourceInfo(ref common.ReferenceC } } +func schema_pkg_apis_application_v1alpha1_HydrateOperation(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "startedAt": { + SchemaProps: spec.SchemaProps{ + Description: "StartedAt indicates when the hydrate operation started", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "finishedAt": { + SchemaProps: spec.SchemaProps{ + Description: "FinishedAt indicates when the hydrate operation finished", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Status indicates the status of the hydrate operation", + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + "message": { + SchemaProps: spec.SchemaProps{ + Description: "Message contains a message describing the current status of the hydrate operation", + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"status", "message"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + func schema_pkg_apis_application_v1alpha1_HydrateTo(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{ @@ -4133,7 +4177,6 @@ func schema_pkg_apis_application_v1alpha1_KustomizeReplica(ref common.ReferenceC "count": { SchemaProps: spec.SchemaProps{ Description: "Number of replicas", - Default: map[string]interface{}{}, Ref: ref("k8s.io/apimachinery/pkg/util/intstr.IntOrString"), }, }, @@ -4255,8 +4298,7 @@ func schema_pkg_apis_application_v1alpha1_ListGenerator(ref common.ReferenceCall Items: &spec.SchemaOrArray{ Schema: &spec.Schema{ SchemaProps: spec.SchemaProps{ - Default: map[string]interface{}{}, - Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.JSON"), + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.JSON"), }, }, }, @@ -4594,7 +4636,6 @@ func schema_pkg_apis_application_v1alpha1_OperationState(ref common.ReferenceCal "startedAt": { SchemaProps: spec.SchemaProps{ Description: "StartedAt contains time of operation start", - Default: map[string]interface{}{}, Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), }, }, @@ -4893,8 +4934,7 @@ func schema_pkg_apis_application_v1alpha1_PluginInput(ref common.ReferenceCallba Allows: true, Schema: &spec.Schema{ SchemaProps: spec.SchemaProps{ - Default: map[string]interface{}{}, - Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.JSON"), + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.JSON"), }, }, }, @@ -6753,7 +6793,6 @@ func schema_pkg_apis_application_v1alpha1_RevisionHistory(ref common.ReferenceCa "deployedAt": { SchemaProps: spec.SchemaProps{ Description: "DeployedAt holds the time the sync operation completed", - Default: map[string]interface{}{}, Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), }, }, @@ -6840,7 +6879,6 @@ func schema_pkg_apis_application_v1alpha1_RevisionMetadata(ref common.ReferenceC "date": { SchemaProps: spec.SchemaProps{ Description: "Date specifies when the revision was authored", - Default: map[string]interface{}{}, Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), }, }, @@ -7519,11 +7557,17 @@ func schema_pkg_apis_application_v1alpha1_SourceHydratorStatus(ref common.Refere Format: "", }, }, + "hydrateOperation": { + SchemaProps: spec.SchemaProps{ + Description: "HydrateOperation holds the status of the hydrate operation", + Ref: ref("github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.HydrateOperation"), + }, + }, }, }, }, Dependencies: []string{ - "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.DrySource"}, + "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.DrySource", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.HydrateOperation"}, } } diff --git a/pkg/apis/application/v1alpha1/types.go b/pkg/apis/application/v1alpha1/types.go index 6857747ecf396..071019d76f1c6 100644 --- a/pkg/apis/application/v1alpha1/types.go +++ b/pkg/apis/application/v1alpha1/types.go @@ -1042,8 +1042,29 @@ type SourceHydratorStatus struct { DrySource DrySource `json:"drySource,omitempty" protobuf:"bytes,1,opt,name=drySource"` // Revision holds the resolved revision (sha) of the dry source as of the most recent reconciliation Revision string `json:"revision,omitempty" protobuf:"bytes,2,opt,name=revision"` + // HydrateOperation holds the status of the hydrate operation + HydrateOperation *HydrateOperation `json:"hydrateOperation,omitempty" protobuf:"bytes,3,opt,name=hydrateOperation"` } +type HydrateOperation struct { + // StartedAt indicates when the hydrate operation started + StartedAt metav1.Time `json:"startedAt,omitempty" protobuf:"bytes,1,opt,name=startedAt"` + // FinishedAt indicates when the hydrate operation finished + FinishedAt *metav1.Time `json:"finishedAt,omitempty" protobuf:"bytes,2,opt,name=finishedAt"` + // Status indicates the status of the hydrate operation + Status HydrateOperationPhase `json:"status" protobuf:"bytes,3,opt,name=status"` + // Message contains a message describing the current status of the hydrate operation + Message string `json:"message" protobuf:"bytes,4,opt,name=message"` +} + +type HydrateOperationPhase string + +const ( + HydrateOperationPhaseRunning HydrateOperationPhase = "Running" + HydrateOperationPhaseFailed HydrateOperationPhase = "Failed" + HydrateOperationPhaseSucceeded HydrateOperationPhase = "Succeeded" +) + // GetRevisions will return the current revision associated with the Application. // If app has multisources, it will return all corresponding revisions preserving // order from the app.spec.sources. If app has only one source, it will return a diff --git a/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go index 7b0a7869774d4..7f1a7cb1e29eb 100644 --- a/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go +++ b/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go @@ -1341,7 +1341,7 @@ func (in *ApplicationStatus) DeepCopyInto(out *ApplicationStatus) { *out = make([]ApplicationSourceType, len(*in)) copy(*out, *in) } - out.SourceHydrator = in.SourceHydrator + in.SourceHydrator.DeepCopyInto(&out.SourceHydrator) return } @@ -2149,6 +2149,27 @@ func (in *HostResourceInfo) DeepCopy() *HostResourceInfo { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *HydrateOperation) DeepCopyInto(out *HydrateOperation) { + *out = *in + in.StartedAt.DeepCopyInto(&out.StartedAt) + if in.FinishedAt != nil { + in, out := &in.FinishedAt, &out.FinishedAt + *out = (*in).DeepCopy() + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HydrateOperation. +func (in *HydrateOperation) DeepCopy() *HydrateOperation { + if in == nil { + return nil + } + out := new(HydrateOperation) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *HydrateTo) DeepCopyInto(out *HydrateTo) { *out = *in @@ -4113,6 +4134,11 @@ func (in *SourceHydrator) DeepCopy() *SourceHydrator { func (in *SourceHydratorStatus) DeepCopyInto(out *SourceHydratorStatus) { *out = *in out.DrySource = in.DrySource + if in.HydrateOperation != nil { + in, out := &in.HydrateOperation, &out.HydrateOperation + *out = new(HydrateOperation) + (*in).DeepCopyInto(*out) + } return } diff --git a/pkg/client/clientset/versioned/typed/application/v1alpha1/fake/fake_application.go b/pkg/client/clientset/versioned/typed/application/v1alpha1/fake/fake_application.go index f70ce5423aa98..af03d9de038fa 100644 --- a/pkg/client/clientset/versioned/typed/application/v1alpha1/fake/fake_application.go +++ b/pkg/client/clientset/versioned/typed/application/v1alpha1/fake/fake_application.go @@ -8,7 +8,6 @@ import ( v1alpha1 "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" labels "k8s.io/apimachinery/pkg/labels" - schema "k8s.io/apimachinery/pkg/runtime/schema" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" testing "k8s.io/client-go/testing" @@ -20,9 +19,9 @@ type FakeApplications struct { ns string } -var applicationsResource = schema.GroupVersionResource{Group: "argoproj.io", Version: "v1alpha1", Resource: "applications"} +var applicationsResource = v1alpha1.SchemeGroupVersion.WithResource("applications") -var applicationsKind = schema.GroupVersionKind{Group: "argoproj.io", Version: "v1alpha1", Kind: "Application"} +var applicationsKind = v1alpha1.SchemeGroupVersion.WithKind("Application") // Get takes name of the application, and returns the corresponding application object, and an error if there is any. func (c *FakeApplications) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1alpha1.Application, err error) { diff --git a/pkg/client/clientset/versioned/typed/application/v1alpha1/fake/fake_applicationset.go b/pkg/client/clientset/versioned/typed/application/v1alpha1/fake/fake_applicationset.go index d1ae0997751b7..507a938eb25bf 100644 --- a/pkg/client/clientset/versioned/typed/application/v1alpha1/fake/fake_applicationset.go +++ b/pkg/client/clientset/versioned/typed/application/v1alpha1/fake/fake_applicationset.go @@ -8,7 +8,6 @@ import ( v1alpha1 "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" labels "k8s.io/apimachinery/pkg/labels" - schema "k8s.io/apimachinery/pkg/runtime/schema" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" testing "k8s.io/client-go/testing" @@ -20,9 +19,9 @@ type FakeApplicationSets struct { ns string } -var applicationsetsResource = schema.GroupVersionResource{Group: "argoproj.io", Version: "v1alpha1", Resource: "applicationsets"} +var applicationsetsResource = v1alpha1.SchemeGroupVersion.WithResource("applicationsets") -var applicationsetsKind = schema.GroupVersionKind{Group: "argoproj.io", Version: "v1alpha1", Kind: "ApplicationSet"} +var applicationsetsKind = v1alpha1.SchemeGroupVersion.WithKind("ApplicationSet") // Get takes name of the applicationSet, and returns the corresponding applicationSet object, and an error if there is any. func (c *FakeApplicationSets) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1alpha1.ApplicationSet, err error) { diff --git a/pkg/client/clientset/versioned/typed/application/v1alpha1/fake/fake_appproject.go b/pkg/client/clientset/versioned/typed/application/v1alpha1/fake/fake_appproject.go index 802699f4c70b6..94dc1185f350c 100644 --- a/pkg/client/clientset/versioned/typed/application/v1alpha1/fake/fake_appproject.go +++ b/pkg/client/clientset/versioned/typed/application/v1alpha1/fake/fake_appproject.go @@ -8,7 +8,6 @@ import ( v1alpha1 "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" labels "k8s.io/apimachinery/pkg/labels" - schema "k8s.io/apimachinery/pkg/runtime/schema" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" testing "k8s.io/client-go/testing" @@ -20,9 +19,9 @@ type FakeAppProjects struct { ns string } -var appprojectsResource = schema.GroupVersionResource{Group: "argoproj.io", Version: "v1alpha1", Resource: "appprojects"} +var appprojectsResource = v1alpha1.SchemeGroupVersion.WithResource("appprojects") -var appprojectsKind = schema.GroupVersionKind{Group: "argoproj.io", Version: "v1alpha1", Kind: "AppProject"} +var appprojectsKind = v1alpha1.SchemeGroupVersion.WithKind("AppProject") // Get takes name of the appProject, and returns the corresponding appProject object, and an error if there is any. func (c *FakeAppProjects) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1alpha1.AppProject, err error) { diff --git a/pkg/client/informers/externalversions/factory.go b/pkg/client/informers/externalversions/factory.go index 7d04eeb35ed52..f1a7250aa936f 100644 --- a/pkg/client/informers/externalversions/factory.go +++ b/pkg/client/informers/externalversions/factory.go @@ -26,6 +26,7 @@ type sharedInformerFactory struct { lock sync.Mutex defaultResync time.Duration customResync map[reflect.Type]time.Duration + transform cache.TransformFunc informers map[reflect.Type]cache.SharedIndexInformer // startedInformers is used for tracking which informers have been started. @@ -64,6 +65,14 @@ func WithNamespace(namespace string) SharedInformerOption { } } +// WithTransform sets a transform on all informers. +func WithTransform(transform cache.TransformFunc) SharedInformerOption { + return func(factory *sharedInformerFactory) *sharedInformerFactory { + factory.transform = transform + return factory + } +} + // NewSharedInformerFactory constructs a new instance of sharedInformerFactory for all namespaces. func NewSharedInformerFactory(client versioned.Interface, defaultResync time.Duration) SharedInformerFactory { return NewSharedInformerFactoryWithOptions(client, defaultResync) @@ -150,7 +159,7 @@ func (f *sharedInformerFactory) WaitForCacheSync(stopCh <-chan struct{}) map[ref return res } -// InternalInformerFor returns the SharedIndexInformer for obj using an internal +// InformerFor returns the SharedIndexInformer for obj using an internal // client. func (f *sharedInformerFactory) InformerFor(obj runtime.Object, newFunc internalinterfaces.NewInformerFunc) cache.SharedIndexInformer { f.lock.Lock() @@ -168,6 +177,7 @@ func (f *sharedInformerFactory) InformerFor(obj runtime.Object, newFunc internal } informer = newFunc(f.client, resyncPeriod) + informer.SetTransform(f.transform) f.informers[informerType] = informer return informer @@ -223,7 +233,7 @@ type SharedInformerFactory interface { // ForResource gives generic access to a shared informer of the matching type. ForResource(resource schema.GroupVersionResource) (GenericInformer, error) - // InternalInformerFor returns the SharedIndexInformer for obj using an internal + // InformerFor returns the SharedIndexInformer for obj using an internal // client. InformerFor(obj runtime.Object, newFunc internalinterfaces.NewInformerFunc) cache.SharedIndexInformer diff --git a/ui/src/app/applications/components/application-status-panel/application-status-panel.tsx b/ui/src/app/applications/components/application-status-panel/application-status-panel.tsx index 610503d4c822a..18b17d6d1a57e 100644 --- a/ui/src/app/applications/components/application-status-panel/application-status-panel.tsx +++ b/ui/src/app/applications/components/application-status-panel/application-status-panel.tsx @@ -5,7 +5,13 @@ import {Revision} from '../../../shared/components/revision'; import {Timestamp} from '../../../shared/components/timestamp'; import * as models from '../../../shared/models'; import {services} from '../../../shared/services'; -import {ApplicationSyncWindowStatusIcon, ComparisonStatusIcon, getAppDefaultSource, getAppOperationState} from '../utils'; +import { + ApplicationSyncWindowStatusIcon, + ComparisonStatusIcon, + getAppDefaultSource, + getAppOperationState, + HydrateOperationPhaseIcon +} from '../utils'; import {getConditionCategory, HealthStatusIcon, OperationState, syncStatusMessage, helpTip} from '../utils'; import {RevisionMetadataPanel} from './revision-metadata-panel'; @@ -64,6 +70,8 @@ export const ApplicationStatusPanel = ({application, showDiff, showOperation, sh showOperation = null; } + console.log(application); + const statusExtensions = services.extensions.getStatusPanelExtensions(); const infos = cntByCategory.get('info'); @@ -180,6 +188,19 @@ export const ApplicationStatusPanel = ({application, showDiff, showOperation, sh
)} + {application.status?.sourceHydrator?.hydrateOperation && ( +
+ {sectionLabel({title: 'SOURCE HYDRATOR'})} +
+ +   + {application.status.sourceHydrator.hydrateOperation.status} +
+ {application.status.sourceHydrator.hydrateOperation.message && ( +
{application.status.sourceHydrator.hydrateOperation.message}
+ )} +
+ )} { return ; }; +export const HydrateOperationPhaseIcon = ({operationState}: {operationState?: appModels.HydrateOperation}) => { + if (operationState === undefined) { + return ; + } + let className = ''; + let color = ''; + switch (operationState.status) { + case appModels.HydrateOperationPhases.Succeeded: + className = 'fa fa-check-circle'; + color = COLORS.operation.success; + break; + case appModels.HydrateOperationPhases.Failed: + className = 'fa fa-times-circle'; + color = COLORS.operation.failed; + break; + default: + className = 'fa fa-circle-notch fa-spin'; + color = COLORS.operation.running; + break; + } + return ; +} + export const ComparisonStatusIcon = ({ status, resource, diff --git a/ui/src/app/shared/models.ts b/ui/src/app/shared/models.ts index f9961d086d0cf..03cc768006e1b 100644 --- a/ui/src/app/shared/models.ts +++ b/ui/src/app/shared/models.ts @@ -453,8 +453,30 @@ export interface ApplicationStatus { health: HealthStatus; operationState?: OperationState; summary?: ApplicationSummary; + sourceHydrator?: SourceHydratorStatus; } +export interface SourceHydratorStatus { + drySource: DrySource; + revision: string; + hydrateOperation?: HydrateOperation; +} + +export interface HydrateOperation { + startedAt: models.Time; + finishedAt?: models.Time; + status: HydrateOperationPhase; + message: string; +} + +export type HydrateOperationPhase = 'Running' | 'Failed' | 'Succeeded'; + +export const HydrateOperationPhases = { + Running: 'Running' as OperationPhase, + Failed: 'Failed' as OperationPhase, + Succeeded: 'Succeeded' as OperationPhase, +}; + export interface JwtTokens { items: JwtToken[]; } From 277242e058c17e2a41421481ba296f63d71d81d6 Mon Sep 17 00:00:00 2001 From: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> Date: Tue, 7 May 2024 16:01:42 -0400 Subject: [PATCH 10/15] use workqueue Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> --- controller/appcontroller.go | 204 +++++++++++++++++++++++++++--------- controller/commit/commit.go | 101 +++++++++++------- controller/state.go | 19 +++- 3 files changed, 234 insertions(+), 90 deletions(-) diff --git a/controller/appcontroller.go b/controller/appcontroller.go index c2478b839fce9..7bfed8f66fad4 100644 --- a/controller/appcontroller.go +++ b/controller/appcontroller.go @@ -179,7 +179,7 @@ func NewApplicationController( appOperationQueue: workqueue.NewNamedRateLimitingQueue(ratelimiter.NewCustomAppControllerRateLimiter(rateLimiterConfig), "app_operation_processing_queue"), projectRefreshQueue: workqueue.NewNamedRateLimitingQueue(ratelimiter.NewCustomAppControllerRateLimiter(rateLimiterConfig), "project_reconciliation_queue"), appComparisonTypeRefreshQueue: workqueue.NewRateLimitingQueue(ratelimiter.NewCustomAppControllerRateLimiter(rateLimiterConfig)), - hydrationQueue: workqueue.NewRateLimitingQueue(ratelimiter.NewCustomAppControllerRateLimiter(rateLimiterConfig)), + hydrationQueue: workqueue.NewNamedRateLimitingQueue(ratelimiter.NewCustomAppControllerRateLimiter(rateLimiterConfig), "manifest_hydration_queue"), db: db, statusRefreshTimeout: appResyncPeriod, statusHardRefreshTimeout: appHardResyncPeriod, @@ -783,6 +783,7 @@ func (ctrl *ApplicationController) Run(ctx context.Context, statusProcessors int defer ctrl.appComparisonTypeRefreshQueue.ShutDown() defer ctrl.appOperationQueue.ShutDown() defer ctrl.projectRefreshQueue.ShutDown() + defer ctrl.hydrationQueue.ShutDown() ctrl.metricsServer.RegisterClustersInfoSource(ctx, ctrl.stateCache) ctrl.RegisterClusterSecretUpdater(ctx) @@ -841,6 +842,12 @@ func (ctrl *ApplicationController) Run(ctx context.Context, statusProcessors int for ctrl.processProjectQueueItem() { } }, time.Second, ctx.Done()) + + go wait.Until(func() { + for ctrl.processHydrationQueueItem() { + } + }, time.Second, ctx.Done()) + <-ctx.Done() } @@ -1557,7 +1564,7 @@ func (ctrl *ApplicationController) processAppRefreshQueueItem() (processNext boo // If we're using a source hydrator, see if the dry source has changed. if app.Spec.SourceHydrator != nil { - revision, err := ctrl.appStateManager.ResolveDryRevision(app) + revision, err := ctrl.appStateManager.ResolveDryRevision(app.Spec.SourceHydrator.DrySource.RepoURL, app.Spec.SourceHydrator.DrySource.TargetRevision) if err != nil { logCtx.Errorf("Failed to check whether dry source has changed, skipping: %v", err) return @@ -1575,27 +1582,16 @@ func (ctrl *ApplicationController) processAppRefreshQueueItem() (processNext boo } ctrl.persistAppStatus(origApp, &app.Status) origApp.Status.SourceHydrator = app.Status.SourceHydrator - - err = ctrl.hydrate(app, refreshType, comparisonLevel, project, revision) - if err != nil { - app.Status.SourceHydrator.HydrateOperation.Status = appv1.HydrateOperationPhaseFailed - failedAt := metav1.Now() - app.Status.SourceHydrator.HydrateOperation.FinishedAt = &failedAt - app.Status.SourceHydrator.HydrateOperation.Message = err.Error() - ctrl.persistAppStatus(origApp, &app.Status) - logCtx.Errorf("Failed to hydrate app: %v", err) - return + destinationBranch := app.Spec.SourceHydrator.SyncSource.TargetRevision + if app.Spec.SourceHydrator.HydrateTo != nil { + destinationBranch = app.Spec.SourceHydrator.HydrateTo.TargetRevision } - finishedAt := metav1.Now() - operation := &appv1.HydrateOperation{ - StartedAt: app.Status.SourceHydrator.HydrateOperation.StartedAt, - FinishedAt: &finishedAt, - Status: appv1.HydrateOperationPhaseSucceeded, - Message: "", + key := hydrationQueueKey{ + sourceRepoURL: app.Spec.SourceHydrator.DrySource.RepoURL, + sourceTargetRevision: app.Spec.SourceHydrator.DrySource.TargetRevision, + destinationBranch: destinationBranch, } - app.Status.SourceHydrator.HydrateOperation = operation - ctrl.persistAppStatus(origApp, &app.Status) - origApp.Status.SourceHydrator = app.Status.SourceHydrator + ctrl.hydrationQueue.Add(key) } } @@ -1702,51 +1698,163 @@ func (ctrl *ApplicationController) processAppRefreshQueueItem() (processNext boo return } -func (ctrl *ApplicationController) hydrate(app *appv1.Application, refreshType appv1.RefreshType, comparisonLevel CompareWith, project *appv1.AppProject, revision string) error { - drySource := appv1.ApplicationSource{ - RepoURL: app.Spec.SourceHydrator.DrySource.RepoURL, - Path: app.Spec.SourceHydrator.DrySource.Path, - TargetRevision: app.Spec.SourceHydrator.DrySource.TargetRevision, - } - drySources := []appv1.ApplicationSource{drySource} - revisions := []string{app.Spec.SourceHydrator.DrySource.TargetRevision} +type hydrationQueueKey struct { + sourceRepoURL string + sourceTargetRevision string + destinationBranch string +} - appLabelKey, err := ctrl.settingsMgr.GetAppInstanceLabelKey() +func (ctrl *ApplicationController) processHydrationQueueItem() (processNext bool) { + key, shutdown := ctrl.hydrationQueue.Get() + if shutdown { + processNext = false + return + } + hydrationKey, ok := key.(hydrationQueueKey) + if !ok { + log.Errorf("Failed to cast key to hydrationQueueKey") + processNext = true + return + } + logCtx := log.WithFields(log.Fields{ + "sourceRepoURL": hydrationKey.sourceRepoURL, + "sourceTargetRevision": hydrationKey.sourceTargetRevision, + "destinationBranch": hydrationKey.destinationBranch, + }) + processNext = true + defer func() { + if r := recover(); r != nil { + log.Errorf("Recovered from panic: %+v\n%s", r, debug.Stack()) + } + ctrl.hydrationQueue.Done(key) + }() + // Get all apps + apps, err := ctrl.appLister.List(labels.Everything()) if err != nil { - return fmt.Errorf("failed to get app instance label key: %w", err) + log.Errorf("Failed to list apps: %v", err) + return } - // TODO: enable signature verification - objs, resp, err := ctrl.appStateManager.GetRepoObjs(app, drySources, appLabelKey, revisions, refreshType == appv1.RefreshTypeHard, comparisonLevel == CompareWithLatestForceResolve, false, project, false) + // FIXME: detect if multiple apps are attempting to write to the same path + relevantApps := map[string][]*appv1.Application{} + for _, app := range apps { + if app.Spec.SourceHydrator == nil { + continue + } + if app.Spec.SourceHydrator.DrySource.RepoURL != hydrationKey.sourceRepoURL || + app.Spec.SourceHydrator.DrySource.TargetRevision != hydrationKey.sourceTargetRevision { + continue + } + destinationBranch := app.Spec.SourceHydrator.SyncSource.TargetRevision + if app.Spec.SourceHydrator.HydrateTo != nil { + destinationBranch = app.Spec.SourceHydrator.HydrateTo.TargetRevision + } + if destinationBranch != hydrationKey.destinationBranch { + continue + } + if _, ok := relevantApps[app.Spec.SourceHydrator.SyncSource.TargetRevision]; !ok { + relevantApps[app.Spec.SourceHydrator.SyncSource.TargetRevision] = []*appv1.Application{} + } + relevantApps[app.Spec.SourceHydrator.SyncSource.TargetRevision] = append(relevantApps[app.Spec.SourceHydrator.SyncSource.TargetRevision], app) + } + + // Get the latest revision + revision, err := ctrl.appStateManager.ResolveDryRevision(hydrationKey.sourceRepoURL, hydrationKey.sourceTargetRevision) if err != nil { - return fmt.Errorf("failed to get repo objects: %w", err) + logCtx.Errorf("Failed to resolve dry revision: %v", err) + return } + for _, apps := range relevantApps { + err = ctrl.hydrate(apps, appv1.RefreshTypeNormal, CompareWithLatest, revision) + if err != nil { + for _, app := range apps { + origApp := app.DeepCopy() + app.Status.SourceHydrator.HydrateOperation.Status = appv1.HydrateOperationPhaseFailed + failedAt := metav1.Now() + app.Status.SourceHydrator.HydrateOperation.FinishedAt = &failedAt + app.Status.SourceHydrator.HydrateOperation.Message = err.Error() + ctrl.persistAppStatus(origApp, &app.Status) + logCtx.Errorf("Failed to hydrate app: %v", err) + return + } + } + finishedAt := metav1.Now() + for _, app := range apps { + origApp := app.DeepCopy() + operation := &appv1.HydrateOperation{ + StartedAt: app.Status.SourceHydrator.HydrateOperation.StartedAt, + FinishedAt: &finishedAt, + Status: appv1.HydrateOperationPhaseSucceeded, + Message: "", + } + app.Status.SourceHydrator.HydrateOperation = operation + ctrl.persistAppStatus(origApp, &app.Status) + origApp.Status.SourceHydrator = app.Status.SourceHydrator + } + } + return +} + +func (ctrl *ApplicationController) hydrate(apps []*appv1.Application, refreshType appv1.RefreshType, comparisonLevel CompareWith, revision string) error { + if len(apps) == 0 { + return nil + } + repoURL := apps[0].Spec.SourceHydrator.DrySource.RepoURL + syncBranch := apps[0].Spec.SourceHydrator.SyncSource.TargetRevision + targetBranch := apps[0].Spec.GetHydrateToSource().TargetRevision + + var paths []commit.PathDetails + for _, app := range apps { + project, err := ctrl.getAppProj(app) + if err != nil { + return fmt.Errorf("failed to get project: %w", err) + } + drySource := appv1.ApplicationSource{ + RepoURL: app.Spec.SourceHydrator.DrySource.RepoURL, + Path: app.Spec.SourceHydrator.DrySource.Path, + TargetRevision: app.Spec.SourceHydrator.DrySource.TargetRevision, + } + drySources := []appv1.ApplicationSource{drySource} + revisions := []string{app.Spec.SourceHydrator.DrySource.TargetRevision} + + appLabelKey, err := ctrl.settingsMgr.GetAppInstanceLabelKey() + if err != nil { + return fmt.Errorf("failed to get app instance label key: %w", err) + } - // Set up a ManifestsRequest - manifestDetails := make([]commit.ManifestDetails, len(objs)) - for i, obj := range objs { - manifestDetails[i] = commit.ManifestDetails{Manifest: *obj} + // TODO: enable signature verification + objs, resp, err := ctrl.appStateManager.GetRepoObjs(app, drySources, appLabelKey, revisions, refreshType == appv1.RefreshTypeHard, comparisonLevel == CompareWithLatestForceResolve, false, project, false) + if err != nil { + return fmt.Errorf("failed to get repo objects: %w", err) + } + + // Set up a ManifestsRequest + manifestDetails := make([]commit.ManifestDetails, len(objs)) + for i, obj := range objs { + manifestDetails[i] = commit.ManifestDetails{Manifest: *obj} + } + + paths = append(paths, commit.PathDetails{ + Path: app.Spec.SourceHydrator.SyncSource.Path, + Manifests: manifestDetails, + Commands: resp[0].Commands, + }) } - hydrateToSource := app.Spec.GetHydrateToSource() - paths := []commit.PathDetails{{ - Path: hydrateToSource.Path, - Manifests: manifestDetails, - }} + manifestsRequest := commit.ManifestsRequest{ - RepoURL: hydrateToSource.RepoURL, - SyncBranch: app.Spec.SourceHydrator.SyncSource.TargetRevision, - TargetBranch: hydrateToSource.TargetRevision, + RepoURL: repoURL, + SyncBranch: syncBranch, + TargetBranch: targetBranch, DrySHA: revision, CommitAuthorName: "Michael Crenshaw", CommitAuthorEmail: "350466+crenshaw-dev@users.noreply.github.com", CommitMessage: fmt.Sprintf("[Argo CD Bot] hydrate %s", revision), CommitTime: time.Now(), Paths: paths, - Commands: resp[0].Commands, } commitService := commit.NewService() - _, err = commitService.Commit(manifestsRequest) + _, err := commitService.Commit(manifestsRequest) if err != nil { return fmt.Errorf("failed to commit hydrated manifests: %w", err) } diff --git a/controller/commit/commit.go b/controller/commit/commit.go index b847564cf93f8..0d2669048fcfa 100644 --- a/controller/commit/commit.go +++ b/controller/commit/commit.go @@ -33,12 +33,12 @@ type ManifestsRequest struct { CommitMessage string CommitTime time.Time Paths []PathDetails - Commands []string } type PathDetails struct { Path string Manifests []ManifestDetails + Commands []string ReadmeDetails } @@ -172,6 +172,32 @@ func (s *service) Commit(r ManifestsRequest) (ManifestsResponse, error) { } } + // Clear the repo contents using git rm + logCtx.Debug("Clearing repo contents") + rmCmd := exec.Command("git", "rm", "-r", ".") + rmCmd.Dir = dirPath + out, err = rmCmd.CombinedOutput() + if err != nil { + log.WithError(err).WithField("output", string(out)).Error("failed to clear repo contents") + return ManifestsResponse{}, fmt.Errorf("failed to clear repo contents: %w", err) + } + + // Write hydrator.metadata containing information about the hydration process. This top-level metadata file is used + // for the promoter. An additional metadata file is placed in each hydration destination directory, if applicable. + logCtx.Debug("Writing top-level hydrator metadata") + hydratorMetadata := hydratorMetadataFile{ + DrySHA: r.DrySHA, + RepoURL: r.RepoURL, + } + hydratorMetadataJson, err := json.MarshalIndent(hydratorMetadata, "", " ") + if err != nil { + return ManifestsResponse{}, fmt.Errorf("failed to marshal hydrator metadata: %w", err) + } + err = os.WriteFile(path.Join(dirPath, "hydrator.metadata"), hydratorMetadataJson, os.ModePerm) + if err != nil { + return ManifestsResponse{}, fmt.Errorf("failed to write hydrator metadata: %w", err) + } + // Write the manifests to the temp dir for _, p := range r.Paths { hydratePath := p.Path @@ -179,7 +205,8 @@ func (s *service) Commit(r ManifestsRequest) (ManifestsResponse, error) { hydratePath = "" } logCtx.Debugf("Writing manifests to %s", hydratePath) - err = os.MkdirAll(path.Join(dirPath, hydratePath), os.ModePerm) + fullHydratePath := path.Join(dirPath, hydratePath) + err = os.MkdirAll(fullHydratePath, os.ModePerm) if err != nil { return ManifestsResponse{}, fmt.Errorf("failed to create path: %w", err) } @@ -218,43 +245,43 @@ func (s *service) Commit(r ManifestsRequest) (ManifestsResponse, error) { return ManifestsResponse{}, fmt.Errorf("failed to write manifest: %w", err) } } - } - // Write hydrator.metadata containing information about the hydration process. - logCtx.Debug("Writing hydrator metadata") - hydratorMetadata := hydratorMetadataFile{ - Commands: r.Commands, - DrySHA: r.DrySHA, - RepoURL: r.RepoURL, - } - hydratorMetadataJson, err := json.MarshalIndent(hydratorMetadata, "", " ") - if err != nil { - return ManifestsResponse{}, fmt.Errorf("failed to marshal hydrator metadata: %w", err) - } - err = os.WriteFile(path.Join(dirPath, "hydrator.metadata"), hydratorMetadataJson, os.ModePerm) - if err != nil { - return ManifestsResponse{}, fmt.Errorf("failed to write hydrator metadata: %w", err) - } + // Write hydrator.metadata containing information about the hydration process. + logCtx.Debug("Writing hydrator metadata") + hydratorMetadata := hydratorMetadataFile{ + Commands: p.Commands, + DrySHA: r.DrySHA, + RepoURL: r.RepoURL, + } + hydratorMetadataJson, err := json.MarshalIndent(hydratorMetadata, "", " ") + if err != nil { + return ManifestsResponse{}, fmt.Errorf("failed to marshal hydrator metadata: %w", err) + } + err = os.WriteFile(path.Join(fullHydratePath, "hydrator.metadata"), hydratorMetadataJson, os.ModePerm) + if err != nil { + return ManifestsResponse{}, fmt.Errorf("failed to write hydrator metadata: %w", err) + } - // Write README - logCtx.Debugf("Writing README") - readmeTemplate := template.New("readme") - readmeTemplate, err = readmeTemplate.Parse(manifestHydrationReadmeTemplate) - if err != nil { - return ManifestsResponse{}, fmt.Errorf("failed to parse readme template: %w", err) - } - // Create writer to template into - readmeFile, err := os.Create(path.Join(dirPath, "README.md")) - if err != nil && !os.IsExist(err) { - return ManifestsResponse{}, fmt.Errorf("failed to create README file: %w", err) - } - err = readmeTemplate.Execute(readmeFile, hydratorMetadata) - closeErr := readmeFile.Close() - if closeErr != nil { - logCtx.WithError(closeErr).Error("failed to close README file") - } - if err != nil { - return ManifestsResponse{}, fmt.Errorf("failed to execute readme template: %w", err) + // Write README + logCtx.Debugf("Writing README") + readmeTemplate := template.New("readme") + readmeTemplate, err = readmeTemplate.Parse(manifestHydrationReadmeTemplate) + if err != nil { + return ManifestsResponse{}, fmt.Errorf("failed to parse readme template: %w", err) + } + // Create writer to template into + readmeFile, err := os.Create(path.Join(fullHydratePath, "README.md")) + if err != nil && !os.IsExist(err) { + return ManifestsResponse{}, fmt.Errorf("failed to create README file: %w", err) + } + err = readmeTemplate.Execute(readmeFile, hydratorMetadata) + closeErr := readmeFile.Close() + if closeErr != nil { + logCtx.WithError(closeErr).Error("failed to close README file") + } + if err != nil { + return ManifestsResponse{}, fmt.Errorf("failed to execute readme template: %w", err) + } } // Commit the changes diff --git a/controller/state.go b/controller/state.go index bc7c9ef1f85c3..22eabc3973068 100644 --- a/controller/state.go +++ b/controller/state.go @@ -73,7 +73,7 @@ type AppStateManager interface { CompareAppState(app *v1alpha1.Application, project *v1alpha1.AppProject, revisions []string, sources []v1alpha1.ApplicationSource, noCache bool, noRevisionCache bool, localObjects []string, hasMultipleSources bool) (*comparisonResult, error) SyncAppState(app *v1alpha1.Application, state *v1alpha1.OperationState) GetRepoObjs(app *v1alpha1.Application, sources []v1alpha1.ApplicationSource, appLabelKey string, revisions []string, noCache, noRevisionCache, verifySignature bool, proj *v1alpha1.AppProject, sendAppName bool) ([]*unstructured.Unstructured, []*apiclient.ManifestResponse, error) - ResolveDryRevision(app *v1alpha1.Application) (string, error) + ResolveDryRevision(repoURL string, revision string) (string, error) } // comparisonResult holds the state of an application after the reconciliation @@ -285,22 +285,31 @@ func (m *appStateManager) GetRepoObjs(app *v1alpha1.Application, sources []v1alp return targetObjs, manifestInfos, nil } -func (m *appStateManager) ResolveDryRevision(app *v1alpha1.Application) (string, error) { +func (m *appStateManager) ResolveDryRevision(repoURL string, revision string) (string, error) { conn, repoClient, err := m.repoClientset.NewRepoServerClient() if err != nil { return "", fmt.Errorf("failed to connect to repo server: %w", err) } defer io.Close(conn) - repo, err := m.db.GetRepository(context.Background(), app.Spec.SourceHydrator.DrySource.RepoURL) + repo, err := m.db.GetRepository(context.Background(), repoURL) if err != nil { - return "", fmt.Errorf("failed to get repo %q: %w", app.Spec.SourceHydrator.DrySource.RepoURL, err) + return "", fmt.Errorf("failed to get repo %q: %w", repoURL, err) } + // Mock the app. The repo-server only needs to know whether the "chart" field is populated. + app := &v1alpha1.Application{ + Spec: v1alpha1.ApplicationSpec{ + Source: &v1alpha1.ApplicationSource{ + RepoURL: repoURL, + TargetRevision: revision, + }, + }, + } resp, err := repoClient.ResolveRevision(context.Background(), &apiclient.ResolveRevisionRequest{ Repo: repo, App: app, - AmbiguousRevision: app.Spec.SourceHydrator.DrySource.TargetRevision, + AmbiguousRevision: revision, }) if err != nil { return "", fmt.Errorf("failed to determine whether the dry source has changed: %w", err) From 901aebcc643bdb3f6c606f65d3c2a2660cd5fbf9 Mon Sep 17 00:00:00 2001 From: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> Date: Wed, 8 May 2024 11:52:25 -0400 Subject: [PATCH 11/15] use securejoin, use log contexts, clean up temp dirs Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> --- controller/commit/commit.go | 72 ++++++++++++++++++++++++------------- 1 file changed, 47 insertions(+), 25 deletions(-) diff --git a/controller/commit/commit.go b/controller/commit/commit.go index 0d2669048fcfa..2dbfecf232e86 100644 --- a/controller/commit/commit.go +++ b/controller/commit/commit.go @@ -3,6 +3,7 @@ package commit import ( "encoding/json" "fmt" + securejoin "github.com/cyphar/filepath-securejoin" "github.com/google/uuid" log "github.com/sirupsen/logrus" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" @@ -65,11 +66,21 @@ func (s *service) Commit(r ManifestsRequest) (ManifestsResponse, error) { logCtx.Debug("Creating temp dir") dirName, err := uuid.NewRandom() + if err != nil { + return ManifestsResponse{}, fmt.Errorf("failed to generate a uuid to create temp dir: %w", err) + } + // Don't need SecureJoin here, both parts are safe. dirPath := path.Join("/tmp/_commit-service", dirName.String()) err = os.MkdirAll(dirPath, os.ModePerm) if err != nil { return ManifestsResponse{}, fmt.Errorf("failed to create temp dir: %w", err) } + defer func() { + err := os.RemoveAll(dirPath) + if err != nil { + logCtx.WithError(err).Errorf("failed to remove temp dir %s", dirPath) + } + }() // Clone the repo into the temp dir using the git CLI logCtx.Debugf("Cloning repo %s", r.RepoURL) @@ -84,7 +95,7 @@ func (s *service) Commit(r ManifestsRequest) (ManifestsResponse, error) { authorCmd.Dir = dirPath out, err := authorCmd.CombinedOutput() if err != nil { - log.WithError(err).WithField("output", string(out)).Error("failed to set author name") + logCtx.WithError(err).WithField("output", string(out)).Error("failed to set author name") return ManifestsResponse{}, fmt.Errorf("failed to set author name: %w", err) } @@ -94,7 +105,7 @@ func (s *service) Commit(r ManifestsRequest) (ManifestsResponse, error) { emailCmd.Dir = dirPath out, err = emailCmd.CombinedOutput() if err != nil { - log.WithError(err).WithField("output", string(out)).Error("failed to set author email") + logCtx.WithError(err).WithField("output", string(out)).Error("failed to set author email") return ManifestsResponse{}, fmt.Errorf("failed to set author email: %w", err) } @@ -111,11 +122,11 @@ func (s *service) Commit(r ManifestsRequest) (ManifestsResponse, error) { checkoutCmd.Dir = dirPath out, err = checkoutCmd.CombinedOutput() if err != nil { - log.WithError(err).WithField("output", string(out)).Error("failed to create orphan branch") + logCtx.WithError(err).WithField("output", string(out)).Error("failed to create orphan branch") return ManifestsResponse{}, fmt.Errorf("failed to create orphan branch: %w", err) } } else { - log.WithError(err).WithField("output", string(out)).Error("failed to checkout sync branch") + logCtx.WithError(err).WithField("output", string(out)).Error("failed to checkout sync branch") return ManifestsResponse{}, fmt.Errorf("failed to checkout sync branch: %w", err) } @@ -125,7 +136,7 @@ func (s *service) Commit(r ManifestsRequest) (ManifestsResponse, error) { commitCmd.Dir = dirPath out, err = commitCmd.CombinedOutput() if err != nil { - log.WithError(err).WithField("output", string(out)).Error("failed to commit initial commit") + logCtx.WithError(err).WithField("output", string(out)).Error("failed to commit initial commit") return ManifestsResponse{}, fmt.Errorf("failed to commit initial commit: %w", err) } @@ -135,7 +146,7 @@ func (s *service) Commit(r ManifestsRequest) (ManifestsResponse, error) { pushCmd.Dir = dirPath out, err = pushCmd.CombinedOutput() if err != nil { - log.WithError(err).WithField("output", string(out)).Error("failed to push sync branch") + logCtx.WithError(err).WithField("output", string(out)).Error("failed to push sync branch") return ManifestsResponse{}, fmt.Errorf("failed to push sync branch: %w", err) } } @@ -154,7 +165,7 @@ func (s *service) Commit(r ManifestsRequest) (ManifestsResponse, error) { checkoutCmd.Dir = dirPath out, err = checkoutCmd.CombinedOutput() if err != nil { - log.WithError(err).WithField("output", string(out)).Error("failed to checkout sync branch") + logCtx.WithError(err).WithField("output", string(out)).Error("failed to checkout sync branch") return ManifestsResponse{}, fmt.Errorf("failed to checkout sync branch: %w", err) } @@ -163,11 +174,11 @@ func (s *service) Commit(r ManifestsRequest) (ManifestsResponse, error) { checkoutCmd.Dir = dirPath out, err = checkoutCmd.CombinedOutput() if err != nil { - log.WithError(err).WithField("output", string(out)).Error("failed to create branch") + logCtx.WithError(err).WithField("output", string(out)).Error("failed to create branch") return ManifestsResponse{}, fmt.Errorf("failed to create branch: %w", err) } } else { - log.WithError(err).WithField("output", string(out)).Error("failed to checkout branch") + logCtx.WithError(err).WithField("output", string(out)).Error("failed to checkout branch") return ManifestsResponse{}, fmt.Errorf("failed to checkout branch: %w", err) } } @@ -178,7 +189,7 @@ func (s *service) Commit(r ManifestsRequest) (ManifestsResponse, error) { rmCmd.Dir = dirPath out, err = rmCmd.CombinedOutput() if err != nil { - log.WithError(err).WithField("output", string(out)).Error("failed to clear repo contents") + logCtx.WithError(err).WithField("output", string(out)).Error("failed to clear repo contents") return ManifestsResponse{}, fmt.Errorf("failed to clear repo contents: %w", err) } @@ -193,7 +204,9 @@ func (s *service) Commit(r ManifestsRequest) (ManifestsResponse, error) { if err != nil { return ManifestsResponse{}, fmt.Errorf("failed to marshal hydrator metadata: %w", err) } - err = os.WriteFile(path.Join(dirPath, "hydrator.metadata"), hydratorMetadataJson, os.ModePerm) + // No need to use SecureJoin here, as the path is already sanitized. + hydratorMetadataPath := path.Join(dirPath, "hydrator.metadata") + err = os.WriteFile(hydratorMetadataPath, hydratorMetadataJson, os.ModePerm) if err != nil { return ManifestsResponse{}, fmt.Errorf("failed to write hydrator metadata: %w", err) } @@ -205,33 +218,38 @@ func (s *service) Commit(r ManifestsRequest) (ManifestsResponse, error) { hydratePath = "" } logCtx.Debugf("Writing manifests to %s", hydratePath) - fullHydratePath := path.Join(dirPath, hydratePath) + fullHydratePath, err := securejoin.SecureJoin(dirPath, hydratePath) + if err != nil { + return ManifestsResponse{}, fmt.Errorf("failed to construct hydrate path: %w", err) + } err = os.MkdirAll(fullHydratePath, os.ModePerm) if err != nil { return ManifestsResponse{}, fmt.Errorf("failed to create path: %w", err) } // If the file exists, truncate it. - logCtx.Debugf("Emptying manifest file %s", path.Join(dirPath, hydratePath, "manifest.yaml")) - if _, err := os.Stat(path.Join(dirPath, hydratePath, "manifest.yaml")); err == nil { - err = os.Truncate(path.Join(dirPath, hydratePath, "manifest.yaml"), 0) + // No need to use SecureJoin here, as the path is already sanitized. + manifestPath := path.Join(fullHydratePath, "manifest.yaml") + logCtx.Debugf("Emptying manifest file %s", manifestPath) + if _, err := os.Stat(manifestPath); err == nil { + err = os.Truncate(manifestPath, 0) if err != nil { return ManifestsResponse{}, fmt.Errorf("failed to empty manifest file: %w", err) } } - logCtx.Debugf("Opening manifest file %s", path.Join(dirPath, hydratePath, "manifest.yaml")) - file, err := os.OpenFile(path.Join(dirPath, hydratePath, "manifest.yaml"), os.O_APPEND|os.O_CREATE|os.O_WRONLY, os.ModePerm) + logCtx.Debugf("Opening manifest file %s", manifestPath) + file, err := os.OpenFile(manifestPath, os.O_APPEND|os.O_CREATE|os.O_WRONLY, os.ModePerm) if err != nil { return ManifestsResponse{}, fmt.Errorf("failed to open manifest file: %w", err) } defer func() { err := file.Close() if err != nil { - log.WithError(err).Error("failed to close file") + logCtx.WithError(err).Error("failed to close file") } }() - logCtx.Debugf("Writing manifests to %s", path.Join(dirPath, hydratePath, "manifest.yaml")) + logCtx.Debugf("Writing manifests to %s", manifestPath) for _, m := range p.Manifests { // Marshal the manifests mYaml, err := yaml.Marshal(m.Manifest.Object) @@ -257,7 +275,9 @@ func (s *service) Commit(r ManifestsRequest) (ManifestsResponse, error) { if err != nil { return ManifestsResponse{}, fmt.Errorf("failed to marshal hydrator metadata: %w", err) } - err = os.WriteFile(path.Join(fullHydratePath, "hydrator.metadata"), hydratorMetadataJson, os.ModePerm) + // No need to use SecureJoin here, as the path is already sanitized. + hydratorMetadataPath := path.Join(fullHydratePath, "hydrator.metadata") + err = os.WriteFile(hydratorMetadataPath, hydratorMetadataJson, os.ModePerm) if err != nil { return ManifestsResponse{}, fmt.Errorf("failed to write hydrator metadata: %w", err) } @@ -270,7 +290,9 @@ func (s *service) Commit(r ManifestsRequest) (ManifestsResponse, error) { return ManifestsResponse{}, fmt.Errorf("failed to parse readme template: %w", err) } // Create writer to template into - readmeFile, err := os.Create(path.Join(fullHydratePath, "README.md")) + // No need to use SecureJoin here, as the path is already sanitized. + readmePath := path.Join(fullHydratePath, "README.md") + readmeFile, err := os.Create(readmePath) if err != nil && !os.IsExist(err) { return ManifestsResponse{}, fmt.Errorf("failed to create README file: %w", err) } @@ -290,7 +312,7 @@ func (s *service) Commit(r ManifestsRequest) (ManifestsResponse, error) { addCmd.Dir = dirPath out, err = addCmd.CombinedOutput() if err != nil { - log.WithError(err).WithField("output", string(out)).Error("failed to add files") + logCtx.WithError(err).WithField("output", string(out)).Error("failed to add files") return ManifestsResponse{}, fmt.Errorf("failed to add files: %w", err) } @@ -302,7 +324,7 @@ func (s *service) Commit(r ManifestsRequest) (ManifestsResponse, error) { logCtx.Info("no changes to commit") return ManifestsResponse{}, nil } - log.WithError(err).WithField("output", string(out)).Error("failed to commit files") + logCtx.WithError(err).WithField("output", string(out)).Error("failed to commit files") return ManifestsResponse{}, fmt.Errorf("failed to commit: %w", err) } @@ -311,10 +333,10 @@ func (s *service) Commit(r ManifestsRequest) (ManifestsResponse, error) { pushCmd.Dir = dirPath out, err = pushCmd.CombinedOutput() if err != nil { - log.WithError(err).WithField("output", string(out)).Error("failed to push manifests") + logCtx.WithError(err).WithField("output", string(out)).Error("failed to push manifests") return ManifestsResponse{}, fmt.Errorf("failed to push: %w", err) } - log.WithField("output", string(out)).Debug("pushed manifests to git") + logCtx.WithField("output", string(out)).Debug("pushed manifests to git") return ManifestsResponse{}, nil } From d8705ef7d30ee3552d9272b44789e1cb83d43759 Mon Sep 17 00:00:00 2001 From: Alexandre Gaudreault Date: Tue, 21 May 2024 15:51:17 -0700 Subject: [PATCH 12/15] use app auth for github only Signed-off-by: Alexandre Gaudreault --- common/common.go | 2 + controller/appcontroller.go | 25 +++--- controller/commit/commit.go | 154 ++++++++++++++++++++++++++++-------- util/db/db.go | 3 + util/db/hydrator.go | 41 ++++++++++ 5 files changed, 178 insertions(+), 47 deletions(-) create mode 100644 util/db/hydrator.go diff --git a/common/common.go b/common/common.go index b825ccddef91f..de6b6cbdb6b05 100644 --- a/common/common.go +++ b/common/common.go @@ -163,6 +163,8 @@ const ( LabelValueSecretTypeRepository = "repository" // LabelValueSecretTypeRepoCreds indicates a secret type of repository credentials LabelValueSecretTypeRepoCreds = "repo-creds" + // LabelValueSecretTypeRepoCreds indicates a secret type of repository credentials + LabelValueSecretTypeHydrator = "hydrator" // AnnotationKeyAppInstance is the Argo CD application name is used as the instance name AnnotationKeyAppInstance = "argocd.argoproj.io/tracking-id" diff --git a/controller/appcontroller.go b/controller/appcontroller.go index 7bfed8f66fad4..e2b76ce0d439e 100644 --- a/controller/appcontroller.go +++ b/controller/appcontroller.go @@ -5,7 +5,6 @@ import ( "encoding/json" goerrors "errors" "fmt" - "github.com/argoproj/argo-cd/v2/controller/commit" "math" "math/rand" "net/http" @@ -17,6 +16,8 @@ import ( "sync" "time" + "github.com/argoproj/argo-cd/v2/controller/commit" + clustercache "github.com/argoproj/gitops-engine/pkg/cache" "github.com/argoproj/gitops-engine/pkg/diff" "github.com/argoproj/gitops-engine/pkg/health" @@ -1842,18 +1843,16 @@ func (ctrl *ApplicationController) hydrate(apps []*appv1.Application, refreshTyp } manifestsRequest := commit.ManifestsRequest{ - RepoURL: repoURL, - SyncBranch: syncBranch, - TargetBranch: targetBranch, - DrySHA: revision, - CommitAuthorName: "Michael Crenshaw", - CommitAuthorEmail: "350466+crenshaw-dev@users.noreply.github.com", - CommitMessage: fmt.Sprintf("[Argo CD Bot] hydrate %s", revision), - CommitTime: time.Now(), - Paths: paths, - } - - commitService := commit.NewService() + RepoURL: repoURL, + SyncBranch: syncBranch, + TargetBranch: targetBranch, + DrySHA: revision, + CommitMessage: fmt.Sprintf("[Argo CD Bot] hydrate %s", revision), + CommitTime: time.Now(), + Paths: paths, + } + + commitService := commit.NewService(ctrl.db) _, err := commitService.Commit(manifestsRequest) if err != nil { return fmt.Errorf("failed to commit hydrated manifests: %w", err) diff --git a/controller/commit/commit.go b/controller/commit/commit.go index 2dbfecf232e86..222adfe82711a 100644 --- a/controller/commit/commit.go +++ b/controller/commit/commit.go @@ -1,19 +1,27 @@ package commit import ( + "context" "encoding/json" "fmt" - securejoin "github.com/cyphar/filepath-securejoin" - "github.com/google/uuid" - log "github.com/sirupsen/logrus" - "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + "net/http" "os" "os/exec" "path" - "sigs.k8s.io/yaml" "strings" "text/template" "time" + + "github.com/argoproj/argo-cd/v2/applicationset/services/github_app_auth" + "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1" + "github.com/argoproj/argo-cd/v2/util/db" + "github.com/bradleyfalzon/ghinstallation/v2" + securejoin "github.com/cyphar/filepath-securejoin" + "github.com/google/go-github/v35/github" + "github.com/google/uuid" + log "github.com/sirupsen/logrus" + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + "sigs.k8s.io/yaml" ) /** @@ -25,15 +33,13 @@ type Service interface { } type ManifestsRequest struct { - RepoURL string - SyncBranch string - TargetBranch string - DrySHA string - CommitAuthorName string - CommitAuthorEmail string - CommitMessage string - CommitTime time.Time - Paths []PathDetails + RepoURL string + SyncBranch string + TargetBranch string + DrySHA string + CommitMessage string + CommitTime time.Time + Paths []PathDetails } type PathDetails struct { @@ -54,16 +60,75 @@ type ManifestsResponse struct { RequestId string } -func NewService() Service { - return &service{} +func NewService(db db.ArgoDB) Service { + return &service{db: db} } type service struct { + db db.ArgoDB +} + +func isGitHubApp(cred *v1alpha1.Repository) bool { + return cred.GithubAppPrivateKey != "" && cred.GithubAppId != 0 && cred.GithubAppInstallationId != 0 +} + +// Client builds a github client for the given app authentication. +func getAppInstallation(g github_app_auth.Authentication) (*ghinstallation.Transport, error) { + rt, err := ghinstallation.New(http.DefaultTransport, g.Id, g.InstallationId, []byte(g.PrivateKey)) + if err != nil { + return nil, fmt.Errorf("failed to create github app install: %w", err) + } + return rt, nil +} + +func getGitHubClient(appInstallation *ghinstallation.Transport) (*github.Client, error) { + var client *github.Client + var err error + httpClient := http.Client{Transport: appInstallation} + client = github.NewClient(&httpClient) + return client, err + } func (s *service) Commit(r ManifestsRequest) (ManifestsResponse, error) { + var authorName, authorEmail, basicAuth string + + ctx := context.TODO() logCtx := log.WithFields(log.Fields{"repo": r.RepoURL, "branch": r.TargetBranch, "drySHA": r.DrySHA}) + repo, err := s.db.GetHydratorCredentials(ctx, r.RepoURL) + if err != nil { + return ManifestsResponse{}, fmt.Errorf("failed to get git credentials: %w", err) + } + if isGitHubApp(repo) { + info := github_app_auth.Authentication{ + Id: repo.GithubAppId, + InstallationId: repo.GithubAppInstallationId, + PrivateKey: repo.GithubAppPrivateKey, + } + appInstall, err := getAppInstallation(info) + if err != nil { + return ManifestsResponse{}, err + } + token, err := appInstall.Token(ctx) + if err != nil { + return ManifestsResponse{}, fmt.Errorf("failed to get access token: %w", err) + } + client, err := getGitHubClient(appInstall) + if err != nil { + return ManifestsResponse{}, fmt.Errorf("cannot create github client: %w", err) + } + user, _, err := client.Users.Get(ctx, "") + if err != nil { + return ManifestsResponse{}, fmt.Errorf("cannot get app user info: %w", err) + } + authorName = user.GetName() + authorEmail = user.GetEmail() + basicAuth = fmt.Sprintf("x-access-token:%s", token) + } else { + logCtx.Warn("No github app credentials were found") + } + logCtx.Debug("Creating temp dir") dirName, err := uuid.NewRandom() if err != nil { @@ -84,36 +149,57 @@ func (s *service) Commit(r ManifestsRequest) (ManifestsResponse, error) { // Clone the repo into the temp dir using the git CLI logCtx.Debugf("Cloning repo %s", r.RepoURL) - err = exec.Command("git", "clone", r.RepoURL, dirPath).Run() + authRepoUrl := r.RepoURL + if basicAuth != "" && strings.HasPrefix(authRepoUrl, "https://github.com/") { + authRepoUrl = fmt.Sprintf("https://%s@github.com/%s", basicAuth, strings.TrimPrefix(authRepoUrl, "")) + } + err = exec.Command("git", "clone", authRepoUrl, dirPath).Run() if err != nil { return ManifestsResponse{}, fmt.Errorf("failed to clone repo: %w", err) } - // Set author name - logCtx.Debugf("Setting author name %s", r.CommitAuthorName) - authorCmd := exec.Command("git", "config", "user.name", r.CommitAuthorName) - authorCmd.Dir = dirPath - out, err := authorCmd.CombinedOutput() - if err != nil { - logCtx.WithError(err).WithField("output", string(out)).Error("failed to set author name") - return ManifestsResponse{}, fmt.Errorf("failed to set author name: %w", err) + if basicAuth != "" { + // This is the dumbest kind of auth and should never make it in main branch + // git config url."https://${TOKEN}@github.com/".insteadOf "https://github.com/" + logCtx.Debugf("Setting auth") + authCmd := exec.Command("git", "config", fmt.Sprintf("url.\"https://%s@github.com/\".insteadOf", basicAuth), "https://github.com/") + authCmd.Dir = dirPath + out, err := authCmd.CombinedOutput() + if err != nil { + logCtx.WithError(err).WithField("output", string(out)).Error("failed to set auth") + return ManifestsResponse{}, fmt.Errorf("failed to set auth: %w", err) + } } - // Set author email - logCtx.Debugf("Setting author email %s", r.CommitAuthorEmail) - emailCmd := exec.Command("git", "config", "user.email", r.CommitAuthorEmail) - emailCmd.Dir = dirPath - out, err = emailCmd.CombinedOutput() - if err != nil { - logCtx.WithError(err).WithField("output", string(out)).Error("failed to set author email") - return ManifestsResponse{}, fmt.Errorf("failed to set author email: %w", err) + if authorName != "" { + // Set author name + logCtx.Debugf("Setting author name %s", authorName) + authorCmd := exec.Command("git", "config", "user.name", authorName) + authorCmd.Dir = dirPath + out, err := authorCmd.CombinedOutput() + if err != nil { + logCtx.WithError(err).WithField("output", string(out)).Error("failed to set author name") + return ManifestsResponse{}, fmt.Errorf("failed to set author name: %w", err) + } + } + + if authorEmail != "" { + // Set author email + logCtx.Debugf("Setting author email %s", authorEmail) + emailCmd := exec.Command("git", "config", "user.email", authorEmail) + emailCmd.Dir = dirPath + out, err := emailCmd.CombinedOutput() + if err != nil { + logCtx.WithError(err).WithField("output", string(out)).Error("failed to set author email") + return ManifestsResponse{}, fmt.Errorf("failed to set author email: %w", err) + } } // Checkout the sync branch logCtx.Debugf("Checking out sync branch %s", r.SyncBranch) checkoutCmd := exec.Command("git", "checkout", r.SyncBranch) checkoutCmd.Dir = dirPath - out, err = checkoutCmd.CombinedOutput() + out, err := checkoutCmd.CombinedOutput() if err != nil { // If the sync branch doesn't exist, create it as an orphan branch. if strings.Contains(string(out), "did not match any file(s) known to git") { diff --git a/util/db/db.go b/util/db/db.go index edae9f76a958d..962843828d227 100644 --- a/util/db/db.go +++ b/util/db/db.go @@ -80,6 +80,9 @@ type ArgoDB interface { // GetAllHelmRepositoryCredentials gets all repo credentials GetAllHelmRepositoryCredentials(ctx context.Context) ([]*appv1.RepoCreds, error) + // GetHydratorCredentials gets repo credentials specific to the hydrator for given URL + GetHydratorCredentials(ctx context.Context, repoURL string) (*appv1.Repository, error) + // ListHelmRepositories lists repositories ListHelmRepositories(ctx context.Context) ([]*appv1.Repository, error) diff --git a/util/db/hydrator.go b/util/db/hydrator.go new file mode 100644 index 0000000000000..b2d4630d06d7d --- /dev/null +++ b/util/db/hydrator.go @@ -0,0 +1,41 @@ +package db + +import ( + "context" + + "github.com/argoproj/argo-cd/v2/common" + appsv1 "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + corev1 "k8s.io/api/core/v1" +) + +func (db *db) GetHydratorCredentials(ctx context.Context, repoURL string) (*appsv1.Repository, error) { + secret, err := db.getRepoCredsSecret(repoURL) + if err != nil { + if status.Code(err) == codes.NotFound { + return nil, nil + } + + return nil, err + } + + return secretToRepository(secret) +} + +func (db *db) getRepoCredsSecret(repoURL string) (*corev1.Secret, error) { + // Should reuse stuff from repo secrets backend... + secretBackend := (&secretsRepositoryBackend{db: db}) + + secrets, err := db.listSecretsByType(common.LabelValueSecretTypeHydrator) + if err != nil { + return nil, err + } + + index := secretBackend.getRepositoryCredentialIndex(secrets, repoURL) + if index < 0 { + return nil, status.Errorf(codes.NotFound, "repository credentials %q not found", repoURL) + } + + return secrets[index], nil +} From 45b21914cb4b13c764c8a4f54e30ae31cf4625ab Mon Sep 17 00:00:00 2001 From: Alexandre Gaudreault Date: Wed, 22 May 2024 10:51:44 -0700 Subject: [PATCH 13/15] it works Signed-off-by: Alexandre Gaudreault --- controller/appcontroller.go | 18 ++++++++++-------- controller/commit/commit.go | 34 ++++++++++++++++++++++++++-------- 2 files changed, 36 insertions(+), 16 deletions(-) diff --git a/controller/appcontroller.go b/controller/appcontroller.go index e2b76ce0d439e..822344ecab3b7 100644 --- a/controller/appcontroller.go +++ b/controller/appcontroller.go @@ -1574,15 +1574,17 @@ func (ctrl *ApplicationController) processAppRefreshQueueItem() (processNext boo logCtx.Errorf("Dry source has not been resolved, skipping") return } - if app.Status.SourceHydrator.Revision != revision { - app.Status.SourceHydrator.Revision = revision - app.Status.SourceHydrator.HydrateOperation = &appv1.HydrateOperation{ - StartedAt: metav1.Now(), - FinishedAt: nil, - Status: appv1.HydrateOperationPhaseRunning, + if app.Status.SourceHydrator.Revision != revision || (app.Status.SourceHydrator.HydrateOperation != nil && app.Status.SourceHydrator.HydrateOperation.Status == appv1.HydrateOperationPhaseRunning) { + if app.Status.SourceHydrator.HydrateOperation == nil || app.Status.SourceHydrator.HydrateOperation.Status != appv1.HydrateOperationPhaseRunning { + app.Status.SourceHydrator.Revision = revision + app.Status.SourceHydrator.HydrateOperation = &appv1.HydrateOperation{ + StartedAt: metav1.Now(), + FinishedAt: nil, + Status: appv1.HydrateOperationPhaseRunning, + } + ctrl.persistAppStatus(origApp, &app.Status) + origApp.Status.SourceHydrator = app.Status.SourceHydrator } - ctrl.persistAppStatus(origApp, &app.Status) - origApp.Status.SourceHydrator = app.Status.SourceHydrator destinationBranch := app.Spec.SourceHydrator.SyncSource.TargetRevision if app.Spec.SourceHydrator.HydrateTo != nil { destinationBranch = app.Spec.SourceHydrator.HydrateTo.TargetRevision diff --git a/controller/commit/commit.go b/controller/commit/commit.go index 222adfe82711a..a38c6799f9e93 100644 --- a/controller/commit/commit.go +++ b/controller/commit/commit.go @@ -81,10 +81,23 @@ func getAppInstallation(g github_app_auth.Authentication) (*ghinstallation.Trans return rt, nil } -func getGitHubClient(appInstallation *ghinstallation.Transport) (*github.Client, error) { +func getGitHubInstallationClient(rt *ghinstallation.Transport) *github.Client { + httpClient := http.Client{Transport: rt} + client := github.NewClient(&httpClient) + return client +} + +func getGitHubAppClient(g github_app_auth.Authentication) (*github.Client, error) { var client *github.Client var err error - httpClient := http.Client{Transport: appInstallation} + + // This creates the app authenticated with the bearer JWT, not the installation token. + rt, err := ghinstallation.NewAppsTransport(http.DefaultTransport, g.Id, []byte(g.PrivateKey)) + if err != nil { + return nil, fmt.Errorf("failed to create github app: %w", err) + } + + httpClient := http.Client{Transport: rt} client = github.NewClient(&httpClient) return client, err @@ -114,16 +127,21 @@ func (s *service) Commit(r ManifestsRequest) (ManifestsResponse, error) { if err != nil { return ManifestsResponse{}, fmt.Errorf("failed to get access token: %w", err) } - client, err := getGitHubClient(appInstall) + client, err := getGitHubAppClient(info) if err != nil { return ManifestsResponse{}, fmt.Errorf("cannot create github client: %w", err) } - user, _, err := client.Users.Get(ctx, "") + app, _, err := client.Apps.Get(ctx, "") + if err != nil { + return ManifestsResponse{}, fmt.Errorf("cannot get app info: %w", err) + } + appLogin := fmt.Sprintf("%s[bot]", app.GetSlug()) + user, _, err := getGitHubInstallationClient(appInstall).Users.Get(ctx, appLogin) if err != nil { return ManifestsResponse{}, fmt.Errorf("cannot get app user info: %w", err) } - authorName = user.GetName() - authorEmail = user.GetEmail() + authorName = user.GetLogin() + authorEmail = fmt.Sprintf("%d+%s@users.noreply.github.com", user.GetID(), user.GetLogin()) basicAuth = fmt.Sprintf("x-access-token:%s", token) } else { logCtx.Warn("No github app credentials were found") @@ -151,7 +169,7 @@ func (s *service) Commit(r ManifestsRequest) (ManifestsResponse, error) { logCtx.Debugf("Cloning repo %s", r.RepoURL) authRepoUrl := r.RepoURL if basicAuth != "" && strings.HasPrefix(authRepoUrl, "https://github.com/") { - authRepoUrl = fmt.Sprintf("https://%s@github.com/%s", basicAuth, strings.TrimPrefix(authRepoUrl, "")) + authRepoUrl = fmt.Sprintf("https://%s@github.com/%s", basicAuth, strings.TrimPrefix(authRepoUrl, "https://github.com/")) } err = exec.Command("git", "clone", authRepoUrl, dirPath).Run() if err != nil { @@ -271,7 +289,7 @@ func (s *service) Commit(r ManifestsRequest) (ManifestsResponse, error) { // Clear the repo contents using git rm logCtx.Debug("Clearing repo contents") - rmCmd := exec.Command("git", "rm", "-r", ".") + rmCmd := exec.Command("git", "clean", "-fdx") rmCmd.Dir = dirPath out, err = rmCmd.CombinedOutput() if err != nil { From 7a7b394a93588d46e6b9d55d8a5923dc7db1fb15 Mon Sep 17 00:00:00 2001 From: Alexandre Gaudreault Date: Wed, 22 May 2024 13:05:55 -0700 Subject: [PATCH 14/15] retry failed operations Signed-off-by: Alexandre Gaudreault --- controller/appcontroller.go | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/controller/appcontroller.go b/controller/appcontroller.go index eacc3537cf6b1..4daab55a5bf94 100644 --- a/controller/appcontroller.go +++ b/controller/appcontroller.go @@ -18,8 +18,6 @@ import ( "github.com/argoproj/argo-cd/v2/controller/commit" - "github.com/argoproj/argo-cd/v2/controller/commit" - clustercache "github.com/argoproj/gitops-engine/pkg/cache" "github.com/argoproj/gitops-engine/pkg/diff" "github.com/argoproj/gitops-engine/pkg/health" @@ -1589,9 +1587,21 @@ func (ctrl *ApplicationController) processAppRefreshQueueItem() (processNext boo logCtx.Errorf("Dry source has not been resolved, skipping") return } - if app.Status.SourceHydrator.Revision != revision || (app.Status.SourceHydrator.HydrateOperation != nil && app.Status.SourceHydrator.HydrateOperation.Status == appv1.HydrateOperationPhaseRunning) { - if app.Status.SourceHydrator.HydrateOperation == nil || app.Status.SourceHydrator.HydrateOperation.Status != appv1.HydrateOperationPhaseRunning { - app.Status.SourceHydrator.Revision = revision + if app.Status.SourceHydrator.Revision != revision || (app.Status.SourceHydrator.HydrateOperation != nil && app.Status.SourceHydrator.HydrateOperation.Status != appv1.HydrateOperationPhaseSucceeded) { + restart := false + if app.Status.SourceHydrator.Revision != revision { + restart = true + } + + if app.Status.SourceHydrator.HydrateOperation.Status == appv1.HydrateOperationPhaseFailed { + retryWaitPeriod := 2 * 60 * time.Second + if metav1.Now().Sub(app.Status.SourceHydrator.HydrateOperation.FinishedAt.Time) > retryWaitPeriod { + logCtx.Info("Retrying failed hydration") + restart = true + } + } + + if restart { app.Status.SourceHydrator.HydrateOperation = &appv1.HydrateOperation{ StartedAt: metav1.Now(), FinishedAt: nil, @@ -1600,6 +1610,7 @@ func (ctrl *ApplicationController) processAppRefreshQueueItem() (processNext boo ctrl.persistAppStatus(origApp, &app.Status) origApp.Status.SourceHydrator = app.Status.SourceHydrator } + destinationBranch := app.Spec.SourceHydrator.SyncSource.TargetRevision if app.Spec.SourceHydrator.HydrateTo != nil { destinationBranch = app.Spec.SourceHydrator.HydrateTo.TargetRevision @@ -1611,8 +1622,7 @@ func (ctrl *ApplicationController) processAppRefreshQueueItem() (processNext boo } ctrl.hydrationQueue.Add(key) } else { - //TODO: swtich to debug - logCtx.Info("No reason to re-hydrate") + logCtx.Debug("No reason to re-hydrate") } } @@ -1793,7 +1803,7 @@ func (ctrl *ApplicationController) processHydrationQueueItem() (processNext bool app.Status.SourceHydrator.HydrateOperation.Status = appv1.HydrateOperationPhaseFailed failedAt := metav1.Now() app.Status.SourceHydrator.HydrateOperation.FinishedAt = &failedAt - app.Status.SourceHydrator.HydrateOperation.Message = err.Error() + app.Status.SourceHydrator.HydrateOperation.Message = fmt.Sprintf("Failed to hydrated revision %s: %v", revision, err.Error()) ctrl.persistAppStatus(origApp, &app.Status) logCtx.Errorf("Failed to hydrate app: %v", err) return @@ -1808,6 +1818,7 @@ func (ctrl *ApplicationController) processHydrationQueueItem() (processNext bool Status: appv1.HydrateOperationPhaseSucceeded, Message: "", } + app.Status.SourceHydrator.Revision = revision app.Status.SourceHydrator.HydrateOperation = operation ctrl.persistAppStatus(origApp, &app.Status) origApp.Status.SourceHydrator = app.Status.SourceHydrator From 8ffff4806a8d04b1c6b6f7c8fdf32e635f9fdfd5 Mon Sep 17 00:00:00 2001 From: Alexandre Gaudreault Date: Wed, 22 May 2024 15:32:19 -0700 Subject: [PATCH 15/15] fix Signed-off-by: Alexandre Gaudreault --- controller/appcontroller.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/controller/appcontroller.go b/controller/appcontroller.go index 4daab55a5bf94..6411a11876b89 100644 --- a/controller/appcontroller.go +++ b/controller/appcontroller.go @@ -1593,7 +1593,7 @@ func (ctrl *ApplicationController) processAppRefreshQueueItem() (processNext boo restart = true } - if app.Status.SourceHydrator.HydrateOperation.Status == appv1.HydrateOperationPhaseFailed { + if app.Status.SourceHydrator.HydrateOperation != nil && app.Status.SourceHydrator.HydrateOperation.Status == appv1.HydrateOperationPhaseFailed { retryWaitPeriod := 2 * 60 * time.Second if metav1.Now().Sub(app.Status.SourceHydrator.HydrateOperation.FinishedAt.Time) > retryWaitPeriod { logCtx.Info("Retrying failed hydration")