This commit is contained in:
chansuke 2026-04-21 06:09:08 +03:00 committed by GitHub
commit ddb00cb500
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
17 changed files with 814 additions and 585 deletions

167
assets/swagger.json generated
View file

@ -818,7 +818,7 @@
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/v1EventList"
"type": "object"
}
},
"default": {
@ -2291,7 +2291,7 @@
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/v1EventList"
"type": "object"
}
},
"default": {
@ -3126,7 +3126,7 @@
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/v1EventList"
"type": "object"
}
},
"default": {
@ -6035,6 +6035,14 @@
}
}
},
"protobufNullValue": {
"description": "`NullValue` is a singleton enumeration to represent the null value for the\n`Value` type union.\n\nThe JSON representation for `NullValue` is JSON `null`.\n\n - NULL_VALUE: Null value.",
"type": "string",
"default": "NULL_VALUE",
"enum": [
"NULL_VALUE"
]
},
"repocredsRepoCredsResponse": {
"type": "object",
"title": "RepoCredsResponse is a response to most repository credentials requests"
@ -6401,109 +6409,6 @@
}
}
},
"v1Event": {
"description": "Event is a report of an event somewhere in the cluster. Events\nhave a limited retention time and triggers and messages may evolve\nwith time. Event consumers should not rely on the timing of an event\nwith a given Reason reflecting a consistent underlying trigger, or the\ncontinued existence of events with that Reason. Events should be\ntreated as informative, best-effort, supplemental data.",
"type": "object",
"properties": {
"action": {
"type": "string",
"title": "What action was taken/failed regarding to the Regarding object.\n+optional"
},
"count": {
"type": "integer",
"format": "int32",
"title": "The number of times this event has occurred.\n+optional"
},
"eventTime": {
"$ref": "#/definitions/v1MicroTime"
},
"firstTimestamp": {
"$ref": "#/definitions/v1Time"
},
"involvedObject": {
"$ref": "#/definitions/v1ObjectReference"
},
"lastTimestamp": {
"$ref": "#/definitions/v1Time"
},
"message": {
"type": "string",
"title": "A human-readable description of the status of this operation.\nTODO: decide on maximum length.\n+optional"
},
"metadata": {
"$ref": "#/definitions/v1ObjectMeta"
},
"reason": {
"type": "string",
"title": "This should be a short, machine understandable string that gives the reason\nfor the transition into the object's current status.\nTODO: provide exact specification for format.\n+optional"
},
"related": {
"$ref": "#/definitions/v1ObjectReference"
},
"reportingComponent": {
"type": "string",
"title": "Name of the controller that emitted this Event, e.g. `kubernetes.io/kubelet`.\n+optional"
},
"reportingInstance": {
"type": "string",
"title": "ID of the controller instance, e.g. `kubelet-xyzf`.\n+optional"
},
"series": {
"$ref": "#/definitions/v1EventSeries"
},
"source": {
"$ref": "#/definitions/v1EventSource"
},
"type": {
"type": "string",
"title": "Type of this event (Normal, Warning), new types could be added in the future\n+optional"
}
}
},
"v1EventList": {
"description": "EventList is a list of events.",
"type": "object",
"properties": {
"items": {
"type": "array",
"title": "List of events",
"items": {
"$ref": "#/definitions/v1Event"
}
},
"metadata": {
"$ref": "#/definitions/v1ListMeta"
}
}
},
"v1EventSeries": {
"description": "EventSeries contain information on series of events, i.e. thing that was/is happening\ncontinuously for some time.",
"type": "object",
"properties": {
"count": {
"type": "integer",
"format": "int32",
"title": "Number of occurrences in this series up to the last heartbeat time"
},
"lastObservedTime": {
"$ref": "#/definitions/v1MicroTime"
}
}
},
"v1EventSource": {
"description": "EventSource contains information for an event.",
"type": "object",
"properties": {
"component": {
"type": "string",
"title": "Component from which the event is generated.\n+optional"
},
"host": {
"type": "string",
"title": "Node name on which the event is generated.\n+optional"
}
}
},
"v1FieldsV1": {
"description": "FieldsV1 stores a set of fields in a data structure like a Trie, in JSON format.\n\nEach key is either a '.' representing the field itself, and will always map to an empty set,\nor a string representing a sub-field or item. The string will follow one of these four formats:\n'f:<name>', where <name> is the name of a field in a struct, or key in a map\n'v:<value>', where <value> is the exact json formatted value of a list item\n'i:<index>', where <index> is position of a item in a list\n'k:<keys>', where <keys> is a map of a list item's key fields to their unique values\nIf a key maps to an empty Fields value, the field that key represents is part of the set.\n\nThe exact format is defined in sigs.k8s.io/structured-merge-diff\n+protobuf.options.(gogoproto.goproto_stringer)=false",
"type": "object",
@ -6659,22 +6564,6 @@
}
}
},
"v1MicroTime": {
"description": "MicroTime is version of Time with microsecond level precision.\n\n+protobuf.options.marshal=false\n+protobuf.as=Timestamp\n+protobuf.options.(gogoproto.goproto_stringer)=false",
"type": "object",
"properties": {
"nanos": {
"description": "Non-negative fractions of a second at nanosecond resolution. Negative\nsecond values with fractions must still have non-negative nanos values\nthat count forward in time. Must be from 0 to 999,999,999\ninclusive. This field may be limited in precision depending on context.",
"type": "integer",
"format": "int32"
},
"seconds": {
"description": "Represents seconds of UTC time since Unix epoch\n1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to\n9999-12-31T23:59:59Z inclusive.",
"type": "integer",
"format": "int64"
}
}
},
"v1NodeSwapStatus": {
"description": "NodeSwapStatus represents swap memory information.",
"type": "object",
@ -6816,40 +6705,6 @@
}
}
},
"v1ObjectReference": {
"description": "ObjectReference contains enough information to let you inspect or modify the referred object.\n---\nNew uses of this type are discouraged because of difficulty describing its usage when embedded in APIs.\n 1. Ignored fields. It includes many fields which are not generally honored. For instance, ResourceVersion and FieldPath are both very rarely valid in actual usage.\n 2. Invalid usage help. It is impossible to add specific help for individual usage. In most embedded usages, there are particular\n restrictions like, \"must refer only to types A and B\" or \"UID not honored\" or \"name must be restricted\".\n Those cannot be well described when embedded.\n 3. Inconsistent validation. Because the usages are different, the validation rules are different by usage, which makes it hard for users to predict what will happen.\n 4. The fields are both imprecise and overly precise. Kind is not a precise mapping to a URL. This can produce ambiguity\n during interpretation and require a REST mapping. In most cases, the dependency is on the group,resource tuple\n and the version of the actual struct is irrelevant.\n 5. We cannot easily change it. Because this type is embedded in many locations, updates to this type\n will affect numerous schemas. Don't make new APIs embed an underspecified API type they do not control.\n\nInstead of using this type, create a locally provided and used type that is well-focused on your reference.\nFor example, ServiceReferences for admission registration: https://github.com/kubernetes/api/blob/release-1.17/admissionregistration/v1/types.go#L533 .\n+k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object\n+structType=atomic",
"type": "object",
"properties": {
"apiVersion": {
"type": "string",
"title": "API version of the referent.\n+optional"
},
"fieldPath": {
"type": "string",
"title": "If referring to a piece of an object instead of an entire object, this string\nshould contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].\nFor example, if the object reference is to a container within a pod, this would take on a value like:\n\"spec.containers{name}\" (where \"name\" refers to the name of the container that triggered\nthe event) or if no container name is specified \"spec.containers[2]\" (container with\nindex 2 in this pod). This syntax is chosen only to have some well-defined way of\nreferencing a part of an object.\nTODO: this design is not final and this field is subject to change in the future.\n+optional"
},
"kind": {
"type": "string",
"title": "Kind of the referent.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds\n+optional"
},
"name": {
"type": "string",
"title": "Name of the referent.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n+optional"
},
"namespace": {
"type": "string",
"title": "Namespace of the referent.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/\n+optional"
},
"resourceVersion": {
"type": "string",
"title": "Specific resourceVersion to which this reference is made, if any.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency\n+optional"
},
"uid": {
"type": "string",
"title": "UID of the referent.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids\n+optional"
}
}
},
"v1OwnerReference": {
"type": "object",
"title": "OwnerReference contains enough information to let you identify an owning\nobject. An owning object must be in the same namespace as the dependent, or\nbe cluster-scoped, so there is no namespace field.\n+structType=atomic",

View file

@ -24,7 +24,7 @@ import (
"github.com/stretchr/testify/require"
"golang.org/x/oauth2"
"google.golang.org/grpc"
corev1 "k8s.io/api/core/v1"
"google.golang.org/protobuf/types/known/structpb"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime"
@ -2176,7 +2176,7 @@ func (c *fakeAppServiceClient) List(_ context.Context, _ *applicationpkg.Applica
return nil, nil
}
func (c *fakeAppServiceClient) ListResourceEvents(_ context.Context, _ *applicationpkg.ApplicationResourceEventsQuery, _ ...grpc.CallOption) (*corev1.EventList, error) {
func (c *fakeAppServiceClient) ListResourceEvents(_ context.Context, _ *applicationpkg.ApplicationResourceEventsQuery, _ ...grpc.CallOption) (*structpb.Struct, error) {
return nil, nil
}

View file

@ -2,28 +2,73 @@
## Breaking Changes
### Event-listing gRPC methods now return `google.protobuf.Struct`
Argo CD 3.4 changes the gRPC response type of the event-listing APIs from
`k8s.io.api.core.v1.EventList` to `google.protobuf.Struct` to remain compatible
with newer Kubernetes protobuf definitions.
The affected gRPC methods are:
- `application.ApplicationService/ListResourceEvents`
- `applicationset.ApplicationSetService/ListResourceEvents`
- `project.ProjectService/ListEvents`
#### Impact on gRPC clients
Any generated or custom gRPC client that calls these methods must be regenerated
or upgraded together with the Argo CD 3.4 server.
This includes any older Argo CD CLI or automation that directly invokes the
affected event-listing RPCs.
The `--grpc-web` flag is not a compatibility workaround for this change.
Argo CD's grpc-web mode still uses protobuf messages for these RPCs, so older
clients expecting `k8s.io.api.core.v1.EventList` remain incompatible.
#### Impact on REST clients and the UI
The REST endpoints and paths remain unchanged:
- `GET /api/v1/applications/{name}/events`
- `GET /api/v1/applicationsets/{name}/events`
- `GET /api/v1/projects/{name}/events`
The JSON response body continues to use the same `EventList`-shaped payload, so
the Argo CD UI and REST integrations that consume these endpoints as JSON are
not impacted.
#### OpenAPI / schema note
Although the REST paths and JSON payload remain the same, the generated OpenAPI
schema for these endpoints now uses `protobufStruct` instead of
`io.k8s.api.core.v1.EventList`.
If you generate REST clients from Argo CD's OpenAPI definition, treat this as a
schema-level breaking change and regenerate or update those clients during the
upgrade.
### Cluster version format change
**New behavior:**
3.4 now stores the cluster version in a more detailed format, `vMajor.Minor.Patch` compared to the previous format `Major.Minor`.
3.4 now stores the cluster version in a more detailed format, `vMajor.Minor.Patch` compared to the previous format `Major.Minor`.
This change is aligning how ArgoCD interprets K8s cluster version with how Helm `3.19.0` and above interprets it.
This change is aligning how ArgoCD interprets K8s cluster version with how Helm `3.19.0` and above interprets it.
This change makes it easier to compare versions and to support future features. It also allows for more accurate version comparisons and better compatibility with future Kubernetes releases.
This change makes it easier to compare versions and to support future features. It also allows for more accurate version comparisons and better compatibility with future Kubernetes releases.
This change was also back ported to Argo CD `3.3.3`.
**Impact:**
Application Sets with Cluster Generators, that fetch clusters based on their Kubernetes version and use `argocd.argoproj.io/auto-label-cluster-info` on the cluster secret, need to be updated to use `argocd.argoproj.io/kubernetes-version` with the `vMajor.Minor.Patch` format instead of the previous `Major.Minor` format.
Application Sets with Cluster Generators, that fetch clusters based on their Kubernetes version and use `argocd.argoproj.io/auto-label-cluster-info` on the cluster secret, need to be updated to use `argocd.argoproj.io/kubernetes-version` with the `vMajor.Minor.Patch` format instead of the previous `Major.Minor` format.
More details [here](../applicationset/Generators-Cluster.md#fetch-clusters-based-on-their-k8s-version).
Additionally, API, UI and CLI commands that retrieve cluster information now return the version in the `vMajor.Minor.Patch` format.
The env variable $KUBE_VERSION that is used with Argo CD CMP Plugins remains unchanged and returns the version in `Major.Minor.Patch` format, so CMP Plugins are not impacted.
## Behavioral Improvements / Fixes
### Applications with `Missing` health status
@ -76,75 +121,4 @@ data:
controller.grpc.enable.txt.service.config: "true"
```
**Related Issue**
https://github.com/argoproj/argo-cd/issues/24991
### More detailed cluster version
3.4.0 now stores the cluster version in a more detailed format, Major.Minor.Patch compared to the previous format Major.Minor.
This change is to make it easier to compare versions and to support future features.
This change also allows for more accurate version comparisons and better compatibility with future Kubernetes releases.
Users will notice it in the UI and the CLI commands that retrieve cluster information.
## API Changes
<!-- Changes in API surface:
Any removal of fields or changed API defaults -->
## Security Changes
<!-- Changes in security behavior:
Any removal of sensitive fields or changed authentication defaults -->
## Deprecated Items
<!-- Flags / behavior to be removed in future releases
Any deprecated config API or CLI flags -->
## Kustomize Upgraded
<!-- Bundled Kustomize version bump:
Any breaking behavior
Notes about specific upstream behavior changes (e.g., namespace propagation fixes). -->
## Helm Upgraded
<!-- Bundled Helm version bump:
Any breaking behavior
Verify if your charts depend on any features tied to Helm versions. -->
## Dex Upgraded
Argo CD v3.4 upgrades the bundled Dex version to 2.45.0. There are a few things to keep in mind, according to the
[release notes](https://github.com/dexidp/dex/releases/tag/v2.45.0).
- Gomplate is used internally, but users that have configured Dex for preprocessing may be impacted.
- The `ContinueOnConnectorFailure` feature flag is now enabled by default. To disable it, set the following `argocd-cmd-params-cm`
ConfigMap parameter `dexserver.connector.failure.continue` to `false`.
## go-oidc Upgraded
go-oidc v3.17.0 changes the order of steps for token verification.
Previous order:
```
parse claims → signature
```
Updated order:
```
signature → parse claims
```
### Possible User Impact and Mitigation
For a token that is both **expired** and **signed by a key that has since removed from JWKS due to rotation**, the signature verification failure will not redirect the user to SSO. Instead the user would be redirected to the login page and would need to manually initiate the SSO login.
This scenario can be avoided by implementing the provider best practice of serving previously used keys for a grace period which exceeds the token lifetime.
## Open Telemetry Upgraded
Argo CD v3.4 upgrades `go.opentelemetry.io/otel` to `1.42.0`, with semantic conventions `v1.40.0` release. Please see [semantic conventions release notes](https://github.com/open-telemetry/semantic-conventions/releases/tag/v1.40.0) for a list of changed metric names and dropped attributes, which may require changes in your Argo CD Grafana dashboards/alerts based on OTEL.
## Custom Healthchecks Added
* [nmstate.io/NodeNetworkConfigurationPolicy](https://github.com/argoproj/argo-cd/commit/7a3d6f1f6a28b44f5de73895d262473641954429)
**Related Issue**: https://github.com/argoproj/argo-cd/issues/24991

View file

@ -18,8 +18,8 @@ import (
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status"
structpb "google.golang.org/protobuf/types/known/structpb"
io "io"
v11 "k8s.io/api/core/v1"
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
math "math"
math_bits "math/bits"
@ -3174,196 +3174,196 @@ func init() {
}
var fileDescriptor_df6e82b174b5eaec = []byte{
// 3017 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x5b, 0xcd, 0x8f, 0x1c, 0x47,
0x15, 0xa7, 0x66, 0x76, 0x76, 0x67, 0xdf, 0x78, 0xfd, 0x51, 0xb1, 0x4d, 0x67, 0xbc, 0x31, 0x9b,
0xb6, 0x1d, 0x6f, 0xd6, 0xde, 0x19, 0x7b, 0x62, 0x20, 0xd9, 0x24, 0x04, 0x67, 0xed, 0x38, 0x0b,
0x6b, 0xc7, 0xf4, 0x3a, 0x31, 0x0a, 0x07, 0xa8, 0x74, 0xd7, 0xcc, 0x34, 0xdb, 0xd3, 0xdd, 0xee,
0xee, 0x99, 0xb0, 0x0a, 0xb9, 0x04, 0x21, 0x71, 0x88, 0x82, 0x80, 0x1c, 0x38, 0xf0, 0x99, 0x28,
0x08, 0x21, 0x10, 0x17, 0x84, 0x90, 0x10, 0x12, 0x1c, 0x82, 0xe0, 0x80, 0x84, 0xe0, 0x1f, 0x40,
0x11, 0xe2, 0xc0, 0x21, 0xb9, 0xe4, 0x8c, 0x50, 0x55, 0x57, 0x75, 0x77, 0xcd, 0x47, 0xcf, 0x2c,
0x33, 0x10, 0x4b, 0xdc, 0xfa, 0xd5, 0x74, 0xbf, 0xf7, 0x7b, 0xaf, 0xde, 0x7b, 0xf5, 0xea, 0xbd,
0x5d, 0x38, 0x1d, 0xd2, 0xa0, 0x47, 0x83, 0x3a, 0xf1, 0x7d, 0xc7, 0x36, 0x49, 0x64, 0x7b, 0x6e,
0xf6, 0xb9, 0xe6, 0x07, 0x5e, 0xe4, 0xe1, 0x4a, 0x66, 0xa9, 0xba, 0xdc, 0xf2, 0xbc, 0x96, 0x43,
0xeb, 0xc4, 0xb7, 0xeb, 0xc4, 0x75, 0xbd, 0x88, 0x2f, 0x87, 0xf1, 0xab, 0x55, 0x7d, 0xf7, 0xe1,
0xb0, 0x66, 0x7b, 0xfc, 0x57, 0xd3, 0x0b, 0x68, 0xbd, 0x77, 0xb1, 0xde, 0xa2, 0x2e, 0x0d, 0x48,
0x44, 0x2d, 0xf1, 0xce, 0xa5, 0xf4, 0x9d, 0x0e, 0x31, 0xdb, 0xb6, 0x4b, 0x83, 0xbd, 0xba, 0xbf,
0xdb, 0x62, 0x0b, 0x61, 0xbd, 0x43, 0x23, 0x32, 0xec, 0xab, 0xed, 0x96, 0x1d, 0xb5, 0xbb, 0x2f,
0xd4, 0x4c, 0xaf, 0x53, 0x27, 0x41, 0xcb, 0xf3, 0x03, 0xef, 0x8b, 0xfc, 0x61, 0xdd, 0xb4, 0xea,
0xbd, 0x87, 0x52, 0x06, 0x59, 0x5d, 0x7a, 0x17, 0x89, 0xe3, 0xb7, 0xc9, 0x20, 0xb7, 0xab, 0x63,
0xb8, 0x05, 0xd4, 0xf7, 0x84, 0x6d, 0xf8, 0xa3, 0x1d, 0x79, 0xc1, 0x5e, 0xe6, 0x31, 0x66, 0xa3,
0xbf, 0x8f, 0xe0, 0xf0, 0xe5, 0x54, 0xde, 0x67, 0xba, 0x34, 0xd8, 0xc3, 0x18, 0xe6, 0x5c, 0xd2,
0xa1, 0x1a, 0x5a, 0x41, 0xab, 0x8b, 0x06, 0x7f, 0xc6, 0x1a, 0x2c, 0x04, 0xb4, 0x19, 0xd0, 0xb0,
0xad, 0x15, 0xf8, 0xb2, 0x24, 0x71, 0x15, 0xca, 0x4c, 0x38, 0x35, 0xa3, 0x50, 0x2b, 0xae, 0x14,
0x57, 0x17, 0x8d, 0x84, 0xc6, 0xab, 0x70, 0x28, 0xa0, 0xa1, 0xd7, 0x0d, 0x4c, 0xfa, 0x1c, 0x0d,
0x42, 0xdb, 0x73, 0xb5, 0x39, 0xfe, 0x75, 0xff, 0x32, 0xe3, 0x12, 0x52, 0x87, 0x9a, 0x91, 0x17,
0x68, 0x25, 0xfe, 0x4a, 0x42, 0x33, 0x3c, 0x0c, 0xb8, 0x36, 0x1f, 0xe3, 0x61, 0xcf, 0x58, 0x87,
0x03, 0xc4, 0xf7, 0x6f, 0x90, 0x0e, 0x0d, 0x7d, 0x62, 0x52, 0x6d, 0x81, 0xff, 0xa6, 0xac, 0x31,
0xcc, 0x02, 0x89, 0x56, 0xe6, 0xc0, 0x24, 0xa9, 0x6f, 0xc2, 0xe2, 0x0d, 0xcf, 0xa2, 0xa3, 0xd5,
0xed, 0x67, 0x5f, 0x18, 0x64, 0xaf, 0xbf, 0x8d, 0xe0, 0x98, 0x41, 0x7b, 0x36, 0xc3, 0x7f, 0x9d,
0x46, 0xc4, 0x22, 0x11, 0xe9, 0xe7, 0x58, 0x48, 0x38, 0x56, 0xa1, 0x1c, 0x88, 0x97, 0xb5, 0x02,
0x5f, 0x4f, 0xe8, 0x01, 0x69, 0xc5, 0x7c, 0x65, 0x62, 0x13, 0x4a, 0x12, 0xaf, 0x40, 0x25, 0xb6,
0xe5, 0x96, 0x6b, 0xd1, 0x2f, 0x71, 0xeb, 0x95, 0x8c, 0xec, 0x12, 0x5e, 0x86, 0xc5, 0x5e, 0x6c,
0xe7, 0x2d, 0x8b, 0x5b, 0xb1, 0x64, 0xa4, 0x0b, 0xfa, 0x3f, 0x10, 0x9c, 0xcc, 0xf8, 0x80, 0x21,
0x76, 0xe6, 0x6a, 0x8f, 0xba, 0x51, 0x38, 0x5a, 0xa1, 0xf3, 0x70, 0x44, 0x6e, 0x62, 0xbf, 0x9d,
0x06, 0x7f, 0x60, 0x2a, 0x66, 0x17, 0xa5, 0x8a, 0xd9, 0x35, 0xa6, 0x88, 0xa4, 0x9f, 0xdd, 0xba,
0x22, 0xd4, 0xcc, 0x2e, 0x0d, 0x18, 0xaa, 0x94, 0x6f, 0xa8, 0x79, 0xc5, 0x50, 0xfa, 0x3f, 0x11,
0x68, 0x19, 0x45, 0xaf, 0x13, 0xd7, 0x6e, 0xd2, 0x30, 0x9a, 0x74, 0xcf, 0xd0, 0x0c, 0xf7, 0x6c,
0x15, 0x0e, 0xc5, 0x5a, 0xdd, 0x64, 0xf1, 0xc8, 0xf2, 0x8f, 0x56, 0x5a, 0x29, 0xae, 0x16, 0x8d,
0xfe, 0x65, 0xb6, 0x77, 0x52, 0x66, 0xa8, 0xcd, 0x73, 0x37, 0x4e, 0x17, 0x98, 0x04, 0xd7, 0xdb,
0x24, 0x66, 0x3b, 0x8e, 0x80, 0xb2, 0x21, 0x49, 0xfd, 0x7e, 0x58, 0x7c, 0xca, 0x76, 0xe8, 0x66,
0xbb, 0xeb, 0xee, 0xe2, 0xa3, 0x50, 0x32, 0xd9, 0x03, 0xd7, 0xee, 0x80, 0x11, 0x13, 0xfa, 0x37,
0x10, 0xdc, 0x3f, 0xca, 0x1e, 0xb7, 0xed, 0xa8, 0xcd, 0xbe, 0x0f, 0x47, 0x19, 0xc6, 0x6c, 0x53,
0x73, 0x37, 0xec, 0x76, 0xa4, 0x33, 0x4b, 0x7a, 0x3a, 0xc3, 0xe8, 0x3f, 0x41, 0xb0, 0x3a, 0x16,
0xd3, 0xed, 0x80, 0xf8, 0x3e, 0x0d, 0xf0, 0x53, 0x50, 0xba, 0xc3, 0x7e, 0xe0, 0xa1, 0x5b, 0x69,
0xd4, 0x6a, 0xd9, 0xd4, 0x3f, 0x96, 0xcb, 0xd3, 0x1f, 0x32, 0xe2, 0xcf, 0x71, 0x4d, 0x9a, 0xa7,
0xc0, 0xf9, 0x1c, 0x57, 0xf8, 0x24, 0x56, 0x64, 0xef, 0xf3, 0xd7, 0x9e, 0x9c, 0x87, 0x39, 0x9f,
0x04, 0x91, 0x7e, 0x0c, 0xee, 0x51, 0x03, 0xc7, 0xf7, 0xdc, 0x90, 0xea, 0xbf, 0x56, 0xfd, 0x6c,
0x33, 0xa0, 0x24, 0xa2, 0x06, 0xbd, 0xd3, 0xa5, 0x61, 0x84, 0x77, 0x21, 0x7b, 0x1a, 0x71, 0xab,
0x56, 0x1a, 0x5b, 0xb5, 0x34, 0x9d, 0xd7, 0x64, 0x3a, 0xe7, 0x0f, 0x9f, 0x37, 0xad, 0x5a, 0xef,
0xa1, 0x9a, 0xbf, 0xdb, 0xaa, 0xb1, 0xc3, 0x41, 0x41, 0x26, 0x0f, 0x87, 0xac, 0xaa, 0x46, 0x96,
0x3b, 0x3e, 0x0e, 0xf3, 0x5d, 0x3f, 0xa4, 0x41, 0xc4, 0x35, 0x2b, 0x1b, 0x82, 0x62, 0xfb, 0xd7,
0x23, 0x8e, 0x6d, 0x91, 0x28, 0xde, 0x9f, 0xb2, 0x91, 0xd0, 0xfa, 0x6f, 0x54, 0xf4, 0xcf, 0xfa,
0xd6, 0x07, 0x85, 0x3e, 0x8b, 0xb2, 0xa0, 0xa2, 0xcc, 0x7a, 0x50, 0x51, 0xf5, 0xa0, 0x5f, 0xa8,
0xf8, 0xaf, 0x50, 0x87, 0xa6, 0xf8, 0x87, 0x39, 0xb3, 0x06, 0x0b, 0x26, 0x09, 0x4d, 0x62, 0x49,
0x29, 0x92, 0x64, 0x29, 0xce, 0x0f, 0x3c, 0x9f, 0xb4, 0x38, 0xa7, 0x9b, 0x9e, 0x63, 0x9b, 0x7b,
0x42, 0xdc, 0xe0, 0x0f, 0x03, 0x8e, 0x3f, 0x97, 0xef, 0xf8, 0x25, 0x15, 0xf6, 0x29, 0xa8, 0xec,
0xec, 0xb9, 0xe6, 0x33, 0x7e, 0x1c, 0xf6, 0x47, 0xa1, 0x64, 0x47, 0xb4, 0x13, 0x6a, 0x88, 0x87,
0x7c, 0x4c, 0xe8, 0xff, 0x2a, 0xc1, 0xf1, 0x8c, 0x6e, 0xec, 0x83, 0x3c, 0xcd, 0xf2, 0xf2, 0xd7,
0x71, 0x98, 0xb7, 0x82, 0x3d, 0xa3, 0xeb, 0x0a, 0x07, 0x10, 0x14, 0x13, 0xec, 0x07, 0x5d, 0x37,
0x86, 0x5f, 0x36, 0x62, 0x02, 0x37, 0xa1, 0x1c, 0x46, 0xac, 0xfe, 0x68, 0xed, 0x71, 0xe0, 0x95,
0xc6, 0xa7, 0xa6, 0xdb, 0x74, 0x06, 0x7d, 0x47, 0x70, 0x34, 0x12, 0xde, 0xf8, 0x0e, 0xcb, 0x76,
0x71, 0x0a, 0x0c, 0xb5, 0x85, 0x95, 0xe2, 0x6a, 0xa5, 0xb1, 0x33, 0xbd, 0xa0, 0x67, 0x7c, 0x56,
0x3b, 0x65, 0xce, 0x36, 0x23, 0x95, 0xc2, 0x12, 0x6c, 0x47, 0xe4, 0x87, 0x50, 0xd4, 0x09, 0xe9,
0x02, 0xfe, 0x2c, 0x94, 0x6c, 0xb7, 0xe9, 0x85, 0xda, 0x22, 0x07, 0xf3, 0xe4, 0x74, 0x60, 0xb6,
0xdc, 0xa6, 0x67, 0xc4, 0x0c, 0xf1, 0x1d, 0x58, 0x0a, 0x68, 0x14, 0xec, 0x49, 0x2b, 0x68, 0xc0,
0xed, 0xfa, 0xe9, 0xe9, 0x24, 0x18, 0x59, 0x96, 0x86, 0x2a, 0x01, 0x6f, 0x40, 0x25, 0x4c, 0x7d,
0x4c, 0xab, 0x70, 0x81, 0x9a, 0xc2, 0x28, 0xe3, 0x83, 0x46, 0xf6, 0xe5, 0x01, 0xef, 0x3e, 0x90,
0xef, 0xdd, 0x4b, 0x63, 0xcf, 0xbb, 0x83, 0x13, 0x9c, 0x77, 0x87, 0xfa, 0xce, 0x3b, 0xfd, 0x3d,
0x04, 0xcb, 0x03, 0xc9, 0x69, 0xc7, 0xa7, 0xb9, 0x61, 0x40, 0x60, 0x2e, 0xf4, 0xa9, 0xc9, 0x4f,
0xaa, 0x4a, 0xe3, 0xfa, 0xcc, 0xb2, 0x15, 0x97, 0xcb, 0x59, 0xe7, 0x25, 0xd4, 0x29, 0xf3, 0xc2,
0xf7, 0x11, 0x7c, 0x38, 0x23, 0xf3, 0x26, 0x89, 0xcc, 0x76, 0x9e, 0xb2, 0x2c, 0x7e, 0xd9, 0x3b,
0xe2, 0x5c, 0x8e, 0x09, 0x66, 0x55, 0xfe, 0x70, 0x6b, 0xcf, 0x67, 0x00, 0xd9, 0x2f, 0xe9, 0xc2,
0x94, 0x65, 0xd5, 0x4f, 0x11, 0x54, 0xb3, 0x39, 0xdc, 0x73, 0x9c, 0x17, 0x88, 0xb9, 0x9b, 0x07,
0xf2, 0x20, 0x14, 0x6c, 0x8b, 0x23, 0x2c, 0x1a, 0x05, 0xdb, 0xda, 0x67, 0x32, 0xea, 0x87, 0x3b,
0x9f, 0x0f, 0x77, 0x41, 0x85, 0xfb, 0x7e, 0x1f, 0x5c, 0x99, 0x12, 0x72, 0xe0, 0x2e, 0xc3, 0xa2,
0xdb, 0x57, 0xe2, 0xa6, 0x0b, 0x43, 0x4a, 0xdb, 0xc2, 0x40, 0x69, 0xab, 0xc1, 0x42, 0x2f, 0xb9,
0x00, 0xb1, 0x9f, 0x25, 0xc9, 0x54, 0x6c, 0x05, 0x5e, 0xd7, 0x17, 0x46, 0x8f, 0x09, 0x86, 0x62,
0xd7, 0x76, 0x59, 0xb1, 0xce, 0x51, 0xb0, 0xe7, 0xfd, 0x5f, 0x79, 0x14, 0xb5, 0x7f, 0x56, 0x80,
0x8f, 0x0c, 0x51, 0x7b, 0xac, 0x3f, 0xdd, 0x1d, 0xba, 0x27, 0x5e, 0xbd, 0x30, 0xd2, 0xab, 0xcb,
0xe3, 0xbc, 0x7a, 0x31, 0xdf, 0x5e, 0xa0, 0xda, 0xeb, 0xc7, 0x05, 0x58, 0x19, 0x62, 0xaf, 0xf1,
0xe5, 0xc4, 0x5d, 0x63, 0xb0, 0xa6, 0x17, 0x98, 0xf2, 0x5a, 0x10, 0x13, 0x2c, 0xce, 0xbc, 0xc0,
0x6f, 0x13, 0x97, 0x7b, 0x47, 0xd9, 0x10, 0xd4, 0x94, 0xa6, 0xba, 0x02, 0x9a, 0x34, 0xcf, 0x65,
0x33, 0x4e, 0x52, 0x01, 0xe9, 0xd0, 0x88, 0x06, 0xe1, 0xa8, 0x14, 0xd5, 0x23, 0x4e, 0x97, 0xca,
0x14, 0xc5, 0x09, 0xfd, 0xb5, 0x42, 0x3f, 0x1b, 0xa3, 0xeb, 0xde, 0xfd, 0x86, 0x3e, 0x0e, 0xf3,
0x84, 0xa3, 0x15, 0xae, 0x29, 0xa8, 0x01, 0x93, 0x96, 0xf3, 0x4d, 0xba, 0xa8, 0x98, 0x74, 0xa3,
0xa0, 0x21, 0xfd, 0xbd, 0x02, 0x54, 0x47, 0x19, 0xe4, 0xb9, 0xc6, 0xff, 0x9b, 0x49, 0x30, 0x01,
0x2d, 0x18, 0xe1, 0x65, 0x1a, 0xf0, 0xe2, 0xec, 0x8c, 0x72, 0x62, 0x8f, 0x72, 0x49, 0x63, 0x24,
0x1b, 0xfd, 0xab, 0x08, 0x4e, 0xa8, 0x9f, 0x85, 0xdb, 0x76, 0x18, 0xc9, 0x8b, 0x1d, 0x6e, 0xc2,
0x42, 0xac, 0x4a, 0x5c, 0x96, 0x57, 0x1a, 0xdb, 0xd3, 0x16, 0x6b, 0xca, 0xee, 0x4a, 0xe6, 0xfa,
0x23, 0x70, 0x62, 0xe8, 0x09, 0x25, 0x60, 0x54, 0xa1, 0x2c, 0x0b, 0x54, 0xb1, 0xfb, 0x09, 0xad,
0xbf, 0x39, 0xa7, 0x96, 0x0b, 0x9e, 0xb5, 0xed, 0xb5, 0x72, 0xba, 0x38, 0xf9, 0x1e, 0xc3, 0x76,
0xc3, 0xb3, 0x32, 0x0d, 0x1b, 0x49, 0xb2, 0xef, 0x4c, 0xcf, 0x8d, 0x88, 0xed, 0xd2, 0x40, 0x54,
0x34, 0xe9, 0x02, 0xdb, 0xe9, 0xd0, 0x76, 0x4d, 0xba, 0x43, 0x4d, 0xcf, 0xb5, 0x42, 0xee, 0x32,
0x45, 0x43, 0x59, 0xc3, 0x4f, 0xc3, 0x22, 0xa7, 0x6f, 0xd9, 0x9d, 0xf8, 0x08, 0xaf, 0x34, 0xd6,
0x6a, 0x71, 0x67, 0xb5, 0x96, 0xed, 0xac, 0xa6, 0x36, 0xec, 0xd0, 0x88, 0xd4, 0x7a, 0x17, 0x6b,
0xec, 0x0b, 0x23, 0xfd, 0x98, 0x61, 0x89, 0x88, 0xed, 0x6c, 0xdb, 0x2e, 0xbf, 0x34, 0x30, 0x51,
0xe9, 0x02, 0xf3, 0xc6, 0xa6, 0xe7, 0x38, 0xde, 0x8b, 0x32, 0xe7, 0xc5, 0x14, 0xfb, 0xaa, 0xeb,
0x46, 0xb6, 0xc3, 0xe5, 0xc7, 0xbe, 0x96, 0x2e, 0xf0, 0xaf, 0x6c, 0x27, 0xa2, 0x81, 0x48, 0x76,
0x82, 0x4a, 0xfc, 0xbd, 0x12, 0x37, 0x0b, 0x65, 0xae, 0x8d, 0x23, 0xe3, 0x40, 0x36, 0x32, 0xfa,
0xa3, 0x6d, 0x69, 0x48, 0xc7, 0x8b, 0xf7, 0x4e, 0x69, 0xcf, 0xf6, 0xba, 0xac, 0x1e, 0xe6, 0x65,
0xa3, 0xa4, 0x07, 0xa2, 0xe5, 0x50, 0x7e, 0xb4, 0x1c, 0x56, 0xa3, 0x85, 0xdf, 0x6a, 0x22, 0xb3,
0xbd, 0x49, 0x42, 0xaa, 0x1d, 0xe1, 0xac, 0xd3, 0x05, 0xfd, 0xb7, 0x08, 0xca, 0xdb, 0x5e, 0xeb,
0xaa, 0x1b, 0x05, 0x7b, 0xfc, 0xfe, 0xeb, 0xb9, 0x11, 0x75, 0xa5, 0x37, 0x49, 0x92, 0x6d, 0x51,
0x64, 0x77, 0xe8, 0x4e, 0x44, 0x3a, 0xbe, 0xa8, 0x9e, 0xf7, 0xb5, 0x45, 0xc9, 0xc7, 0xcc, 0x6c,
0x0e, 0x09, 0x23, 0x9e, 0x72, 0xca, 0x06, 0x7f, 0x66, 0x0a, 0x26, 0x2f, 0xec, 0x44, 0x81, 0xc8,
0x37, 0xca, 0x5a, 0xd6, 0x01, 0x4b, 0x31, 0x36, 0x41, 0xea, 0x1d, 0xb8, 0x37, 0xb9, 0xd6, 0xdd,
0xa2, 0x41, 0xc7, 0x76, 0x49, 0xfe, 0xb9, 0x3c, 0x41, 0x4b, 0x37, 0xa7, 0xab, 0xe0, 0x29, 0x21,
0xc9, 0x6e, 0x49, 0xb7, 0x6d, 0xd7, 0xf2, 0x5e, 0xcc, 0x09, 0xad, 0xe9, 0x04, 0xfe, 0x45, 0xed,
0xca, 0x66, 0x24, 0x26, 0x79, 0xe0, 0x69, 0x58, 0x62, 0x19, 0xa3, 0x47, 0xc5, 0x0f, 0x22, 0x29,
0xe9, 0xa3, 0xda, 0x60, 0x29, 0x0f, 0x43, 0xfd, 0x10, 0x6f, 0xc3, 0x21, 0x12, 0x86, 0x76, 0xcb,
0xa5, 0x96, 0xe4, 0x55, 0x98, 0x98, 0x57, 0xff, 0xa7, 0x71, 0x43, 0x85, 0xbf, 0x21, 0xf6, 0x5b,
0x92, 0xfa, 0x57, 0x10, 0x1c, 0x1b, 0xca, 0x24, 0x89, 0x2b, 0x94, 0x39, 0x47, 0xaa, 0x50, 0x0e,
0xcd, 0x36, 0xb5, 0xba, 0x8e, 0x2c, 0x15, 0x12, 0x9a, 0xfd, 0x66, 0x75, 0xe3, 0xdd, 0x17, 0xe7,
0x58, 0x42, 0xe3, 0x93, 0x00, 0x1d, 0xe2, 0x76, 0x89, 0xc3, 0x21, 0xcc, 0x71, 0x08, 0x99, 0x15,
0x7d, 0x19, 0xaa, 0xc3, 0x5c, 0x47, 0x74, 0xef, 0xde, 0x45, 0x70, 0x50, 0xa6, 0x5c, 0xb1, 0xbb,
0xab, 0x70, 0x28, 0x63, 0x86, 0x1b, 0xe9, 0x46, 0xf7, 0x2f, 0x8f, 0x49, 0xa7, 0xd2, 0x4b, 0x8a,
0xea, 0x60, 0xa5, 0xa7, 0x8c, 0x46, 0x26, 0x3e, 0x70, 0xd1, 0x8c, 0x6e, 0x06, 0x5f, 0x06, 0xed,
0x3a, 0x71, 0x49, 0x8b, 0x5a, 0x89, 0xda, 0x89, 0x8b, 0x7d, 0x21, 0xdb, 0x86, 0x9a, 0xba, 0xe9,
0x93, 0x14, 0xd1, 0x76, 0xb3, 0x29, 0x5b, 0x5a, 0xaf, 0x17, 0x54, 0x3f, 0xe7, 0x33, 0xab, 0x1d,
0xdb, 0xe2, 0x2f, 0xc5, 0xe6, 0xd7, 0x60, 0x41, 0xa8, 0x22, 0x13, 0x94, 0x20, 0xa7, 0x0b, 0x31,
0xec, 0xc3, 0x92, 0x63, 0xf7, 0x68, 0xa2, 0xb5, 0x36, 0x37, 0x73, 0x25, 0x55, 0x01, 0xcc, 0x91,
0x22, 0x12, 0xb4, 0x68, 0x74, 0x3d, 0xe9, 0x38, 0x95, 0x78, 0x8b, 0xa3, 0x7f, 0x59, 0xff, 0xa1,
0xda, 0x9b, 0x57, 0xcd, 0xf2, 0xbf, 0xdb, 0x1e, 0x5e, 0x6b, 0x78, 0x96, 0xdd, 0xb4, 0x69, 0x7c,
0x5f, 0x2f, 0x1b, 0x09, 0xad, 0x07, 0x50, 0xde, 0xb6, 0xdd, 0xdd, 0x2d, 0xb7, 0xe9, 0x31, 0x67,
0x8d, 0xec, 0xc8, 0x91, 0x3b, 0x14, 0x13, 0xf8, 0x30, 0x14, 0xbb, 0x81, 0x23, 0x82, 0x97, 0x3d,
0xe2, 0x15, 0xa8, 0x58, 0x34, 0x34, 0x03, 0xdb, 0x17, 0xa1, 0xcb, 0x67, 0x3c, 0x99, 0x25, 0x16,
0x42, 0xb6, 0xe9, 0xb9, 0x9b, 0x0e, 0x09, 0x43, 0x59, 0x59, 0x24, 0x0b, 0xfa, 0x63, 0xb0, 0xc4,
0x64, 0xa6, 0x1e, 0x7a, 0x4e, 0x35, 0xc1, 0x31, 0x45, 0x35, 0x09, 0x4f, 0x3a, 0x1b, 0x81, 0x7b,
0x58, 0x41, 0x77, 0xd9, 0xf7, 0x05, 0x93, 0x09, 0x6f, 0x17, 0xc5, 0x61, 0x85, 0xd1, 0xd0, 0x01,
0x46, 0xe3, 0xdd, 0xb3, 0x80, 0xfb, 0x36, 0xce, 0x36, 0x29, 0xfe, 0x26, 0x82, 0x39, 0x26, 0x1a,
0xdf, 0x37, 0x2a, 0xa3, 0x72, 0x5f, 0xaf, 0xce, 0xae, 0x3b, 0xc5, 0xa4, 0xe9, 0xcb, 0xaf, 0xfc,
0xf5, 0xef, 0xdf, 0x2a, 0x1c, 0xc7, 0x47, 0xf9, 0x40, 0xbb, 0x77, 0x31, 0x3b, 0x5c, 0x0e, 0xf1,
0xab, 0x08, 0xb0, 0x28, 0x70, 0x33, 0x23, 0x3f, 0x7c, 0x6e, 0x14, 0xc4, 0x21, 0xa3, 0xc1, 0xea,
0x7d, 0x99, 0x82, 0xa0, 0x66, 0x7a, 0x01, 0x65, 0xc7, 0x3f, 0x7f, 0x81, 0x03, 0x58, 0xe3, 0x00,
0x4e, 0x63, 0x7d, 0x18, 0x80, 0xfa, 0x4b, 0xcc, 0xa2, 0x2f, 0xd7, 0x69, 0x2c, 0xf7, 0x0d, 0x04,
0xa5, 0xdb, 0xfc, 0x62, 0x3f, 0xc6, 0x48, 0x3b, 0x33, 0x33, 0x12, 0x17, 0xc7, 0xd1, 0xea, 0xa7,
0x38, 0xd2, 0xfb, 0xf0, 0x09, 0x89, 0x34, 0x8c, 0x02, 0x4a, 0x3a, 0x0a, 0xe0, 0x0b, 0x08, 0xbf,
0x85, 0x60, 0x3e, 0x9e, 0xe8, 0xe0, 0x33, 0xa3, 0x50, 0x2a, 0x13, 0x9f, 0xea, 0xec, 0xc6, 0x23,
0xfa, 0x83, 0x1c, 0xe3, 0x29, 0x7d, 0xe8, 0x76, 0x6e, 0x28, 0xc3, 0x93, 0xd7, 0x11, 0x14, 0xaf,
0xd1, 0xb1, 0xfe, 0x36, 0x43, 0x70, 0x03, 0x06, 0x1c, 0xb2, 0xd5, 0xf8, 0x4d, 0x04, 0xf7, 0x5e,
0xa3, 0xd1, 0xf0, 0xca, 0x06, 0xaf, 0x8e, 0x2f, 0x37, 0x84, 0xdb, 0x9d, 0x9b, 0xe0, 0xcd, 0xe4,
0x48, 0xaf, 0x73, 0x64, 0x0f, 0xe2, 0xb3, 0x79, 0x4e, 0x18, 0xee, 0xb9, 0xe6, 0x8b, 0x02, 0xc7,
0x1f, 0x11, 0x1c, 0xee, 0x1f, 0xed, 0x63, 0xbd, 0xef, 0x7a, 0x39, 0x64, 0xf2, 0x5f, 0xbd, 0x31,
0x6d, 0x06, 0x56, 0x99, 0xea, 0x97, 0x39, 0xf2, 0x47, 0xf1, 0x23, 0x79, 0xc8, 0x93, 0xf6, 0x78,
0xfd, 0x25, 0xf9, 0xf8, 0x32, 0xff, 0x33, 0x14, 0x0e, 0xfb, 0x4f, 0x08, 0x8e, 0x4a, 0xbe, 0x9b,
0x6d, 0x12, 0x44, 0x57, 0x28, 0xbb, 0x1c, 0x85, 0x13, 0xe9, 0x33, 0xe5, 0x89, 0x92, 0x95, 0xa7,
0x5f, 0xe5, 0xba, 0x3c, 0x81, 0x1f, 0xdf, 0xb7, 0x2e, 0x26, 0x63, 0x63, 0x09, 0xd8, 0x6f, 0x23,
0x38, 0x78, 0x8d, 0x46, 0xcf, 0x6c, 0x6e, 0xed, 0x6b, 0x67, 0xa6, 0x74, 0xf4, 0x8c, 0x38, 0xfd,
0x0a, 0x57, 0xe4, 0x13, 0xf8, 0xb1, 0x7d, 0x2b, 0xe2, 0x99, 0x76, 0xb2, 0x2f, 0xaf, 0x20, 0x38,
0x70, 0x2d, 0x73, 0xe4, 0x8f, 0x4e, 0x27, 0xca, 0xf8, 0xba, 0xba, 0x5c, 0xcb, 0xfc, 0x15, 0x8f,
0xfc, 0x29, 0x71, 0xf5, 0x75, 0x8e, 0xed, 0x2c, 0x3e, 0x93, 0x87, 0x2d, 0x1d, 0x6f, 0xbd, 0x81,
0xe0, 0x58, 0x16, 0x44, 0x3a, 0xf6, 0xff, 0xe8, 0xfe, 0x86, 0xe9, 0x62, 0x24, 0x3f, 0x06, 0x5d,
0x83, 0xa3, 0x3b, 0xaf, 0x0f, 0x0f, 0xc4, 0xce, 0x00, 0x8a, 0x0d, 0xb4, 0xb6, 0x8a, 0xf0, 0xef,
0x10, 0xcc, 0xc7, 0x93, 0x9e, 0xd1, 0x36, 0x52, 0xc6, 0xd4, 0xb3, 0xcc, 0x6a, 0xc2, 0x6b, 0xab,
0x17, 0x86, 0x1b, 0x34, 0xfb, 0xbd, 0xdc, 0xda, 0x1a, 0xb7, 0xb2, 0x9a, 0x8e, 0x7f, 0x89, 0x00,
0xd2, 0x69, 0x15, 0x7e, 0x30, 0x5f, 0x8f, 0xcc, 0x44, 0xab, 0x3a, 0xdb, 0x79, 0x95, 0x5e, 0xe3,
0xfa, 0xac, 0x56, 0x57, 0x72, 0x73, 0xa1, 0x4f, 0xcd, 0x8d, 0x78, 0xb2, 0xf5, 0x03, 0x04, 0x25,
0x3e, 0x24, 0xc0, 0xa7, 0x47, 0x61, 0xce, 0xce, 0x10, 0x66, 0x69, 0xfa, 0x07, 0x38, 0xd4, 0x95,
0x46, 0xde, 0x81, 0xb2, 0x81, 0xd6, 0x70, 0x0f, 0xe6, 0xe3, 0xb6, 0xfc, 0x68, 0xf7, 0x50, 0xda,
0xf6, 0xd5, 0x95, 0x9c, 0x02, 0x27, 0x76, 0x54, 0x71, 0x96, 0xad, 0x8d, 0x3b, 0xcb, 0xe6, 0xd8,
0x71, 0x83, 0x4f, 0xe5, 0x1d, 0x46, 0xff, 0x05, 0xc3, 0x9c, 0xe3, 0xe8, 0xce, 0xe8, 0x2b, 0xe3,
0xce, 0x33, 0x66, 0x9d, 0x6f, 0x23, 0x38, 0xdc, 0x7f, 0xbf, 0xc3, 0x27, 0x86, 0xb6, 0x4a, 0xc5,
0xd9, 0xaa, 0x5a, 0x71, 0xd4, 0xdd, 0x50, 0xff, 0x24, 0x47, 0xb1, 0x81, 0x1f, 0x1e, 0x1b, 0x19,
0x37, 0x64, 0xd6, 0x61, 0x8c, 0xd6, 0xd3, 0xd1, 0xfb, 0x8f, 0x10, 0x1c, 0x54, 0x6f, 0x36, 0xa3,
0x6b, 0xcf, 0x21, 0x17, 0xc3, 0x6a, 0x6d, 0xb2, 0x97, 0x13, 0xc4, 0x1f, 0xe7, 0x88, 0x2f, 0xe2,
0xfa, 0x48, 0xc4, 0x31, 0xd2, 0xf8, 0x0f, 0x27, 0xd7, 0x43, 0xdb, 0xa2, 0xeb, 0x16, 0x43, 0xf5,
0x2b, 0x04, 0x07, 0xa4, 0x01, 0x6e, 0x05, 0x94, 0xe6, 0xdb, 0x6f, 0x76, 0x11, 0xcb, 0x64, 0xe9,
0x8f, 0x71, 0xd4, 0x1f, 0xc3, 0x97, 0x26, 0xb4, 0xb3, 0xb4, 0xef, 0x7a, 0xc4, 0x90, 0xfe, 0x1e,
0xc1, 0x91, 0xdb, 0x71, 0x80, 0x7e, 0x40, 0xf8, 0x37, 0x39, 0xfe, 0xc7, 0xf1, 0xa3, 0x39, 0x85,
0xf5, 0x38, 0x35, 0x2e, 0x20, 0xfc, 0x73, 0x04, 0x65, 0x39, 0x5b, 0xc6, 0x67, 0x47, 0x46, 0xb0,
0x3a, 0x7d, 0x9e, 0x65, 0xd4, 0x89, 0x2a, 0x52, 0x3f, 0x9d, 0x7b, 0xec, 0x0b, 0xf9, 0x2c, 0xf2,
0x5e, 0x47, 0x80, 0x93, 0xfe, 0x52, 0xd2, 0x71, 0xc2, 0x0f, 0x28, 0xa2, 0x46, 0x36, 0x31, 0xab,
0x67, 0xc7, 0xbe, 0xa7, 0x9e, 0xf9, 0x6b, 0xb9, 0x67, 0xbe, 0x97, 0xc8, 0x7f, 0x0d, 0x41, 0xe5,
0x1a, 0x4d, 0x2e, 0x7d, 0x39, 0xb6, 0x54, 0x47, 0xe3, 0xd5, 0xd5, 0xf1, 0x2f, 0x0a, 0x44, 0xe7,
0x39, 0xa2, 0x07, 0x70, 0xbe, 0xa9, 0x24, 0x80, 0xef, 0x20, 0x58, 0xba, 0x99, 0x75, 0x51, 0x7c,
0x7e, 0x9c, 0x24, 0xe5, 0xc8, 0x99, 0x1c, 0xd7, 0x43, 0x1c, 0xd7, 0xba, 0x3e, 0x11, 0xae, 0x0d,
0x31, 0x65, 0xfe, 0x1e, 0x8a, 0xbb, 0x06, 0x7d, 0x93, 0xa1, 0xff, 0xd4, 0x6e, 0x39, 0x03, 0x26,
0xfd, 0x12, 0xc7, 0x57, 0xc3, 0xe7, 0x27, 0xc1, 0x57, 0x17, 0xe3, 0x22, 0xfc, 0x5d, 0x04, 0x47,
0xf8, 0x68, 0x30, 0xcb, 0x18, 0xe7, 0x4d, 0xc3, 0xd2, 0x41, 0xe2, 0x04, 0x67, 0xe1, 0x13, 0x71,
0xfe, 0xd1, 0xf7, 0x05, 0x6a, 0x43, 0x0c, 0xfd, 0xbe, 0x56, 0x40, 0x6c, 0x7f, 0xef, 0x19, 0xc0,
0xf7, 0x5c, 0xa3, 0xcf, 0x80, 0xa3, 0x47, 0x9d, 0x13, 0x60, 0xdc, 0xe0, 0x18, 0x2f, 0xe9, 0xf5,
0xfd, 0x60, 0xac, 0xf7, 0x1a, 0x2c, 0x4c, 0xbf, 0x8e, 0xe0, 0xa0, 0xac, 0x0f, 0x84, 0xff, 0xad,
0x8f, 0xdb, 0xda, 0xfd, 0xd6, 0x13, 0x22, 0x20, 0xd6, 0x26, 0x0b, 0x88, 0xb7, 0x10, 0x2c, 0x88,
0xc9, 0x5d, 0x4e, 0xd5, 0x95, 0x19, 0xed, 0x55, 0xfb, 0xda, 0x5e, 0x62, 0xb4, 0xa3, 0x7f, 0x8e,
0x8b, 0x7d, 0x16, 0xe7, 0x9a, 0xc5, 0xf7, 0xac, 0xb0, 0xfe, 0x92, 0x98, 0xab, 0xbc, 0x5c, 0x77,
0xbc, 0x56, 0xf8, 0xbc, 0x8e, 0x73, 0x6b, 0x0b, 0xf6, 0xce, 0x05, 0x84, 0x23, 0x58, 0x64, 0xee,
0xcb, 0x7b, 0x69, 0x78, 0xa5, 0xaf, 0xf3, 0x36, 0xd0, 0x66, 0xab, 0x56, 0x07, 0x7a, 0x73, 0x69,
0x31, 0x21, 0x3a, 0x1b, 0xf8, 0xfe, 0x5c, 0xb1, 0x5c, 0xd0, 0xab, 0x08, 0x8e, 0x64, 0xe3, 0x31,
0x16, 0x3f, 0x71, 0x34, 0xe6, 0xa1, 0x10, 0xf7, 0x13, 0xbc, 0x36, 0x91, 0x1b, 0x71, 0x38, 0x4f,
0x3e, 0xf5, 0x87, 0x77, 0x4e, 0xa2, 0x3f, 0xbf, 0x73, 0x12, 0xfd, 0xed, 0x9d, 0x93, 0xe8, 0xf9,
0x87, 0x27, 0xfb, 0x2f, 0x0f, 0xd3, 0xb1, 0xa9, 0x1b, 0x65, 0xd9, 0xff, 0x3b, 0x00, 0x00, 0xff,
0xff, 0xf3, 0x23, 0xc0, 0x98, 0xcb, 0x32, 0x00, 0x00,
// 3024 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x5b, 0xcf, 0x8f, 0x1c, 0x47,
0xf5, 0xff, 0xd6, 0xcc, 0xce, 0xee, 0xec, 0x1b, 0xaf, 0x7f, 0x54, 0x6c, 0xa7, 0x33, 0xde, 0xf8,
0xbb, 0x69, 0xdb, 0xf1, 0x66, 0xed, 0x9d, 0xb1, 0x27, 0x06, 0x92, 0x4d, 0x42, 0x70, 0xd6, 0x8e,
0xb3, 0xb0, 0x76, 0x4c, 0xaf, 0x13, 0xa3, 0x70, 0x80, 0x4a, 0x77, 0xcd, 0x4c, 0xb3, 0x3d, 0xdd,
0xed, 0xee, 0x9e, 0x09, 0xab, 0x90, 0x4b, 0x10, 0x88, 0x03, 0x0a, 0x02, 0x72, 0xe0, 0xc0, 0xcf,
0x44, 0x41, 0x08, 0x81, 0xb8, 0x20, 0x84, 0x84, 0x90, 0xe0, 0x10, 0x04, 0x07, 0x24, 0x04, 0xff,
0x00, 0x8a, 0x10, 0x42, 0x1c, 0xc8, 0x25, 0x67, 0x84, 0xaa, 0xba, 0xaa, 0xbb, 0x6b, 0x7e, 0xf4,
0xcc, 0x32, 0x03, 0xb1, 0xc4, 0xad, 0x5f, 0x4d, 0xf7, 0x7b, 0x9f, 0xf7, 0xea, 0xbd, 0x57, 0xaf,
0xde, 0xdb, 0x85, 0xd3, 0x21, 0x0d, 0x7a, 0x34, 0xa8, 0x13, 0xdf, 0x77, 0x6c, 0x93, 0x44, 0xb6,
0xe7, 0x66, 0x9f, 0x6b, 0x7e, 0xe0, 0x45, 0x1e, 0xae, 0x64, 0x96, 0xaa, 0xcb, 0x2d, 0xcf, 0x6b,
0x39, 0xb4, 0x4e, 0x7c, 0xbb, 0x4e, 0x5c, 0xd7, 0x8b, 0xf8, 0x72, 0x18, 0xbf, 0x9a, 0xfc, 0xca,
0xa9, 0x17, 0xbb, 0xcd, 0x7a, 0x18, 0x05, 0x5d, 0x33, 0x12, 0xbf, 0x5e, 0xda, 0x7d, 0x24, 0xac,
0xd9, 0x1e, 0xfb, 0xb6, 0x43, 0xcc, 0xb6, 0xed, 0xd2, 0x60, 0xaf, 0xee, 0xef, 0xb6, 0xd8, 0x42,
0x58, 0xef, 0xd0, 0x88, 0xd4, 0x7b, 0x17, 0xeb, 0x2d, 0xea, 0xd2, 0x80, 0x44, 0xd4, 0x12, 0x5f,
0x6d, 0xb7, 0xec, 0xa8, 0xdd, 0x7d, 0xb1, 0x66, 0x7a, 0x9d, 0x3a, 0x09, 0x5a, 0x9e, 0x1f, 0x78,
0x9f, 0xe1, 0x0f, 0xeb, 0xa6, 0x55, 0xef, 0x3d, 0x9c, 0x32, 0xc8, 0x6a, 0xd1, 0xbb, 0x48, 0x1c,
0xbf, 0x4d, 0x06, 0xb9, 0x5d, 0x1d, 0xc3, 0x2d, 0xa0, 0xbe, 0x27, 0xac, 0xc2, 0x1f, 0xed, 0xc8,
0x0b, 0xf6, 0x32, 0x8f, 0x31, 0x1b, 0xfd, 0x3d, 0x04, 0x87, 0x2f, 0xa7, 0xf2, 0x3e, 0xde, 0xa5,
0xc1, 0x1e, 0xc6, 0x30, 0xe7, 0x92, 0x0e, 0xd5, 0xd0, 0x0a, 0x5a, 0x5d, 0x34, 0xf8, 0x33, 0xd6,
0x60, 0x21, 0xa0, 0xcd, 0x80, 0x86, 0x6d, 0xad, 0xc0, 0x97, 0x25, 0x89, 0xab, 0x50, 0x66, 0xc2,
0xa9, 0x19, 0x85, 0x5a, 0x71, 0xa5, 0xb8, 0xba, 0x68, 0x24, 0x34, 0x5e, 0x85, 0x43, 0x01, 0x0d,
0xbd, 0x6e, 0x60, 0xd2, 0xe7, 0x69, 0x10, 0xda, 0x9e, 0xab, 0xcd, 0xf1, 0xaf, 0xfb, 0x97, 0x19,
0x97, 0x90, 0x3a, 0xd4, 0x8c, 0xbc, 0x40, 0x2b, 0xf1, 0x57, 0x12, 0x9a, 0xe1, 0x61, 0xc0, 0xb5,
0xf9, 0x18, 0x0f, 0x7b, 0xc6, 0x3a, 0x1c, 0x20, 0xbe, 0x7f, 0x83, 0x74, 0x68, 0xe8, 0x13, 0x93,
0x6a, 0x0b, 0xfc, 0x37, 0x65, 0x8d, 0x61, 0x16, 0x48, 0xb4, 0x32, 0x07, 0x26, 0x49, 0x7d, 0x13,
0x16, 0x6f, 0x78, 0x16, 0x1d, 0xad, 0x6e, 0x3f, 0xfb, 0xc2, 0x20, 0x7b, 0xfd, 0x6d, 0x04, 0xc7,
0x0c, 0xda, 0xb3, 0x19, 0xfe, 0xeb, 0x34, 0x22, 0x16, 0x89, 0x48, 0x3f, 0xc7, 0x42, 0xc2, 0xb1,
0x0a, 0xe5, 0x40, 0xbc, 0xac, 0x15, 0xf8, 0x7a, 0x42, 0x0f, 0x48, 0x2b, 0xe6, 0x2b, 0x13, 0x9b,
0x50, 0x92, 0x78, 0x05, 0x2a, 0xb1, 0x2d, 0xb7, 0x5c, 0x8b, 0x7e, 0x96, 0x5b, 0xaf, 0x64, 0x64,
0x97, 0xf0, 0x32, 0x2c, 0xf6, 0x62, 0x3b, 0x6f, 0x59, 0xdc, 0x8a, 0x25, 0x23, 0x5d, 0xd0, 0xff,
0x8a, 0xe0, 0x64, 0xc6, 0x07, 0x0c, 0xb1, 0x33, 0x57, 0x7b, 0xd4, 0x8d, 0xc2, 0xd1, 0x0a, 0x9d,
0x87, 0x23, 0x72, 0x13, 0xfb, 0xed, 0x34, 0xf8, 0x03, 0x53, 0x31, 0xbb, 0x28, 0x55, 0xcc, 0xae,
0x31, 0x45, 0x24, 0xfd, 0xdc, 0xd6, 0x15, 0xa1, 0x66, 0x76, 0x69, 0xc0, 0x50, 0xa5, 0x7c, 0x43,
0xcd, 0x2b, 0x86, 0xd2, 0xff, 0x8e, 0x40, 0xcb, 0x28, 0x7a, 0x9d, 0xb8, 0x76, 0x93, 0x86, 0xd1,
0xa4, 0x7b, 0x86, 0x66, 0xb8, 0x67, 0xab, 0x70, 0x28, 0xd6, 0xea, 0x26, 0x8b, 0x47, 0x96, 0x79,
0xb4, 0xd2, 0x4a, 0x71, 0xb5, 0x68, 0xf4, 0x2f, 0xb3, 0xbd, 0x93, 0x32, 0x43, 0x6d, 0x9e, 0xbb,
0x71, 0xba, 0xc0, 0x24, 0xb8, 0xde, 0x26, 0x31, 0xdb, 0x71, 0x04, 0x94, 0x0d, 0x49, 0xea, 0x0f,
0xc0, 0xe2, 0xd3, 0xb6, 0x43, 0x37, 0xdb, 0x5d, 0x77, 0x17, 0x1f, 0x85, 0x92, 0xc9, 0x1e, 0xb8,
0x76, 0x07, 0x8c, 0x98, 0xd0, 0xbf, 0x8a, 0xe0, 0x81, 0x51, 0xf6, 0xb8, 0x6d, 0x47, 0x6d, 0xf6,
0x7d, 0x38, 0xca, 0x30, 0x66, 0x9b, 0x9a, 0xbb, 0x61, 0xb7, 0x23, 0x9d, 0x59, 0xd2, 0xd3, 0x19,
0x46, 0xff, 0x21, 0x82, 0xd5, 0xb1, 0x98, 0x6e, 0x07, 0xc4, 0xf7, 0x69, 0x80, 0x9f, 0x86, 0xd2,
0x1d, 0xf6, 0x03, 0x0f, 0xdd, 0x4a, 0xa3, 0x56, 0xcb, 0x26, 0xfd, 0xb1, 0x5c, 0x9e, 0xf9, 0x3f,
0x23, 0xfe, 0x1c, 0xd7, 0xa4, 0x79, 0x0a, 0x9c, 0xcf, 0x71, 0x85, 0x4f, 0x62, 0x45, 0xf6, 0x3e,
0x7f, 0xed, 0xa9, 0x79, 0x98, 0xf3, 0x49, 0x10, 0xe9, 0xc7, 0xe0, 0x1e, 0x35, 0x70, 0x7c, 0xcf,
0x0d, 0xa9, 0xfe, 0x0b, 0xd5, 0xcf, 0x36, 0x03, 0x4a, 0x22, 0x6a, 0xd0, 0x3b, 0x5d, 0x1a, 0x46,
0x78, 0x17, 0xb2, 0xe7, 0x10, 0xb7, 0x6a, 0xa5, 0xb1, 0x55, 0x4b, 0xd3, 0x79, 0x4d, 0xa6, 0x73,
0xfe, 0xf0, 0x29, 0xd3, 0xaa, 0xf5, 0x1e, 0xae, 0xf9, 0xbb, 0xad, 0x1a, 0x3b, 0x1c, 0x14, 0x64,
0xf2, 0x70, 0xc8, 0xaa, 0x6a, 0x64, 0xb9, 0xe3, 0xe3, 0x30, 0xdf, 0xf5, 0x43, 0x1a, 0x44, 0x5c,
0xb3, 0xb2, 0x21, 0x28, 0xb6, 0x7f, 0x3d, 0xe2, 0xd8, 0x16, 0x89, 0xe2, 0xfd, 0x29, 0x1b, 0x09,
0xad, 0xff, 0x52, 0x45, 0xff, 0x9c, 0x6f, 0xbd, 0x5f, 0xe8, 0xb3, 0x28, 0x0b, 0x2a, 0xca, 0xac,
0x07, 0x15, 0x55, 0x0f, 0xfa, 0xa9, 0x8a, 0xff, 0x0a, 0x75, 0x68, 0x8a, 0x7f, 0x98, 0x33, 0x6b,
0xb0, 0x60, 0x92, 0xd0, 0x24, 0x96, 0x94, 0x22, 0x49, 0x96, 0xe2, 0xfc, 0xc0, 0xf3, 0x49, 0x8b,
0x73, 0xba, 0xe9, 0x39, 0xb6, 0xb9, 0x27, 0xc4, 0x0d, 0xfe, 0x30, 0xe0, 0xf8, 0x73, 0xf9, 0x8e,
0x5f, 0x52, 0x61, 0x9f, 0x82, 0xca, 0xce, 0x9e, 0x6b, 0x3e, 0xeb, 0xc7, 0x61, 0x7f, 0x14, 0x4a,
0x76, 0x44, 0x3b, 0xa1, 0x86, 0x78, 0xc8, 0xc7, 0x84, 0xfe, 0xcf, 0x12, 0x1c, 0xcf, 0xe8, 0xc6,
0x3e, 0xc8, 0xd3, 0x2c, 0x2f, 0x7f, 0x1d, 0x87, 0x79, 0x2b, 0xd8, 0x33, 0xba, 0xae, 0x70, 0x00,
0x41, 0x31, 0xc1, 0x7e, 0xd0, 0x75, 0x63, 0xf8, 0x65, 0x23, 0x26, 0x70, 0x13, 0xca, 0x61, 0xc4,
0xea, 0x8f, 0xd6, 0x1e, 0x07, 0x5e, 0x69, 0x7c, 0x74, 0xba, 0x4d, 0x67, 0xd0, 0x77, 0x04, 0x47,
0x23, 0xe1, 0x8d, 0xef, 0xb0, 0x6c, 0x17, 0xa7, 0xc0, 0x50, 0x5b, 0x58, 0x29, 0xae, 0x56, 0x1a,
0x3b, 0xd3, 0x0b, 0x7a, 0xd6, 0x67, 0xb5, 0x53, 0xe6, 0x6c, 0x33, 0x52, 0x29, 0x2c, 0xc1, 0x76,
0x44, 0x7e, 0x08, 0x45, 0x9d, 0x90, 0x2e, 0xe0, 0x4f, 0x40, 0xc9, 0x76, 0x9b, 0x5e, 0xa8, 0x2d,
0x72, 0x30, 0x4f, 0x4d, 0x07, 0x66, 0xcb, 0x6d, 0x7a, 0x46, 0xcc, 0x10, 0xdf, 0x81, 0xa5, 0x80,
0x46, 0xc1, 0x9e, 0xb4, 0x82, 0x06, 0xdc, 0xae, 0x1f, 0x9b, 0x4e, 0x82, 0x91, 0x65, 0x69, 0xa8,
0x12, 0xf0, 0x06, 0x54, 0xc2, 0xd4, 0xc7, 0xb4, 0x0a, 0x17, 0xa8, 0x29, 0x8c, 0x32, 0x3e, 0x68,
0x64, 0x5f, 0x1e, 0xf0, 0xee, 0x03, 0xf9, 0xde, 0xbd, 0x34, 0xf6, 0xbc, 0x3b, 0x38, 0xc1, 0x79,
0x77, 0xa8, 0xef, 0xbc, 0xd3, 0xdf, 0x45, 0xb0, 0x3c, 0x90, 0x9c, 0x76, 0x7c, 0x9a, 0x1b, 0x06,
0x04, 0xe6, 0x42, 0x9f, 0x9a, 0xfc, 0xa4, 0xaa, 0x34, 0xae, 0xcf, 0x2c, 0x5b, 0x71, 0xb9, 0x9c,
0x75, 0x5e, 0x42, 0x9d, 0x32, 0x2f, 0x7c, 0x07, 0xc1, 0xbd, 0x19, 0x99, 0x37, 0x49, 0x64, 0xb6,
0xf3, 0x94, 0x65, 0xf1, 0xcb, 0xde, 0x11, 0xe7, 0x72, 0x4c, 0x30, 0xab, 0xf2, 0x87, 0x5b, 0x7b,
0x3e, 0x03, 0xc8, 0x7e, 0x49, 0x17, 0xa6, 0x2c, 0xab, 0x7e, 0x84, 0xa0, 0x9a, 0xcd, 0xe1, 0x9e,
0xe3, 0xbc, 0x48, 0xcc, 0xdd, 0x3c, 0x90, 0x07, 0xa1, 0x60, 0x5b, 0x1c, 0x61, 0xd1, 0x28, 0xd8,
0xd6, 0x3e, 0x93, 0x51, 0x3f, 0xdc, 0xf9, 0x7c, 0xb8, 0x0b, 0x2a, 0xdc, 0xf7, 0xfa, 0xe0, 0xca,
0x94, 0x90, 0x03, 0x77, 0x19, 0x16, 0xdd, 0xbe, 0x12, 0x37, 0x5d, 0x18, 0x52, 0xda, 0x16, 0x06,
0x4a, 0x5b, 0x0d, 0x16, 0x7a, 0xc9, 0x05, 0x88, 0xfd, 0x2c, 0x49, 0xa6, 0x62, 0x2b, 0xf0, 0xba,
0xbe, 0x30, 0x7a, 0x4c, 0x30, 0x14, 0xbb, 0xb6, 0xcb, 0x8a, 0x75, 0x8e, 0x82, 0x3d, 0xef, 0xff,
0xca, 0xa3, 0xa8, 0xfd, 0xe3, 0x02, 0xfc, 0xff, 0x10, 0xb5, 0xc7, 0xfa, 0xd3, 0xdd, 0xa1, 0x7b,
0xe2, 0xd5, 0x0b, 0x23, 0xbd, 0xba, 0x3c, 0xce, 0xab, 0x17, 0xf3, 0xed, 0x05, 0xaa, 0xbd, 0x7e,
0x50, 0x80, 0x95, 0x21, 0xf6, 0x1a, 0x5f, 0x4e, 0xdc, 0x35, 0x06, 0x6b, 0x7a, 0x81, 0x29, 0xaf,
0x05, 0x31, 0xc1, 0xe2, 0xcc, 0x0b, 0xfc, 0x36, 0x71, 0xb9, 0x77, 0x94, 0x0d, 0x41, 0x4d, 0x69,
0xaa, 0x2b, 0xa0, 0x49, 0xf3, 0x5c, 0x36, 0xe3, 0x24, 0x15, 0x90, 0x0e, 0x8d, 0x68, 0x10, 0x8e,
0x4a, 0x51, 0x3d, 0xe2, 0x74, 0xa9, 0x4c, 0x51, 0x9c, 0xd0, 0x5f, 0x2b, 0xf4, 0xb3, 0x31, 0xba,
0xee, 0xdd, 0x6f, 0xe8, 0xe3, 0x30, 0x4f, 0x38, 0x5a, 0xe1, 0x9a, 0x82, 0x1a, 0x30, 0x69, 0x39,
0xdf, 0xa4, 0x8b, 0x8a, 0x49, 0x37, 0x0a, 0x1a, 0xd2, 0xdf, 0x2d, 0x40, 0x75, 0x94, 0x41, 0x9e,
0x6f, 0xfc, 0xaf, 0x99, 0x04, 0x13, 0xd0, 0x82, 0x11, 0x5e, 0xa6, 0x01, 0x2f, 0xce, 0xce, 0x28,
0x27, 0xf6, 0x28, 0x97, 0x34, 0x46, 0xb2, 0xd1, 0xbf, 0x80, 0xe0, 0x84, 0xfa, 0x59, 0xb8, 0x6d,
0x87, 0x91, 0xbc, 0xd8, 0xe1, 0x26, 0x2c, 0xc4, 0xaa, 0xc4, 0x65, 0x79, 0xa5, 0xb1, 0x3d, 0x6d,
0xb1, 0xa6, 0xec, 0xae, 0x64, 0xae, 0x3f, 0x0a, 0x27, 0x86, 0x9e, 0x50, 0x02, 0x46, 0x15, 0xca,
0xb2, 0x40, 0x15, 0xbb, 0x9f, 0xd0, 0xfa, 0x9b, 0x73, 0x6a, 0xb9, 0xe0, 0x59, 0xdb, 0x5e, 0x2b,
0xa7, 0x8b, 0x93, 0xef, 0x31, 0x6c, 0x37, 0x3c, 0x2b, 0xd3, 0xb0, 0x91, 0x24, 0xfb, 0xce, 0xf4,
0xdc, 0x88, 0xd8, 0x2e, 0x0d, 0x44, 0x45, 0x93, 0x2e, 0xb0, 0x9d, 0x0e, 0x6d, 0xd7, 0xa4, 0x3b,
0xd4, 0xf4, 0x5c, 0x2b, 0xe4, 0x2e, 0x53, 0x34, 0x94, 0x35, 0xfc, 0x0c, 0x2c, 0x72, 0xfa, 0x96,
0xdd, 0x89, 0x8f, 0xf0, 0x4a, 0x63, 0xad, 0x16, 0x77, 0x56, 0x6b, 0xd9, 0xce, 0x6a, 0x6a, 0xc3,
0x0e, 0x8d, 0x48, 0xad, 0x77, 0xb1, 0xc6, 0xbe, 0x30, 0xd2, 0x8f, 0x19, 0x96, 0x88, 0xd8, 0xce,
0xb6, 0xed, 0xf2, 0x4b, 0x03, 0x13, 0x95, 0x2e, 0x30, 0x6f, 0x6c, 0x7a, 0x8e, 0xe3, 0xbd, 0x24,
0x73, 0x5e, 0x4c, 0xb1, 0xaf, 0xba, 0x6e, 0x64, 0x3b, 0x5c, 0x7e, 0xec, 0x6b, 0xe9, 0x02, 0xff,
0xca, 0x76, 0x22, 0x1a, 0x88, 0x64, 0x27, 0xa8, 0xc4, 0xdf, 0x2b, 0x71, 0xb3, 0x50, 0xe6, 0xda,
0x38, 0x32, 0x0e, 0x64, 0x23, 0xa3, 0x3f, 0xda, 0x96, 0x86, 0x74, 0xbc, 0x78, 0xef, 0x94, 0xf6,
0x6c, 0xaf, 0xcb, 0xea, 0x61, 0x5e, 0x36, 0x4a, 0x7a, 0x20, 0x5a, 0x0e, 0xe5, 0x47, 0xcb, 0x61,
0x35, 0x5a, 0xf8, 0xad, 0x26, 0x32, 0xdb, 0x9b, 0x24, 0xa4, 0xda, 0x11, 0xce, 0x3a, 0x5d, 0xd0,
0x7f, 0x85, 0xa0, 0xbc, 0xed, 0xb5, 0xae, 0xba, 0x51, 0xb0, 0xc7, 0xef, 0xbf, 0x9e, 0x1b, 0x51,
0x57, 0x7a, 0x93, 0x24, 0xd9, 0x16, 0x45, 0x76, 0x87, 0xee, 0x44, 0xa4, 0xe3, 0x8b, 0xea, 0x79,
0x5f, 0x5b, 0x94, 0x7c, 0xcc, 0xcc, 0xe6, 0x90, 0x30, 0xe2, 0x29, 0xa7, 0x6c, 0xf0, 0x67, 0xa6,
0x60, 0xf2, 0xc2, 0x4e, 0x14, 0x88, 0x7c, 0xa3, 0xac, 0x65, 0x1d, 0xb0, 0x14, 0x63, 0x13, 0xa4,
0xde, 0x81, 0xfb, 0x92, 0x6b, 0xdd, 0x2d, 0x1a, 0x74, 0x6c, 0x97, 0xe4, 0x9f, 0xcb, 0x13, 0xb4,
0x74, 0x73, 0xba, 0x0a, 0x9e, 0x12, 0x92, 0xec, 0x96, 0x74, 0xdb, 0x76, 0x2d, 0xef, 0xa5, 0x9c,
0xd0, 0x9a, 0x4e, 0xe0, 0x1f, 0xd5, 0xae, 0x6c, 0x46, 0x62, 0x92, 0x07, 0x9e, 0x81, 0x25, 0x96,
0x31, 0x7a, 0x54, 0xfc, 0x20, 0x92, 0x92, 0x3e, 0xaa, 0x0d, 0x96, 0xf2, 0x30, 0xd4, 0x0f, 0xf1,
0x36, 0x1c, 0x22, 0x61, 0x68, 0xb7, 0x5c, 0x6a, 0x49, 0x5e, 0x85, 0x89, 0x79, 0xf5, 0x7f, 0x1a,
0x37, 0x54, 0xf8, 0x1b, 0x62, 0xbf, 0x25, 0xa9, 0x7f, 0x1e, 0xc1, 0xb1, 0xa1, 0x4c, 0x92, 0xb8,
0x42, 0x99, 0x73, 0xa4, 0x0a, 0xe5, 0xd0, 0x6c, 0x53, 0xab, 0xeb, 0xc8, 0x52, 0x21, 0xa1, 0xd9,
0x6f, 0x56, 0x37, 0xde, 0x7d, 0x71, 0x8e, 0x25, 0x34, 0x3e, 0x09, 0xd0, 0x21, 0x6e, 0x97, 0x38,
0x1c, 0xc2, 0x1c, 0x87, 0x90, 0x59, 0xd1, 0x97, 0xa1, 0x3a, 0xcc, 0x75, 0x44, 0xf7, 0xee, 0x1f,
0x08, 0x0e, 0xca, 0x94, 0x2b, 0x76, 0x77, 0x15, 0x0e, 0x65, 0xcc, 0x70, 0x23, 0xdd, 0xe8, 0xfe,
0xe5, 0x31, 0xe9, 0x54, 0x7a, 0x49, 0x51, 0x1d, 0xac, 0xf4, 0x94, 0xd1, 0xc8, 0xc4, 0x07, 0x2e,
0x9a, 0xd1, 0xcd, 0xe0, 0x73, 0xa0, 0x5d, 0x27, 0x2e, 0x69, 0x51, 0x2b, 0x51, 0x3b, 0x71, 0xb1,
0x4f, 0x67, 0xdb, 0x50, 0x53, 0x37, 0x7d, 0x92, 0x22, 0xda, 0x6e, 0x36, 0x65, 0x4b, 0xeb, 0xf5,
0x82, 0xea, 0xe7, 0x7c, 0x66, 0xb5, 0x63, 0x5b, 0xfc, 0xa5, 0xd8, 0xfc, 0x1a, 0x2c, 0x08, 0x55,
0x64, 0x82, 0x12, 0xe4, 0x74, 0x21, 0x86, 0x7d, 0x58, 0x72, 0xec, 0x1e, 0x4d, 0xb4, 0xd6, 0xe6,
0x66, 0xae, 0xa4, 0x2a, 0x80, 0x39, 0x52, 0x44, 0x82, 0x16, 0x8d, 0xae, 0x27, 0x1d, 0xa7, 0x12,
0x6f, 0x71, 0xf4, 0x2f, 0xeb, 0xdf, 0x53, 0x7b, 0xf3, 0xaa, 0x59, 0xfe, 0x7b, 0xdb, 0xc3, 0x6b,
0x0d, 0xcf, 0xb2, 0x9b, 0x36, 0x8d, 0xef, 0xeb, 0x65, 0x23, 0xa1, 0xf5, 0x00, 0xca, 0xdb, 0xb6,
0xbb, 0xbb, 0xe5, 0x36, 0x3d, 0xe6, 0xac, 0x91, 0x1d, 0x39, 0x72, 0x87, 0x62, 0x02, 0x1f, 0x86,
0x62, 0x37, 0x70, 0x44, 0xf0, 0xb2, 0x47, 0xbc, 0x02, 0x15, 0x8b, 0x86, 0x66, 0x60, 0xfb, 0x22,
0x74, 0xf9, 0x8c, 0x27, 0xb3, 0xc4, 0x42, 0xc8, 0x36, 0x3d, 0x77, 0xd3, 0x21, 0x61, 0x28, 0x2b,
0x8b, 0x64, 0x41, 0x7f, 0x1c, 0x96, 0x98, 0xcc, 0xd4, 0x43, 0xcf, 0xa9, 0x26, 0x38, 0xa6, 0xa8,
0x26, 0xe1, 0x49, 0x67, 0x23, 0x70, 0x0f, 0x2b, 0xe8, 0x2e, 0xfb, 0xbe, 0x60, 0x32, 0xe1, 0xed,
0xa2, 0x38, 0xac, 0x30, 0x1a, 0x3a, 0xc0, 0x68, 0xfc, 0xed, 0x2c, 0xe0, 0xbe, 0x8d, 0xb3, 0x4d,
0x8a, 0xbf, 0x86, 0x60, 0x8e, 0x89, 0xc6, 0xf7, 0x8f, 0xca, 0xa8, 0xdc, 0xd7, 0xab, 0xb3, 0xeb,
0x4e, 0x31, 0x69, 0xfa, 0xf2, 0xab, 0x7f, 0xfa, 0xcb, 0xd7, 0x0b, 0xc7, 0xf1, 0x51, 0x3e, 0xe8,
0xee, 0x5d, 0xcc, 0x0e, 0x97, 0x43, 0xfc, 0x45, 0x04, 0x58, 0x14, 0xb8, 0x99, 0x91, 0x1f, 0x3e,
0x37, 0x0a, 0xe2, 0x90, 0xd1, 0x60, 0xf5, 0xde, 0x5a, 0x3c, 0x2b, 0xaf, 0xc9, 0x59, 0x79, 0x6d,
0x87, 0xcf, 0xca, 0xf5, 0x35, 0x2e, 0xfa, 0x34, 0xd6, 0x87, 0x89, 0xae, 0xbf, 0xcc, 0x6c, 0xf9,
0x4a, 0x9d, 0xc6, 0x12, 0xdf, 0x40, 0x50, 0xba, 0xcd, 0xaf, 0xf4, 0x63, 0xcc, 0xb3, 0x33, 0x33,
0xf3, 0x70, 0x71, 0x5c, 0x11, 0xfd, 0x14, 0x47, 0x7a, 0x3f, 0x3e, 0x21, 0x91, 0x86, 0x51, 0x40,
0x49, 0x47, 0x01, 0x7c, 0x01, 0xe1, 0xb7, 0x10, 0xcc, 0xc7, 0xb3, 0x1c, 0x7c, 0x66, 0x14, 0x4a,
0x65, 0xd6, 0x53, 0x9d, 0xdd, 0x60, 0x44, 0x7f, 0x88, 0x63, 0x3c, 0xa5, 0x0f, 0xdd, 0xc8, 0x0d,
0x65, 0x6c, 0xf2, 0x3a, 0x82, 0xe2, 0x35, 0x3a, 0xd6, 0xd3, 0x66, 0x08, 0x6e, 0xc0, 0x80, 0x43,
0xb6, 0x1a, 0xbf, 0x89, 0xe0, 0xbe, 0x6b, 0x34, 0x1a, 0x5e, 0xd3, 0xe0, 0xd5, 0xf1, 0x85, 0x86,
0x70, 0xb8, 0x73, 0x13, 0xbc, 0x99, 0x1c, 0xe6, 0x75, 0x8e, 0xec, 0x21, 0x7c, 0x36, 0xcf, 0x09,
0xc3, 0x3d, 0xd7, 0x7c, 0x49, 0xe0, 0xf8, 0x1d, 0x82, 0xc3, 0xfd, 0x43, 0x7d, 0xac, 0xf7, 0x5d,
0x2c, 0x87, 0xcc, 0xfc, 0xab, 0x37, 0xa6, 0xcd, 0xbd, 0x2a, 0x53, 0xfd, 0x32, 0x47, 0xfe, 0x18,
0x7e, 0x34, 0x0f, 0x79, 0xd2, 0x18, 0xaf, 0xbf, 0x2c, 0x1f, 0x5f, 0xe1, 0x7f, 0x80, 0xc2, 0x61,
0xff, 0x1e, 0xc1, 0x51, 0xc9, 0x77, 0xb3, 0x4d, 0x82, 0xe8, 0x0a, 0x65, 0xd7, 0xa2, 0x70, 0x22,
0x7d, 0xa6, 0x3c, 0x4b, 0xb2, 0xf2, 0xf4, 0xab, 0x5c, 0x97, 0x27, 0xf1, 0x13, 0xfb, 0xd6, 0xc5,
0x64, 0x6c, 0x2c, 0x01, 0xfb, 0x6d, 0x04, 0x07, 0xaf, 0xd1, 0xe8, 0xd9, 0xcd, 0xad, 0x7d, 0xed,
0xcc, 0x94, 0x8e, 0x9e, 0x11, 0xa7, 0x5f, 0xe1, 0x8a, 0x7c, 0x18, 0x3f, 0xbe, 0x6f, 0x45, 0x3c,
0xd3, 0x4e, 0xf6, 0xe5, 0x55, 0x04, 0x07, 0xae, 0x65, 0x0e, 0xfb, 0xd1, 0xe9, 0x44, 0x19, 0x5c,
0x57, 0x97, 0x6b, 0x99, 0xbf, 0xdf, 0x91, 0x3f, 0x25, 0xae, 0xbe, 0xce, 0xb1, 0x9d, 0xc5, 0x67,
0xf2, 0xb0, 0xa5, 0x83, 0xad, 0x37, 0x10, 0x1c, 0xcb, 0x82, 0x48, 0x07, 0xfe, 0x1f, 0xd8, 0xdf,
0x18, 0x5d, 0x0c, 0xe3, 0xc7, 0xa0, 0x6b, 0x70, 0x74, 0xe7, 0xf5, 0xe1, 0x81, 0xd8, 0x19, 0x40,
0xb1, 0x81, 0xd6, 0x56, 0x11, 0xfe, 0x35, 0x82, 0xf9, 0x78, 0xc6, 0x33, 0xda, 0x46, 0xca, 0x80,
0x7a, 0x96, 0x59, 0x4d, 0x78, 0x6d, 0xf5, 0xc2, 0x70, 0x83, 0x66, 0xbf, 0x97, 0x5b, 0x5b, 0xe3,
0x56, 0x56, 0xd3, 0xf1, 0xcf, 0x10, 0x40, 0x3a, 0xa7, 0xc2, 0x0f, 0xe5, 0xeb, 0x91, 0x99, 0x65,
0x55, 0x67, 0x3b, 0xa9, 0xd2, 0x6b, 0x5c, 0x9f, 0xd5, 0xea, 0x4a, 0x6e, 0x2e, 0xf4, 0xa9, 0xb9,
0x11, 0xcf, 0xb4, 0xbe, 0x8b, 0xa0, 0xc4, 0xc7, 0x03, 0xf8, 0xf4, 0x28, 0xcc, 0xd9, 0xe9, 0xc1,
0x2c, 0x4d, 0xff, 0x20, 0x87, 0xba, 0xd2, 0xc8, 0x3b, 0x50, 0x36, 0xd0, 0x1a, 0xee, 0xc1, 0x7c,
0xdc, 0x90, 0x1f, 0xed, 0x1e, 0x4a, 0xc3, 0xbe, 0xba, 0x92, 0x53, 0xda, 0xc4, 0x8e, 0x2a, 0xce,
0xb2, 0xb5, 0x71, 0x67, 0xd9, 0x1c, 0x3b, 0x6e, 0xf0, 0xa9, 0xbc, 0xc3, 0xe8, 0x3f, 0x60, 0x98,
0x73, 0x1c, 0xdd, 0x19, 0x7d, 0x65, 0xdc, 0x79, 0xc6, 0xac, 0xf3, 0x0d, 0x04, 0x87, 0xfb, 0x6f,
0x76, 0xf8, 0xc4, 0xd0, 0x26, 0xa9, 0x38, 0x5b, 0x55, 0x2b, 0x8e, 0xba, 0x15, 0xea, 0x1f, 0xe1,
0x28, 0x36, 0xf0, 0x23, 0x63, 0x23, 0xe3, 0x86, 0xcc, 0x3a, 0x8c, 0xd1, 0x7a, 0x3a, 0x74, 0xff,
0x3e, 0x82, 0x83, 0xea, 0x9d, 0x66, 0x74, 0xd5, 0x39, 0xe4, 0x4a, 0x58, 0xad, 0x4d, 0xf6, 0x72,
0x82, 0xf8, 0x43, 0x1c, 0xf1, 0x45, 0x5c, 0x1f, 0x89, 0x38, 0x46, 0x1a, 0xff, 0xc9, 0xe4, 0x7a,
0x68, 0x5b, 0x74, 0xdd, 0x62, 0xa8, 0x7e, 0x8e, 0xe0, 0x80, 0x34, 0xc0, 0xad, 0x80, 0xd2, 0x7c,
0xfb, 0xcd, 0x2e, 0x62, 0x99, 0x2c, 0xfd, 0x71, 0x8e, 0xfa, 0x83, 0xf8, 0xd2, 0x84, 0x76, 0x96,
0xf6, 0x5d, 0x8f, 0x18, 0xd2, 0xdf, 0x20, 0x38, 0x72, 0x3b, 0x0e, 0xd0, 0xf7, 0x09, 0xff, 0x26,
0xc7, 0xff, 0x04, 0x7e, 0x2c, 0xa7, 0xb0, 0x1e, 0xa7, 0xc6, 0x05, 0x84, 0x7f, 0x82, 0xa0, 0x2c,
0xa7, 0xca, 0xf8, 0xec, 0xc8, 0x08, 0x56, 0xe7, 0xce, 0xb3, 0x8c, 0x3a, 0x51, 0x45, 0xea, 0xa7,
0x73, 0x8f, 0x7d, 0x21, 0x9f, 0x45, 0xde, 0xeb, 0x08, 0x70, 0xd2, 0x59, 0x4a, 0x7a, 0x4d, 0xf8,
0x41, 0x45, 0xd4, 0xc8, 0xf6, 0x65, 0xf5, 0xec, 0xd8, 0xf7, 0xd4, 0x33, 0x7f, 0x2d, 0xf7, 0xcc,
0xf7, 0x12, 0xf9, 0xaf, 0x21, 0xa8, 0x5c, 0xa3, 0xc9, 0x75, 0x2f, 0xc7, 0x96, 0xea, 0x50, 0xbc,
0xba, 0x3a, 0xfe, 0x45, 0x81, 0xe8, 0x3c, 0x47, 0xf4, 0x20, 0xce, 0x37, 0x95, 0x04, 0xf0, 0x4d,
0x04, 0x4b, 0x37, 0xb3, 0x2e, 0x8a, 0xcf, 0x8f, 0x93, 0xa4, 0x1c, 0x39, 0x93, 0xe3, 0x7a, 0x98,
0xe3, 0x5a, 0xd7, 0x27, 0xc2, 0xb5, 0x21, 0xe6, 0xcb, 0xdf, 0x46, 0x71, 0xbf, 0xa0, 0x6f, 0x26,
0xf4, 0xef, 0xda, 0x2d, 0x67, 0xb4, 0xa4, 0x5f, 0xe2, 0xf8, 0x6a, 0xf8, 0xfc, 0x24, 0xf8, 0xea,
0x62, 0x50, 0x84, 0xbf, 0x85, 0xe0, 0x08, 0x1f, 0x0a, 0x66, 0x19, 0xe3, 0xbc, 0x39, 0x58, 0x3a,
0x42, 0x9c, 0xe0, 0x2c, 0x7c, 0x32, 0xce, 0x3f, 0xfa, 0xbe, 0x40, 0x6d, 0x88, 0x71, 0xdf, 0x97,
0x0a, 0x88, 0xed, 0xef, 0x3d, 0x03, 0xf8, 0x9e, 0x6f, 0xf4, 0x19, 0x70, 0xf4, 0x90, 0x73, 0x02,
0x8c, 0x1b, 0x1c, 0xe3, 0x25, 0xbd, 0xbe, 0x1f, 0x8c, 0xf5, 0x5e, 0x83, 0x85, 0xe9, 0x57, 0x10,
0x1c, 0x94, 0xf5, 0x81, 0xf0, 0xbf, 0xf5, 0x71, 0x5b, 0xbb, 0xdf, 0x7a, 0x42, 0x04, 0xc4, 0xda,
0x64, 0x01, 0xf1, 0x16, 0x82, 0x05, 0x31, 0xb3, 0xcb, 0xa9, 0xba, 0x32, 0x43, 0xbd, 0x6a, 0x5f,
0xc3, 0x4b, 0x0c, 0x75, 0xf4, 0x4f, 0x72, 0xb1, 0xcf, 0xe1, 0x5c, 0xb3, 0xf8, 0x9e, 0x15, 0xd6,
0x5f, 0x16, 0x13, 0x95, 0x57, 0xea, 0x8e, 0xd7, 0x0a, 0x5f, 0xd0, 0x71, 0x6e, 0x6d, 0xc1, 0xde,
0xb9, 0x80, 0x70, 0x04, 0x8b, 0xcc, 0x7d, 0x79, 0x17, 0x0d, 0xaf, 0xf4, 0xf5, 0xdc, 0x06, 0x1a,
0x6c, 0xd5, 0xea, 0x40, 0x57, 0x2e, 0x2d, 0x26, 0x44, 0x67, 0x03, 0x3f, 0x90, 0x2b, 0x96, 0x0b,
0xfa, 0x32, 0x82, 0x23, 0xd9, 0x78, 0x8c, 0xc5, 0x4f, 0x1c, 0x8d, 0x79, 0x28, 0xc4, 0xfd, 0x04,
0xaf, 0x4d, 0xe4, 0x46, 0x1c, 0xce, 0x53, 0x4f, 0xff, 0xf6, 0x9d, 0x93, 0xe8, 0x0f, 0xef, 0x9c,
0x44, 0x7f, 0x7e, 0xe7, 0x24, 0x7a, 0xe1, 0x91, 0xc9, 0xfe, 0xbf, 0xc3, 0x74, 0x6c, 0xea, 0x46,
0x59, 0xf6, 0xff, 0x0a, 0x00, 0x00, 0xff, 0xff, 0xd3, 0xa7, 0xf4, 0xfb, 0xbf, 0x32, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
@ -3381,7 +3381,7 @@ type ApplicationServiceClient interface {
// List returns list of applications
List(ctx context.Context, in *ApplicationQuery, opts ...grpc.CallOption) (*v1alpha1.ApplicationList, error)
// ListResourceEvents returns a list of event resources
ListResourceEvents(ctx context.Context, in *ApplicationResourceEventsQuery, opts ...grpc.CallOption) (*v11.EventList, error)
ListResourceEvents(ctx context.Context, in *ApplicationResourceEventsQuery, opts ...grpc.CallOption) (*structpb.Struct, error)
// Watch returns stream of application change events
Watch(ctx context.Context, in *ApplicationQuery, opts ...grpc.CallOption) (ApplicationService_WatchClient, error)
// Create creates an application
@ -3462,8 +3462,8 @@ func (c *applicationServiceClient) List(ctx context.Context, in *ApplicationQuer
return out, nil
}
func (c *applicationServiceClient) ListResourceEvents(ctx context.Context, in *ApplicationResourceEventsQuery, opts ...grpc.CallOption) (*v11.EventList, error) {
out := new(v11.EventList)
func (c *applicationServiceClient) ListResourceEvents(ctx context.Context, in *ApplicationResourceEventsQuery, opts ...grpc.CallOption) (*structpb.Struct, error) {
out := new(structpb.Struct)
err := c.cc.Invoke(ctx, "/application.ApplicationService/ListResourceEvents", in, out, opts...)
if err != nil {
return nil, err
@ -3832,7 +3832,7 @@ type ApplicationServiceServer interface {
// List returns list of applications
List(context.Context, *ApplicationQuery) (*v1alpha1.ApplicationList, error)
// ListResourceEvents returns a list of event resources
ListResourceEvents(context.Context, *ApplicationResourceEventsQuery) (*v11.EventList, error)
ListResourceEvents(context.Context, *ApplicationResourceEventsQuery) (*structpb.Struct, error)
// Watch returns stream of application change events
Watch(*ApplicationQuery, ApplicationService_WatchServer) error
// Create creates an application
@ -3903,7 +3903,7 @@ type UnimplementedApplicationServiceServer struct {
func (*UnimplementedApplicationServiceServer) List(ctx context.Context, req *ApplicationQuery) (*v1alpha1.ApplicationList, error) {
return nil, status.Errorf(codes.Unimplemented, "method List not implemented")
}
func (*UnimplementedApplicationServiceServer) ListResourceEvents(ctx context.Context, req *ApplicationResourceEventsQuery) (*v11.EventList, error) {
func (*UnimplementedApplicationServiceServer) ListResourceEvents(ctx context.Context, req *ApplicationResourceEventsQuery) (*structpb.Struct, error) {
return nil, status.Errorf(codes.Unimplemented, "method ListResourceEvents not implemented")
}
func (*UnimplementedApplicationServiceServer) Watch(req *ApplicationQuery, srv ApplicationService_WatchServer) error {

View file

@ -16,8 +16,8 @@ import (
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status"
structpb "google.golang.org/protobuf/types/known/structpb"
io "io"
v1 "k8s.io/api/core/v1"
math "math"
math_bits "math/bits"
)
@ -581,58 +581,57 @@ func init() {
}
var fileDescriptor_eacb9df0ce5738fa = []byte{
// 801 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x96, 0x4b, 0x6b, 0x14, 0x4b,
0x14, 0xc7, 0xa9, 0x4c, 0x32, 0x77, 0x52, 0x09, 0xf7, 0x42, 0xc1, 0x4d, 0xc6, 0xd6, 0x8c, 0x43,
0x43, 0x92, 0x31, 0x71, 0xaa, 0x9d, 0xc4, 0x85, 0xc4, 0x95, 0x2f, 0x42, 0x20, 0x88, 0xf6, 0x48,
0x02, 0xba, 0x90, 0x4e, 0xcf, 0x61, 0xd2, 0x66, 0xa6, 0xbb, 0xad, 0xaa, 0x69, 0x08, 0xc1, 0x8d,
0xe0, 0xc6, 0x8d, 0x0b, 0xd1, 0x0f, 0xa0, 0x1b, 0xf7, 0xba, 0x72, 0x93, 0x85, 0x1b, 0x97, 0x82,
0x5f, 0x40, 0x82, 0x1f, 0x44, 0xaa, 0xba, 0xe7, 0xd1, 0x95, 0x79, 0x04, 0x1c, 0xdd, 0x75, 0x3d,
0xfa, 0xd4, 0xaf, 0xce, 0xf9, 0xd7, 0xbf, 0x0a, 0xaf, 0x70, 0x60, 0x11, 0x30, 0xcb, 0x09, 0xc3,
0x86, 0xe7, 0x3a, 0xc2, 0x0b, 0x7c, 0x0e, 0x42, 0x6b, 0xd2, 0x90, 0x05, 0x22, 0x20, 0xff, 0xa6,
0x7b, 0x8d, 0x0b, 0xf5, 0x20, 0xa8, 0x37, 0xc0, 0x72, 0x42, 0xcf, 0x72, 0x7c, 0x3f, 0x10, 0xf1,
0x48, 0x3c, 0xdb, 0x30, 0x0f, 0xae, 0x71, 0xea, 0x05, 0x6a, 0xd4, 0x0d, 0x18, 0x58, 0x51, 0xc5,
0xaa, 0x83, 0x0f, 0xcc, 0x11, 0x50, 0x4b, 0xe6, 0x6c, 0xd7, 0x3d, 0xb1, 0xdf, 0xda, 0xa3, 0x6e,
0xd0, 0xb4, 0x1c, 0x56, 0x0f, 0x42, 0x16, 0x3c, 0x51, 0x1f, 0x65, 0xb7, 0x66, 0x45, 0xeb, 0x56,
0x78, 0x50, 0x97, 0xff, 0xf3, 0x5e, 0x1e, 0x2b, 0xaa, 0x38, 0x8d, 0x70, 0xdf, 0x39, 0x15, 0xcd,
0xdc, 0xc1, 0x73, 0x37, 0xba, 0xf3, 0xaa, 0x20, 0x36, 0x41, 0xdc, 0x6f, 0x01, 0x3b, 0x24, 0x04,
0x4f, 0xfa, 0x4e, 0x13, 0xf2, 0xa8, 0x88, 0x4a, 0xd3, 0xb6, 0xfa, 0x26, 0x25, 0xfc, 0x9f, 0x13,
0x86, 0x1c, 0xc4, 0x5d, 0xa7, 0x09, 0x3c, 0x74, 0x5c, 0xc8, 0x4f, 0xa8, 0x61, 0xbd, 0xdb, 0x3c,
0xc2, 0xf3, 0xe9, 0xb8, 0xdb, 0x1e, 0x4f, 0x02, 0x1b, 0x38, 0x27, 0x99, 0xc1, 0x15, 0x3c, 0x8f,
0x8a, 0x99, 0xd2, 0xb4, 0xdd, 0x69, 0xcb, 0x31, 0x0e, 0x0d, 0x70, 0x45, 0xc0, 0x92, 0xc8, 0x9d,
0x76, 0xbf, 0xc5, 0x33, 0xfd, 0x17, 0xff, 0x8c, 0x70, 0x3e, 0xbd, 0xfa, 0xae, 0x23, 0xdc, 0xfd,
0xc1, 0xfb, 0xea, 0x45, 0x9a, 0x18, 0x82, 0x94, 0xe9, 0x8b, 0x54, 0xed, 0x45, 0x9a, 0xec, 0x20,
0xf5, 0x76, 0xcb, 0x99, 0x0c, 0x78, 0xd0, 0x62, 0x2e, 0xec, 0x00, 0xe3, 0x5e, 0xe0, 0xe7, 0xa7,
0xe2, 0x99, 0x5a, 0xb7, 0xf9, 0x01, 0xe9, 0x25, 0xb1, 0x81, 0x87, 0x52, 0x3d, 0x24, 0x8f, 0xff,
0x49, 0xb0, 0x12, 0xfa, 0x76, 0x93, 0x08, 0xac, 0x09, 0x4d, 0x65, 0x6f, 0x66, 0x6d, 0x9b, 0x76,
0xd5, 0x42, 0xdb, 0x6a, 0x51, 0x1f, 0x8f, 0xdd, 0x1a, 0x8d, 0xd6, 0x69, 0x78, 0x50, 0xa7, 0x52,
0x2d, 0xb4, 0xe7, 0x77, 0xda, 0x56, 0x0b, 0xd5, 0x38, 0xb4, 0x35, 0xcc, 0x2f, 0x08, 0x9f, 0x4f,
0x4f, 0xb9, 0xc5, 0xc0, 0x11, 0x60, 0xc3, 0xd3, 0x16, 0xf0, 0x7e, 0x54, 0xe8, 0xcf, 0x53, 0x91,
0x39, 0x9c, 0x6d, 0x85, 0x1c, 0x58, 0x9c, 0x83, 0x9c, 0x9d, 0xb4, 0x64, 0x7f, 0x8d, 0x1d, 0xda,
0x2d, 0x5f, 0x95, 0x31, 0x67, 0x27, 0x2d, 0xf3, 0x91, 0xbe, 0x89, 0xdb, 0xd0, 0x80, 0xee, 0x26,
0x7e, 0xef, 0x1c, 0xec, 0xea, 0xe7, 0xe0, 0x01, 0x03, 0x18, 0xc7, 0x01, 0x7b, 0x83, 0xf0, 0x82,
0x7e, 0x72, 0xe3, 0xa3, 0xdd, 0x3f, 0xfb, 0xd5, 0xbf, 0x90, 0xfd, 0x2a, 0x08, 0xf3, 0x15, 0xc2,
0x85, 0x41, 0x5c, 0x89, 0x8c, 0x9b, 0x78, 0xb6, 0xb7, 0x64, 0xca, 0x04, 0x66, 0xd6, 0xb6, 0xc6,
0x86, 0x65, 0xa7, 0xc2, 0xaf, 0x1d, 0x63, 0xfc, 0x7f, 0x9a, 0xa8, 0x0a, 0x2c, 0xf2, 0x5c, 0x20,
0xef, 0x11, 0xce, 0x6c, 0x82, 0x20, 0x4b, 0x54, 0xf3, 0xee, 0xfe, 0x96, 0x68, 0x8c, 0x35, 0x73,
0xe6, 0xd2, 0xf3, 0xef, 0x3f, 0x5f, 0x4f, 0x14, 0x49, 0x41, 0xd9, 0x7d, 0x54, 0xd1, 0x2e, 0x10,
0x6e, 0x1d, 0x49, 0x49, 0x3c, 0x23, 0x6f, 0x11, 0xce, 0xb5, 0x73, 0x48, 0xca, 0xa3, 0x50, 0x53,
0x1a, 0x30, 0xe8, 0x59, 0xa7, 0xc7, 0xa5, 0x31, 0x57, 0x15, 0xd3, 0xa2, 0x59, 0x1c, 0xc4, 0xd4,
0xbe, 0x3f, 0x36, 0xd0, 0x0a, 0x79, 0x87, 0xf0, 0xa4, 0xb4, 0x75, 0xb2, 0x3c, 0x7c, 0x95, 0x8e,
0xf5, 0x1b, 0xf7, 0xc6, 0x99, 0x40, 0x19, 0xd6, 0xbc, 0xa8, 0x80, 0xcf, 0x91, 0xf9, 0x01, 0xc0,
0xe4, 0x13, 0xc2, 0xd9, 0xd8, 0x95, 0xc8, 0xea, 0x70, 0xcc, 0x94, 0x77, 0x8d, 0xb9, 0xd6, 0x96,
0xc2, 0xbc, 0x64, 0x0e, 0xc2, 0xdc, 0xd0, 0x4d, 0xec, 0x05, 0xc2, 0xd9, 0xd8, 0x87, 0x46, 0x61,
0xa7, 0xdc, 0xca, 0x18, 0x21, 0xe5, 0x4e, 0xa1, 0x13, 0xf1, 0xad, 0x8c, 0x12, 0xdf, 0x31, 0xc2,
0xb3, 0x76, 0x72, 0x43, 0x49, 0xeb, 0x1a, 0x55, 0xeb, 0x8e, 0xbd, 0x8d, 0xb7, 0xd6, 0x32, 0xac,
0x79, 0x55, 0x31, 0x53, 0x72, 0x79, 0x38, 0xb3, 0xd5, 0xbe, 0x51, 0xcb, 0x42, 0x02, 0xbf, 0x44,
0x98, 0x48, 0xa9, 0xb4, 0x77, 0x71, 0x27, 0x02, 0x5f, 0xf0, 0x33, 0x9f, 0xf9, 0x05, 0x1a, 0xbf,
0xc9, 0x24, 0x2a, 0x95, 0x6f, 0x32, 0x1a, 0x55, 0xa8, 0x8a, 0xa1, 0xf4, 0x57, 0x56, 0x4c, 0xcb,
0x64, 0x71, 0x04, 0x13, 0xc4, 0xab, 0x7e, 0x44, 0x78, 0x4a, 0xbd, 0x45, 0x48, 0x69, 0xf8, 0xfa,
0xdd, 0x07, 0x8b, 0xb1, 0x33, 0xce, 0x44, 0xaa, 0xb8, 0x0a, 0xff, 0xb4, 0xff, 0x70, 0xc1, 0xc0,
0x69, 0xea, 0x3b, 0xb8, 0x82, 0x6e, 0x6e, 0x7d, 0x3d, 0x29, 0xa0, 0x6f, 0x27, 0x05, 0xf4, 0xe3,
0xa4, 0x80, 0x1e, 0x5e, 0x3f, 0xdb, 0x03, 0xd4, 0x6d, 0x78, 0xe0, 0xeb, 0xaf, 0xe2, 0xbd, 0xac,
0x7a, 0x76, 0xae, 0xff, 0x0a, 0x00, 0x00, 0xff, 0xff, 0x03, 0xd8, 0x6f, 0x1e, 0x44, 0x0b, 0x00,
0x00,
// 795 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x96, 0x4d, 0x6f, 0xd3, 0x4c,
0x10, 0xc7, 0xb5, 0x4d, 0x9b, 0x27, 0xdd, 0x56, 0xcf, 0x23, 0xad, 0xf4, 0xb4, 0xc1, 0x40, 0x88,
0x2c, 0xb5, 0x0d, 0x2d, 0x59, 0xd3, 0x96, 0x53, 0x39, 0xf1, 0xa6, 0xaa, 0x52, 0x85, 0xc0, 0x41,
0xad, 0x04, 0x07, 0xb4, 0x75, 0x86, 0xd4, 0x34, 0xb1, 0xcd, 0xee, 0x3a, 0x52, 0x55, 0x71, 0x41,
0x70, 0xe6, 0x80, 0xe0, 0x03, 0xc0, 0x85, 0x3b, 0x5c, 0xe0, 0xc2, 0x81, 0x0b, 0x47, 0x24, 0xbe,
0x00, 0xaa, 0xf8, 0x20, 0xc8, 0x6b, 0x3b, 0x89, 0x97, 0xbc, 0x54, 0x22, 0x70, 0xf3, 0xbe, 0x78,
0xe6, 0xb7, 0x33, 0xb3, 0xff, 0x1d, 0xbc, 0x2c, 0x80, 0xb7, 0x81, 0x5b, 0x2c, 0x08, 0x9a, 0xae,
0xc3, 0xa4, 0xeb, 0x7b, 0x02, 0xa4, 0x36, 0xa4, 0x01, 0xf7, 0xa5, 0x4f, 0xfe, 0xcd, 0xce, 0x1a,
0x67, 0x1a, 0xbe, 0xdf, 0x68, 0x82, 0xc5, 0x02, 0xd7, 0x62, 0x9e, 0xe7, 0xcb, 0x78, 0x25, 0xde,
0xdd, 0x59, 0x55, 0xa3, 0xbd, 0xf0, 0x81, 0x25, 0x24, 0x0f, 0x9d, 0xc4, 0x96, 0xb1, 0xdd, 0x70,
0xe5, 0x7e, 0xb8, 0x47, 0x1d, 0xbf, 0x65, 0x31, 0xde, 0xf0, 0x03, 0xee, 0x3f, 0x54, 0x1f, 0x55,
0xa7, 0x6e, 0xb5, 0xd7, 0xad, 0xe0, 0xa0, 0x11, 0xd9, 0x15, 0xbd, 0x24, 0x56, 0x7b, 0x95, 0x35,
0x83, 0x7d, 0xb6, 0x6a, 0x35, 0xc0, 0x03, 0xce, 0x24, 0xd4, 0x63, 0x6b, 0xe6, 0x0e, 0x9e, 0xbb,
0xd2, 0xdd, 0x57, 0x03, 0xb9, 0x09, 0xf2, 0x76, 0x08, 0xfc, 0x90, 0x10, 0x3c, 0xe9, 0xb1, 0x16,
0x14, 0x51, 0x19, 0x55, 0xa6, 0x6d, 0xf5, 0x4d, 0x2a, 0xf8, 0x3f, 0x16, 0x04, 0x02, 0xe4, 0x4d,
0xd6, 0x02, 0x11, 0x30, 0x07, 0x8a, 0x13, 0x6a, 0x59, 0x9f, 0x36, 0x8f, 0xf0, 0x7c, 0xd6, 0xee,
0xb6, 0x2b, 0x12, 0xc3, 0x06, 0x2e, 0x44, 0xcc, 0xe0, 0x48, 0x51, 0x44, 0xe5, 0x5c, 0x65, 0xda,
0xee, 0x8c, 0xa3, 0x35, 0x01, 0x4d, 0x70, 0xa4, 0xcf, 0x13, 0xcb, 0x9d, 0x71, 0x3f, 0xe7, 0xb9,
0xfe, 0xce, 0x3f, 0x22, 0x5c, 0xcc, 0x7a, 0xdf, 0x65, 0xd2, 0xd9, 0x1f, 0x7c, 0xae, 0x5e, 0xa4,
0x89, 0x21, 0x48, 0xb9, 0xbe, 0x48, 0xb5, 0x5e, 0xa4, 0xc9, 0x0e, 0x52, 0xef, 0x74, 0xb4, 0x93,
0x83, 0xf0, 0x43, 0xee, 0xc0, 0x0e, 0x70, 0xe1, 0xfa, 0x5e, 0x71, 0x2a, 0xde, 0xa9, 0x4d, 0x9b,
0x6f, 0x91, 0x9e, 0x12, 0x1b, 0x44, 0x10, 0xd5, 0x0d, 0x29, 0xe2, 0x7f, 0x12, 0xac, 0x84, 0x3e,
0x1d, 0x12, 0x89, 0xb5, 0x12, 0x53, 0xd1, 0x9b, 0x59, 0xdb, 0xa6, 0xdd, 0x6a, 0xa1, 0x69, 0xb5,
0xa8, 0x8f, 0xfb, 0x4e, 0x9d, 0xb6, 0xd7, 0x69, 0x70, 0xd0, 0xa0, 0x51, 0xb5, 0xd0, 0x9e, 0xdf,
0x69, 0x5a, 0x2d, 0x54, 0xe3, 0xd0, 0x7c, 0x98, 0x9f, 0x11, 0x3e, 0x9d, 0xdd, 0x72, 0x8d, 0x03,
0x93, 0x60, 0xc3, 0xa3, 0x10, 0x44, 0x3f, 0x2a, 0xf4, 0xe7, 0xa9, 0xc8, 0x1c, 0xce, 0x87, 0x81,
0x00, 0x1e, 0xc7, 0xa0, 0x60, 0x27, 0xa3, 0x68, 0xbe, 0xce, 0x0f, 0xed, 0xd0, 0x53, 0x69, 0x2c,
0xd8, 0xc9, 0xc8, 0xbc, 0xa7, 0x1f, 0xe2, 0x3a, 0x34, 0xa1, 0x7b, 0x88, 0xdf, 0xbb, 0x07, 0xbb,
0xfa, 0x3d, 0xb8, 0xc3, 0x01, 0xc6, 0x71, 0xc1, 0x5e, 0x22, 0x7c, 0x56, 0xbf, 0xb9, 0xf1, 0xd5,
0xee, 0x1f, 0xfd, 0xda, 0x5f, 0x88, 0x7e, 0x0d, 0xa4, 0xf9, 0x1c, 0xe1, 0xd2, 0x20, 0xae, 0xa4,
0x8c, 0x5b, 0x78, 0xb6, 0x37, 0x65, 0x4a, 0x04, 0x66, 0xd6, 0xb6, 0xc6, 0x86, 0x65, 0x67, 0xcc,
0xaf, 0x7d, 0xc0, 0xf8, 0xff, 0x2c, 0x51, 0x0d, 0x78, 0xdb, 0x75, 0x80, 0xbc, 0x41, 0x38, 0xb7,
0x09, 0x92, 0x2c, 0x52, 0x4d, 0xb5, 0xfb, 0x4b, 0xa2, 0x31, 0xd6, 0xc8, 0x99, 0x8b, 0x4f, 0xbe,
0xfd, 0x78, 0x31, 0x51, 0x26, 0x25, 0xf5, 0x0c, 0xb4, 0x57, 0xb5, 0xa7, 0x43, 0x58, 0x47, 0x51,
0x49, 0x3c, 0x26, 0xaf, 0x10, 0x2e, 0xa4, 0x31, 0x24, 0xd5, 0x51, 0xa8, 0x99, 0x1a, 0x30, 0xe8,
0x49, 0xb7, 0xc7, 0xa9, 0x31, 0x57, 0x14, 0xd3, 0x82, 0x59, 0x1e, 0xc4, 0x94, 0xbe, 0x1f, 0x1b,
0x68, 0x99, 0xbc, 0x46, 0x78, 0x32, 0x92, 0x75, 0xb2, 0x34, 0xdc, 0x4b, 0x47, 0xfa, 0x8d, 0x5b,
0xe3, 0x0c, 0x60, 0x64, 0xd6, 0x3c, 0xa7, 0x80, 0x4f, 0x91, 0xf9, 0x01, 0xc0, 0xe4, 0x3d, 0xc2,
0xf9, 0x58, 0x95, 0xc8, 0xca, 0x70, 0xcc, 0x8c, 0x76, 0x8d, 0x39, 0xd7, 0x96, 0xc2, 0x3c, 0x6f,
0x0e, 0xc2, 0xdc, 0xd0, 0x45, 0xec, 0x19, 0xc2, 0xf9, 0x58, 0x87, 0x46, 0x61, 0x67, 0xd4, 0xca,
0x18, 0x51, 0xca, 0x9d, 0x44, 0x27, 0xc5, 0xb7, 0x3c, 0xaa, 0xf8, 0x3e, 0x21, 0x3c, 0x6b, 0x27,
0x2f, 0x54, 0x24, 0x5d, 0xa3, 0x72, 0xdd, 0x91, 0xb7, 0xf1, 0xe6, 0x3a, 0x32, 0x6b, 0x5e, 0x52,
0xcc, 0x94, 0x5c, 0x18, 0xce, 0x6c, 0xa5, 0x2f, 0x6a, 0x55, 0x46, 0xc0, 0x4f, 0x11, 0x26, 0x51,
0xa9, 0xa4, 0xa7, 0xb8, 0xd1, 0x06, 0x4f, 0x8a, 0x13, 0xdf, 0xf9, 0x79, 0x1a, 0x77, 0x63, 0x34,
0xed, 0xc6, 0x68, 0x4d, 0x75, 0x63, 0x66, 0x55, 0xd1, 0x2c, 0x91, 0x85, 0x11, 0x34, 0x10, 0xfb,
0x7b, 0x87, 0xf0, 0x94, 0xea, 0x42, 0x48, 0x65, 0xb8, 0xe7, 0x6e, 0xab, 0x62, 0xec, 0x8c, 0x33,
0x84, 0xca, 0xae, 0x3a, 0xfc, 0xaf, 0xca, 0x23, 0x24, 0x07, 0xd6, 0xd2, 0x4f, 0x70, 0x11, 0x5d,
0xdd, 0xfa, 0x72, 0x5c, 0x42, 0x5f, 0x8f, 0x4b, 0xe8, 0xfb, 0x71, 0x09, 0xdd, 0xbd, 0x7c, 0xb2,
0xd6, 0xd3, 0x69, 0xba, 0xe0, 0xe9, 0x9d, 0xf0, 0x5e, 0x5e, 0x05, 0x70, 0xfd, 0x67, 0x00, 0x00,
0x00, 0xff, 0xff, 0xb2, 0x2c, 0xf3, 0x15, 0x38, 0x0b, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
@ -660,7 +659,7 @@ type ApplicationSetServiceClient interface {
// ResourceTree returns resource tree
ResourceTree(ctx context.Context, in *ApplicationSetTreeQuery, opts ...grpc.CallOption) (*v1alpha1.ApplicationSetTree, error)
// ListResourceEvents returns a list of event resources
ListResourceEvents(ctx context.Context, in *ApplicationSetGetQuery, opts ...grpc.CallOption) (*v1.EventList, error)
ListResourceEvents(ctx context.Context, in *ApplicationSetGetQuery, opts ...grpc.CallOption) (*structpb.Struct, error)
Watch(ctx context.Context, in *ApplicationSetWatchQuery, opts ...grpc.CallOption) (ApplicationSetService_WatchClient, error)
}
@ -726,8 +725,8 @@ func (c *applicationSetServiceClient) ResourceTree(ctx context.Context, in *Appl
return out, nil
}
func (c *applicationSetServiceClient) ListResourceEvents(ctx context.Context, in *ApplicationSetGetQuery, opts ...grpc.CallOption) (*v1.EventList, error) {
out := new(v1.EventList)
func (c *applicationSetServiceClient) ListResourceEvents(ctx context.Context, in *ApplicationSetGetQuery, opts ...grpc.CallOption) (*structpb.Struct, error) {
out := new(structpb.Struct)
err := c.cc.Invoke(ctx, "/applicationset.ApplicationSetService/ListResourceEvents", in, out, opts...)
if err != nil {
return nil, err
@ -782,7 +781,7 @@ type ApplicationSetServiceServer interface {
// ResourceTree returns resource tree
ResourceTree(context.Context, *ApplicationSetTreeQuery) (*v1alpha1.ApplicationSetTree, error)
// ListResourceEvents returns a list of event resources
ListResourceEvents(context.Context, *ApplicationSetGetQuery) (*v1.EventList, error)
ListResourceEvents(context.Context, *ApplicationSetGetQuery) (*structpb.Struct, error)
Watch(*ApplicationSetWatchQuery, ApplicationSetService_WatchServer) error
}
@ -808,7 +807,7 @@ func (*UnimplementedApplicationSetServiceServer) Delete(ctx context.Context, req
func (*UnimplementedApplicationSetServiceServer) ResourceTree(ctx context.Context, req *ApplicationSetTreeQuery) (*v1alpha1.ApplicationSetTree, error) {
return nil, status.Errorf(codes.Unimplemented, "method ResourceTree not implemented")
}
func (*UnimplementedApplicationSetServiceServer) ListResourceEvents(ctx context.Context, req *ApplicationSetGetQuery) (*v1.EventList, error) {
func (*UnimplementedApplicationSetServiceServer) ListResourceEvents(ctx context.Context, req *ApplicationSetGetQuery) (*structpb.Struct, error) {
return nil, status.Errorf(codes.Unimplemented, "method ListResourceEvents not implemented")
}
func (*UnimplementedApplicationSetServiceServer) Watch(req *ApplicationSetWatchQuery, srv ApplicationSetService_WatchServer) error {

View file

@ -12,7 +12,7 @@ import (
"github.com/argoproj/argo-cd/v3/pkg/apis/application/v1alpha1"
mock "github.com/stretchr/testify/mock"
"google.golang.org/grpc"
"k8s.io/api/core/v1"
"google.golang.org/protobuf/types/known/structpb"
)
// NewProjectServiceClient creates a new instance of ProjectServiceClient. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
@ -826,7 +826,7 @@ func (_c *ProjectServiceClient_List_Call) RunAndReturn(run func(ctx context.Cont
}
// ListEvents provides a mock function for the type ProjectServiceClient
func (_mock *ProjectServiceClient) ListEvents(ctx context.Context, in *project.ProjectQuery, opts ...grpc.CallOption) (*v1.EventList, error) {
func (_mock *ProjectServiceClient) ListEvents(ctx context.Context, in *project.ProjectQuery, opts ...grpc.CallOption) (*structpb.Struct, error) {
// grpc.CallOption
_va := make([]interface{}, len(opts))
for _i := range opts {
@ -841,16 +841,16 @@ func (_mock *ProjectServiceClient) ListEvents(ctx context.Context, in *project.P
panic("no return value specified for ListEvents")
}
var r0 *v1.EventList
var r0 *structpb.Struct
var r1 error
if returnFunc, ok := ret.Get(0).(func(context.Context, *project.ProjectQuery, ...grpc.CallOption) (*v1.EventList, error)); ok {
if returnFunc, ok := ret.Get(0).(func(context.Context, *project.ProjectQuery, ...grpc.CallOption) (*structpb.Struct, error)); ok {
return returnFunc(ctx, in, opts...)
}
if returnFunc, ok := ret.Get(0).(func(context.Context, *project.ProjectQuery, ...grpc.CallOption) *v1.EventList); ok {
if returnFunc, ok := ret.Get(0).(func(context.Context, *project.ProjectQuery, ...grpc.CallOption) *structpb.Struct); ok {
r0 = returnFunc(ctx, in, opts...)
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).(*v1.EventList)
r0 = ret.Get(0).(*structpb.Struct)
}
}
if returnFunc, ok := ret.Get(1).(func(context.Context, *project.ProjectQuery, ...grpc.CallOption) error); ok {
@ -902,12 +902,12 @@ func (_c *ProjectServiceClient_ListEvents_Call) Run(run func(ctx context.Context
return _c
}
func (_c *ProjectServiceClient_ListEvents_Call) Return(eventList *v1.EventList, err error) *ProjectServiceClient_ListEvents_Call {
_c.Call.Return(eventList, err)
func (_c *ProjectServiceClient_ListEvents_Call) Return(structParam *structpb.Struct, err error) *ProjectServiceClient_ListEvents_Call {
_c.Call.Return(structParam, err)
return _c
}
func (_c *ProjectServiceClient_ListEvents_Call) RunAndReturn(run func(ctx context.Context, in *project.ProjectQuery, opts ...grpc.CallOption) (*v1.EventList, error)) *ProjectServiceClient_ListEvents_Call {
func (_c *ProjectServiceClient_ListEvents_Call) RunAndReturn(run func(ctx context.Context, in *project.ProjectQuery, opts ...grpc.CallOption) (*structpb.Struct, error)) *ProjectServiceClient_ListEvents_Call {
_c.Call.Return(run)
return _c
}

View file

@ -17,8 +17,8 @@ import (
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status"
structpb "google.golang.org/protobuf/types/known/structpb"
io "io"
v1 "k8s.io/api/core/v1"
math "math"
math_bits "math/bits"
)
@ -702,70 +702,70 @@ func init() {
func init() { proto.RegisterFile("server/project/project.proto", fileDescriptor_5f0a51496972c9e2) }
var fileDescriptor_5f0a51496972c9e2 = []byte{
// 1007 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x57, 0xcf, 0x6f, 0xe3, 0x44,
0x14, 0x96, 0x93, 0x36, 0xbb, 0x7d, 0x2d, 0xa5, 0xcc, 0xee, 0x76, 0xdd, 0xd0, 0x1f, 0x61, 0xd0,
0x56, 0x51, 0xa1, 0xb6, 0xda, 0x80, 0xb4, 0x82, 0x13, 0xdb, 0xad, 0x02, 0x52, 0x0f, 0xe0, 0x82,
0x40, 0x1c, 0x40, 0x8e, 0xfd, 0x94, 0x9d, 0x8d, 0x63, 0x1b, 0xcf, 0x24, 0xdb, 0x10, 0xf5, 0x82,
0x04, 0x48, 0x1c, 0x38, 0xc0, 0x89, 0x0b, 0x47, 0xfe, 0x0f, 0x6e, 0x1c, 0x91, 0xf8, 0x07, 0x50,
0xc5, 0x1f, 0x82, 0x66, 0x3c, 0x76, 0xe2, 0xa4, 0xe6, 0x87, 0x1a, 0x38, 0x65, 0x3c, 0x7e, 0xfe,
0xbe, 0xef, 0xbd, 0x79, 0xf3, 0xcd, 0x04, 0xb6, 0x39, 0x26, 0x43, 0x4c, 0xec, 0x38, 0x89, 0x9e,
0xa2, 0x27, 0xb2, 0x5f, 0x2b, 0x4e, 0x22, 0x11, 0x91, 0x5b, 0xfa, 0xb1, 0xbe, 0xdd, 0x8d, 0xa2,
0x6e, 0x80, 0xb6, 0x1b, 0x33, 0xdb, 0x0d, 0xc3, 0x48, 0xb8, 0x82, 0x45, 0x21, 0x4f, 0xc3, 0xea,
0xb4, 0xf7, 0x90, 0x5b, 0x2c, 0x52, 0x6f, 0xbd, 0x28, 0x41, 0x7b, 0x78, 0x64, 0x77, 0x31, 0xc4,
0xc4, 0x15, 0xe8, 0xeb, 0x98, 0xb3, 0x2e, 0x13, 0x4f, 0x06, 0x1d, 0xcb, 0x8b, 0xfa, 0xb6, 0x9b,
0x74, 0x23, 0x89, 0xac, 0x06, 0x87, 0x9e, 0x6f, 0x0f, 0x5b, 0x76, 0xdc, 0xeb, 0xca, 0xef, 0xb9,
0xed, 0xc6, 0x71, 0xc0, 0x3c, 0x85, 0x6f, 0x0f, 0x8f, 0xdc, 0x20, 0x7e, 0xe2, 0xce, 0xa3, 0x9d,
0xfc, 0x0d, 0x9a, 0xce, 0x6a, 0x1a, 0x6b, 0x6a, 0x9c, 0x82, 0xd0, 0xef, 0x0c, 0xb8, 0xfb, 0x6e,
0x9a, 0xe0, 0x49, 0x82, 0xae, 0x40, 0x07, 0x3f, 0x1b, 0x20, 0x17, 0xa4, 0x03, 0x59, 0xe2, 0xa6,
0xd1, 0x30, 0x9a, 0xab, 0xc7, 0x6f, 0x5b, 0x13, 0x3e, 0x2b, 0xe3, 0x53, 0x83, 0x4f, 0x3d, 0xdf,
0x1a, 0xb6, 0xac, 0xb8, 0xd7, 0xb5, 0xa4, 0x7a, 0x6b, 0x9a, 0x25, 0x53, 0x6f, 0xbd, 0x15, 0xc7,
0x9a, 0xc7, 0xc9, 0x80, 0xc9, 0x26, 0xd4, 0x06, 0x31, 0xc7, 0x44, 0x98, 0x95, 0x86, 0xd1, 0xbc,
0xed, 0xe8, 0x27, 0xda, 0x83, 0x2d, 0x1d, 0xfb, 0x7e, 0xd4, 0xc3, 0xf0, 0x31, 0x06, 0x38, 0x11,
0x66, 0x16, 0x85, 0xad, 0x4c, 0xe0, 0x08, 0x2c, 0x25, 0x51, 0x80, 0x0a, 0x6c, 0xc5, 0x51, 0x63,
0xb2, 0x01, 0x55, 0xe6, 0x0a, 0xb3, 0xda, 0x30, 0x9a, 0x55, 0x47, 0x0e, 0xc9, 0x3a, 0x54, 0x98,
0x6f, 0x2e, 0xa9, 0x98, 0x0a, 0xf3, 0xe9, 0x0f, 0x46, 0x91, 0xad, 0x58, 0x86, 0x72, 0xb6, 0x06,
0xac, 0xfa, 0xc8, 0xbd, 0x84, 0xc5, 0x32, 0x51, 0x4d, 0x3a, 0x3d, 0x95, 0xeb, 0xa9, 0x4e, 0xe9,
0xd9, 0x86, 0x15, 0xbc, 0x88, 0x59, 0x82, 0xfc, 0x9d, 0x50, 0x89, 0xa8, 0x3a, 0x93, 0x09, 0xad,
0x6d, 0x39, 0xd7, 0xf6, 0x6a, 0xbe, 0x38, 0x4a, 0x9a, 0x83, 0x3c, 0x8e, 0x42, 0x8e, 0xe4, 0x2e,
0x2c, 0x0b, 0x39, 0xa1, 0x35, 0xa5, 0x0f, 0x94, 0xc2, 0x9a, 0x8e, 0x7e, 0x6f, 0x80, 0xc9, 0x48,
0xf2, 0x87, 0x6e, 0x1f, 0x75, 0x90, 0x1a, 0xd3, 0xcf, 0x73, 0xc4, 0x0f, 0x62, 0xff, 0xff, 0x5d,
0x6e, 0xfa, 0x3c, 0x3c, 0x77, 0xda, 0x8f, 0xc5, 0x28, 0x4b, 0x83, 0xee, 0xc3, 0xc6, 0xf9, 0x28,
0xf4, 0x3e, 0x64, 0xa1, 0x1f, 0x3d, 0xe3, 0xe5, 0xa2, 0x47, 0x70, 0x67, 0x2a, 0x2e, 0xaf, 0x42,
0x07, 0x6e, 0x3d, 0x4b, 0xa7, 0x4c, 0xa3, 0x51, 0xbd, 0xb9, 0xe6, 0x09, 0x87, 0x93, 0x01, 0xd3,
0x0b, 0xd8, 0x6c, 0x07, 0x51, 0xc7, 0x0d, 0x74, 0x36, 0x13, 0xf6, 0x4f, 0x60, 0x99, 0x09, 0xec,
0x2f, 0x88, 0x7b, 0xaa, 0x5e, 0x29, 0x2c, 0xfd, 0xb9, 0x0a, 0xe6, 0x63, 0x14, 0x2e, 0x0b, 0xd0,
0x9f, 0x23, 0x8f, 0x61, 0xbd, 0x5b, 0x90, 0xb5, 0x70, 0x15, 0x33, 0xf8, 0xd3, 0x0d, 0x52, 0xf9,
0xaf, 0xfc, 0x20, 0x80, 0xb5, 0x04, 0xe3, 0x88, 0x33, 0x11, 0x25, 0x0c, 0xb9, 0x59, 0x5d, 0x44,
0x4e, 0x4e, 0x86, 0x38, 0x72, 0x0a, 0xe8, 0xc4, 0x85, 0xdb, 0x5e, 0x30, 0xe0, 0x02, 0x13, 0x6e,
0x2e, 0x29, 0xa6, 0xd3, 0x9b, 0x31, 0x9d, 0xa4, 0x68, 0x4e, 0x0e, 0x4b, 0x0f, 0xe1, 0xfe, 0x19,
0xe3, 0x42, 0x27, 0x7a, 0xc6, 0xc2, 0x1e, 0xcf, 0x36, 0xdc, 0x35, 0x7d, 0x7e, 0xfc, 0xe3, 0x1a,
0xac, 0xeb, 0xd8, 0x73, 0x4c, 0x86, 0xcc, 0x43, 0xf2, 0x8d, 0x01, 0xab, 0xa9, 0x23, 0x29, 0x07,
0x20, 0xd4, 0xca, 0x4e, 0xa7, 0x52, 0xcf, 0xaa, 0xef, 0x5c, 0x1b, 0x93, 0xef, 0xba, 0x87, 0x5f,
0xfc, 0xf6, 0xc7, 0xf7, 0x95, 0x63, 0x7a, 0xa8, 0xce, 0xaa, 0xe1, 0x51, 0x76, 0xde, 0x71, 0x7b,
0xac, 0x47, 0x97, 0xb6, 0xf4, 0x2a, 0x6e, 0x8f, 0xe5, 0xcf, 0xa5, 0xad, 0xdc, 0xe5, 0x0d, 0xe3,
0x80, 0x7c, 0x65, 0xc0, 0x6a, 0x6a, 0xc6, 0x7f, 0x25, 0xa6, 0x60, 0xd7, 0xf5, 0xcd, 0x3c, 0xa6,
0xb8, 0xf7, 0xdf, 0x54, 0x2a, 0x5e, 0x3f, 0x68, 0xfd, 0x2b, 0x15, 0xf6, 0x98, 0xb9, 0xe2, 0x92,
0x7c, 0x6b, 0x40, 0x2d, 0xcd, 0x99, 0xcc, 0x25, 0x5b, 0xac, 0xc5, 0xc2, 0xba, 0x94, 0xbe, 0xa8,
0x04, 0xdf, 0xa3, 0x1b, 0xb3, 0x82, 0x65, 0x65, 0xbe, 0x34, 0x60, 0x49, 0xae, 0x34, 0xb9, 0x37,
0x2b, 0x47, 0xb9, 0x5a, 0xfd, 0x6c, 0x51, 0x32, 0x24, 0x09, 0x35, 0x95, 0x14, 0x42, 0xe6, 0xa4,
0x90, 0x0b, 0x20, 0x6d, 0x14, 0x33, 0xb6, 0x51, 0x26, 0xea, 0xa5, 0x7c, 0xba, 0xcc, 0x67, 0x68,
0x53, 0x31, 0x51, 0xd2, 0x98, 0x5f, 0x25, 0xd9, 0xb1, 0x97, 0xb6, 0xaf, 0xbf, 0x24, 0x5f, 0x1b,
0x50, 0x6d, 0x63, 0x29, 0xd7, 0xe2, 0xd6, 0x61, 0x4f, 0x49, 0xda, 0x22, 0xf7, 0x4b, 0x24, 0x91,
0x31, 0xbc, 0xd0, 0x46, 0x51, 0x74, 0xed, 0x32, 0x59, 0x7b, 0xf9, 0xf4, 0xf5, 0x2e, 0x4f, 0x2d,
0xc5, 0xd6, 0x24, 0xfb, 0x65, 0x05, 0x48, 0x6d, 0x32, 0x5f, 0x80, 0x9f, 0x0c, 0xa8, 0xa5, 0x27,
0xeb, 0x7c, 0x67, 0x16, 0x4e, 0xdc, 0x05, 0x56, 0xa4, 0xa5, 0x34, 0x1e, 0xd6, 0x9b, 0xa5, 0x5b,
0xc9, 0xea, 0xa3, 0x70, 0x7d, 0x57, 0xb8, 0x96, 0x12, 0x2d, 0x3b, 0xf6, 0x23, 0xa8, 0xa5, 0x1b,
0xb5, 0xac, 0x34, 0x65, 0x1b, 0x57, 0xd7, 0xff, 0xa0, 0xb4, 0xfe, 0x4f, 0x01, 0x64, 0x97, 0x9e,
0x0e, 0x31, 0x2c, 0x2f, 0xfc, 0x8e, 0x95, 0xde, 0x97, 0x65, 0x86, 0x96, 0xbc, 0x2f, 0x5b, 0xc3,
0x23, 0x4b, 0x7d, 0xa2, 0x3a, 0x7c, 0x5f, 0x91, 0x34, 0xc8, 0x6e, 0x59, 0xd9, 0x31, 0x45, 0x1f,
0xc3, 0x9d, 0x36, 0x8a, 0xa9, 0xcb, 0xc1, 0xb9, 0x90, 0xa5, 0xdf, 0xca, 0x49, 0x67, 0xef, 0x17,
0xf5, 0xed, 0xeb, 0x5e, 0xe5, 0xc9, 0xbd, 0xa2, 0x78, 0x1f, 0x90, 0x97, 0xcb, 0x78, 0xf9, 0x28,
0xf4, 0xf4, 0xdd, 0x80, 0xc4, 0xb0, 0x22, 0xc5, 0x2a, 0x5b, 0x27, 0x8d, 0x1c, 0xb7, 0xc4, 0xf1,
0xeb, 0xf5, 0xc2, 0x42, 0xea, 0x57, 0x9a, 0xf7, 0x81, 0xe2, 0xdd, 0x23, 0x3b, 0x65, 0xbc, 0x81,
0x0c, 0x7f, 0xf4, 0xe8, 0x97, 0xab, 0x5d, 0xe3, 0xd7, 0xab, 0x5d, 0xe3, 0xf7, 0xab, 0x5d, 0xe3,
0xe3, 0xd7, 0xfe, 0xd9, 0xdf, 0x09, 0x2f, 0x60, 0x18, 0xe6, 0xff, 0x6a, 0x3a, 0x35, 0x75, 0xf1,
0x6f, 0xfd, 0x19, 0x00, 0x00, 0xff, 0xff, 0xae, 0xc9, 0xe8, 0xa8, 0xf6, 0x0c, 0x00, 0x00,
// 1000 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x57, 0x4f, 0x6f, 0xe3, 0x44,
0x14, 0x97, 0x93, 0x36, 0xbb, 0x7d, 0x2d, 0xa5, 0xcc, 0xee, 0xb6, 0x6e, 0xe8, 0xb6, 0x61, 0xd0,
0x56, 0x51, 0xa1, 0xb6, 0xda, 0x80, 0x84, 0xe0, 0xc4, 0x76, 0xab, 0x80, 0xd4, 0x03, 0xb8, 0x20,
0x10, 0x07, 0x90, 0x63, 0x3f, 0xb2, 0x43, 0x1c, 0x7b, 0xf0, 0x4c, 0xb2, 0x0d, 0x51, 0x2f, 0x48,
0x80, 0xc4, 0x81, 0x03, 0x5c, 0xe0, 0x0b, 0xf0, 0x3d, 0xb8, 0x71, 0x44, 0xe2, 0x0b, 0xa0, 0x8a,
0x0f, 0x82, 0x3c, 0x1e, 0x3b, 0x71, 0x52, 0xf3, 0x47, 0x0d, 0x7b, 0xca, 0x78, 0xfc, 0xf2, 0xfb,
0xfd, 0xde, 0x9b, 0x37, 0xbf, 0x19, 0xc3, 0x8e, 0xc0, 0x78, 0x88, 0xb1, 0xcd, 0xe3, 0xe8, 0x33,
0xf4, 0x64, 0xf6, 0x6b, 0xf1, 0x38, 0x92, 0x11, 0xb9, 0xa5, 0x1f, 0xeb, 0x3b, 0xdd, 0x28, 0xea,
0x06, 0x68, 0xbb, 0x9c, 0xd9, 0x6e, 0x18, 0x46, 0xd2, 0x95, 0x2c, 0x0a, 0x45, 0x1a, 0x96, 0xbf,
0x55, 0x4f, 0x9d, 0xc1, 0xa7, 0xb6, 0x90, 0xf1, 0x20, 0x03, 0xa9, 0x9f, 0x75, 0x99, 0x7c, 0x3c,
0xe8, 0x58, 0x5e, 0xd4, 0xb7, 0xdd, 0xb8, 0x1b, 0x25, 0x98, 0x6a, 0x70, 0xe8, 0xf9, 0xf6, 0xb0,
0x65, 0xf3, 0x5e, 0x37, 0xc1, 0x15, 0xb6, 0xcb, 0x79, 0xc0, 0x3c, 0x85, 0x6c, 0x0f, 0x8f, 0xdc,
0x80, 0x3f, 0x76, 0x8f, 0xec, 0x2e, 0x86, 0x18, 0xbb, 0x12, 0x7d, 0x8d, 0x76, 0xf2, 0x0f, 0x68,
0x3a, 0x9f, 0x69, 0xac, 0xa9, 0x71, 0x0a, 0x42, 0xbf, 0x37, 0xe0, 0xee, 0x3b, 0x69, 0x6a, 0x27,
0x31, 0xba, 0x12, 0x1d, 0xfc, 0x7c, 0x80, 0x42, 0x92, 0x0e, 0x64, 0x29, 0x9b, 0x46, 0xc3, 0x68,
0xae, 0x1e, 0xbf, 0x65, 0x4d, 0xf8, 0xac, 0x8c, 0x4f, 0x0d, 0x3e, 0xf1, 0x7c, 0x6b, 0xd8, 0xb2,
0x78, 0xaf, 0x6b, 0x25, 0xea, 0xad, 0x69, 0x96, 0x4c, 0xbd, 0xf5, 0x26, 0xe7, 0x9a, 0xc7, 0xc9,
0x80, 0xc9, 0x26, 0xd4, 0x06, 0x5c, 0x60, 0x2c, 0xcd, 0x4a, 0xc3, 0x68, 0xde, 0x76, 0xf4, 0x13,
0xed, 0xc1, 0xb6, 0x8e, 0x7d, 0x2f, 0xea, 0x61, 0xf8, 0x08, 0x03, 0x9c, 0x08, 0x33, 0x8b, 0xc2,
0x56, 0x26, 0x70, 0x04, 0x96, 0xe2, 0x28, 0x40, 0x05, 0xb6, 0xe2, 0xa8, 0x31, 0xd9, 0x80, 0x2a,
0x73, 0xa5, 0x59, 0x6d, 0x18, 0xcd, 0xaa, 0x93, 0x0c, 0xc9, 0x3a, 0x54, 0x98, 0x6f, 0x2e, 0xa9,
0x98, 0x0a, 0xf3, 0xe9, 0x4f, 0x46, 0x91, 0xad, 0x58, 0x86, 0x72, 0xb6, 0x06, 0xac, 0xfa, 0x28,
0xbc, 0x98, 0xf1, 0x24, 0x51, 0x4d, 0x3a, 0x3d, 0x95, 0xeb, 0xa9, 0x4e, 0xe9, 0xd9, 0x81, 0x15,
0xbc, 0xe0, 0x2c, 0x46, 0xf1, 0x76, 0xa8, 0x44, 0x54, 0x9d, 0xc9, 0x84, 0xd6, 0xb6, 0x9c, 0x6b,
0x7b, 0x39, 0x5f, 0x1c, 0x25, 0xcd, 0x41, 0xc1, 0xa3, 0x50, 0x20, 0xb9, 0x0b, 0xcb, 0x32, 0x99,
0xd0, 0x9a, 0xd2, 0x07, 0x4a, 0x61, 0x4d, 0x47, 0xbf, 0x3b, 0xc0, 0x78, 0x94, 0xf0, 0x87, 0x6e,
0x1f, 0x75, 0x90, 0x1a, 0xd3, 0x2f, 0x72, 0xc4, 0xf7, 0xb9, 0xff, 0x74, 0x97, 0x9b, 0x3e, 0x0b,
0xcf, 0x9c, 0xf6, 0xb9, 0x1c, 0x65, 0x69, 0xd0, 0x7d, 0xd8, 0x38, 0x1f, 0x85, 0xde, 0x07, 0x2c,
0xf4, 0xa3, 0x27, 0xa2, 0x5c, 0xf4, 0x08, 0xee, 0x4c, 0xc5, 0xe5, 0x55, 0xe8, 0xc0, 0xad, 0x27,
0xe9, 0x94, 0x69, 0x34, 0xaa, 0x37, 0xd7, 0x3c, 0xe1, 0x70, 0x32, 0x60, 0x7a, 0x01, 0x9b, 0xed,
0x20, 0xea, 0xb8, 0x81, 0xce, 0x66, 0xc2, 0xfe, 0x31, 0x2c, 0x33, 0x89, 0xfd, 0x05, 0x71, 0x4f,
0xd5, 0x2b, 0x85, 0xa5, 0xbf, 0x54, 0xc1, 0x7c, 0x84, 0xd2, 0x65, 0x01, 0xfa, 0x73, 0xe4, 0x1c,
0xd6, 0xbb, 0x05, 0x59, 0x0b, 0x57, 0x31, 0x83, 0x3f, 0xdd, 0x20, 0x95, 0xff, 0xcb, 0x0f, 0x02,
0x58, 0x8b, 0x91, 0x47, 0x82, 0xc9, 0x28, 0x66, 0x28, 0xcc, 0xea, 0x22, 0x72, 0x72, 0x32, 0xc4,
0x91, 0x53, 0x40, 0x27, 0x2e, 0xdc, 0xf6, 0x82, 0x81, 0x90, 0x18, 0x0b, 0x73, 0x49, 0x31, 0x9d,
0xde, 0x8c, 0xe9, 0x24, 0x45, 0x73, 0x72, 0x58, 0x7a, 0x08, 0x5b, 0x67, 0x4c, 0x48, 0x9d, 0xe8,
0x19, 0x0b, 0x7b, 0x22, 0xdb, 0x70, 0xd7, 0xf4, 0xf9, 0xf1, 0x8f, 0x6b, 0xb0, 0xae, 0x63, 0xcf,
0x31, 0x1e, 0x32, 0x0f, 0xc9, 0xb7, 0x06, 0xac, 0xa6, 0x8e, 0xa4, 0x1c, 0x80, 0x50, 0x2b, 0x3b,
0x97, 0x4a, 0x3d, 0xab, 0x7e, 0xff, 0xda, 0x98, 0x7c, 0xd7, 0xbd, 0xf6, 0xe5, 0xef, 0x7f, 0xfe,
0x50, 0x39, 0xa6, 0x87, 0xea, 0x0c, 0x1b, 0x1e, 0x65, 0x27, 0x9d, 0xb0, 0xc7, 0x7a, 0x74, 0x69,
0x27, 0x5e, 0x25, 0xec, 0x71, 0xf2, 0x73, 0x69, 0x2b, 0x77, 0x79, 0xdd, 0x38, 0x20, 0x5f, 0x1b,
0xb0, 0x9a, 0x9a, 0xf1, 0xdf, 0x89, 0x29, 0xd8, 0x75, 0x7d, 0x33, 0x8f, 0x29, 0xee, 0xfd, 0x37,
0x94, 0x8a, 0x57, 0x0f, 0x5a, 0xff, 0x49, 0x85, 0x3d, 0x66, 0xae, 0xbc, 0x24, 0xdf, 0x19, 0x50,
0x4b, 0x73, 0x26, 0x73, 0xc9, 0x16, 0x6b, 0xb1, 0xb0, 0x2e, 0xa5, 0xcf, 0x2b, 0xc1, 0xf7, 0xe8,
0xc6, 0xac, 0xe0, 0xa4, 0x32, 0x5f, 0x19, 0xb0, 0x94, 0xac, 0x34, 0xb9, 0x37, 0x2b, 0x47, 0xb9,
0x5a, 0xfd, 0x6c, 0x51, 0x32, 0x12, 0x12, 0x6a, 0x2a, 0x29, 0x84, 0xcc, 0x49, 0x21, 0x17, 0x40,
0xda, 0x28, 0x67, 0x6c, 0xa3, 0x4c, 0xd4, 0x0b, 0xf9, 0x74, 0x99, 0xcf, 0xd0, 0xa6, 0x62, 0xa2,
0xa4, 0x31, 0xbf, 0x4a, 0x49, 0xc7, 0x5e, 0xda, 0xbe, 0xfe, 0x27, 0xf9, 0xc6, 0x80, 0x6a, 0x1b,
0x4b, 0xb9, 0x16, 0xb7, 0x0e, 0x7b, 0x4a, 0xd2, 0x36, 0xd9, 0x2a, 0x91, 0x44, 0xc6, 0xf0, 0x5c,
0x1b, 0x65, 0xd1, 0xb5, 0xcb, 0x64, 0xed, 0xe5, 0xd3, 0xd7, 0xbb, 0x3c, 0xb5, 0x14, 0x5b, 0x93,
0xec, 0x97, 0x15, 0x20, 0xb5, 0xc9, 0x7c, 0x01, 0x7e, 0x36, 0xa0, 0x96, 0x9e, 0xac, 0xf3, 0x9d,
0x59, 0x38, 0x71, 0x17, 0x58, 0x91, 0x96, 0xd2, 0x78, 0x58, 0x6f, 0x96, 0x6e, 0x25, 0xab, 0x8f,
0xd2, 0xf5, 0x5d, 0xe9, 0x5a, 0x4a, 0x74, 0xd2, 0xb1, 0x1f, 0x42, 0x2d, 0xdd, 0xa8, 0x65, 0xa5,
0x29, 0xdb, 0xb8, 0xba, 0xfe, 0x07, 0xa5, 0xf5, 0xf7, 0x01, 0x92, 0x2e, 0x3d, 0x1d, 0x62, 0x58,
0x5e, 0xf8, 0x2d, 0x2b, 0xbd, 0x29, 0x5b, 0xd9, 0x4d, 0xd9, 0x3a, 0x57, 0x37, 0x65, 0xba, 0xaf,
0xe0, 0x1b, 0x64, 0xb7, 0xac, 0xe0, 0x98, 0xe2, 0x8e, 0xe1, 0x4e, 0x1b, 0xe5, 0xd4, 0xb5, 0xe0,
0x5c, 0x26, 0x45, 0xdf, 0xce, 0xe9, 0x66, 0x6f, 0x16, 0xf5, 0x9d, 0xeb, 0x5e, 0xe5, 0x69, 0xbd,
0xa4, 0x78, 0x1f, 0x90, 0x17, 0xcb, 0x78, 0xc5, 0x28, 0xf4, 0xf4, 0xad, 0x80, 0x70, 0x58, 0x49,
0x52, 0x54, 0x86, 0x4e, 0x1a, 0x39, 0x6e, 0x89, 0xd7, 0xd7, 0xeb, 0x85, 0x25, 0xd4, 0xaf, 0x34,
0xef, 0x03, 0xc5, 0xbb, 0x47, 0xee, 0x97, 0xf1, 0x06, 0x49, 0xf8, 0xc3, 0x87, 0xbf, 0x5e, 0xed,
0x1a, 0xbf, 0x5d, 0xed, 0x1a, 0x7f, 0x5c, 0xed, 0x1a, 0x1f, 0xbd, 0xf2, 0xef, 0x3e, 0x24, 0xbc,
0x80, 0x61, 0x98, 0x7f, 0xc9, 0x74, 0x6a, 0xaa, 0xd6, 0xad, 0xbf, 0x02, 0x00, 0x00, 0xff, 0xff,
0x0b, 0x6c, 0x5f, 0x10, 0xea, 0x0c, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
@ -799,7 +799,7 @@ type ProjectServiceClient interface {
// Delete deletes a project
Delete(ctx context.Context, in *ProjectQuery, opts ...grpc.CallOption) (*EmptyResponse, error)
// ListEvents returns a list of project events
ListEvents(ctx context.Context, in *ProjectQuery, opts ...grpc.CallOption) (*v1.EventList, error)
ListEvents(ctx context.Context, in *ProjectQuery, opts ...grpc.CallOption) (*structpb.Struct, error)
// GetSchedulesState returns true if there are any active sync syncWindows
GetSyncWindowsState(ctx context.Context, in *SyncWindowsQuery, opts ...grpc.CallOption) (*SyncWindowsResponse, error)
// ListLinks returns all deep links for the particular project
@ -895,8 +895,8 @@ func (c *projectServiceClient) Delete(ctx context.Context, in *ProjectQuery, opt
return out, nil
}
func (c *projectServiceClient) ListEvents(ctx context.Context, in *ProjectQuery, opts ...grpc.CallOption) (*v1.EventList, error) {
out := new(v1.EventList)
func (c *projectServiceClient) ListEvents(ctx context.Context, in *ProjectQuery, opts ...grpc.CallOption) (*structpb.Struct, error) {
out := new(structpb.Struct)
err := c.cc.Invoke(ctx, "/project.ProjectService/ListEvents", in, out, opts...)
if err != nil {
return nil, err
@ -943,7 +943,7 @@ type ProjectServiceServer interface {
// Delete deletes a project
Delete(context.Context, *ProjectQuery) (*EmptyResponse, error)
// ListEvents returns a list of project events
ListEvents(context.Context, *ProjectQuery) (*v1.EventList, error)
ListEvents(context.Context, *ProjectQuery) (*structpb.Struct, error)
// GetSchedulesState returns true if there are any active sync syncWindows
GetSyncWindowsState(context.Context, *SyncWindowsQuery) (*SyncWindowsResponse, error)
// ListLinks returns all deep links for the particular project
@ -981,7 +981,7 @@ func (*UnimplementedProjectServiceServer) Update(ctx context.Context, req *Proje
func (*UnimplementedProjectServiceServer) Delete(ctx context.Context, req *ProjectQuery) (*EmptyResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method Delete not implemented")
}
func (*UnimplementedProjectServiceServer) ListEvents(ctx context.Context, req *ProjectQuery) (*v1.EventList, error) {
func (*UnimplementedProjectServiceServer) ListEvents(ctx context.Context, req *ProjectQuery) (*structpb.Struct, error) {
return nil, status.Errorf(codes.Unimplemented, "method ListEvents not implemented")
}
func (*UnimplementedProjectServiceServer) GetSyncWindowsState(ctx context.Context, req *SyncWindowsQuery) (*SyncWindowsResponse, error) {

View file

@ -27,6 +27,7 @@ import (
log "github.com/sirupsen/logrus"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
"google.golang.org/protobuf/types/known/structpb"
corev1 "k8s.io/api/core/v1"
apierrors "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@ -50,6 +51,7 @@ import (
"github.com/argoproj/argo-cd/v3/server/broadcast"
servercache "github.com/argoproj/argo-cd/v3/server/cache"
"github.com/argoproj/argo-cd/v3/server/deeplinks"
serverevents "github.com/argoproj/argo-cd/v3/server/events"
applog "github.com/argoproj/argo-cd/v3/util/app/log"
"github.com/argoproj/argo-cd/v3/util/argo"
"github.com/argoproj/argo-cd/v3/util/collections"
@ -878,7 +880,7 @@ func (s *Server) Get(ctx context.Context, q *application.ApplicationQuery) (*v1a
}
// ListResourceEvents returns a list of event resources
func (s *Server) ListResourceEvents(ctx context.Context, q *application.ApplicationResourceEventsQuery) (*corev1.EventList, error) {
func (s *Server) ListResourceEvents(ctx context.Context, q *application.ApplicationResourceEventsQuery) (*structpb.Struct, error) {
a, p, err := s.getApplicationEnforceRBACInformer(ctx, rbac.ActionGet, q.GetProject(), q.GetAppNamespace(), q.GetName())
if err != nil {
return nil, err
@ -938,7 +940,7 @@ func (s *Server) ListResourceEvents(ctx context.Context, q *application.Applicat
if err != nil {
return nil, fmt.Errorf("error listing resource events: %w", err)
}
return list.DeepCopy(), nil
return serverevents.EventListToStruct(list)
}
// validateAndUpdateApp validates and updates the application. currentProject is the name of the project the app

View file

@ -7,7 +7,7 @@ option go_package = "github.com/argoproj/argo-cd/v3/pkg/apiclient/application";
package application;
import "google/api/annotations.proto";
import "k8s.io/api/core/v1/generated.proto";
import "google/protobuf/struct.proto";
import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto";
import "github.com/argoproj/argo-cd/v3/pkg/apis/application/v1alpha1/generated.proto";
import "github.com/argoproj/argo-cd/v3/reposerver/repository/repository.proto";
@ -359,7 +359,7 @@ service ApplicationService {
}
// ListResourceEvents returns a list of event resources
rpc ListResourceEvents(ApplicationResourceEventsQuery) returns (k8s.io.api.core.v1.EventList) {
rpc ListResourceEvents(ApplicationResourceEventsQuery) returns (google.protobuf.Struct) {
option (google.api.http).get = "/api/v1/applications/{name}/events";
}

View file

@ -15,6 +15,7 @@ import (
log "github.com/sirupsen/logrus"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
"google.golang.org/protobuf/types/known/structpb"
corev1 "k8s.io/api/core/v1"
apierrors "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@ -47,6 +48,8 @@ import (
"github.com/argoproj/argo-cd/v3/util/security"
"github.com/argoproj/argo-cd/v3/util/session"
"github.com/argoproj/argo-cd/v3/util/settings"
serverevents "github.com/argoproj/argo-cd/v3/server/events"
)
type Server struct {
@ -638,7 +641,7 @@ func (s *Server) getAppSetEnforceRBAC(ctx context.Context, action, namespace, na
}
// ListResourceEvents returns a list of event resources for an applicationset
func (s *Server) ListResourceEvents(ctx context.Context, q *applicationset.ApplicationSetGetQuery) (*corev1.EventList, error) {
func (s *Server) ListResourceEvents(ctx context.Context, q *applicationset.ApplicationSetGetQuery) (*structpb.Struct, error) {
namespace := s.appsetNamespaceOrDefault(q.AppsetNamespace)
appset, err := s.getAppSetEnforceRBAC(ctx, rbac.ActionGet, namespace, q.Name)
@ -658,5 +661,5 @@ func (s *Server) ListResourceEvents(ctx context.Context, q *applicationset.Appli
if err != nil {
return nil, fmt.Errorf("error listing resource events: %w", err)
}
return list.DeepCopy(), nil
return serverevents.EventListToStruct(list)
}

View file

@ -8,7 +8,7 @@ option go_package = "github.com/argoproj/argo-cd/v3/pkg/apiclient/applicationset
package applicationset;
import "google/api/annotations.proto";
import "k8s.io/api/core/v1/generated.proto";
import "google/protobuf/struct.proto";
import "github.com/argoproj/argo-cd/v3/pkg/apis/application/v1alpha1/generated.proto";
// ApplicationSetGetQuery is a query for applicationset resources
@ -113,7 +113,7 @@ service ApplicationSetService {
}
// ListResourceEvents returns a list of event resources
rpc ListResourceEvents(ApplicationSetGetQuery) returns (k8s.io.api.core.v1.EventList) {
rpc ListResourceEvents(ApplicationSetGetQuery) returns (google.protobuf.Struct) {
option (google.api.http).get = "/api/v1/applicationsets/{name}/events";
}

View file

@ -4,6 +4,7 @@ import (
"sort"
"testing"
"google.golang.org/protobuf/types/known/structpb"
"sigs.k8s.io/controller-runtime/pkg/client"
cr_fake "sigs.k8s.io/controller-runtime/pkg/client/fake"
@ -33,6 +34,18 @@ import (
"github.com/argoproj/argo-cd/v3/util/settings"
)
// getItemsFromStruct extracts the items array from a protobuf Struct representing an EventList
func getItemsFromStruct(s *structpb.Struct) []*structpb.Value {
if s == nil {
return nil
}
items := s.Fields["items"].GetListValue()
if items == nil {
return nil
}
return items.Values
}
const (
testNamespace = "default"
fakeRepoURL = "https://git.com/repo.git"
@ -760,7 +773,7 @@ func TestListResourceEvents(t *testing.T) {
res, err := appSetServer.ListResourceEvents(t.Context(), &appsetQuery)
require.NoError(t, err)
// No events exist in the fake client, so we expect an empty list
assert.Empty(t, res.Items)
assert.Empty(t, getItemsFromStruct(res))
})
t.Run("ListResourceEvents in named namespace", func(t *testing.T) {
@ -770,7 +783,7 @@ func TestListResourceEvents(t *testing.T) {
res, err := appSetServer.ListResourceEvents(t.Context(), &appsetQuery)
require.NoError(t, err)
assert.Empty(t, res.Items)
assert.Empty(t, getItemsFromStruct(res))
})
t.Run("ListResourceEvents in not allowed namespace", func(t *testing.T) {
@ -832,11 +845,19 @@ func TestListResourceEvents(t *testing.T) {
res, err := appSetServer.ListResourceEvents(t.Context(), &appsetQuery)
require.NoError(t, err)
assert.NotEmpty(t, res.Items)
assert.Len(t, res.Items, 2)
items := getItemsFromStruct(res)
assert.NotEmpty(t, items)
assert.Len(t, items, 2)
// Verify the returned events have the expected content
eventNames := []string{res.Items[0].Name, res.Items[1].Name}
var eventNames []string
for _, item := range items {
if itemStruct := item.GetStructValue(); itemStruct != nil {
if metadata := itemStruct.Fields["metadata"].GetStructValue(); metadata != nil {
eventNames = append(eventNames, metadata.Fields["name"].GetStringValue())
}
}
}
assert.Contains(t, eventNames, "appset1-event-1")
assert.Contains(t, eventNames, "appset1-event-2")
})

34
server/events/events.go Normal file
View file

@ -0,0 +1,34 @@
package events
import (
"encoding/json"
"fmt"
"google.golang.org/protobuf/encoding/protojson"
"google.golang.org/protobuf/types/known/structpb"
corev1 "k8s.io/api/core/v1"
)
// EventListToStruct converts a Kubernetes EventList to a protobuf Struct.
// This is used to return EventList data through gRPC APIs in a way that avoids
// protobuf compatibility issues with Kubernetes types in K8s 1.35+.
func EventListToStruct(eventList *corev1.EventList) (*structpb.Struct, error) {
if eventList == nil {
return structpb.NewStruct(map[string]any{
"metadata": map[string]any{},
"items": []any{},
})
}
jsonBytes, err := json.Marshal(eventList)
if err != nil {
return nil, fmt.Errorf("failed to marshal EventList to JSON: %w", err)
}
result := &structpb.Struct{}
if err := protojson.Unmarshal(jsonBytes, result); err != nil {
return nil, fmt.Errorf("failed to unmarshal into protobuf Struct: %w", err)
}
return result, nil
}

View file

@ -0,0 +1,142 @@
package events
import (
"testing"
"time"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
func TestEventListToStruct(t *testing.T) {
t.Run("nil EventList returns empty struct", func(t *testing.T) {
result, err := EventListToStruct(nil)
require.NoError(t, err)
require.NotNil(t, result)
// Verify the structure has items and metadata fields
assert.NotNil(t, result.Fields["items"])
assert.NotNil(t, result.Fields["metadata"])
// Items should be an empty list
items := result.Fields["items"].GetListValue()
assert.NotNil(t, items)
assert.Empty(t, items.Values)
})
t.Run("empty EventList returns empty items", func(t *testing.T) {
eventList := &corev1.EventList{
Items: []corev1.Event{},
}
result, err := EventListToStruct(eventList)
require.NoError(t, err)
require.NotNil(t, result)
items := result.Fields["items"].GetListValue()
assert.NotNil(t, items)
assert.Empty(t, items.Values)
})
t.Run("EventList with events converts correctly", func(t *testing.T) {
eventTime := metav1.NewTime(time.Now())
eventList := &corev1.EventList{
TypeMeta: metav1.TypeMeta{
Kind: "EventList",
APIVersion: "v1",
},
ListMeta: metav1.ListMeta{
ResourceVersion: "12345",
},
Items: []corev1.Event{
{
ObjectMeta: metav1.ObjectMeta{
Name: "test-event-1",
Namespace: "default",
},
InvolvedObject: corev1.ObjectReference{
Kind: "Pod",
Name: "test-pod",
Namespace: "default",
},
Reason: "Created",
Message: "Pod created successfully",
Type: corev1.EventTypeNormal,
FirstTimestamp: eventTime,
LastTimestamp: eventTime,
},
{
ObjectMeta: metav1.ObjectMeta{
Name: "test-event-2",
Namespace: "default",
},
InvolvedObject: corev1.ObjectReference{
Kind: "Pod",
Name: "test-pod",
Namespace: "default",
},
Reason: "Started",
Message: "Container started",
Type: corev1.EventTypeNormal,
FirstTimestamp: eventTime,
LastTimestamp: eventTime,
},
},
}
result, err := EventListToStruct(eventList)
require.NoError(t, err)
require.NotNil(t, result)
// Verify items
items := result.Fields["items"].GetListValue()
assert.NotNil(t, items)
assert.Len(t, items.Values, 2)
// Verify first event
firstEvent := items.Values[0].GetStructValue()
assert.NotNil(t, firstEvent)
metadata := firstEvent.Fields["metadata"].GetStructValue()
assert.Equal(t, "test-event-1", metadata.Fields["name"].GetStringValue())
assert.Equal(t, "default", metadata.Fields["namespace"].GetStringValue())
assert.Equal(t, "Created", firstEvent.Fields["reason"].GetStringValue())
assert.Equal(t, "Pod created successfully", firstEvent.Fields["message"].GetStringValue())
assert.Equal(t, "Normal", firstEvent.Fields["type"].GetStringValue())
// Verify involvedObject
involvedObject := firstEvent.Fields["involvedObject"].GetStructValue()
assert.Equal(t, "Pod", involvedObject.Fields["kind"].GetStringValue())
assert.Equal(t, "test-pod", involvedObject.Fields["name"].GetStringValue())
})
t.Run("EventList metadata is preserved", func(t *testing.T) {
eventList := &corev1.EventList{
TypeMeta: metav1.TypeMeta{
Kind: "EventList",
APIVersion: "v1",
},
ListMeta: metav1.ListMeta{
ResourceVersion: "67890",
Continue: "continue-token",
},
Items: []corev1.Event{},
}
result, err := EventListToStruct(eventList)
require.NoError(t, err)
require.NotNil(t, result)
// Verify metadata
listMetadata := result.Fields["metadata"].GetStructValue()
assert.Equal(t, "67890", listMetadata.Fields["resourceVersion"].GetStringValue())
assert.Equal(t, "continue-token", listMetadata.Fields["continue"].GetStringValue())
// Verify kind and apiVersion
assert.Equal(t, "EventList", result.Fields["kind"].GetStringValue())
assert.Equal(t, "v1", result.Fields["apiVersion"].GetStringValue())
})
}

View file

@ -13,6 +13,7 @@ import (
log "github.com/sirupsen/logrus"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
"google.golang.org/protobuf/types/known/structpb"
corev1 "k8s.io/api/core/v1"
apierrors "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@ -27,6 +28,7 @@ import (
appclientset "github.com/argoproj/argo-cd/v3/pkg/client/clientset/versioned"
listersv1alpha1 "github.com/argoproj/argo-cd/v3/pkg/client/listers/application/v1alpha1"
"github.com/argoproj/argo-cd/v3/server/deeplinks"
serverevents "github.com/argoproj/argo-cd/v3/server/events"
"github.com/argoproj/argo-cd/v3/server/rbacpolicy"
"github.com/argoproj/argo-cd/v3/util/argo"
"github.com/argoproj/argo-cd/v3/util/db"
@ -491,7 +493,7 @@ func (s *Server) Delete(ctx context.Context, q *project.ProjectQuery) (*project.
return &project.EmptyResponse{}, err
}
func (s *Server) ListEvents(ctx context.Context, q *project.ProjectQuery) (*corev1.EventList, error) {
func (s *Server) ListEvents(ctx context.Context, q *project.ProjectQuery) (*structpb.Struct, error) {
if err := s.enf.EnforceErr(ctx.Value("claims"), rbac.ResourceProjects, rbac.ActionGet, q.Name); err != nil {
return nil, err
}
@ -504,7 +506,11 @@ func (s *Server) ListEvents(ctx context.Context, q *project.ProjectQuery) (*core
"involvedObject.uid": string(proj.UID),
"involvedObject.namespace": proj.Namespace,
}).String()
return s.kubeclientset.CoreV1().Events(s.ns).List(ctx, metav1.ListOptions{FieldSelector: fieldSelector})
list, err := s.kubeclientset.CoreV1().Events(s.ns).List(ctx, metav1.ListOptions{FieldSelector: fieldSelector})
if err != nil {
return nil, err
}
return serverevents.EventListToStruct(list)
}
func (s *Server) logEvent(ctx context.Context, a *v1alpha1.AppProject, reason string, action string) {

View file

@ -7,7 +7,7 @@ option go_package = "github.com/argoproj/argo-cd/v3/pkg/apiclient/project";
package project;
import "google/api/annotations.proto";
import "k8s.io/api/core/v1/generated.proto";
import "google/protobuf/struct.proto";
import "github.com/argoproj/argo-cd/v3/pkg/apis/application/v1alpha1/generated.proto";
import "github.com/argoproj/argo-cd/v3/server/application/application.proto";
@ -132,7 +132,7 @@ service ProjectService {
}
// ListEvents returns a list of project events
rpc ListEvents(ProjectQuery) returns (k8s.io.api.core.v1.EventList) {
rpc ListEvents(ProjectQuery) returns (google.protobuf.Struct) {
option (google.api.http).get = "/api/v1/projects/{name}/events";
}

View file

@ -783,3 +783,196 @@ func newEnforcer(kubeclientset *fake.Clientset) *rbac.Enforcer {
})
return enforcer
}
func TestListEvents(t *testing.T) {
existingProj := &v1alpha1.AppProject{
ObjectMeta: metav1.ObjectMeta{
Name: "test-project",
Namespace: testNamespace,
UID: "test-project-uid",
},
Spec: v1alpha1.AppProjectSpec{
SourceRepos: []string{"*"},
Destinations: []v1alpha1.ApplicationDestination{{Server: "*", Namespace: "*"}},
},
}
t.Run("ListEvents returns empty list for project without events", func(t *testing.T) {
kubeclientset := fake.NewClientset(&corev1.ConfigMap{
ObjectMeta: metav1.ObjectMeta{
Namespace: testNamespace,
Name: "argocd-cm",
Labels: map[string]string{"app.kubernetes.io/part-of": "argocd"},
},
}, &corev1.Secret{
ObjectMeta: metav1.ObjectMeta{Name: "argocd-secret", Namespace: testNamespace},
Data: map[string][]byte{"admin.password": []byte("test"), "server.secretkey": []byte("test")},
})
settingsMgr := settings.NewSettingsManager(t.Context(), kubeclientset, testNamespace)
enforcer := newEnforcer(kubeclientset)
sessionMgr := session.NewSessionManager(settingsMgr, test.NewFakeProjLister(), "", nil, session.NewUserStateStorage(nil))
argoDB := db.NewDB(testNamespace, settingsMgr, kubeclientset)
projInformer := informer.NewSharedInformerFactory(apps.NewSimpleClientset(existingProj), 0).Argoproj().V1alpha1().AppProjects().Informer()
go projInformer.Run(t.Context().Done())
k8scache.WaitForCacheSync(t.Context().Done(), projInformer.HasSynced)
projectServer := NewServer(testNamespace, kubeclientset, apps.NewSimpleClientset(existingProj), enforcer, sync.NewKeyLock(), sessionMgr, nil, projInformer, settingsMgr, argoDB, testEnableEventList)
res, err := projectServer.ListEvents(t.Context(), &project.ProjectQuery{Name: existingProj.Name})
require.NoError(t, err)
require.NotNil(t, res)
// Verify the Struct has the expected structure
// When there are no events, items may be null or an empty list depending on K8s response
itemsField := res.Fields["items"]
if itemsField != nil {
items := itemsField.GetListValue()
if items != nil {
assert.Empty(t, items.Values, "items should be empty when no events exist")
}
}
assert.NotNil(t, res.Fields["metadata"], "response should have metadata field")
})
t.Run("ListEvents returns events for project", func(t *testing.T) {
// Create events associated with the project
event1 := &corev1.Event{
ObjectMeta: metav1.ObjectMeta{
Name: "test-event-1",
Namespace: testNamespace,
},
InvolvedObject: corev1.ObjectReference{
Name: existingProj.Name,
Namespace: existingProj.Namespace,
UID: existingProj.UID,
},
Reason: "ProjectCreated",
Message: "Project was created",
Type: corev1.EventTypeNormal,
}
event2 := &corev1.Event{
ObjectMeta: metav1.ObjectMeta{
Name: "test-event-2",
Namespace: testNamespace,
},
InvolvedObject: corev1.ObjectReference{
Name: existingProj.Name,
Namespace: existingProj.Namespace,
UID: existingProj.UID,
},
Reason: "ProjectUpdated",
Message: "Project was updated",
Type: corev1.EventTypeNormal,
}
kubeclientset := fake.NewClientset(&corev1.ConfigMap{
ObjectMeta: metav1.ObjectMeta{
Namespace: testNamespace,
Name: "argocd-cm",
Labels: map[string]string{"app.kubernetes.io/part-of": "argocd"},
},
}, &corev1.Secret{
ObjectMeta: metav1.ObjectMeta{Name: "argocd-secret", Namespace: testNamespace},
Data: map[string][]byte{"admin.password": []byte("test"), "server.secretkey": []byte("test")},
}, event1, event2)
settingsMgr := settings.NewSettingsManager(t.Context(), kubeclientset, testNamespace)
enforcer := newEnforcer(kubeclientset)
sessionMgr := session.NewSessionManager(settingsMgr, test.NewFakeProjLister(), "", nil, session.NewUserStateStorage(nil))
argoDB := db.NewDB(testNamespace, settingsMgr, kubeclientset)
projInformer := informer.NewSharedInformerFactory(apps.NewSimpleClientset(existingProj), 0).Argoproj().V1alpha1().AppProjects().Informer()
go projInformer.Run(t.Context().Done())
k8scache.WaitForCacheSync(t.Context().Done(), projInformer.HasSynced)
projectServer := NewServer(testNamespace, kubeclientset, apps.NewSimpleClientset(existingProj), enforcer, sync.NewKeyLock(), sessionMgr, nil, projInformer, settingsMgr, argoDB, testEnableEventList)
res, err := projectServer.ListEvents(t.Context(), &project.ProjectQuery{Name: existingProj.Name})
require.NoError(t, err)
require.NotNil(t, res)
// Verify the Struct has the expected structure
items := res.Fields["items"].GetListValue()
require.NotNil(t, items, "items should be a list")
assert.Len(t, items.Values, 2, "should have 2 events")
// Verify event content is preserved in the Struct
var eventNames []string
for _, item := range items.Values {
itemStruct := item.GetStructValue()
require.NotNil(t, itemStruct, "each item should be a struct")
metadata := itemStruct.Fields["metadata"].GetStructValue()
require.NotNil(t, metadata, "event should have metadata")
eventNames = append(eventNames, metadata.Fields["name"].GetStringValue())
// Verify reason and message fields are present
assert.NotEmpty(t, itemStruct.Fields["reason"].GetStringValue())
assert.NotEmpty(t, itemStruct.Fields["message"].GetStringValue())
}
assert.Contains(t, eventNames, "test-event-1")
assert.Contains(t, eventNames, "test-event-2")
})
t.Run("ListEvents returns error for non-existent project", func(t *testing.T) {
kubeclientset := fake.NewClientset(&corev1.ConfigMap{
ObjectMeta: metav1.ObjectMeta{
Namespace: testNamespace,
Name: "argocd-cm",
Labels: map[string]string{"app.kubernetes.io/part-of": "argocd"},
},
}, &corev1.Secret{
ObjectMeta: metav1.ObjectMeta{Name: "argocd-secret", Namespace: testNamespace},
Data: map[string][]byte{"admin.password": []byte("test"), "server.secretkey": []byte("test")},
})
settingsMgr := settings.NewSettingsManager(t.Context(), kubeclientset, testNamespace)
enforcer := newEnforcer(kubeclientset)
sessionMgr := session.NewSessionManager(settingsMgr, test.NewFakeProjLister(), "", nil, session.NewUserStateStorage(nil))
argoDB := db.NewDB(testNamespace, settingsMgr, kubeclientset)
projInformer := informer.NewSharedInformerFactory(apps.NewSimpleClientset(existingProj), 0).Argoproj().V1alpha1().AppProjects().Informer()
go projInformer.Run(t.Context().Done())
k8scache.WaitForCacheSync(t.Context().Done(), projInformer.HasSynced)
projectServer := NewServer(testNamespace, kubeclientset, apps.NewSimpleClientset(existingProj), enforcer, sync.NewKeyLock(), sessionMgr, nil, projInformer, settingsMgr, argoDB, testEnableEventList)
_, err := projectServer.ListEvents(t.Context(), &project.ProjectQuery{Name: "non-existent"})
require.Error(t, err)
assert.Contains(t, err.Error(), "not found")
})
t.Run("ListEvents denied without permission", func(t *testing.T) {
kubeclientset := fake.NewClientset(&corev1.ConfigMap{
ObjectMeta: metav1.ObjectMeta{
Namespace: testNamespace,
Name: "argocd-cm",
Labels: map[string]string{"app.kubernetes.io/part-of": "argocd"},
},
}, &corev1.Secret{
ObjectMeta: metav1.ObjectMeta{Name: "argocd-secret", Namespace: testNamespace},
Data: map[string][]byte{"admin.password": []byte("test"), "server.secretkey": []byte("test")},
})
settingsMgr := settings.NewSettingsManager(t.Context(), kubeclientset, testNamespace)
enforcer := rbac.NewEnforcer(kubeclientset, testNamespace, common.ArgoCDRBACConfigMapName, nil)
_ = enforcer.SetBuiltinPolicy(`p, *, *, *, *, deny`)
enforcer.SetClaimsEnforcerFunc(nil)
sessionMgr := session.NewSessionManager(settingsMgr, test.NewFakeProjLister(), "", nil, session.NewUserStateStorage(nil))
argoDB := db.NewDB(testNamespace, settingsMgr, kubeclientset)
projInformer := informer.NewSharedInformerFactory(apps.NewSimpleClientset(existingProj), 0).Argoproj().V1alpha1().AppProjects().Informer()
go projInformer.Run(t.Context().Done())
k8scache.WaitForCacheSync(t.Context().Done(), projInformer.HasSynced)
projectServer := NewServer(testNamespace, kubeclientset, apps.NewSimpleClientset(existingProj), enforcer, sync.NewKeyLock(), sessionMgr, nil, projInformer, settingsMgr, argoDB, testEnableEventList)
//nolint:staticcheck
ctx := context.WithValue(t.Context(), "claims", &jwt.MapClaims{"groups": []string{"my-group"}})
_, err := projectServer.ListEvents(ctx, &project.ProjectQuery{Name: existingProj.Name})
require.Error(t, err)
statusErr, ok := status.FromError(err)
require.True(t, ok)
assert.Equal(t, codes.PermissionDenied, statusErr.Code())
})
}