From 7b7e604d79e965e0cad77f21158c8643d8c01f34 Mon Sep 17 00:00:00 2001 From: Vaibhav Date: Tue, 29 Jan 2019 17:10:57 -0500 Subject: [PATCH] Docs updates for v0.7 (#159) * Fixing deactivate route bug in webhook gateway * Fixing deactivate route bug in storage gateway * fixing event source deactivation -> activation bug * Started adding support for NATS streaming * Started working on supporting nats standard and streaming for communication between gateway and sensor * Changing nats subscription to queue subscription * Fire K8s event on nats connection/subscription updates * Updating gateway and sensor controller validate method * Fixing nats-streaming issue * Fix storage grid channel issue * Removing premature return in transformer * Renaming dispatchProtocol to eventProtocol * Moving common structs in apis package * Adding deepcopy and proto files for common api * making trigger errors more explicit * Updating docs for v0.7 * Updating docs for v0.7 * Updating docs for v0.7 * Updating README * Updating gateway installation docs * Updating makefile * Updating makefile --- CHANGELOG.md | 8 + CONTRIBUTING.md | 2 +- Makefile | 12 +- README.md | 44 +- ROADMAP.md | 3 +- docs/architecture.png | Bin 130074 -> 122032 bytes docs/artifact-guide.md | 60 +- docs/controllers-guide.md | 73 +- docs/core-gateway-style.png | Bin 46683 -> 0 bytes docs/custom-gateway.md | 186 +-- docs/gateway-controller-fsm.png | Bin 66725 -> 0 bytes docs/gateway-guide.md | 233 +--- docs/gateway-protocol.md | 67 +- docs/grpc-gateway.png | Bin 69618 -> 0 bytes docs/http-gateway.png | Bin 54678 -> 0 bytes docs/index.md | 28 - docs/quickstart.md | 23 +- docs/sensor-fsm.png | Bin 69427 -> 0 bytes docs/sensor-guide.md | 66 +- docs/sensor-pod-fsm.png | Bin 45053 -> 0 bytes docs/sensor-protocol.md | 378 +++--- docs/trigger-guide.md | 19 +- docs/tutorial.md | 1080 ----------------- examples/gateways/amqp.yaml | 28 +- .../gateways/artifact-gateway-configmap.yaml | 14 +- examples/gateways/artifact-http.yaml | 36 + examples/gateways/artifact-nats-standard.yaml | 33 + .../gateways/artifact-nats-streaming.yaml | 35 + examples/gateways/artifact.yaml | 23 - .../gateways/calendar-gateway-configmap.yaml | 4 +- examples/gateways/calendar.yaml | 28 +- examples/gateways/file.yaml | 28 +- examples/gateways/github-configmap.yaml | 2 +- examples/gateways/github.yaml | 17 +- examples/gateways/gitlab.yaml | 28 +- examples/gateways/kafka.yaml | 28 +- examples/gateways/mqtt.yaml | 30 +- examples/gateways/multi-watchers.yaml | 45 +- examples/gateways/nats.yaml | 28 +- examples/gateways/resource.yaml | 29 +- examples/gateways/storage-grid-configmap.yaml | 3 - examples/gateways/storage-grid.yaml | 41 +- .../gateways/webhook-gateway-configmap.yaml | 3 +- examples/gateways/webhook-http.yaml | 45 + examples/gateways/webhook-nats-standard.yaml | 43 + examples/gateways/webhook-nats-streaming.yaml | 45 + examples/gateways/webhook.yaml | 31 - examples/sensors/amqp.yaml | 18 +- .../artifact-with-param-nats-standard.yaml | 47 + .../artifact-with-param-nats-streaming.yaml | 49 + ...th-param.yaml => artifact-with-param.yaml} | 20 +- examples/sensors/{s3.yaml => artifact.yaml} | 18 +- examples/sensors/calendar.yaml | 18 +- examples/sensors/context-filter-webhook.yaml | 24 +- examples/sensors/data-filter-webhook.yaml | 24 +- examples/sensors/file-sensor.yaml | 18 +- examples/sensors/file.yaml | 18 +- examples/sensors/github.yaml | 46 +- examples/sensors/gitlab.yaml | 18 +- examples/sensors/inline-sensor.yaml | 18 +- examples/sensors/kafka.yaml | 18 +- examples/sensors/mqtt-sensor.yaml | 18 +- examples/sensors/multi-signal-sensor.yaml | 20 +- examples/sensors/multi-trigger-sensor.yaml | 23 +- examples/sensors/nats.yaml | 18 +- examples/sensors/resource.yaml | 18 +- examples/sensors/storage-grid-sensor.yaml | 25 +- examples/sensors/time-filter-webhook.yaml | 18 +- examples/sensors/url-sensor.yaml | 18 +- .../{webhook.yaml => webhook-http.yaml} | 21 +- examples/sensors/webhook-nats-streaming.yaml | 58 + examples/sensors/webhook-nats.yaml | 43 + .../webhook-with-complete-payload.yaml | 23 +- .../sensors/webhook-with-resource-param.yaml | 62 +- .../{custom => community}/github/Dockerfile | 0 .../{custom => community}/github/cmd/main.go | 2 +- .../{custom => community}/github/config.go | 0 .../{custom => community}/github/start.go | 0 .../{custom => community}/github/tokenauth.go | 0 .../{custom => community}/github/validate.go | 0 .../github/validate_test.go | 0 .../{custom => community}/gitlab/Dockerfile | 0 .../{custom => community}/gitlab/cmd/main.go | 2 +- .../{custom => community}/gitlab/config.go | 0 .../{custom => community}/gitlab/start.go | 0 .../{custom => community}/gitlab/validate.go | 0 .../gitlab/validate_test.go | 0 .../storagegrid/Dockerfile | 0 .../storagegrid/cmd/main.go | 2 +- .../storagegrid/config.go | 0 .../storagegrid/start.go | 0 .../storagegrid/validate.go | 0 .../storagegrid/validate_test.go | 0 gateways/core/artifact/install.md | 60 + gateways/core/calendar/install.md | 49 + gateways/core/file/install.md | 57 + gateways/core/resource/config.go | 6 +- gateways/core/resource/install.md | 64 + gateways/core/stream/amqp/install.md | 54 + gateways/core/stream/kafka/install.md | 54 + gateways/core/stream/mqtt/install.md | 50 + gateways/core/stream/nats/install.md | 49 + gateways/core/webhook/install.md | 68 ++ .../manifests/argo-events-cluster-roles.yaml | 4 +- .../gateway-controller-deployment.yaml | 2 +- .../sensor-controller-configmap.yaml | 2 +- .../sensor-controller-deployment.yaml | 2 +- hack/update-codegen.sh | 2 + pkg/apis/sensor/v1alpha1/build/generated.json | 646 ---------- sensors/event-handler_test.go | 6 +- 110 files changed, 1908 insertions(+), 2921 deletions(-) delete mode 100644 docs/core-gateway-style.png delete mode 100644 docs/gateway-controller-fsm.png delete mode 100644 docs/grpc-gateway.png delete mode 100644 docs/http-gateway.png delete mode 100644 docs/index.md delete mode 100644 docs/sensor-fsm.png delete mode 100644 docs/sensor-pod-fsm.png delete mode 100644 docs/tutorial.md create mode 100644 examples/gateways/artifact-http.yaml create mode 100644 examples/gateways/artifact-nats-standard.yaml create mode 100644 examples/gateways/artifact-nats-streaming.yaml delete mode 100644 examples/gateways/artifact.yaml create mode 100644 examples/gateways/webhook-http.yaml create mode 100644 examples/gateways/webhook-nats-standard.yaml create mode 100644 examples/gateways/webhook-nats-streaming.yaml delete mode 100644 examples/gateways/webhook.yaml create mode 100644 examples/sensors/artifact-with-param-nats-standard.yaml create mode 100644 examples/sensors/artifact-with-param-nats-streaming.yaml rename examples/sensors/{s3-with-param.yaml => artifact-with-param.yaml} (75%) rename examples/sensors/{s3.yaml => artifact.yaml} (75%) rename examples/sensors/{webhook.yaml => webhook-http.yaml} (72%) create mode 100644 examples/sensors/webhook-nats-streaming.yaml create mode 100644 examples/sensors/webhook-nats.yaml rename gateways/{custom => community}/github/Dockerfile (100%) rename gateways/{custom => community}/github/cmd/main.go (95%) rename gateways/{custom => community}/github/config.go (100%) rename gateways/{custom => community}/github/start.go (100%) rename gateways/{custom => community}/github/tokenauth.go (100%) rename gateways/{custom => community}/github/validate.go (100%) rename gateways/{custom => community}/github/validate_test.go (100%) rename gateways/{custom => community}/gitlab/Dockerfile (100%) rename gateways/{custom => community}/gitlab/cmd/main.go (95%) rename gateways/{custom => community}/gitlab/config.go (100%) rename gateways/{custom => community}/gitlab/start.go (100%) rename gateways/{custom => community}/gitlab/validate.go (100%) rename gateways/{custom => community}/gitlab/validate_test.go (100%) rename gateways/{custom => community}/storagegrid/Dockerfile (100%) rename gateways/{custom => community}/storagegrid/cmd/main.go (92%) rename gateways/{custom => community}/storagegrid/config.go (100%) rename gateways/{custom => community}/storagegrid/start.go (100%) rename gateways/{custom => community}/storagegrid/validate.go (100%) rename gateways/{custom => community}/storagegrid/validate_test.go (100%) create mode 100644 gateways/core/artifact/install.md create mode 100644 gateways/core/calendar/install.md create mode 100644 gateways/core/file/install.md create mode 100644 gateways/core/resource/install.md create mode 100644 gateways/core/stream/amqp/install.md create mode 100644 gateways/core/stream/kafka/install.md create mode 100644 gateways/core/stream/mqtt/install.md create mode 100644 gateways/core/stream/nats/install.md create mode 100644 gateways/core/webhook/install.md delete mode 100644 pkg/apis/sensor/v1alpha1/build/generated.json diff --git a/CHANGELOG.md b/CHANGELOG.md index 8180daef7c..e85b30c32a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## v0.7 ++ Refactor gateways #147 ++ Fixed sensor error state recovery bug #145 ++ Ability to add annotations on sensor and gateway pods #143 ++ Github gateway ++ Added support for NATS standard and streaming as communication protocol between gateway + and sensor #99 + ## v0.6 + Gitlab Gateway #120 + If sensor is repeatable then deploy it as deployment else job #109 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 8950e3e586..a9284ce3d8 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -48,7 +48,7 @@ make all Follow the rest of the [quickstart guide](docs/quickstart.md) to install components. ## Changing Types -If you're making a change to the `pkg/apis/sensor/v1alpha1` package, please ensure you re-run the K8 code-generator scripts found in the `/hack` folder. First, ensure you have the `generate-groups.sh` script at the path: `vendor/k8s.io/code-generator/`. Next run the following commands in order: +If you're making a change to the `pkg/apis` package, please ensure you re-run the K8 code-generator scripts found in the `/hack` folder. First, ensure you have the `generate-groups.sh` script at the path: `vendor/k8s.io/code-generator/`. Next run the following commands in order: ``` $ make codegen ``` diff --git a/Makefile b/Makefile index 8757678e9d..ecc0955b10 100644 --- a/Makefile +++ b/Makefile @@ -194,33 +194,33 @@ mqtt-image: mqtt-linux # Custom gateways storage-grid: - CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -v -ldflags '${LDFLAGS}' -o ${DIST_DIR}/storagegrid-gateway ./gateways/custom/storagegrid/cmd + CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -v -ldflags '${LDFLAGS}' -o ${DIST_DIR}/storagegrid-gateway ./gateways/community/storagegrid/cmd storage-grid-linux: CGO_ENABLED=0 GOOS=linux GOARCH=amd64 make storage-grid storage-grid-image: storage-grid-linux - docker build -t $(IMAGE_PREFIX)storage-grid-gateway:$(IMAGE_TAG) -f ./gateways/custom/storagegrid/Dockerfile . + docker build -t $(IMAGE_PREFIX)storage-grid-gateway:$(IMAGE_TAG) -f ./gateways/community/storagegrid/Dockerfile . @if [ "$(DOCKER_PUSH)" = "true" ] ; then docker push $(IMAGE_PREFIX)storage-grid-gateway:$(IMAGE_TAG) ; fi gitlab: - CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -v -ldflags '${LDFLAGS}' -o ${DIST_DIR}/gitlab-gateway ./gateways/custom/gitlab/cmd + CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -v -ldflags '${LDFLAGS}' -o ${DIST_DIR}/gitlab-gateway ./gateways/community/gitlab/cmd gitlab-linux: CGO_ENABLED=0 GOOS=linux GOARCH=amd64 make gitlab gitlab-image: gitlab-linux - docker build -t $(IMAGE_PREFIX)gitlab-gateway:$(IMAGE_TAG) -f ./gateways/custom/gitlab/Dockerfile . + docker build -t $(IMAGE_PREFIX)gitlab-gateway:$(IMAGE_TAG) -f ./gateways/community/gitlab/Dockerfile . @if [ "$(DOCKER_PUSH)" = "true" ] ; then docker push $(IMAGE_PREFIX)gitlab-gateway:$(IMAGE_TAG) ; fi github: - CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -v -ldflags '${LDFLAGS}' -o ${DIST_DIR}/github-gateway ./gateways/custom/github/cmd + CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -v -ldflags '${LDFLAGS}' -o ${DIST_DIR}/github-gateway ./gateways/community/github/cmd github-linux: CGO_ENABLED=0 GOOS=linux GOARCH=amd64 make github github-image: github-linux - docker build -t $(IMAGE_PREFIX)github-gateway:$(IMAGE_TAG) -f ./gateways/custom/github/Dockerfile . + docker build -t $(IMAGE_PREFIX)github-gateway:$(IMAGE_TAG) -f ./gateways/community/github/Dockerfile . @if [ "$(DOCKER_PUSH)" = "true" ] ; then docker push $(IMAGE_PREFIX)github-gateway:$(IMAGE_TAG) ; fi test: diff --git a/README.md b/README.md index b0b3359af8..979bfd834b 100644 --- a/README.md +++ b/README.md @@ -3,14 +3,14 @@ [![Go Report Card](https://goreportcard.com/badge/github.com/argoproj/argo-events)](https://goreportcard.com/report/github.com/argoproj/argo-events) ## What is Argo Events? -Argo Events is an open source event-based dependency manager for Kubernetes. The core concept of the project are - * `gateways` which are implemented as a Kubernetes-native Custom Resource Definition that either produce the events internally or process the events that originate from outside the gateways +Argo Events is an event-based dependency manager for Kubernetes. The core concept of the project are + * `gateways` which are implemented as a Kubernetes-native Custom Resource Definition that process events from event source. - * `sensors` which are implemented as a Kubernetes-native Custom Resource Definition that define a set of dependencies and trigger actions. + * `sensors` which are implemented as a Kubernetes-native Custom Resource Definition that define a set of event dependencies and trigger actions. - - Define multiple dependencies from a variety of gateway sources + - Define multiple dependencies from a variety of gateway event sources - Build custom gateways to support business-level constraint logic - - Trigger messages and Kubernetes object creation after successful dependency resolution + - Trigger Kubernetes object creation after successful dependency resolution - Trigger escalation after errors, or dependency constraint failures - Build and manage a distributed, cross-team, event-driven architecture - Easily leverage Kubernetes-native APIs to monitor dependencies @@ -23,10 +23,36 @@ Argo Events is an open source event-based dependency manager for Kubernetes. The - Scalable & Resilient. - Simple or Complex dependencies. Manage everything from simple, linear, real-time dependencies to complex, multi-source, batch job dependencies. +
+
+ +![](docs/architecture.png) + +
+
+ ## Getting Started [![asciicast](https://asciinema.org/a/207973.png)](https://asciinema.org/a/207973) -- [Installation](./docs/quickstart.md) -- [Guide](./docs/tutorial.md) -- [Want to contribute or develop/run locally?](./CONTRIBUTING.md) -- See where the project is headed in the [roadmap](./ROADMAP.md) +
+
+ +1. [Installation](./docs/quickstart.md) +2. [Sensor and gateway controllers](docs/controllers-guide.md) +3. [Learn about gateways](docs/gateway-guide.md) +4. [Learn about sensors](docs/sensor-guide.md) +5. [Learn about triggers](docs/trigger-guide.md) +6. Install Gateways and Sensors + 1. [Webhook](gateways/core/webhook/install.md) + 2. [Artifact](gateways/core/artifact/install.md) + 3. [Calendar](gateways/core/calendar/install.md) + 4. [Resource](gateways/core/resource/install.md) + 5. [File](gateways/core/file/install.md) + 6. Streams + 1. [NATS](gateways/core/stream/nats/install.md) + 2. [KAFKA](gateways/core/stream/kafka/install.md) + 3. [AMQP](gateways/core/stream/amqp/install.md) + 4. [MQTT](gateways/core/stream/mqtt/install.md) +7. [Write your own gateway](docs/custom-gateway.md) +8. [Want to contribute or develop/run locally?](./CONTRIBUTING.md) +9. See where the project is headed in the [roadmap](./ROADMAP.md) diff --git a/ROADMAP.md b/ROADMAP.md index 70c08b84fd..192022a392 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -1,9 +1,8 @@ # Roadmap ## Development Phase +- Boolean logic for event dependencies in sensor - E2E testing -- Add NATS Streaming as internal pub-sub system -- Add SNS & SQS gateway Support ## Idea Phase - Use [hashicorp/go-getter](https://github.com/hashicorp/go-getter) for the `ArtifactReader` interface. diff --git a/docs/architecture.png b/docs/architecture.png index a5515f4c8f2647d33eb6133d90509f202d83cbbb..f2de1b75e058b7ce9f2cb576000e2094a302f733 100644 GIT binary patch literal 122032 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�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 KE>bUC|My>ZYOpx~ literal 130074 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%0AIgDkAyK}N{v|u3 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 IoJIKm0NfX0TL1t6 diff --git a/docs/artifact-guide.md b/docs/artifact-guide.md index b88645a4f8..b4ffc84495 100644 --- a/docs/artifact-guide.md +++ b/docs/artifact-guide.md @@ -6,60 +6,14 @@ Inlined artifacts are included directly within the sensor resource and decoded a ## S3 Amazon Simple Storage Service (S3) is a block/file/object store for the internet. The standardized [API](https://docs.aws.amazon.com/AmazonS3/latest/API/Welcome.html) allows storage and retrieval of data at any time from anywhere on the web. There are a number of S3 providers that include, but are not limited to: -* [Amazon S3](https://aws.amazon.com/s3/?nc2=h_m1) -* [Minio](https://minio.io/) -* [NetApp](https://www.netapp.com/us/products/data-management-software/object-storage-grid-sds.aspx) -* [CEPH](http://docs.ceph.com/docs/master/radosgw/s3/) -* [Rook](https://rook.io/) - ### Minio -Argo Events uses the [minio-go](https://github.com/minio/minio-go) client for access to any Amazon S3 compatible object store. [Minio](https://www.minio.io/) is an distributed object storage server. Follow the Minio [Bucket Notification Guide](https://docs.minio.io/docs/minio-bucket-notification-guide) for help with configuring your minio server to listen and monitor for bucket event notifications. Note that you will need to setup a supported message queue for configuring your notification targets (i.e. NATS, WebHooks, Kafka, etc.). - -#### Installation on Kubernetes -The [Minio Deployment Quickstart Guide](https://docs.minio.io/docs/minio-deployment-quickstart-guide.html) is useful for help in getting Minio up & running on your orchestration platform. We've also outlined additional steps below to use Minio for signal notifications and as an object store for trigger resources. - -1. Install the Helm chart -``` -$ helm init -... -$ helm install stable/minio --name artifacts --set service.type=LoadBalancer -... - -$ #Verify that the minio pod, the minio service and minio secret are present -$ kubectl get all -n default -l app=minio - -NAME READY STATUS RESTARTS AGE -pod/artifacts-minio-85547b6bd9-bhtt8 1/1 Running 0 21m - -NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE -service/artifacts-minio ClusterIP None 9000/TCP 21m - -NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE -deployment.apps/artifacts-minio 1 1 1 1 21m - -NAME DESIRED CURRENT READY AGE -replicaset.apps/artifacts-minio-85547b6bd9 1 1 1 21m -``` - -2. Create a bucket in Minio and upload the hello-world.yaml into that bucket. -Download the hello-world.yaml from https://raw.githubusercontent.com/argoproj/argo/master/examples/hello-world.yaml -``` -$ kubectl port-forward `kubectl get pod -l app=minio -o name` 9000:9000 -``` -Open the browser at http://localhost:9000 -Create a new bucket called 'workflows'. -Upload the hello-world.yaml into that bucket - +Argo Events uses the [minio-go](https://github.com/minio/minio-go) client for access to any Amazon S3 compatible object store. [Minio](https://www.minio.io/) is an distributed object storage server. Follow the Minio [Name Notification Guide](https://docs.minio.io/docs/minio-bucket-notification-guide) for help with configuring your minio server to listen and monitor for bucket event notifications. Note that you will need to setup a supported message queue for configuring your notification targets (i.e. NATS, WebHooks, Kafka, etc.). -#### Enabling bucket notifications -Once the Minio server is configured with a notification target and you have restarted the server to put the changes into effect, you now need to explicitely enable event notifications for a specified bucket. Enabling these notifications are out of scope of Argo Events since bucket notifications are a construct within Minio that exists at the `bucket` level. To avoid multiple sensors on the same S3 bucket conflicting with each other, creating, updating, and deleting Minio bucket notifications should be delegated to a separate process with knowledge of all notification targets including those outside of the Argo Events. -``` -$ k edit configmap artifacts-minio -$ k delete pod artifacts-minio -``` +## File +Artifacts are defined in a file that is mounted via a [PersistentVolume](https://kubernetes.io/docs/concepts/storage/persistent-volumes/) within the `sensor-controller` pod. -## File (future enhancement) -This will enable access to file artifacts via a filesystem mounted as a [PersistentVolume](https://kubernetes.io/docs/concepts/storage/persistent-volumes/) within the `sensor-controller` pod. +## URL +Artifacts are accessed from web via RESTful API. -## URL (future enhancement) -This will enable access to web artifacts via RESTful API. \ No newline at end of file +## Configmap +Artifact stored in Kubernetes configmap are accessed using the key. \ No newline at end of file diff --git a/docs/controllers-guide.md b/docs/controllers-guide.md index 1cba6a96b3..c5cc5161c8 100644 --- a/docs/controllers-guide.md +++ b/docs/controllers-guide.md @@ -1,6 +1,6 @@ ## Controllers -* Sensor and Gateway controller are the components which manage Sensor and Gateway resources. +* Sensor and Gateway controllers are the components which manage Sensor and Gateway resources. * Sensor and Gateway are Kubernetes Custom Resources. For more information on K8 CRDs visit, https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/ @@ -20,9 +20,9 @@ data: namespace: my-custom-namespace # optional ``` -If you don't provide namespace, controller will watch all namespaces for gateway resource. +`namespace`: If you don't provide namespace, controller will watch all namespaces for gateway resource. -Note on `instance-id`: it is used to map a gateway or sensor to a controller. +`instance-id`: it is used to map a gateway or sensor to a controller. e.g. when you create a gateway with label `gateways.argoproj.io/gateway-controller-instanceid: argo-events`, a controller with label `argo-events` will process that gateway. `instance-id` for controller are managed using [controller-configmap](https://raw.githubusercontent.com/argoproj/argo-events/master/hack/k8s/manifests/gateway-controller-configmap.yaml) Basically `instance-id` is used to horizontally scale controllers, so you won't end up overwhelming a controller with large @@ -32,73 +32,6 @@ Basically `instance-id` is used to horizontally scale controllers, so you won't ### Gateway controller Gateway controller watches gateway resource and manages lifecycle of a gateway. -```yaml -# The gateway-controller listens for changes on the gateway CRD and creates gateway -apiVersion: apps/v1beta1 -kind: Deployment -metadata: - name: gateway-controller -spec: - replicas: 1 - template: - metadata: - labels: - app: gateway-controller - spec: - serviceAccountName: argo-events-sa - containers: - - name: gateway-controller - image: argoproj/gateway-controller:latest - imagePullPolicy: Always - env: - - name: GATEWAY_NAMESPACE - valueFrom: - fieldRef: - fieldPath: metadata.namespace - - name: GATEWAY_CONTROLLER_CONFIG_MAP - value: gateway-controller-configmap -``` - -* Lifecycle of Gateway in gateway controller - - ![](gateway-controller-fsm.png) ### Sensor controller Sensor controller watches sensor resource and manages lifecycle of a sensor. -```yaml -# The sensor-controller listens for changes on the sensor CRD and creates sensor executor jobs -apiVersion: apps/v1beta1 -kind: Deployment -metadata: - name: sensor-controller -spec: - replicas: 1 - template: - metadata: - labels: - app: sensor-controller - spec: - serviceAccountName: argo-events-sa - containers: - - name: sensor-controller - image: argoproj/sensor-controller:latest - imagePullPolicy: Always - env: - - name: SENSOR_NAMESPACE - valueFrom: - fieldRef: - fieldPath: metadata.namespace - - name: SENSOR_CONFIG_MAP - value: sensor-controller-configmap -``` - -* Lifecycle of a Sensor managed by sensor controller - - ![](sensor-fsm.png) - -
- -* Lifecycle of Sensor within sensor pod - - ![](sensor-pod-fsm.png) - \ No newline at end of file diff --git a/docs/core-gateway-style.png b/docs/core-gateway-style.png deleted file mode 100644 index 4dc9c562831b95c02178d94493baa5b4221b95a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46683 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 Below are the environment variables provided to all types of gateways +## Proto Definition +1. The proto file is located at https://github.com/argoproj/argo-events/blob/master/gateways/eventing.proto + +2. If you choose to implement the gateway in `go`, then you can find generated client stubs at https://github.com/argoproj/argo-events/blob/master/gateways/eventing.pb.go + +3. To create stubs in other languages, head over to gRPC website https://grpc.io/ + +4. Service + ```proto + /** + * Service for handling event sources. + */ + service Eventing { + // StartEventSource starts an event source and returns stream of events. + rpc StartEventSource(EventSource) returns (stream Event); + // ValidateEventSource validates an event source. + rpc ValidateEventSource(EventSource) returns (ValidEventSource); + } + ``` + +## Available Environment Variables to Server | Field | Description | |----------------------|--------------| - | TRANSFORMER_PORT | http server port running within gateway transformer | - | GATEWAY_NAMESPACE | namespace of the gateway | - | GATEWAY_PROCESSOR_CONFIG_MAP | map containing configurations to run in a gateway| - | GATEWAY_NAME | name of the gateway | + | GATEWAY_NAMESPACE | K8s namespace of the gateway | + | GATEWAY_EVENT_SOURCE_CONFIG_MAP | K8s configmap containing event source| + | GATEWAY_NAME | name of the gateway | | GATEWAY_CONTROLLER_INSTANCE_ID | gateway controller instance id | + | GATEWAY_CONTROLLER_NAME | gateway controller name + | GATEWAY_SERVER_PORT | Port on which the gateway gRPC server should run -## Core Gateway Style -The most straightforward option. The gateway consists of two components, - -1. Gateway Processor: either generates events internally or listens for external events and then -passes those events to gateway-transformer - -2. Gateway Transformer: transforms incoming events into cloudevents specification compliant events -and dispatches them to watchers. - -![](core-gateway-style.png) - -User needs to implement following interface. - -```go -type ConfigExecutor interface { - StartConfig(configContext *ConfigContext) - StopConfig(configContext *ConfigContext) - Validate(configContext *ConfigContext) error -} -``` - -ConfigData contains configuration key/name, value and the state of the configuration -```go -type ConfigData struct { - // Data holds the actual configuration - Data *ConfigData - - StartChan chan struct{} - - StopChan chan struct{} - - DataChan chan []byte - - DoneChan chan struct{} - - ErrChan chan error - - ShutdownChan chan struct{} - - // Active tracks configuration state as running or stopped - Active bool - // Cancel is called to cancel the context used by client to communicate with gRPC server. - // Use it only if gateway is implemented as gRPC server. - Cancel context.CancelFunc -} -``` - -GatewayConfig contains generic configuration for a gateway -```go -type GatewayConfig struct { - // Log provides fast and simple logger dedicated to JSON output - Log zerolog.Logger - // Clientset is client for kubernetes API - Clientset kubernetes.Interface - // Name is gateway name - Name string - // Namespace is namespace for the gateway to run inside - Namespace string - // KubeConfig rest client config - KubeConfig *rest.Config -} -``` - -* To send events back to framework for further processing, use -```go -gatewayConfig.DispatchEvent(event []byte, src string) error -``` - -For detailed implementation, check out [Core Gateways](https://github.com/argoproj/argo-events/tree/master/gateways/core) - -## gRPC gateway -A gRPC gateway has 3 components, -1. Gateway Processor Server - your implementation of gRPC streaming server, either generates events or listens to -external events and streams them back to gateway-processor-client - -2. Gateway Processor Client - gRPC client provided by framework that connects to gateway processor server. - -3. Gateway Transformer: transforms incoming events into cloudevents specification compliant events - and dispatches them to interested watchers. - -### Architecture - ![](grpc-gateway.png) - -To implement gateway processor server, you will need to implement -```proto -RunGateway(GatewayConfig) returns (stream Event) -``` -`RunGateway` method takes a gateway configuration and sends events over a stream. - -The gateway processor client opens a new connection for each gateway configuration and starts listening to -events on a stream. - -For detailed implementation, check out [Calendar gRPC gateway](https://github.com/argoproj/argo-events/tree/master/gateways/grpc/calendar) - -* To run gRPC gateway, you need to provide `rpcPort` in gateway spec. - -* To write gateway gRPC server using other languages than go, generate server interfaces using protoc. -Follow protobuf tutorials []()https://developers.google.com/protocol-buffers/docs/tutorials - -## HTTP Gateway -A gRPC gateway has 3 components, -1. Gateway Processor Server - your implementation of HTTP streaming server, either generates events or listens to -external events and streams them back to gateway-processor-client. User code must accept POST requests on `/start` and `/stop` -endpoints. - -2. Gateway Processor Client - sends configuration to gateway-processor-server on either `/start` endpoint for -a new configuration or `/stop` endpoint to stop a configuration. Processor client itself has a HTTP server -running internally listening for events from gateway-processor-server. - -3. Gateway Transformer: transforms incoming events into cloudevents specification compliant events - and dispatches them to watchers. - - -### Architecture -![](http-gateway.png) - -List of environment variables available to user code - -| Field | Description | -|----------------------|--------------| -| GATEWAY_PROCESSOR_SERVER_HTTP_PORT | Gateway processor server HTTP server port | -| GATEWAY_PROCESSOR_CLIENT_HTTP_PORT | Gateway processor client HTTP server port | -| GATEWAY_HTTP_CONFIG_START | Endpoint to post new configuration | -| GATEWAY_HTTP_CONFIG_STOP | Endpoint to make configuration to stop | -| GATEWAY_HTTP_CONFIG_EVENT | Endpoint to send events to | -| GATEWAY_HTTP_CONFIG_RUNNING | Endpoint to send activation notifications for the configuration / -| GATEWAY_HTTP_CONFIG_ERROR | Endpoint on which which gateway processor listens for errors from configurations | - -For detailed implementation, check out [Calendar HTTP gateway](https://github.com/argoproj/argo-events/tree/master/gateways/rest/calendar) - -## Framework independent -The fourth option is you provide gateway implementation from scratch: watch the configuration -updates, start/stop configuration if needed. Only requirement is that events must be -dispatched to gateway-transformer using HTTP post request. The port to dispatch the event -is made available through environment variable `TRANSFORMER_PORT`. - -### Gateway Examples -* Example gateway definitions are available at [here](https://github.com/argoproj/argo-events/tree/master/examples/gateways) \ No newline at end of file +## Implementation +You can find existing gateway implementation at https://github.com/argoproj/argo-events/tree/master/gateways/core \ No newline at end of file diff --git a/docs/gateway-controller-fsm.png b/docs/gateway-controller-fsm.png deleted file mode 100644 index fe8537f0dd3d5ffdfa85ddc19c22a7e760248e9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 66725 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 diff --git a/docs/gateway-guide.md b/docs/gateway-guide.md index 2b392ba41e..8a930a37e0 100644 --- a/docs/gateway-guide.md +++ b/docs/gateway-guide.md @@ -1,206 +1,71 @@ # Gateway Guide +1. [What is a gateway](#what-is-a-gateway) +2. [Components](#components) +2. [Specification](#specification) +4. [Managing Event Sources](#managing-event-sources) +5. [How to write a custom gateway?](#how-to-write-a-custom-gateway) +6. [Examples](#examples) + ## What is a gateway? -A gateway is a long running/repeatable process whose tasks are to process and transform either the internally produced events or -external events into the [cloudevents specification](https://github.com/cloudevents/spec) compliant events and dispatch them to watchers(sensors and/or gateways). +A gateway is a long running/repeatable process whcih consumes events from event sources, transform them into the [cloudevents specification](https://github.com/cloudevents/spec) compliant events and dispatch them to watchers(sensors and/or gateways). -## Gateway Components +### Components A gateway has two components: - 1. gateway-processor: Either generates the events internally or listens to external events. - The implementation of gateway-processor is provided by the user which means the user can easily create a custom gateway. - - 2. gateway-transformer: Transforms the incoming events from gateway-processor into a cloudevents specification compliant events. - The event is then dispatched to watchers. + 1. gateway-client: It creates one or more gRPC clients depending on event sources, consumes events from server, transforms these events into cloudevents and dispatches them to watchers. + Refer https://github.com/cloudevents/spec for more info on cloudevents specifications. + + 2. gateway-server: It is a gRPC server that consumes event from event sources and dispatches to gRPC client/s created by gateway client - Refer https://github.com/cloudevents/spec for more info on cloudevents specifications. +### Core gateways + 1. **Calendar**: + Events produced can be based on a [cron](https://crontab.guru/) schedule or an [interval duration](https://golang.org/pkg/time/#ParseDuration). In addition, calendar gateway currently supports a `recurrence` field in which to specify special exclusion dates for which this gateway will not produce an event. -Core gateways come in 5 types: + 2. **Webhooks**: + Webhook gateway expose a basic HTTP server endpoint/s. + Users can register multiple REST API endpoint. See Request Methods in RFC7231 to define the HTTP REST endpoint. -| Type | Description | -|-------------|-----------------------------------------| -| `Stream` | Listens to messages on a queue/topic | -| `Artifact` | Listens to S3 Bucket Notifications | -| `Calendar` | Produces events internally depending upon date/time schedules or intervals | -| `Resource` | Watches Kubernetes resources | -| `Webhook` | Reacts to HTTP webhook notifications (Git, JIRA, Trello etc.) | + 3. **Kubernetes Resources**: + Resource gateway support watching Kubernetes resources. Users can specify `group`, `version`, `kind`, and filters including prefix of the object name, labels, annotations, and createdBy time. + 4. **Artifacts**: + Artifact gateway support S3 `bucket-notifications` via [Minio](https://docs.minio.io/docs/minio-bucket-notification-guide). Note that a supported notification target must be running, exposed, and configured in the Minio server. For more information, please refer to the [artifact guide](artifact-guide.md). -\ -In order to take advantage of the various gateway types, you may need to install compatible message platforms (e.g. amqp, mmqp, NATS, etc..) and s3 api compatible object storage servers (e.g. Minio, Rook, CEPH, NetApp). See the [artifact guide](artifact-guide.md) for installing object stores. + 5. **Streams**: + Stream gateways contain a generic specification for messages received on a queue and/or though messaging server. The following are the `builtin` supported stream gateways. -## Architecture -![](architecture.png) + 1. **NATS**: + [Nats](https://nats.io/) is an open-sourced, lightweight, secure, and scalable messaging system for cloud native applications and microservices architecture. It is currently a hosted CNCF Project. - -## Gateway Controller -The `gateway-controller` is responsible for managing the `Gateway` resources. + 2. **MQTT**: + [MMQP](http://mqtt.org/) is a M2M "Internet of Things" connectivity protocol (ISO/IEC PRF 20922) designed to be extremely lightweight and ideal for mobile applications. Some broker implementations can be found [here](https://github.com/mqtt/mqtt.github.io/wiki/brokers). -## Gateway Specification + 3. **AMQP**: + [AMQP](https://www.amqp.org/) is a open standard messaging protocol (ISO/IEC 19464). There are a variety of broker implementations including, but not limited to the following: + - [Apache ActiveMQ](http://activemq.apache.org/) + - [Apache Qpid](https://qpid.apache.org/) + - [StormMQ](http://stormmq.com/) + - [RabbitMQ](https://www.rabbitmq.com/) + 4. **Kafka** + [Apache Kafka](https://kafka.apache.org/) is a distributed streaming platform. We use Shopify's [sarama](https://github.com/Shopify/sarama) client for consuming Kafka messages. -| Field | Description | -|----------------------|--------------| -| DeploySpec | Pod specification for gateway -| ConfigMap | Name of the configmap containing gateway configuration/s | -| Type | Type of gateway | -| EventVersion | To mark event version | -| ImageVersion | ImageVersion is the version for gateway components images to run | -| ServiceSpec | Specifications of the service to expose the gateway | -| Watchers | Watchers are components which are interested listening to notifications from the gateway | -| RPCPort | Used to communicate between gRPC gateway client and gRPC gateway server | -| HTTPServerPort | Used to communicate between gateway client and server over http | -| DispatchMechanism | Messaging mechanism used to send events from gateway to watchers | +### Community gateways +https://github.com/argoproj/argo-events/tree/master/gateways/community -## Gateway Deployment +In order to take advantage of the various gateway types, you may need to install compatible message platforms (e.g. amqp, mmqp, NATS, etc..) and s3 api compatible object storage servers (e.g. Minio, Rook, CEPH, NetApp). -All core gateways use kubernetes configmap to keep track of current gateway configurations. Multiple configurations can be defined for a single gateway and -each configuration will run in a separate go routine. The gateway watches updates to configmap which let us add new configuration at run time. +## Specification +https://github.com/argoproj/argo-events/blob/master/docs/gateway-protocol.md + +## Managing Event Sources +All gateways use kubernetes configmap to keep track of event sources. Multiple event source can be defined for a gateway. The gateway watches updates to configmap which let us add new event sources at run time. ## How to write a custom gateway? -Follow this tutorial to learn more -[Custom Gateways](custom-gateway.md) - - -## Gateway configurations -Gateway can have zero configuration(idle) or many configurations. A configuration can be added or removed during the runtime. - -### Calendars -Events produced can be based on a [cron](https://crontab.guru/) schedule or an [interval duration](https://golang.org/pkg/time/#ParseDuration). In addition, calendar gateway currently supports a `recurrence` field in which to specify special exclusion dates for which this gateway will not produce an event. -``` - calendar.fooConfig: |- - interval: 10s - calendar.barConfig: |- - schedule: 30 * * * * -``` - -### Webhooks -Webhook gateway expose a basic HTTP server endpoint/s. -Users can register multiple REST API endpoint. See Request Methods in RFC7231 to define the HTTP REST endpoint. - -``` - # portConfig defines port on which http server should run. Also it serves as index route. - webhook.portConfig: |- - port: "12000" - endpoint: "/" - method: "POST" - webhook.fooConfig: |- - endpoint: "/foo" - method: "POST" -``` - -### Kubernetes Resources -Resource gateway support watching Kubernetes resources. Users can specify `group`, `version`, `kind`, and filters including prefix of the object name, labels, annotations, and createdBy time. - -``` - resource.fooConfig: |- - namespace: argo-events - group: "argoproj.io" - version: "v1alpha1" - kind: "Workflow" - filter: - prefix: scripts-bash - labels: - workflows.argoproj.io/phase: Succeeded -``` - -### Artifacts -Artifact gateway support S3 `bucket-notifications` via [Minio](https://docs.minio.io/docs/minio-bucket-notification-guide). Note that a supported notification target must be running, exposed, and configured in the Minio server. For more information, please refer to the [artifact guide](artifact-guide.md). -``` - s3.fooConfig: |- - s3EventConfig: - bucket: foo - endpoint: minio.argo-events:9000 - event: s3:ObjectCreated:Put - filter: - prefix: "" - suffix: "" - insecure: true - accessKey: - key: accesskey - name: minio - secretKey: - key: secretkey - name: minio - s3.barConfig: |- - s3EventConfig: - bucket: bar - endpoint: minio.argo-events:9000 - event: s3:ObjectCreated:Get - filter: - prefix: "xyz" - suffix: "" - insecure: true - accessKey: - key: accesskey - name: minio - secretKey: - key: secretkey - name: minio -``` - -### Streams -Stream gateways contain a generic specification for messages received on a queue and/or though messaging server. The following are the `builtin` supported stream gateways. - -#### NATS -[Nats](https://nats.io/) is an open-sourced, lightweight, secure, and scalable messaging system for cloud native applications and microservices architecture. It is currently a hosted CNCF Project. -``` - nats.fooConfig: |- - url: nats://nats.argo-events:4222 - subject: foo - nats.barConfig: |- - url: nats://nats.argo-events:4222 - subject: bar -``` - - -#### MQTT -[MMQP](http://mqtt.org/) is a M2M "Internet of Things" connectivity protocol (ISO/IEC PRF 20922) designed to be extremely lightweight and ideal for mobile applications. Some broker implementations can be found [here](https://github.com/mqtt/mqtt.github.io/wiki/brokers). -``` - mqtt.fooConfig: |- - url: tcp://mqtt.argo-events:1883 - topic: foo - mqtt.barConfig: |- - url: tcp://mqtt.argo-events:1883 - topic: bar -``` - - -#### AMQP -[AMQP](https://www.amqp.org/) is a open standard messaging protocol (ISO/IEC 19464). There are a variety of broker implementations including, but not limited to the following: -- [Apache ActiveMQ](http://activemq.apache.org/) -- [Apache Qpid](https://qpid.apache.org/) -- [StormMQ](http://stormmq.com/) -- [RabbitMQ](https://www.rabbitmq.com/) -``` - amqp.fooConfig: |- - url: amqp://amqp.argo-events:5672 - exchangeName: fooExchangeName - exchangeType: fanout - routingKey: fooRoutingKey - amqp.barConfig: |- - url: amqp://amqp.argo-events:5672 - exchangeName: barExchangeName - exchangeType: fanout - routingKey: barRoutingKey -``` - - -#### Kafka -[Apache Kafka](https://kafka.apache.org/) is a distributed streaming platform. We use Shopify's [sarama](https://github.com/Shopify/sarama) client for consuming Kafka messages. -``` - kafka.fooConfig: |- - url: kafka.argo-events:9092 - attributes: - topic: foo - partition: "0" - kafka.barConfig: |- - url: kafka.argo-events:9092 - topic: bar - partition: "1" -``` - -### Examples -Explore [Gateway Examples](https://github.com/argoproj/argo-events/tree/master/examples/gateways) \ No newline at end of file +Follow [Custom Gateways](custom-gateway.md) + +## Examples +Explore [Gateway Examples](https://github.com/argoproj/argo-events/tree/master/examples/gateways) diff --git a/docs/gateway-protocol.md b/docs/gateway-protocol.md index bc9a89d875..8855d3d0d0 100644 --- a/docs/gateway-protocol.md +++ b/docs/gateway-protocol.md @@ -4,12 +4,15 @@ ## Table of Contents - [github.com/argoproj/argo-events/pkg/apis/gateway/v1alpha1/generated.proto](#github.com/argoproj/argo-events/pkg/apis/gateway/v1alpha1/generated.proto) + - [EventProtocol](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.EventProtocol) - [Gateway](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.Gateway) - [GatewayList](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.GatewayList) - [GatewayNotificationWatcher](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.GatewayNotificationWatcher) - [GatewaySpec](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.GatewaySpec) - [GatewayStatus](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.GatewayStatus) - [GatewayStatus.NodesEntry](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.GatewayStatus.NodesEntry) + - [Http](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.Http) + - [Nats](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.Nats) - [NodeStatus](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.NodeStatus) - [NotificationWatchers](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.NotificationWatchers) - [SensorNotificationWatcher](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.SensorNotificationWatcher) @@ -29,6 +32,23 @@ + + +### EventProtocol +Dispatch protocol contains configuration necessary to dispatch an event to sensor over different communication protocols + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| type | [string](#string) | optional | | +| http | [Http](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.Http) | optional | | +| nats | [Nats](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.Nats) | optional | | + + + + + + ### Gateway @@ -40,7 +60,7 @@ Gateway is the definition of a gateway resource | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| metadata | [k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta](#k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta) | optional | +k8s:openapi-gen=false | +| metadata | [k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta](#k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta) | optional | | | status | [GatewayStatus](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.GatewayStatus) | optional | | | spec | [GatewaySpec](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.GatewaySpec) | optional | | @@ -58,7 +78,7 @@ GatewayList is the list of Gateway resources | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| metadata | [k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta](#k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta) | optional | +k8s:openapi-gen=false | +| metadata | [k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta](#k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta) | optional | | | items | [Gateway](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.Gateway) | repeated | | @@ -98,7 +118,7 @@ GatewaySpec represents gateway specifications | serviceSpec | [k8s.io.api.core.v1.Service](#k8s.io.api.core.v1.Service) | optional | ServiceSpec is the specifications of the service to expose the gateway Refer https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.11/#service-v1-core | | watchers | [NotificationWatchers](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.NotificationWatchers) | optional | Watchers are components which are interested listening to notifications from this gateway These only need to be specified when gateway dispatch mechanism is through HTTP POST notifications. In future, support for NATS, KAFKA will be added as a means to dispatch notifications in which case specifying watchers would be unnecessary. | | processorPort | [string](#string) | optional | Port on which the gateway event source processor is running on. | -| dispatchProtocol | [string](#string) | optional | DispatchProtocol is the underlying protocol used to send events from gateway to watchers(components interested in listening to event from this gateway) | +| eventProtocol | [EventProtocol](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.EventProtocol) | optional | EventProtocol is the underlying protocol used to send events from gateway to watchers(components interested in listening to event from this gateway) | @@ -139,6 +159,39 @@ GatewayStatus contains information about the status of a gateway. + + +### Http + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| port | [string](#string) | optional | | + + + + + + + + +### Nats + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| url | [string](#string) | optional | | +| type | [string](#string) | optional | | +| clientId | [string](#string) | optional | | +| clusterId | [string](#string) | optional | | + + + + + + ### NodeStatus @@ -148,13 +201,13 @@ A single node can represent one configuration. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| id | [string](#string) | optional | ID is a unique identifier of a node within a gateway It is a hash of the node name | +| id | [string](#string) | optional | ID is a unique identifier of a node within a sensor It is a hash of the node name | | name | [string](#string) | optional | Name is a unique name in the node tree used to generate the node ID | | displayName | [string](#string) | optional | DisplayName is the human readable representation of the node | | phase | [string](#string) | optional | Phase of the node | | startedAt | [k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime](#k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime) | optional | StartedAt is the time at which this node started +k8s:openapi-gen=false | | message | [string](#string) | optional | Message store data or something to save for configuration | -| updateTime | [k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime](#k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime) | optional | UpdateTime is the time when node(gateway configuration) was updated +k8s:openapi-gen=false | +| updateTime | [k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime](#k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime) | optional | UpdateTime is the time when node(gateway configuration) was updated | @@ -180,12 +233,12 @@ NotificationWatchers are components which are interested listening to notificati ### SensorNotificationWatcher -SensorNotificationWatcher is the gateway interested in listening to notifications from this gateway +SensorNotificationWatcher is the sensor interested in listening to notifications from this gateway | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| name | [string](#string) | optional | Name is name of the gateway | +| name | [string](#string) | optional | Name is name of the sensor | diff --git a/docs/grpc-gateway.png b/docs/grpc-gateway.png deleted file mode 100644 index 3091f6f99f7ef79f80cd33475c5b50f737d80bb2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 69618 zcmbq*1yG#Zwq_t`aEG9Q;O;KLgS$fq53a$R1`^yt2yOwA5G1&}y9W2h9U7;hf$7}2 zIp@6l-qh68P)!vDz5l)UTHn%dHIW)>3RuscKYQ}z3D#>xS*<5e5TWpILo^ilZ+O43 zBtLmV^W?ScD;*!R!z@%!ou0+soR9M8{1+>)q@-m15@}V7Xd(y;f9YtH2L(m^(%dsB z{}QB>M5`<7mk@WcA|3vO`J+_pIp$;2D*i7t<+(!%k2r-&|C1$O5U>AEn)gcDX$1T$ z=o4B*&_7>8xR8(i-f4}WU(nJZ{{4D`rnp)B;=jH%8V~-?if2i}f4}Ybl7upWf3BoK zn_o=@-Zk-vvW|1E2Be7N4ulyI8-Q5|qN zd$XF%`!gz#I!{7Hog&H3$I?C!N-*OFh~gf^!y;)7vlSu_w?=l9{;6bi87W#xbD_Qi z=AEbN8+Vs<8bS_sgrjHD&1XL8f~Kv$*gIv^;qfUr_C$7Jgz7XOcI_4lZ2xhDs^3TG zOg9ezzP)jxXbE^S5TGSuj=rJ)^5o@;5NSCw6+~*jnV$l`%Y~Y_+YpC?*ycgPtW|M8 zODqt1+VtIKXlFNcSt!sB=egu8p73N(v+~&V zm+1O{12J0K;}->>7fUT9adasUT}AgExX+1Wn#rPa?Q?tUN!&;Z%BVVSyP}`Srq(>u z#o*^|LZ)o0C&`Ha$+Z}~J!XJueLnLcz5wU=LwLGr7_3_L#|DeOaO5B93L(QWT<|08 zF7(Fjp6ToPP!udpSwyoi+eGvD!>W8E;e%o#AAjl6GpU75vR9fptiV@DtLVKQ=b{zI z5Q{2fjoNBx0x!^9n{Z5q<#rjT?=~&B}Q&<4B(QBVn4x3y{;-3spPmFfkLMn86OT zq^v(cZr6TElkiBmc0SRh<|4hj?D|zD`HDG3Ha@3i;kmpIOS!=v|aVgQi4~mBy zj6_G1a3VGJs?LQr^yHqMvo6czJ%K(p?d}y;vq3%cub1jBUhanF8~&M%esdoJt(39| zh%f})-=KfimBv?0S)yKB>*&uGaFLeK8^izmu?BGD^+hplW6V&RMVZhEK0unx=lq>nv5_1Vupg!SGZ}E4!&gz%-(6l^@QYS4H82K83#wTz z=So7{?gx(1rS$%?E+NX_PtZZ{fyGT8xNWYR!7oH^IJr5kCgcX*c24=Kmi~NR%hp@4 z%DU{2N`eUB1{wcdOMt>OY$FBxi*yGH8ajqsXOVV7X2O%Yh2aE-0$yTO>%Xq=N{5IK zO<=h*>o&!_t71H}^}`;sVt)$vtb+E~JeO|hNUN=pm*EfXqWt0F&U%f2zc0A1DnA99BArRdYbMF(H*Z5;TGSjigs$d8-OEIUDn&^Di%>}p8?9W1QAslk3uDAPm zRRCZI8>d)J)cAYT@F#T&;y%t8>B;-MBJu~$b$Rc`CL-YFp*hgL`4o23bD7rt<1I&T6WV8urd54F}`4H}(yF$7E zVtUAI>()C-a?t55utcG=+>WWJ4SjzH$B-UZHn5cRc)2Bfo3kZ~qQT?M5{~8C-rh}l zj&`4Vt~1n+RLq7ez2!lvWXod{xlYDKbVm0wttiZTo!eMDb!!`Oht-kk(b& zf66^TGZ4_~p9jtEw}ipB$z6{on%JF|H)wSw(|drDxNi=|34=ynJ!>Q6Mx?wsmMSrO zz)5yCMC4TGR3YWZv-|bEgM4}6#p_Qm-AZHX&3w-0UQZQkP~V4NDimLp^;`;sn|SYB zQHC$tj&b^)ZDKR;Opb2)LFBBIldu|K7!pT$yU@R!tg~XfliWkv0i&z%E{nj=l^Exr zP5FBcs*r(Q^_U%TT3SRI35t-_z*|b0J}kL;C2Ot#FdCoTJn6yXN)V;7_m_!ctW%@A z+46u1cgzDx3VjYh#{nfk;aXyu>-;WFF^M4wnoSEjZyX`LSfR<3@I~oSBJTQ<@Kp1w z4_>CEH`Qv)J&G^JW>2UGNx9v!jm{4v1XKUENUMRwwcT7xQb~6)fs&OV5|-wmYAG+asZzsRipi8cwGsLAwH1O`E1^8X;ncGm`K=oz%@~rkg z33=U+o)Ha(TZYGV4lRvDgnnm!l&VI2RQ@in>FA6`*5c0#94w2C)8uoa5 zZ6j(mlEA;PGygc646E2g2yD4+dmrJCcXM0p!u76G$HVR<-ap@IM*wnq>ATC==zr%N z^WcezeJCE}r@EiJ*krnv(?M++7GOR&`Q3xuYAkI8MoC2#R@%~(9uS?(6xDtpSpH@P z@iWJDGgR!|!W6^f?tb*@PqR~;R_H$Y;X>_DHQ9{snnmacFcbZDYY~9^96w~In50M4 zr7e^P+03(RHcEx~kHhj=Kw8q;T#c>|&y9ww55r}xpsc`r^GiZ1bO)1=Q+G*^I{b=S zI*}yfxr=X45mC%eW}!wxNbkYe#RDS{0SCuJQaf@-ITbexdqiZR^PQK|VypnxV(Ljo zjdR$1+pxf+8Dxx_;c9iT&hcBNkUKbnjExJkK&@-xhkk1-wCP>JY=v!~86BH&)kikN zUvI^s(c5gDsNxc`a2()0rwBP=ynmCu=&eD`S3EzA$;YI|e33?62C%}usvPVXyTv*R zZxOwE(@_$7GgzL)iq>cUl65+1aWhG89y;iV_k{-Ymc?l|0I1Xsw22OCk zH7v0HJhpMIS9xO$V^GieU`FX@J{0!zhenN zJhP2Pd9F5-!eG2U!gK`Nrx2rMz5X;o#=y+Gr}Eg(L%)I8dUD7~-g9qZJ`N;Ga>}cc zMXo)SPlee&2ope`ZTDQUi^fEJ1()cyCF9K!o>F5&$I-^*b;&b=<(9+Vm3wyZY?ziB zRXq!YI*asTQQOLT4eBuG6G3x;H)J*sH>@aeq(M7_Vzwx#zGqv#mkzV1GvqG$`fc72 z`B}m8?J|C!rh8EwOpB6tXcr$`4BL>i%#LEpz6XYW`lkHFD3WC2sKt2~rdNP^NWS3m z!*^v#*Fyu67DCGJ!&mFHU}J+LvHM{Dc`Ta3g0K3Ki@dEkr7Zmth0@=Xiz;BWsChD% z#OuCkNQ@5Hdr>QLyI#c^tN(D22FN$rsw5TlEFqivh$nuT1G;En&fpLF60t)Qd`Un- z7_*vuA7(Z1DOct^PN@0>m-we~#7VDuY;CLi_Gsiv)++zX9kCOjCm4vjmcoOq)S~h1 zD80ICD_S3N9%84Mz(eL&eHqd*jyF)@aM8aR^Gnzy5 zhz#nTgHJJyX+d)za(fR{ac-y|hrqdm998AF6(S^!=}5fSdp>w6R->clU(O%dK|n!(=m>1?H47 zseDV_Ig|cNCr5z{Cf1vq2~2ulGJDhIN}3a^sKS>!r8$Wc8%zIWr~b$E4ZQuf*u$qcI-8g#C>lQSAXJuPiEq&<2< zW+6jf@Bgs{*maA;i@01F&wa%hpCvtWXb71wzRwFVD{aPcX1DV_8;GxZx!Khb&QJO! z6~N{HVjIR!F6_Qles98_Fs4xq3q7X;dp<#Y>XI6)X!KZZ)6z9(zA=1Bc)1ZsVT&Tl z21-6ObZVk@!|gCkgo4JpK64hx8Uv0RYr9VA`cx@%Bz&J&6^wD`%1)A~qMoBQ5`6$X zW=7HqM}e32o**G3=X&n_f}HyLum_X3c~~|6$@ZiWab1lQKy() z$NbS2WOprA5BLNG&OOEewE8#EhPF&2AkjzO7nFqi7bwQGZtalxQ;Q>#iK2%CCXM>du(CxlWqmWr2x)IDAh2fk{RB(oMZCr1I1_ccicCoY#iN z+A4d7J#cNlwWZw0W*@EajFm2z#~G4$+|`eQw_`JGKFS_roLw12?n52$)>R|8>Qm+rhHt22N4(DBBOkCEK)}{vZ27!35j0x0T=%ZAhO-{z# z)h(Vp9PU;5?1e7$-kBB$s#d!!tkm|yUD9NMS|0?xOT|Fb^KR3l1G4DS?1X}(mwquM ztMk*4=s@2^Dka&}F~=kM3-J0%$m1*qZ>id+eJqhF!i>x4yc?P}`!AaV$VCq(ORjuWzGal_T^c4ces= zu;Q}&wAMYG7F$iob>j<@_I8X-P}g$UTZI#~7AF&5x*^zdiOWbj;x?Hna2c&RxC1EJ zQyDr$^=2+t0hO0@Z=#B>mVMQw)$+&a{&ex_Fz?vQ%@f0a6kP~1aG6TPN_yEzJ_t9H zTAxqzbCnRd0D-^+2Gi%p1Qnfc>$4c@MmOKhcty|1nR|D}NX6J^C?sBAN__|o4Zdq< zRL8q+0YllG3&>1cCu%Gu;vG=63SK)&e>@!W-RQ+4knTioj#Dz>8ZwRck&p_=CP|}~ z$t^W)u^}Gh`Pv_-pVe=@t(Qje@dgU*5G-_wVK99EIRN?Gy!$I&@5We18ZgbWxXf74 zB@LnLarPVPCttr8b)di{*s3=fkJWgoNSwXNpu%4rl0XAWx-4rU8G<@bG{^G zFe-mX;IoUT|3<=#1C*T??Hy8+BpI}p$tpMIqu233+SAyNtW4QI`9Asg0m0j1d^&$s zJqY^r;49i3B680=2I-TPj=kc(wT*jM7+=f!lD9Z07sh}o$9#$pKJ4uU3DC+ZNqV@> zZhYVJ50noL;9P^6=&q%8pSx8}-v5>R(}Ho~g`O8_88V>vYa42w)b@@Bld_$Uzr8+T zcr_2n@2Y`5v$>f%P1{<~Vs(~v+w}#B{ENxI%Gu0_AlbmLgZ2KL6d7?pyJN=>d<6XE zmKr@UI=r1<6n1iF{+JhW(S!xump>lbd>+w$3a|Y|U0&(({3+!SQW$6wsKfV7D_jJ; zvd!W#nX7UQu9Osy{XrcpBfeCml|d8>v~^ zX1(|OzOJ*s*p-Jzxs~D-zyaXbpNGw`_dcykx~jbXqeUqs{HP$=2fB~gZ6tAf8NHoD zlcdm95s2dx;4W94uf`TBUdt2ynQE3g~M zY9JeVtN61*2FK3|>wDsVS4s%inb4&hgKoasyD4V_atvF}?giZg$W^$@n%6F647D&7xtJ5aZg~UpOgCz`rC6wz=>Q zD{+Yh>K5*aOi4O zI+*PnzAn9sNfjPE33o&ateOP`zw30!hWWqB zBFNzfW)ceh5DM;|-iVNrU1AcM(4E<9h9~^(O;1;PerD9gL~v--Kap3X3La%|1osEi z-8j$G^?w#7Fq*P6KR?5v=IV^Nv^Gw*7#ZYexCmQsGD~bkYknSaj- zTbx`f4eyzxUiI-2G>x_0Pu^LM0;=2|mVB#A?wg;-r$E-=IAtGyD@3v=rN;ko_pcnO^vrD$lRq&io@P27WL3^XnqrhXe> zA?=8Q`AFKMOr+5A>@t?-WTHS+@1X(T!)Care}GQ2?X~!DmhfzZSJ)n#NfR!CylS`i zMqAhUR<@wIAm;U23}P2>P?saT)$}f%hnu0zbwb)^&G~Z2p0szy4?$i1TA17G@?rH< zKD1Twcq4^rG3^=qpPU7}1aGh&?eFOAVyP@%AQy>GE;Tr?C;!S42NLI_#P>$Yv1&BE za$+;CA7m>b^dc8#;9>L+Gt)g(nJgP3MxHcJn<~ ze12Pt-Yz&%r*IR3m5(66Fz(esq1so)Qnj5&mbMS8LBKLx?z4%q; zV%X04(lr-jujkPqKbv7WVPGJ0%#${sHChq=lMex*XBj;;gu5oLN0xDR5(9##+vwg2*;{s%7Hl~sHmiBjHY7>Rw=bhs~g(i zSAPEMDYESoa3#~>iIe-F1m_0FZI{4g!3c=noi22V06#0YU)qVffAcGm8Nc_uHLkuR zd3pIdw8YNzd~>>c*~GNq0(5dmS@wDV!*HQTeVk^c?4MxRZU?6d6^fp5h}`>);OekU zA-xv+B%~@=NK+~U)@T>_-G1gIcHaDFw-%uQP8(9oy<5V@=txd<0O$M?$F_AZBHr5% zjf{|DXp4bd5AE(J4@&&;8NmgLa0UwHMn9wsJbal5xw-&G>3&scLJTgh8>It;*?wfU zwi&@~kPaP0`J)hbxI!v)#)HqB$~P`hKKC2;3>0hic*r9PN|(Ml*}H^5AX0rw*Elb< z|LSt%1~bB&)somB1SyS!by2tT%_6ZOr%KPmMLi=$3F;}S5CLUYihCLOk6FtRA!Ipn zE0}UiWRZ@4;ZpGpd{Z|hDz9s7M48g{(Uzuqe9!r%t+Z~|IPU`W6wOA zt1W%lG}m&IH^~e0S7>eIHrPy@9lYz6zh&v3j3#3Z=~-A8ad=Ud=6Y z{pJ$LbM<52sH`R8x2_C~XrHWL^o@)=)DuwIOM_tdm8n_!rKo`J!N)*;+E3Z*ooUMH z@Q#Bmn$mV49-MA{_oi@Jl=ay)oYDQFy%l(jB|Y;OT~bd74?c_ip2%Oj2kw^!_(n4&cl;|1%2!XBnkvX?`zdVQ!>FS#Axbf4mQq zHdJyb$Pt>#M-?k~?Gt3ms6#0tcEtS+(!VAAQVov8$f^~`Z!7KrM0&?L@3k6==?Xw= zvd*y^(PQs$ygQ{6_*JoQ7}evOt~;v@W=>O+^8Z?&_?z#md=}~Ac9p#xLh*p?#(%@Y zv5Z;n1SMUC;okvs%{%72z39|Tg(En0QD|BK+uhEe208zP78*pi-&wq^PUMbs_Gr`H zu>7W?e*cFvS+n*GA2#3WPjIltO%1>jSnTXg8r|@hu3Kf}&f=3JOaBB{xEYhcuYQ7< zM4E&?8^Qsn$w&GVThW?ZKEXjs4u=dITz8vV#H;9SvG=xuFK8e_XWv06u{j4|t*e2* z^H{tH9Jt1BG?c$y4=-{PVIB;85)m9E@gbw4dX1k%FXjR#@_aumHH5;6Rhl$!_YdLW z>xY;5Odl(RwCE?H2$4n7x(0taB1ZUd!((LbyX+WL9IBXC?@`haxj$^(Y~A-KaKQbv zELi?6jg8~&ufwJs4mq36$JGvF^{R`Qf;J*QEO_Y1m+Hlbv)Y6b*(<3HP*yAT3=(7> zB8348qHG(yOUFOkAmF*$!}X_TDjpB0FE8i%s+fT2eY_MYP{sO+#Pzh-&;+M7hU84A z?+CJ3|L%?~{jB|t0FdOW}_Cu@0Y>x|4vdkr6lG;_jmOBUn zWjaGn?-$10IM=D*?k-O|>6PO8S}@uZ?ODv=x&oYLv6hJncaTSCi9S9j+v>F_EI^x1 z_gA$M&0T*@KKb9ljK&Wx6?@9R%T+k_4Yq&>IMWho>$tzr`}+sQ%_bjmv}eycHwO|Y z3e>4d>U6gMqV3^-H~77(nLSei_?(DUue(sYz+_1)jqz^)!%g;t!3jK9VfjP1m^h9~ ze4l}MNab%0;Uf6LAAn`j;Ev2|J1RStEpGas4^aPaBQH$97gbwWC;#)TcfY42P8)I1 z(AqmgF($q#ll&hJ>$p^pchYiACEz#*UQZqr`{!XI0|f1!I?R-G1R*?yj7dJ$NA~b& z{|VB+$>!_;5|^ia@zi|_H4YQCPR9SaM}Ojf8{|>?z38Vw8vQ?{0&e}6;Er*q#3Cp~ zy}novC383z4io&9njzqo|4aDBsl2vv!lz#FX4!wf0e;;?0eHiz&3vWV_vUgIu-t8t z#{7>>Xw+My>w?AoufUMCuD1)-h0(?=e`iK;JZui=lmD4b_}@|>q5r)|uVnZiZWqrL z0LKf5*|l+h7j&o&8Vs$hKxw2XkBY($LU6 z$ybQ?B8ayB{?EUQK{-}XX37BZA3x$wl^9O;uqXNc6QO6D#aRD!6e=43Bjc(ZtDen2 z0a?%admO6luI=F#qqVj5hfd+A|GYKZ@7t^p-(DR>tEBPds^>`jkCGj4@^;xAOu}gK zyLA5_51Y(phzJ6KJ~M0g{(m0U_k8;Wpf!NWthxUGa9A_{BYr;nDKvKDTF?JcvfCpW z`Et?3Z)Zx$>`v ziHdIyrx6^?mMO$h2>&1xpH$K zxL*QqY;63e(4vE6;ieo4XW`c1en&B#@4uPy%d_RLSU&##bT3~bnVFe6TT~1a{==Cl z;;KKaSn9hTyW^IwHpaGp5v|AbL=}900=5}i{biJ5ut=)Rwt?*EFgg&=uS9PEYm+F4aXIQy3~EqMjDF(o-1E)!B3p*i2j10 z9gMd-2}5(WZ2aX>z95V>eVm>0G=(*F~C!tcYGnw6wIYutVKUA%En)QIl6;)dQN}Wc5BX ze=^Mc9R+Fh5cl;h<-TIb(rDrq|-N>&wYy%G4fN;?X;|+6H7H(cSd{SIBGooS$t+g9MmDc zqi>PiI(kRGacW@0Dbtw{!JF2Vo(nC*J4edLN9ei!Xn4T9R#PIhQWt)j=kU`^^U1ci zpbKeHcN=d$HlE?CnPN&etT!akzZZiyJ6~D@1JE;@2qRRR)M&hIB&&aDa<$Iy{x0lD zXubqaBeQ5SLxq%9%lA)Q?=OaA8TjrY;<+Nj4{w@FZ2cZh%nJ!6rC@5zK#GUtO!lrs{65A{qsTWlZ@4rQU}ZcgYo;Uc8a!bSA0NV_*eDuf`SSRz7mlUf3Zbv~1= z5up~MpF_ojc#ZCAU+P=a+@Hc8`w{Mh>Yu>3;n0ZWd4-f2BxQ2(s+u;Z_#RbtIfi3o zP&AmCB?PUWGnlzb0DR7|l`y5ybX@Pk`f;mN3T_dsQ+bZK2s;$d}|@mv(uzsGi3A+v=9(Ps8Nf(JX08*i*xTer%?{m zQFDxoVn94r05A1OIWGGn0?k;r0(*xn@D#g|rpg%B2el{UXz*}tM8(D2SSSPc!;g zVSp!IlsMhdoP>&)wLfBL!L>*aD*ZZ7T>l)O$1N}BOPh>>+y<`g!_cUr1ZS=Vm1R{cl@HE=?-E~>s!@Un~ z`7EmZrh0Z8s;`HY^vdBwWakqiEu^Ka_Jqk4x7#IpPdkI*WzGITJXa;Sp=DJX=`i8B z`XXN4wnxC~T1{f>jCH-9bv+%;?yaChb=w(rda0a^h>SrZBLcdfk+(Z)my6tDzoY^$Ka)PcJo+~Tj=v0}=GqKe))Q81T))db4Yx>m; z3@G)?TOSFQ~a4!W}SuqWHb#>0Ks*I?1jzr#XR-H3N0;f!pIe;jHtPf(J7?g<@ zoo*$lkPa_{`&KMd=w^-^f}UGr^w6>PExYerIjP*N^Qw@E9_Fg79$k}(T<>D2tB(nZ zL-vz~4DPOZUMeS3Ogjh$rKIR*9{Vqlu&44q1^QLTR+8RJP`($S^zTjUn5?DG&3U}L zD7?985v2Az?55uSqPHx+eV!kV^Tm0~LLSU%dQHs%XoR${7EXSBr&vKybpLb7=ZUV8 zjr_#Y{u>G{w?SDX3fVU&6|4q*fi+8$NBWdjaRb|J%Zn3*(?jy$MaEWjP-YEgXtuAw zX#8SzAph<-t6tt`vX?Kz2q`E&pm0irPcp`f>nzzSw+1C_v?{cQjJ-tB#;=YML@e9L z;$W|M$VtKx_g=_MV$#=)D`M1qfjM7j#KS9=>>^C&cDzri!<4r3T8vT6*WC)Xr{H3F z8=sip5(qALd%N7~pLrI|woO65vVH;StAD%KDeTka5&hO9mB&e{=I}>Cex)7Pk*FkH+K-CpC3Aky z)SCeBUWy!K5u0WwZ@er8Iz4(fy_tzQIbHjbuseQasz7`hx%Ezzk8tEb_lfu~&2M7R zXBHFtrjV-{8?>tch8VICw|o?ZftVwkj-sRfkD3lc6w9vcKrpw%^jZX(I^Z+g=jn;D z2#>(zn{_N^nAUoM;ZS?R=`p48c#RXmhH!rZYndG;v(`;d`bpX(qsDzGtUr@qH2LRZ zxYYnb-X0*u{MKmXN65|}O0A(pFsE#XrPC*@Wiyw=|?9^UnzO6Iwp&$zLKCav09w)Pg6 zdB;qOtKZT3Cp;c2$Y@l0`YvHM$F03zt@FKpym27UW;UXo$&+wyBRP2b;Eh1{(&7L# zkJC#?e=20unQb^pd^8T~Ct<+!A04LV`r;y}J-A9zCNr>8Q)Ov#z*jnZB;-n*jpq$M z9SLc{o9DU9mm0-%Ynfe}osYku)xQA@5$72I%SoFuHeA9^qlZv2+e7L^Oky0(34 z-ZAR@(0Uq<^AJuZsZufWtorDJ7;cX5RSYZFR!0uFw$C5tYOPzyRGKB<2$|VIQKY3q zR0FSRkJoByO+T`#2bLI|p~B}MW8e$&-i1@a9aD#QqC6ebE-{?>TTvNe2Z-U&N!+)? z+A&C&<5DteWvh~pROzyBdTh}!aAfY~%kpkKI8)C&qTH8Phen>i_cC4a-3_;f&#gi^ z86GVNvffJu49!_aPB*mOf1nG$%J;fwxbcTt3}-{%qf6$JSTFAr?JibjIVshgMRSs^ zW$=1S7`L20k1O$ZUbGrqu5=>d^R4;m#N~NAe1?<(+zJZ5~}4bPNE}i#@O50Ehj$bm0la(jU8d1w5w$w?!Tz)se<|<>{qr)a;^nxXZ7v;KqoYRe1Z96xWA!UC)4qi2N$OKzOMV z{|ej``uM_u0Yun;d2u`4$Mo>D&J0Z`dT?xuC#M1@9dhrOA;ZANhFLbn;n2K@$w&!- z>Tfsh-uCL){jwM>lU&a@rBiKt9Zq~#u)rzE4|MQ6S?Rw&9U%`+9C;NolpD6+=VJn>8ys(`Mq4V#s=iENB72alBwrc)0 zacNp{>2KBN(3-{dY*mHS&Oi&N9N=GTWp^$}N4@>{P_+lxd%|wiOz77t_=MkHuzZ>v zigWuV9GZPkePVn6^>xOmNtO4kKny8NLcryw54PN_i^`k-sZ7e;n5x1KeY9J)K&C|H zFw3mh@qC?$gGy(t1rR13crpx|b|uOw}#wW#kQ+A|4l zOe}z1=p3J_iKE-p33Kil_bvFBu1`#MgLs~2#ZrIz+8#xSHFZ%}SZ@N*DxO7-P9dEl z;S5!yKx-m=9TD9b=G~SNhA+GsD%s3ipq5%+-XF>NlRGi6!vU)}m4v7TFE+g;j_L@| zG58H**s=ZW^3LsQ__Z-iz?M*t1KI_Ppk>6CCcbYWFkKYr?0pBypvG~suxLnTPmexs zxyzqL#Zd?J=x*X1E{^b7uo`NAE7pIoLkiT{8v}XKfpTeWq{hpFy4T&+uHlOu2X49A_6iRfyv zc3^t=jB1g>-7ywsvvVf!FkatTEaLs$H8@G+x}|Lfvorj}lkXn8<*=;g;Ca4U|3_wC zBY__l$90Yib+)L_XZ<=ZjA1d+QAgS)vJWMavvlv$JvFaPJ!N}mPTU~)Y4N%!B2vnq zS;(E?D}ZlZc^Jb%z7l705qIURh%5LL?TaA zY0bF}6}Jsi`pojaWZvV2?mnMD0YK%&VzTKK9yM{|3Uy%AJTHjvXds;^ueF@-nan$3 z*T~nCt{TK7##9@O7dp=3{@l2tS6LtWz7%HA?&~v$@i8Y#B!$cgBHk4?EsNG#oWfSY z8~$x3OWfadn*?8tA&{tRWuEtqWZAA9UlieO>McnCo;Y?p>QJ~9sAbIv*jHz}U5p1- zI~#TJIY0Oa<$X)Z$zNWf#_A}(WLc19BH^OAaS`D>Yo$9HT})0_&`!o>U7;x?>B}2SK;&=|}j*SMKLvU?J^J z1S|qur9hZXX4(t8DyUS72XE}r|eLD=~$zP2RW3F=dYH~X91r2Lz7UE3+X#VSyJm@u`t2wzo;XG?R7 z6Q|PXRP*V!Xn!)@wM>P7Ci>0c#tN7pppr&q$)vrR3hSo@Z7k@@f2pEdYv%%nso2y8 zS3RF$8ypWlA(II3jiY!>B-8mcmYrps?*y8`jK~MQnRQ0m7^}I1ybiC78#RK$n;K#$ z!RoE6F}F$4@K2?7xA{j*bDp;Jw+?YyvvBF0!@VjlKE6e!djO8jNb*zm1<&4(fhXN_ zf?7+!Gjnxb(sHECd)_?1>p&h0+9H^XK=3{HWk=KUaX3mv*}>f@7hT*QnN7|ZWGvNF zI(jB6w!aSK0upumyqA*aA+Qh)V_;v%dy|_7c7%*+Gp0*SyMI7lZX~l_S;GrF*&kAgPeOlsFkX_p>{N>B;4jby7>q-|t0s!;KB{S%-suy^d zf!CgC_y#0+5$#f8Gp)tTJ9@BFHfMjk#TkwR9|z`@CxD!XO)K~Op#PCScT&k&J^MoQ zs9N@Z0(u!fi+?5zM8%ZJxB2OmTU|2t_y>(MHi$pP{(PRj`C_TzhT{b#O zs_pq|x6n4vs-&7U=N;P^$V(VKdl;&4;^qLKRba<(DXTv+IVU}7VRG5RDbU>@QKhRT zfnMcn9>_o3?BRWbn6_AOBaUWqb3S7=q?Hum?mG~wNfLyAzOl)B43jpM$t;Ic8*gMk z8C9XFt4~cXI^_|htQm)LeY70;8W8AggCSJYKOfqb%-)`Dx>)XiM|`ejSt(zIDV(bx zBw4<9u9tRV=AyOi^S)rj49^@{4qhe8G`fW+&V|kFNQZ?&VIu4&&?2|(!Vql}y@zD7F zjgGf3lgY1}u?JttD73*4?7*$4?$PqbaKwHyZBIxE_B>J6| zSCL10s2VI3He^yc6*1Q9S?zpl^n}> zZf^%>+Xh?fUNK2oS7$@p!Yy~8yfI6g0XdeLU8qW0)$_h=B19)U;xP7EmtUPFj1kev z2KDygKRK&89XyZX1RUq)Ja zcI5%|f>dt;iBT^0!Z68r*T#b%ai2dAu|Bva%Uyn$USOaIkIeqiL z3V=J;5kwuote-bkKUik*p#gTlhn`s*n$GStv?xzjLrz)N4MjTrf2<7JXc71z33*?j=iHZTF3=2Ttyrus&k8JYV50j^I2ypM0*>E0VYUciD79f3`kd-a8^Z2OseY-cv zQ6v}`kfhb1nsaaVI2J3Int(9j1Tp74Ba@Q~rz4^E_w`FNv~d{oj@I979m0olU-~QH z918;TTL=auDC`G940|!g9^yJP(_cCnfzBPTG-H&vu8V8L~I3AFPs33u`}u~ zu^jZxA5JD!TILy#!3vCTbu2{O-1rJN*b-s)p4XEB5@6HGvOcS!{MM(L zYkvDr3vi*y1wk71{Z$@gtu}bf8z+0>k81~a(Y{P)(5Du3wq2>PNwM<=q64a={+<3f zNqpAPk%g3`POrT@;q9hpNyQm<+zz=6=U){b9|IXKF2kv!q5}T zX-NrqT*+b(7*@J2nDk0dQPN>Tzq&31>ohKphLt=s$sjN&7!yqg2ek+vYkow$Pb=glp|dWUvca+8=&smL%Q;1* zG$xH}Sq_*032c+|GUZ<1j|jw$TsV0)9mrzOu3>!6ro2nx_4X0*yZK@l&pA`%l93lv z++QaKP~S)8OnCg-&jP@UkVMeOhh9}39X5Se$*}E|O?_CdCU$veZ=NX}Fcz16QN=#R z|Gky_>{ujOU;Mi_=jz^7RX^cZ!%7>_m-rfiN?meV1QXs_Z4)p^^k3>tG=C@so zGdh4nB&;7eyE}H9)>93K6X7ypM)P*~YD)U@X$ikGX2n(-XAExns^2G!eC7o*@pg%* z40%`iCc7c8ZA`=~^W{~a9^&+7;DLOmsK>K!LweF#C}pXaE+&Bfp8mr&VVU-2bjx4( zS1T_5l=x}LV=>J77Y|pdQ-q%Qm6=lv0BrI%6rq^G$8$&Gd_PSYjGFeFVb9>9Fiwxa z;Dz$cIeR#_u)!^th^owtrd`p^<89WCS^*vuR$<8P$Gv85xgPmFre`Cf%(yJR+-sU= z@tK>l&paog1#(O^GnJI1OZWQ9 z%(i!XYcOlx7-cfHnv3~hQLJToagxwA! zM&$k8`0UD_2pX@AAy=swHh2tw3auJxV}H?nb+Tn+pBy#JwnJLjuJz5_^YbyG>&V6Zge?R=p(oh(ShaiYzw0{1?`~1{!*lthud*~rvbD! zT)44~N=c3(!PwZ-t!KP$QD#A(4SHKkSJ~g@%R8>eF+=B#VPV^0HKHYZwQ%0lPnG^- zf!f>A5C1jo<7*AwY+8s9lF94M#1AdJOd>o1`XFxKMs)vg9`uc^3Ea@+ooruCgIR}* zBJ{_K+wmVOErelC=`-cN1t~6b@zs037K!K5Ne}t`hnaVxx9^`9tAVQy?*bl1()>iq z^OUY=B^k{B1)!7`8J5PtlijuZTDgkMiZ7~qk3$BRwo%F54zWdP5F3WlEX&8fZuc=j z!wB1(?dzFRktO!sy8%F|Lw^h~y@p*d9~U-hTmF-^yfeXa5`PNCji~p^S8gTdz4dw+ z(G&ysd`}I^OfQ+HT}VH9rGXb0$e+<&Cp~PmqkiGc$0hVb+oGMUglfU~PT{wwx1PWt zq=KLI7CGAPCK_FZ-{Jp1V_q*t`|UQTLAOslGp#Sy#?TRb;Iq{r@|TT2hqJF8{X-CG zv~8AFUzmk2tSysgIfkpw@urV$+I<{yDso%5|rv_<~-8^TYC8N zeeQe6p*WQLDBOi#QMuX38mtUiM5i0!O9kF;ry%!=j&xJnqJZWmYg1ElG!JpeMW<^E zB*d@bWpbPVj`L4whv>EC%+GEyq5eFf@8Fa9T~cPlWV<J%P<=s z4S4;QHn<5O`kRIoW-27oGSs|avG_=LsWuXI;U2mTR%0aUhi#xEhg`J z&K|umed#S8*vF_vnqqBQA_41Ht`p^l!+Qy2ag1=RvBY3KCP-Fc_2hveo8& zauxBF)}f(YJd$4uW3W!|^g_GuWe+38H};8PA&yP5C}?rgd77yaH@1|dQol7~IhULU z{RJhB;XZIWq8x?ngtvkykXtFU;O^;+^w4rZPIg`7vl?QXU;P5XJcI? z1vWmOjv9p4rQ=EJwjxLfx=<59v?`+2F`^5FeXcyCswvZ?X1k0)&|ETDFo z&_7ujsZoq=D9jPGA6ROcfyh>3MTo8d3ZubjmA0zipCk6E!>qo4S|vD=!n`L1Bs5%a zF&%_oFV&!pm+gy7&B@6ytAgBznDBQdeaaO8ChEBFEv1|=ivhnwU8*egKVyiL(kNlW z;{f?HMLFjOE%;;LdCG*s{I6bR4;}o<;Syc{US&<%(W81PuLDM2>tH&7M7sl7^_Lt* zfCO;cBJmnI5iGz@TftGR`v4k@tSSXn3QPwc;7_lW>V=)xZ_r5^A^RU?BOSH`Sv+t< zirXKGHzT`dFd(65#63Vc%kgYg2;lbDoA2`J7N;XMo{4rYorPEMkU_?)Pg zbcd-fNn7dZ;DB=T;Om5y)HklJfXD#$J^f`+P|(Hgvc2))YzcbW)4aC5;cT(;`OOVz z>C5$_#Akn6+X=7;X>M+Av34W#4d@x)s4*fS?l^PN{Nvce&r=1;R%jJDcZcz<3t}g!b!^EFE3-)(c9lZnliNEjW}?QLN+y zK?vyFo8vM^^A)|Jq`qM{M++HZJwx%7f39Bp0*Zi)tc3*iMXHYT%Rm2Y)jiam8n-u<%%Pi48?8adfTma z*p7gyzGA6XeE*>D3!w&dQs&tlF8fM}z&M2!=c`?LpPM-id|rnfNGl-2y5G->jf(qM zYmV-FzkvW07f}Ee5>PoEW-}YZ*J=0qkn~CIGoT1_c)WL%%jBJ2fezDxyCx^ka(^@G zcMt`=L+vS)&yZ_wbvuc0J6TG5Ouao@i#`37IXPvRn zPf$v=Qq?ePPwYz}K-L^rcf$yHZ!xegWx9aWnHE?UaG>>{{I3>MIRThW*M;B1N&bH1 zvcfm~8vn9nU6l*S-WD6}^%GrQ9*$U4tMrJ07SwD&N@ z+2BaM3MgsOB6yW*aA{xe*8GN&nFuX<`y=tj-xxn!ADG4Uz@S}e)mzPpb70|g0s_dW zWW2Xr!G5ZiyJKkO4L)-Tnyy{+;?adng<(_AN4Q>NydV)367=?fQ>w zNaTkE#Y!R{EjV82k(NGSbN1Ee#gPm^NDBW{AiGUVXD1{F2yBpEg9$DLF!hQmaj59d z_3{2fs?Ys!_JG`K{thR%Ee19wFy#d-)2Uw<@!5(r8RDrinbmMlj<;Fy;T=4hAU5xll1oV04i>w5LJ6F8RPXMUTG zqKHpKI3$NK0v>C299_`{e80k!ev5=};O2ZUAe5rIoO>tHb%O|4tx*ut8-mKQ!4;oC zeMulC24e+`P7tH6Dx$NUEsn>`%tWp3aidE{#$&d52aEF}2lQ0s_yT$jwmN zy}#`0>I!W*%U>+GFTexqtqz4>9HOv20KQSfNO0zS~ zZFa5@pe|$${F}`u?#~-$VDy)729r?5JDybEyU}*p>~lRuO6X@W$J^^EXYL`ay}ArR z%E-qg290#U$2h*IdvE#2whAS&=&#O7y6hwkxwiui34j_lEX`jKVnzPHUQ}(aqDFJITFlC~(~Hkn;jQ#J=#?+qF5% z$OLm}lI|4$w8z62+LsC)0y~m*x6zlT;qQ&7o((6^4u0L%Hkw^+?KB<5^?ABkkg{Tg#z{aaJ>Fwt{REHTgVGx= zh#w^wwp9+F=48;Pg;zP9gK9&Ha}%|-N5*z(AO@r=or|hIubBhTrtz|fm=u60s0;g^ z`qGlReR|%G?lD8}=w!KZ`HhkTTlt`#!G$c6@<1R*Nc!-1c&l-=bB+)bR-XZ^R$9eu z&R@LD6yR*nLJd97eni;_n~-(Z+iZd1#n9tw8=SdoR%eZmNah3O973f-jhDImJ19Tu ztCJy0+Y_m5z1!9zc?OelLD);Y8OSMV<=rUeuykQe zyF@ljdToo3Pmn!uhA!w=`up%lEfmqkF!D1X-USk1 zFk^t(dpYlT#f|Z|HOXCjXhPQ>DjpntKlA`_&%j0$ye#p@*g9M>1d(k!XtJh9(Sum1 z8D#+i#KEzKtlMyk)F3qL40-4oozH<*BUWR@wja*({F}aKFK=%~OuH9?U>XF$>+*!? zr^?UQW6p)WOVMGgAf#_JNV?2jJIR@u!Rv2=9UrGpfc{P1t=ogFMy!+V`OJCWdmu_l z0MU%pz)(M=iM1XN5^KzYK;z>E76y?N>n{y;f9Pz)rM(IqI$|xarV0s~wzF;sTUcsL zXqt}|_w%SRDFnnH`4#3s5k~^Z>GV%N!(;IU{J@3u^*0^*`@g|f8L!4cVus>7c~AGB zP!q^F?~Ht)l*n6xW|4C)RO$0@0lMaSI=s;Vb$OH%LlPq1bAp3E1(6rHNM&^#hc!tjRz~`-w*)~y8oIS*uEwQ=bRG0HbdENf-W{YGj|l{ z`LB?}vS$RCrbNaK9F#Sff9@#Ox8XC@wzV&&P!wxKHs*&NOFjNO(*UizSPnQDNP@al zK0r*Rd5K=B5#X`dtCq)B!;H+QGyH?HpZ78c%b3%{~K9M!xQ}j3$*zB&!>Q7Tgo3nh0P>X zV9a3;$6RJbHEoDe_h^N=E zW5N{CtnWXsOb?7CoLT%DQ3U!jc;GWZgz_XxT)vMU&IY)O2d?!de(4T*Qqf~#-zEh2 zy;Ps$5iGGFu`*LN3!|2Mn%N^vju>%6Ky-GjQ%z#;M&x}cSTE1^2{}k))?Lb!X>~nP zzdB3(1B4@N&U{*$c<_{Ic!aDDdRRnEiRoHb034ggxq&mmQDA5=poT{g78ZU#zYFdQ zVuW@)-D)eH&s6%oJmI}gUT~fiLdagSrVgQVoElaM%@dGcoHk9Q{V%rWC54f`+ly&X z%Jz}QR`aF6K!%a-#33TT+?&XX>;OU2l@LM%>#XLGi1}Saff|Qsw}4R}qO*+UT&dax z5SWdCUY1ul1qiJoep1VRj3iil{%a041jO+GtODdg*D6W|mz=Yy62jnr71}(`x+977 z^7~`j_U)zuHMjQ{TT=PY*E5Q{e55|-Fsq(>#DHj?dct%I)CT0!Ydo~mzil|o##ncL z-)#@7Cl9HOVryEmn8T;)fo{}XPFDzkof*~e;drf+6o46BnS9Ps?Ld<#!dnJK2h+`i zYOv4cd!X0Zd^E^V(!T8?q$H?mcJQq8#SZ_c<;hb0#Rx-H4uGZxGA8R0$J4pQD|MRX z9v|u~XXI8HN8`xF$3%~SBc{;T65-0INv-00{cAUkN+E!LjDZ#(Iw0-CTzu_6dW2k! z-w0YZf}pnz{IMmrS$xg|bwz=1ktu*i5f30Kkk8l{lX1B#kk7ysc|3;;K_|6aVpv}4 z3&*~=9A(MyA_D_CW(F4`&NGl+vN4wTaZh#n`Q^(bjrd4Ffwm)yW9(&5tU4@ z@(#d%-uoYs#P!4jWa8_*ZVu@xVimSu?zdv4FxZt<+3hmJf5k#b_?-F>hlj#@>=r6@ zrBVmf8vyHmBwwx4@1z?w3x8Z3!Sc-g)bFv;6C52ElS$`KUrt#BB>y?8CEt{n#J%aO zM^jixsgJUSyp4_*Ys})XGRAR=iSRY)y>E}Dih;oT5|H)*X(?9tfli89T{G&*AncaQ zew7IIBPT1I@bh5j2{yP9z})!DxRSz0OTv!P@OVhl3p586d*v8!JCZ(WR7L?9CBv1} zrpU%VYHm+7>E@%_vKjQ^>WU)>$6Nh&;kVFyi3+XW8K*fOap$DkXW4h>+pM2i8-7o3DaMcX{dO+&|6C&# z{c)EgLc?pum;qU6=r-IY+jExyP@)CV;~$W}Y{iQFin`h}2%p>*4KqrF{i$a!yZw!q zRLE;~Of~Ka==d>yhlw*KpRp>UxZU~k42Pg!^Vf#OVK9my$bAiTm&=8<5-^Z1Wbi2b z*Ji2iJ;EB#>};P?-^ix&Q2L5O&(nYJgvYbaz!R@&v}qrMY?*QfuM$5$xNlib7oLz%WYpz>O7+oe=3oCY>DcE4wcIY(fs$StCX*N{_UErywBG?YhMtO-1R$7 ztxE5ohXO%EJhLu;Myjb+`PBOX1C9%=*N(+tqz_{`lr6uNeN>{fZ#9jwI1sNdrEqJN zllrlGhRRmf1Nk9 zx&7Pt6)mxxUF*(~l>_wPa(y^A8s@{$0N!!y`*qw$amle=9_DXs?Z80=OX3MkRDfzz zh^+3r7*qWB)S;ugB$ii&go{#OL9Ur+j#{kdKB-s@FmuEJGfszUjqC%LVyLsv}@WZz#b zjoXyG-$?2qu{YeSW#Tdg|JnRj?vX1R*(&Skp0eH_2#*Z^8|t^Zk?~}oY+{^YvNLw&GpX_WZXy#h z-tNB2=WIs9Nue*2kPN3N3sWT?&71mr)pYougmAN99*>hX7igQVcWL+h;n7z6ARN-T6S}!Dxh?Vf3%tS0oXxAyy9RqG!>h ziL~I&q-<+1%>%W)+nANkc3`Vp8Hi%aPk$k|YfgCrTEXTvRgv78ALjH<)@^2tl2QA; zn?(ehTx?spSZ0$>^aw>p`Y$<-w5#&49QO6J^bi z4jqp#VHuzS65XGG6V%F~tB>EwJTvZ)=wtlZ&WLT9EeA|{XaW{3x*a*JdV1F!Q^NpO?E+(6z0yFB;tiG ztCc{P+T&#_t`EtsBLBnbg~9hUDj))_aq49X)=f8?`3W36y-<=o1@@c^{!o4 z^5eAQ+{&Sl=Z2lTtcHlu1^3L^sSrz}-5RZUH$qXxV$s$&uy6;OQET4QG)>zk?Imes`4D z@zkzYB7XdFn29dlUdy~8*mW`5RQu?*8ZG5_c}`^zP$=X%W}OD(=-!{1U+%FR^BfgF|tHN2U=OMZ;|{r#LF45!7!E3sma?KMJhTxV%ic9fm8D|lV~Z4j`naF-_K<5|M4%0 z?HSbwGp|P1O}8J9q`fk9CI^4#e*F~qskE=U)d8}jI-^vfX&>}?tNGJowu~A zMymIpTGRcslLkq|GQh8vC=t_mtsTvk;q9vrbk{P<3fTO;eS|nu58b>8fX(1QKoOhH zUY}YtvV^}f@%Xul83spq3g2f-M^M-oM>OBh&c+yOdJBa5M{^{3uOYrJBcoKT1yapZ zl3pfeTDjC5L1=D8tuP7$onj*z-Y+4OamfXoQ!i`9hIZWJwvb4tX8h#vJQIv^{a29fC^uDT8kJFWUSO2k%zz+m;o6Roctd-=>k5 z#~haNlfj#|OLfYATjc}$(|K_H2cb8;yJHk!*LG)14n4weJ#o*yryAtcm=JQzpKH4D z{_Rj_Zw{<@d;4EM!5D}E{_P@2m>(dVDI_it>JeX_mcFFt@VLPaf=r zkF0Y2?D3QcU+R)vQDs+i>jSJYcr}f*9g`_EDs`-q{e$??LU_CKQs=|DXB65+dFpn4 z-2FuYp1IG9bvyC~k@-RpPFUQhvMG$esR7+K>$7uKZKTiq^xmnXpr;FVNG2(oN^O$F zcBsS`Uw6s>c**#e|Hn%f#kXbinn__s|Hbldbzvj{IdJOTexnZ2v9Ak-p0Nf7B>#Nm z4%ZH>j~Xl3*^M#Epvg*cN%=hX1#Lq5Kb!SE5ZZW@hZTVkmtx-a713eMqkT#}V@wMz zWNkkyC^P>Pnt5Sam`@<8$IH8gn8{FjkhBLCJqeXHCIsycF+xlkct1x6>d>WfSRk!Z zgaa=uHtu*&qERUE1T)(gL`0y0(%^F;tUj6EW>jwFb+mKYI%(q@loAo)ajl0dCF4Y7 z-7xbe7e9Y~YYD9G4CANXkzYs*p)65Km z38`Fe_{KrLZUSzc{ajDznSYY+JOCIryTt^0Ho$3q?a1&@WmunE{)*Q0Fsaj9p*9`*7kbk5bJXQMS zX61|i-EX#_cVU)WO|GqYB%edhRy%^Fqwo*$J-$whi%R%jJEVLI_Q$A3hml^@-Mfk0 zJNJW1-Lzg{(=;dsGdX!e2heHqFdaAh5pLk+XhILR;8r_B*~q#Kk81>c5XO`wI^e<| zgS6+3w|SVxaj6xuVL`N$lFvWEOFPq^4tu!1r?WVXRXTl*y|iSWhn)A#DjZR|_1J%r zacX1<42S#fYS2&DIs$MkXDGEsW)~YBxujfeBPYbA^W2VDdVi`V>O$9|tvwE)C+f%t=jraWjD4PM74O@90(LlPe%Y?&4#f#+{J285eh1~L=(g8g zS}!BdQz{zQ;Ptj(Q6J9^ECn}yE;)4VN!Lx(5h?VRKGtd^+FCdjn{Rt-lU#zpr0bjZ z<8XXQA{=x}C!x?*k03cLj))i#hBc&`(=40mAv>s4_3ne?%RDM|SDDW$)^f_z+qJ>i zIBr=t>Y=RxMGSJCS(LQ}rXmTK1mvxAAo)=xQva{LF_x5u=j`l)tMbKg$K)qJ6t$HjJYcLYe388n>9WHjJ!$X}s6!sT? z4m;~xojdjeV`98(}n)h?6+FyT>N8cyz#P&`mJE{ zhi=)6SR4F%<&M=onc1rcNGED{urY#inHsICj#?x!SK6aEYzWSW|=YvwcrL|y-H{q5SsKD&Q{qzx^Z{ctE z$t6=d^^$i;DHVtzr#5=*=r3{vdBP#(2qJoEPP?cz9m%AezSp?&MB(@EvFVq=5J6SX z!ihM78v)n;yq8mh{;2m~z(Tab)-wbtio_}}zSnEE`NN4HfHwe%2frJy_S>?GI#?B} zmyf?xoATVp2mU8n|DI3K`}$2YQi^DS)cD+37%rrs)Gs88?{d8_`(!A+ku2TyC~~`G zrqpMGXfa5w)^Bh|`YxWy&v4f2?^jfkdpY=ij!$i*Kprahy$&J4Th(R3zI;|2k(VmK zZp(e66?cc|5BEpYwnn01qgC{|;boY!we_V72y4L^@XDC}pmG%#l8}0nOM6X0Ln`5l z8H}~q?8+WB{NGo`S4&M!54`WjG=C_T&c8En)EG}Me~_ENS+M$xc_ZK^_H&!wVPlc} zc&!PEp2MUk0ea`KOGYgJHmR4nMB@`9n2jWo_PO+725^HMpLUwX2AAAJjWQm4TjQVmY|1>EDZ|7{! zCn3`*H`635lE%uQX5@W-D&%c4C03uv%&&uiRx2KHetuRQDYbt7DDt`fEp!f7$hWVs z-#KaG{xKt4Mtr5o1au)W=i z3DBIzwA&I(5eR1O=HBnc5-Gvuok_{7q3lK7EC22C4t=S|-HRpZstXXBy@ALic28$z z%=sz)bHc}qAys!Z_@vn)NV3{qpjn;em-&pxTidgirZH?)Ut>D#<9f0!kC3#`pKh)y z@3;ib0}lFCuq2SJNM!n#g*|F?G&(>Ztvt3Ns3Dqq-GSky&nruB_}5+5tcX8C=g+tv z*E%GRn;g~r%G;l)%Rs5a!ga1fZ9qinyMa0!uT_-#nQWf%uw-%E(Sm5kySIIH=NLJ# zp^FMZQbu2vrFI>%kfqV-vbt68XJll~k2<12qa{x-K(HtXiUHXiMrkE7r*WTq*A`B- z_)oMu3Uz*Ncnns`*ZBZMhu+kr~8O*R?vIvJ2Hhw_)iV?TRmEb!8v#Big~3T5BmXp+04aIdd<)=t&p+i zs{m5g7>DMmVx51Jj!tK2tSgcWSBn$lBP6z9Q#s!ar=%pIN8ZOa2UMfMaO8Hg0MdZU zP6esX$+G40s-3(#w^h!u2M9uxW*yq<-lW0pIq4W&h|rNbT~%*X7VTVM0k*e0-G*+l zjU?BI8LBuk%rb;gqO~nS zW|HVApj~tNA%ouaq`jb~35?^loC1=$HqR%l1a16$Y|N6K=ySNIf44D7 z<24<^dpxBn3*}8ufqjhxyL*wQyg2fYk8K!(DZoxq>K?ys>VdSgBUP{?cf&gxA(`a zjXVDbIS8tx#@`~*!K5hM%dRiz9k^ZcCtc_u+4`Ijy56TppER_fz&85)gCc9A?V3>~ z@s3CY890GKRDbTu^>eSqHn;TxuEjMaI^3|Z_5P!58wq;C|GMwqx`k?^o0zb7X7pN{Mde@eFGW@^)UQie8LA!jxNdZLXRBF2@(YE}X{)h7 zd#dWIE7x3s{SpHK1}h(p>O zlnfxS2V#L}k{hZYrMKG&)zx$PPM|MQ=CP#oXKlCJ9LbZH)D1Y0x1*{`wK&POgvmkV zUX=U8jcWR%q0?Ucu_!>4Dc-zK<)l2hIOBKv{hi2E2&3kD`zVgQVK_e;3N$!$?XARv zil^JMzE2u7Ysc+KYc=8tp9Zebd`MVxUXiQk;x=!Ba+g#R33W35 z%`rRR%Ud(-VkutR&{kvNALcz8d;S{f^G`!7(ue6+{azN^Wpeg?30zCrIi^rplY1|r zz6SlnOZFqEHF0$cauYQ(U{LbG^_meNI z`gVH;BJItKJVD@{Hywtl56bwE z_GZ}3-(yj;A)Cl5b`;RKmTq_q~`K9NuYOQWrn0u7qsI~_h}Nf`c7I*!k4bo%_$8d>@(~H-Q`-xWx!o{^ZA$% zQHTd=TW7BPH2o$0x`1!GV%o@aky}~JVzonqr#rD1m|p3ItHK*yeS;r)@VUJ0&oQ`( zT*5(t@|Ko7+=svZ8uwqa^{q=28r1jp;*ke$pz_5z!n^HbsIiZAqjrIPG&I%3azso-j}3DqmEsJq=5Hk#B~8IUhs z)0a>de_w+e;ggrM=C$DCw@BK3+kW?VqkA2ig3owd58E-Ua@P$<_`(X~u2s6~Pyd|A zSl#BB>zz^CVZV3HBq*LiiYrfM1IY{DWwn$(;)@SW3l!l&emdr&N%vTCn4{w4O%lX} zgF4t)FpNl|KwG1w?ljeE`bUE!UIADCtW%~d)Gcq6r)%+aQfE3X6vDS?{jMW8Ee|4I)2Y7LzI( z+MDS*Px$)Op_ZY&FTvt4nhiG=YNX5Wsp?sKQ;3Jt6=e2=8Zo>6fKB{slYqmFY_h$c z77Y5mbLtb#?^pHNc$UA-)mu$YL|m=;U37SiM97RqykaO0lws6?*y~?2o(T5BJNAa` zD>y!(PHya3LTi6mLp+`9!c5|?}BDyj<^0wWO9WXUv$ zLCfN)SB}1o&tckX(IH9|VRvSc;uWv>x?3KX01oSuth1A|1@?-uej^;JxdW zK3eKgnap{x=AYl}izY1}2(#cTeLt9`4i`GNiu zEc}17hk$`N?O;(VOow;z_FmPvA>~5r@x@9%=$l%HXhprQVvkpT4Bov2g_@(xTCCzi zWPKOg#D7|2RlEDy*~?H|p2(|SV#AVS{3ptF2s(Z4x&Z3>L$qu&0{ZwyG!4jtm=L#a zx-?z_nExE_0Lkc$o%HwvAV*)B$Yt!;-<^~KxNybvpDDE%81eRb1>1S+9ovZ`Bxx$-tA{dGZn!knSCH3a&>Y7#>InOnGbrLka$MLjpY?{-jlvmwS?8}%>v!KpSA-@ zHj67M`ru}XQ>*$@#j~v^iiZWttlL4tqX*Sp>0cG4n=5rXwRQ!I--x&APZ{&;jm);^ zb8*V+BtsLa|5@*|D8+!q<3oTFZuLTb@p~f5C7n!U0Q0XzfT(87Z950*YiZ|TGFF7W zRt|N)WbkD`Ic0F>W?!pjMY4eMt*0H&$DT zN@{&b{(QhV*YmveOqDtdcOLWJXa4vS$ol*9S97Yl%H>($BD*5=2)TOf$1@Fes@4JPrEPt<% z-XEr6FV?ydM5vYKn&Ekvb+tfd96g{?{Z#-xvL4>KaYIQxBq{hCN* zMo=3w#w@Bq`@fsTR-XPXa)1F)l5jr`rEKyQ)C>Hf$#2W}xYj0CdYx8neIv5IHnITK zA(k2zuj*Nf1+TPXTkpw-cK5>dGpMVC3J^rYSp0R)SqdK{dE!NnAzEqa;OC4)_)4Rg zrOxF)4<{)3JWAgA)(VFNtHu2Z$#l7b0Z+L>9h6uGZEn^t=(RgYtZDLu5dAS3i9otZ zUr#8lpX<(@#TRU(F^*YD6*7AB(d9U>%v`ZF%};Nz&TxZqrO5%;b=fcP9llAk=Yd9Z zl#py^uQpeUky)63bK&-Kf@WTW5t4_U^o8^$2#vNm3fo&l=?G#633q{55S-}~nVoNU zGs_byJ1(2k3qIZVj&yn@?^Flx*g4nd|ufFC!+ty=^_-6mw1D)1AoV}8`M!jYM62i6w z3tO`NIZj)+`wRIYrLt-1H?!)$e7X;kUYySD4<$C&?@fo|5#Y3adFfM2Ci9!E{I_g| z|FdT&ZsEh)PhaapTMfS}d>@xFv8V2?tVYuM`etTb!F|G8NJu1A=Heh-VxzyhYu#t4iSzp1SCe%jWhF(2c&t~`$ZhtK#;d$!4IYUivQeH z58e}_$-M)pxNjhzv+&xv;nsFSH8ze-As5aVfO*Yw5CKqV8|dnz(2<(|TA4;^b|h_7 zUyF!2ojLW9f^Lo?ATc`Qjyjy5cy-m}A-c$3X@xUxapy$d z=IixSMgNWFn0tQ$usB$GQ3)>%Ru`g!Ivf&aGr#!6ye@B$zrd_mPF0o4fqv8#4561I zdCDespLfoG>LyW@>*xq&;Sf5(*$@kVTtBy1=A~Y=ocbcz=B-T(&Jyw?pS75V(Jf6< zf=nma6C{AStpi%K9KyYc~8mTs1%d{WamF>Ziu#= zFd;G1Xhy*pVRAqTi88^i@3LVo_AZ?j`6*+zD@cHc%?rY9GL(&+fjij`aB-@gDmmLl z_boEhN_Sf`q1OWg!L^CJg&a!Ou-5UU@xDGI^OTxg&Obj!!Q*|vP<_6VM(vLvz@9oE zJyWU?Q(0;C)Xn-ns^Z1NoEc4>;429w4ark4i}{4&p;YEos&B6Q0MgUtJ6hDhE7L?} zGaBdt2(UzK=Z6?Qg_cIR_Sve8@#R|JMG*cuw*Lzi`M$ zWjq%GHkk1CZ~Wsl#6Ye?d28b5(-`*1I#AM?`M+8KEL1B)29$Xe20@(B%25yg0&dFgitvh~i6N)R^j zszv&Etuz}Xkv6Fku;&>)6%M6xpw|_3dtHyUtaiErud2=dl0`3@Ls?&Md%e=Qe_>1( zF%NVGQ-IyHViuX~GusZxxLMK(8AXm@#5EUKf7Fyvo;U&ehrR?-OL=Mn#ZiNg4o6VAZZ&^)9I^ z%}Z9%R|4udilH;w5uYm=``ns$*v-y36D_;P+T;r7ED3V1bQW;_Of1&bCE}i z%U<9G%?Dfi|Ek$bdF&%^pZo@D2V=)_=}}y#vwes^8q<4d-;qR}StX%uv*`=?@tdI@ zk#6rp0k$zIH0$Ed7WxGL(rAAU6cTb!0qd;7c#-n958$`PuhsSBRvfWeLAbX+>8vnb zG8tbom5nEO1Vs$5H5w*iZ4)?c4*~4z>N*qFu0Msk)1F->ScCUHeBWp*WQ!_>wEU+8$ z-Z=3_R?o#+D|X;+yvL#i$Q9&7=GaOunUEIJm#0v>k={!4qUMPh4w(7u$FSQi+Pjl) zwc9wC#_Fe{e{f0?NmAMBVzG{9Nx^0lZIi z@gq%;Rn$+V9=;JPRC@Fm3r!m%fjK00Pi*UFQTlsWu zY!ERu&%bq!R`2}7tx;Dy{fc_RQhoKBr240|3I!IJGo*LxvdBdqMIDx6;mA6s#Db3! zEB;~F3J+IGJ=;Rj)JWgP+(IrDmpnu(Xc1#b5tMbP`U23+sh0pspd5k}Qu8+N<<;c@ zK<1Yb@%D39I*_gnf@o}Rwsifn%85KD!Gh}9Zr1VoHDVke0tuIVSDdV^M(=%rh%@b* zS&N-%IMsUaT1H4wAYrS5$!s_&#(GW;&mD-0E~2bay_u}`K5?q2e}}*y1#95DVwZtz zqImMJGOH!RGE!NshvLhU8fteFI{;PZ18q7YNLIXZ6 zF`4DK_nJi+DU(}Oj+C?e>6_5~%JIXk9{OrvAUb`lKZ(J<gIu0esSN%r7Ry9gW!(RHJovgDLj%-0M|Ef7%TiosRrL4iy|P=tHl1KBJq3I^79h*9p+0$S zvzgrhh0P*-TdtjpJ9C)tcXfU(0hUrzYl<<;ud2~;&Jj<% zC-j^knpfnLOea0{WBJ5XawB6LJ;1IrgIZ7K_>QVoP>u96>Mf-8Spkk>|#v8v!#{-e)oKozJzi1na z=4;{entH_0u$ReDA5&dV`t19b>}>KSym_CzO|Sn()(;glricO6m_TIZ)|+;8RlVLa zM>|%|WgVW$SK-)1Q8`$vEBwAPf-yU^C>8?Zg_=#KvWd@iI^nhZ-<@G_xE;rGM$a>3 zvl;o;jp}(U$)$V%vlA`gEY|^&? z3X{|G`k3JD!~0M3Ck6&=j2MvY7}trrXy@YPeP1?gcHn8TO}y+??8<)fystofR=|YB zi_OJ&IvI|wx-vMN&AZk!prLQy*C|jI{nZ4)Q*>V^fH}rbo+j~t9kfiS^~o_%V7z^B zI$Q z5+X>2N7(VKl`xjSlS3yfKopld^w_XyUw}u0use@rcCsDW%$S8^^M#I19#btlgYe@gs?}9FV3=quM&(XV%qb`v%I+tjQQ|TMa}F7 zT(xLCwVi!ireGASz_hM`HC?Qd}Mg z0wtwC(l_rT_>NX8RheD!&03#H(dJxIaOR%{OPj-n&_j4h9kOkp=cl$eu(S%Nrow#O zbg|rbwlB~-Wvesj|5fj%`jQEZbWRP697HEqW@o|qqzj{#(Vz|;zdWZuP0J|K{CfQT zhG+EwlKXvz`%5a-d-aJ2UE(L5j?+Clt%{i6KNpy@*l~GSz~bq0TFSY4*goItxo<1= z!&RW}xlVa3aYdT+TvrZHk3fa^ikf|IBor0dd;`cg58uiq@G&r=?+&Tu!+XH$)8XN*9ETJMPRnas{#Zo{*S~q#=}<$*W82;4!Me0Duo&B96#|Z1J>y z6en^;Qba6ifGLi`_MK~1#cxltg_sYKHTF+3uJ$2B&D9o6bm1%B=s=B0UO2zkti6;uoTLZ zf}doso89qmpuTv}P8+SPKNs@8v&1Z5|(Jk-aZi4{rz zNdqNe_AP7s{y^(8Y1t-L1cQ2t#U3@SnJ> zVvgTN&~Xa(9i4scG<+%K%BlUWK8jX+>B-=_i;g|2C*=Mq>TE6V3*`SW_Sa!mF6|pI zEG6A2-Q6Xfl8a778WcgLyHmP51VKPVQo6g55(NS2kcLIWBHvm2+0Sq9=lk|P-uF1x z9~^q$_sm=~*US~?oY&X%(_`Fk%*T8btirP%UnE_ecZ=VzALUg^e=7T0&^PpRT3lXom$+4Ko^tY;oh}Lha6Q_%7)r!WpEx&ktzy?G zDd^96Zjz%Z<|^&ZSey}={3VF6xjqv*lG={v!N)-u=W7XD)Mfp2tCoplzX$;DzbnVl zlbHJB1+gc_C(5p{9)tYcB)Z%CuvmrD^*vn{OeqeEtb^a#bL}PXTt9#R93pZZ?pnG~ zitTron>oXj+AF^AW%^|5rp_gbV1}G{w5!mSEN`PBBk=js;0xWUx^-L#$mUO?`@gQX z&|6j&)8netKdXAZT46Sf${q0X=G1Yq+W+?POed23#qzS_+~tIHAEJ}y(Z*)Z(k6Ar zH=t*Fp>!E~3LXXQWV`hsap2-3SfEOa#|LJYmfvZe{e-nlTrG99Vu?cS=d!4Q;-kCr z_HC&RyJelqGLOYRYE6KQT`6iyOtd#Z}vAcS|M!(XR{YNnD@h3O{pObSb}>?vi62h~Jz_Scdf?xX|bJw8a904j;W zM4{sofqP440gA7j9i+MaqNt?utZpJdpgvz|YK5fG5_%MKNl|zicXm~Fr>KoIoyvBr zQ{PAWdAc4@&>etJ&FS=86=~>umzY9ydb;FC;@jrs7|Epd=MI^dov9Lbr(9UC^!08= zr~9yGoQn{~FHGJ)p@c1O>TO@d?+bVs!hh)X2#eZsV(%#jP>YBnyI0Y5BE0;BC9ee-u zEn=!7>hgfS0g5%be5+e@XiezoYck>F(9nsTFuqJkv#OjQ&#OD*YNAyyAJSL4#l2ju z8(7Zh9_LgFFYYB4sFuaX{fyE*p_>DiOQq%hqv0!8%@5j}C{O`&!5S-rDBbsW4U>1p zkKf)3`7hS(a{qo@ukM3TXd@D>-|er-kD%6cqD?E|`pc)N<=)Bu-Jy;tKw`vTyw8mR z{q6Y}gNi4nZuG2wo->S?ly3& z;}4?9&=>%`Yuv+KEo~O7vRWPW^Tke1U5OT3Bn1~c^PdD)f~8%b?e-97VDjg;pJ(^U zPpl2-H6I1Eg~xLBHMti(mGN8vNQ%>OJO8F@RCl}Qm$9pC(UW{zwXQ$hv!uZhG@;?8 z6Qea$Ulb$Ha^dPxRUk-GziujUuQFP`9PS?GOLGUFt?k4GpCalF z`9qB=oHR`EIp*4-H=U2W$(UaO$=GCSKY3ZMTI2CLWY zS|v>063hEslv;fuv*{EK+$g~E96z<(y}cc=o`@=MMM%{>ExiY-Tyh&B;c967R`NK# zCf%;tihf+SgJM{B8~#o3SLa1LWV;rr_T>=4A!j2 zsp}rbHI=-*VoBfUR^({sAISRh_;ZZso;Rk@7zg_4sZ%a6SY>GV&|D-;5a-)3`1q>a z2E=Qb7q!=ZB#quW?iL#lm@LUcpg90~;OaR+Akg*-7kXScsVZhQ_9a^+qCltra|Nja zvI9PMKEkHHMw$RKz;T6aX!uP0k~}*#kkipMgbMbzX`Vxq1o!pma;j&+_9q*&zBgeY z8jAX3NQ1dx{8dl*mp0AnW#DORs>>>R8g&nuwn?>Pgv%<&a z?%gktJL~D0{48>01@kDQ2@;?m=}f&7TwBOYSyaZFOa`8_9>Ic88MQ@xpS0>5mS*## zQ1tGIZ<%jIJs?XMBTheb62W-*BuWkLG@3wgXquwaUoAw0p1F`5U~bpkYWJ=jzkShI zZg$vX`eYjSxM;GN5DqmgH}_DFg8EBqifwJSYxzj|U&^7|<4}~=4}GU5O);Hn3nvv5 zd>DJ9-@Eohtiok`+HB|(v#hs5gJdr7S#@n_3FZCTS^b~CY7Q0lcKGr&GdmpJw++T4 zJmW^RRb|n?EuzC~)f1;qnq+@O6(xthLgTt#<#w?Pc_x?d zijuX*ty6;VP=liA(n|Ea0q0w4VHQ#(tCU}1un!37!ZB;Aq~DBFB&^3s=URLaq}*+a zFYQA2O+e!MHQKxszgHk_*Y-KI@pcdQNu3*klWfeAP5!5Gb&-g{xOLPY#UAKW=$|BN ztg@pNNtI=|Jzj~!xP5b;uUz_mB~%+1E4CJ+xN#{H<*}poXE3iHf0^9J9K^r=%L|iqS({o zn|6UzdjF(DPF3PdI@fhRNETgM{yPpgbOdmLAczru*WJ6E^XhTvrgr*|+ycU@B5<@8 zr+YK)Yw|aFqy8S5is(vL7b;)PXS%SyMmx5Tp8qnFhqUj^AI~N~qTcmkG{zG)N4yGn z-hNX2eCd1~h2GjO2yz-^Q-_R)%0-u&`ZDS0IkEGFh+_hy7jy-lCsoxjzo_8 zvfy?p&(vLMWw3tydn`q{Z1ri^m^tRte9a7uWj{;OPu-lwE6l1C`{E}t;`(vR+`!Q- zwiWKq1Q1jVJJ^G9pCGoJLgaRjOA;QEc;SpG#mcv|DU<}G8>Z>uIk*Z}J$N1U%rQw`eq1{gzK?Y5BhP8A?KE89WKI?1>6DNB7(B0x z6Gb>HTV(%@9```(;F4`pQPMlFu6S+K$7MpFX+L!1e7nHOB4mR||16g$LwDilOMYm* z{k86$4Q0Is`E+}gT}0yjd1jQCnc2M>@hs>H90nUi%ww}VjKGiV0fIk<-C?Pjt7b9u z(|?evQ*^g=_28D=I?Q+YZ2ZPUaz4~1#88+@vl4y{g%f7V zWn-W3QI3mOD*f?EP;-gx2t8t1=-kdL|LX?l{7?J=B#|v-PUC#L^lWmyhG*h1L4)z} zZdapagk(`+Dulx|F_X-2d7#$8IRRo(*9SUDV#a}g++`_0pirUQg-Aa?+C$T+A^=um%(~Xd7XS9x1H0!0j>lOfIH?bt*vk_w`8`{Wi&40{-22`Lw~l}?S{r%+kgpsfu&-r@SrWNG96-s8(U2C8BCrAk4BXf0vbSiz zZxrKOxPc`6ah4Wd8izhXp+-(0pxDxE@o>Ddpulcy@jAr-%vLTD2r7@3stpssqoLY- z1c*2)G#odcF1j+nztBwMn|~+$4Cqb2*z$5U&P-IzZFpu0D1Mfo@w_J-pK%PM+l6Hp zK>D<7Rpi)h9+7E%gy26(tF{^|CdC+9gF=A`pmEy%jR}V$eFfAn{be|JD~b=ZyF){} zCq#n>_x2OOGI_J2ojps4Hm2Blaw&?)g(LTqZVz9qEiEIrB;s1kec$ZchsWtc_Swbs z-D-g5Dgub*-A;=;)Z_%ZNDXKJWV?dVdEZR1)YvbY^o}3jDkU)iVmmB2|5uai&L{C- za1J)WRS*kU>xz9$+WpFIC7jkEr}gIDq2>omogNnlxid-BWQL{GmWFkJKtW|DkyVEY z&e6t0g7tL)osg-+;*Xl0kQBBDx7WuSfc8yqM!V*f78WTVGT_0}k*^#DJOPRsd@nl$ zkl%~BKgAl@ZHBh#oW2uwr1QJnVs`ZfI_Kr#_oR`=c?`n>?N%3?6DJVU};5O6yLf!mt!;;jvS zH%(Pmx7V=kbHAI*T<`OJND>qFLYr^YqTdy~rdDyx%zYq?-j&{{$;B)YaHDJeC*f>} z^d?$xp%kw1=vkw(T$``3GM5a^1ajAv7EeYrkMZVPUD7CerLW?};((7B@OtS{y}~dL z&FqOH#s!6wbx-FS9O>WuER6unU3ss6e4?%_2hXn=zXEn$i}rP)d2)^DOQ;) zO$N1ZEGw;jDZ5=gY$0{e7KsyWiJ(M30S8Jypg@Ud(V`PbU%tl(xF>|2*P{t8bqdvQ z2H=-Zi#taFSJ*c|FF>=??=6y^yO+8J7`YT-N53EFFkze$GOMSDTmj8V0HoxYEyP?# zpOO7EBhIR+-i;4u@Q(w&glBcMsPr~bpkSz9G79Qbz(J*rl&m2ML*5w65i->&Hxk*M zYvfnu$IkVG0VTx5ik?>iw^2htcM@h{2sr6d z&fi7UIbll!GR8@>x2Hv#xj{2-ICd9e#NWP?Ys|8idUDE3-n9af6~+%DC7qA&p^CEW zmFvn}{m_tllH~?nz>Zu8v>>csM4@7S*9`7HujA+hi z78e(^)%m8!$CC)1u+S~T_sD*(!5jznO?4~d(*T^M&5Lu1w6BYYurG&Oze>(nef$DY zu@qUekgz(jTDrCwtl7`jsg2y%OxKp<=jd^Ar;POB=H||OHC7$x1I~scHLyIL`-`4FQT8&4wSba283RLF<=1 z>kD4^m2C>Mst>asU#vuNC#Tn|dv)~g2*)d@a%40GBNYN37WTGinE%02AQ@IAjs?$) zKCA~OJr(4U{+g-a*eUEPu3*3$Uk*tkRi^qZBeY%kl@=VUpA|b^mM4AVA7pBG2dfdBKP{`Y; zC||gthAY;3)adkE`*6eP*;o0Z_Uof4f?Pn#sg-Tsw+o%FL?Rl&y8Cc|1w!`Elj!(B zbxfI*1?SLEo?$s?jE07!td7l0R|Uz?{OfE<-(t6o%9rH5Wxt=kZ|Zb`V6U!;$mXt2 zvU)%lT1$FFtjI~qYwYHmcp|Qom^IimB&Aj5@4(#J?dWcI@!eEgjHre zF^A{?3ZxF>(1us3Q#%I~eBWs0MUhfF&z9{e;ty^?dFc;&Ure?Wfm#H$Osj`r5e>39cj}~+o#IY7AHM~fveq= zRo&AbhIL!LWj{Wtb=NQYl|-)YA`m0>$B^sIs0R)oWe7WW24W|fJOao5o9clnBy4L9 zNvnG`sPC&0vuMq-z4|HprkrUWkBM1vc}S5yV;;J6sN}Medt{9x-jE#-5%fM+#|xEe z=o*wS4**=8pLaYYc8a>=F33^e0LyLF88)~n#d|laP_9K<6oQAw2#56LatKbOMGW8y zur+F;O^3m+vV-WqQra>D;4H#Kez#z@k0)!cY|qzvg|#>yK`T19oscUo`Y3EA!^9@i zsPAZFAfcN=QQe-mwT~#rpvDRB@fVR0e%a@nTDXG`cM544W=~F|ORP3A2zPpUDBk<{ z_~_1`Jj}Zm^Q;)fiWv{erj-P=uwh3B)*7Oy5=18yJ`TK`^(Zg%Hr~I*z=`jRqoy9P zF%dHB2%s6GH}e&KwY;J~)H8$3Id{4!5@2Q``gHL-y~bGU0-~2V&w zr~*J*BM_-Wb!FvmLZ5Dys(1I51Hiq{Ys|a;`$@Gf=FrviU!8YB0bs=Ewq1#iLb3J-zAMfz~mEAp76Er!5KcJL? z`hQ-u2U#z1B$=bc;UX zIq(4s`+aF=*PC+I4%|NeMLPG4eL;JH`xmR20MFq+VnK#yHpSub z2st4j0AP$K7`1KPV3LfTOYdtN+olp7++vqgWT219RMXGU4K6GIuYwoQnYE6VG$)jpK-bYGU0<0 zgMHF3xY14=n7!{l)6mdKv9YL-f-g)?s!nVjPd-irhrGF?sv#Wy#leKs8Dt;q?g601?(! z%r!g$?#A4Owkz!t4VY9hh^$;H>8B~7B}Z$5D&pE!?yJl+T*u?@Pd(O1DfK@=+7je| zY#9Qv>1KhM$c|8s;@;wM=y0&~*!4F!`73Q^_=dA@?xLmuzgba_xO~&;A}+OLG%)3s zL4T=JY5=$OgMBz7lF#u-|ITZc?Xhf$s7xXIP=f|*!$c-EGS`l|28Ms?l%C$Qr~Cb? z2X?Qk(b|d69k0G}kvQD}W&K;H3^CmHuonSQv~mhtLCZQYd*S>=PdIJ?Ny&JVtMzXQ zK-4DkygxPu+IEElPBsO&Yh?YCBLx-u`e$i|!3XcP0sP+))S@mdfVm_TxJN-$*MKSd z1vnPreAGur(Aj$29KTD}8ng4m!^dz#zJS7JZ6E;&7)iP?$58XmAe1GUCD4H)>x*;X zStwHS2yrRNwUG<8=^CR6qk+|d^BphYW$4y##-0WtVtq`3di|cA4R^=>t9w`?VT!4& ziS`U|)Ps`Q+krD6)d9e{_rbL7`bg!G&9r8O_1n%5Eij@rwM@Y$yfEO#SSCo>%?Y1u zj?2z}36Z*M20TpL_C}wF^bt8%M5N6&#{mDKBcQEfJjy7Qmu$TibKBKimJ(eAWaN3k zqwqLh#|HNKr>+pNWzSdB(MfGTQ&9qHhzzGoh>{}hBi_K<>7=t@o$j$zGlea5&6D?= z5AaU(Ml_h5f_H2)`C3AG&wvqtq01xdbRoofv=w98=v45_SP|2nGV}#sMn@-ttViTS z&Pc$HwhGog+o+^^mN1}gf8uyaA+FiN54<{Tqg^qu|HsMsX(B}~`rlC+H@RrhwF9a^ zHV%lK--HA^Kzqg3CNlu$kZ_-RpZfqwL0dP*XEC}sZFyrV*&2Iim-CkPO1ge+Z8!xO zk*;NcTUd}ozX};{HbvRyh&5>MhwK6+-f(05J`Z? zk?}PvkEB?vu*MXPPTPG!>&unFCv(l-4?=BjjI+Xbo@jvn*Rsm{0m5P3z&X}1UKmL1 zT z3@vS)PfX(1GXOoQTL4Ukph`T@bQ<*hAnyqE4gBv1*5qcH6`yIn8O_Dbr8YN7|HmPLR5 zR^${pXHyf0?N2Uf8`3U?Bljdh!^@s4W=3nA(Ju_WABb;`wN1F&MBJBZ!Ie$LjY4D; zfycVE7M}vv!9EZj(T(;ALPn1VGZz=VBtW!nBu=iq5&#(8aU%$s6+k6xMB`iFra0`V z-}Y58h@gU(N5|El7r@zBfVtJ^ia{E^}xaP$?k}6%>3`s(JGii zCL#rYZ!uIGiFRohzWI4$hMKjHTQL)~NCdfv6wkIC&D{L(xHu8O%4l;{ z91x1CpVWE&PHI*>+!?)hU205T$&2s$8j7H#e^&z&_EQ-Z*kbxiY72{pc zs}64s7bkZA_R9J9NiQa?nG~dvk2jNwKgUgf(PK%S53C`$E zyFdunqK7?WVqe4CC4r|MQ4t^7Pbmf|O@tS!8Pn;m2yR1)CaTmTJ)j}L-}P4M9C{=@LKqnP?z>8}ix z@sC{1GZ}B(U$UF@up!0~)t&!{vv6j-asan(sBvC7Md5{8fVb&Mf#8vYrNhB$3JV`- zricB6Ppi?SF6l8ZgKeB9z)*+xWdGNlu%kEVxpf9pq-B53V(wQ|2jU6YDxP}23^*Af9tf@x3C^^Gn8?+Xu6Z{Hq2c0?wq zBjmj(CxPehy216IA+851x(}$7Y@uEB0hCbzcg^>P^*!-kG^e<8boY?aF0CVbsV&6d zV5`tRRo&8?zt)Q1#teK#d$8|&&$3JyxjTLaRn7J5hGJr{V_q*F>!TyI^cF>0wRaql zbn&ne8M|!L7$K$Y4tk}-0e%IiI7sJh7?g=s6oGA@&ri=H&LRJEF(1|@?0CzB#XprTP@tAVA;R~`VUMiYd=CIeXpKL~gy%3Mjr=l|s>Zry zeb-5!u!quQ7yd1`#0R!cKj(jeOes~}y55z`PTPl$K+M2ny(jY7Pax@}gloD*n~`?u z06AIG;{-XhK&(7nHM>$vSkE9#$N&qA9O1|BPDoAx@(Saq*|7rjhySW?u^PtPn%?FQQ-4(wN z)PBtO-?A7os3eoqq9|}7{3t*eh%e(ss_eKSz|)Cre8u$8$b zVVoVOn5bSN9MihZsTF(>pT6RBfD_VA#vAHX51#_&3TUtppGR-ta&&#%Yv@+kXKgmC z3+E&;%EW-f=Ta8K`sj{?AM0K(P7-384!bG1xHo? zsvA%7=gVmX?_>+d(^Oo$MepD*+rQ%yk3Qmo{&guxUrtsWCYJn%PD{o2gWPRk^|`~> zE7IcR(+q_iBoIi%K1|h6mt#^Tmw?RWcpsXwSBh z0JZ(hrhLCvmD$6O39^+GpK|HmKsvU#6I!2n_k@#<)eT4qqlAjTFbiizt(Qyo)SVlX z<%)gZ9APr@8?W^95+{J!9uUO)3AC)ONy6nI+hIVRE`PgxeD1jNOGo!sPR6YZ=_fuE zU3d~fMA;?ODtcOQq}juaK>SE8lvcqcwFy3!6 z!BEkL5V2hGk55XLTpqV{e}2j&l*s(Basxx{?pDrljcxJ)RW`5f(~Yj%!vl^BR4l4G zRHX8bo|&Dcw#vfZPkQ`lmmVU2Gx(6Q3rVc|W8uVXB64hjwRhR_BLrIsLQ$nT z;kw@v8}TX#fk5|=wX4A1-@z34;p8z*!dP=Zhh!`P3Lm{KM#Pxg`o^FIAKj9i^%|^3 zBYd)VObJWyo<*QR+PCFm7(ZbkFf-s~NnSwKs_j(jOcjdPloBLk_GFW@;@{4u z+h82LJshqdF#gm$B1(>Q?YQ+#w}(Z1%ywG%g}nW|cTm4ZcHZlk`XtckJ!U~nF!bM~ z{{f3ke@A^B=|jf*Y8~NGsWu+^YJUV)Cc_wn$;|5xvF}(SzFAi6?XKbvRbNQ@`@2_PhDS0g?qFaD!x^i4k1#|5y<#vdnru}OvPk2rhe+>%ql3gt3vwKX@< zc}Dl6*hJ#>R}N%x)yjzwaa6(QQ0*vq)zF0T1HWw|fs}*myze&GsL8o}?f1s4&)d(7 zw?=$PS`=v%4`T(*FaC-dNIUZ&8lIWT<=QA6zV58SvCK%P2bwJhriTpQ%jpZ)O>-wv zX(N5|#9b#*y~o6*Px%@{N|W$-{)ifofT+Rfr{2G!23biH!xF=DEl@f(BJ~(V{g+Zc z=dT=#3YzhO`pg>`ZL=fq%F=LL(&*BedY))3^xit-etTB;vqpnm-ihn~oORn5)gOhp zsaMtu$_@tjMH4v_cV$(~wo;Q=Oj%+)4rDP^%Lx(HmBF}~ZH0La(c}mNE4JTi0#eGb z%3z(R*$Pp=8OOS&S!hHKhY2r8SqSe@t6|EBHIuBJo{5lD;kw`r&39wv z6n=3yIC1T;kb8SH6E9yk;1U;_W`Gfh2V}w)7mnv(k9anLicbJ*A|3UT>MNF*is$o` zS^Ju-EPjP^;6nzm2U&$X@vNr4nLk@RoF1I-n}pCB`lD9-I#p}9`bJFrWwC$N>dUtZ zqo->lbj=$LekCf{A=1;J_hfFCPGNWsmWT`9_ngj0M|NzTN1aJ$pV?u!Dgl57e<#ij0u z|Lq<4P#y6Wig@r9%4q_Fy&aRhn}xp?u0;~UqGLCQ)Z&Qu z|MLnha8IClaRV=)0v>lqY}zl2%&J4edBH#)Hsi1kbx0^?c9nE2ogv#g< zGRdY!;_xIK)++z~Jcf@3e?5%nAO-i$YeuL|t}&^YOg##?Uss3X+V6%cws0JL{n_y^ zosnwb!R5uWj~6#a&lK=kY9-_)_^oink<-Y6UX=Pbna;(*9ZcKfs|`!~r&#oGXRkW+ z{EMw(DFaFZhqKzhblwj->;lR&5Gv^q*XehA>($e#AFV*%ji32laz!c?GlE#te;Y{y z6R^mb`QQS20u3kTMo9d~2E=)1JQM7}Iz*#%sm!G;^FJ?~(}Ne}XRr4M4c`(}R3Q2AgB`9Fs`xlwoQ&UDT znCK_)c)Dc@wD_6}0EWe=;36An*J@t+|IUIEd={$o0}T~J0bi>TB%Y&Wgls{yo?x&_ zP$4K;-Y7X(SLM%T3LpBuBHW{{gN?|_E~nJdtS}E+REG+UalO@xeHadX=^a=e^*r&- zACS5Kh^m7T9x)%ZM6shF2~Q@Cq&Hc?614VM9bSZFG)t^74z2#nAihAMaT6Isbaq`e z;Q5;gx{srG0xL{|%m4Cx>-m|&FPjv6=ErQaba!hqAGxNn9SLV+=iRkbwK?Hx_UF_! zFn~w^*Gy?g?ffFW@2EjI<>HVfcB{s);xD>Zd}ecne_I=Si*}HlLf}BCSyqQm#g06_ zTtUJU3*4)qBJO4QA5~Bx0IHBUf?+fd!{%GJ4|?WEFk8Ajna`h4xyI8InfCo(R=4TQ z?E^mIHxcQTgwv(VDcwI38h7o(N&D;i7v*`C{zo|z;mT=IjhI&ND*ZEW51-yr9L%-P zD~zhtoB)zaf`3y86~kY2-Vvh*(fG5L*xZy^!MhI%yZ9}A{%z2X&MIphr>G%w9nbdnCF%=bqMddA&^wBS=4N`U!E!-s;)79Ky|@vD@;A=L@j<$OpaB2u&b|uJ z0nECaW+4s77pBx}7i;91wcgM>f(2$`8mkn2F396zcvSko{W)g@ijOjT`+kvrPM8Nz zMA_$MHGrFl_s8)2-*C_@0Aj6FKTviIn3DOhT}jaxNib#=QZ74@Ly`hxSK^SJwdR$~-m zEi-96VwfBvgY=)jeU*Sj`;Iv&&kJgqGi-%hC*$GR{lV2)G?6wUn6)|&4GK;KG9=*7 z-(1=~#>IffxEAWjAyfq#)0tRHMPe8WMVdyLLL1o&Y)GIi9RdN(pTBcP=|Lg0efoXl zj>+y9_(qqu)%j5#c%da$LUaw6arZxV&?ekNkN?jv;ELeG8adB-95k!5Ha{u8Ue~)i z-`nR-%BZ=5(z7J?pL^o(vcu4&t}36MXggx3LLBm6EI{o3cZ6?#t-se8*=p|Q zf@^2mQD)trP|_uhq`egXf8v33_@ZkbVW(eRO`Wff_WmBwugRDhpKtek=-xF(YX#%R z`bPmljc4C_=UOM^I}ldqHxv7jo!f=bDK={SvpAt9^MR;(LiFCb3YLoQ=Y8nn4dkJ_ zFE7ddabg!6Td?EGq0)6h*kEEuPxC!a4!EjPwqO3kFk_wJl?#JIL-ULpomifhruQZ+ z;LHbyAG8jbg#U?i|7WiSw01SHPtDks;(pwIBv8{AOS^B?L96?3uJw_?2=OC-s0WcgkOJ?Jhuh*aY4e3aUAh zl-*&tdO233S)>51#=qcmtOi7hV(Nb*01!yI&#k8`Xh9|$`ve^T=Lnhz8-4;%J0 z6%eDgGg*lGOw@+Pc3oF{9J-P8e~NJreKQ>lO5F)$!vgcGWI*-=(@0o$u z+wTP`?447w+mj_P04A_l(o_9%JnNqa)0~Kc}#3;p9RVV2Gi;6Z(A0c zcx>ABcp%d_ce;sY=V8VCwKYIG3=osAg?nlUGC-bvHODwjfjXy!^a&4 z@jqT4;q|}u0g0`rWxqgvj^Ot87C?DW!MK8{{jaskehzK?8tDWw4gnceb5LRG+pn~? zl(n2}RB>$CPexCMN5ja|-0qpoB(VCcSZ`pDG5>ABeB%ZBt>i>UN0(efE#f3M=vHkx z*3SEM%^1g)(L~vO?Y`MSJZ5&qx;Kr8bcmb=0uB02$Z?+Lk6 z{`SI^qgAn>i)qUrL}uM3^z< z6{9ZCSwxIG3BixAul%RgxyT@Lv| ze3Pfh7a!PBv7H~7($7yyQrTeo4Gy$<`T1If>XfdlW-)8l%{!oUww44w3#ci|w%F*p zlj^nXzWFV8o3$HcxZ^>E4kIx^l-J_fv@hzaEDINEoipQ^WR)z2ZEsboUBvzWM`+UG zKxmF12BKxJOiTffxBK|4VwPzYLUa(F1W)q#EED{b@k^+7l8_Sg|( zc?+bZRnB|sJ0s&wgi_nYnhI;|ZW4EYg?YDbng7k@So@N4_M-vpexN~OaO|F3VL4B@Iqj56neOEVH&?q4shA*+yqS| zsvk;blypdi!ER2Bt(Ex={=S1N`yo0n0gyZzE^hyiLXF9&S`!nKr(+L`4%?kKVw<=? z)wxRUK7$|e$rl4(+mn|EsIHtKjd3;XLWFH?ZEs9{f2@A(%vs8m#PiEAUBEaAIaV(V zwXb`3Fl6ahqGrAFyYcTL7}N+z%()h+@J3F541=OO?Yo4WGuE)vTmQb(PNx9-rd;@Re7c|=m6pel z_2cQ7t>6b0MPj-NY44BN9Jz5Fq$q!H!WcBM7o=qxV>EXI?zWfSqi(0LL~6c(id%5a zp-YlRZCc-p4*mN!$%L5flXMR~cXCr_NuIQvR)1(ng>Sq|pfH zSt*6sAnfG~!Ed{pqtsauHZLzb*^RmW*=VUY^rq7rw}hgbOqLwOn`}!L6bn-j+kC13E1aw7p@#hMKuaN+?-zhpZ;e1Q7lGX$Mnych+x* zKkX0b6eDSSU%sQ9&uC4GFWkn3?7j5sUHs>-d%dtiPTNC{n~(%&{v|XA-{=LF`1g-O z|7g!i)!rJf`Tv&qcy#bctVyT2pVq%D0+KQ?5`cj32>EO6nZ1H{=F|CF6AsI>B4X`N zCp=h+wwx1&r)j3$Zr}fdmznUHtIV4rzr--1#-XM*>7bg3c?actp<7tZU2*02o(~ZIPEn$3W(1nA`FjC8OnHiIb*?6td)ZF@ zk6-q3!riDpSLlqC7>VWB-g=RBXT^r`Gt-U-kpky$%LS}?Gv}q(J)A~!Fj5R%kHy`A zY)Q|6sIXhW2%1|JCmPT1cTJMb+kMDSn- zY+O+CAfMl&nUph0{q^`xKCDMmS!Vy#4VoiA7A|U%K%bXl?hs`aF9P0nUwRVrzGSXxpSUJr+?PSbp_K-eK%e#tkomdMKBqEOSQnq9oEp3{z-ewk zV)b>RRap0>SvP2V|8a-z5$omUkchmgzlgaUgBdPRFK` zfCD(I%#%^> ze{?`5bLJOy{k!>>0HPmZxv^svFW7uo$6=;wenuo5^W#$|AO7sB4RA8+Q_T2G{Lhb` ziZ`?&&0q@F7!onN$2{&7O-lIQJ!EHFMGM|OXNr$sa|Yc!4$Aw|p2b5)0AWK=_R}8R zT5Gzyy?J1gO*If-TQh?HUg{C%jPhxy-erqmeeZp^cPCA6rVbxwCNq)m&F^6R1Zi!s z?>-@tzT_j%zgCJ`uTpR|6p^O(t>?br9c10E6`fGYKJylsN6$;_A{UW>|d#g zPJzc=V_Y)BtC~^mEIZ?^>}bt3sGh}Gu7Tsca6e9u5g1=OU>;unw;=-1kP1uVH<8?{ zur4Vc>hCD&cX_3s3*#JaJFtjK#U?`(`Zd8c8YKkOCTf6@rNUPMIz3%r50DHY{aR4F zRBI)F(2!e@;+q`ge5qP*ileD_;kuTij-9#u7NAi|0!ZW^jY9t0C7a4G&$!V<9K9!H8}wAW!Lxwf|f^==flNbg`RjZNbJZ zzdQX-{L)yYmaI+Rx{KS}^=)icH;7AoBS$cVPer{A;(w>n2fn>$6W>wZV4J+w?gc`P ziJzC=Rvpl-hzV32$pz=|W=udCe1wJy@DZYc5vIYNd`b3E=w_G=><#_VIH!1nJJQV1 z3GYR?h&UKoD}F^7d}OIlz{vQ(ye-KCalRc3Pfsrt2IrJV!B9lY6MvqISARS%K~RzQ zhaiko_cytjqr;IOA=+`mrno~^uiMk`A9@kSK^2z{-$E`>E?2w;)JE~%6QF&45YQ|{ z-7!0bDY?}WFJh&z#+g8PB!UZ?_a&$(TpL0gv$cyXjQg_fTwzD@WV=Qr;frxNd2E&} z6M`?HgV>-y!66ZDuT#za{t{G-L(+cV$b-zm1dO}t?nD$uhRLenvjlKAW&m5{|I@F zL5*lUe+|Sz*$z&IyY)%2=_WI7K8rKiTkXcAut(mmWP#OT+$*Co-k)ba(ed4fiIkbT zfhB<_1y)X_)qTdrY1r>gqqKl!#=DbFmFfC*v|=IuUf1fLfifmMLc+I{LudKg`QHaj zMbjpyju8nQ+!3`B+?STO?1{0GeVWZCZ0VDI=0Al7Hi{s~s@$ejPaU4Wqh~QK49+Z^ z@eOOYU&YsbV?;LdmcN-BIW`NqlmQRyuU%uDvawY+OPPab--VRhQqUbLf3U*1Qh7pm z1d*}WVO2r?F8!}D+GbUM2ctImui_{B)bbpqtwc%|BB4K%k!HBlUwb0n=8paPE#Ta4 zXk<)d^uS?UWb$chPfz@EMZ_yD#ApT?YMa%is-b6EAB7`0bWYK>QHMV+v~`m&vpeO_#&4DyH5@Os`12%$lA~#-nwtiT0_TvHV(kOXV z7T7~`r>ae(1v>4pV!~hat1SD#8gNd*5&d%o{?lFR_CMwZLPam5Csb?G?R`SD?HJD z_u9#&T&062k(+x?vWYn2y5OR#Y)4&jL(cDV3FRZ^!Q(zt@c(cb?C#pHpFbJaJEEa@fClG!)>=;9z8fD zbak}0dm!7hF)B8|JSiX_U0imbU~g&F3PwB-LS>2p4bVm#UOXyTVu8hu>K)YqJvF)A zeUD5)XGSuZBj)rVQjaV6gw!{~mVifP$?n2;uB8F5_iI6j&kQbnN4mlT2M(bI9eqN+ z(H$|_$F0hRzaKpRP*fv*t97{}>tr?|wGIwlJe zHn{vhb-e{tRBhMCEunx&i-3UCP@*6$E!|zxASGSWLkmiGmz0!%A{_&W0s~4T9l`(t zQiH^h-!*#Q@AG```+criF4ywJb*{6|KKt7HxBthS<{;lims2lkZ;FVc3x;+dqBNEReFV@~@t{ZY@g71(9MWtjodOk96@69Z4}AQ5>1zz(P!KGV=uETV zwW%!4g>3lvt=YCJ2{D_Q@x~_A)IcBIB^?IuNFj>3B(UMbu|Y|Z%xn6{+*_iVEky`c zG9NEx%t+!l2#=^HX5iM0-sXmRkz#yDh~U+!wSYN;klYHxUPf=A^q&ndF?Om~u=|9! zLX&DfzI;SOdP0YxBwiY71cIto>lvZvIAo7D#Zd+N)jv8%v|q=?MYtH!rGSQ~OiZ4~ z8E?1v)ZyN_#@t%RjNnnPfqK+kF}?TL$4udD3=;(r5Gj2^tBg_ORnIKQELkk|DV_v= z9ZzRdr9`re{~FIakcZ(&dWmeF#ykKUzmN<5JBW4Sr~FR%;*=AELb)F(NL{%xf7nti z178>2kP#afrQyG9%l@5UBh)m~ySVz)`f2v%OmvHrA0(rFTbZTE?+XuSn#tKKWq6~6 zc7p=u5j}|XaAX^PxPzBAXFAV~Uox0!N|)WO3{B8yRH2ozQue!@*i0{U;dGCzL<3KJ zS=_DgKc!tyPLOa>bDVCbt2b(|=@CB77XLZc9yZTQMowM=awB^R@3-aSndsH;j-L9= zwg)*-7bA?6W7d;{J-}Vc?aplf8FP)<%ofk$aSNk)Bx13}{o1k1D|+wMuE?I9ilnO_ z6cS76RQRSzzS{?!+gTRKvYG@&*_*$n{Bhm2-+L@t6d$NYlb9V!l?tdXZDig^OjIBL zCItZbef!nglZ{4+4_4pq@Vzs+E{y|yJ^BToJtDovw0Dw;)uN}3eA5;cu((63(J1%j zX%Fk5@ss$WSC(7VLF2ZWSiH|JYr6OBSKT+)om#KDM(bxa8vU-%HThEKowf=2lAash;b%ju<#&TY`2**jFIyE! zi(8e6loC#PcURu1w-k9zAp6oqa6);kp%$qDT~V>mFBXE+pYoNPVMUk5JV7LvmhGLk zJ`OxRS6=TU=o)!=u#~?*VZG_yiBi_rsC|xc;^S{IBym-7F!}Y~s~hzdON(T-nzd@P zKAA%(Yup)uAOd`SXQ|4a{C3yD9r7{Fa$~$`_tX^Nl@$wm927eD!R?N-{d(_(0x+xY z;zy8q;zz6~3c_zv5u&O;@;^3w*>9;pnBg{uE-8Imrd=1zf6?1JKhw>tYM$R9UdpLP>KjKJ6_>_G^^H2SwWFM^N4LvI zv@XskN7>7C8XotkWuCQF-CrGs$zqM$U4$5Rxl9yuvJhMur*6jNJjOSR&nQ!higU@0 z_cS{GtaQ1@B_Y**mt2$HMeXoKmnIJLqNdd}C*BlzC|sx|Ot%Zs)|>S>V*57czG5Jv z+cihxF)fJ2!yC=s>$){nAO`45!~=J`ET6V|3JN%0iFkRM1hR6?UkWed-wvoxUDj-n zvA8{$kHgK)ozd#peyXy0B;iwP{SHAlv&X7L&hffby+{N0V^--%7Kz1s%H;CpEtl)| z_k!z&eDBKj_DgP<`QJ5f;c@X}Vsy%HCa!>(J)5m{B?axy*1FY6?mWyA?BhNJc#rdd zciNAc4kHB7nP;OiHy zr!(n@og=A=G|S!O4@JsH)N^OB?6gYtMlT;TYE>2MbLundA?r_1UW3mMi{zuPLkB&ji)u( zT=W>Fz#)R(Y>^RaVA=~jpL~AHfTd}T*;HKFb9(cE;EsGF2`}St-nBV;-Gpezhh^NeDN^IY`cP~b-iz-#ZK&(1k_lugC_l`N@gwi z*1i%_vl@iB$ zEtN{JThN2JfS=#5&Ys#$nyb)U3blAXueM((aW>PNKO?$FJ)oqAnjFduX1tF4RL8fz z*CS+qOfxogX>k0iVm)6dh*>!B{2P87upkmIgYtCCFQ?njXFlxWuPe+4)o?oLKA71N zo>A@;U>yp*(UjzZ0m+lXgg*i4<6Fbi)<{ryWDO#u41wXv$S#DuD(x@{ePIosyw;~C zq-Dt^uVF6du7`&KL2PGH`+4USa-65f+ z@8BHHxq*b@nRrw8PgBmV)adn*hpE@(q%rY`&70MDRAPD8)tG*}g9Bjl69 zR+O4!)lOW8 zm$OZFK2>Vc(M7_(r`U11kE1}7SE2nE`#Wa6WclEJd$1%tL6Rv{psz&2`z;B0cv6YL zKvJNrLm~3<_X_N0Bg!b;(*I=v5_HdB#*rUQ_>KXB<3lDc@-G)VX{c% z%YVW^U=nVGGP1G-s=b0Au9i%(Z(u*W7_GwXqa>#8dQ)HqL>tQcQh5ah9?WBMak0=L8|LK{C&W>-q$P!y3>&U> z%Mr<)d~?0cWk^bQ{4?6G-ZU)b_`y>i3Q*lSd2i(6w-=s&l z;|AvQn$%CPcL(n6?R9>g9(!ap?!Ea@zw*0G@?>_ALD8M2(?#-g?p^O9*e$q{_KA(Qwc`49&A@WsNUVP z68rX{*`^p$vG`O)=3=kom5!Y{wDMANlpR=W70X# zHpg6s-|TFa>2-vj&iAa&5~m2^+w)gcIN!+P_rqF|JCC`pyk4-FPFG3#MxvBcL!I)w zVA-`i`Fu{mt&YaI-htMNnGdC-Za9GiAL8pL?;yrMC6Ao{eU(+gqD# zS#IR$vT4^o`0ivFw$mMpY^rGQ1@TpLDRHOm8K7FY}unb(+PT^7oMp1`cocWizoKGoKgvybe<093l43 zxK&gDGjabL$7N`KzJ%8f3cvMu`%_6m^i!Ch-7ldmgaiL&EH$4lKgvO{I<5-kqS44O zTD<=`>=n^_-&r}&?Ia2P<ikjkie4Qb zxke~A6}$Dc)s28NBB!@jS9!dmohECXPQvq6tl{^oMb*!DzUEzt$f;9CUbf@Bu{~Z; zqtE`$2|`8NUJk|15o}U2@cb6>nwy-ZK(~DM9Z6m90EbJaATJ~L#;tO4d{8+55QQn$ z5?Jg9dfy2PEek&cju}D)%JP$}6VHLsSnj=++{}qMyvxo&$A5`)=wS?>)SJ+MXA-fH zA4qA`K}SLoa_f?6Tg9k@{ zdU>!f@0}kz?X4eHAG-%O#_d*8<27pzLnMTS@4CPybml3c$EzBB1D&;EWhq$Xefq=$3nI$%U`7q->4ht3Ev63V8`$CN(uw zQt(NAaY_Qb=in`(mW5wy&*gczb_Ab<1og#-fl6~pRJvTzWY$t66`7^7bzSOtN#&i& zRDU6vmX0ew%7uWMFhkw+qHomOk6iX?4%e4NQSSpc?s#hNj|~+)T1%&!Sa4BFvs|tDX_S^QWY%xRzv^~1KOUuu^W{DV8d?eyGjlKsR{wr zMx9g%3NBNckdTo5h5!`Onnohrn3QZpL0lTdapi!c&)&^Ut{Z$B+axwxEXKlk7N`&rty#rdY1a=$le;Xq&g-WaWnC%o_{{x$=vzI>NDp^}NpzE6~Nakj2vhRdbS^_sGu zpld3!XrkHRqgA*3ZooS|DvkYM&i+^%Yak1)OHgFV9hw z{PwrSQHbOzaaD<-Bxd{tzpX0l6?WsMM|q%?-Wi)z*lTAl5-mptTNXhpob|-!OXPBk z*$n07nlFakAP7CTgdabG-0%RRaS7Z*IYML)4eJzsy?AwQsx-O~aBLzPcupB~iDHEY zkOhqx4U7S)1F)8pr7H*2G|<<7y8>RI5bF{K;D%WurXNfY8}Sm#(ofvdcg!Qb*Oz zU)pb#N*Wf%3GJ@Bif|N?XUH-!$;_(wUM&sI&k|=Uv8gp5rL(W>cdJWRo$}OJbzVxP zgE=v6_p<;bQ^q3;O!4zQRPt>h6^V56MKqVOFo*{Qys!ifUl=10(qlO1r0!|gkM@}<*fQVv{kE5~wVtV>W><*{# zYe2D-4>60AoNmuHN;}_0JofutW};V|&Se&7^9`gR5b&QsBc!%idjXF`V6xgI>~)1G zgW@kB0eEjPPps1UrTh9|?$pLqt2Y;*uwDVY?G1pZBJ*~mSka;)VylTzP9PnYp2TIW zDvN%GGv)s48P361WT7t+)*7nWZu#hQbTfs+L>#^?bRcEKEKxnj0=de%1!NWUsswsX zWYb4;(1H$qiA;}Q{3He^IUJ1*voiyymj>pODCA+21DGxGDVnOkh_OQksQIV z*+%sXrVCj)xr*%9>JkB$R&rLpK)%8U2ntRNA+I~vMm_9E&yE5L9Lq)V;#yZ}*=ax$ z&k{%>+$Z#%d1GRm)qQn&Mg%k>#EyPVhXLU&_77>)n5sP`pB02^e6kg?fa7RfK+B>_Dy!Kq)WtGwLBVl)78bXndis!heiTGQIVq2dHz$p#AR6z zqqQkeLX-j0Dde{7i+2SaDbad^Kzxub&Th0g3Af|5_*rkPVv-rbZxWgDnWpzN$*PTFZ8+&>~5+ z@P(gL*1)t1?|FxtB|DRd88F8V$lD*tt|1InJNW}=V#CT2(RJ|TYYt$}ATnP3aEgNT z(i;Gi3uM=I*Jk_>B^o^*xdcDMVMMsUGi^77x8pW>eb(=1tlVN8aU-(x2N+qaf;ci$t8bZh7}U*+u@#Zb+jJscD(%tx z^WKZ))R?|AOhQT28BHZ-pA?WB>W^RAL0_djfCHHq7rHZtW@jMh!e&rg+~S)AtDjRA z;pus~!0+~b(Vrwh=%(Pz?mNzDbw=QOau^|R)GXN@O5Z{q#ej0X%5CesZ`>lc~O6)NT~Q{GzL?YcqVf$@6E{%c$E& zTa)VZIOM0dkMn=dc;9nZt0QQ0ynO2JNkRhgA6#>3;ILNep&%DB zE(EtRM$);kE}O=nBwcqE(3=$=b<{K)+ImN;t5&`Y!e~`4A1uIZ?mob!_U-!q8!zJf zTPO?HBZptsIa+Iw{XT+hFKrer&ivj~C{_AzxAj3<&yS2!51jgk+_9Kzxg4#po9eBW z1laNJ&?IDwZp%p*8!x9)Q#Vs39)!1gjnVt2z=~Zql$|3W`ACGMJEU@Fv?JvXp1e@+ z(2%+!?9uFdi!i@UdUfWP?E)~G?=$P&c1G_u>X`@tB zE_38NP2BwiVRMk@pEx_x=R=Eg>JsM>0RWXW{w384s zy))U-)$$O%7RdVRjQ*id3P50Rn_Ur_#5Fn4N~Xn9oT`tPFXXXSCa|0g-QG}|%jP4o zYX1Iv%@&B)ZGQQF0x?@2&r?u9#f#xcug+SC!p-=Nka6@Qt13Y_!)#(Ya#W`1?yCCZuq3k=nD#JcBdriOB0|iI+30d z^xVk6UL9vy3C8j>D~1JvLRu+0>p)C}O2In+~Eb#~25h*>muHDW+D zVna0~Mt}3v`Z_pfI;%h}l2cG}hU_khe={BlDt&Q4!kwx3o5Z$_(puP@Pk%Badva2< zR;!oOVO}t9tKA|Vcnv8|$I*)H0qL*`R)HCYfQ*HdX;cj)`!8z#o);`BQlD5;tDxx0 znx!vo*=99Z))`t4jN4vFraB>^X56nrDc%?CE$zlOb|ALwr%j~&Y>He+Q z1=w`m>DV@~N+K`DR`_hD7rn}?U!^*x>&@QH%?e7)oIDRpcno7m8&g{PDw;krn>q8m zta2>9udadkG6gIG+tjon?dq+9Vlr+^3MX6yAGt_E6+c(32&+rtKp895%bd%{P!{C% zDFj@i^$)cka$ybNw;@xc`$Hb2LY?Z(`a_EenoavZBNU_Bf*92+9?bjc5C!#8VWC;F zCK2?c@S1P*%l^DDQ2(g^5am%a<00N0m)+=G=zAu&Y2;{4cWFXhEHEk2{At9xLopSq zYPzBnD3#B8v|QDkb^daO4~OqV_RVHJz3qV%_9DF|SvlG25*9N;1ED*alV0bEsg{Wn z&3FlZj=qKT9Bo?tjP*;5IY`??$uViKg2a{}q2dTLuPGA6aZ}t>@@LauWY5~`YQ8XG za=7P!qOCSTRi25Gs#UmAo_Sve>|`0go-A&Be4rrp9HLWAwx|R%&el+cr3H;;`86j3 zLFxP%+TPzAuXT_$dyEMp25^0 zsb!Q2RfYti=J?rkmr-7RaJP4+9i()>H{P~wOZO|v?0^`gOs{m+F67;BhgS;KZN?me z^zP54I7hj-BJBB5$U4b9%szq$*Hnto`gtcSStC=mG-r5g zVM68FP0n=(DXtF#n{6qw@Yom{Bt+&}D)jROBj2=*_VR@D0~H~AbqSUAe1V!eZul7X zwzbJNi%J7SYPQ&zbl%!?K^yq~BL9)%AI#F678s>xn=A4+UXGBrp%args^9uh^+T

_bf=mVZqv+I!MnNrlD-X16{2Zrh2~GUHWY8HJWYY#$z;v2II87SV zH{npTxrZEB?j&XIswRl{b@3Y8KHo>u9uvEzEDq2ln>eTtm4~EX9LdV83`%Z``r6Zr z!1{Jq{Oz;@gRU+EJX=yKATP9^Im?iSeg3(6*e0WPRGyx{LLI+qmE`p{Wkx})H3bf* z$bg%kF@CM3Elv5=Hx}_SuGM?DqWu?He|Yn22!%Tn{grBhHy3HY{4<)>W73Z_NfaoT z@VbW&_+g4n-IaeGb`Hqux?t@Oa}<7M;F2GE~a7jsrE~2 z+u1*lS9_mwyF667!xhd?t!Mc&ez9CDi!nT^aC+y7UWEjiE$s;`)ooAh3kuJ7mnCof61C0L`|akiXX zv+p$uoq_l<|w5=59FsvZUlb;1sL9R6|B&X-eH6sWKQ6Tnj8ABQOxjHq%7(ntOIChIZjxA#e%uf3>fKx#K z-lJL18-5g=x$@s8D`7gMmWG@~{9K-=z3TV6(-#AdwBnoH*LosKj9gKh*5h_sObf3= z4-nm_B}T*~R3Vc_-=o_V_l}S~A>CJH4mOvkti`*&(U&n!(j1c{LRUVW^7{?#ZYY7< zefk!f9_a!Y?3aV=>V}4zh=5%B9~y8m}WRH;Pp~?+wUmZl77yilzCH%VbHm(-r_EkMen*7jE}s{0ALP{EwpL2(u9JBC1QyVML7iLf-P(1o+qaUD&ZTYuHGPYVHP4gdDGM4=ca78!eFaqw4oO_29F<#I%Y~`fcI$Kgu4bvYnfJ5? z4-Drc$_%Q~W_C1;5?$url-~~$3fj+U;Z6_`sG1@S>bSM(&Q9xhwZf@XJNaYV8-c=Z|%WkgEB#Ee&1O9o}X6 zB3?g3fBt0Cm7vo{s(OEptRXVEFm18_P+=!1wy-rPJ+b8Q>0#w&a<6)C$#AsIKvdl& zA6zijXa*$VCPF=xW>%u%bwd~d9WwK8Ybu5j?2`6GM8#^kH>fUnE8LlUz27))xGN!D zUcRybxx+r1jOhrKr$Ow@i+(n3q5l%!ot_|gcIwl8mQ*uQs!UO<9Ih8u-Tu=5_veo1 z)U+X0E646*VE4<#o^q|s#U9n}7FCDws5Taq{$(p^>#2m@ zR~^20$1OAA;8EY@_Fb#tGO@keSdMUTV`V{U`Hj`hZ*8`R2#wt-RQgf@>b3k^`i!7n ztIMGq))5r(6u#KD%vHL(0!qXd%LiKjJl^ye^Wb$mo4^QGp?dGB8~s!#${QWO8&2fK z-@Q6lc6nz2rvOnSraRxeNrixo?_f;28$;l!tjzMQYA{U>oE~&J`N@#+*fX?6&1<5W z*j-YwiN=sBuHmjrC1PMKjKnhH%Mq)!w0sdElG7 z&xavqm3EUbSEXd@?Go)Od|&Q*?f6DZ|CDWxAW(vd>=++RXVcS4o#=BGak%58!;hkn z=3JVH(0#VGRuUhsyuOmm<=;Wv+}6k8&MA1SHfgb4-plOr zCI59_@`={1Ei6yqlb(K*H2*d%1jmB4v;ZbzwHiR`yIH=L}LZE!@i7F_O3ehQa`eF}$gU6N< zN#{&5`12@tvX>#eA1YMhpo$%FRQg8+9zvwa6Nr>STUHZ=yN4)Qy$oLih++rcW^%9##3XFmH zouke!xGujT;uT&}3{|AH%I$yv>$JkZyx4nI5XXqw)jmu|WBr*r+{0Fk#N@s>_wp{i zHb9Mr{nSg+eo~I@)awhpN8yPeI8uw^bu2d)up6)4M=pJ){}-lOp7QMnScXTzzA0=k zT$5egQJAL3gMa`&u(mW91A+to;jUquU;Tf{RMmoBRzRd@CkP{+MZu)s*J_d~2!O^c zE9s%Q#LeVX8|}B;g^A)LnVL` zO@4jEDMtKS9a-PR`Cn+MbiE9i&pRtGW+HC~lor^?Lzakv*}O8hF7jgqw&)*0Y35D} z2qeRbbI}$ROfQ6oer$dB->&b?@$ejBx8a_OT+7gv} z`g0t*4&%uD(+*y#c&>2oC+yg3E~rs{5CTWRzMSNGG0HC5l}(f2O{su~gI7vmDGEEz zDf2awAB*1Xs5=Z>p;H|D6X*8lD}l*2>xOU==%5r$S;E$n1|Yb@JG@R)_9k4 z;R|E(8=qLEC0iB5Wfv9U9}B6YVC3<>L(|u;5g91TNb0=zxsM0I0`|@G#5Vn(CPZ`W z9#+@=KAMx&vR7Nwci(_s951T(q{<@o*6G1>Z6r~!Z1rn|X8&Rq9=E|mRn%8&Lh6&) z*^D)||NHBZ7x{rlcJ}hdN~KH{8D{y|nheZ~K{ztP0=&A>MXwxuXSB0Qvs-_YtI|mV z&}i)HH4&l2$QQj6|5ROnK!WzC4%y6VAiT<$cSxFi%vqvR_SbfV?~E)fLcl^segfg3 zse!B-cvUp?79o=LXqGjknB>t{rOV%v(VF#&LOv+b#cv@vcn}$S04+-qUdCzZo`Z9< zK+J71<7P~H`Bao(xyd$`9w0EpK)RE<5@U2LT(%`vYSw9CoLn#VAigi)a2wORdv|5+ zOE{Yz=R@X2HpSJ)FC;rP&k((|G|Xlc8*v1HF#QK&1;lN-`b>;tmtxzh{_g}T&40+0ZpF(y-B){irr0-A`n!K61sh^pN{_3@zMMBA){xCAy`^*xWGMoXJ%!?&sy-Nftof=73$D7ix15a-W-L&F& z?SIT?g!?iF7R6_JuWUHDM7Y5fQQw1x$<4$*60(bhC6qj+h<*aN_D_gfR!yXdfak5b zCG1+?H22)mnC zIrR_MfCr&WRnAj@d&BFvp9|8XIeX~-bz{MddPSN-zaIkh5B2wx`{L7^i9${w5=e{3 zpgS~9R5#+&EZ5Y1$`oj&Yx5jD1)8o*h2=$t8IcTy&n~-dX*PJd0pep+b+pfdMUI~3 z{tcXld)?ISo6KJKLDz<}I&i~_1R^1O9A_lP0eo7;?=L$lLH~g|JLt|h7#L~h#E@3H zta9-FVBfFTb}A=3`Rx`{BS%OT{_&fQv-%(TLhUBA)|L=+8O*myK^LFAWMt88HHt_L zc9f#rIw=KUy%|++jS}EdY9X29Z3#_3C3dL&NNs_3jS{RM;!7_yUOrNqydMfJac>s6 z8JCa!fbosu<%<7gf{kuBPd+GJPhgk7)&>=&eVO`AI6D}c>@<~{ z{kY-mR{wX-D1B3oAHRsF=**^jAqoQR8ph* z$;tJTPh+!WdE$0#mzP})J8rm`0Sz3iNc;UMCQh4 zi=kIaKyVE7fr+gD&y}Dzre*r0_>c}_K<`LCW+4Toz@(9VDNOZ>+vJ# zF7)6XJb?eYoH}rAHf$u)Fa86;x2*5}yvB}-WBGcdNN)%3l;TRyKPjFEkfn+w3G+Um z^SuKVMBkm45Aj(Tf);Y7YCRl&9?dt8mY+NT&_j`1Pn8EjtUjdN_&hhX)b=HPqzM7`fluF8gZaBM!G zo4xum(Z4!AH0yO0R^rfD;Cy(q$?ZTu_z-pH?E85fvLs5_F-r?c8<9qk9IOf^M&QTF zm%odFND^0F`0n9^LQKAZI)TeD>%3;Gy)R-Q7fUje2ll=nX8uL4F3_b@nKEmbfHLIY~eB_4=~rJrfOd+NK4>*qY!PT3t1;T(bmy2nGNk8O{mHp+CWWuDn7A$QTfs~2DKe}Yf6O@VTX zE|Tk|v7~E>%|6RswtCCTiu3l5Ocwrrejg*ews)J}PKz|PGo}aMj*0IC;xkT_M3c*W z>7jK)oKW5RHA{eX_Chy^^K8bb!pXoc-NZj?{CRocrNhQ;0Q%BcmVOOb&`WiHzF3F> zzH9rWYN^p)iy}E9s9MQWPAw1f*f?%m%%Tig` zAFebV+Yy9?jj?n!EPwK13NM4vw6F5!%JDtXhH?rMXKoZ4%uf7!HEyuxILB`ReO#A{RBy+<wP1zYa z&q|A zp!J=A`cpGDGiT=Y#+|wD47kUm7jt|HPFLrO-5M*gJ5%02DaE(<2_phVwA=g6dJ89f z&Wb`dBUTVc;Zt>%`AJaQ9gzR{A-RM1INQlJp$wo&9)465Z+XjPh--jXbG ztNud6^<*~hvq9_t4Iu9i+fDt-gL(7A(7C?&TjemiKsT3=~^qTvvni?K9Osqayl>gpaE@(++mB#s(nJW zI53*P4d{>E^uZbDUw-0f5s_(1yeTxS?aVe!{3mzu1d1I)kNWEP3B4eoMY8}Peq9Uy zqxBJN0a6MC$^AY!Qs8wNC?q@y7LVTZbKLIek-6f5P16;$lfsG-tW>mI5R6x72Jki) z^Cmm1jtQrTnu-0IM{@zv)W|Xud|H<&JjIjh6rJ4AAnw8J~oApr;$n zm8;Gw=K@gpAE0~ikLRHev0_cQjXt#hj43WyBmP-_{O8a=LxbxJ)!~z}Gta_6MD$0& z08H^e!)jsp!ybDk3y|Z29z2veA9&5J)BH`v4U=Oiqxq)FI>i@HwD;4Hj^d#ud{Ci`S#Ml4kj)Rp+hW~$$$V6YrB@Yr7cZc8>+=IIWcXwuU=A3WN z%)M{-KF-^w>E5eWty)#}|5X*Pq#%igOpFWyfzYI-#6E#QZ@?fB%q${2@JY#UwG|ME z0wgUaqUxr9sQ31(>MZ_pC$*c7jQ_@`tX`d^Wxc@W&^7F(0GxnkemGag^0(T$5d=4D zTNU2P+`epZY&f6U65Mynr`6)!Pgb0+n-W}a__yKtV_e!i+c3OtvQ7V5VAV7=iA!z6 zL(m@yZ@V8b{E>|RM4j*M)o2VHHMYnxA|k?~OHe2r?!L5n-EsN+3bVslrfghBfwNmT zS!=gnX%%|je#51BqEtE0YC2)JzUUJ1HqIQ*ST5E@CfF%{eggZ(a-0tp4VfEX4 zhd|E{j4N#qr}vk=i(!NlM}Hn}{4Z9$5Ouk#Ogd{6XxqXdh>aw$=V>my2@%kM4sP&T z;ZE&{lvKf)XEOrjIJ?#NFxE-x2eA4e zh3mVmHAMb7g0Tz~GEFS%LqMSa}eTg)D3KnSNCLWX4u_7f=3 z8%)cIqF7^rvw2EG=R~sP|7@N|8%HTGmqDvv3d{THH~X+m2n7Z3vek%=Ar1SgowOL9bGhPR2U)m|MB;mGr%Op!8M+5wxuqvmW7Ob$b2?=*+%>Q(jRT+y7 zX|YHa&z%|fRkqhx2LLbJMfaCfd{cR_n`h4aW`&G+jzI%y8HNHG1vXnuIAbasPQeZb z4i2US^LA#ZRt;j>vy{Mk((2~ed`oU=OruD$N++P=Y3$8?Z~n>oCH=nciNST3{s;a*;pZ9$Ew z844U#S+{ICKCs3ErQx2_eF>z;y6afrcp|6bhBlS4+`Bh%{w)lkkV+E&ChKn>z0V)j zScNLOBpKUf%W>g!F#zLf&X5O~??W?y= zVkwg^MZ)~)R#^>#2kfjB?C@{9`^GayZ=UCu_%X7_l-}hu_v;xpJc)aXP_$5-*6m!H zLxM=veV>Bb^RnWz@a5OgneFW)Jp=~gUF2>%rI?0-n9tC7DTr|_k);^q*HBK z-*H^U-$W`%zzOsn#qHD{A^<0e=!yt;lg1SvtFU?FqWE*8c_sMEuOGUx4(8fentE~`vg;b#xdmq z8|g5^bUQ!9`(g8ZuwCeKm+(94Q%)F#;eTwI|39`Y(ecPzCMA_R!O!+52FunUSEjuW ziT)oxxh1K(>;NA+G)sLn+^DVku!JR4V3^=>p)I9p|FovSUjOCeKu!N03xOOyF5F?5 zA63Sbi>hS)tJ$Vg8s4X=10HKGy_LN{c9P#<23NTo8HWtNWZQ;ZeQ1EsD5@iZs?7lx zsp_+VvVwIvh6$mb53ltZhNZy~ug|}cy~u|9=mRCUq@h3>1foTkjjb#a30HXwd)vW!gG;>UEjnR1>uTycM9qB9e zuz&qjpxM52C`7feHS|kEPTYQ0tOIMza#oD(QakU%b`vN}j!OdtQ?L($~Jhdm2Tyg{P*#-@wqd#|rL9Wh&gxk|S zo`ihLwNz2%=E>-7%q1%=?_`9H1sNv6ha z3?GbxsS#gA`^2Snu!vQ;Re5_<;`K4G?qP62v{KM?<|1uo!+xOc{$eh1M{;z@>SL4a zdauVH^{=j^a0}7%THMz6kc4wHw8fp;1BzSQ6uE2CkO@(b66ut>y?_lfx{bf#RD^$< zbMMnNzWH0sXG?}fdflGFBu4J^JbAtt^{vZ>kx@y6-SF%O$XjbgC_{ z+qmxcT$5R=w#j(m2Z{Ns>YJmYo%QyL%?gwTiDu{IMpyTh;Sa^1r4q+84!pS<>Oy;2 z@D%VLKEpBaGWc9jcFGwZwN+nZ+F&GK2^7@b>Qq-ew|zxGP|!2r%5h#H_V_as?wpC9 zg*1f)6ZOTIH(jEZ3Fn4!EP+>RI;zO$D{=BAWq!Div%8=qlnj0Ox$ z7$GZVj#zZD0ExS=>^Tt!qT_D6^{hT{pOg|Dv{X`0)EkNDwIm%a$8$1M zO3vNlAeYy1l^{6Dju3boigR_D+C=g^w4H6<_c?R9ecZQT(s`7_0QLI%6C9QMAjj>_ zUq|Po+P4QvSyIv*rTVZ4*T-V_sO=w8W5pb7guJlA6Ck3w#MIL}+a~9_zQNAS72BHi z4*6#$<-GR2TxRA(^&)GTvaVGxf7^$ae#3Pjz&=YZ0l!UQ5 z%x%5+_C>!f3sDyBTmCNhFh+yjW8_BD)H@{9iZZ=y3Nj%NKQ$fn&3}4O(o9exfMl3(4JnPH7gdKGLxP1){_c+%MHEG@eF+*p=o;0xTrDv z@pK0rPrq06x@VsLY-g0wLcM{cc-FG?m|L-YRtiyCCP7_443jknxo@G~GFm(HoW(KS z=?e=ank>%ktX;J8FcW(=nO>z(lStfWUxP8)15a-k==WpPq)>JYc*DD%B6 ziVe>?OS@>P(dhvmzjVRBw*9fVMKtvK2wLHvi*H!2@yy zal937DThfyroaRl?0LW%?qy7FOM{-v`_vU3iuimK_cd zYN0P&78dA_umfXThRqwpw|+e!cvuUISX(N;2?6VHG=Bx0YyC1^9+h+Q4Ssvdnv#WZ zurg`N>?edZq#E_YhV`G!X=+;{@ACDr+Y(o6OcMCA5;`0#G9@GNNdbi`+wbhD&9|F3 zr=;d;A4xcT!_!&r=DyLje~dD-(5=CJ{^(3HwO!FU?xUAT5D+M4yjoti&!Pa0<%Mw48ClS+tMrjaq-AgiX|( zu0ZJI9XnXOxK^{_075AlQwnXDf=Wpc{;B(NMnZjayC*!QYxtAJU#7AW9kpzVjt^Rg1 z6S0?IavP62G>*207Fv@Ddihnq^;LPv*OQ8sf_hw%7eO~o=g9m$zZrD-_7#=bWo)_# zS!;sLO9>}(=X???hAobaSmlBfdfSLzZ}V!46bsJ(Bi#P1STR0cpi=CsWhT@Zn@ian z^*dqjToa+}NRTE1v4fUO!#MoR;i19-odvvsMME%}#KR=kFsG0>;*NP{LmwDn7Z42^ zoLKXrBIq9sOGZG?7Oo!%)Pzd#eY;8c#O3mG`Jz_jj-<*YmO-!5 zm_R~=$L@%Jrh$RKddNW+Uo`WgOlbuDXuQHvvZz7$=vfVc?X&%|J|Kj7Q35|M-*G>8 zQXiw10`kWO{U(xuuZ6$6)n?EOQ86f$cX!xD5;y<7b8VjpWN}|oq8cy^xGU^zjY806 zl!WkLckOFlTCs414eVa1+aX{aUVdKs?T99wP@rmmT$hFmoBc12WnCMEz_@7XTJPR? z&@Ho~d_))DL!Wqt*0Se&Vp~!!))FEUP0u6W5iw&=O@ zMu^v}v1g@Heq0IcGdgRrluFvA`CGV%>-y51N0(Z5V~}$Q9Yemb*)7s)`d3MpAcrB} zN+%v|WN#93rF@HwRCO|IKl+>M<#!!vD|@9k>GLwiqS2Ajg!Z2P+m=tmDQLktVs+_1 zL#eO(_wU}WJwCQajbT+@R$5pemM&||kOkN>R;=vQ;QPwnB%X8$t?#JKUGaql+jWbv z$0GlE7mHfTC6{aFGnt@F1PVt+l3^At|Dz|`uf_-RLMy^T^w zy0JV(6Lg}h&5nx#ZeAe?ng=705|_{!u`+}K0n9<+pBjsSe^AIuAfTfhpXrT#^OXd; z5$3^*&Q7t*9O@w|inY8mvglF(!w8pkXH#2Gb)VJM5$%gZ)v7enO$y_SXu6hWItw4zSFiupqA_I*qd`bC#u_#IJ4Ao~DG;q-^MKr3FO)CXQ zTRJ(PaKoy}KKnbFD}3Ou^dOM#DW-N(V^WB`URJui;n?>Gu{0Zf4!w_B*Bu6b(ERls z>&>V^=~wYYoSf${A{oY;lNE(H2pD|*gwnB7I}{gNpqOF&*H2lq${`P{)yPLwxozR) z#V-hdrfz69$8(X4_ERw;-_2eSoBLqS?6`j6RH2JSLG69ph50Cud4L{MIB`Du+=lH_ zTTxh^|2j?Q94(^b*7VS z2oZ{A4HB+G0tsSWeq>=!0Bb|&A(SZ%0qvfBGCx6NAj90nvJfREY`l>Jk*>}uzq^xR zX~bTLNU?Q4E9=|fGu&bRi7QO(4Y!L6%*A@gD~fd?@6Z^HY?XvRXlh3C!_8R*{s^Wq zf67`M&ga0+pzG8sRB@Rfl4CLQYCQ20x*39=0T~(c(<0jMObVDjLB!v^@pLZ^Y}vj- zEH@^QMe?<^eQ)bD9@+IGH-wB3dVD=%Jy9%T=G<@okFl(_e6MbS6M~&jZ9`PfRoGx2 z+k*DK@ZolpjmufL?rVnCQX$%pS<-cG0>{l>jdi=+kV`gfHvMjrm}|WUu*`Q_I+_Ca z)(8o<-Z5#Zkf?kF2&;?jqTerO$dsDVgXi!EmvikCqSRru@_+CDYz`wvl60 z02}c8wHRP}ZN@V|9Lyu3EFy!_1X$P`Bq2r+ zxS=6R7R=+SO}NFgv{?b)Yt>du=N}t%;l6(qkWqh z-i@2v>b!|Bv&9e&w@TgdClJ*iK0hiwg2=}!8R6^UGS*eXJAr4VNvZ*muBf>`MZhINm*) zIX^}2jGa9{A=IAQ#N;A;GwQs&JKaADHvN!L%EMCI0(uWZq5BYR4YklnB{eW&_QDNkEy9VCpDvF#**D;zH77ruk=Ca~0 zE|codZVer8P%!|~Diy4}w(bXtZhNBB)uR^{=Oxu&atYY3_N%>}t)a06hGeyebFdR8 zr{ejxp|O~Y8+*kyyzxQ03%Ylqf2lRR=_pR_1H*R?(5%>IH}U+cLo)A(N|YUI*|uy> zSGA#h75@y?O6@{?*+m3HrQ>-o@T6p*l;B|`qr>h3O>95gd}+H~>GiCFkf6eNutD$& zq59IKv(%4R%-NTK1s%~Ti9p@RJN)6uSTG_FG7Mnmxd_q9TgL16Z~N1pR6g*bhgh6p z;j^pDag@2QK{KT$b?Uz#bTooZ)JjzFuIOg^R(+qMzY7t{w*o?&5 z6{pDx$#?8@%feYn4z{XP3N_Xf4k}Y5ITGTD#h zJ5=3*I=eCcg{!tC86=4jY&k%*?fac2$jUNX1H!C@$_p+{a-P5}?v15yOM!G6wjm(2 zG8|?d!x+{l+gz?F!M9@eGTVuQ!F+ci3(E5Gm_HCc7i#)uA{8!Y1(Rwd6utG2#d6@q zW-EN4U`T15bDQH1UAvz?piOT^O{ujk6`=UK>1=Tro*=1c{4WNN$7i>Z5+yf3Ms)@E zh5C7SI=dm|8(BmOwKb*Mf-2!hOCGyNPtg(a$=C)%GUtwpPtDbQe}z0w5y}1u#EPHncs8PO@sSkZ*B;ucL-mD&4Z&X z^7u{j=6Uc?p=M?L@)zx(prFUM-|0b;v9T9A#FydNg8Gs-ZXY&Qn(HgtW26upNJ_qX zAyBY^-e52Pslcln_~YX73A-KD^9ekqd_eWqi9Nn(F+{ z@JlZB)4x;;gy+;*J7Q_62-Sg!S_$^e7JL16Bq%xq7@SWQj$+PCtBBaju|V;Ga)NNu z39-I(F`~|MmO{JM;*WF4J({vUR!D5w$`Qtm=5eFTzZ6Qc%l@zD*U-C1yeKxS%z64M zeW|dOmln-@U(Ezy*YC~Vx6)YusOXJ28gjh; zJJ0OFF!@UnCrC3XK34bcSqZ_*L$jr&^>pJ71+Tc*GvFd9$wQMvF-!t}H{J46YZ3C# zlr|e;?B^s*PT6S=54GK+EE>~`b$L1jv5O$o%&ov@z59}1&M$f;m@mz@bbUczIPI3D zg3XiFFR-!C_uiQvf#={?`J3fBb5NNxT9pz-H~wG<3Er3Xu73Jrt)IiqQfUx$p~Ivn z|Gn6)Yfi{?>zx}SQq_?9cj+TPzgSFuzx^(i>WAAOXeAC;=Wi3gKUx1Ep;a%Y%n@(! zel9@irY)W)dUZ+yj~evq^3-NKjA;b!$XkDgk!nZXfU#Vbd;cyzezP>v#D8RQ{2S+4!e-V%Bxu^t~B7@Hpb{BEMonLE$Z z`P)9>3A_G)$g6Hy|$xg^4Q@!H?nc*KJP_5cg+=%>w-{I$2UgiH;qL?zX z41E+oH%bN@^y&UG)A8)uKmFe%jm>trBJ#3Hy?w3o5Ne%{W^8A z;K1;W&CfAvpZ*S{~Y8P3PFhc%N1yXLbwrSU(>0Pe8T>w)do&DW~DN5%ruS*!6(d3SbyWo`P% z_=YLHz4Us2z=USnd5Qhzct!LD>#5T8_!FLb|I;SfA}K%jk*d>p?sO4Gs@#h&$()mL zFf3a^*sQ@vUui5tkLO3%J1XtVm!E#My4{t{lPi#|!yosI0Pk{~K<8OAW@Uzqgv8H3 zB(oag7aMEet;pWrW-=BW&x)g zA7qhrK7ReY?Aa56gTiXevU>IsSXb*_xkJF}6L7ow80__U%F0zf59fN5v`^9B4OtB; zkon0ch10n+mQlhz|KqC`jqEGJl?HRFa4@Mv1)n z-aBiZAsqY>WO+d_!>0~!u@lJ^4z2Rc#MKPGN@AxQnywr{t_k%LJw)sVCbA6Yqm~V>@p5OPPscfGbm;N8@-}qeR zNKbP0lkflz%p}A;FdE%{wJ~OAEHg)clS?Y`n!p)8nbi^3ZsnGsZl7BcV6;0^c!yL= zv-whn#+hN6=?N!x&PeyczFMJuY3v_e8e5Btsj10Ivp0C!Nlc=ACi?vg|Ewok zZ884MQ&r7XSt9Inl)o9%Csk_xN{UzBCqmidAbt|#&GPx4@H?%>l9Yoc?{QZ$3jUZ$ zv8>d)NqxxH$~u!&CZD`;0HobFE*J#~X@Kv%sfGg3l@`PL(iaOzPaeo8f&+)e1E%Eu^C$FzASUOD})`b?Y6P9 z%-{c$_XCi^b%iV!RN9Ymm24lbxHj(7GK;n&0)9OE$lz^DSCwd=S{NEo`{PwLfwrOx z#$q~6O6!FF2#U%)vc4pmuPRh-r*x#GZflZrA=d_6Q6?8aATkEy0yG>vEUpR^RZy|eZvdK#!J_~}AgeDn|>a+Nh3+1>qZP4m89TJG167Jue{Ilk9+=9!0P|)Co zI6a!12+#UU*oW57N`04tCMo{9YBiD~T0US<_CCJULcMy2{O$ZobyOvJFi)*5avNyL zA+x@&Wt8skqmf*9af1J3X6+Xi2OSN@!Zwc1+tQY#1dJhWH?+NOFK@2K1gE~#AXsma zix5vLg@OA0ux<#lcumPF>k{3-*awIEid-HSw@lyW|fcrTjP!sJ4d~l71^ephEEz{W`(n$c_LEV{O4}rGWYdf zCj#XnC9`S&7R%=R&Xh1|y~B=CxUYZKeQjAjw(E6Y|GDe#*fy#UB9oHJfe49EVQBZ3 zj(b4ce&C#Q=9cN!e){J)-aJv&P;lNaMjv5#EF?4;R0J`su~ z3gK_dA)EHG%|Sh5q3?2erIg->6AUD4mz4*LpRK+uw}lT<`}7^mRIe^1}#Ou7lQk*zy^0(Z5v3z&Q6Y+TU0Ru0>6lFRMJwWD% zGb~(CP!gdCebrz?>%nz-?_z_!@<)TW&V=vyd=TkWD?nuf6ee32cmo8bNLtiIUTx>M zU}fmA7Ux4rVnc1i7V&^%fS?gO7T|jW4sgyd2iQyJYqZ_5cxtQ14pmgDB!Ve!t){Cu zHcH&7l5n~nq;LaDVm|XBwSpr*Gj^?Ih(@))2NQ7_(VpWD=e7`h^!BPWUYEJz6-ur9 zf*=2wrkR+=H7%0rH(jT>?RpqhMXO(*bnk4jU1iGd4fxl`TX=u-=8e8Bcg&rKuRj=Q zW)Wf6(E*EJA2mhCNg4~h9a$~fFVR+5_T9hzFdcNfw7R2||Anab z+$uaM9J_c0$Hqk?%fe?knT_C0AF9}W)TlF}lNt8Lsl6QwEYNHMkUN48#`Bh3=Ux}v zBiuiK)lUngAZJs9{h66Iy7NS&66;`c#J-(Gy~j$1gGqf2N$*+qKVyfOj-&|?Z-)3< zMUGh@Nih$ne_XlcZ6!WxzEZtSVOc4#&v7TN({~=v3+@)0 zP1(o>MEoYG3xDk+z4>p7B>WV~gw*mBTfJM(X5-pBstZX_=ZhDAp(C4r$nlv;Av|Zi z3wb(ld>nU7M6|gldTIT9W95bVSO{&u-Tti<906AYlO^3zlY`*E*#rUM;T=p-jinTFhM;$8?dLXx6654= zKqgl#c2PKyLuDth*fLzzm&V7QZub`t+xYW-v+Hq=)J%@W-t?!qSpJ6NEVucM-Bo80 zd<>D_XU^2XCo-$QCFLmtf-NtYiB{@eac?BYv#Sd3OMgppPHV`JSw{`^`MbDEEd2{PA-8E7a@@LkgZ+~F zP2Jv-_Eph1)Hls?2l;>Pt!{~mO8#16wB)WDW^U5otg?hhBU0X z;iTAF3R*lER>;dC@pV(rIiv ziPeXX>((B1axOYgTT-4h++rd(SA9>rn8B(6W?6NT4+(9kAcNO^I})<>y!>FXn3X=r z`#~!kH{^!2{McmjF_@hIfQ9SLHMdgMsw49&8}>iyLJcEn(0hYLJu%eQeIX^+WROWn z=N?-=`+NKa&ylt527F(YFZ9z@Bu1=S?4?+k*w`~+LmogYA|^iIijd&V%2b)(J+dIB zp{)Q!X~AHcRi3*RueI1qToSu`OiH#(w>Dj9Akvn%n(rI%ZBP1)C9$A+rYBi%*sNkKlRgjd|{FC=`Bi&sn<0#-?6mBV;(o} z_gWjS>^BwjX0;;7N}Efk;Ds`g1$mY#$`_Ncwgm@SoXcclN@^<1pwa_+4#JzPjsbd4 zgQ#Jl&^D|ipx{#6&<~;8-dtXEEgrW2Ua0(6^04M~f118042x>+pdEsoI(Fu_e|#JR zTtA=O9wXQ0AQP?7t34cF69D`tRe8bNt+qsCJxLfYh8z_x{$kR0wR*cv?`%K&2FOFB z(Q>4U?iVZS@sP41( z)+6Pzr)*?Ox9(FgS03Jr3G z==li))IJ)xN2T+k1GJ;6w}mDyxFysinUeH>!vdxToB^?zLpO!G zdzyfi@ZkGu=>gK&d;{F^q6r;4@oTbnr{3tb9&xT8t7}1>K63J2ODc&LjBLgfwOrt8 zG%{J|c6XjfNha!n)*C>C60p?u{^w8wvuG||bd|#sY)|+*Nq0p${L-*E6$wiDdyc|S zwZ&)bLwR*aiS?I3Nir@c4g|jx)8A8w#IFi{OXSd{h4j?df1f`L1!Qc)^s#3Vxi}%(dDxz`pl3X z<9f2Xz8U(>u(zIpx0>S9melT2P9z=Lh*u0&f&_)yZ`Iw&Y81Ae{wQrU>mmWnZMx;( zjwnPvBbY%J03gvF!O6)U6|y_>O=V}7NXsmNC}@D~9A;isLY7ER3b-uHz76J*R{@W( z96YeumhIv3M|6Yge9K`>w&z)wyety)Y%mn(#tPN?w3|%cPMS&GsKL06lW-d1CZ&}| z|3{@$+r8v%yU!J$%nnmvh0%Z#nM(k(ZZ*q-vo*m6F%$|7lF}1~)oMsXkWe7<|1}U# z*ENy#MRZt)UE|1~b7;oU^hJ5@iz$1K__vTZp6FSY(VvUYiEofZ>wgSu1!&=z8+G2l z4a1|yzjr0|Ggr(s>iM-^s9maEnGyTlQYA-bosN*(S~tvdgiRjmn%F7;e%#y!YTifx zoyXzX#s+wt^pUOdO37Cm&4h^_8Q8QpmV*^`4rx^1C}HG=S)`HDjYx5z+e(-Fv`FOU zv9Ig8U}=LWhH^beoMlayoEDq6qm>6_F7fFx8Kqx^g}eGGLtag2V|Sqfg}BznFj3RX zTA$Kf+GMJSdAXF-j}a^lg)*>rjvR1LU^_PUe}HxynYYB@w zOCy3QpawJ8@;CMwPJ4Fy&eBbD`#YX2a@+L*36T)J+7SB2&^EKAf6g7N`JgT;3A>Wo z1CfxI!1c+(w>0-JIqHEa{RSLD&&^Nd`7x;xJwh~{>F*jG?63qLVAl7r7p1$&uQZ=uNjLu zNJ2Qr+;zwJv;4h`nt;(EIa{&zEEH;EE1x{3|4OY8RI^pQx_{)?GtsWg`ZbVH+y;+D zC7}xG@eLP(k0Hz2*m?8De|I7md~l+r#_dG5QpalDD~HGba@r~C#!-fHZOG$(_=|7p zA_M3vD3+ZvlPYOJTA<+NaoR_XFOVr;k+Z*C4Li2=q@C=D*+KnjJbU>levz%VJd^cv zd$u%Li9?6=^t64w!^1|mRho2nkJ0Up5_CoPS7l1$qVThq%4=qfw^}jKIp&FW6nxSq zn{}yKY1f9_ZPYFL+@_GbAadQmD`JA%WZ1>J>R}xS)<%Rg{u2@YnKNbm^qFc<<$QnI zTFtr0DxI#l=h_p)#eH4F z4irjqRfleH5Q2v^p~Tx>xBi=FHE$@BMeS@33hkQJpQx#YLN9H+C-h!NX3~BHjmvff zw(h|QG$IRYOMWTKQA!;xQ=`RRJ+{-X(Q3tF(kumSD;j`SjoS8ONr9rH^X&;x#FAg+ z?44|qRYQFm{>T2k@0Uw5U!&7SOfkb>fT+A3JR z)gSd|I;D`b+IaCxsctQ@XZ=yg3zKgwLo5&DLZwuqn4r&X5GA#4Gmy~BpnI6ZN9|Y0 zl%{A%SWOqh@iejI!e`>L}A@ z3tz`YD?PpmwWN4}zx<_@%48KJTk_3d|>f_os?6n_UiZbNd!FOzHhxG2lTT7)K0fKTR;rr7+uVP9AH3R@o}(31eUXQ zR!O{^!ydl7JgH;&?vdc3Wa-^SmD{HAzpMEs_kw*zqvK%KcAySN)xNN9ZYvp!nd9VQ zk{<7XqWf^x9SWW-WqCX#XqBOZh*kU`XnhMaE8bx#9kz`$(Sk>e1m-pDPjGkQya+m; zqERS8pKNLOxwzMC_(Iyke~q*Oe2HQEW^zc_-cJHbm^$``yZO`VZ^w5Pu&}WooZdTU zk&NNOKU9cQX$+qky5S>*7d1#G1cMEH z?N)QorIOwxFqnb%5JI@hNAFTv{-w=N5j)c+k;h6M5b zSJ%OEP2NYgpA?1|KzNvYqn51liebY2rs6TD(qhkQywzZ9x3dwM2s+cGEY#8jJY9s# zADdLk-;(XhJ3)c=1KrT@MO1m?-l8BOYO#XtbTvD~W>tgMuXxiD8XDJ&ZVpt0u+up% zD2cM!ap*@5V-fn(g2nV>sDkv64{1BH5Yy$Ax<>b-_u4bId2|$aa+gT)aOKotDm0_% z1;Tcfvv5v^A-Cuv6O-af1vYwh>L=N)XXm{rQA7gj&Li6kKn1wxw5?mYMb{CRNtsY^ z@kZ4nHfX8c)4-ii%0Wh*Hm`hB;BRshn?X(B-e-L5js6OkTdl=72;?yf62DIh+z5|V zn4ETsH4j7{MkJ#`Je*pfyjh5TS^70kt9?;4Y`(#|W-QCX8DMWB!*@Cl#&9=Xm%ldQK&zf0r^!c2gquajuf~hpXNl zx7Pnzz@ub1>{`y(w-#^XN#bV%vV3u$B=)HS6$3oJKO)ImjMjVG)O5<;6Q$yWOHN^q zE8!P3S%y^sbi>i$&uN(hFMrQu0S|HT)L9uS0fip=7Z2}Q0nx{iGcw}i>lhl~4Du)9 z8_gL~%Ug)Di5Rp7BNSG(1HNa3a@(&^0Cg${C#M>1+;~c^2a_Gw5a;bAzqo z2|&iizEOHcZviO{#V0yfUZv#jVrzdzpPT^t>>_p~Eu(>mN&b0;R|^jEdgJz`#16n2 zIqy^=a{~PS^D(qF2ly)4#c5+sZ0xB8XB_W;$J~bYulMeq5$PB+M6B;m1JoG|R`;X+ zxsMN6=5NkcS|-Fs24F4Snc5f)IjOKsTTC(t0NKe(A#8lauYj@Muap^>e5;oLc2S0v zcozkT88>2x1pJ6WM7n%}A9%QIdn4v6(sA|LdEmk2OdJg$r05T6+L&Olf-M==sPyYU zAR(BnuPq6mU-wD$oh^-uZAS(n0-&Z$S&;v7=uQ#%?dY2Y)_my(u z!P&I|OYeaztMEz>6mUi(zW%Wq;1?N-Nw!@ zcR4Le{sI_Yeq1!F+oFOoT$ZJG?g`nRsZm?_E ze#fBOYcCkT0no;~Z97{Eu&#O0dPgRx!x+>68rPX57Z&Y4nSrH+TZ8p00{I{)4Xr7! zkNLwhLlr>Jpl6QK5$=~qcNRZt`1tPe3UJ72#REv4NPxTu?ZBPr(#kltSqf5k$f?{Cj@S+8_uno zBt?}@2fqq7_xJ5XwiLuY{$T5EDn`G^&+Wgw(n4nwaN}sd zj59&R%;m}pNd5-*1i?*uDLu<~uJu_<%hhI&;Ow9B%63<|HI}3#=nhm@ZG=^*&FXNK z=$d_io!J;WVB}rW`rVdWUgMI zN)u~U)`J0 zPH=b2;7+jM5-d2uU4y&3dvN#Lyz)K&ck91ZQ>hBmXL|QO()+Bv_BtuJJOn(klMlHc z2mWZIl}V)E;_|Xy(x3T6wY*~znGmx@cLaw}T!HNW!uegl;Q0(ud`Sk)yzC0q?(r~jJ*Nt;GrjR6F1@Vry+TgNXFBck+ioyqUSj+K#6S{!e%xp>E)+W zyO9nU-!Cw+1D2;wr#B1DdT}!3q|HfHUw%qlyf@c{9}#8}(2x)k$JtBIuIp0fcSP%a zV1dqy#TZ5c1zbwnZGDNsjbt1Lp43pLJeY0oqX7u;M_Z=n_>eSEci7> zD$@L0i^k*;^aF+@V3`o!oni+PQBd_IWphWh04Wk<#c@-$0Zv8RG&sYJWi3a(_!dq^6KYbq(RP147@c1<(5klhwgdUr6p*l4{9I57J z;sEzbZ4zuBta@Fm3E&}62;(d5%whr4DblOwsXI2xtd}=gX8yKIxB=blFVcqWynlT@ zAdH`jJTtq2xqie1I=nl1-<9tcV_J19D_lRBgft$XkgbeJHHmbSPlQF({v%Z|8oFyl zeIW57<)G`QBW2YE-bTkMD9FU#I*9VDU9U3&tRXB^eV~qqYb=h*OOIGic4h!iU{d^5 zoMV=aa@!D^$HW94dzZA|&<)qwM5s9*j#tJWkqB+F8R;{|s3O|=XO-Icr40o8s5ZLV zM4^8NoN2Ei+lc<#Si#q=V~_w2@P06@>9*dHW&{VrX&hC^mG^#vdGnYCXGgT;o;++- z7qX6P|C%R^ey{*&VOMJabNzlAq=sB(sfSX)VI#8iYPh}@!od4V)V7k{9vrQgg4 zj`tHt9#Lrnj~wxX`Naf&*44g#0z({>lJ}lBhd~ZA0*<2)hx(5&l{%Ku=p6(D5gMhZ zfDgSBaR<>j@b5xDT$pks!;i)_4qdH{or_9W8VHNTAtR|`dcJ92j0x^+Cfe~cXOdU* z@J(J69GXK8WZN^W*CYSFb9-i_q{D&i_*H1p5iB0k^&B_nY5<@pJ!+<|h(KIR@U5xj zHLjHnczte5&DB#Zoyio;QgOby!e}`6orp1|oR4TRia}is*E5-UZW3>BkbV-z)Ue-n zZ0nd$SBM+C-J1T;r!-|QN&$UK$lOC<91b4ifrSx7ARcd|4Cgvvpa~UmQGs~siH;`3Id>V8Y+mJ6gbWYB zYp{&LJ9#u#;)?9c-X-rvmxthvgydpHe^rm-@Oxuzz0a80JMj>pO|`C`9WcCai-xvwNr?s}>b#L?gqf z6>y6zQqR`A;9%dqdo2&O^m*3%v-`TK(;)>0TBE2yFbF(*?c%(h9tvr8e|lFlI0f`& z(HiqO94Z;u@4Cq^2}-@*fE1wfhh3OSdkXnfjYac6g}gG7=O4E_Qmp0^^XB&2P?@PL z1GoK>kH3r;stB`KO{0t(RnT|7z##`*xo0Y=oIr!(PCXz<-fkvq%nHuvoRSAkoIw@H_28owhEgC6V}fHj|(#N)_PJM^y! zJ^5ckH1)kMy(2Q*(*%)P>_P>6C3UAS_WGkxET!X!ci}r~|7HUx1G%Yo-z5GV5i^~) zyMzE%Z-##?80|n5_P9fnj6d%)`mPN%)1%(yX!h+#%_?}ky+6It#0qVSFxqVngfP8G z0{NeQFj{PZFsM}pp0HJO0V>bmg)011BwO&$kl1)1pngrHOZDT_;2SesfbYTp+e<%8pAn*j;C%R7|XKkV(-13>ZV5Gg+RcyPG6W~9X%A`cbZA)dD@8@8RPWmeQ zh9g4&XWk4i{yRgXYCL7O!H7xgeE8>ce4hpyLaUTtBpiET&%X=8tbAerDF_1%9jaLi z1nK#9JoCcY?d}jxS*oMIl3_OHr5Fo)Nm%8i%CW*O?-?{A2^y-%UHzBpeQ)^wAmWA( z?lKe~>hbtS-JI}e1)4d&X3Re1j|QvRGJvFhNS89Z9`LwbUxKA?aB#Sd2>?((fDXHy zMCXrFp?WT~>SxWsGd>^jcu;Igo30}=!HO%6u;)i5NVCoNM)Tzc%-1yOoV`)5OYVZ@ zD3FMU_vXIpiTuirsgNVa2vmY$tY>oB&?@FjgaTZYjkOhFAYq8C>0)*E!*v`B3m|WP zz%W626?v+A#X@K&Ep&$4rXISAARna+Mr=yPv29R2Nykbb8S=2JMx`pca3%VN59_8D zO+FKRO*vt47H6g))ta#p>^0Tx2rAWXa*zqEj)5cxeK!Z7`rz5=VtL{=(}yc&fT1iW zC)JhsF@{&o<>z3`NHTU#;MggNs9~kiB+`_HHe5yvSC-2@SG|}26JNG5P;CJZfZiR+ z`$qCP+Vd0`<_Z;qOU?mz>;~q$mTJIBSMc=rsp>_KVP*wNfIhTg7WVQ zGHFz04@un?k4W@jxhx>>Lt?+wXj8mUOmI15t^2TlSa1079-wpKZwB4dM(h563dfEP zEuDYm==R*-K9sk`(hF-E;pEho*V)dM?dVilRFb_*owW*5yO2HDRj)KEI`L!U(Cdar zWz1R>pfK9V{H{OWYy#v@S(r@wA*fG$HS9S)OJ z5zYS9jTDb1$DO?+UnQ=0I*ub_o@&z6x&B#m1O#nbJSJ?fJ!AF?h|TF=%2(X2A_u*L zlvMZp@&9Xf-jqGbp32Cy=$a)#E;RXe1DDpR5|uO+r%GZ?UAW*%G$=pB{o^pkyw$0m zFf%v~{W-%ZIeVY%!H#k9H`SZ#xitwt!s+??*o!E3Cy_dJL9^Bv5J+&M`AL_r^?vK9 zxYuYRA-SvUZ{|lc5NXG@7v#S@>lg?l!Jt?5!PI-}rfP)quaqPYmxN_Vmigao!?-Wa z%aKejM_$wFfu*lB>y~xXKK03iVddMot-$XwY{HsALhFslZ%ie)dOp6DgBV;+Nn>dZ zj`?5iB@(It_oT^oH|zLYh55DNropP0>F~wOPZ^_aD1!j^;6E80?w25OmS|$GvcAs3 zBJu?G9w0~Q;k;M6lN&7LzB!Q(-Qvss+>+hw2Koq)Vie#WX=~_;g`a>L%r%7-nExbE zE3KbuNkCxok$j*=D*-C^p1k7*!R~ZaIBX0cD`GL|H7h?Tldti42jRCsV#&o+8#MlZ zOVFlTkN&R`G`e#gfDGHTT@Ccva%&>MNfaa@cx9-NGx-7Gy#}D7V#=19XJA$-cz`KEs@MyA_$%53&&*$PQqq~MtE;c9=fB(u zs*7#4oBZ1a3S)kXs^GnKe;6hBKv_BI*~v(;koo_viBr*y+ff+{V=PT+R7KZmQ}yLN%$V*M=JIbuv29Sz z%s+VZ{TV@Tgh!yLWek_GpZ+K=~*3oZ`{FHQ=wU;64St~gxkC&fhJ zcjX^Wj%-LcK_mq9=rbmgLWOg`Jzts|9NiC>ohTFw>>LlpY~%4p#D%Jb6D^!SU8JD^ za09S6vykmea$%By*<58WoiAB2rn>vF2(RAez}r}R3_O}w>X5K$MDiEA|IJU|%vO{- zSZ;8qT3|CT*fH4qxEuMR<0T?g@`I||Hgg>spg)meo;w393b6-K!g#Tq)jpqJn(>L~ zokDN_lf!d5TE+aRIi-d^;aO#RrwL@{2+ZWtpK^L%2}Od-CH7$E3!uk<_5T%m*{)By4W&Hf(r}W+lAQ{uG_*1AgD)Nn+5|A6l!VjW*vo$DOOR?^Tn4zo`@b zBrPExXt^DE$b@*hmI*hFmvSR?0g}g^UwYD zSj~ogLa~2MG=m=~g@q*KqP~!_m3pXrQy6u|x0ygN73rx9xZP9y-)?UQKvcl(e^}l@ z8{(~We|wgG^Kn=l-th}giisDqEt}{2Zw0x<^Cwa;bH<`VdlH=Q*0^Er8f@!>DZ+Pf z&-q!<&{hSMlc_p8JW@+PRyBM=7-wwuvRasQJ<)Z3$m?FB8QDWXD3j}(q#CU-9ktvR zSsPoCy+G;v#h))6K0a%>&uRR-M|AQ`Q+>EUwvD!j{}EEm@sO|;pu{6H&hHQ4xh?`XetN2AWR z^gYcKPaGmm8kY^8SMXW-XhDbj-O~ghdsD$MEDQ?WPdxtAAPXQEuuybB9tn+1UHY=s zSR6Epv_|&E#dR~)m9mI=D-k#P;M$qK48Iv-ZwSgZM4aB>0x`r7=kb!}CpJ0z41f14m{q&aupF!RPJblD zn_lQjuL)j5d22WJ)^@eI=eOCY@{iS9gbn<`C(Dh~&v&WpwgFE=c(K;3(Y5(Cw;vEH zhcqvJntgAGDmS`?B5=M0EOnRd^33^Kl&jZvzLe+OSZ$`r*ttd*@nHRR?J`Z@p~(AD z*KL}bh(S-H0MxN_p#7_ou|c!mhnR3fu7U z^q~)hb%G9F<-PKxU6WHT(~-RRp9;V^G3t zVf4O_yUGP*eWVQhU2`h@CL&YA8h$({ctdJk{ZfBS%YbW+sR>z$05Mzh6U>gGVmK3XOU(eqlv3XHYt zKnAKmz5;t-1ikC~xauJhE|_ZFj5WwBgR`#4L$gT zojWo5Ra=>RR+Vn;%5&;+DTr!xMSnSdA_P7Bu}ejaB<@KQ|I5asRb{}-^JaA2xNqQM zbfzm85cPeDkhRYSpk&5x@CHV}8+#5%{>STl=){JGtBnxcw^C@Qv||GPSFYD4n9!(W z_dLN$u*`~lwlQu%)`j8!^1K{u#-Q8v*`$D^z5YD{?t*6_tyv2B%`Oo!<=>2lhqMF3 zVbh?*sIe8Z{m1MES#fc5`QInJdIM*#;X2pNQ3OzsvY_?`J6T6OX3CWx3@Y(j}X-Abw){Bk-evLTOp6qZq zl~5%qG4qq(PS0c7R3H#b;rtCzBxI@C=R+QCJVXluU+;EJCQHN}x>XccZ0a`?qxT?r znD+Yvg1u~0h%zv?P()uBYVs@-++ecP>uGXrzAtd7N;g5No_I+lqy=)1k>fC82KQC_ z>J8=zl?{uGZQ0Z+mGPFc^)7ds#v>WH-?3#CKca~NJ7jD8+TvE^mf-8oat&VNE1k&7}|KXcd0>nu@4 zq=f(kW3Pj&N(bJ!0_k_7x*6hW@t70-AD{8R{4YwTRW@u*Z=2jLFPT_q0Px!VMMR-# zOK2vnARh8t1H1*uTKh8s`S-q;Iqna8)Y0^aZB1VSxC1xnuM+W&j}-y!_xB=_**(iO z^;-73aFW^P;n=f6<8S=uj(v|S@P)+1+2)tM9*($oFG2I^wmU1kNXzc7J0l#J?A+l- z&`GkNM8&J()LooQWs=(Gxe#1}QkBHyMDneEOuu#DUA$Bl5o%3H4=gm8zVPjms`;Wo;p=4I_C}O^-oV;*DfTlZF??Ha= zv{y_o760sNJs;>Xe2^{GHd3fnmf;~AHkHZf+Kk4k`DvW6pqUCBKAtNB5`eCx6hKA$ z3bAVMfq!&#qEF=e;9!ADhTg83_toe+Oyl<9cJ+Yra$hQ6ur(nOe`Y(NHoizH$8y}# zvJ-ohoha(r9^;O0q`-&&ViwoQd`iJv>oXl_VrGY*tq390E7jV2B+*(sir^gvY1B{r z-?ij}2(dGi!R`K*Fn!o>}3y_q+t(GNH znrJB@RM(*)Y&XBN#%$hvbA2yXsL`}j-S-)tO$WRswlzScLu$G2o=ImH0}yD z+TNAvwB~~))KLK~Wz~o@HfV>3h7hzn&(mbVLbX<(Jxj57%YR%6n@liZFB1jLWYeXr!e`p>(tMS=Qe82aS(NEabMj5V)GRCkG^f%T=r%Rj|kJ0jW+&t zxJvJB!={R^Se{Tq<<%+HPucHylf5#%VQ=XwJ!WZZeEI)MhIs9pdDE+{Xs3j*s|m57 z2C+v}ltKC+zTH#nlJHu3QmK6D1IxglUJ+SB3SIy(oDPE5K6EK@4Mq9N&7jw+yjbb5 zHIm)kQ*W^O#dE^y5^oCKVj@rQMwM6DCM04Pz)L&t2}DA!|3pfuvsiaB;4qi8Rn?e0 zWKgTLzJKO=rt&#hRcVK+=$RGK)~}V4@x?kpYIFJf-!LCmN^2b~xR|T)8ZQJYQQx7HOX;S&Er zOVL<&5Y@u{T<|9mUYBODj$Vljth!sWSZT9dA2@M0SlC84U07JF*H1fmO4Bv%QX;B? zPwxHaQWDa9>g&G_6BKMC7+)Ibs5UBcA92!l_HU={eD-jA;a8@<|3b9X77WEN=f+A} z7r&~?Ab8{QF_u(G)oRHR?aa&De)Aqv8jly&?1c}C!Il_RsTgjA`B_-+|GThS?G189tbHs+c6S-wtU0vOdd ztI`xM8=O}G?V#ZWa;*^_+wM+UAzI}pB%^$KW$!*o*_K~Dr#GSem6n6VjHxo}m2UKa zv|)IGPxKd?TY<;gLk{4*6J(7)tFM1@J)nll#E(cA{Hq2ph+a&xO{o{DE7T}hpT#3f za@eC#rQE%cak0&en=*nRB8lNKmerG<#d01sbNfYgo|;&)tyD7tRrtQ}Iy{~_{M|5D zVWwgRj}PSTH>Kf5A+gHpHr=eyrfPZ&^9|gAx5j+j&9*zu9p62oH(X?Q(khmMZ@E^3 zcx9R5Z$3c0rSSgN;?ilDAItP> z>|>;gV?S;z*!k+^Kum7RGStc-HZ;B8I6$sh&9wl+V2~Mp2nD>jW>G_QUaDjU*;~t( zzjtr5)cg7Q)&24MTjIPjxfHd{Gc$g?KeXDbP^0YgQ~U>>)^(;T`ritX>!<#z%)01k z&2{Qih5Nb%tXL+KV_Id}XNx`0iIpAi0!AwVc0fA(G}3IV#hE*LW2>^ue6{*rSW;O? zQCnF@Gw$Zug@DG6RP<3>X4em;-ZPyZAzB8L%lNm{=Ndck4_F3cjezFvy?1$v^laHG zf$PbVP_`U1P20=~SCDeis^{i>2sk87QL#XAT^`lp>YQH^q7g2AdqdC=F+J#`;u6I0 zdErW6l-NgggN96YWA`T~U8PG8wAX6Qw$>Yhlp^~#1 z{eoX-&tR5B=>$i;FT2C;lXwpp42e$5-=0A!n%O=-TmzTiC$BI6E8=aA7d7aXf}ZdJ zbLVo{K>Ge#W@Eyy)bq$X9ahW&L^lU+SA8B&Uz#@t6DZd@r~UB{{mX;}o5L;Z4z~S7 zvUp$UTqE2nL(FU)d(WmFSGzl$<_8Yd)ky)Z4%Ph~Lsw(akq^jo`G$paIS2xjR59~f z`w40Ff7&b$h@9@NdzZ|+;EZPSiZpZ*(<)SYb@}|1ej<8zwePq6!K_FnNztU3I-BIg zcHtpu;h6&6i-!A|Bbq$;I#+IYM^fGEblmLZ@55TFj-_XUbXCESR-|`RUAD7A?1YI_cAQw;NHu%+|f zm_P3xyD{QpCcp5v0}5qntg@9*X$?pH`G6ldOLazjVKaT1_l6yRB?dASzVDK+24}X` zC>kGf7(VTxX2FLNQO$&DL62jSjuPqh4*x#XA7UnWcM>0qXMMOeG9zKPG%=xfQhOeK zyd``1(~7V_^CtMZMS`SpGoGwFlw7P9>};bVCgVpns*~6HvCV0{1Pyrx%_RZcn((q( z_SrIk9$GZ)>dEcQOQHC&?qJbfL*?$tms@2~(Q?K*4A@u|n{B0f?%Qts#WcUx(MY>L z#4)AUj?RR;QY=PM1d9{Q{nnBBBZ6W)nxIw+51w%qx2srCr8McvKu_kjCNP!8^LMAK zU0)RHStYZ?Bt^}(S*~Pnye7=4)z%1A-0Wxk9ngQzvNH zsN!To_eex}wSOu(qTh&wT&VvpNJbBdf_JyOsCa1z$KEJ-c2JHdoabuz?Tki{2UVhv z4yAP`=IUVf9o1fbe#RaTjH!7$We-TIsFqY9sdvfY1_ecQ&-G&bw}aB*yEcKGejK6@MDU9_rle zMHY7C=ya?ELeA0D8eEx;tzS4_B;s^eQR*z1-$W-TFYSfZ2*1!tHg%CCIMztc;uk=Uw?&QUoC5bp0WHP16xfhDPeZl~`igH$x&Js#oDr zfM-{g0z|j0#(ilj-j24z5~#mR+(B`6*30xDv2B+FPLxS1Bww@DxIr>H1{upFge!U3 z`#6Hg5J@m6>H49@p?aNLs9U4Y6`G_^x>P9JyaOdCew;7a;*@cqn1c@ZO~0i0H`Ajp z`g6DJs$@ImOHrb%Qbk4)r8#o7ZT%L;6Q}YvMtuT{0Iv#DG|?zESV}yz2 zNC^5%wnk$Pygi@ewK=!HYiNv=m>D0!dyjE$x&6CI?udD77b;XTD(!S$XRK1Lx-gW3 zz~9(0l-77MX?7-_Q+oV@sA%{ex-wWZGHgA^sFJ%nf-@DRGJwYybBYilX&rA6qrL z7&6T}+I_DcHpGKvUF$kD8`c9Bg~dN5)>pVJXsiQXfsSU+igXkX9!Vh~tb;qn+G#WC z9=Y8~oXXzw`B!JVdPO(J+(}z87&N+U@&46%fZ~1vI$4j$)cG18VS;!LeB~K&7~wA^ z$Q%?|svU=a2w1%R;-TKbtE}G&{M>AkR5Z!7Bm?Ptf_F}x>A+qEr}?dx3368-tsoKm z+*{Txs(cU$*(9%XypVOWT)@>rvQ~BNpQ6>l$7M2;zwz$F&S1(;nkC}*Dxq(1ni?O@ z^(BbpRN4`WTDG2QB%LY0l_BKUsdiF`$YdVLpMKA|R3I9fQaD*1)rj(?%Hd{22jit0 zHb@312uQ+m6V>Lyg`pH=*S3)V=yowzJ&Zi!hw;rQeEuR$`0{&U2IP)iH9>-IOf$UT z($$|EJO%4E@fVX?Hy^F_WI@PUtm-{Be_QWutJDY9*xE#U=0xgP!_UI^&I;)6hrh(Y zR4)ArohJucakY7Uv|*3f*Xrvb=6{#&@fX<2@+t2e&Q-y?T3Ux8G4P&{QY*EGBHtwT zb2gBm_bsF$JBh1Iqg6m>$s9Oo?6^9!&NvuHk+uG4lse^+i zYY7@{{+2f?sOwMP`@V-)u`5khw+rI3lKVc@&zwEd5QD=Ym4wquEY6L3>!g$E7kSaA z%N8^~L))5#a=Di(@2OJ+EntH+CmC_I2^{Q&y5V}_)SfQ2c(OyA&Kusr*k@eRpAHTo z@YGyi44ZSZBbUwOiOjI}Snqg(i?NMdbg>QJ{-CPg-HvL>#10hVZVi1$Ut~WPNZKhs zKfXuY&xMVk>4sEx{Sl<6Bw#j<@UVScvcF|{Ih>@}B-=4~_z7=s1-lg>*?=ey4qkF1 zBETp)UWE6&sCQOb2k;b0$nE{T;r50~GMh)r0-H*?1~0(Q5{RtxwS5WiC#N#Hiesf# z&OuqYF)xQyG}B{$^f~XLs(&0c*&0atzdWjYSDq z+}Nc*so|;VG3$85{%8ApVv#VE-Y8&!q<=u)cGE~67Ek7ofUsvsr5E_fO|=R(WRmBQ zX*C$f+;xXz-`9qOWM#FBFGfb4jqhtk-4U{7c~N65CtPFLPhT zx+A*t4+HN-OHmFabwK-8}hcdk6nooZfce_>2L#Lv$Sw_@jQYeyeWF;5#ba6`;O}f^7CDvEpnKoD3<0&aHh>Ndg3odtQnYKPAvr1E-7D^MGmwABq9M2+&@%qpou1^Z}83;tj6XVbxbSsC9Ha;)r)hkvNZGy}R5{s7`xR6E$m7GHf*ATr9v zJ6__=y!A}N?ooXlYG@LcV;HHnAagFVFk>5xxtNrzd*_i{>xO5{M5)KZT0RX;K^O0} zi-lztr3yG{Vx{dXzvk>$bS|jqDEJ?@gWyj;>M&q}Ui{?R9x;50`2#=AGZjlQbF=M3 z=vQ4uzq84lwxz!)EjEMUF{sZ=(MYSf$lR%D6!Y9R`6{g2tc7P2mxX%d!MezYH_Wdv z7e#6!iPlI7hs$j}8pW$t+MglZ>5EO%XyKyw6lZOOFT#uOj+8wuCR++%Wx+1}w4rl) z1=@ttx{SCYQZ0?*^W%YJ-Q$qudT&%x2c8NmOne?MrUN#cqdzQrjjF(kVb01_P4@{3 zmDCjH0bjo)xnOCdGf&=jl)i?QPTZEzdEp3O;GB_f43sdl0n=~yrtTqYjk99Q^! z(QN>afTSQq;uSmn@yAj)JT8xi9VB!kHZ)0q~V61U09ZWT0PQD+%i40O-UH@qVp&fp zITfSpG{L3iqE=`O5AlvDfB}wum6!8+zS@1i-gALH-e`kggGOcurnH$cHqsEJkuM?n z<)bEoz8Ou{U1<0Op;yldb+~?0K2Cm)Hkn3#pJ>mO>UG9&}{~%9MyxQuHKU=OX z#-pbPOk|9U0tR_em!nmYZMBdwYQ0i|3?8ol-;>AiEgD_xGo+>?x@NTr-3HqMa^d_- z^;+j2c+skYPR~Pc6Il2iAEg0;n%Z`72zBgIoMa$vu0~TnZGnkhIdP@&q#=OBiq$)u zy$2*=eyR!qOx-ewD%izjAO*qq`I#z3*)~k#f+|~mKPT#~jYT?HH%;<90)Tn{&p4ul zT@ryr5ON{i@ePDeBuH*%I=*DN4`WG6_t`fCieo*u2Ah=*y^@zUv-mv&SYi#dCSR(fE@K}~7^>yH$=O+(=< zs}ng&q=jl0sD!50t4YJ-kJ}|JHu4U-ROJ-$bbUl7FNjoLthjeR4yKBJn!5d^`12Q@ z7E^|c)q=lDxSCP-6zc8Trq>Au=?tv>ybT4yacN_9cjA?n{o|><$+waLE8QlIZJQ7s z0LAVE)Z(Z2H5^q(RK;%D3a8|G7r)xc4gKJOBhv*#FlaQ?t+gWh==*Mmvn$8!ihBJv5?Trz#c~>nTA8`d!4}LE?H}}J#+!(ur;u& ze>lg3&@ACc1|b)cgIyAYs7FgCNT>}=(M*eJY4<8$vR?`VTF znX){Pkl{R~gw5%>^*35&oYGX01QmsJiOE1`Keb{NJksAg!qS80)+W(&)|A?>VSu_g zE$aDZGVv-0CS8fE172d<44d!$<5<%6R_Ta0chQj=nX+j_W++0NG`zRo!gr7xZaI)q zayR82goGbdkK~i?ugq8Bz28O2iy`*biqnS?^w1?CM`biJcB1zfF2ZHb zA_EBgQ+HfO{VFf1fzk8UIJ)yzz4u8IyrXlC1Jr2|>uhz^Tp{AIi#^)`f(^{Mmv!z_Eg+-(&z(iz z#im3eRxxO!M$dimzv`ZoDguCe-_e zjSUzvsU0~0mPQvvQiV3Ynh_R%c%~Dq^1k4zw$+3|K%?v&;ing%m%>0L%P}5kp60N> zMDF`|_BK2o0AO3Wuxws3j((N?1MPlM&gvW9VK37WTsO?Cv>UnSRC_pse6~q7hDN)PLkf*SiueAVOeibRk&CDUb#nmoyIbvTn}<

tXJeMEj9$h(LEmzT^tZq7s&+lIsduyvNw;0fc}E`s@3H6d_@VE9Q>tylQWMorT+ zR+-PTW{W*@V@*yoyYUuFJl!Q1K=_mLiu>8`B%68M6aPj;T)O{^^D`O{ZWt;X+Mbx`52VfBU8o(k&%O<# z?I7*!YD|~1(bHq}jMLoSTX2O3PT~qv{YYDknf&=duGr^Ll|DcW`NU|rw#$tnoz14% zxxc;9e;k9<2E~}&A(jlB*^v)FZl=AwOc#dYN(|+4t{0aJB7NFhhe@t+BL@(BbaK>l znT`!w3mwV+s)SfRBP{2*#Okk@xK%Pz;J(Imu~@3r-g@^<+OXYGqI;iax7LF=a6ba7 zLZ=D}_gjsE;eRD+Y!0wQLik|hP;*A>8=KTHNRRoTfdk5cO=6|_igJw*sl@)w`Dusu zBU528SJ8TK_U74Xhi_~dAZJG!7?vQK1D1%PmQd`LJ3YW!wDAto?~dVUL?c?N0GTBSh_-to)0k zpUx(NnlstnSfqtPdXLBh+;Q{ZSXTj3{{UZ+`x1w(SZ?{{(R)K~+VZ%WxJU}V^cB;l zEho2<4I!9s@}686>%P2~S;+CdnW04ntFl>6Sp?vI7cHd3V>|H!ppbAyh?~1-@J>SC zmv-Uaku4okmx$jhDLL@tTHxhH;xH8NKbb%m+B>_J15fP@J2(GgHkx6$!~nzSJJUUu zX!6$RZ?y=uW>vGt@V}EYxdos6uAEA;jZCvtTTI>7Pol@W?pwx#tj-RmzQ#0O_BH~d zDYIWFoJu%J|GMbIa+nU8Xg^^wb)l{8ty?W@2^co>FPSxa=>o zH5C*Z36#j%Kxy#Yb8nz`?gI8FX%Hw24w`q%@jf+e)mYZdlPI0&u>kqiD`a+8*TPoZ zZU&jzy+6GN-}|K0xU5)NTyB%LkV2u^NkJFTuXH?b&SFLFt5;-eL1#@il8+fpJe$1b z8`kF5tG#jB#U~^KuH=Ur?)=6w_Y;{)n znaA0C4pJrpw>QGcwUr1vwR;JN>#_SnlB;zuR{&gh32-V`XJvwAbqFo@I9yzxq8(cK z8~b)O8ZdIoaVGI!P4awhcDm^fTud);VyGSZ3^iu4jJn5Ys@4+i*uTq?B;{Wc+;;l`eKmGSN2zwFjTPAS2c+&aRn~hkWCCsyX zQK@Kaz$t$3GHky4$^NU;HuP>n0abDOLK>>0;ZGeGhM{F$B?Jm!JAGv7P$z8uuJD9xwMF5(XcFFBZv~MFoUeb^-Np=35>?cx5rI7Zt4t2mf zCm}Nvl0e;%R~(-5Kbw`W9C5cQjUycI^76XCK|iLs1XE9np^Y*4pJq;GlYzC5xeQJ= zMH9}cB-Rc~^`I{!fO+Byn{f}PzaEqu{l|rNh%V0=TZaoH@eO|gClT;S+OY!Q%t_$2 z7`1uLHjqf#^Yi?z1C@gaoCPy5aXiuH>QDaurmG{W%^1t;GrR!_lrIMYZI>w~F24hV zg(PQmpB)@hzi2(tnpz{}{pfQJT1v<(KLtk07?uA+bf(c&R9ji}fjsqhKHi^dpi@eq zn;gNw%&SN9@8c_2MI${DJ1I+EZvln>O1ce63aVFxSkNKV)A*}!%ks6@kCtD@+w|1d z(?B;KnZn+39+^TFG=bJOV96fRe54>DnJooRt@(4i^8=>CF#%#G4Q^`|e83QB@4>%; zd3N2J2+~`?Dl9VN2l^gD)jnzwg#gS?HImb^(S3N45RPf<&KDbBwd?QI{b-I_iFB|( z*y8+}P~A?qI8|-9-5s5JJ8_qWUGJp;ckkekK%tFs`4{pPkYke8yi329P2FnSB|N~o zoND}D9Stkq{sb?r-Mkv#SspT*CHU_9gS%X`#GAEU7BMKmorwtGD^9{9c+>)}i1{ax zs_wHo_L5t7#n0Rli?72gyuJMJ<s}ypk^mK0EHptV>7)Cu zVJP;$P9nY~e5X3sk>87*yHUNbG5)Ikf0dF^UO z;ODEsB#oJq05{0qvi+~{^pNRAa}Z`*7RtC{yv2vt)_T4V7e&Fr+3V56t-8DaYVAh# z+FgD?cbWV9ea@U5Mht0me zF0-d>{^7I4ut$#Kvo}2cRMf&hn9k=j(cOyVl0N*p z+Qq)ke-4-9{Fl4pm$#7QAwo(gnkw~Zp9v~7J2v3?xKlYE$f3N^DsFb2N<>019qU3L zJaInml<8&=g*qBbCNO@z-x5!v4du%fCf|3pGp=JJfe+#WQm|x?X-I4>j}M)Mxpj5D+wEB~Z=-J0YMbB@ zKGYnIKE&aA2MpeNczW*`uo$!9$E;W}6(ArXNW`|!?yheZFjSe-z*qP9z)tkEMc$w< zMOAfZjZUuD`ZiJ@Rt9`U6Hl4D8E|~@+sYs!LPiwr()otVE-bxM%m5P*<$+h}tUYTO ztux82DFb~^0?c{u?pWOz0cnKp?cHi&Ab|Hj<(#FmGgY#796($Z-S2zCZzH$8+a?HB zh%N zU?ULnBkLwrpQrxktGxi=KJ=Z1yj0Xe)!68o;D7F;NebL2L40orDGVk3ZT#^+Kj%mI znhZdtO!bffAcb6i*w=CW?+*zR5W5lJBLQtUP)e-g|ND0!SP=9h17jOZWuRk_E`%d| z241=U^+_oT5Hw1HoJ`?FLPnq^UH|#H_9(#czwqB>S^&Cd=lFkJ@ahN@TwqTZ^)VP| zYY(r=Ci#!yjU<5K;f$7}2w^BkJrJze|M7#L>MNO$0*&kUH!`ppR37*LI2EKX1{m%F z>Ce{%^0e#b|26H^#*m0NBJjOI!mrMSrNgKA$8eoj!$ojvc7c85wV_b>KZXm?0ftwj zA*9a>qUQYen;`t3hefM+<@IrQ8Y`6pUbJKR$E`r%2;lM%qb^dQEkQs+WZXZ7(*rl( zBa2vY3?Ku0e#sX3$M7snz;Mk_$jD#777c-YAU6GPv$KG6Og0%m9D}W7L>x3$L#0ePQk~~KCkKtqQ0mDndLS`<2EuXTSg8$nF zST@9gkrl-_KlSys`#=6;od9$!u!&utvx5iP2J4&T{_|DV2jJR9_}uF>z;In@bJTwf zHxC31S0&44<_2uRl5Z6Lr*mCE0;q;!$yNuiTl%PX|5!)j-v{`}&WZy9v=y$XQuybq zvA4jrIuHd5@5R6|I^-Eheg?af1@)riZG-gIW$U2Nq3iobc3{% zNH-`0h;&McAdLdjDcva|Asx~o((&$j9-rU$Ip_S|bDit`^SrOucsb+Tv+uRmUh&y$ zt-bG&R7xVa;BDp~03ZJ|^+I4ZUQVaX_d5+tzZ~j+sEhgkgE?hu;%nfDV?gAf=~e&@ z{6`|@e`-ToL}+gJC9R+~xY?M2qZDZWnK*G2E}%UG+>X9|A~HQ_5K8E0G@4*~hl9_T z_yb=g{xetf`;JI;faAhV*Art{k&l;m;BtQycmUaj*g$C>1lmKaAe^Z3c-glhWb<^; z%iGyBfhG_l$Uc!c2jn>vO?T4+#Tm7g0Yb?3YzS?Hx>X9I0zE2k^v4tTffPd;@l3G- z8A)dNP)Siu!=zgOFLMqBb54n-9?AY)J#+=?%!ooQgXN2pEgU!naYX6CY#pY>k~THO z*oOv2K$7G}x||?Is6Ds~4)hcpkW-3Qg-A%b_6%k=L7+v_4Hw_% z@c&3_2`GoWp`3XB)r@+mZjJaLbObjLFHj|kILZ-{q^m6*y21~^g?>lRE_gcgRZ@x8 zYmRfKK>GVOG-mp602M;Zmy2N5yPeG!m<%Q5{NoOBbuGr01In?!` z)0mM4fsTT82r2Yy`DeJKRY=~Ok`D;o*d6^;s3A6;B$eKIY9zKNtYa9Kx{kJD%#aQ?Wv@x3ouF7pW ziH1bILT3N6K45%{q|O*np>UX9p#d~ow${Rh;VxaO41Ett!KVj|+9$VA!Sjv_Jv!oQ z)G1mW`;*GjAi|LC&sgN3rw61o;*y9HeDrSue4U)FOsTB{q#qU(Mr2YS{5hH64K^Kp6#aXVrY~Ga+lAJtx4f~!NJ;Vgj>cil>>^z5xQ~RzKK3$tEU8rgTd5AM zv1s{9XivD_jc&DFZ_KsxLc#GL}?S@!Tt37V`I)kR*8z&h^$8zS`!O<9+bn>M$r{>AqHW=jW`_R z)*O{<#tDgf|Az45;{XBjP*UxXdDuPQd5BHW+(Q4W`**xRe|<62T@ml=ZS5a;eQfia zC8AS!|3XE9%SeFyrqt1(`P2JRyl~BxjaWv5!j3oYhr4+@{{DDFZ~F9HuVHd0oyY$M z9O+U3I|`(~nCw5>QQ^z&)hN-5`+C+$xjGx~laIP*Jk=zkQ|LuZIe|IzFX&C+ED8er zI`^bX^m;XKW71jsIhh|p?&k(I=dM-*suHsR@gn&f1@TGHYFVWjYCQb+W$ zREhk*Xk4fOH#6jOo94M(`X)#w`FhUU)qjG;%#E$l*`|#fPt$a6`)Se~Vwbx_?%zMF zNB)f8J+10;HfgWul(CPKe>v<$oXpde-z~|a-UmmrWsZl(x6AC-`PcMsO9SDk z(o89Lpbb5H<}B3D6gB33!H8E1J6(d8rKbcid8EGF=!pVZx?Qw?z_Pnj#+^SQGLRA& z1+v!>k=`0LZ+|BG>z8NT#SGQEV)(j0HE{x`i+mi;e3_>NSl6JqGjT%2osz3L-WD0N|nHt^45&S zCVjRZiXH?9ZRET8qBCR}Itv{^5!Z%HLIxnF7%^1hcOi#2i?NVvDioVr+0m=NeIV1Qy66jj5Ge>x`S)tFR#J!%k5c@r zzZcd&0R%>rwHH&a4?S}l>umqYOW#3sB(yOv@F5b$ScVT`e`{pHby4+;4fBf_wx{T|rN4LWbbcgst94bm| z+)zJtRM67CZh<;uwX#EG*k(SE=o9q*dNn1>&}M}f_%+Fz3IZ#K%SiX?L#m*x=rra` z{DIw&4-gyF?1raRQpPnA$&%pw+Yz$BD!&Z_!qr)atQjj!aeWn1DLNjtR&L|8N`ZTG zi2>Y5#LO-)9v*XRaD|hY1gX3um_bp`-P^-y=`&@td@b=&zX>_fGf731SZbltNXno^ zP$;m~-Sc2GD079z^ox|DNNKYTK{-(hENrDh2QZW<^;BZRlN~1ea26Cv@eg~(qE|xQ zAe;iq8K1r+vKiX57Sp7i(Qa-lSE<~odq6STEuMQ9m&w_2`EJj+#xq+>;E$ZSfDy2h zaHc7NtO+laDKZ8Pf@=^Ov|=JZBh} zGu6QmG?ZGr*1N6l{o3sK_x~Rd-t-TIM@c|J_)%$md|DJ~#v~%zG^}tXQVIAHfmu#0 z{XPjWVBA|kB0un*E3jgn%yb|H_`AA>y`Az__}CTb_qQX$6TQqJaW(MYD_a2y#vHh& zHBXgvR3KCkcm2>PHrftvL2ZTph(53WV^#qU1A?U%yh=sFoR<=&#BlT5FA*fPOM-ll z5w)r%HZ0h>$lMAmSSkH{6BsXp*pKh{6-5#gw*~K3)A@ACw%2Q`r7^AV%D3WSFIoS) zz)pa;xF#=?z90afu~#@=CPA7(lAcMrTEABWu5qs45mk~aADeg&U-}8#+5L)pbWD!6 z=1SVS_>%CPhJYko4}@gLB4P@P{XG%bf{{xF7hsePhCs!qb?oo!K6k$E|8J501ELC< zK7IO|_n*N-eqL-PB9hfu!L~#5Z(;!XSF9>l+l05q_~Nlt^wBB=+<^?-wtibOhqzOb zs6@!nh=u>YmNqARr1mvF5iL96{dMkWZi4@)~N`%cWrF zwd;@ zCE}tZEwi2q3_2M}#>NN+MJ6eqzv=<_AernA=Q^{%q<5itiQto`n@jCM-IS(Y6rOjVX zu~C13x%7V;w~YdMzfsRX8&JUw+yPO_!I~tViQU1;m&d5=epW9p-K5$_oQIzG#D+EP zM(4R~l`_j^LLVbK5-Ki4<={)r<@xK=AUBmWSUYkb)B<#YyADSeCZ}rp)YMCD`&|3< zzF7q;=S#Gu!-KlvJ64)m+YDCy3<$ov1~Ne8gNPs3&|CO5)F^1#|8%VY)BS|(K)P^# zU6lB1=H8xKa;0xjXm909?WPz0?au>R$PJz+r5Mo_t+%&O6Cwrp;OVz~*dnMXJws+D zWhrdX0XKhVYuAL*1Z$cOcHO4>NmLRf*`Eg(QOyfb`JPNS&%mQiR(f=NWK7*k!wZoz zWjFg)NstX&)TIfkWdgaL6RvD@WPk!$Saa*_SRM~YgXL1&%4GJ8M^DRY>>7RD@pRNK z@0suKvu8961RIT(GxO1gO4194>M^kbzTRLGAPm5yyYy!@fx5*b-P!L8KT``q$$B&R#C5l|pd_LcNlXOiJf2#hWT-_j+R_`4Zka8&9tOnV z(t=ef&8NjQk(ScYO&&cZEu}cYc_E=jAFuqI_?schz9)8$2Odv8hk-#{RJVVB1x_L} zN5RA}9NhhZOk_3C5^0cUm;cP!SwB|yEGj7vfKT@^9%|XCZ{rv1QjRy3XNA4nS^Q2@ z6CSkQt;R@}`kX&WK0+a)r68bR@I~se^$-<+vlPnWd$b)6RF=Y(OP{SH=noo=J;i?C z@?F~^TOwX~dc41Xc#G33P58C(2iW`MDbvFvp1wV}u~o?ExC4)uR|<}?Rf@=W_T#)~!eQiiALb0RhOr1$QN?P5Ioa;KJtON zL&Crs7J6o#X$OYq^#0xMC7<5m-txTPeR}>j*yP)=f&ba`etT;st@L#B=i-OK#`JJoN5U>)B$g%vW!6 z+7IsCW)Ty4-Q^h=hWFYoXBRc~bNhk?PrJbc>er4R5YN;*`@vJ&PdQ12&62`f8l8@b z%uG4k#}6AY2lgQYR92M&NBLhI_|nYy?wN8*Ib!kLQ^5%NVi~CJ&tIIyi6R>^Wpnhn zg&aqg^feV{tIcDvJBPLBMpu}mQL-UnqYDR{9#7_Jey^xKnLnH_o;SOiu?Zb*ClA+L zs}>NQRAUPu*uQM)6i^y`cK6uKClYq%F68l&j&G(Lb2c8LBQ?vtdnC9E;9Li#&#^LS z-k?FDm5fN9n{A^YctnXIh4^B_Bf+?f!E4J;j$>C*=C9BAr)H1k?aT(*i z^7K=by+t$5)^;1tdv`d!3&MqPs50Nh`}VI0yTz3;9y+N`o7`M^yWZ4a7x#*>^64_& ze4N8GnO~rB9kM^Z9t`22niKVg>-2hM>H6ehxljchAMpVf@#YqRGduWq{m{w@n1(7% zwzPbqN~OkA_E}o5`r-5ux&{O`^oD6tWm1(5PXcjP*+`t6k%JYEEhB2d0krs-w%1*r z#vAy(obK={;Oq?%fryx#JU(TW_(JEImA!yP$)tv?!VfVt0B}xnbgayG`@UEt@^Q>s za%VjuS1UhAp{3_LI%UQFt_mElyOnP+=o45*13jz{>iivwlwUS{kiW_6D$VnfTv*Bi zhfQ+~t19ES9l&(JO_w5sFJ9;XI(F}QovWY-GG=Q_DwdGP-q(C*%);$kYN7Ufae5;D zHdT}FfirU%8!70sicYD|xl05uBjugm?n5ps1iU|IfcmN=a#|8}e_4Q?znHmwx`7Ei zimjHnx;n-3g}KquzxHVQPw}mR^YtD(nu8{^w`ggOcE}u-m866eV0>Ffyfl=^{EX!)olq)*I*ds{a_En30DFqdPZ!%f+A;6-ML4hqOPLtf zx%pxlOvae9nlI3y(S2xa(**l1D!HYXg{L`BL}1Am7Mh|0XRH+Hpch+(69%gs=1)-^ zZnngj<__u8CPq6Qaim`FZQf)G*ZUlrmT9yk-KI`ZihO9;tM8y<<%6yioo^v>5)j1X zKfJKK^OC4He)=}?4A{KhW+sj@1Xx`%oZCjOd$7@rpLOexGuTcKzsm2`_{!uKM>U#j z)MVvvKXz?LaI^VaC*FIUJpTMsyl*R!IW9Jzf_l9Ba|HHBfBv@vU#y-e!>v+Q#aO;L zeI_%%#f4xFoN@>h=rHAbdxtT;7b~RKlrJ?Za0;t(W8&F{RUH8(C;0#)Dh}9EAi2VX z^U4$z#wrFE3o@;|XK_4UElSCi8f`yAe|M!m!Mn_wO^a_B zxHOKPs9Co|WJ=3BJ9Bmo8U|-db%o_T&^#hnCZD^T%AFgD>;Ekr02Qn-EbK?fHrnT2 zmHc2DnP8qT)OzYc$dC35?A28Hb_e6^T&yFTaqE>SuUC!o_oo$QjQir*Uzp>a(Ngi< z#~g13;|F2%TmG;NRvtke_+T2~HDswBe<|L+)$0}0>wv{a`gF_@_hHJNFO2Um6T%x< zNM(70@JcN>Q-dWeVzW0T93OaTC*YP%OtEo_|4r~=fS1=VvnZUdn1twbz;~nPvpDy_{2E)swyv8>MHp-}9*c~} z8v`RcGiZ5+WHBDkmF0Dle_EhO3w7tWPQqALTXR;U2I6IFj+Zx)$pt2*tb#QK#hbmA z2fmH5%w{O8`b}g4l~x_Y^B#{MFhik1pmCMWpF-$1hcQOB)c7=b@+-SWzVe&=;Y^F4 zrvjv+XF3x@99M!lN|E*Z2M1kqA#z+6i}w;Z)FBohINH*=Q1@M$(?{=oWZZILkd8Nd zr!EL!P|otg7%zb{(q|2YUv5NI*)u7|K9hab$Qvj9b@`W^4yseS(Qnq&FWk#MPf3Jp zCW^k_!WRjTNhEjA(Jr1-ly`G7qJG(YPDH&vh@W=1!g+#`XZsN(%P)nTY%K3feW_1k zHmv;M$xFsZ&lf8QNCYY@TZ6>Zax^yDbcL*ml1hF=U{LzEw(gcDc*ag7CjBlp>l<#G z=!*oWGrVlk*z0{hxTXDNK>e!RZkhdQbk${@muU0pqmQNVZ(4p4FqM}fUA4#(89x@X zi^T)fla|sESyP6^`oXz+YgPj~7i{>4KZn#?d?t^xhK;->O3F&2qmYw>k3aHafpkE( z_B?9A-Qk$>)onON5%VSelb1IAp1R0@IH+HxP=qrToktf)M3 znj^%FzK)6)BC)txj8_cB*_^xeLw{0dsb>Q01TB_}Ic~TI*wBe2-9aut;sBgWKx}I) zZhx3g^o_Sn&jP1(I8ltdt!E9MWX-jFV$n%OkJ=ekR|Z&68j<)u{q>8*L*ANYw94d?_Am2mOKTZEilOosWzBc`H$gM7$aPi49RdW% zTgLpXG*;V!Z!lrEkzqg(9INKckzd0t>#fK}(}`XvB*eG}EAX?4KtqmNGr&jCB8 zieYR%m!YdIJCBQDdJmgFj<6e7qW_*b!6SzI4`(h%&#%#%1)tV>FY~QDn#XgsmU?H$ zCM6^134Y0N_v4)OrKjk3k5ja+A>EQ`V=*V3=Cbc-78oyNCbfT0*zdGZzd?V%zu0js z^XT}*i$U_})164#j?5d4DH3eyEFje*y>dnn*doEg!bLTE$f3|^j9+4UHC4;~Q?Z>tVwl|+zwf~}-b)8i&Z0$!_LE{^f=DlpRt{9if3B{gOv2SMQ!4vm` ze2-eov5i~hr?{SNoiaU zUkRfT=JKM27{&A>yu4=nkJ>tncw2YyANhr;Xw)$`Xe)P4v-yC1U|c;@jM%mKNFBe$ zXT$*Y_)FOGSwFOj5o*CF-#+v|5nWteer^`XC70={^ii3!Ow@Gkre64n9_PYdMaaNabwT`ks_I<{)_`qhc zF8(RheDnrw7HBWxd7Hnx)Sy$-64MV-ilZg7-G`AC0{J>L^^($Rv>kogZ@&6%pAcb$ zKnpeKHO1OVTJneYAJTBPoy-wu$wgnmh$vpKC=j-fk8^*vlb6TZ74xOA4H$~3<32Z2 zMQ}4$;t_cM)3pQIIKln~!m)7!I|lxgsO7^XgKs?oBF(!Df|Al;``A?ak3uo94IqNg zZvq9#kxe>?52RH7BsuJ=%L_t5x1*I*zCt^w7?6?N%d-IPP!N~hhz{z3L0m(3c zj)(_pbf%C| zknsOmci1?rk`FZ=VOeqM>=Ey?Ghm}(bz=#!+ zaXucNf0EwFd=4%e7~}__d(=pN1NK+KHE;;Y@ZXI;5RhtO{+j}jY(Op<-F zz%?C^d;e8FW&(wL7g`5*8L(iY089)m4j6;mBVRNhz*Lwkz8MCj+av+iw~~@-|MQ(V zvUn|ym5r-MfP`_)llrZKN2GoqPXtF$9Kh zP@n?oB461r!0+{=VLNmnZ<7kqk#vyl!u-QdYa!CoBHm^IE*^yd7XC8CzllHyfPj!v zxf~A$xd*H!XS8*M_0J4`0^WA<@&A@$IMg2N=oyUc;&gUN_%w{%{qQ?VT*l6y7smXzcKLJx^2(m#v1_x=7Y`VZCh;&RSTV|42 z@UmbZt)z5dPe+_2ecAg(!7I%_N#;;6TWtr(sTV@IM*#o3=7Qq&e`|2EBc>4vWDh*I z@}Lh4fD)nY-ws59WTN~;H)RimC|#*S93i!6ra5_osgQG2PpoW~K+&YhJ*W+yDRJNl z6bCxeVLoF8v4CtNilG3HjETLJHkMUa%v8GS&h`)eLLDQq?5qBZJxC^;5fx5*z zsE@H*x%#&Pp!=BnRe6#E5Q8OiQ?T8Nh}H!kI=LG!*-^DDxAg;gR8WZdb;lld_0Dwg z1D&VrP)koSR7E1TmtPCV9u;)g+8>{qbT8brQNO~fUVRmcMyJ`u+LIz`kxuHlIbibW z#hO!RlkOq`Cu!}AN2(}`E2_M-k|hS&YY-dER?Jq${s>uqh!X1qTFG^CNEl=rWp?-inBWf#9G5ZWr1*UPgNKJ)B6wwfj{ z(&)e$PDYitsi>%ic!Qfdv7vVmF`gvq2eC3ZC6$3NF1U>L!y+i`9W6>;7K6@m+0*_f z>=5jBEF8V6N0_Zx*>Cdh;6Eg1ePPKf(-HCCR(cL%|E~1hmzbSmpv9-aq+6W6 zQb*LfU)nTX0F^I)Ub1)ParZ3JKSy6Bm6qYv9g3jS<^wLjU9Ig4zmML}w$grVT5COB z_;j68W5dVyaXP56?rF^{zWz&wU(RQn45U#Q4)aZSCY=m5uP2K1G1aop-YJK>G8>9F z&%SV+YW8`c?`9LcS2QWJWwjH-7P)O`=7NcG4+h7EP*h`~_O`^NN1Z|(^<2d)FUEEI zNeWPt60!9BQY=BglDSMM;zgBY^)qxR7Me44AV=U%QmJ7Dfw|Fd*cbS`ZfL+@{e25! z_(L3Nns7zXpY%z_RlTj{_}iy5Yt2$EfxeHY0OGPBD-Y&seY>M1FA+W+smArl;3w4W z^z9=zr)7sYFZO(+HnzW=;g$g4vk9D$w-9)`D}nEHDP|#%V;%Ww`cRHqI04tg7yTv*C!ll{B|z~$SO^* zK2#~LpkbiHpLY!u=$8vBlCa&;lQ^9Z64|Wk`khwDrkp=?eI%32dB!P7z^h5ab#2|DSl+1r&Cy>Cl!0avwP`-SyenK^CRu| zgk9wKYMV0@!APsB=^_DD8l8*iq2Go%^2Ykh*Kxi>Hj=zW5{~s|vivHTHp$9Xpb$VMa($L5XU`_ja_}UWxbM zs(hZ4r;I6VtPwnL8;*sGtxaeX-y7;ZXur6yI6q%uIx}r#Gg@A#ul^~CH;D zF3G>x|He4valI}X5&KCLf!IYgMcdSE>&H#a10I1pTgO0ac$ke9s{K)CzU_WFoKV{D z|NhRYiUEb?MbX!Sx$KHG=SW@oIC_>YRjRxWwc#PZk#~s>l+m@|$X?x>Nk_w|p{5n_ zOdSTZ;85KbH^K;=xVmp|87y8Ye{Xi@S7v-(U~}7KJ{G{@z^fF37dNB~*(bbmU_ z1Ns}OzDCI@#)5-ltb1*EQ!EA{#mhtlIaQFx&#R>fWKgdasrE zvvft7lnXtvUq_~9Psr@|d7{(N`_PRdO8FF;QG@2riKHrd)Qu%48}U#q2?gPK8wr*= zDh`P5iEZEiymRu#X-~NIeZe=e%fW3&0`KJ8W0Fb;^wnTbD0&`06d(3jTwFThZil3% zy10165hE=3#C5|c_6D68R)!L+WqV7W2|o2h;AUN@w?qlcl7H&Qz|i&3uazkk_qBu* zq5X6ZHL@C&wa)lFdN%Au5qRU*h%CakLX(QwedSwBnT2L>yR=4=m(~`i9i?IHy@K_5 zS6?W+l)7i@y$|KJc62kJ^g1glN!CJG2m3hJV)`Jo1R9I779p=8^c`W)=UF?tHE!{j zNg3lgtG9n{*Kre3kw}EUk@l`$YWW$S!c?eU?47`*LzO0Ai~F=cEy~#My#VFqDx_4e zQGMu@@8KCFt;Q3VEu|`{1pH5dVg`cs@r+HS1_x7gB%O5T7nERc)1@UN?ey zJ>E5#z)k()Z4)zQPhh-cRQ8qQ2KKEJX2x8kLAHP*7x33_j(v~ zg^Ndvoz%<~d@8RDKCgHG_*&H7U-4R|`~h=?Cq0|4V6^DHv1qq5GCr$0F&u@K;Tl@Cu&k7bmD?y7u`tJ50faHG?L=9gdHvWX?cIlm zu57Bi{duPz{;x2pr}~w0k2)^IPG_);i}E;{%)J(0WH&N}PEuYcHEKoP5H2z3vywK> zhY$`|>=S-9v9MPA^48j^7Pql+>)popq~nWQa=eADWrr8*;S9daH*qWzkLoIT{Qqp<8+Nk zh_S6a6;IC%3Mi-TEL^{EA`H+RKAEfcQ%dqW`i?*CVal;1R;y-QJQ;=gHGLAZ>0G^1 zc5uU_>b^#2e%8Cr%H;ToBC(lme^0!4SW?)=vUMF_*sp=kH+$|q40gqnr7@{_2{HXT z?4$f!H%bB(>ok7Rn71)&%J;HQ_EM`B@@#+G^XJ~1Fpg2`aXTBG`Rq7;Z}Zsku6Khb z-sT1S9x7wK_YTJ-D`x+2io*Nc(4RTolj(xbH59RKqYmG9G1Azb9Np@A>Ox*ip~@;X zRcW0+v8CO2`Y;5Wj;TMD(dh7g!n&qbtgk|=I6>Rst>rQmX+GMesCAF=QSCX4IH9xV z+qQ!m!ZZQKZJkVR2M-_kcVRKj<+q(3ifzvH4ig^~cz0L3eb+2-Xz!c)B^|e>oEtCJ zIj0`_t;TIIRX9GbY^5;Nc?}lp2FIOxOG67M_vV>xMa~os?(OaiRG;y&Cy^WTPAy7% z$DSr@{s+;wT^B?aDw_|#8&ehVmEFWqTpqS2V3vMtnGQ<2u`axH7h%I@xl2sPuV>w# zlySH=^ngF0Wum-+;_G1G}36<*shC-&%S&`JEhD1O-k zrZSE_Ofqg4%OZj{*H)!Ax59;>OC3V<)$&$hZXT~LwB%M7|2?-IwiB1!1lW~_#}`vF z`)?ocjT-!)47L6wSZYpJPKFu9)Uxje_f%{cCpCob1NQNUU+s5YEy*a!bJq zG{(XZh)GYWYYc>Zj|UXONeY!mM5E?#K$je>Rnq7%C(}<2ZjOy+`o28Gb5@c`%BjvU z=ymGyau38TVw>iT&xz5H^rV(>n{q7^p>Gr}wp+C$qNbLc-JD1M#v$v6m@JXvPV~%3QNLF zf{}#boA~dhxzxI?56hRIIqnM;nT18=S&Bc zQo*t;Aab}r_b8S0irMsJRhIgASM7)3NrFXdjqR9121~Mr z2$q39K@Lav(p1g~#!=3Ckyd`%g#BoV7q_9@#o^(Dw}XtBn~f9?s#0SV-sh{2^C?_t zdscsN3Hk7OJ?v(zVnS&}G~O(vIp*#74~CAW9|QSAk-t|mVXEh^eCDXzE|eeA!r9WQ zUD-00j}J8Jzk6|83UD)mXDv8>%_)0LN#D_Z1A)V@p=pX`Esl;Yg^xD`U%0NV$A|8z zcsQBljAJ&t-%t7^IQnA!@Plu(hBrML?GnDe;fgGTHh33;(nSNoK9HjDd}V(5wfu0# zU!+|AC}7Xx-lJNM7mkxJjcup^2|A;E8BuE-| z;wyY*iLU?Ip?UW9J0{UL?kh3nS~LOBGbTShSitQTW_PmA&L6Sl3qO**dN1SnpZ)U5 zL|@3$Fd59eZ;j2zIxmTjueb8B!rGp3M`vMhK5C0!AwG#6ZXrsoHu&~)%w&VuM~l<^ z_bbXhCOS7ri%<+-=;*$6$Fa@igYyDuY>8rwNwX9;z=|k zLlTAm+^Zses+5mRgG;H<{Bd~nYn5k}0%D%!XIm<{J+)%LI^r8e>Rv^&u3fRt;`&p` zdlPcFEHl{pMm))!y{rxSJf4+&9djZrEiD}5H(i(Ohu)v`BU4_$btR#{B?d(bLa-Dt zB*$N4p#I5n(5jBg>oi2`M!1e`w`xzDw;UCCh+D8)wDrEO85r>V^&L5k`(`;q)`^_fwuPk^qlgAi!_EgH*T z32DvKb+Z}Y$v_AQ^bch1C1~ieK7}^^IDh*o@-D~p5*@8Wctm>3h|gCv|B+f0+FQ!yCx`m*j*1u1iI)&zXsKtATBylyD0 zOh*RmNz7wnjZ=lSV67*bL^7K4t0$7paf-S3C7-YzHsuuL7LaJjKUpbmtLZ;E4D$?2 zGFK;78uRgLYMVUxczC{&m3xwVQ&yC#-^OfxZS(PBe6NMIF4lSdFu0=1qTx(Ql7`ke zjA6wo5E1Ho7ZRupTuU$7Pi6u%@zxf!W2ZE!(b0>HTxM07C%j8R4Yc4H;p!`| zF6KinT0W}XyVP{0Jo*waw$Abq@47q7P@qQWdh;cCgrwczT7F|g+(#?PBOEn{fbi{u zO9wf6nEczo&ZJ-7Q@H$^^VzA#JGCf)JSCJE7)Q{eD+~k{!bi>46e3Tm=vUbcznmuC z8NJu_uBI>2)C*4T{rpIO5V7mmKvP40G?Q0kWr&5p*vLNNPRCPG3}gj;Pg7qP@8 zaqbdmVWElByhp?J<4(P=J*fl8J|7()7TJ9fM$r>3h#N zIv}KI&P7_-J{f>5!;fj{fVkenPM=;76=~5$Ge5qpTM$$1V}9(X8{Ob>{Z*ARWeZ2M zP-~+;a%fXeO41jLOwUUNI2hiCvk(+ATA&>;(ODc68dGT$F{ih(iAC$qq6B(B%sb9s zx@I^U3;Lc!6B-Q3O=K7dGGNNfGoQR3a1x@Y|78()FO&od9`4miUWy(RL$lvfI$o&p z8_^NWV1GE?q>>m4la{1|r_-<4kKx(g!yc30FLq`$iN8$U63o9$H=Nu!X)yXIup{{> zL-M(uV zxzAX(af9{aJ<%SfvGlf$kw?7}4bFB6N5(d7aLcjuV6+=&*V*`d&FA-7(dk1a+X}JZ zL@MK28ay&Kk_-g*vDr3kH-f3dRq2V|vE)8NXHoTMka1y_#`S0LXK=;xCyp>u?@_&^ z3(X*6P`7C-W2TKoW3cP^NE<6pA2ULL&Vt*ls!k*nyC6)+d!2Dph9!hO!7l$iCTE%$ zUbJ$bbiBxUs%uJQBg7hyi=TX1-0Ob72Zn5%=kdSDe<2%=TCbsz*Q zaXXW@PGAN&|9@nI?> zSFk5%>Ph~DBR+1JUF8%Zg=)i-O2HC*T%V){kDbXSItnhfqzWx8I<)PcS4lh1S0dB) zZQSB1Y$w)F=QeaG4<>yQ>}xF-+sj0_T7DMBag?yeYWrvUJ9dQ;&xJ?klk+=idZt7j zt`6?7+%jB;0?o#ZamL0vjX@?cIAe*i0t30QO5Rq5)JHjnsBHM-bjQA6o3g(B6ZWmjA(hUga6`r-ZC$bSv(Tg}Q>IA8 zr8`xp{xKwE>qc1zN9G2r^G%?qWRS^xBGIjO0 zWzUK*$nXIVSW4o1YF#5oUJrI9W-2WnoHsi07fpZWzH-^%n69$JSnZFG+^q5o8%l4G z$E;?}_I~Cwwj<=?I+etTCNiEal6YS|RC|a*Vb7N*f^pbbQS;Tw`=Z3YaXd_1b*;iB zEzSVr`vyBt&$A7L1W?=Zdzxl9{HB}stOaXdKzGg;vlC(@{OU&O2^Nm8$?Dh-1vbF>&^^=-1b)AlBE&x!m#!UCUh-Q*Cxsdu@NE+nz_x zo$eKZGxmTMSPdn1*6SDBD`Wx>xE$IX>fKiF?--sDzqoQvN#Ai+6aMv1N#1RP;Is4L zV@2i9nya#u@;81bb2sW$A2N(;%9RJmZdg`(6GQBH0+fcl-5kfY{O9V1P1EX}d3THn zmDbsf;|SW$FfSgmHXX#kOm6yR{Au=`L1a6EfoL|4kCc3_+_#zns>~hgVvy15@juMh z)sSb?EW6GbzrHUZLTgTfy{L!apC^}8`sR>W35)HdN=&(1GAsYA0nbgLXAmgzaGGvk zCfkDyQJT|JfY zwXzuU9=U+Aw-H3%q53a&pfoS zOuf=j-2TH7+$OQS;z_5mlPxRF9qk{h+kLsiV)P{G{#j}XKI+vR8Ir|({%97Jct zsVl#xLcz-a=9hwYqjhMqlFQO?vz}-aZ6rxj|3~va>9I=%sTJ3fb(3Am*v?x@2anv2 z=y`X(hpA=??Dcu8&> z|9)%f@rc=JHyxyBjgkd3RO?-TpQHA3YpS(p!nkD!pJ8JFKWmC0*u+AiSs(`CM5i|R z&|FQr<23<6!k1fdic*rn^p6WZ*n$Y4OsL3%h9)i!7D(7p%`r&`aY@Pd)Tc#>Kr>^d zMQIk0K+8Ja83ZA57*I_#^-m9VC&I$9=;=e8rMBJW>q@`w(zPdmv;J zLSA=&JOX@qMESDS=V=Ma*ChB~ySIUBw2J1O#zcY31Ki>*p{62D1AjM(_i)TyUS9U+ zqA_eg69hdUt6EgxNf*H77RG`Pih>ywY(TJmAOK<=^<)j2WY)EcC330;@3iW)+w!-l$^sn^+ z1h_dg(nk?soP9BH(G3}S6B-GAnT1<>lkCU)o7OOJqYyNd2`n93hQ|U=;|V)#RN7T0t83ON>hM~ z1z-z!>2wv-iv}NKh-tNTI#rRs^?4ei?K`5Ez=9OtA}o#>ooUGm{F5`1?+QfdKGJ z$o;>Q@QI7k4}u100k78pXqq2kz4Hh37!$TCBPM&CQU9=mmH@nMcC9)o&=DG-Qz#N- zPyc2#Q2ZQQTyks}*8@0WQgB&Ec92BX-y@3Cq=JxX1pN~-Kip=yhxRwO4*|FF=tP5n zjn*!=qraH}EP!LJ5ur(XdTSpy#~Mfl$vV9R7b;6$h-MM3BD(!viNF%nG5$y>Hw%2e+ID6F zP)-6|hI5Zp>-HbX#(~cx#NY}>Er)*We7|F2OJ{WkRqdjpaIPK9xa=c=%3l3iNQs=!JB6l7GT%Op*M{|B*Y9|QmZ diff --git a/docs/index.md b/docs/index.md deleted file mode 100644 index 2255f58c34..0000000000 --- a/docs/index.md +++ /dev/null @@ -1,28 +0,0 @@ -# Argo Events Documentation - -## Why Argo Events? -- Containers. Designed from the ground-up as Kubernetes-native. -- Extremely lightweight. All gateways, with exception of calendar based gateway, are event-driven, meaning there is no polling involved. -- Configurable. Configure gateways at runtime -- Extensible. Write custom gateways for any business use case in the language of your choice -- Scalability & Resilient. -- Simple or Complex dependencies. Manage everything from simple, linear, real-time dependencies to complex, multi-source batch job dependencies. - -## Basics -Argo Events is an open source event-based dependency manager for Kubernetes. The core concept of the project are - * `gateways` which are implemented as a Kubernetes-native Custom Resource Definition that either produce the events internally or process the events that originate from outside the gateway - - * `sensors` which are implemented as a Kubernetes-native Custom Resource Definition that define a set of dependencies - (inputs) and actions (outputs). The sensor's actions will only be triggered after it's dependencies have been resolved. - - Define gateway to support business-level logic for producing events. - - Define multiple dependencies from a variety of sources - - Trigger messages and Kubernetes object creation after successful dependency resolution - - Trigger escalation after errors, or dependency constraint failures - - Build and manage a distributed, cross-team, event-driven architecture - - Easily leverage Kubernetes native APIs to monitor dependencies - -## Learn More -- [Quickstart](quickstart.md) -- [Gateways](gateway-guide.md) -- [Sensors](sensor-guide.md) -- [Triggers](trigger-guide.md) \ No newline at end of file diff --git a/docs/quickstart.md b/docs/quickstart.md index 36551808cd..fe7484fae9 100644 --- a/docs/quickstart.md +++ b/docs/quickstart.md @@ -13,7 +13,7 @@ go get github.com/argoproj/argo-events cd $GOPATH/src/github.com/argoproj/argo-events ``` -## 2. Deploy Argo Events SA, ClusterRoles, ConfigMap, Sensor Controller and Gateway Controller +## 2. Deploy Argo Events SA, Roles, ConfigMap, Sensor Controller and Gateway Controller Note: Modify the [argo-events-cluster-roles.yaml](../hack/k8s/manifests/argo-events-cluster-roles.yaml) file to use the correct namespace that you wish to deploy the sensor controller and gateway controller. ``` @@ -39,12 +39,12 @@ Follow instructions from https://github.com/argoproj/argo/blob/master/demo.md ## 4. Create a webhook gateway ``` kubectl apply -n argo-events -f examples/gateways/webhook-gateway-configmap.yaml -kubectl apply -n argo-events -f examples/gateways/webhook.yaml +kubectl apply -n argo-events -f examples/gateways/webhook-http.yaml ``` ## 5. Create a webhook sensor ``` -kubectl apply -n argo-events -f examples/sensors/webhook.yaml +kubectl apply -n argo-events -f examples/sensors/webhook-http.yaml ``` ## 6. Trigger the webhook & corresponding Argo workflow @@ -52,15 +52,15 @@ Trigger the webhook via sending a http POST request to `/foo` endpoint. You can gateway configuration at run time as well. Note: the `WEBHOOK_SERVICE_URL` will differ based on the Kubernetes cluster. ``` -export WEBHOOK_SERVICE_URL=$(minikube service -n argo-events --url webhook-gateway-gateway-svc) +export WEBHOOK_SERVICE_URL=$(minikube service -n argo-events --url ) echo $WEBHOOK_SERVICE_URL curl -d '{"message":"this is my first webhook"}' -H "Content-Type: application/json" -X POST $WEBHOOK_SERVICE_URL/foo ``` Note: - * If you are facing an issue getting service url by running `minikube service -n argo-events --url webhook-gateway-gateway-svc`, you can use `kubectl port-forward` + * If you are facing an issue getting service url by running `minikube service -n argo-events --url `, you can use `kubectl port-forward` * Open another terminal window and enter `kubectl port-forward -n argo-events 9003:` - * You can now user `localhost:9003` to query webhook gateway + * You can now use `localhost:9003` to query webhook gateway Verify that the Argo workflow was run when the trigger was executed. @@ -68,13 +68,4 @@ Verify that the Argo workflow was run when the trigger was executed. argo list -n argo-events ``` -Verify that the sensor was updated correctly and moved to a "Complete" phase. -``` -kubectl get sensor -n argo-events webhook-sensor -o yaml -``` - -Check the logs of the sensor-controller pod, gateway-controller, associated gateways and sensors if there are problems. - -## 7. Next steps -* [Follow tutorial on gateways and sensors](tutorial.md) -* Write your first gateway. Follow the tutorial [Custom Gateways](custom-gateway.md). \ No newline at end of file +To debug, check the logs of the sensor-controller pod, gateway-controller, associated gateways and sensors. diff --git a/docs/sensor-fsm.png b/docs/sensor-fsm.png deleted file mode 100644 index f69aaa4c21b0530e823d56032365b46e23ebadb2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 69427 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

X)uo>oGjR;cjU!~Y#UDg|j&;Cw?AuFV|9clS# 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 diff --git a/docs/sensor-guide.md b/docs/sensor-guide.md index cb6837dd4f..461c9428a5 100644 --- a/docs/sensor-guide.md +++ b/docs/sensor-guide.md @@ -1,54 +1,32 @@ -## Sensor Guide - +# Sensor Guide Sensors define a set of dependencies (inputs) and actions (outputs). The sensor's actions will only be triggered after it's dependencies have been resolved. [Sensor examples](https://github.com/argoproj/argo-events/tree/master/examples/sensors) +1. [Specifications](#specifications) +2. [Dependencies](#dependencies) +3. [Triggers](#triggers) +4. [Passing event payload to trigger/s](#passing-event-payload-to-triggers) +5. [Filters](#filters) -### Dependencies -Dependencies(also called signals) are defined as "gateway-name/specific-configuration" -``` -signals: - - name: calendar-gateway/calendar.fooConfig - - name: webhook-gateway/webhook.barConfig -``` +## Specifications +https://github.com/argoproj/argo-events/blob/master/docs/sensor-protocol.md -### Repeating the sensor -Sensor can be configured to rerun by setting repeat property to `true` -``` -spec: - repeat: true -``` +## Dependencies +A sensor can contain list of event dependencies and a dependency is defined as "gateway-name:event-source-name". -### Triggers -Refer [Triggers](trigger-guide.md) guide. +**Note**: If a sensor defines more than one event dependencies then it will wait for all of these events to happen, +then only it will trigger workflow/s. Basically, waiting for event dependencies is a `AND` operation. +## Triggers +Refer [Triggers](trigger-guide.md) guide. -### Event payload -Event payload of any signal can be passed to any trigger. To pass complete payload without applying any filter, -do not set ```path``` -e.g. -```yaml -parameters: - - src: - signal: webhook-gateway/webhook.fooConfig - path: - dest: spec.templates.0.container.args.0 -``` - -Complete example to pass payload from signal to trigger can be found [here](https://github.com/argoproj/argo-events/blob/master/examples/sensors/webhook.yaml) - -To pass a particular field from payload to trigger, set ```path```. e.g. -```yaml -parameters: - - src: - signal: webhook-gateway/webhook.fooConfig - path: name - dest: spec.templates.0.container.args.0 -``` +## Passing event payload to trigger/s +Event payload of any signal can be passed to any trigger. -In above example, the object/value corresponding to key ```name``` will be passed to trigger. +* Pass complete event payload https://github.com/argoproj/argo-events/blob/master/examples/sensors/webhook-with-complete-payload.yaml +* Extract particular key from event payload and pass to trigger https://github.com/argoproj/argo-events/blob/master/examples/sensors/webhook-with-resource-param.yaml -### Filters +## Filters Additionally, you can apply filters on the payload. There are 3 types of filters: @@ -59,7 +37,7 @@ There are 3 types of filters: | EventContext | Filters metadata that provides circumstantial information about the signal. | | Data | Describes constraints and filters for payload | -#### Time Filter +### Time Filter ``` filters: time: @@ -67,7 +45,7 @@ filters: stop: "2020-01-02T15:04:05Z07:00" ``` -#### EventContext Filter +### EventContext Filter ``` filters: context: @@ -76,7 +54,7 @@ filters: contentType: application/json ``` -#### Data filter +### Data filter ``` filters: data: diff --git a/docs/sensor-pod-fsm.png b/docs/sensor-pod-fsm.png deleted file mode 100644 index 9f3d602afcb2072350b574ee207133e189f6c413..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45053 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

al4;&Hj|_hiEHd4rTp+yb8V|oop_1XR_8H! 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

gvao3r1~E7t~= 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 B|5yM3 diff --git a/docs/sensor-protocol.md b/docs/sensor-protocol.md index afef8461b2..f0fd74dbb2 100644 --- a/docs/sensor-protocol.md +++ b/docs/sensor-protocol.md @@ -3,37 +3,32 @@ ## Table of Contents -- [github.com/argoproj/argo-events/pkg/apis/gateway/v1alpha1/generated.proto](#github.com/argoproj/argo-events/pkg/apis/gateway/v1alpha1/generated.proto) - - [ArtifactLocation](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.ArtifactLocation) - - [ConfigmapArtifact](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.ConfigmapArtifact) - - [Data](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.Data) - - [DataFilter](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.DataFilter) - - [EscalationPolicy](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.EscalationPolicy) - - [Event](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.Event) - - [EventContext](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.EventContext) - - [EventContext.ExtensionsEntry](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.EventContext.ExtensionsEntry) - - [EventDependency](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.EventDependency) - - [FileArtifact](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.FileArtifact) - - [GroupVersionKind](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.GroupVersionKind) - - [NodeStatus](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.NodeStatus) - - [ResourceObject](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.ResourceObject) - - [ResourceObject.LabelsEntry](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.ResourceObject.LabelsEntry) - - [ResourceParameter](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.ResourceParameter) - - [ResourceParameterSource](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.ResourceParameterSource) - - [RetryStrategy](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.RetryStrategy) - - [S3Artifact](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.S3Artifact) - - [S3Bucket](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.S3Bucket) - - [S3Filter](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.S3Filter) - - [Sensor](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.Sensor) - - [SensorList](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.SensorList) - - [SensorSpec](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.SensorSpec) - - [SensorStatus](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.SensorStatus) - - [SensorStatus.NodesEntry](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.SensorStatus.NodesEntry) - - [SignalFilter](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.SignalFilter) - - [TimeFilter](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.TimeFilter) - - [Trigger](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.Trigger) - - [URI](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.URI) - - [URLArtifact](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.URLArtifact) +- [github.com/argoproj/argo-events/pkg/apis/sensor/v1alpha1/generated.proto](#github.com/argoproj/argo-events/pkg/apis/sensor/v1alpha1/generated.proto) + - [ArtifactLocation](#github.com.argoproj.argo_events.pkg.apis.sensor.v1alpha1.ArtifactLocation) + - [ConfigmapArtifact](#github.com.argoproj.argo_events.pkg.apis.sensor.v1alpha1.ConfigmapArtifact) + - [Data](#github.com.argoproj.argo_events.pkg.apis.sensor.v1alpha1.Data) + - [DataFilter](#github.com.argoproj.argo_events.pkg.apis.sensor.v1alpha1.DataFilter) + - [EventDependency](#github.com.argoproj.argo_events.pkg.apis.sensor.v1alpha1.EventDependency) + - [EventDependencyFilter](#github.com.argoproj.argo_events.pkg.apis.sensor.v1alpha1.EventDependencyFilter) + - [EventProtocol](#github.com.argoproj.argo_events.pkg.apis.sensor.v1alpha1.EventProtocol) + - [FileArtifact](#github.com.argoproj.argo_events.pkg.apis.sensor.v1alpha1.FileArtifact) + - [GroupVersionKind](#github.com.argoproj.argo_events.pkg.apis.sensor.v1alpha1.GroupVersionKind) + - [Http](#github.com.argoproj.argo_events.pkg.apis.sensor.v1alpha1.Http) + - [Nats](#github.com.argoproj.argo_events.pkg.apis.sensor.v1alpha1.Nats) + - [NodeStatus](#github.com.argoproj.argo_events.pkg.apis.sensor.v1alpha1.NodeStatus) + - [ResourceObject](#github.com.argoproj.argo_events.pkg.apis.sensor.v1alpha1.ResourceObject) + - [ResourceObject.LabelsEntry](#github.com.argoproj.argo_events.pkg.apis.sensor.v1alpha1.ResourceObject.LabelsEntry) + - [ResourceParameter](#github.com.argoproj.argo_events.pkg.apis.sensor.v1alpha1.ResourceParameter) + - [ResourceParameterSource](#github.com.argoproj.argo_events.pkg.apis.sensor.v1alpha1.ResourceParameterSource) + - [RetryStrategy](#github.com.argoproj.argo_events.pkg.apis.sensor.v1alpha1.RetryStrategy) + - [Sensor](#github.com.argoproj.argo_events.pkg.apis.sensor.v1alpha1.Sensor) + - [SensorList](#github.com.argoproj.argo_events.pkg.apis.sensor.v1alpha1.SensorList) + - [SensorSpec](#github.com.argoproj.argo_events.pkg.apis.sensor.v1alpha1.SensorSpec) + - [SensorStatus](#github.com.argoproj.argo_events.pkg.apis.sensor.v1alpha1.SensorStatus) + - [SensorStatus.NodesEntry](#github.com.argoproj.argo_events.pkg.apis.sensor.v1alpha1.SensorStatus.NodesEntry) + - [TimeFilter](#github.com.argoproj.argo_events.pkg.apis.sensor.v1alpha1.TimeFilter) + - [Trigger](#github.com.argoproj.argo_events.pkg.apis.sensor.v1alpha1.Trigger) + - [URLArtifact](#github.com.argoproj.argo_events.pkg.apis.sensor.v1alpha1.URLArtifact) @@ -43,14 +38,14 @@ - +

Top

-## github.com/argoproj/argo-events/pkg/apis/gateway/v1alpha1/generated.proto +## github.com/argoproj/argo-events/pkg/apis/sensor/v1alpha1/generated.proto - + ### ArtifactLocation ArtifactLocation describes the source location for an external artifact @@ -58,18 +53,18 @@ ArtifactLocation describes the source location for an external artifact | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| s3 | [S3Artifact](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.S3Artifact) | optional | | +| s3 | [github.com.argoproj.argo_events.pkg.apis.common.S3Artifact](#github.com.argoproj.argo_events.pkg.apis.common.S3Artifact) | optional | | | inline | [string](#string) | optional | | -| file | [FileArtifact](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.FileArtifact) | optional | | -| url | [URLArtifact](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.URLArtifact) | optional | | -| configmap | [ConfigmapArtifact](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.ConfigmapArtifact) | optional | | +| file | [FileArtifact](#github.com.argoproj.argo_events.pkg.apis.sensor.v1alpha1.FileArtifact) | optional | | +| url | [URLArtifact](#github.com.argoproj.argo_events.pkg.apis.sensor.v1alpha1.URLArtifact) | optional | | +| configmap | [ConfigmapArtifact](#github.com.argoproj.argo_events.pkg.apis.sensor.v1alpha1.ConfigmapArtifact) | optional | | - + ### ConfigmapArtifact ConfigmapArtifact contains information about artifact in k8 configmap @@ -86,7 +81,7 @@ ConfigmapArtifact contains information about artifact in k8 configmap - + ### Data @@ -94,15 +89,14 @@ ConfigmapArtifact contains information about artifact in k8 configmap | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| filters | [DataFilter](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.DataFilter) | repeated | filter constraints | -| escalationPolicy | [EscalationPolicy](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.EscalationPolicy) | optional | EscalationPolicy is the escalation to trigger in case the eventDependency filter fails | +| filters | [DataFilter](#github.com.argoproj.argo_events.pkg.apis.sensor.v1alpha1.DataFilter) | repeated | filter constraints | - + ### DataFilter DataFilter describes constraints and filters for event data @@ -115,164 +109,162 @@ See Rob Pike's Post: https://commandcenter.blogspot.com/2011/08/regular-expr | path | [string](#string) | optional | Path is the JSONPath of the event's (JSON decoded) data key Path is a series of keys separated by a dot. A key may contain wildcard characters '*' and '?'. To access an array value use the index as the key. The dot and wildcard characters can be escaped with '\\'. See https://github.com/tidwall/gjson#path-syntax for more information on how to use this. | | type | [string](#string) | optional | Type contains the JSON type of the data | | value | [string](#string) | optional | Value is the expected string value for this key Booleans are pased using strconv.ParseBool() Numbers are parsed using as float64 using strconv.ParseFloat() Strings are taken as is Nils this value is ignored | -| escalationPolicy | [EscalationPolicy](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.EscalationPolicy) | optional | EscalationPolicy is the escalation to trigger in case the eventDependency filter fails | - + -### EscalationPolicy -EscalationPolicy describes the policy for escalating sensors in an Error state. -An escalation policy is associated with eventDependency filter. Whenever a eventDependency filter fails -escalation will be triggered +### EventDependency +EventDependency describes a dependency | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| name | [string](#string) | optional | Name is name of the escalation policy This is referred by eventDependency filter/s | -| level | [string](#string) | optional | Level is the degree of importance | -| message | [string](#string) | optional | need someway to progressively get more serious notifications | +| name | [string](#string) | optional | Name is a unique name of this dependency | +| deadline | [int64](#int64) | optional | Deadline is the duration in seconds after the StartedAt time of the sensor after which this event is terminated. Note: this functionality is not yet respected, but it's theoretical behavior is as follows: This trumps the recurrence patterns of calendar events and allows any event to have a strict defined life. After the deadline is reached and this event has not in a Resolved state, this event is marked as Failed and proper escalations should proceed. | +| filters | [EventDependencyFilter](#github.com.argoproj.argo_events.pkg.apis.sensor.v1alpha1.EventDependencyFilter) | optional | Filters and rules governing tolerations of success and constraints on the context and data of an event | +| connected | [bool](#bool) | optional | Connected tells if subscription is already setup in case of nats protocol. | - + -### Event -Event is a data record expressing an occurrence and its context. -Adheres to the CloudEvents v0.1 specification +### EventDependencyFilter +EventDependencyFilter defines filters and constraints for a event. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| context | [EventContext](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.EventContext) | optional | | -| data | [bytes](#bytes) | optional | | +| name | [string](#string) | optional | Name is the name of event filter | +| time | [TimeFilter](#github.com.argoproj.argo_events.pkg.apis.sensor.v1alpha1.TimeFilter) | optional | Time filter on the event with escalation | +| context | [github.com.argoproj.argo_events.pkg.apis.common.EventContext](#github.com.argoproj.argo_events.pkg.apis.common.EventContext) | optional | Context filter constraints with escalation | +| data | [Data](#github.com.argoproj.argo_events.pkg.apis.sensor.v1alpha1.Data) | optional | Data filter constraints with escalation | - + -### EventContext -EventContext contains metadata that provides circumstantial information about the occurrence. +### EventProtocol +EventProtocol contains configuration necessary to receieve an event from gateway over different communication protocols | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| eventType | [string](#string) | optional | The type of occurrence which has happened. Often this attribute is used for routing, observability, policy enforcement, etc. should be prefixed with a reverse-DNS name. The prefixed domain dictates the organization which defines the semantics of this event type. ex: com.github.pull.create | -| eventTypeVersion | [string](#string) | optional | The version of the eventType. Enables the interpretation of data by eventual consumers, requires the consumer to be knowledgeable about the producer. | -| cloudEventsVersion | [string](#string) | optional | The version of the CloudEvents specification which the event uses. Enables the interpretation of the context. | -| source | [URI](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.URI) | optional | This describes the event producer. | -| eventID | [string](#string) | optional | ID of the event. The semantics are explicitly undefined to ease the implementation of producers. Enables deduplication. Must be unique within scope of producer. | -| eventTime | [k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime](#k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime) | optional | Timestamp of when the event happened. Must adhere to format specified in RFC 3339. +k8s:openapi-gen=false | -| schemaURL | [URI](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.URI) | optional | A link to the schema that the data attribute adheres to. Must adhere to the format specified in RFC 3986. | -| contentType | [string](#string) | optional | Content type of the data attribute value. Enables the data attribute to carry any type of content, whereby format and encoding might differ from that of the chosen event format. For example, the data attribute may carry an XML or JSON payload and the consumer is informed by this attribute being set to "application/xml" or "application/json" respectively. | -| extensions | [EventContext.ExtensionsEntry](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.EventContext.ExtensionsEntry) | repeated | This is for additional metadata and does not have a mandated structure. Enables a place for custom fields a producer or middleware might want to include and provides a place to test metadata before adding them to the CloudEvents specification. | -| escalationPolicy | [EscalationPolicy](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.EscalationPolicy) | optional | EscalationPolicy is the name of escalation policy to trigger in case the eventDependency filter fails | +| type | [string](#string) | optional | Type defines the type of protocol over which events will be receieved | +| http | [Http](#github.com.argoproj.argo_events.pkg.apis.sensor.v1alpha1.Http) | optional | Http contains the information required to setup a http server and listen to incoming events | +| nats | [Nats](#github.com.argoproj.argo_events.pkg.apis.sensor.v1alpha1.Nats) | optional | Nats contains the information required to connect to nats server and get subscriptions | - - -### EventContext.ExtensionsEntry + +### FileArtifact +FileArtifact contains information about an artifact in a filesystem | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| key | [string](#string) | optional | | -| value | [string](#string) | optional | | +| path | [string](#string) | optional | | - + -### EventDependency -EventDependency describes a dependency +### GroupVersionKind +GroupVersionKind unambiguously identifies a kind. It doesn't anonymously include GroupVersion +to avoid automatic coercion. It doesn't use a GroupVersion to avoid custom marshalling. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| name | [string](#string) | optional | Name is a unique name of this dependency | -| deadline | [int64](#int64) | optional | Deadline is the duration in seconds after the StartedAt time of the gateway after which this eventDependency is terminated. Note: this functionality is not yet respected, but it's theoretical behavior is as follows: This trumps the recurrence patterns of calendar signals and allows any eventDependency to have a strict defined life. After the deadline is reached and this eventDependency has not in a Resolved state, this eventDependency is marked as Failed and proper escalations should proceed. | -| filters | [SignalFilter](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.SignalFilter) | optional | Filters and rules governing tolerations of success and constraints on the context and data of an event | +| group | [string](#string) | optional | | +| version | [string](#string) | optional | | +| kind | [string](#string) | optional | | - + -### FileArtifact -FileArtifact contains information about an artifact in a filesystem +### Http +Http contains the information required to setup a http server and listen to incoming events | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| path | [string](#string) | optional | | +| port | [string](#string) | optional | Port on which server will run | - + -### GroupVersionKind -GroupVersionKind unambiguously identifies a kind. It doesn't anonymously include GroupVersion -to avoid automatic coercion. It doesn't use a GroupVersion to avoid custom marshalling. +### Nats +Nats contains the information required to connect to nats server and get subscriptions | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| group | [string](#string) | optional | | -| version | [string](#string) | optional | | -| kind | [string](#string) | optional | | +| url | [string](#string) | optional | URL is nats server/service URL | +| startWithLastReceived | [bool](#bool) | optional | Subscribe starting with most recently published value. Refer https://github.com/nats-io/go-nats-streaming | +| deliverAllAvailable | [bool](#bool) | optional | Receive all stored values in order. | +| startAtSequence | [string](#string) | optional | Receive messages starting at a specific sequence number | +| startAtTime | [string](#string) | optional | Subscribe starting at a specific time | +| startAtTimeDelta | [string](#string) | optional | Subscribe starting a specific amount of time in the past (e.g. 30 seconds ago) | +| durable | [bool](#bool) | optional | Durable subscriptions allow clients to assign a durable name to a subscription when it is created | +| clusterId | [string](#string) | optional | The NATS Streaming cluster ID | +| clientId | [string](#string) | optional | The NATS Streaming cluster ID | +| type | [string](#string) | optional | Type of the connection. either standard or streaming | - + ### NodeStatus -NodeStatus describes the status for an individual node in the gateway's FSM. -A single node can represent the status for eventDependency or a trigger. +NodeStatus describes the status for an individual node in the sensor's FSM. +A single node can represent the status for event or a trigger. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| id | [string](#string) | optional | ID is a unique identifier of a node within a gateway It is a hash of the node name | +| id | [string](#string) | optional | ID is a unique identifier of a node within a sensor It is a hash of the node name | | name | [string](#string) | optional | Name is a unique name in the node tree used to generate the node ID | | displayName | [string](#string) | optional | DisplayName is the human readable representation of the node | | type | [string](#string) | optional | Type is the type of the node | | phase | [string](#string) | optional | Phase of the node | -| startedAt | [k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime](#k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime) | optional | StartedAt is the time at which this node started +k8s:openapi-gen=false | -| completedAt | [k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime](#k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime) | optional | CompletedAt is the time at which this node completed +k8s:openapi-gen=false | -| message | [string](#string) | optional | store data or something to save for eventDependency notifications or trigger events | -| latestEvent | [Event](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.Event) | optional | Event stores the last seen event for this node | +| startedAt | [k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime](#k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime) | optional | StartedAt is the time at which this node started | +| completedAt | [k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime](#k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime) | optional | CompletedAt is the time at which this node completed | +| message | [string](#string) | optional | store data or something to save for event notifications or trigger events | +| event | [github.com.argoproj.argo_events.pkg.apis.common.Event](#github.com.argoproj.argo_events.pkg.apis.common.Event) | optional | Event stores the last seen event for this node | - + ### ResourceObject ResourceObject is the resource object to create on kubernetes @@ -280,18 +272,18 @@ ResourceObject is the resource object to create on kubernetes | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| groupVersionKind | [GroupVersionKind](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.GroupVersionKind) | optional | The unambiguous kind of this object - used in order to retrieve the appropriate kubernetes api client for this resource | -| namespace | [string](#string) | optional | Namespace in which to create this object optional defaults to the service account namespace | -| source | [ArtifactLocation](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.ArtifactLocation) | optional | Source of the K8 resource file(s) | -| labels | [ResourceObject.LabelsEntry](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.ResourceObject.LabelsEntry) | repeated | Map of string keys and values that can be used to organize and categorize (scope and select) objects. This overrides any labels in the unstructured object with the same key. | -| parameters | [ResourceParameter](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.ResourceParameter) | repeated | Parameters is the list of resource parameters to pass in the object | +| groupVersionKind | [GroupVersionKind](#github.com.argoproj.argo_events.pkg.apis.sensor.v1alpha1.GroupVersionKind) | optional | The unambiguous kind of this object - used in order to retrieve the appropriate kubernetes api client for this resource | +| namespace | [string](#string) | optional | Namespace in which to create this object defaults to the service account namespace | +| source | [ArtifactLocation](#github.com.argoproj.argo_events.pkg.apis.sensor.v1alpha1.ArtifactLocation) | optional | Source of the K8 resource file(s) | +| labels | [ResourceObject.LabelsEntry](#github.com.argoproj.argo_events.pkg.apis.sensor.v1alpha1.ResourceObject.LabelsEntry) | repeated | Map of string keys and values that can be used to organize and categorize (scope and select) objects. This overrides any labels in the unstructured object with the same key. | +| parameters | [ResourceParameter](#github.com.argoproj.argo_events.pkg.apis.sensor.v1alpha1.ResourceParameter) | repeated | Parameters is the list of resource parameters to pass in the object | - + ### ResourceObject.LabelsEntry @@ -307,7 +299,7 @@ ResourceObject is the resource object to create on kubernetes - + ### ResourceParameter ResourceParameter indicates a passed parameter to a service template @@ -315,7 +307,7 @@ ResourceParameter indicates a passed parameter to a service template | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| src | [ResourceParameterSource](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.ResourceParameterSource) | optional | Src contains a source reference to the value of the resource parameter from a eventDependency event | +| src | [ResourceParameterSource](#github.com.argoproj.argo_events.pkg.apis.sensor.v1alpha1.ResourceParameterSource) | optional | Src contains a source reference to the value of the resource parameter from a event event | | dest | [string](#string) | optional | Dest is the JSONPath of a resource key. A path is a series of keys separated by a dot. The colon character can be escaped with '.' The -1 key can be used to append a value to an existing array. See https://github.com/tidwall/sjson#path-syntax for more information about how this is used. | @@ -323,15 +315,15 @@ ResourceParameter indicates a passed parameter to a service template - + ### ResourceParameterSource -ResourceParameterSource defines the source for a resource parameter from a eventDependency event +ResourceParameterSource defines the source for a resource parameter from a event event | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| eventDependency | [string](#string) | optional | EventDependency is the name of the eventDependency for which to retrieve this event | +| event | [string](#string) | optional | Event is the name of the event for which to retrieve this event | | path | [string](#string) | optional | Path is the JSONPath of the event's (JSON decoded) data key Path is a series of keys separated by a dot. A key may contain wildcard characters '*' and '?'. To access an array value use the index as the key. The dot and wildcard characters can be escaped with '\\'. See https://github.com/tidwall/gjson#path-syntax for more information on how to use this. | | value | [string](#string) | optional | Value is the default literal value to use for this parameter source This is only used if the path is invalid. If the path is invalid and this is not defined, this param source will produce an error. | @@ -340,7 +332,7 @@ ResourceParameterSource defines the source for a resource parameter from a event - + ### RetryStrategy RetryStrategy represents a strategy for retrying operations @@ -351,64 +343,10 @@ TODO: implement me - - -### S3Artifact -S3Artifact contains information about an artifact in S3 - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| s3Bucket | [S3Bucket](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.S3Bucket) | optional | | -| key | [string](#string) | optional | | -| event | [string](#string) | optional | | -| filter | [S3Filter](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.S3Filter) | optional | | - - - - - - - - -### S3Bucket -S3Bucket contains information for an S3 Bucket - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| endpoint | [string](#string) | optional | | -| bucket | [string](#string) | optional | | -| region | [string](#string) | optional | | -| insecure | [bool](#bool) | optional | | -| accessKey | [k8s.io.api.core.v1.SecretKeySelector](#k8s.io.api.core.v1.SecretKeySelector) | optional | +k8s:openapi-gen=false | -| secretKey | [k8s.io.api.core.v1.SecretKeySelector](#k8s.io.api.core.v1.SecretKeySelector) | optional | +k8s:openapi-gen=false | - - - - - - - - -### S3Filter -S3Filter represents filters to apply to bucket nofifications for specifying constraints on objects - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| prefix | [string](#string) | optional | | -| suffix | [string](#string) | optional | | - - - - - - - + ### Sensor -Sensor is the definition of a gateway resource +Sensor is the definition of a sensor resource +genclient +genclient:noStatus +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object @@ -417,16 +355,16 @@ Sensor is the definition of a gateway resource | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| metadata | [k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta](#k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta) | optional | +k8s:openapi-gen=false | -| spec | [SensorSpec](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.SensorSpec) | optional | | -| status | [SensorStatus](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.SensorStatus) | optional | | +| metadata | [k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta](#k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta) | optional | | +| spec | [SensorSpec](#github.com.argoproj.argo_events.pkg.apis.sensor.v1alpha1.SensorSpec) | optional | | +| status | [SensorStatus](#github.com.argoproj.argo_events.pkg.apis.sensor.v1alpha1.SensorStatus) | optional | | - + ### SensorList SensorList is the list of Sensor resources @@ -435,52 +373,53 @@ SensorList is the list of Sensor resources | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| metadata | [k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta](#k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta) | optional | +k8s:openapi-gen=false | -| items | [Sensor](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.Sensor) | repeated | | +| metadata | [k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta](#k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta) | optional | | +| items | [Sensor](#github.com.argoproj.argo_events.pkg.apis.sensor.v1alpha1.Sensor) | repeated | | - + ### SensorSpec -SensorSpec represents desired gateway state +SensorSpec represents desired sensor state | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| dependencies | [EventDependency](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.EventDependency) | repeated | EventDependency is a list of the events that this gateway is dependent on. | -| triggers | [Trigger](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.Trigger) | repeated | Triggers is a list of the things that this gateway evokes. These are the outputs from this gateway. | -| deploySpec | [k8s.io.api.core.v1.PodSpec](#k8s.io.api.core.v1.PodSpec) | optional | DeploySpec contains gateway pod specification. For more information, read https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.11/#pod-v1-core | +| dependencies | [EventDependency](#github.com.argoproj.argo_events.pkg.apis.sensor.v1alpha1.EventDependency) | repeated | Dependencies is a list of the events that this sensor is dependent on. | +| triggers | [Trigger](#github.com.argoproj.argo_events.pkg.apis.sensor.v1alpha1.Trigger) | repeated | Triggers is a list of the things that this sensor evokes. These are the outputs from this sensor. | +| deploySpec | [k8s.io.api.core.v1.PodSpec](#k8s.io.api.core.v1.PodSpec) | optional | DeploySpec contains sensor pod specification. For more information, read https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.11/#pod-v1-core | +| eventProtocol | [EventProtocol](#github.com.argoproj.argo_events.pkg.apis.sensor.v1alpha1.EventProtocol) | optional | EventProtocol is the protocol through which sensor receives events from gateway | - + ### SensorStatus -SensorStatus contains information about the status of a gateway. +SensorStatus contains information about the status of a sensor. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| phase | [string](#string) | optional | Phase is the high-level summary of the gateway | -| startedAt | [k8s.io.apimachinery.pkg.apis.meta.v1.Time](#k8s.io.apimachinery.pkg.apis.meta.v1.Time) | optional | StartedAt is the time at which this gateway was initiated +k8s:openapi-gen=false | -| completedAt | [k8s.io.apimachinery.pkg.apis.meta.v1.Time](#k8s.io.apimachinery.pkg.apis.meta.v1.Time) | optional | CompletedAt is the time at which this gateway was completed +k8s:openapi-gen=false | -| completionCount | [int32](#int32) | optional | CompletionCount is the count of gateway's successful runs. | -| message | [string](#string) | optional | Message is a human readable string indicating details about a gateway in its phase | -| nodes | [SensorStatus.NodesEntry](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.SensorStatus.NodesEntry) | repeated | Nodes is a mapping between a node ID and the node's status it records the states for the FSM of this gateway. | +| phase | [string](#string) | optional | Phase is the high-level summary of the sensor | +| startedAt | [k8s.io.apimachinery.pkg.apis.meta.v1.Time](#k8s.io.apimachinery.pkg.apis.meta.v1.Time) | optional | StartedAt is the time at which this sensor was initiated | +| completedAt | [k8s.io.apimachinery.pkg.apis.meta.v1.Time](#k8s.io.apimachinery.pkg.apis.meta.v1.Time) | optional | CompletedAt is the time at which this sensor was completed | +| completionCount | [int32](#int32) | optional | CompletionCount is the count of sensor's successful runs. | +| message | [string](#string) | optional | Message is a human readable string indicating details about a sensor in its phase | +| nodes | [SensorStatus.NodesEntry](#github.com.argoproj.argo_events.pkg.apis.sensor.v1alpha1.SensorStatus.NodesEntry) | repeated | Nodes is a mapping between a node ID and the node's status it records the states for the FSM of this sensor. | - + ### SensorStatus.NodesEntry @@ -489,52 +428,33 @@ SensorStatus contains information about the status of a gateway. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | key | [string](#string) | optional | | -| value | [NodeStatus](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.NodeStatus) | optional | | - - +| value | [NodeStatus](#github.com.argoproj.argo_events.pkg.apis.sensor.v1alpha1.NodeStatus) | optional | | - -### SignalFilter -SignalFilter defines filters and constraints for a eventDependency. - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| name | [string](#string) | optional | Name is the name of eventDependency filter | -| time | [TimeFilter](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.TimeFilter) | optional | Time filter on the eventDependency with escalation | -| context | [EventContext](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.EventContext) | optional | Context filter constraints with escalation | -| data | [Data](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.Data) | optional | Data filter constraints with escalation | - - - - - - - + ### TimeFilter TimeFilter describes a window in time. -Filters out eventDependency events that occur outside the time limits. +Filters out event events that occur outside the time limits. In other words, only events that occur after Start and before Stop will pass this filter. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| start | [string](#string) | optional | Start is the beginning of a time window. Before this time, events for this eventDependency are ignored and format is hh:mm:ss | -| stop | [string](#string) | optional | StopPattern is the end of a time window. After this time, events for this eventDependency are ignored and format is hh:mm:ss | -| escalationPolicy | [EscalationPolicy](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.EscalationPolicy) | optional | EscalationPolicy is the escalation to trigger in case the eventDependency filter fails | +| start | [string](#string) | optional | Start is the beginning of a time window. Before this time, events for this event are ignored and format is hh:mm:ss | +| stop | [string](#string) | optional | StopPattern is the end of a time window. After this time, events for this event are ignored and format is hh:mm:ss | - + ### Trigger Trigger is an action taken, output produced, an event created, a message sent @@ -543,38 +463,16 @@ Trigger is an action taken, output produced, an event created, a message sent | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | name | [string](#string) | optional | Name is a unique name of the action to take | -| resource | [ResourceObject](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.ResourceObject) | optional | Resource describes the resource that will be created by this action | +| resource | [ResourceObject](#github.com.argoproj.argo_events.pkg.apis.sensor.v1alpha1.ResourceObject) | optional | Resource describes the resource that will be created by this action | | message | [string](#string) | optional | Message describes a message that will be sent on a queue | -| replyStrategy | [RetryStrategy](#github.com.argoproj.argo_events.pkg.apis.gateway.v1alpha1.RetryStrategy) | optional | RetryStrategy is the strategy to retry a trigger if it fails | - - - - - - - - -### URI -URI is a Uniform Resource Identifier based on RFC 3986 - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| scheme | [string](#string) | optional | | -| user | [string](#string) | optional | | -| password | [string](#string) | optional | | -| host | [string](#string) | optional | | -| port | [int32](#int32) | optional | | -| path | [string](#string) | optional | | -| query | [string](#string) | optional | | -| fragment | [string](#string) | optional | | +| replyStrategy | [RetryStrategy](#github.com.argoproj.argo_events.pkg.apis.sensor.v1alpha1.RetryStrategy) | optional | RetryStrategy is the strategy to retry a trigger if it fails | - + ### URLArtifact URLArtifact contains information about an artifact at an http endpoint. diff --git a/docs/trigger-guide.md b/docs/trigger-guide.md index 14688e9f6f..4bda075962 100644 --- a/docs/trigger-guide.md +++ b/docs/trigger-guide.md @@ -1,25 +1,12 @@ -# Trigger Guide +# Triggers Triggers are the sensor's actions. Triggers are only executed after all of the sensor's signals have been resolved. -The `resource` field in the trigger object has details of what to execute when the signals have been resolved. The `source` field in the `resource` object can have 3 types of values: - -- inline: -In this case, the workflow to execute as part of the trigger is inlined in the sensor yaml itself. E.g. [inline-sensor](https://github.com/argoproj/argo-events/blob/master/examples/sensors/inline-sensor.yaml) - -- file: -In this case, the workflow to execute is specified as a file-system path. This file-system path should exist in the sensor-controller deployment. The default sensor-controller does not have any volume mounts and therefore does not have any workflow yamls. If users are going to use this, they should explicitly mount appropriate volumes in the sensor-controller deployment. E.g. [file-sensor](https://github.com/argoproj/argo-events/blob/master/examples/sensors/file-sensor.yaml) - -- url: -In this case, the workflow to execute is specified as a url path. E.g. [url-sensor](https://github.com/argoproj/argo-events/blob/master/examples/sensors/url-sensor.yaml) - - +The `resource` field in the trigger object has details of what to execute when the signals have been resolved. Refer to https://github.com/argoproj/argo-events/blob/master/docs/artifact-guide.md ### Resource Object Resources define a YAML or JSON K8 resource. The set of currently resources supported are implemented in the `store` package. Adding support for new resources is as simple as including the type you want to create in the store's `decodeAndUnstructure()` method. We hope to change this functionality so that permissions for CRUD operations against certain resources can be controlled through RBAC roles instead. -List of currently supported K8 Resources: +List of currently supported custom K8 Resources: - Gateway - Sensor - [Workflow](https://github.com/argoproj/argo) -### Messages -Messages define content and a stream queue resource on which to send the content. \ No newline at end of file diff --git a/docs/tutorial.md b/docs/tutorial.md deleted file mode 100644 index fe3a9a5f67..0000000000 --- a/docs/tutorial.md +++ /dev/null @@ -1,1080 +0,0 @@ -# Guide - -1. [What are sensor and gateway controllers](controllers-guide.md) -2. [Learn about gateways](gateway-guide.md) -3. [Learn about sensors](sensor-guide.md) -4. [Learn about triggers](trigger-guide.md) -5. [Install gateways and sensors](#gands) - 1. [Webhook](#webhook) - 2. [Artifact](#artifact) - 3. [Calendar](#calendar) - 4. [Resource](#resource) - 5. [Streams](#streams) - 1. [Nats](#nats) - 2. [Kafka](#kafka) - 3. [MQTT](#mqtt) - 4. [AMQP](#amqp) -6. [Updating gateway configurations dynamically](#updating-configurations) -7. [Passing payload from signal to trigger](#passing-payload-from-signal-to-trigger) -8. [Sensor filters](#sensor-filters) -9. [Writing custom gateways](custom-gateway.md) - -## Install gateways and sensors - -## Webhook - -Webhook gateway is useful when you want to listen to an incoming HTTP request and forward that event to watchers. - -1)
Let's have a look at the configuration for our gateway.
- - ```yaml - apiVersion: v1 - kind: ConfigMap - metadata: - name: webhook-gateway-configmap - data: - # run http server on 12000 - webhook.portConfig: |- - port: "12000" - # listen to /bar endpoint for POST requests - webhook.barConfig: |- - endpoint: "/bar" - method: "POST" - # listen to /foo endpoint for POST requests - webhook.fooConfig: |- - endpoint: "/foo" - method: "POST" - ``` - - 1) This configmap contains multiple configurations. First configuration describes on which port HTTP server should run. Currently, the gateway - can only start one HTTP server and all endpoints will be registered with this server. But in future, we plan to add support to - spin up multiple HTTP servers and give ability to user to register endpoints to different servers. - - 2) Second configuration describes an endpoint called `/bar` that will be registered with HTTP server. The `method` describes which HTTP method - is allowed for a request. In this case only incoming HTTP POST requests will be accepted on `/bar`. - - 3) Third configuration has endpoint `/foo` and accepts requests with method POST. - -
Lets go ahead and create above configmap,
- - ```bash - kubectl create -n argo-events -f https://raw.githubusercontent.com/argoproj/argo-events/master/examples/gateways/webhook-gateway-configmap.yaml - ``` - - ```bash - # Make sure that configmap is created in `argo-events` namespace - - kubectl -n argo-events get configmaps webhook-gateway-configmap - ``` - -2)
Next step is to create the webhook gateway,
- - 1. Gateway definition, - ```yaml - apiVersion: argoproj.io/v1alpha1 - kind: Gateway - metadata: - # name of the gateway - name: webhook-gateway - labels: - # must match with instance id of one of the gateway controllers. - gateways.argoproj.io/gateway-controller-instanceid: argo-events - gateway-name: "webhook-gateway" - spec: - # configmap to read configurations from - configMap: "webhook-gateway-configmap" - # type of gateway - type: "webhook" - # event dispatch protocol between gateway and it's watchers - dispatchMechanism: "HTTP" - # version of events this gateway is generating. Required for cloudevents specification - version: "1.0" - # these are pod specifications - deploySpec: - containers: - - name: "webhook-events" - image: "argoproj/webhook-gateway" - imagePullPolicy: "Always" - command: ["/bin/webhook-gateway"] - serviceAccountName: "argo-events-sa" - # service specifications to expose gateway - serviceSpec: - selector: - gateway-name: "webhook-gateway" - ports: - - port: 12000 - targetPort: 12000 - type: LoadBalancer - # watchers are components interested in listening to events produced by this gateway - watchers: - sensors: - - name: "webhook-sensor" - ``` - - 2. Run following command, - ```bash - kubectl create -n argo-events -f https://raw.githubusercontent.com/argoproj/argo-events/master/examples/gateways/webhook.yaml - ``` - - 3. Check all gateway configurations are in `running` state - ```bash - kubectl get -n argo-events gateways webhook-gateway -o yaml - ``` - -3)
Now its time to create webhook sensor.
- 1. Sensor definition, - - ```yaml - apiVersion: argoproj.io/v1alpha1 - kind: Sensor - metadata: - # name of sensor - name: webhook-sensor - labels: - # instance-id must match with one of the deployed sensor controller's instance-id - sensors.argoproj.io/sensor-controller-instanceid: argo-events - spec: - # make this sensor as long running. - repeat: true - serviceAccountName: argo-events-sa - # signals/notifications this sensor is interested in. - signals: - # event must be from webhook-gateway and the configuration that produced this event must be - # webhook.fooConfig - - name: webhook-gateway/webhook.fooConfig - triggers: - - name: webhook-workflow-trigger - resource: - namespace: argo-events - group: argoproj.io - version: v1alpha1 - kind: Workflow - source: - inline: | - apiVersion: argoproj.io/v1alpha1 - kind: Workflow - metadata: - generateName: hello-world- - spec: - entrypoint: whalesay - templates: - - name: whalesay - container: - args: - - "hello world" - command: - - cowsay - image: "docker/whalesay:latest" - ``` - - This sensor defines only one signal called `webhook-gateway/webhook.fooConfig`, meaning, it is interested in listening - events from `webhook.fooConfig` configuration within `webhook-gateway` gateway. - - 2. Run following command, - ```bash - kubectl create -f https://raw.githubusercontent.com/argoproj/argo-events/master/examples/sensors/webhook.yaml - ``` - - 3. Check whether all sensor nodes are initialized, - ```bash - kubectl get -n argo-events sensors webhook-sensor - ``` - - 4. Get the service url for gateway, - ```bash - minikube service --url webhook-gateway-gateway-svc - ``` - - 5. If you face issue getting service url from executing above command, you can use `kubectl port-forward` - 1. Open another terminal window and enter `kubectl port-forward 9003:` - 2. You can now user `localhost:9003` to query webhook gateway - - 6. Send a POST request to the gateway service, and monitor namespace for new workflow - ```bash - curl -d '{"message":"this is my first webhook"}' -H "Content-Type: application/json" -X POST /foo - ``` - - 7. List argo workflows - ```bash - argo -n argo-events list - ``` - -
- -## Artifact -Currently framework supports Minio S3 storage for artifact gateway but we plan to add File System and AWS/GCP S3 gateways in future. - -Lets start with deploying Minio server standalone deployment. You can get the K8 deployment from https://www.minio.io/kubernetes.html - - 1. Minio deployment, store it in `minio-deployment.yaml` - ```yaml - apiVersion: v1 - kind: PersistentVolumeClaim - metadata: - # This name uniquely identifies the PVC. Will be used in deployment below. - name: minio-pv-claim - labels: - app: minio-storage-claim - spec: - # Read more about access modes here: http://kubernetes.io/docs/user-guide/persistent-volumes/#access-modes - accessModes: - - ReadWriteOnce - resources: - # This is the request for storage. Should be available in the cluster. - requests: - storage: 10Gi - # Uncomment and add storageClass specific to your requirements below. Read more https://kubernetes.io/docs/concepts/storage/persistent-volumes/#class-1 - #storageClassName: - --- - apiVersion: extensions/v1beta1 - kind: Deployment - metadata: - # This name uniquely identifies the Deployment - name: minio-deployment - spec: - strategy: - type: Recreate - template: - metadata: - labels: - # Label is used as selector in the service. - app: minio - spec: - # Refer to the PVC created earlier - volumes: - - name: storage - persistentVolumeClaim: - # Name of the PVC created earlier - claimName: minio-pv-claim - containers: - - name: minio - # Pulls the default Minio image from Docker Hub - image: minio/minio - args: - - server - - /storage - env: - # Minio access key and secret key - - name: MINIO_ACCESS_KEY - value: "myaccess" - - name: MINIO_SECRET_KEY - value: "mysecret" - ports: - - containerPort: 9000 - # Mount the volume into the pod - volumeMounts: - - name: storage # must match the volume name, above - mountPath: "/storage" - --- - apiVersion: v1 - kind: Service - metadata: - name: minio-service - spec: - type: LoadBalancer - ports: - - port: 9000 - targetPort: 9000 - protocol: TCP - selector: - app: minio - - ``` - - 2. Install minio, - ```bash - kubectl create -n argo-events -f minio-deployment.yaml - ``` - - 3. Create the configuration, - ```yaml - apiVersion: v1 - kind: ConfigMap - metadata: - name: artifact-gateway-configmap - data: - s3.fooConfig: |- - s3EventConfig: - bucket: input # name of the bucket we want to listen to - endpoint: minio-service.argo-events:9000 # minio service endpoint - event: s3:ObjectCreated:Put # type of event - filter: # filter on object name if any - prefix: "" - suffix: "" - insecure: true # type of minio server deployment - accessKey: - key: accesskey # key within below k8 secret whose corresponding value is name of the accessKey - name: artifacts-minio # k8 secret name that holds minio creds - secretKey: - key: secretkey # key within below k8 secret whose corresponding value is name of the secretKey - name: artifacts-minio # k8 secret name that holds minio creds - ``` - - Read comments on configmap to understand more about each field in configuration - - Run, - ```bash - kubectl create -n argo-events -f https://raw.githubusercontent.com/argoproj/argo-events/master/examples/gateways/artifact-gateway-configmap.yaml - ``` - - 4. Artifact gateway definition, - ```yaml - apiVersion: argoproj.io/v1alpha1 - kind: Gateway - metadata: - name: artifact-gateway - labels: - gateways.argoproj.io/gateway-controller-instanceid: argo-events - gateway-name: "artifact-gateway" - spec: - deploySpec: - containers: - - name: "artifact-events" - image: "argoproj/artifact-gateway" - imagePullPolicy: "Always" - command: ["/bin/artifact-gateway"] - serviceAccountName: "argo-events-sa" - configMap: "artifact-gateway-configmap" - version: "1.0" - type: "artifact" - dispatchMechanism: "HTTP" - watchers: - sensors: - - name: "artifact-sensor" - ``` - - Execute following command to create artifact gateway, - ```bash - kubectl -n argo-events create -f https://raw.githubusercontent.com/argoproj/argo-events/master/examples/gateways/artifact.yaml - ``` - - 5. Check whether all gateway configurations are active, - ```bash - kubectl -n argo-events get gateways artifact-gateway -o yaml - ``` - - 6. Below is the sensor definition, - ```yaml - apiVersion: argoproj.io/v1alpha1 - kind: Sensor - metadata: - name: artifact-sensor - labels: - sensors.argoproj.io/sensor-controller-instanceid: argo-events - spec: - repeat: true - serviceAccountName: argo-events-sa - signals: - - name: artifact-gateway/s3.fooConfig - triggers: - - name: artifact-workflow-trigger - resource: - namespace: argo-events - group: argoproj.io - version: v1alpha1 - kind: Workflow - source: - inline: | - apiVersion: argoproj.io/v1alpha1 - kind: Workflow - metadata: - generateName: hello-world- - spec: - entrypoint: whalesay - templates: - - - container: - args: - - "hello world" - command: - - cowsay - image: "docker/whalesay:latest" - name: whalesay - ``` - - Run, - ```bash - kubectl -n argo-events create -f https://raw.githubusercontent.com/argoproj/argo-events/trigger-param-fix/examples/sensors/s3.yaml - ``` - - Check that all signals and triggers are intialized, - ```bash - kubectl -n argo-events get sensors artifact-sensor -o yaml - ``` - - 7. Drop a file into `input` bucket and monitor namespace for argo workflow. - ```bash - argo -n argo-events list - ``` - -
- -## Calendar -Calendar gateway either accepts `interval` or `cron schedules` as configuration. - - 1. Lets have a look at configuration, - ```bash - apiVersion: v1 - kind: ConfigMap - metadata: - name: calendar-gateway-configmap - data: - calendar.barConfig: |- - interval: 10s - calendar.fooConfig: |- - schedule: 30 * * * * - ``` - - The `barConfig` defines an interval of `10s`, meaning, gateway configuration will run every 10s and send event to watchers. - The `fooConfig` defines a cron schedule `30 * * * *` meaning, gateway configuration will run every 30 min and send event to watchers. - - Run, - ```bash - kubectl -n argo-events create -f https://raw.githubusercontent.com/argoproj/argo-events/master/examples/gateways/calendar-gateway-configmap.yaml - ``` - - 2. Gateway definition, - ```yaml - apiVersion: argoproj.io/v1alpha1 - kind: Gateway - metadata: - name: calendar-gateway - labels: - gateways.argoproj.io/gateway-controller-instanceid: argo-events - gateway-name: "calendar-gateway" - spec: - deploySpec: - containers: - - name: "calendar-events" - image: "argoproj/calendar-gateway" - imagePullPolicy: "Always" - command: ["/bin/calendar-gateway"] - serviceAccountName: "argo-events-sa" - configMap: "calendar-gateway-configmap" - type: "calendar" - dispatchMechanism: "HTTP" - version: "1.0" - watchers: - sensors: - - name: "calendar-sensor" - ``` - - Run, - ```bash - kubectl -n argo-events create -f https://raw.githubusercontent.com/argoproj/argo-events/master/examples/gateways/calendar.yaml - ``` - - Check all configurations are active, - ```bash - kubectl -n argo-events get gateways calendar-gateway -o yaml - ``` - - 3. Sensor definition, - ```yaml - apiVersion: argoproj.io/v1alpha1 - kind: Sensor - metadata: - name: calendar-sensor - labels: - sensors.argoproj.io/sensor-controller-instanceid: argo-events - spec: - serviceAccountName: argo-events-sa - imagePullPolicy: Always - repeat: true - signals: - - name: calendar-gateway/calendar.fooConfig - triggers: - - name: calendar-workflow-trigger - resource: - namespace: argo-events - group: argoproj.io - version: v1alpha1 - kind: Workflow - source: - inline: | - apiVersion: argoproj.io/v1alpha1 - kind: Workflow - metadata: - generateName: hello-world- - spec: - entrypoint: whalesay - templates: - - - container: - args: - - "hello world" - command: - - cowsay - image: "docker/whalesay:latest" - name: whalesay - ``` - - Run, - ```bash - kubectl -n argo-events create -f https://raw.githubusercontent.com/argoproj/argo-events/master/examples/sensors/calendar.yaml - ``` - - 4. List workflows, - ```bash - argo -n argo-events list - ``` - -
- -## Resource -Resource gateway can monitor any K8 resource and any CRD. - - 1. Lets have a look at a configuration, - ```yaml - apiVersion: v1 - kind: ConfigMap - metadata: - name: resource-gateway-configmap - data: - resource.fooConfig: |- - namespace: argo-events - group: "argoproj.io" - version: "v1alpha1" - kind: "Workflow" - filter: - labels: - workflows.argoproj.io/phase: Succeeded - name: "my-workflow" - resource.barConfig: |- - namespace: argo-events - group: "argoproj.io" - version: "v1alpha1" - kind: "Workflow" - filter: - prefix: scripts-bash - labels: - workflows.argoproj.io/phase: Failed - ``` - - * In configuration `resource.fooConfig`, gateway will watch resource of type `Workflow` which is K8 CRD. Whenever a - workflow with name `my-workflow` is assigned label `workflows.argoproj.io/phase: Succeeded`, the configuration will - send an event to watchers. - - * Gateway configuration `resource.barConfig` will send event to watchers whenever a sensor label `workflows.argoproj.io/phase: Failed` is added. - - * You can create more such configurations that watch namespace, configmaps, deployments, pods etc. - - Run, - ```bash - kubectl -n argo-events create -f https://raw.githubusercontent.com/argoproj/argo-events/master/examples/gateways/resource-gateway-configmap.yaml - ``` - - 2. Gateway definition, - ```yaml - apiVersion: argoproj.io/v1alpha1 - kind: Gateway - metadata: - name: resource-gateway - labels: - gateways.argoproj.io/gateway-controller-instanceid: argo-events - gateway-name: "resource-gateway" - spec: - deploySpec: - containers: - - name: "resource-events" - image: "argoproj/resource-gateway" - imagePullPolicy: "Always" - command: ["/bin/resource-gateway"] - serviceAccountName: "argo-events-sa" - configMap: "resource-gateway-configmap" - type: "resource" - dispatchMechanism: "HTTP" - version: "1.0" - watchers: - sensors: - - name: "resource-sensor" - ``` - - Run, - ```bash - kubectl -n argo-events create -f https://raw.githubusercontent.com/argoproj/argo-events/master/examples/gateways/resource.yaml - ``` - - Check all configurations are active, - ```bash - kubectl -n argo-events get gateways resource-gateway -o yaml - ``` - - 3. Sensor definition, - ```yaml - apiVersion: argoproj.io/v1alpha1 - kind: Sensor - metadata: - name: resource-sensor - labels: - sensors.argoproj.io/sensor-controller-instanceid: argo-events - spec: - repeat: true - serviceAccountName: argo-events-sa - signals: - - name: resource-gateway/resource.fooConfig - triggers: - - name: argo-workflow - resource: - namespace: argo-events - group: argoproj.io - version: v1alpha1 - kind: Workflow - source: - inline: | - apiVersion: argoproj.io/v1alpha1 - kind: Workflow - metadata: - generateName: hello-world- - spec: - entrypoint: whalesay - templates: - - - container: - args: - - "hello world" - command: - - cowsay - image: "docker/whalesay:latest" - name: whalesay - - ``` - - Run, - ```bash - kubectl -n argo-events create -f https://raw.githubusercontent.com/argoproj/argo-events/master/examples/sensors/resource.yaml - ``` - - 4. Create an basic `hello-world` argo workflow with name `my-workflow`. - ```yaml - apiVersion: argoproj.io/v1alpha1 - kind: Workflow - metadata: - generateName: hello-world- - namespace: argo-events - labels: - name: my-workflow - spec: - entrypoint: whalesay - serviceAccountName: argo-events-sa - templates: - - container: - args: - - "hello world" - command: - - cowsay - image: docker/whalesay:latest - name: whalesay - ``` - Run - ```bash - kubectl -n argo-events -f https://raw.githubusercontent.com/argoproj/argo/master/examples/hello-world.yaml - ``` - - Once workflow is created, resource sensor will trigger workflow. - - 5. Run `argo -n argo-events list` - -
- -## Streams - * ### NATS - Lets start by installing a NATS cluster - - 1) Store following NATS deployment in nats-deploy.yaml - ```yaml - apiVersion: v1 - kind: Service - metadata: - name: nats - namespace: argo-events - labels: - component: nats - spec: - selector: - component: nats - type: ClusterIP - ports: - - name: client - port: 4222 - - name: cluster - port: 6222 - - name: monitor - port: 8222 - --- - apiVersion: apps/v1beta1 - kind: StatefulSet - metadata: - name: nats - namespace: argo-events - labels: - component: nats - spec: - serviceName: nats - replicas: 1 - template: - metadata: - labels: - component: nats - spec: - serviceAccountName: argo-events-sa - containers: - - name: nats - image: nats:latest - ports: - - containerPort: 4222 - name: client - - containerPort: 6222 - name: cluster - - containerPort: 8222 - name: monitor - livenessProbe: - httpGet: - path: / - port: 8222 - initialDelaySeconds: 10 - timeoutSeconds: 5 - ``` - Run, - ```bash - kubectl -n argo-events create -f nats-deploy.yaml - ``` - - 2) Once all pods are up and running, create gateway configmap, - ```bash - kubectl -n argo-events create -f https://raw.githubusercontent.com/argoproj/argo-events/master/examples/gateways/nats-gateway-configmap.yaml - ``` - - 3) Lets create a sensor, - ```bash - kubectl -n argo-events create -f https://raw.githubusercontent.com/argoproj/argo-events/master/examples/sensors/nats.yaml - ``` - - 4) Lets create gateway, - ```bash - kubectl -n argo-events create -f https://raw.githubusercontent.com/argoproj/argo-events/master/examples/gateways/nats.yaml - ``` - 5) Use nats client to publish message to subject. To install NATS client, head to [go-nats](https://github.com/nats-io/go-nats) - - 6) Once you publish message to a subject the gateway is configured to listen, you will see the argo workflow getting created. - - * ### Kafka - 1) If you don't already have a Kafka cluster running, follow the [kafka setup](https://github.com/helm/charts/tree/master/incubator/kafka) - - 2) Lets create the configuration for gateway, - ```bash - kubectl -n argo-events create -f https://raw.githubusercontent.com/argoproj/argo-events/master/examples/gateways/kafka-gateway-configmap.yaml - ``` - - 3) Once above configmap is created, lets deploy the gateway, - ```bash - kubectl -n argo-events create -f https://raw.githubusercontent.com/argoproj/argo-events/master/examples/gateways/kafka.yaml - ``` - - 4) To create sensor, run - ```bash - kubectl -n argo-events create -f https://raw.githubusercontent.com/argoproj/argo-events/master/examples/sensors/kafka.yaml - ``` - - 5) Publish a message to a topic and partition the gateway is configured to listen, you will see the argo workflow getting created. - - * ### MQTT - 1) If you don't have MQTT broker installed, use `Mosquitto`. - - Deployment, - ```yaml - apiVersion: extensions/v1beta1 - kind: Deployment - metadata: - name: mosquitto - namespace: argo-events - spec: - template: - spec: - serviceAccountName: argo-events-sa - containers: - - name: mosquitto - image: toke/mosquitto - ports: - - containerPort: 9001 - - containerPort: 8883 - ``` - - Service, - ```yaml - apiVersion: v1 - kind: Service - metadata: - name: mqtt - namespace: argo-events - spec: - ports: - - name: mosquitto - port: 1883 - - name: mosquitto-web - port: 80 - targetPort: 9001 - ``` - - 2. Create the gateway configuration, - ```bash - kubectl -n argo-events create -f https://raw.githubusercontent.com/argoproj/argo-events/master/examples/gateways/mqtt-gateway-configmap.yaml - ``` - - 3. Deploy the gateway, - ```bash - kubectl -n argo-events create -f https://raw.githubusercontent.com/argoproj/argo-events/master/examples/gateway/mqtt-gateway.yaml - ``` - - 4. Deploy the sensor, - ```bash - kubectl -n argo-events create -f https://raw.githubusercontent.com/argoproj/argo-events/master/examples/sensors/mqtt-sensor.yaml - ``` - - 5. Send a message to correct topic the gateway is configured to listen, you will see the argo workflow getting created. - - * ### AMQP - 1) If you haven't already setup rabbitmq cluster, follow [rabbitmq setup](https://github.com/binarin/rabbit-on-k8s-standalone) - - 2) Create gateway configuration, - ```bash - kubectl -n argo-events create -f https://raw.githubusercontent.com/argoproj/argo-events/master/examples/gateways/amqp-gateway-configmap.yaml - ``` - - 3) Deploy gateway, - ```bash - kubectl -n argo-events create -f https://raw.githubusercontent.com/argoproj/argo-events/master/examples/gateways/amqp.yaml - ``` - - 4) Deploy sensor, - ```bash - kubectl -n argo-events create -f https://raw.githubusercontent.com/argoproj/argo-events/master/examples/sensors/amqp.yaml - ``` - - 5) Send a message to exchange name the gateway is configured to listen, you will see the argo workflow getting created. - - -
- -## Updating gateway configurations dynamically - The framework offers ability to add and remove configurations for gateway on the fly. - Lets look at an example of webhook gateway. You already have three configurations running in gateway, - `webhook.portConfig`, `webhook.fooConfig` and `webhook.barConfig` - - 1) Lets add a new configuration to gateway configmap. Update configmap looks like, - ```yaml - apiVersion: v1 - kind: ConfigMap - metadata: - name: webhook-gateway-configmap - data: - webhook.portConfig: |- - port: "12000" - webhook.barConfig: |- - endpoint: "/bar" - method: "POST" - webhook.fooConfig: |- - endpoint: "/foo" - method: "POST" - webhook.myNewConfig: |- - endpoint: "/my" - method: "POST" - ``` - Run `kubectl -n argo-events apply -f configmap-file-name` on gateway configmap to update the configmap resource. - - 2) Run `kubectl -n argo-events get gateways webhook-gateway -o yaml`, you'll see gateway now has `webhook.myNewConfig` running. - - 3) Update the webhook sensor or create a new sensor to listen to this new configuration. - - 4) Test the endpoint by firing a HTTP POST request to `/my`. - - 5) Now, lets remove the configuration `webhook.myNewConfig` from gateway configmap. Run `kubectl apply` to update the configmap. - - 6) Check the gateway resource, `kubectl -n argo-events get gateways webhook-gateway -o yaml`. You will see `webhook.myNewConfig` is removed from the gateway. - - 7) Try sending a POST request to '/my' and server will respond with 404. - -
- -## Passing payload from signal to trigger - - * ### Complete payload - - 1. Create a webhook sensor, - ```yaml - apiVersion: argoproj.io/v1alpha1 - kind: Sensor - metadata: - name: webhook-with-resource-param-sensor - labels: - sensors.argoproj.io/sensor-controller-instanceid: argo-events - spec: - repeat: true - serviceAccountName: argo-events-sa - signals: - - name: webhook-gateway/webhook.fooConfig - triggers: - - name: argo-workflow - resource: - namespace: argo-events - group: argoproj.io - version: v1alpha1 - kind: Workflow - parameters: - - src: - signal: webhook-gateway/webhook.fooConfig - # pass payload of webhook-gateway/webhook.fooConfig signal to first parameter value - # of arguments. - dest: spec.arguments.parameters.0.value - source: - inline: | - apiVersion: argoproj.io/v1alpha1 - kind: Workflow - metadata: - name: arguments-via-webhook-event - spec: - entrypoint: whalesay - arguments: - parameters: - - name: message - # this is the value that should be overridden - value: hello world - templates: - - name: whalesay - inputs: - parameters: - - name: message - container: - image: docker/whalesay:latest - command: [cowsay] - args: ["{{inputs.parameters.message}}"] - ``` - - Run, - ```bash - kubectl create -f https://raw.githubusercontent.com/argoproj/argo-events/trigger-param-fix/examples/sensors/webhook-with-complete-payload.yaml - ``` - - 2. Note that sensor name is `webhook-with-resource-param-sensor`. Update your gateway accordingly or create a new one. - - 3. Send a POST request to your webhook gateway - ```bash - curl -d '{"message":"this is my first webhook"}' -H "Content-Type: application/json" -X POST $WEBHOOK_SERVICE_URL/foo - ``` - - 4. List argo workflows, - ```bash - argo -n argo-events list - ``` - - 5. Check the workflow logs using `argo -n argo-events logs ` - - - ## Filter event payload - 1. Create a webhook sensor, - ```yaml - apiVersion: argoproj.io/v1alpha1 - kind: Sensor - metadata: - name: webhook-with-resource-param-sensor - labels: - sensors.argoproj.io/sensor-controller-instanceid: argo-events - spec: - repeat: true - serviceAccountName: argo-events-sa - signals: - - name: webhook-gateway/webhook.fooConfig - triggers: - - name: argo-workflow - resource: - namespace: argo-events - group: argoproj.io - version: v1alpha1 - kind: Workflow - # The parameters from the workflow are overridden by the webhook's message - parameters: - - src: - signal: webhook-gateway/webhook.fooConfig - # extract the object corresponding to `message` key from event payload - # of webhook-gateway/webhook.fooConfig signal - path: message - # if `message` key doesn't exists in event payload then default value of payload - # passed to trigger will be `hello default` - value: hello default - # override the value of first parameter in arguments with above payload. - dest: spec.arguments.parameters.0.value - source: - inline: | - apiVersion: argoproj.io/v1alpha1 - kind: Workflow - metadata: - name: arguments-via-webhook-event - spec: - entrypoint: whalesay - arguments: - parameters: - - name: message - # this is the value that should be overridden - value: hello world - templates: - - name: whalesay - inputs: - parameters: - - name: message - container: - image: docker/whalesay:latest - command: [cowsay] - args: ["{{inputs.parameters.message}}"] - - ``` - 2. Run, - ```bash - kubectl apply -f https://raw.githubusercontent.com/argoproj/argo-events/trigger-param-fix/examples/sensors/webhook-with-resource-param.yaml - ``` - - 3. Post request to webhook gateway and watch new workflow being created - -
- -## Sensor Filters - Following are the types of the filter you can apply on signal/event payload, - - | Type | Description | - |----------|-------------------| - | Time | Filters the signal based on time constraints | - | EventContext | Filters metadata that provides circumstantial information about the signal. | - | Data | Describes constraints and filters for payload | - - ### Time Filter - ```yaml - filters: - time: - start: "2016-05-10T15:04:05Z07:00" - stop: "2020-01-02T15:04:05Z07:00" - ``` - - Example: - https://raw.githubusercontent.com/argoproj/argo-events/master/examples/sensors/time-filter-webhook.yaml - - ### EventContext Filter - ``` - filters: - context: - source: - host: amazon.com - contentType: application/json - ``` - - Example: - https://raw.githubusercontent.com/argoproj/argo-events/master/examples/sensors/context-filter-webhook.yaml - - ### Data filter - ``` - filters: - data: - - path: bucket - type: string - value: argo-workflow-input - ``` - Example: - https://raw.githubusercontent.com/argoproj/argo-events/master/examples/sensors/data-filter-webhook.yaml diff --git a/examples/gateways/amqp.yaml b/examples/gateways/amqp.yaml index 6ab7db9b16..e6c767a338 100644 --- a/examples/gateways/amqp.yaml +++ b/examples/gateways/amqp.yaml @@ -6,18 +6,30 @@ metadata: gateways.argoproj.io/gateway-controller-instanceid: argo-events gateway-name: "amqp-gateway" spec: + processorPort: "9330" + eventProtocol: + type: "HTTP" + http: + port: "9300" deploySpec: - containers: - - name: amqp-events - image: "argoproj/amqp-gateway" - imagePullPolicy: "Always" - command: ["/bin/amqp-gateway"] - serviceAccountName: "argo-events-sa" + metadata: + name: "amqp-gateway" + labels: + gateway-name: "amqp-gateway" + spec: + containers: + - name: "gateway-client" + image: "argoproj/gateway-client" + imagePullPolicy: "Always" + command: ["/bin/gateway-client"] + - name: amqp-events + image: "argoproj/amqp-gateway" + imagePullPolicy: "Always" + command: ["/bin/amqp-gateway"] + serviceAccountName: "argo-events-sa" configMap: "amqp-gateway-configmap" type: "amqp" - dispatchMechanism: "HTTP" eventVersion: "1.0" - imageVersion: "latest" watchers: sensors: - name: "amqp-sensor" diff --git a/examples/gateways/artifact-gateway-configmap.yaml b/examples/gateways/artifact-gateway-configmap.yaml index da5a3f5fa4..264148fada 100644 --- a/examples/gateways/artifact-gateway-configmap.yaml +++ b/examples/gateways/artifact-gateway-configmap.yaml @@ -4,13 +4,13 @@ metadata: name: artifact-gateway-configmap data: input: |- - s3EventConfig: - bucket: input - endpoint: minio-service.argo-events:9000 - event: s3:ObjectCreated:Put - filter: - prefix: "" - suffix: "" + bucket: + name: input + endpoint: minio-service.argo-events:9000 + event: s3:ObjectCreated:Put + filter: + prefix: "" + suffix: "" insecure: true accessKey: key: accesskey diff --git a/examples/gateways/artifact-http.yaml b/examples/gateways/artifact-http.yaml new file mode 100644 index 0000000000..dae3234937 --- /dev/null +++ b/examples/gateways/artifact-http.yaml @@ -0,0 +1,36 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Gateway +metadata: + name: artifact-gateway + labels: + gateways.argoproj.io/gateway-controller-instanceid: argo-events + gateway-name: "artifact-gateway" +spec: + processorPort: "9330" + eventProtocol: + type: "HTTP" + http: + port: "9300" + deploySpec: + metadata: + name: "artifact-gateway" + labels: + gateway-name: "artifact-gateway" + spec: + containers: + - name: "gateway-client" + image: "argoproj/gateway-client" + imagePullPolicy: "Always" + command: ["/bin/gateway-client"] + - name: "artifact-events" + image: "argoproj/artifact-gateway" + imagePullPolicy: "Always" + command: ["/bin/artifact-gateway"] + serviceAccountName: "argo-events-sa" + configMap: "artifact-gateway-configmap" + eventVersion: "1.0" + type: "artifact" + watchers: + sensors: + - name: "artifact-sensor" + - name: "artifact-with-param-sensor" diff --git a/examples/gateways/artifact-nats-standard.yaml b/examples/gateways/artifact-nats-standard.yaml new file mode 100644 index 0000000000..94c9401cba --- /dev/null +++ b/examples/gateways/artifact-nats-standard.yaml @@ -0,0 +1,33 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Gateway +metadata: + name: artifact-gateway-nats-standard + labels: + gateways.argoproj.io/gateway-controller-instanceid: argo-events + gateway-name: "artifact-gateway-nats-standard" +spec: + processorPort: "9330" + eventProtocol: + type: "NATS" + nats: + url: "nats://example-nats.argo-events:4222" + type: "Standard" + deploySpec: + metadata: + name: "artifact-gateway-nats-standard" + labels: + gateway-name: "artifact-gateway-nats-standard" + spec: + containers: + - name: "gateway-client" + image: "argoproj/gateway-client" + imagePullPolicy: "Always" + command: ["/bin/gateway-client"] + - name: "artifact-events" + image: "argoproj/artifact-gateway" + imagePullPolicy: "Always" + command: ["/bin/artifact-gateway"] + serviceAccountName: "argo-events-sa" + configMap: "artifact-gateway-configmap" + eventVersion: "1.0" + type: "artifact" diff --git a/examples/gateways/artifact-nats-streaming.yaml b/examples/gateways/artifact-nats-streaming.yaml new file mode 100644 index 0000000000..b274cca678 --- /dev/null +++ b/examples/gateways/artifact-nats-streaming.yaml @@ -0,0 +1,35 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Gateway +metadata: + name: artifact-gateway-nats-streaming + labels: + gateways.argoproj.io/gateway-controller-instanceid: argo-events + gateway-name: "artifact-gateway-nats-streaming" +spec: + processorPort: "9330" + eventProtocol: + type: "NATS" + nats: + url: "nats://example-nats.argo-events:4222" + clusterId: "example-stan" + clientId: "myclient" + type: "Streaming" + deploySpec: + metadata: + name: "artifact-gateway-nats-streaming" + labels: + gateway-name: "artifact-gateway-nats-streaming" + spec: + containers: + - name: "gateway-client" + image: "argoproj/gateway-client" + imagePullPolicy: "Always" + command: ["/bin/gateway-client"] + - name: "artifact-events" + image: "argoproj/artifact-gateway" + imagePullPolicy: "Always" + command: ["/bin/artifact-gateway"] + serviceAccountName: "argo-events-sa" + configMap: "artifact-gateway-configmap" + eventVersion: "1.0" + type: "artifact" diff --git a/examples/gateways/artifact.yaml b/examples/gateways/artifact.yaml deleted file mode 100644 index f5acf5d0d5..0000000000 --- a/examples/gateways/artifact.yaml +++ /dev/null @@ -1,23 +0,0 @@ -apiVersion: argoproj.io/v1alpha1 -kind: Gateway -metadata: - name: artifact-gateway - labels: - gateways.argoproj.io/gateway-controller-instanceid: argo-events - gateway-name: "artifact-gateway" -spec: - deploySpec: - containers: - - name: "artifact-events" - image: "argoproj/artifact-gateway" - imagePullPolicy: "Always" - command: ["/bin/artifact-gateway"] - serviceAccountName: "argo-events-sa" - configMap: "artifact-gateway-configmap" - eventVersion: "1.0" - imageVersion: "latest" - type: "artifact" - dispatchMechanism: "HTTP" - watchers: - sensors: - - name: "artifact-sensor" diff --git a/examples/gateways/calendar-gateway-configmap.yaml b/examples/gateways/calendar-gateway-configmap.yaml index 0683c65718..80467e80d4 100644 --- a/examples/gateways/calendar-gateway-configmap.yaml +++ b/examples/gateways/calendar-gateway-configmap.yaml @@ -3,7 +3,7 @@ kind: ConfigMap metadata: name: calendar-gateway-configmap data: - foo: |- + interval: |- interval: 55s - bar: |- + schedule: |- schedule: 30 * * * * diff --git a/examples/gateways/calendar.yaml b/examples/gateways/calendar.yaml index 3674e5797f..e3bba9c54a 100644 --- a/examples/gateways/calendar.yaml +++ b/examples/gateways/calendar.yaml @@ -6,18 +6,30 @@ metadata: gateways.argoproj.io/gateway-controller-instanceid: argo-events gateway-name: "calendar-gateway" spec: + processorPort: "9330" + eventProtocol: + type: "HTTP" + http: + port: "9300" deploySpec: - containers: - - name: "calendar-events" - image: "argoproj/calendar-gateway" - imagePullPolicy: "Always" - command: ["/bin/calendar-gateway"] - serviceAccountName: "argo-events-sa" + metadata: + name: "calendar-gateway" + labels: + gateway-name: "calendar-gateway" + spec: + containers: + - name: "gateway-client" + image: "argoproj/gateway-client" + imagePullPolicy: "Always" + command: ["/bin/gateway-client"] + - name: "calendar-events" + image: "argoproj/calendar-gateway" + imagePullPolicy: "Always" + command: ["/bin/calendar-gateway"] + serviceAccountName: "argo-events-sa" configMap: "calendar-gateway-configmap" type: "calendar" - dispatchMechanism: "HTTP" eventVersion: "1.0" - imageVersion: "latest" watchers: sensors: - name: "calendar-sensor" diff --git a/examples/gateways/file.yaml b/examples/gateways/file.yaml index c7b04d16fe..5255523ea1 100644 --- a/examples/gateways/file.yaml +++ b/examples/gateways/file.yaml @@ -6,18 +6,30 @@ metadata: gateways.argoproj.io/gateway-controller-instanceid: argo-events gateway-name: "file-gateway" spec: + processorPort: "9330" + eventProtocol: + type: "HTTP" + http: + port: "9300" deploySpec: - containers: - - name: "file-events" - image: "argoproj/file-gateway" - imagePullPolicy: "Always" - command: ["/bin/file-gateway"] - serviceAccountName: "argo-events-sa" + metadata: + name: "file-gateway" + labels: + gateway-name: "file-gateway" + spec: + containers: + - name: "gateway-client" + image: "argoproj/gateway-client" + imagePullPolicy: "Always" + command: ["/bin/gateway-client"] + - name: "file-events" + image: "argoproj/file-gateway" + imagePullPolicy: "Always" + command: ["/bin/file-gateway"] + serviceAccountName: "argo-events-sa" configMap: "file-gateway-configmap" eventVersion: "1.0" - imageVersion: "latest" type: "file" - dispatchMechanism: "HTTP" watchers: sensors: - name: "file-sensor" diff --git a/examples/gateways/github-configmap.yaml b/examples/gateways/github-configmap.yaml index 6004bcf30f..f9edcb656c 100644 --- a/examples/gateways/github-configmap.yaml +++ b/examples/gateways/github-configmap.yaml @@ -6,7 +6,7 @@ data: project_1: |- owner: "owner-example" repository: "repo-example" - url: "http://webhook-gateway-gateway-svc/push" + url: "http://webhook-gateway-http-svc/push" events: - "*" apiToken: diff --git a/examples/gateways/github.yaml b/examples/gateways/github.yaml index 4c4069130b..b47cc52a02 100644 --- a/examples/gateways/github.yaml +++ b/examples/gateways/github.yaml @@ -6,27 +6,30 @@ metadata: gateways.argoproj.io/gateway-controller-instanceid: argo-events gateway-name: "github-gateway" spec: + processorPort: "9330" + eventProtocol: + type: "HTTP" + http: + port: "9300" deploySpec: metadata: + name: "github-gateway" labels: - gateway-type: github - dispatch-mechanism: http + gateway-name: "github-gateway" spec: containers: - name: "gateway-client" - image: "metalgearsolid/gateway-client:v0.6.1" + image: "argoproj/gateway-client" imagePullPolicy: "Always" command: ["/bin/gateway-client"] - - name: "file-events" - image: "metalgearsolid/github-gateway:v0.6.1" + - name: "github-events" + image: "argoproj/github-gateway" imagePullPolicy: "Always" command: ["/bin/github-gateway"] serviceAccountName: "argo-events-sa" configMap: "github-gateway-configmap" type: "github" - dispatchProtocol: "HTTP" eventVersion: "1.0" - processorPort: "9330" watchers: sensors: - name: "github-sensor" diff --git a/examples/gateways/gitlab.yaml b/examples/gateways/gitlab.yaml index 47bf974dcd..5be3fa426c 100644 --- a/examples/gateways/gitlab.yaml +++ b/examples/gateways/gitlab.yaml @@ -6,18 +6,30 @@ metadata: gateways.argoproj.io/gateway-controller-instanceid: argo-events gateway-name: "gitlab-gateway" spec: + processorPort: "9330" + eventProtocol: + type: "HTTP" + http: + port: "9300" deploySpec: - containers: - - name: "gitlab-events" - image: "argoproj/gitlab-gateway" - imagePullPolicy: "Always" - command: ["/bin/gitlab-gateway"] - serviceAccountName: "argo-events-sa" + metadata: + name: "gitlab-gateway" + labels: + gateway-name: "gitlab-gateway" + spec: + containers: + - name: "gateway-client" + image: "argoproj/gateway-client" + imagePullPolicy: "Always" + command: ["/bin/gateway-client"] + - name: "gitlab-events" + image: "argoproj/gitlab-gateway" + imagePullPolicy: "Always" + command: ["/bin/gitlab-gateway"] + serviceAccountName: "argo-events-sa" configMap: "gitlab-gateway-configmap" type: "gitlab" - dispatchMechanism: "HTTP" eventVersion: "1.0" - imageVersion: "latest" watchers: sensors: - name: "gitlab-sensor" diff --git a/examples/gateways/kafka.yaml b/examples/gateways/kafka.yaml index f4287edfcd..449682817e 100644 --- a/examples/gateways/kafka.yaml +++ b/examples/gateways/kafka.yaml @@ -6,18 +6,30 @@ metadata: gateways.argoproj.io/gateway-controller-instanceid: argo-events gateway-name: "kafka-gateway" spec: + processorPort: "9330" + eventProtocol: + type: "HTTP" + http: + port: "9300" deploySpec: - containers: - - name: "kafka-events" - image: "argoproj/kafka-gateway" - imagePullPolicy: "Always" - command: ["/bin/kafka-gateway"] - serviceAccountName: "argo-events-sa" + metadata: + name: "kafka-gateway" + labels: + gateway-name: "kafka-gateway" + spec: + containers: + - name: "gateway-client" + image: "argoproj/gateway-client" + imagePullPolicy: "Always" + command: ["/bin/gateway-client"] + - name: "kafka-events" + image: "argoproj/kafka-gateway" + imagePullPolicy: "Always" + command: ["/bin/kafka-gateway"] + serviceAccountName: "argo-events-sa" configMap: "kafka-gateway-configmap" type: "kafka" - dispatchMechanism: "HTTP" eventVersion: "1.0" - imageVersion: "latest" watchers: sensors: - name: "kafka-sensor" diff --git a/examples/gateways/mqtt.yaml b/examples/gateways/mqtt.yaml index 6f0fbb1b56..8d15408e15 100644 --- a/examples/gateways/mqtt.yaml +++ b/examples/gateways/mqtt.yaml @@ -6,18 +6,30 @@ metadata: gateways.argoproj.io/gateway-controller-instanceid: argo-events gateway-name: "mqtt-gateway" spec: + processorPort: "9330" + eventProtocol: + type: "HTTP" + http: + port: "9300" deploySpec: - containers: - - name: "mqtt-events" - image: "argoproj/mqtt-gateway" - imagePullPolicy: "Always" - command: ["/bin/mqtt-gateway"] - serviceAccountName: "argo-events-sa" + metadata: + name: "mqtt-gateway" + labels: + gateway-name: "mqtt-gateway" + spec: + containers: + - name: "gateway-client" + image: "argoproj/gateway-client" + imagePullPolicy: "Always" + command: ["/bin/gateway-client"] + - name: "mqtt-events" + image: "argoproj/mqtt-gateway" + imagePullPolicy: "Always" + command: ["/bin/mqtt-gateway"] + serviceAccountName: "argo-events-sa" configMap: "mqtt-gateway-configmap" type: "mqtt" - dispatchMechanism: "HTTP" eventVersion: "1.0" - imageVersion: "latest" watchers: sensors: - - name: "mqtt-sensor" + - name: "mqtt-sensor" diff --git a/examples/gateways/multi-watchers.yaml b/examples/gateways/multi-watchers.yaml index fd82ee0da7..1132ac8758 100644 --- a/examples/gateways/multi-watchers.yaml +++ b/examples/gateways/multi-watchers.yaml @@ -6,25 +6,40 @@ metadata: gateways.argoproj.io/gateway-controller-instanceid: argo-events gateway-name: "webhook-gateway-multi-watchers" spec: + processorPort: "9330" + eventProtocol: + type: "HTTP" + http: + port: "9300" + deploySpec: + metadata: + name: "webhook-gateway" + labels: + gateway-name: "webhook-gateway" + spec: + containers: + - name: "gateway-client" + image: "argoproj/gateway-client" + imagePullPolicy: "Always" + command: ["/bin/gateway-client"] + - name: "webhook-events" + image: "argoproj/webhook-gateway" + imagePullPolicy: "Always" + command: ["/bin/webhook-gateway"] + serviceAccountName: "argo-events-sa" configMap: "webhook-gateway-configmap" type: "webhook" - dispatchMechanism: "HTTP" eventVersion: "1.0" - imageVersion: "latest" - deploySpec: - containers: - - name: "webhook-events" - image: "argoproj/webhook-gateway" - imagePullPolicy: "Always" - command: ["/bin/webhook-gateway"] - serviceAccountName: "argo-events-sa" serviceSpec: - selector: - gateway-name: "webhook-gateway-multi-watchers" - ports: - - port: 12000 - targetPort: 12000 - type: LoadBalancer + metadata: + name: webhook-gateway-svc + spec: + selector: + gateway-name: "webhook-gateway-http" + ports: + - port: 12000 + targetPort: 12000 + type: LoadBalancer watchers: # requirement for adding gateway as watcher is there should be a http server running in watcher gateway # and user must provide port and endpoint on which event should be dispatched. diff --git a/examples/gateways/nats.yaml b/examples/gateways/nats.yaml index 0be0af563a..67876d02a3 100644 --- a/examples/gateways/nats.yaml +++ b/examples/gateways/nats.yaml @@ -6,18 +6,30 @@ metadata: gateways.argoproj.io/gateway-controller-instanceid: argo-events gateway-name: "nats-gateway" spec: + processorPort: "9330" + eventProtocol: + type: "HTTP" + http: + port: "9300" deploySpec: - containers: - - name: "nats-events" - image: "argoproj/nats-gateway" - imagePullPolicy: "Always" - command: ["/bin/nats-gateway"] - serviceAccountName: "argo-events-sa" + metadata: + name: "nats-gateway" + labels: + gateway-name: "nats-gateway" + spec: + containers: + - name: "gateway-client" + image: "argoproj/gateway-client" + imagePullPolicy: "Always" + command: ["/bin/gateway-client"] + - name: "nats-events" + image: "argoproj/nats-gateway" + imagePullPolicy: "Always" + command: ["/bin/nats-gateway"] + serviceAccountName: "argo-events-sa" configMap: "nats-gateway-configmap" type: "nats" - dispatchMechanism: "HTTP" eventVersion: "1.0" - imageVersion: "latest" watchers: sensors: - name: "nats-sensor" diff --git a/examples/gateways/resource.yaml b/examples/gateways/resource.yaml index eaae5e114e..1e208527a6 100644 --- a/examples/gateways/resource.yaml +++ b/examples/gateways/resource.yaml @@ -1,4 +1,3 @@ - apiVersion: argoproj.io/v1alpha1 kind: Gateway metadata: @@ -7,18 +6,30 @@ metadata: gateways.argoproj.io/gateway-controller-instanceid: argo-events gateway-name: "resource-gateway" spec: + processorPort: "9330" + eventProtocol: + type: "HTTP" + http: + port: "9300" deploySpec: - containers: - - name: "resource-events" - image: "argoproj/resource-gateway" - imagePullPolicy: "Always" - command: ["/bin/resource-gateway"] - serviceAccountName: "argo-events-sa" + metadata: + name: "resource-gateway" + labels: + gateway-name: "resource-gateway" + spec: + containers: + - name: "gateway-client" + image: "argoproj/gateway-client" + imagePullPolicy: "Always" + command: ["/bin/gateway-client"] + - name: "resource-events" + image: "argoproj/resource-gateway" + imagePullPolicy: "Always" + command: ["/bin/resource-gateway"] + serviceAccountName: "argo-events-sa" configMap: "resource-gateway-configmap" type: "resource" - dispatchMechanism: "HTTP" eventVersion: "1.0" - imageVersion: "latest" watchers: sensors: - name: "resource-sensor" diff --git a/examples/gateways/storage-grid-configmap.yaml b/examples/gateways/storage-grid-configmap.yaml index e6807c3191..99e1e0b751 100644 --- a/examples/gateways/storage-grid-configmap.yaml +++ b/examples/gateways/storage-grid-configmap.yaml @@ -8,6 +8,3 @@ data: endpoint: "/" events: - "ObjectCreated:Put" - filter: - suffix: ".txt" - prefix: "hello-" diff --git a/examples/gateways/storage-grid.yaml b/examples/gateways/storage-grid.yaml index 74c4fb29d8..a643e1aca4 100644 --- a/examples/gateways/storage-grid.yaml +++ b/examples/gateways/storage-grid.yaml @@ -8,22 +8,37 @@ metadata: spec: configMap: "storage-grid-gateway-configmap" type: "storage_grid" - dispatchMechanism: "HTTP" + processorPort: "9330" + eventProtocol: + type: "HTTP" + http: + port: "9300" eventVersion: "1.0" - imageVersion: "latest" deploySpec: - containers: - - name: "storage-grid-events" - image: "argoproj/storage-grid-gateway" - imagePullPolicy: "Always" - serviceAccountName: "argo-events-sa" + metadata: + name: "storage-grid-gateway" + labels: + gateway-name: "storage-grid-gateway" + spec: + containers: + - name: "gateway-client" + image: "argoproj/gateway-client" + imagePullPolicy: "Always" + command: ["/bin/gateway-client"] + - name: "storage-grid-events" + image: "argoproj/storage-grid-gateway" + imagePullPolicy: "Always" + serviceAccountName: "argo-events-sa" serviceSpec: - selector: - gateway-name: "storage-grid-gateway" - ports: - - port: 8080 - targetPort: 8080 - type: LoadBalancer + metadata: + name: storage-grid-gateway-svc + spec: + selector: + gateway-name: "storage-grid-gateway" + ports: + - port: 8080 + targetPort: 8080 + type: LoadBalancer watchers: sensors: - name: "storage-grid-watcher-sensor" diff --git a/examples/gateways/webhook-gateway-configmap.yaml b/examples/gateways/webhook-gateway-configmap.yaml index d4a266d74b..e074b3011e 100644 --- a/examples/gateways/webhook-gateway-configmap.yaml +++ b/examples/gateways/webhook-gateway-configmap.yaml @@ -5,8 +5,9 @@ metadata: data: index: |- port: "12000" - endpoint: "/" + endpoint: "/index" method: "POST" foo: |- + port: "12000" endpoint: "/foo" method: "POST" diff --git a/examples/gateways/webhook-http.yaml b/examples/gateways/webhook-http.yaml new file mode 100644 index 0000000000..bf431d5879 --- /dev/null +++ b/examples/gateways/webhook-http.yaml @@ -0,0 +1,45 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Gateway +metadata: + name: webhook-gateway-http + labels: + gateways.argoproj.io/gateway-controller-instanceid: argo-events + gateway-name: "webhook-gateway-http" +spec: + configMap: "webhook-gateway-configmap" + type: "webhook" + processorPort: "9330" + eventProtocol: + type: "HTTP" + http: + port: "9300" + eventVersion: "1.0" + deploySpec: + metadata: + name: "webhook-gateway-http" + labels: + gateway-name: "webhook-gateway-http" + spec: + containers: + - name: "gateway-client" + image: "argoproj/gateway-client" + imagePullPolicy: "Always" + command: ["/bin/gateway-client"] + - name: "webhook-events" + image: "argoproj/webhook-gateway" + imagePullPolicy: "Always" + command: ["/bin/webhook-gateway"] + serviceAccountName: "argo-events-sa" + serviceSpec: + metadata: + name: webhook-gateway-svc + spec: + selector: + gateway-name: "webhook-gateway-http" + ports: + - port: 12000 + targetPort: 12000 + type: LoadBalancer + watchers: + sensors: + - name: "webhook-sensor-http" diff --git a/examples/gateways/webhook-nats-standard.yaml b/examples/gateways/webhook-nats-standard.yaml new file mode 100644 index 0000000000..04a2aed176 --- /dev/null +++ b/examples/gateways/webhook-nats-standard.yaml @@ -0,0 +1,43 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Gateway +metadata: + name: webhook-gateway-nats + labels: + gateways.argoproj.io/gateway-controller-instanceid: argo-events + gateway-name: "webhook-gateway-nats" +spec: + configMap: "webhook-gateway-configmap" + type: "webhook" + processorPort: "9330" + eventProtocol: + type: "NATS" + nats: + url: "nats://nats.argo-events:4222" + type: "Standard" + eventVersion: "1.0" + deploySpec: + metadata: + name: "webhook-gateway-nats" + labels: + gateway-name: "webhook-gateway-nats" + spec: + containers: + - name: "gateway-client" + image: "argoproj/gateway-client" + imagePullPolicy: "Always" + command: ["/bin/gateway-client"] + - name: "webhook-events" + image: "argoproj/webhook-gateway" + imagePullPolicy: "Always" + command: ["/bin/webhook-gateway"] + serviceAccountName: "argo-events-sa" + serviceSpec: + metadata: + name: webhook-gateway-svc + spec: + selector: + gateway-name: "webhook-gateway-nats" + ports: + - port: 12000 + targetPort: 12000 + type: LoadBalancer diff --git a/examples/gateways/webhook-nats-streaming.yaml b/examples/gateways/webhook-nats-streaming.yaml new file mode 100644 index 0000000000..02dfa527e7 --- /dev/null +++ b/examples/gateways/webhook-nats-streaming.yaml @@ -0,0 +1,45 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Gateway +metadata: + name: webhook-gateway-nats-streaming + labels: + gateways.argoproj.io/gateway-controller-instanceid: argo-events + gateway-name: "webhook-gateway-nats-streaming" +spec: + configMap: "webhook-gateway-configmap" + type: "webhook" + processorPort: "9330" + eventProtocol: + type: "NATS" + nats: + url: "nats://example-nats.argo-events:4222" + clusterId: "example-stan" + clientId: "myclient" + type: "Streaming" + eventVersion: "1.0" + deploySpec: + metadata: + name: "webhook-gateway-nats-streaming" + labels: + gateway-name: "webhook-gateway-nats-streaming" + spec: + containers: + - name: "gateway-client" + image: "argoproj/gateway-client" + imagePullPolicy: "Always" + command: ["/bin/gateway-client"] + - name: "webhook-events" + image: "argoproj/webhook-gateway" + imagePullPolicy: "Always" + command: ["/bin/webhook-gateway"] + serviceAccountName: "argo-events-sa" + serviceSpec: + metadata: + name: webhook-gateway-svc + spec: + selector: + gateway-name: "webhook-gateway-nats-streaming" + ports: + - port: 12000 + targetPort: 12000 + type: LoadBalancer diff --git a/examples/gateways/webhook.yaml b/examples/gateways/webhook.yaml deleted file mode 100644 index 921887aced..0000000000 --- a/examples/gateways/webhook.yaml +++ /dev/null @@ -1,31 +0,0 @@ -apiVersion: argoproj.io/v1alpha1 -kind: Gateway -metadata: - name: webhook-gateway - labels: - gateways.argoproj.io/gateway-controller-instanceid: argo-events - gateway-name: "webhook-gateway" -spec: - configMap: "webhook-gateway-configmap" - type: "webhook" - dispatchMechanism: "HTTP" - eventVersion: "1.0" - imageVersion: "latest" - deploySpec: - containers: - - name: "webhook-events" - image: "argoproj/webhook-gateway" - imagePullPolicy: "IfNotPresent" - command: ["/bin/webhook-gateway"] - serviceAccountName: "argo-events-sa" - transformerImage: "argoproj/gateway-http-transformer" - serviceSpec: - selector: - gateway-name: "webhook-gateway" - ports: - - port: 12000 - targetPort: 12000 - type: LoadBalancer - watchers: - sensors: - - name: "webhook-sensor" diff --git a/examples/sensors/amqp.yaml b/examples/sensors/amqp.yaml index 8867c18265..92879885d9 100644 --- a/examples/sensors/amqp.yaml +++ b/examples/sensors/amqp.yaml @@ -5,12 +5,18 @@ metadata: labels: sensors.argoproj.io/sensor-controller-instanceid: argo-events spec: - repeat: true - serviceAccountName: argo-events-sa - imageVersion: "latest" - imagePullPolicy: Always - signals: - - name: amqp-gateway/foo + deploySpec: + containers: + - name: "sensor" + image: "argoproj/sensor" + imagePullPolicy: Always + serviceAccountName: argo-events-sa + eventProtocol: + type: "HTTP" + http: + port: "9300" + dependencies: + - name: "amqp-gateway:foo" triggers: - name: amqp-workflow-trigger resource: diff --git a/examples/sensors/artifact-with-param-nats-standard.yaml b/examples/sensors/artifact-with-param-nats-standard.yaml new file mode 100644 index 0000000000..e130484c26 --- /dev/null +++ b/examples/sensors/artifact-with-param-nats-standard.yaml @@ -0,0 +1,47 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Sensor +metadata: + name: artifact-with-param-nats-standard-sensor + labels: + sensors.argoproj.io/sensor-controller-instanceid: argo-events +spec: + deploySpec: + containers: + - name: "sensor" + image: "argoproj/sensor" + imagePullPolicy: Always + serviceAccountName: argo-events-sa + eventProtocol: + type: "NATS" + nats: + type: "Standard" + url: "nats://example-nats.argo-events:4222" + dependencies: + - name: "artifact-gateway-nats-standard:input" + triggers: + - name: argo-workflow + resource: + namespace: argo-events + group: argoproj.io + version: v1alpha1 + kind: Workflow + # The container args from the workflow are overridden by the s3 notification key + parameters: + - src: + event: "artifact-gateway-nats-standard:input" + path: s3.object.key + dest: spec.templates.0.container.args.0 + source: + inline: | + apiVersion: argoproj.io/v1alpha1 + kind: Workflow + metadata: + generateName: artifact-workflow- + spec: + entrypoint: whalesay + templates: + - name: whalesay + container: + command: + - cowsay + image: "docker/whalesay:latest" diff --git a/examples/sensors/artifact-with-param-nats-streaming.yaml b/examples/sensors/artifact-with-param-nats-streaming.yaml new file mode 100644 index 0000000000..90621a7bbd --- /dev/null +++ b/examples/sensors/artifact-with-param-nats-streaming.yaml @@ -0,0 +1,49 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Sensor +metadata: + name: artifact-with-param-nats-streaming-sensor + labels: + sensors.argoproj.io/sensor-controller-instanceid: argo-events +spec: + deploySpec: + containers: + - name: "sensor" + image: "argoproj/sensor" + imagePullPolicy: Always + serviceAccountName: argo-events-sa + eventProtocol: + type: "NATS" + nats: + type: "Streaming" + url: "nats://example-nats.argo-events:4222" + clusterId: "example-stan" + clientId: "myclient1" + dependencies: + - name: "artifact-gateway-nats-streaming:input" + triggers: + - name: argo-workflow + resource: + namespace: argo-events + group: argoproj.io + version: v1alpha1 + kind: Workflow + # The container args from the workflow are overridden by the s3 notification key + parameters: + - src: + event: "artifact-gateway-nats-streaming:input" + path: s3.object.key + dest: spec.templates.0.container.args.0 + source: + inline: | + apiVersion: argoproj.io/v1alpha1 + kind: Workflow + metadata: + generateName: artifact-workflow- + spec: + entrypoint: whalesay + templates: + - name: whalesay + container: + command: + - cowsay + image: "docker/whalesay:latest" diff --git a/examples/sensors/s3-with-param.yaml b/examples/sensors/artifact-with-param.yaml similarity index 75% rename from examples/sensors/s3-with-param.yaml rename to examples/sensors/artifact-with-param.yaml index fd853c1a70..526ba55f43 100644 --- a/examples/sensors/s3-with-param.yaml +++ b/examples/sensors/artifact-with-param.yaml @@ -5,12 +5,18 @@ metadata: labels: sensors.argoproj.io/sensor-controller-instanceid: argo-events spec: - repeat: true - serviceAccountName: argo-events-sa - imageVersion: "latest" - imagePullPolicy: Always - signals: - - name: artifact-gateway/input + deploySpec: + containers: + - name: "sensor" + image: "argoproj/sensor" + imagePullPolicy: Always + serviceAccountName: argo-events-sa + eventProtocol: + type: "HTTP" + http: + port: "9300" + dependencies: + - name: "artifact-gateway:input" triggers: - name: argo-workflow resource: @@ -21,7 +27,7 @@ spec: # The container args from the workflow are overridden by the s3 notification key parameters: - src: - signal: artifact-gateway/input + event: "artifact-gateway:input" path: s3.object.key dest: spec.templates.0.container.args.0 source: diff --git a/examples/sensors/s3.yaml b/examples/sensors/artifact.yaml similarity index 75% rename from examples/sensors/s3.yaml rename to examples/sensors/artifact.yaml index e5ebb256b7..19a63c20f4 100644 --- a/examples/sensors/s3.yaml +++ b/examples/sensors/artifact.yaml @@ -5,12 +5,18 @@ metadata: labels: sensors.argoproj.io/sensor-controller-instanceid: argo-events spec: - repeat: true - serviceAccountName: argo-events-sa - imageVersion: "latest" - imagePullPolicy: Always - signals: - - name: artifact-gateway/input + deploySpec: + containers: + - name: "sensor" + image: "argoproj/sensor" + imagePullPolicy: Always + serviceAccountName: argo-events-sa + eventProtocol: + type: "HTTP" + http: + port: "9300" + dependencies: + - name: "artifact-gateway:input" triggers: - name: artifact-workflow-trigger resource: diff --git a/examples/sensors/calendar.yaml b/examples/sensors/calendar.yaml index 1453651264..025a918b31 100644 --- a/examples/sensors/calendar.yaml +++ b/examples/sensors/calendar.yaml @@ -5,12 +5,18 @@ metadata: labels: sensors.argoproj.io/sensor-controller-instanceid: argo-events spec: - repeat: true - serviceAccountName: argo-events-sa - imageVersion: "latest" - imagePullPolicy: Always - signals: - - name: calendar-gateway/foo + deploySpec: + containers: + - name: "sensor" + image: "argoproj/sensor" + imagePullPolicy: Always + serviceAccountName: argo-events-sa + dependencies: + - name: "calendar-gateway:interval" + eventProtocol: + type: "HTTP" + http: + port: "9300" triggers: - name: calendar-workflow-trigger resource: diff --git a/examples/sensors/context-filter-webhook.yaml b/examples/sensors/context-filter-webhook.yaml index 72d6c0d013..60d107298f 100644 --- a/examples/sensors/context-filter-webhook.yaml +++ b/examples/sensors/context-filter-webhook.yaml @@ -5,17 +5,23 @@ metadata: labels: sensors.argoproj.io/sensor-controller-instanceid: argo-events spec: - repeat: true - serviceAccountName: argo-events-sa - imageVersion: "latest" - imagePullPolicy: Always - signals: - - name: webhook-gateway/index + deploySpec: + containers: + - name: "sensor" + image: "argoproj/sensor" + imagePullPolicy: Always + serviceAccountName: argo-events-sa + dependencies: + - name: "webhook-gateway:foo" filters: context: - source: - host: xyz.com - contentType: application/json + source: + host: xyz.com + contentType: application/json + eventProtocol: + type: "HTTP" + http: + port: "9300" triggers: - name: done-workflow resource: diff --git a/examples/sensors/data-filter-webhook.yaml b/examples/sensors/data-filter-webhook.yaml index cf1024d538..613e0b1abf 100644 --- a/examples/sensors/data-filter-webhook.yaml +++ b/examples/sensors/data-filter-webhook.yaml @@ -6,17 +6,23 @@ metadata: labels: sensors.argoproj.io/sensor-controller-instanceid: argo-events spec: - repeat: true - serviceAccountName: argo-events-sa - imageVersion: "latest" - imagePullPolicy: Always - signals: - - name: webhook-gateway/foo + deploySpec: + containers: + - name: "sensor" + image: "argoproj/sensor" + imagePullPolicy: Always + serviceAccountName: argo-events-sa + dependencies: + - name: "webhook-gateway:foo" filters: data: - - path: bucket - type: string - value: argo-workflow-input + - path: bucket + type: string + value: argo-workflow-input + eventProtocol: + type: "HTTP" + http: + port: "9300" triggers: - name: done-workflow resource: diff --git a/examples/sensors/file-sensor.yaml b/examples/sensors/file-sensor.yaml index 3743d1b907..a98ca8eab0 100644 --- a/examples/sensors/file-sensor.yaml +++ b/examples/sensors/file-sensor.yaml @@ -5,12 +5,18 @@ metadata: labels: sensors.argoproj.io/sensor-controller-instanceid: argo-events spec: - repeat: true - serviceAccountName: argo-events-sa - imageVersion: "latest" - imagePullPolicy: Always - signals: - - name: calendar-gateway/foo + deploySpec: + containers: + - name: "sensor" + image: "argoproj/sensor" + imagePullPolicy: Always + serviceAccountName: argo-events-sa + dependencies: + - name: "calendar-gateway:foo" + eventProtocol: + type: "HTTP" + http: + port: "9300" triggers: - name: file-workflow-trigger resource: diff --git a/examples/sensors/file.yaml b/examples/sensors/file.yaml index 4ef5452dee..8ec8fe6c4c 100644 --- a/examples/sensors/file.yaml +++ b/examples/sensors/file.yaml @@ -5,12 +5,18 @@ metadata: labels: sensors.argoproj.io/sensor-controller-instanceid: argo-events spec: - repeat: true - serviceAccountName: argo-events-sa - imageVersion: "latest" - imagePullPolicy: Always - signals: - - name: file-gateway/bindir + deploySpec: + containers: + - name: "sensor" + image: "argoproj/sensor:v0.6.3" + imagePullPolicy: Always + serviceAccountName: argo-events-sa + dependencies: + - name: "file-gateway:bindir" + eventProtocol: + type: "HTTP" + http: + port: "9300" triggers: - name: file-workflow-trigger resource: diff --git a/examples/sensors/github.yaml b/examples/sensors/github.yaml index 53c47b39e2..5cdbe42153 100644 --- a/examples/sensors/github.yaml +++ b/examples/sensors/github.yaml @@ -5,12 +5,18 @@ metadata: labels: sensors.argoproj.io/sensor-controller-instanceid: argo-events spec: - repeat: true - serviceAccountName: argo-events-sa - imageVersion: "latest" - imagePullPolicy: Always - signals: - - name: webhook-gateway/index + deploySpec: + containers: + - name: "sensor" + image: "argoproj/sensor" + imagePullPolicy: Always + serviceAccountName: argo-events-sa + dependencies: + - name: "webhook-gateway-http:push" + eventProtocol: + type: "HTTP" + http: + port: "9300" triggers: - name: github-workflow-trigger resource: @@ -18,19 +24,31 @@ spec: group: argoproj.io version: v1alpha1 kind: Workflow + # The parameters from the workflow are overridden by the webhook's message + # An empty path means complete payload will be passed to trigger + parameters: + - src: + event: "webhook-gateway-http:push" + dest: spec.arguments.parameters.0.value source: inline: | apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: - generateName: hello-world- + generateName: arguments-via-webhook-event spec: entrypoint: whalesay + arguments: + parameters: + - name: message + # this is the value that should be overridden + value: hello world templates: - - name: whalesay - container: - args: - - "hello world" - command: - - cowsay - image: "docker/whalesay:latest" + - name: whalesay + inputs: + parameters: + - name: message + container: + image: docker/whalesay:latest + command: [cowsay] + args: ["{{inputs.parameters.message}}"] diff --git a/examples/sensors/gitlab.yaml b/examples/sensors/gitlab.yaml index e873a0b1c5..60ce300527 100644 --- a/examples/sensors/gitlab.yaml +++ b/examples/sensors/gitlab.yaml @@ -5,12 +5,18 @@ metadata: labels: sensors.argoproj.io/sensor-controller-instanceid: argo-events spec: - repeat: true - serviceAccountName: argo-events-sa - imageVersion: "latest" - imagePullPolicy: Always - signals: - - name: webhook-gateway/index + deploySpec: + containers: + - name: "sensor" + image: "argoproj/sensor" + imagePullPolicy: Always + serviceAccountName: argo-events-sa + eventProtocol: + type: "HTTP" + http: + port: "9300" + dependencies: + - name: "webhook-gateway-http:foo" triggers: - name: gitlab-workflow-trigger resource: diff --git a/examples/sensors/inline-sensor.yaml b/examples/sensors/inline-sensor.yaml index 6ac37cba03..0eb0b86f9b 100644 --- a/examples/sensors/inline-sensor.yaml +++ b/examples/sensors/inline-sensor.yaml @@ -5,12 +5,18 @@ metadata: labels: sensors.argoproj.io/sensor-controller-instanceid: argo-events spec: - repeat: true - serviceAccountName: argo-events-sa - imageVersion: "latest" - imagePullPolicy: Always - signals: - - name: calendar-gateway/foo + deploySpec: + containers: + - name: "sensor" + image: "argoproj/sensor" + imagePullPolicy: Always + serviceAccountName: argo-events-sa + eventProtocol: + type: "HTTP" + http: + port: "9300" + dependencies: + - name: "calendar-gateway:interval" triggers: - name: inline-workflow-trigger resource: diff --git a/examples/sensors/kafka.yaml b/examples/sensors/kafka.yaml index 444d5f804c..a60bb81f80 100644 --- a/examples/sensors/kafka.yaml +++ b/examples/sensors/kafka.yaml @@ -5,12 +5,18 @@ metadata: labels: sensors.argoproj.io/sensor-controller-instanceid: argo-events spec: - repeat: true - serviceAccountName: argo-events-sa - imageVersion: "latest" - imagePullPolicy: Always - signals: - - name: kafka-gateway/foo + deploySpec: + containers: + - name: "sensor" + image: "argoproj/sensor" + imagePullPolicy: Always + serviceAccountName: argo-events-sa + eventProtocol: + type: "HTTP" + http: + port: "9300" + dependencies: + - name: "kafka-gateway/foo" triggers: - name: kafka-workflow-trigger resource: diff --git a/examples/sensors/mqtt-sensor.yaml b/examples/sensors/mqtt-sensor.yaml index 4930b2e225..e2dc5779b8 100644 --- a/examples/sensors/mqtt-sensor.yaml +++ b/examples/sensors/mqtt-sensor.yaml @@ -5,12 +5,18 @@ metadata: labels: sensors.argoproj.io/sensor-controller-instanceid: argo-events spec: - repeat: true - serviceAccountName: argo-events-sa - imageVersion: "latest" - imagePullPolicy: Always - signals: - - name: mqtt-gateway/foo + deploySpec: + containers: + - name: "sensor" + image: "argoproj/sensor" + imagePullPolicy: Always + serviceAccountName: argo-events-sa + eventProtocol: + type: "HTTP" + http: + port: "9300" + dependencies: + - name: "mqtt-gateway:foo" triggers: - name: mqtt-workflow-trigger resource: diff --git a/examples/sensors/multi-signal-sensor.yaml b/examples/sensors/multi-signal-sensor.yaml index b647fcbca0..5e2926efd8 100644 --- a/examples/sensors/multi-signal-sensor.yaml +++ b/examples/sensors/multi-signal-sensor.yaml @@ -5,13 +5,19 @@ metadata: labels: sensors.argoproj.io/sensor-controller-instanceid: argo-events spec: - repeat: true - serviceAccountName: argo-events-sa - imageVersion: "latest" - imagePullPolicy: Always - signals: - - name: webhook-gateway/foo - - name: calendar-gateway/foo + deploySpec: + containers: + - name: "sensor" + image: "argoproj/sensor" + imagePullPolicy: Always + serviceAccountName: argo-events-sa + eventProtocol: + type: "HTTP" + http: + port: "9300" + dependencies: + - name: "webhook-gateway-http:foo" + - name: "calendar-gateway:interval" triggers: - name: multi-signal-workflow-trigger resource: diff --git a/examples/sensors/multi-trigger-sensor.yaml b/examples/sensors/multi-trigger-sensor.yaml index fbaa056c9d..bb91ad0679 100644 --- a/examples/sensors/multi-trigger-sensor.yaml +++ b/examples/sensors/multi-trigger-sensor.yaml @@ -5,12 +5,18 @@ metadata: labels: sensors.argoproj.io/sensor-controller-instanceid: argo-events spec: - repeat: true - serviceAccountName: argo-events-sa - imageVersion: "latest" - imagePullPolicy: Always - signals: - - name: nats-gateway/foo + deploySpec: + containers: + - name: "sensor" + image: "argoproj/sensor" + imagePullPolicy: Always + serviceAccountName: argo-events-sa + eventProtocol: + type: "HTTP" + http: + port: "9300" + dependencies: + - name: "webhook-gateway-http:foo" triggers: - name: multi-trigger-workflow-1 resource: @@ -20,8 +26,9 @@ spec: kind: Workflow source: s3: - bucket: workflows - key: hello-world.yaml + bucket: + name: workflows + key: hello-world.yaml endpoint: minio-service.argo-events:9000 insecure: true accessKey: diff --git a/examples/sensors/nats.yaml b/examples/sensors/nats.yaml index 09818ba570..752f7d2583 100644 --- a/examples/sensors/nats.yaml +++ b/examples/sensors/nats.yaml @@ -7,12 +7,18 @@ metadata: labels: sensors.argoproj.io/sensor-controller-instanceid: argo-events spec: - repeat: true - serviceAccountName: argo-events-sa - imageVersion: "latest" - imagePullPolicy: Always - signals: - - name: nats-gateway/foo + deploySpec: + containers: + - name: "sensor" + image: "argoproj/sensor" + imagePullPolicy: Always + serviceAccountName: argo-events-sa + eventProtocol: + type: "HTTP" + http: + port: "9300" + dependencies: + - name: "nats-gateway:foo" triggers: - name: nats-workflow-trigger resource: diff --git a/examples/sensors/resource.yaml b/examples/sensors/resource.yaml index 2e5c1c70cd..d19fdac33d 100644 --- a/examples/sensors/resource.yaml +++ b/examples/sensors/resource.yaml @@ -5,12 +5,18 @@ metadata: labels: sensors.argoproj.io/sensor-controller-instanceid: argo-events spec: - repeat: true - serviceAccountName: argo-events-sa - imageVersion: "latest" - imagePullPolicy: Always - signals: - - name: resource-gateway/foo + deploySpec: + containers: + - name: "sensor" + image: "argoproj/sensor" + imagePullPolicy: Always + serviceAccountName: argo-events-sa + eventProtocol: + type: "HTTP" + http: + port: "9300" + dependencies: + - name: "resource-gateway:foo" triggers: - name: argo-workflow resource: diff --git a/examples/sensors/storage-grid-sensor.yaml b/examples/sensors/storage-grid-sensor.yaml index c9fbcbc2ca..5471792870 100644 --- a/examples/sensors/storage-grid-sensor.yaml +++ b/examples/sensors/storage-grid-sensor.yaml @@ -1,16 +1,22 @@ apiVersion: argoproj.io/v1alpha1 kind: Sensor metadata: - name: storage_grid-watcher-sensor + name: storage-grid-watcher-sensor labels: sensors.argoproj.io/sensor-controller-instanceid: argo-events spec: - repeat: true - serviceAccountName: argo-events-sa - imageVersion: "latest" - imagePullPolicy: Always - signals: - - name: storage-grid-gateway/foo + deploySpec: + containers: + - name: "sensor" + image: "argoproj/sensor" + imagePullPolicy: Always + serviceAccountName: argo-events-sa + dependencies: + - name: "storage-grid-gateway:my_bucket" + eventProtocol: + type: "HTTP" + http: + port: "9300" triggers: - name: argo-workflow resource: @@ -20,7 +26,7 @@ spec: kind: Workflow parameters: - src: - signal: storage-grid-gateway/foo + event: "storage-grid-gateway:my_bucket" path: value: hello world dest: spec.arguments.parameters.0.value @@ -29,8 +35,9 @@ spec: apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: - name: arguments-via-webhook-event + generateName: storage-grid-wf- spec: + serviceAccountName: argo-events-sa entrypoint: whalesay arguments: parameters: diff --git a/examples/sensors/time-filter-webhook.yaml b/examples/sensors/time-filter-webhook.yaml index 433fd6469f..3b44450efe 100644 --- a/examples/sensors/time-filter-webhook.yaml +++ b/examples/sensors/time-filter-webhook.yaml @@ -5,12 +5,18 @@ metadata: labels: sensors.argoproj.io/sensor-controller-instanceid: argo-events spec: - repeat: true - serviceAccountName: argo-events-sa - imageVersion: "latest" - imagePullPolicy: Always - signals: - - name: webhook-gateway/foo + deploySpec: + containers: + - name: "sensor" + image: "argoproj/sensor" + imagePullPolicy: Always + serviceAccountName: argo-events-sa + eventProtocol: + type: "HTTP" + http: + port: "9300" + dependencies: + - name: "webhook-gateway-http:foo" filters: time: start: "22:14:05" diff --git a/examples/sensors/url-sensor.yaml b/examples/sensors/url-sensor.yaml index 77cbcdad78..669d2135bb 100644 --- a/examples/sensors/url-sensor.yaml +++ b/examples/sensors/url-sensor.yaml @@ -5,12 +5,18 @@ metadata: labels: sensors.argoproj.io/sensor-controller-instanceid: argo-events spec: - repeat: true - serviceAccountName: argo-events-sa - imageVersion: "latest" - imagePullPolicy: Always - signals: - - name: calendar-gateway/foo + deploySpec: + containers: + - name: "sensor" + image: "argoproj/sensor" + imagePullPolicy: Always + serviceAccountName: argo-events-sa + eventProtocol: + type: "HTTP" + http: + port: "9300" + dependencies: + - name: "artifact-gateway:input" triggers: - name: url-workflow-trigger resource: diff --git a/examples/sensors/webhook.yaml b/examples/sensors/webhook-http.yaml similarity index 72% rename from examples/sensors/webhook.yaml rename to examples/sensors/webhook-http.yaml index 4de14a3e83..78db19e201 100644 --- a/examples/sensors/webhook.yaml +++ b/examples/sensors/webhook-http.yaml @@ -1,17 +1,22 @@ - apiVersion: argoproj.io/v1alpha1 kind: Sensor metadata: - name: webhook-sensor + name: webhook-sensor-http labels: sensors.argoproj.io/sensor-controller-instanceid: argo-events spec: - repeat: true - serviceAccountName: argo-events-sa - imageVersion: "latest" - imagePullPolicy: Always - signals: - - name: webhook-gateway/foo + deploySpec: + containers: + - name: "sensor" + image: "argoproj/sensor" + imagePullPolicy: Always + serviceAccountName: argo-events-sa + dependencies: + - name: "webhook-gateway-http:foo" + eventProtocol: + type: "HTTP" + http: + port: "9300" triggers: - name: webhook-workflow-trigger resource: diff --git a/examples/sensors/webhook-nats-streaming.yaml b/examples/sensors/webhook-nats-streaming.yaml new file mode 100644 index 0000000000..464294085d --- /dev/null +++ b/examples/sensors/webhook-nats-streaming.yaml @@ -0,0 +1,58 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Sensor +metadata: + name: webhook-nats-streaming + labels: + sensors.argoproj.io/sensor-controller-instanceid: argo-events +spec: + deploySpec: + containers: + - name: "sensor" + image: "argoproj/sensor" + imagePullPolicy: Always + serviceAccountName: argo-events-sa + eventProtocol: + type: "NATS" + nats: + type: "Streaming" + url: "nats://example-nats.argo-events:4222" + clusterId: "example-stan" + clientId: "myclient1" + deliverAllAvailable: true + dependencies: + - name: "webhook-gateway-nats-streaming:foo" + triggers: + - name: argo-workflow + resource: + namespace: argo-events + group: argoproj.io + version: v1alpha1 + kind: Workflow + # The parameters from the workflow are overridden by the webhook's message + # An empty path means complete payload will be passed to trigger + parameters: + - src: + event: "webhook-gateway-nats-streaming:foo" + dest: spec.arguments.parameters.0.value + source: + inline: | + apiVersion: argoproj.io/v1alpha1 + kind: Workflow + metadata: + generateName: arguments-via-webhook-event + spec: + entrypoint: whalesay + arguments: + parameters: + - name: message + # this is the value that should be overridden + value: hello world + templates: + - name: whalesay + inputs: + parameters: + - name: message + container: + image: docker/whalesay:latest + command: [cowsay] + args: ["{{inputs.parameters.message}}"] diff --git a/examples/sensors/webhook-nats.yaml b/examples/sensors/webhook-nats.yaml new file mode 100644 index 0000000000..f68540708e --- /dev/null +++ b/examples/sensors/webhook-nats.yaml @@ -0,0 +1,43 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Sensor +metadata: + name: webhook-sensor + labels: + sensors.argoproj.io/sensor-controller-instanceid: argo-events +spec: + deploySpec: + containers: + - name: "sensor" + image: "argoproj/sensor:v0.6.3" + imagePullPolicy: Always + serviceAccountName: argo-events-sa + dependencies: + - name: "webhook-gateway-nats:foo" + eventProtocol: + type: "NATS" + nats: + url: "nats://nats.argo-events:4222" + type: "Standard" + triggers: + - name: webhook-workflow-trigger + resource: + namespace: argo-events + group: argoproj.io + version: v1alpha1 + kind: Workflow + source: + inline: | + apiVersion: argoproj.io/v1alpha1 + kind: Workflow + metadata: + generateName: hello-world- + spec: + entrypoint: whalesay + templates: + - name: whalesay + container: + args: + - "hello world" + command: + - cowsay + image: "docker/whalesay:latest" diff --git a/examples/sensors/webhook-with-complete-payload.yaml b/examples/sensors/webhook-with-complete-payload.yaml index fc6bf1bf88..36dc62691b 100644 --- a/examples/sensors/webhook-with-complete-payload.yaml +++ b/examples/sensors/webhook-with-complete-payload.yaml @@ -5,12 +5,19 @@ metadata: labels: sensors.argoproj.io/sensor-controller-instanceid: argo-events spec: - repeat: true - serviceAccountName: argo-events-sa - imageVersion: "latest" - imagePullPolicy: Always - signals: - - name: webhook-gateway/foo + deploySpec: + containers: + - name: "sensor" + image: "argoproj/sensor:v0.6.2" + imagePullPolicy: Always + serviceAccountName: argo-events-sa + eventProtocol: + type: "NATS" + nats: + type: "Standard" + url: "nats://nats.argo-events:4222" + dependencies: + - name: "webhook-gateway-nats:foo" triggers: - name: argo-workflow resource: @@ -22,14 +29,14 @@ spec: # An empty path means complete payload will be passed to trigger parameters: - src: - signal: webhook-gateway/foo + event: "webhook-gateway-nats:foo" dest: spec.arguments.parameters.0.value source: inline: | apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: - name: arguments-via-webhook-event + generateName: arguments-via-webhook-event spec: entrypoint: whalesay arguments: diff --git a/examples/sensors/webhook-with-resource-param.yaml b/examples/sensors/webhook-with-resource-param.yaml index 3594d337ad..bc8ad8b8aa 100644 --- a/examples/sensors/webhook-with-resource-param.yaml +++ b/examples/sensors/webhook-with-resource-param.yaml @@ -5,12 +5,19 @@ metadata: labels: sensors.argoproj.io/sensor-controller-instanceid: argo-events spec: - repeat: true - serviceAccountName: argo-events-sa - imageVersion: "latest" - imagePullPolicy: Always - signals: - - name: webhook-gateway/foo + deploySpec: + containers: + - name: "sensor" + image: "argoproj/sensor:v0.6.2" + imagePullPolicy: Always + serviceAccountName: argo-events-sa + eventProtocol: + type: "NATS" + nats: + type: "Standard" + url: "nats://nats.argo-events:4222" + dependencies: + - name: "webhook-gateway-nats:foo" triggers: - name: argo-workflow resource: @@ -19,31 +26,32 @@ spec: version: v1alpha1 kind: Workflow # The parameters from the workflow are overridden by the webhook's message + # An empty path means complete payload will be passed to trigger parameters: - src: - signal: webhook-gateway/foo - path: message - value: hello default + event: "webhook-gateway-nats:foo" + path: "index.msg" + value: "default value" dest: spec.arguments.parameters.0.value source: inline: | - apiVersion: argoproj.io/v1alpha1 - kind: Workflow - metadata: - name: arguments-via-webhook-event - spec: - entrypoint: whalesay - arguments: + apiVersion: argoproj.io/v1alpha1 + kind: Workflow + metadata: + generateName: arguments-via-webhook-event + spec: + entrypoint: whalesay + arguments: + parameters: + - name: message + # this is the value that should be overridden + value: hello world + templates: + - name: whalesay + inputs: parameters: - name: message - # this is the value that should be overridden - value: hello world - templates: - - name: whalesay - inputs: - parameters: - - name: message - container: - image: docker/whalesay:latest - command: [cowsay] - args: ["{{inputs.parameters.message}}"] + container: + image: docker/whalesay:latest + command: [cowsay] + args: ["{{inputs.parameters.message}}"] diff --git a/gateways/custom/github/Dockerfile b/gateways/community/github/Dockerfile similarity index 100% rename from gateways/custom/github/Dockerfile rename to gateways/community/github/Dockerfile diff --git a/gateways/custom/github/cmd/main.go b/gateways/community/github/cmd/main.go similarity index 95% rename from gateways/custom/github/cmd/main.go rename to gateways/community/github/cmd/main.go index e85b37d345..43d0d486f8 100644 --- a/gateways/custom/github/cmd/main.go +++ b/gateways/community/github/cmd/main.go @@ -19,7 +19,7 @@ package main import ( "github.com/argoproj/argo-events/common" "github.com/argoproj/argo-events/gateways" - "github.com/argoproj/argo-events/gateways/custom/github" + "github.com/argoproj/argo-events/gateways/community/github" "k8s.io/client-go/kubernetes" "os" ) diff --git a/gateways/custom/github/config.go b/gateways/community/github/config.go similarity index 100% rename from gateways/custom/github/config.go rename to gateways/community/github/config.go diff --git a/gateways/custom/github/start.go b/gateways/community/github/start.go similarity index 100% rename from gateways/custom/github/start.go rename to gateways/community/github/start.go diff --git a/gateways/custom/github/tokenauth.go b/gateways/community/github/tokenauth.go similarity index 100% rename from gateways/custom/github/tokenauth.go rename to gateways/community/github/tokenauth.go diff --git a/gateways/custom/github/validate.go b/gateways/community/github/validate.go similarity index 100% rename from gateways/custom/github/validate.go rename to gateways/community/github/validate.go diff --git a/gateways/custom/github/validate_test.go b/gateways/community/github/validate_test.go similarity index 100% rename from gateways/custom/github/validate_test.go rename to gateways/community/github/validate_test.go diff --git a/gateways/custom/gitlab/Dockerfile b/gateways/community/gitlab/Dockerfile similarity index 100% rename from gateways/custom/gitlab/Dockerfile rename to gateways/community/gitlab/Dockerfile diff --git a/gateways/custom/gitlab/cmd/main.go b/gateways/community/gitlab/cmd/main.go similarity index 95% rename from gateways/custom/gitlab/cmd/main.go rename to gateways/community/gitlab/cmd/main.go index 956bb7e2ea..5a3653e7e5 100644 --- a/gateways/custom/gitlab/cmd/main.go +++ b/gateways/community/gitlab/cmd/main.go @@ -21,7 +21,7 @@ import ( "github.com/argoproj/argo-events/common" "github.com/argoproj/argo-events/gateways" - "github.com/argoproj/argo-events/gateways/custom/gitlab" + "github.com/argoproj/argo-events/gateways/community/gitlab" "k8s.io/client-go/kubernetes" ) diff --git a/gateways/custom/gitlab/config.go b/gateways/community/gitlab/config.go similarity index 100% rename from gateways/custom/gitlab/config.go rename to gateways/community/gitlab/config.go diff --git a/gateways/custom/gitlab/start.go b/gateways/community/gitlab/start.go similarity index 100% rename from gateways/custom/gitlab/start.go rename to gateways/community/gitlab/start.go diff --git a/gateways/custom/gitlab/validate.go b/gateways/community/gitlab/validate.go similarity index 100% rename from gateways/custom/gitlab/validate.go rename to gateways/community/gitlab/validate.go diff --git a/gateways/custom/gitlab/validate_test.go b/gateways/community/gitlab/validate_test.go similarity index 100% rename from gateways/custom/gitlab/validate_test.go rename to gateways/community/gitlab/validate_test.go diff --git a/gateways/custom/storagegrid/Dockerfile b/gateways/community/storagegrid/Dockerfile similarity index 100% rename from gateways/custom/storagegrid/Dockerfile rename to gateways/community/storagegrid/Dockerfile diff --git a/gateways/custom/storagegrid/cmd/main.go b/gateways/community/storagegrid/cmd/main.go similarity index 92% rename from gateways/custom/storagegrid/cmd/main.go rename to gateways/community/storagegrid/cmd/main.go index 76c9f7f5a8..e103870c60 100644 --- a/gateways/custom/storagegrid/cmd/main.go +++ b/gateways/community/storagegrid/cmd/main.go @@ -19,7 +19,7 @@ package main import ( "github.com/argoproj/argo-events/common" "github.com/argoproj/argo-events/gateways" - "github.com/argoproj/argo-events/gateways/custom/storagegrid" + "github.com/argoproj/argo-events/gateways/community/storagegrid" ) func main() { diff --git a/gateways/custom/storagegrid/config.go b/gateways/community/storagegrid/config.go similarity index 100% rename from gateways/custom/storagegrid/config.go rename to gateways/community/storagegrid/config.go diff --git a/gateways/custom/storagegrid/start.go b/gateways/community/storagegrid/start.go similarity index 100% rename from gateways/custom/storagegrid/start.go rename to gateways/community/storagegrid/start.go diff --git a/gateways/custom/storagegrid/validate.go b/gateways/community/storagegrid/validate.go similarity index 100% rename from gateways/custom/storagegrid/validate.go rename to gateways/community/storagegrid/validate.go diff --git a/gateways/custom/storagegrid/validate_test.go b/gateways/community/storagegrid/validate_test.go similarity index 100% rename from gateways/custom/storagegrid/validate_test.go rename to gateways/community/storagegrid/validate_test.go diff --git a/gateways/core/artifact/install.md b/gateways/core/artifact/install.md new file mode 100644 index 0000000000..aeb49b10e2 --- /dev/null +++ b/gateways/core/artifact/install.md @@ -0,0 +1,60 @@ +# Artifact Gateway & Sensor + +Minio bucket notifications acts as event sources for artifact gateway. To setup minio, follow https://www.minio.io/kubernetes.html + +1. [Example event sources definition](#example-event-sources-definition) +2. [Install gateway](#install-gateway) +3. [Install sensor](#install-sensor) +4. [Trigger Workflow](#trigger-workflow) + +## Example event sources definition +```yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: artifact-gateway-configmap +data: + input: |- + bucket: + name: input # name of the bucket we want to listen to + endpoint: minio-service.argo-events:9000 # minio service endpoint + event: s3:ObjectCreated:Put # type of event + filter: # filter on object name if any + prefix: "" + suffix: "" + insecure: true # type of minio server deployment + accessKey: + key: accesskey # key within below k8 secret whose corresponding value is name of the accessKey + name: artifacts-minio # k8 secret name that holds minio creds + secretKey: + key: secretkey # key within below k8 secret whose corresponding value is name of the secretKey + name: artifacts-minio # k8 secret name that holds minio creds +``` + +```yaml +kubectl -n argo-events create -f https://github.com/argoproj/argo-events/blob/master/examples/gateways/artifact-gateway-configmap.yaml +``` + +## Install Gateway +Pre-requisite - create necessary buckets in Minio. +1. **Create gateway** + + ```yaml + kubectl -n argo-events create -f https://github.com/argoproj/argo-events/blob/master/examples/gateways/artifact-http.yaml + ``` + +2. **Check the status of the gateway** + + ```yaml + kubectl -n argo-events describe gateway artifact-gateway + ``` + + Make sure the gateway is in active state and all the event sources are in running state. + +## Install Sensor +```yaml +kubectl -n argo-events create -f https://github.com/argoproj/argo-events/blob/master/examples/sensors/artifact.yaml +``` + +## Trigger workflow +Drop a file onto `input` bucket and monitor workflows \ No newline at end of file diff --git a/gateways/core/calendar/install.md b/gateways/core/calendar/install.md new file mode 100644 index 0000000000..1593209e4b --- /dev/null +++ b/gateways/core/calendar/install.md @@ -0,0 +1,49 @@ +# Calendar Gateway & Sensor + +Intervals or cron schedules act as event sources for calendar gateway. + +1. [Example event sources definition](#example-event-sources-definition) +2. [Install gateway](#install-gateway) +3. [Install sensor](#install-sensor) +4. [Trigger Workflow](#trigger-workflow) + +## Example event sources definition +```yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: calendar-gateway-configmap +data: + interval: |- + interval: 55s # event is generated after every 10 seconds + schedule: |- + schedule: 30 * * * * # event is generated after 30 min past every hour +``` + +```yaml +kubectl -n argo-events create -f https://github.com/argoproj/argo-events/blob/master/examples/gateways/calendar-gateway-configmap.yaml +``` + +## Install gateway +1. **Create gateway** + + ```yaml + kubectl -n argo-events create -f https://github.com/argoproj/argo-events/blob/master/examples/gateways/calendar.yaml + ``` + +2. **Check the status of the gateway** + + ```yaml + kubectl -n argo-events describe gateway calendar-gateway + ``` + + Make sure the gateway is in active state and all the event sources are in running state. + +## Install Sensor +```yaml +kubectl -n argo-events create -f https://github.com/argoproj/argo-events/blob/master/examples/sensors/calendar.yaml +``` + +## Trigger Workflow +Wait for 55 seconds to pass or if the sensor has `calendar-gateway:schedule` as event dependency, then wait for 30 min past each hour +for workflow to trigger. \ No newline at end of file diff --git a/gateways/core/file/install.md b/gateways/core/file/install.md new file mode 100644 index 0000000000..ae5bb43d8b --- /dev/null +++ b/gateways/core/file/install.md @@ -0,0 +1,57 @@ +# File Gateway & Sensor + +File system serves as event source for file gateway + +1. [Example event sources definition](#example-event-sources-definition) +2. [Install gateway](#install-gateway) +3. [Install sensor](#install-sensor) +4. [Trigger Workflow](#trigger-workflow) + +## Example event sources definition +```yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: file-gateway-configmap +data: + bindir: |- # event source name can be any valid string + directory: "/bin/" # directory where file events are watched + type: CREATE # type of file event + path: x.txt # file to watch to +``` + +Supported file events are - +* Create +* Write +* Remove +* Rename +* Chmod + +```yaml +kubectl -n argo-events create -f https://github.com/argoproj/argo-events/blob/master/examples/gateways/file-gateway-configmap.yaml +``` + +## Install gateway +Pre-requisite - The file system you want to watch must be mounted in gateway pod and the directory under which a file is to be watched must exist. + +1. **Create gateway** + + ```yaml + kubectl -n argo-events create -f https://github.com/argoproj/argo-events/blob/master/examples/gateways/file.yaml + ``` + +2. **Check the status of the gateway** + + ```yaml + kubectl -n argo-events describe gateway file-gateway + ``` + + Make sure the gateway is in active state and all the event sources are in running state. + +## Install Sensor +```yaml +kubectl -n argo-events create -f https://github.com/argoproj/argo-events/blob/master/examples/sensors/file.yaml +``` + +## Trigger Workflow +Go to the directory specified in event source and create a file. diff --git a/gateways/core/resource/config.go b/gateways/core/resource/config.go index 5077f8d409..76047545a4 100644 --- a/gateways/core/resource/config.go +++ b/gateways/core/resource/config.go @@ -31,7 +31,6 @@ type ResourceEventSourceExecutor struct { } // resource refers to a dependency on a k8s resource. -// +k8s:openapi-gen=true type resource struct { // Namespace where resource is deployed Namespace string `json:"namespace"` @@ -40,18 +39,15 @@ type resource struct { // Version of the source Version string `json:"version"` // Group of the resource - // +k8s:openapi-gen=false metav1.GroupVersionKind `json:",inline"` } // ResourceFilter contains K8 ObjectMeta information to further filter resource event objects -// +k8s:openapi-gen=true type ResourceFilter struct { Prefix string `json:"prefix,omitempty"` Labels map[string]string `json:"labels,omitempty"` Annotations map[string]string `json:"annotations,omitempty"` - // +k8s:openapi-gen=false - CreatedBy metav1.Time `json:"createdBy,omitempty"` + CreatedBy metav1.Time `json:"createdBy,omitempty"` } func parseEventSource(es string) (*resource, error) { diff --git a/gateways/core/resource/install.md b/gateways/core/resource/install.md new file mode 100644 index 0000000000..9e2419432c --- /dev/null +++ b/gateways/core/resource/install.md @@ -0,0 +1,64 @@ +# Resource Gateway & Sensor + +K8s resources act as event sources for Resource gateway + +1. [Example event sources definition](#example-event-sources-definition) +2. [Install gateway](#install-gateway) +3. [Install sensor](#install-sensor) +4. [Trigger Workflow](#trigger-workflow) + +## Example event sources definition +```yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: resource-gateway-configmap +data: + successWorkflow: |- + namespace: argo-events # namespace where wf is deloyef + group: "argoproj.io" # wf group + version: "v1alpha1" # wf version + kind: "Workflow" # object kind + filter: # filters can be applied on labels, annotations, creation time and name + labels: + workflows.argoproj.io/phase: Succeeded + name: "my-workflow" + failureWorkflow: |- + namespace: argo-events + group: "argoproj.io" + version: "v1alpha1" + kind: "Workflow" + filter: + prefix: scripts-bash + labels: + workflows.argoproj.io/phase: Failed +``` + +Create gateway event sources + +```yaml +kubectl -n argo-events create -f https://github.com/argoproj/argo-events/blob/master/examples/gateways/resource-gateway-configmap.yaml +``` + +## Install gateway +1. **Create gateway** + + ```yaml + kubectl -n argo-events create -f https://github.com/argoproj/argo-events/blob/master/examples/gateways/resource.yaml + ``` + +2. **Check the status of the gateway** + + ```yaml + kubectl -n argo-events describe gateway resource-gateway + ``` + + Make sure the gateway is in active state and all the event sources are in running state. + +## Install Sensor +```yaml +kubectl -n argo-events create -f https://github.com/argoproj/argo-events/blob/master/examples/sensors/resource.yaml +``` + +## Trigger workflow +Create an argo workflow with name `my-workflow`. As soon as `my-workflow` succeeds, a new workflow will be triggered. \ No newline at end of file diff --git a/gateways/core/stream/amqp/install.md b/gateways/core/stream/amqp/install.md new file mode 100644 index 0000000000..1ef4d555eb --- /dev/null +++ b/gateways/core/stream/amqp/install.md @@ -0,0 +1,54 @@ +# AMQP Gateway & Sensor + +1. [Example event sources definition](#example-event-sources-definition) +2. [Install gateway](#install-gateway) +3. [Install sensor](#install-sensor) +4. [Trigger Workflow](#trigger-workflow) + +## Example event sources definition +```yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: amqp-gateway-configmap +data: + foo: |- + url: amqp://amqp.argo-events:5672 + exchangeName: foo + exchangeType: fanout + routingKey: fooK + bar: |- + url: amqp://amqp.argo-events:5672 + exchangeName: bar + exchangeType: fanout + routingKey: barK +``` + +Create gateway event sources + +```yaml +kubectl -n argo-events create -f https://github.com/argoproj/argo-events/blob/master/examples/gateways/amqp-gateway-configmap.yaml +``` + +## Install gateway +1. **Create gateway** + + ```yaml + kubectl -n argo-events create -f https://github.com/argoproj/argo-events/blob/master/examples/gateways/amqp.yaml + ``` + +2. **Check the status of the gateway** + + ```yaml + kubectl -n argo-events describe gateway amqp-gateway + ``` + + Make sure the gateway is in active state and all the event sources are in running state. + +## Install Sensor +```yaml +kubectl -n argo-events create -f https://github.com/argoproj/argo-events/blob/master/examples/sensors/amqp.yaml +``` + +## Trigger workflow +Send a message to exchange name `foo` with exchange type `fanout` and routing key as `fooK` on amqp://amqp.argo-events:5672 \ No newline at end of file diff --git a/gateways/core/stream/kafka/install.md b/gateways/core/stream/kafka/install.md new file mode 100644 index 0000000000..fcc10bdaff --- /dev/null +++ b/gateways/core/stream/kafka/install.md @@ -0,0 +1,54 @@ +# KAFKA Gateway & Sensor + +Kafka topics act as event sources for gateway + +1. [Example event sources definition](#example-event-sources-definition) +2. [Install gateway](#install-gateway) +3. [Install sensor](#install-sensor) +4. [Trigger Workflow](#trigger-workflow) + +## Example event sources definition +```yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: kafka-gateway-configmap +data: + foo: |- + url: kafka.argo-events:9092 # kafka service + topic: foo # topic name + partition: "0" # topic partition + bar: |- + url: kafka.argo-events:9092 + topic: bar + partition: "1" +``` + +Create gateway event sources + +```yaml +kubectl -n argo-events create -f https://github.com/argoproj/argo-events/blob/master/examples/gateways/kafka-gateway-configmap.yaml +``` + +## Install gateway +1. **Create gateway** + + ```yaml + kubectl -n argo-events create -f https://github.com/argoproj/argo-events/blob/master/examples/gateways/kafka.yaml + ``` + +2. **Check the status of the gateway** + + ```yaml + kubectl -n argo-events describe gateway kafka-gateway + ``` + + Make sure the gateway is in active state and all the event sources are in running state. + +## Install Sensor +```yaml +kubectl -n argo-events create -f https://github.com/argoproj/argo-events/blob/master/examples/sensors/kafka.yaml +``` + +## Trigger Workflow +Send a message to topic `foo` on partition `0`. You might find this useful https://kafka.apache.org/quickstart#quickstart_send \ No newline at end of file diff --git a/gateways/core/stream/mqtt/install.md b/gateways/core/stream/mqtt/install.md new file mode 100644 index 0000000000..8f2c50db47 --- /dev/null +++ b/gateways/core/stream/mqtt/install.md @@ -0,0 +1,50 @@ +# MQTT Gateway & Sensor + +1. [Example event sources definition](#example-event-sources-definition) +2. [Install gateway](#install-gateway) +3. [Install sensor](#install-sensor) +4. [Trigger Workflow](#trigger-workflow) + +## Example event sources definition +```yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: mqtt-gateway-configmap +data: + foo: |- + url: tcp://mqtt.argo-events:1883 # mqtt service + topic: foo # topic to listen to + bar: |- + url: tcp://mqtt.argo-events:1883 + topic: bar +``` + +Create gateway event sources + +```yaml +kubectl -n argo-events create -f https://github.com/argoproj/argo-events/blob/master/examples/gateways/mqtt-gateway-configmap.yaml +``` + +## Install gateway +1. **Create gateway** + + ```yaml + kubectl -n argo-events create -f https://github.com/argoproj/argo-events/blob/master/examples/gateways/mqtt.yaml + ``` + +2. **Check the status of the gateway** + + ```yaml + kubectl -n argo-events describe gateway mqtt-gateway + ``` + + Make sure the gateway is in active state and all the event sources are in running state. + +## Install Sensor +```yaml +kubectl -n argo-events create -f https://github.com/argoproj/argo-events/blob/master/examples/sensors/mqtt.yaml +``` + +## Trigger Workflow +Publish message to topic `foo`. You might find this helpful https://www.ev3dev.org/docs/tutorials/sending-and-receiving-messages-with-mqtt/ \ No newline at end of file diff --git a/gateways/core/stream/nats/install.md b/gateways/core/stream/nats/install.md new file mode 100644 index 0000000000..43d6849e4f --- /dev/null +++ b/gateways/core/stream/nats/install.md @@ -0,0 +1,49 @@ +# NATS Gateway & Sensor + +NATS subjects act as event sources for gateway + +1. [Example event sources definition](#example-event-sources-definition) +2. [Install gateway](#install-gateway) +3. [Install sensor](#install-sensor) +4. [Trigger Workflow](#trigger-workflow) + +## Example event sources definition +```yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: nats-gateway-configmap +data: + foo: |- + url: nats://nats.argo-events:4222 # nats service + subject: foo # subject to listen to +``` + +Create gateway event sources + +```yaml +kubectl -n argo-events create -f https://github.com/argoproj/argo-events/blob/master/examples/gateways/nats-gateway-configmap.yaml +``` + +## Install gateway +1. **Create gateway** + + ```yaml + kubectl -n argo-events create -f https://github.com/argoproj/argo-events/blob/master/examples/gateways/nats.yaml + ``` + +2. **Check the status of the gateway** + + ```yaml + kubectl -n argo-events describe gateway nats-gateway + ``` + + Make sure the gateway is in active state and all the event sources are in running state. + +## Install Sensor +```yaml +kubectl -n argo-events create -f https://github.com/argoproj/argo-events/blob/master/examples/sensors/nats.yaml +``` + +## Trigger Workflow +Publish message to subject `foo`. You might find this useful https://github.com/nats-io/go-nats/tree/master/examples/nats-pub diff --git a/gateways/core/webhook/install.md b/gateways/core/webhook/install.md new file mode 100644 index 0000000000..934292d02f --- /dev/null +++ b/gateways/core/webhook/install.md @@ -0,0 +1,68 @@ +# Webhook Gateway & Sensor + +REST api endpoints act as event sources for gateway + +1. [Example event sources definition](#example-event-sources-definition) +2. [Install gateway](#install-gateway) +3. [Install sensor](#install-sensor) +4. [Trigger Workflow](#trigger-workflow) + +## Example event sources definition +```yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: webhook-gateway-configmap +data: + # each event source defines - + # the port for HTTP server + # endpoint to listen to + # acceptable http method + bar: |- + port: "12000" + endpoint: "/bar" + method: "POST" + foo: |- + port: "12000" + endpoint: "/foo" + method: "POST" +``` + +Create gateway event sources + +```yaml +kubectl -n argo-events create -f https://github.com/argoproj/argo-events/blob/master/examples/gateways/webhook-gateway-configmap.yaml +``` + +## Install gateway +1. **Create gateway** + + ```yaml + kubectl -n argo-events create -f https://github.com/argoproj/argo-events/blob/master/examples/gateways/webhook-http.yaml + ``` + +2. **Check the status of the gateway** + + ```yaml + kubectl -n argo-events describe gateway webhook-gateway-http + ``` + + Make sure the gateway is in active state and all the event sources are in running state. + +## Install Sensor +```yaml +kubectl -n argo-events create -f https://github.com/argoproj/argo-events/blob/master/examples/sensors/webhook-http.yaml +``` + +## Trigger Workflow +Note: the `WEBHOOK_SERVICE_URL` will differ based on the Kubernetes cluster. +``` +export WEBHOOK_SERVICE_URL=$(minikube service -n argo-events --url ) +echo $WEBHOOK_SERVICE_URL +curl -d '{"message":"this is my first webhook"}' -H "Content-Type: application/json" -X POST $WEBHOOK_SERVICE_URL/foo +``` + +Note: + * If you are facing an issue getting service url by running `minikube service -n argo-events --url `, you can use `kubectl port-forward` + * Open another terminal window and enter `kubectl port-forward -n argo-events 9003:` + * You can now use `localhost:9003` to query webhook gateway diff --git a/hack/k8s/manifests/argo-events-cluster-roles.yaml b/hack/k8s/manifests/argo-events-cluster-roles.yaml index c12a754af2..be11347ab8 100644 --- a/hack/k8s/manifests/argo-events-cluster-roles.yaml +++ b/hack/k8s/manifests/argo-events-cluster-roles.yaml @@ -5,7 +5,7 @@ metadata: roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole - name: argo-events-cluster-role + name: argo-events-role subjects: - kind: ServiceAccount name: argo-events-sa @@ -14,7 +14,7 @@ subjects: apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: - name: argo-events-cluster-role + name: argo-events-role rules: - apiGroups: - apiextensions.k8s.io diff --git a/hack/k8s/manifests/gateway-controller-deployment.yaml b/hack/k8s/manifests/gateway-controller-deployment.yaml index a67e4c4ee3..8e269085f5 100644 --- a/hack/k8s/manifests/gateway-controller-deployment.yaml +++ b/hack/k8s/manifests/gateway-controller-deployment.yaml @@ -13,7 +13,7 @@ spec: serviceAccountName: argo-events-sa containers: - name: gateway-controller - image: argoproj/gateway-controller:v0.6 + image: argoproj/gateway-controller imagePullPolicy: Always env: - name: GATEWAY_NAMESPACE diff --git a/hack/k8s/manifests/sensor-controller-configmap.yaml b/hack/k8s/manifests/sensor-controller-configmap.yaml index b4da0b62c8..63a2459cd6 100644 --- a/hack/k8s/manifests/sensor-controller-configmap.yaml +++ b/hack/k8s/manifests/sensor-controller-configmap.yaml @@ -8,4 +8,4 @@ metadata: data: config: | instanceID: argo-events - namespace: argo-events + namespace: argo-events \ No newline at end of file diff --git a/hack/k8s/manifests/sensor-controller-deployment.yaml b/hack/k8s/manifests/sensor-controller-deployment.yaml index f851101b57..343eec737d 100644 --- a/hack/k8s/manifests/sensor-controller-deployment.yaml +++ b/hack/k8s/manifests/sensor-controller-deployment.yaml @@ -13,7 +13,7 @@ spec: serviceAccountName: argo-events-sa containers: - name: sensor-controller - image: argoproj/sensor-controller:v0.6 + image: argoproj/sensor-controller imagePullPolicy: Always env: - name: SENSOR_NAMESPACE diff --git a/hack/update-codegen.sh b/hack/update-codegen.sh index 5ad8540629..2c90f2204f 100644 --- a/hack/update-codegen.sh +++ b/hack/update-codegen.sh @@ -21,6 +21,7 @@ set -o pipefail CODEGEN_PKG="../vendor/k8s.io/code-generator/" + bash -x ${CODEGEN_PKG}/generate-groups.sh "deepcopy,client,informer,lister" \ github.com/argoproj/argo-events/pkg/client/sensor github.com/argoproj/argo-events/pkg/apis \ "sensor:v1alpha1" \ @@ -30,3 +31,4 @@ bash -x ${CODEGEN_PKG}/generate-groups.sh "deepcopy,client,informer,lister" \ github.com/argoproj/argo-events/pkg/client/gateway github.com/argoproj/argo-events/pkg/apis \ "gateway:v1alpha1" \ --go-header-file ./custom-boilerplate.go.txt + diff --git a/pkg/apis/sensor/v1alpha1/build/generated.json b/pkg/apis/sensor/v1alpha1/build/generated.json deleted file mode 100644 index 76e4554e1a..0000000000 --- a/pkg/apis/sensor/v1alpha1/build/generated.json +++ /dev/null @@ -1,646 +0,0 @@ -{ - "swagger": "2.0", - "info": { - "title": "Argo-Events", - "version": "1.0" - }, - "paths": {}, - "definitions": { - "v1alpha1.ArtifactLocation": { - "description": "ArtifactLocation describes the source location for an external artifact", - "properties": { - "configmap": { - "$ref": "#/definitions/v1alpha1.ConfigmapArtifact" - }, - "file": { - "$ref": "#/definitions/v1alpha1.FileArtifact" - }, - "inline": { - "type": "string" - }, - "s3": { - "$ref": "#/definitions/v1alpha1.S3Artifact" - }, - "url": { - "$ref": "#/definitions/v1alpha1.URLArtifact" - } - } - }, - "v1alpha1.ConfigmapArtifact": { - "description": "ConfigmapArtifact contains information about artifact in k8 configmap", - "required": [ - "name", - "namespace", - "key" - ], - "properties": { - "key": { - "description": "Key within configmap data which contains trigger resource definition", - "type": "string" - }, - "name": { - "description": "Name of the configmap", - "type": "string" - }, - "namespace": { - "description": "Namespace where configmap is deployed", - "type": "string" - } - } - }, - "v1alpha1.Data": { - "required": [ - "filters" - ], - "properties": { - "escalationPolicy": { - "description": "EscalationPolicy is the escalation to trigger in case the signal filter fails", - "$ref": "#/definitions/v1alpha1.EscalationPolicy" - }, - "filters": { - "description": "filter constraints", - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1.DataFilter" - } - } - } - }, - "v1alpha1.DataFilter": { - "description": "DataFilter describes constraints and filters for event data Regular Expressions are purposefully not a feature as they are overkill for our uses here See Rob Pike's Post: https://commandcenter.blogspot.com/2011/08/regular-expressions-in-lexing-and.html", - "required": [ - "path", - "type", - "value" - ], - "properties": { - "escalationPolicy": { - "description": "EscalationPolicy is the escalation to trigger in case the signal filter fails", - "$ref": "#/definitions/v1alpha1.EscalationPolicy" - }, - "path": { - "description": "Path is the JSONPath of the event's (JSON decoded) data key Path is a series of keys separated by a dot. A key may contain wildcard characters '*' and '?'. To access an array value use the index as the key. The dot and wildcard characters can be escaped with '\\'. See https://github.com/tidwall/gjson#path-syntax for more information on how to use this.", - "type": "string" - }, - "type": { - "description": "Type contains the JSON type of the data", - "type": "string" - }, - "value": { - "description": "Value is the expected string value for this key Booleans are pased using strconv.ParseBool() Numbers are parsed using as float64 using strconv.ParseFloat() Strings are taken as is Nils this value is ignored", - "type": "string" - } - } - }, - "v1alpha1.EscalationPolicy": { - "description": "EscalationPolicy describes the policy for escalating sensors in an Error state. An escalation policy is associated with signal filter. Whenever a signal filter fails escalation will be triggered", - "required": [ - "name", - "level", - "message" - ], - "properties": { - "level": { - "description": "Level is the degree of importance", - "type": "string" - }, - "message": { - "description": "need someway to progressively get more serious notifications", - "type": "string" - }, - "name": { - "description": "Name is name of the escalation policy This is referred by signal filter/s", - "type": "string" - } - } - }, - "v1alpha1.Event": { - "description": "Event is a data record expressing an occurrence and its context. Adheres to the CloudEvents v0.1 specification", - "required": [ - "context", - "payload" - ], - "properties": { - "context": { - "$ref": "#/definitions/v1alpha1.EventContext" - }, - "payload": { - "type": "string", - "format": "byte" - } - } - }, - "v1alpha1.EventContext": { - "description": "EventContext contains metadata that provides circumstantial information about the occurrence.", - "required": [ - "eventType", - "eventTypeVersion", - "cloudEventsVersion", - "source", - "eventID", - "schemaURL", - "contentType" - ], - "properties": { - "cloudEventsVersion": { - "description": "The version of the CloudEvents specification which the event uses. Enables the interpretation of the context.", - "type": "string" - }, - "contentType": { - "description": "Content type of the data attribute value. Enables the data attribute to carry any type of content, whereby format and encoding might differ from that of the chosen event format. For example, the data attribute may carry an XML or JSON payload and the consumer is informed by this attribute being set to \"application/xml\" or \"application/json\" respectively.", - "type": "string" - }, - "escalationPolicy": { - "description": "EscalationPolicy is the name of escalation policy to trigger in case the signal filter fails", - "$ref": "#/definitions/v1alpha1.EscalationPolicy" - }, - "eventID": { - "description": "ID of the event. The semantics are explicitly undefined to ease the implementation of producers. Enables deduplication. Must be unique within scope of producer.", - "type": "string" - }, - "eventType": { - "description": "The type of occurrence which has happened. Often this attribute is used for routing, observability, policy enforcement, etc. should be prefixed with a reverse-DNS name. The prefixed domain dictates the organization which defines the semantics of this event type. ex: com.github.pull.create", - "type": "string" - }, - "eventTypeVersion": { - "description": "The version of the eventType. Enables the interpretation of data by eventual consumers, requires the consumer to be knowledgeable about the producer.", - "type": "string" - }, - "extensions": { - "description": "This is for additional metadata and does not have a mandated structure. Enables a place for custom fields a producer or middleware might want to include and provides a place to test metadata before adding them to the CloudEvents specification.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "schemaURL": { - "description": "A link to the schema that the data attribute adheres to. Must adhere to the format specified in RFC 3986.", - "$ref": "#/definitions/v1alpha1.URI" - }, - "source": { - "description": "This describes the event producer.", - "$ref": "#/definitions/v1alpha1.URI" - } - } - }, - "v1alpha1.EventWrapper": { - "description": "EventWrapper wraps an event with an additional flag to check if we processed this event already", - "required": [ - "event", - "seen" - ], - "properties": { - "event": { - "$ref": "#/definitions/v1alpha1.Event" - }, - "seen": { - "type": "boolean" - } - } - }, - "v1alpha1.FileArtifact": { - "description": "FileArtifact contains information about an artifact in a filesystem", - "properties": { - "path": { - "type": "string" - } - } - }, - "v1alpha1.GroupVersionKind": { - "description": "GroupVersionKind unambiguously identifies a kind. It doesn't anonymously include GroupVersion to avoid automatic coercion. It doesn't use a GroupVersion to avoid custom marshalling.", - "required": [ - "group", - "version", - "kind" - ], - "properties": { - "group": { - "type": "string" - }, - "kind": { - "type": "string" - }, - "version": { - "type": "string" - } - } - }, - "v1alpha1.NodeStatus": { - "description": "NodeStatus describes the status for an individual node in the sensor's FSM. A single node can represent the status for signal or a trigger.", - "required": [ - "id", - "name", - "displayName", - "type", - "phase" - ], - "properties": { - "displayName": { - "description": "DisplayName is the human readable representation of the node", - "type": "string" - }, - "id": { - "description": "ID is a unique identifier of a node within a sensor It is a hash of the node name", - "type": "string" - }, - "latestEvent": { - "description": "LatestEvent stores the last seen event for this node", - "$ref": "#/definitions/v1alpha1.EventWrapper" - }, - "message": { - "description": "store data or something to save for signal notifications or trigger events", - "type": "string" - }, - "name": { - "description": "Name is a unique name in the node tree used to generate the node ID", - "type": "string" - }, - "phase": { - "description": "Phase of the node", - "type": "string" - }, - "type": { - "description": "Type is the type of the node", - "type": "string" - } - } - }, - "v1alpha1.ResourceObject": { - "description": "ResourceObject is the resource object to create on kubernetes", - "required": [ - "group", - "version", - "kind", - "namespace", - "source", - "parameters" - ], - "properties": { - "group": { - "type": "string" - }, - "kind": { - "type": "string" - }, - "labels": { - "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. This overrides any labels in the unstructured object with the same key.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "namespace": { - "description": "Namespace in which to create this object optional defaults to the service account namespace", - "type": "string" - }, - "parameters": { - "description": "Parameters is the list of resource parameters to pass in the object", - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1.ResourceParameter" - } - }, - "source": { - "description": "Source of the K8 resource file(s)", - "$ref": "#/definitions/v1alpha1.ArtifactLocation" - }, - "version": { - "type": "string" - } - } - }, - "v1alpha1.ResourceParameter": { - "description": "ResourceParameter indicates a passed parameter to a service template", - "required": [ - "src", - "dest" - ], - "properties": { - "dest": { - "description": "Dest is the JSONPath of a resource key. A path is a series of keys separated by a dot. The colon character can be escaped with '.' The -1 key can be used to append a value to an existing array. See https://github.com/tidwall/sjson#path-syntax for more information about how this is used.", - "type": "string" - }, - "src": { - "description": "Src contains a source reference to the value of the resource parameter from a signal event", - "$ref": "#/definitions/v1alpha1.ResourceParameterSource" - } - } - }, - "v1alpha1.ResourceParameterSource": { - "description": "ResourceParameterSource defines the source for a resource parameter from a signal event", - "required": [ - "signal", - "path" - ], - "properties": { - "path": { - "description": "Path is the JSONPath of the event's (JSON decoded) data key Path is a series of keys separated by a dot. A key may contain wildcard characters '*' and '?'. To access an array value use the index as the key. The dot and wildcard characters can be escaped with '\\'. See https://github.com/tidwall/gjson#path-syntax for more information on how to use this.", - "type": "string" - }, - "signal": { - "description": "Signal is the name of the signal for which to retrieve this event", - "type": "string" - }, - "value": { - "description": "Value is the default literal value to use for this parameter source This is only used if the path is invalid. If the path is invalid and this is not defined, this param source will produce an error.", - "type": "string" - } - } - }, - "v1alpha1.RetryStrategy": { - "description": "RetryStrategy represents a strategy for retrying operations" - }, - "v1alpha1.S3Artifact": { - "description": "S3Artifact contains information about an artifact in S3", - "properties": { - "bucket": { - "type": "string" - }, - "endpoint": { - "type": "string" - }, - "event": { - "type": "string" - }, - "filter": { - "$ref": "#/definitions/v1alpha1.S3Filter" - }, - "insecure": { - "type": "boolean" - }, - "key": { - "type": "string" - }, - "region": { - "type": "string" - } - } - }, - "v1alpha1.S3Bucket": { - "description": "S3Bucket contains information for an S3 Bucket", - "properties": { - "bucket": { - "type": "string" - }, - "endpoint": { - "type": "string" - }, - "insecure": { - "type": "boolean" - }, - "region": { - "type": "string" - } - } - }, - "v1alpha1.S3Filter": { - "description": "S3Filter represents filters to apply to bucket nofifications for specifying constraints on objects", - "required": [ - "prefix", - "suffix" - ], - "properties": { - "prefix": { - "type": "string" - }, - "suffix": { - "type": "string" - } - } - }, - "v1alpha1.Sensor": { - "description": "Sensor is the definition of a sensor resource", - "required": [ - "spec", - "status" - ], - "properties": { - "spec": { - "$ref": "#/definitions/v1alpha1.SensorSpec" - }, - "status": { - "$ref": "#/definitions/v1alpha1.SensorStatus" - } - } - }, - "v1alpha1.SensorList": { - "description": "SensorList is the list of Sensor resources", - "required": [ - "items" - ], - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1.Sensor" - } - } - } - }, - "v1alpha1.SensorSpec": { - "description": "SensorSpec represents desired sensor state", - "required": [ - "signals", - "triggers" - ], - "properties": { - "imagePullPolicy": { - "description": "ImagePullPolicy determines the when the image should be pulled from docker repository", - "type": "string" - }, - "imageVersion": { - "description": "ImageVersion is the sensor image version to run", - "type": "string" - }, - "repeat": { - "description": "Repeat is a flag that determines if the sensor status should be reset after completion. NOTE: functionality is currently experimental and part of an initiative to define a more concrete pattern or cycle for sensor repetition.", - "type": "boolean" - }, - "serviceAccountName": { - "description": "ServiceAccountName required for role based access", - "type": "string" - }, - "signals": { - "description": "Signals is a list of the things that this sensor is dependent on. These are the inputs to this sensor.", - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1.Signal" - } - }, - "triggers": { - "description": "Triggers is a list of the things that this sensor evokes. These are the outputs from this sensor.", - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1.Trigger" - } - } - } - }, - "v1alpha1.SensorStatus": { - "description": "SensorStatus contains information about the status of a sensor.", - "required": [ - "phase" - ], - "properties": { - "completionCount": { - "description": "CompletionCount is the count of sensor's successful runs.", - "type": "integer", - "format": "int32" - }, - "message": { - "description": "Message is a human readable string indicating details about a sensor in its phase", - "type": "string" - }, - "nodes": { - "description": "Nodes is a mapping between a node ID and the node's status it records the states for the FSM of this sensor.", - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/v1alpha1.NodeStatus" - } - }, - "phase": { - "description": "Phase is the high-level summary of the sensor", - "type": "string" - } - } - }, - "v1alpha1.Signal": { - "description": "Signal describes a dependency", - "required": [ - "name" - ], - "properties": { - "deadline": { - "description": "Deadline is the duration in seconds after the StartedAt time of the sensor after which this signal is terminated. Note: this functionality is not yet respected, but it's theoretical behavior is as follows: This trumps the recurrence patterns of calendar signals and allows any signal to have a strict defined life. After the deadline is reached and this signal has not in a Resolved state, this signal is marked as Failed and proper escalations should proceed.", - "type": "integer", - "format": "int64" - }, - "filters": { - "description": "Filters and rules governing tolerations of success and constraints on the context and data of an event", - "$ref": "#/definitions/v1alpha1.SignalFilter" - }, - "name": { - "description": "Name is a unique name of this dependency", - "type": "string" - } - } - }, - "v1alpha1.SignalFilter": { - "description": "SignalFilter defines filters and constraints for a signal.", - "required": [ - "name" - ], - "properties": { - "context": { - "description": "Context filter constraints with escalation", - "$ref": "#/definitions/v1alpha1.EventContext" - }, - "data": { - "description": "Data filter constraints with escalation", - "$ref": "#/definitions/v1alpha1.Data" - }, - "name": { - "description": "Name is the name of signal filter", - "type": "string" - }, - "time": { - "description": "Time filter on the signal with escalation", - "$ref": "#/definitions/v1alpha1.TimeFilter" - } - } - }, - "v1alpha1.TimeFilter": { - "description": "TimeFilter describes a window in time. Filters out signal events that occur outside the time limits. In other words, only events that occur after Start and before Stop will pass this filter.", - "properties": { - "escalationPolicy": { - "description": "EscalationPolicy is the escalation to trigger in case the signal filter fails", - "$ref": "#/definitions/v1alpha1.EscalationPolicy" - }, - "start": { - "description": "Start is the beginning of a time window. Before this time, events for this signal are ignored and format is hh:mm:ss", - "type": "string" - }, - "stop": { - "description": "StopPattern is the end of a time window. After this time, events for this signal are ignored and format is hh:mm:ss", - "type": "string" - } - } - }, - "v1alpha1.Trigger": { - "description": "Trigger is an action taken, output produced, an event created, a message sent", - "required": [ - "name", - "retryStrategy" - ], - "properties": { - "message": { - "description": "Message describes a message that will be sent on a queue", - "type": "string" - }, - "name": { - "description": "Name is a unique name of the action to take", - "type": "string" - }, - "resource": { - "description": "Resource describes the resource that will be created by this action", - "$ref": "#/definitions/v1alpha1.ResourceObject" - }, - "retryStrategy": { - "description": "RetryStrategy is the strategy to retry a trigger if it fails", - "$ref": "#/definitions/v1alpha1.RetryStrategy" - } - } - }, - "v1alpha1.URI": { - "description": "URI is a Uniform Resource Identifier based on RFC 3986", - "required": [ - "scheme", - "user", - "password", - "host", - "port", - "path", - "query", - "fragment" - ], - "properties": { - "fragment": { - "type": "string" - }, - "host": { - "type": "string" - }, - "password": { - "type": "string" - }, - "path": { - "type": "string" - }, - "port": { - "type": "integer", - "format": "int32" - }, - "query": { - "type": "string" - }, - "scheme": { - "type": "string" - }, - "user": { - "type": "string" - } - } - }, - "v1alpha1.URLArtifact": { - "description": "URLArtifact contains information about an artifact at an http endpoint.", - "properties": { - "path": { - "type": "string" - }, - "verifyCert": { - "type": "boolean" - } - } - } - } - } \ No newline at end of file diff --git a/sensors/event-handler_test.go b/sensors/event-handler_test.go index 0720c2edf0..fb8e23a71d 100644 --- a/sensors/event-handler_test.go +++ b/sensors/event-handler_test.go @@ -44,9 +44,13 @@ spec: deploySpec: containers: - name: "sensor" - image: "metalgearsolid/sensor:v0.6.1" + image: "argoproj/sensor" imagePullPolicy: Always serviceAccountName: argo-events-sa + eventProtocol: + type: "HTTP" + http: + port: "9300" dependencies: - name: test-gateway:test triggers: