From 00ba647d00d6dbe1aea8bd238747fc6416fbdf72 Mon Sep 17 00:00:00 2001 From: isindir Date: Thu, 27 May 2021 10:22:06 +0100 Subject: [PATCH] fix: change debian to ubuntu and upgrade client-go to improve image scan (#74) * fix: change debian to ubuntu and upgrade client-go to improve image scan * Fix typo * Fix typo * Fix typo --- Dockerfile | 4 +- Makefile | 2 +- chart/helm3/sops-secrets-operator/Chart.yaml | 4 +- chart/helm3/sops-secrets-operator/README.md | 2 +- .../tests/operator_test.yaml | 6 +- chart/helm3/sops-secrets-operator/values.yaml | 2 +- docs/gpg/README.md | 2 +- docs/index.yaml | 108 +++++++----- docs/sops-secrets-operator-0.8.4.tgz | Bin 0 -> 10335 bytes go.mod | 6 +- go.sum | 154 +++++++++++++++--- 11 files changed, 205 insertions(+), 85 deletions(-) create mode 100644 docs/sops-secrets-operator-0.8.4.tgz diff --git a/Dockerfile b/Dockerfile index ad5a0bdb..ee765815 100644 --- a/Dockerfile +++ b/Dockerfile @@ -18,8 +18,8 @@ COPY controllers/ controllers/ # Build (GOARCH=amd64) RUN CGO_ENABLED=0 GO111MODULE=on go build -a -o manager main.go -# https://hub.docker.com/_/debian?tab=tags&page=1&ordering=last_updated -FROM debian:buster-20210511 +# https://hub.docker.com/_/ubuntu?tab=tags&page=1&ordering=last_updated +FROM ubuntu:focal-20210416 RUN apt-get -y update \ && apt-get -y upgrade \ diff --git a/Makefile b/Makefile index 3d3f2df3..68547eaf 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ GO := GOPROXY=https://proxy.golang.org go -SOPS_SEC_OPERATOR_VERSION := 0.2.1 +SOPS_SEC_OPERATOR_VERSION := 0.2.2 # https://github.com/kubernetes-sigs/controller-tools/releases CONTROLLER_GEN_VERSION := "v0.4.1" diff --git a/chart/helm3/sops-secrets-operator/Chart.yaml b/chart/helm3/sops-secrets-operator/Chart.yaml index 530a50a2..f6c0c476 100644 --- a/chart/helm3/sops-secrets-operator/Chart.yaml +++ b/chart/helm3/sops-secrets-operator/Chart.yaml @@ -1,6 +1,6 @@ apiVersion: v2 -version: 0.8.3 -appVersion: 0.2.1 +version: 0.8.4 +appVersion: 0.2.2 type: application description: Helm chart deploys sops-secrets-operator name: sops-secrets-operator diff --git a/chart/helm3/sops-secrets-operator/README.md b/chart/helm3/sops-secrets-operator/README.md index 1775dd00..89deb2c7 100644 --- a/chart/helm3/sops-secrets-operator/README.md +++ b/chart/helm3/sops-secrets-operator/README.md @@ -131,7 +131,7 @@ The following table lists the configurable parameters of the Sops-secrets-operat | healthProbes.readiness | object | `{"initialDelaySeconds":5,"periodSeconds":10}` | Readiness probe configuration | | image.pullPolicy | string | `"Always"` | Operator image pull policy | | image.repository | string | `"isindir/sops-secrets-operator"` | Operator image name | -| image.tag | string | `"0.2.1"` | Operator image tag | +| image.tag | string | `"0.2.2"` | Operator image tag | | imagePullSecrets | list | `[]` | Secrets to pull image from private docker repository | | kubeconfig | object | `{"enabled":false,"path":null}` | Paths to a kubeconfig. Only required if out-of-cluster. | | logging | object | `{"encoder":"json","level":"info","stacktraceLevel":"error"}` | Logging configuration section suggested values Development Mode (encoder=consoleEncoder,logLevel=Debug,stackTraceLevel=Warn). Production Mode (encoder=jsonEncoder,logLevel=Info,stackTraceLevel=Error) (default) | diff --git a/chart/helm3/sops-secrets-operator/tests/operator_test.yaml b/chart/helm3/sops-secrets-operator/tests/operator_test.yaml index 7e7ef727..80bf2de8 100644 --- a/chart/helm3/sops-secrets-operator/tests/operator_test.yaml +++ b/chart/helm3/sops-secrets-operator/tests/operator_test.yaml @@ -30,8 +30,8 @@ tests: app.kubernetes.io/instance: sops app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: sops-secrets-operator - app.kubernetes.io/version: 0.2.1 - helm.sh/chart: sops-secrets-operator-0.8.3 + app.kubernetes.io/version: 0.2.2 + helm.sh/chart: sops-secrets-operator-0.8.4 # template metadata and spec selector - it: should correctly render template metadata and spec selector @@ -140,7 +140,7 @@ tests: asserts: - equal: path: spec.template.spec.containers[0].image - value: isindir/sops-secrets-operator:0.2.1 + value: isindir/sops-secrets-operator:0.2.2 - equal: path: spec.template.spec.containers[0].imagePullPolicy value: Always diff --git a/chart/helm3/sops-secrets-operator/values.yaml b/chart/helm3/sops-secrets-operator/values.yaml index db629a23..f5ef1fe1 100644 --- a/chart/helm3/sops-secrets-operator/values.yaml +++ b/chart/helm3/sops-secrets-operator/values.yaml @@ -12,7 +12,7 @@ image: # -- Operator image name repository: isindir/sops-secrets-operator # -- Operator image tag - tag: 0.2.1 + tag: 0.2.2 # -- Operator image pull policy pullPolicy: Always diff --git a/docs/gpg/README.md b/docs/gpg/README.md index 1f78ea76..ae82dedb 100644 --- a/docs/gpg/README.md +++ b/docs/gpg/README.md @@ -7,7 +7,7 @@ This procedure describes basic setup to use PGP keys with sops-secrets-operator. Run docker container in the directory of this README file: ```bash -docker run -v $( pwd ):/tmp/scripts -ti ubuntu:16.04 bash +docker run --rm -v $( pwd ):/tmp/scripts -ti ubuntu:20.04 bash ``` Then generate PGP keys inside container. PGP key files will remain in the folder diff --git a/docs/index.yaml b/docs/index.yaml index e687284c..327c4768 100644 --- a/docs/index.yaml +++ b/docs/index.yaml @@ -1,9 +1,29 @@ apiVersion: v1 entries: sops-secrets-operator: + - apiVersion: v2 + appVersion: 0.2.2 + created: "2021-05-27T09:26:25.074618+01:00" + description: Helm chart deploys sops-secrets-operator + digest: 39d3d35a28a405e7baf82d507fa642966c2705ac3ca2f10077186a7fec5de1f6 + keywords: + - gitops + - sops + - kms + - encryption + maintainers: + - email: isindir@users.sf.net + name: isindir + name: sops-secrets-operator + sources: + - https://github.com/isindir/sops-secrets-operator.git + type: application + urls: + - https://isindir.github.io/sops-secrets-operator/sops-secrets-operator-0.8.4.tgz + version: 0.8.4 - apiVersion: v2 appVersion: 0.2.1 - created: "2021-05-26T07:10:50.660901+01:00" + created: "2021-05-27T09:26:25.073739+01:00" description: Helm chart deploys sops-secrets-operator digest: 4a1a3299532a4ec61acb61db45d763385bc3c2bd50c9c1707e3ba258498b5ee5 keywords: @@ -23,7 +43,7 @@ entries: version: 0.8.3 - apiVersion: v2 appVersion: 0.2.1 - created: "2021-05-26T07:10:50.659999+01:00" + created: "2021-05-27T09:26:25.072487+01:00" description: Helm chart deploys sops-secrets-operator digest: d328b4e165c3945430e196a853836dcee9982929fe24455021ddb885099d5334 keywords: @@ -43,7 +63,7 @@ entries: version: 0.8.2 - apiVersion: v2 appVersion: 0.2.0 - created: "2021-05-26T07:10:50.658355+01:00" + created: "2021-05-27T09:26:25.071122+01:00" description: Helm chart deploys sops-secrets-operator digest: d0ac8b738d0f10d64b2fb78c4386efe91de39aa88a4b107fdf9d93a82d18573c keywords: @@ -63,7 +83,7 @@ entries: version: 0.8.1 - apiVersion: v2 appVersion: 0.2.0 - created: "2021-05-26T07:10:50.657217+01:00" + created: "2021-05-27T09:26:25.069858+01:00" description: Helm chart deploys sops-secrets-operator digest: 289d7c6c96f858fe15427b1858fbfcdec373fc345acf52e667df4ca5ee729c10 keywords: @@ -83,7 +103,7 @@ entries: version: 0.8.0 - apiVersion: v2 appVersion: 0.1.17 - created: "2021-05-26T07:10:50.655878+01:00" + created: "2021-05-27T09:26:25.067806+01:00" description: sops secrets operator digest: 1c3c4bba7d66a7621beced04856d9904260558fe10369513743bc322d69482c1 keywords: @@ -103,7 +123,7 @@ entries: version: 0.7.6 - apiVersion: v2 appVersion: 0.1.16 - created: "2021-05-26T07:10:50.654332+01:00" + created: "2021-05-27T09:26:25.066632+01:00" description: sops secrets operator digest: c526d5d4b9c7c2cce1d9da2c75b4e9be7a994f24dce159a659189414a8725eae keywords: @@ -123,7 +143,7 @@ entries: version: 0.7.5 - apiVersion: v2 appVersion: 0.1.16 - created: "2021-05-26T07:10:50.653027+01:00" + created: "2021-05-27T09:26:25.065199+01:00" description: sops secrets operator digest: 572c9015988b76869b58997e02a0c64152283e559721e4883d54f1258a57e8b7 keywords: @@ -143,7 +163,7 @@ entries: version: 0.7.4 - apiVersion: v2 appVersion: 0.1.15 - created: "2021-05-26T07:10:50.65+01:00" + created: "2021-05-27T09:26:25.0635+01:00" description: sops secrets operator digest: 84365f8e919ba9d3a00cfa50435cce6c63a8383357b2fde062b7aab8baeca6eb keywords: @@ -163,7 +183,7 @@ entries: version: 0.7.3 - apiVersion: v2 appVersion: 0.1.14 - created: "2021-05-26T07:10:50.648548+01:00" + created: "2021-05-27T09:26:25.06215+01:00" description: sops secrets operator digest: a1f2375080df20421701a33179b8e947ee682a70084d83d85da707889871ad64 keywords: @@ -183,7 +203,7 @@ entries: version: 0.7.2 - apiVersion: v2 appVersion: 0.1.13 - created: "2021-05-26T07:10:50.647069+01:00" + created: "2021-05-27T09:26:25.060716+01:00" description: sops secrets operator digest: 2e81dc4e4d49d9cd802aff263f005e04fb57df07f33b3ce8643ab287dfd3a7fb keywords: @@ -203,7 +223,7 @@ entries: version: 0.7.1 - apiVersion: v2 appVersion: 0.1.12 - created: "2021-05-26T07:10:50.645914+01:00" + created: "2021-05-27T09:26:25.059721+01:00" description: sops secrets operator digest: 81f59ed60bfa8204ed285476f9ed96a45a6f4e7cc6940a5d246c9241573d93d5 keywords: @@ -223,7 +243,7 @@ entries: version: 0.7.0 - apiVersion: v2 appVersion: 0.1.12 - created: "2021-05-26T07:10:50.64491+01:00" + created: "2021-05-27T09:26:25.058545+01:00" description: sops secrets operator digest: 91c3fbda73ba2d860bdaa21e37bf9afbc260ff767b377a144d0181d116a7ee34 keywords: @@ -243,7 +263,7 @@ entries: version: 0.6.8 - apiVersion: v2 appVersion: 0.1.12 - created: "2021-05-26T07:10:50.643907+01:00" + created: "2021-05-27T09:26:25.056789+01:00" description: sops secrets operator digest: 89d9d41d70d4dafcfb957bd48776ad779d0cef7dbb1ab2daf0b745a53dd6e3c6 maintainers: @@ -258,7 +278,7 @@ entries: version: 0.6.7 - apiVersion: v2 appVersion: 0.1.11 - created: "2021-05-26T07:10:50.642869+01:00" + created: "2021-05-27T09:26:25.055767+01:00" description: sops secrets operator digest: 7b0a65fd6fa9bafa3fd11bfef1a5f91f1e17d8cb8ad65b6377ffdc4d12495d01 maintainers: @@ -273,7 +293,7 @@ entries: version: 0.6.6 - apiVersion: v2 appVersion: 0.1.10 - created: "2021-05-26T07:10:50.641726+01:00" + created: "2021-05-27T09:26:25.054762+01:00" description: sops secrets operator digest: fac31d6cc862cb7b9a81aee52ba1fc4183d70bdcb7424c3dbdd087fb53246b30 maintainers: @@ -288,7 +308,7 @@ entries: version: 0.6.5 - apiVersion: v2 appVersion: 0.1.9 - created: "2021-05-26T07:10:50.640176+01:00" + created: "2021-05-27T09:26:25.053724+01:00" description: sops secrets operator digest: 01347c27e37dfff999ebcee12aae6d0aafa092d7c3b221d566cdf0abe71f4d5a maintainers: @@ -303,7 +323,7 @@ entries: version: 0.6.4 - apiVersion: v2 appVersion: 0.1.8 - created: "2021-05-26T07:10:50.639265+01:00" + created: "2021-05-27T09:26:25.052484+01:00" description: sops secrets operator digest: 6348b1b1b0e8d3df3926e437b2c0f4ad63268d26e2cb54cbecbb564102e6b19c maintainers: @@ -318,7 +338,7 @@ entries: version: 0.6.3 - apiVersion: v2 appVersion: 0.1.7 - created: "2021-05-26T07:10:50.638024+01:00" + created: "2021-05-27T09:26:25.051309+01:00" description: sops secrets operator digest: 710c1c9fa73a2ebf791fda4a608b5e29072d42c0b68c803c7bbeed54a582fd7f maintainers: @@ -333,7 +353,7 @@ entries: version: 0.6.2 - apiVersion: v2 appVersion: 0.1.7 - created: "2021-05-26T07:10:50.636877+01:00" + created: "2021-05-27T09:26:25.048962+01:00" description: sops secrets operator digest: f2a606c3837843241bb9d59adc02c38e1cca98753c602b9f758cc61d735ca7cd maintainers: @@ -348,7 +368,7 @@ entries: version: 0.6.1 - apiVersion: v2 appVersion: 0.1.6 - created: "2021-05-26T07:10:50.635542+01:00" + created: "2021-05-27T09:26:25.047863+01:00" description: sops secrets operator digest: a2bbf9b39ec5f5b82965037f8f245fb3122adbe31b1c7d336fa1f4cddb228b88 maintainers: @@ -363,7 +383,7 @@ entries: version: 0.6.0 - apiVersion: v1 appVersion: 0.1.8 - created: "2021-05-26T07:10:50.633385+01:00" + created: "2021-05-27T09:26:25.046506+01:00" description: sops secrets operator digest: b89986787f33bb6ed9fb0c658431be8646302e9c1a24537c26269c62249fa071 maintainers: @@ -377,7 +397,7 @@ entries: version: 0.5.3 - apiVersion: v1 appVersion: 0.1.7 - created: "2021-05-26T07:10:50.632431+01:00" + created: "2021-05-27T09:26:25.045479+01:00" description: sops secrets operator digest: 9467709cf6fbe8d9d779cedf15fe388af172b609f3ca452ef3d8894f39d999df maintainers: @@ -391,7 +411,7 @@ entries: version: 0.5.2 - apiVersion: v1 appVersion: 0.1.7 - created: "2021-05-26T07:10:50.631604+01:00" + created: "2021-05-27T09:26:25.044633+01:00" description: sops secrets operator digest: b54b5d8497564ddc04bd6d8b105eb0a3559e82ae1f6aab2f59ed3e426f119287 maintainers: @@ -405,7 +425,7 @@ entries: version: 0.5.1 - apiVersion: v1 appVersion: 0.1.6 - created: "2021-05-26T07:10:50.630774+01:00" + created: "2021-05-27T09:26:25.04379+01:00" description: sops secrets operator digest: 177f1ed214d6e72eda589a6ab155a417c1a4229bfda11e87f24af125a3542ad1 maintainers: @@ -419,7 +439,7 @@ entries: version: 0.5.0 - apiVersion: v2 appVersion: 0.1.5 - created: "2021-05-26T07:10:50.629935+01:00" + created: "2021-05-27T09:26:25.042949+01:00" description: sops secrets operator digest: 1535e130357afa883db0b3d30735c817d3b7d412fe5bdfd71534d0c08defa7d1 maintainers: @@ -434,7 +454,7 @@ entries: version: 0.4.8 - apiVersion: v2 appVersion: 0.1.5 - created: "2021-05-26T07:10:50.628783+01:00" + created: "2021-05-27T09:26:25.041868+01:00" description: sops secrets operator digest: 19b11dc2d1945f3c436a7d03763b4391d4a382fc13ea515d25422827d859d6d0 maintainers: @@ -449,7 +469,7 @@ entries: version: 0.4.7 - apiVersion: v2 appVersion: 0.1.5 - created: "2021-05-26T07:10:50.627707+01:00" + created: "2021-05-27T09:26:25.040957+01:00" description: sops secrets operator digest: c839e5d3374b948d27ad49643411f4891fdec44d179dea06423bb0d6e29d5e32 maintainers: @@ -464,7 +484,7 @@ entries: version: 0.4.6 - apiVersion: v2 appVersion: 0.1.4 - created: "2021-05-26T07:10:50.626259+01:00" + created: "2021-05-27T09:26:25.03961+01:00" description: sops secrets operator digest: c71f9f66be32f8b9d3c8d780b09b2455a40fd9755314004efd2bb8d379dafe3c maintainers: @@ -479,7 +499,7 @@ entries: version: 0.4.5 - apiVersion: v2 appVersion: 0.1.3 - created: "2021-05-26T07:10:50.62511+01:00" + created: "2021-05-27T09:26:25.038707+01:00" description: sops secrets operator digest: f3f2f89d4ef6018776df0a12a63dd2f9c9519b9d1ac03a9a405e31d0fd902ba0 maintainers: @@ -494,7 +514,7 @@ entries: version: 0.4.4 - apiVersion: v2 appVersion: 0.1.2 - created: "2021-05-26T07:10:50.624296+01:00" + created: "2021-05-27T09:26:25.037871+01:00" description: sops secrets operator digest: 1fd5eed318627f5ed0656f4e8ce4a25729568a1626ae313bcbe21050f5f26240 maintainers: @@ -509,7 +529,7 @@ entries: version: 0.4.3 - apiVersion: v2 appVersion: 0.1.2 - created: "2021-05-26T07:10:50.623447+01:00" + created: "2021-05-27T09:26:25.036776+01:00" description: sops secrets operator digest: 1f4f9869c75f0922e83ba5d530e101bd4252d5c1c31365800cc9d1425680cf18 maintainers: @@ -524,7 +544,7 @@ entries: version: 0.4.2 - apiVersion: v2 appVersion: 0.1.1 - created: "2021-05-26T07:10:50.621841+01:00" + created: "2021-05-27T09:26:25.035787+01:00" description: sops secrets operator digest: 6b054a4e9f261eea3cb84ee2e70b87b24780f1703e2c218ea5f69b7f82d1876f maintainers: @@ -539,7 +559,7 @@ entries: version: 0.4.1 - apiVersion: v2 appVersion: 0.1.0 - created: "2021-05-26T07:10:50.620856+01:00" + created: "2021-05-27T09:26:25.034854+01:00" description: sops secrets operator digest: 78b62ab37eac1b45f0a68a9752a3615c5d3f1c960bb4057e665923ce104931cf maintainers: @@ -554,7 +574,7 @@ entries: version: 0.4.0 - apiVersion: v1 appVersion: 0.1.5 - created: "2021-05-26T07:10:50.61983+01:00" + created: "2021-05-27T09:26:25.033989+01:00" description: sops secrets operator digest: 41baa3c580cb9d8951c18513a4f04c4dbbfad99de9c62f53de2450c0c7b76725 maintainers: @@ -568,7 +588,7 @@ entries: version: 0.3.7 - apiVersion: v1 appVersion: 0.1.5 - created: "2021-05-26T07:10:50.618187+01:00" + created: "2021-05-27T09:26:25.032377+01:00" description: sops secrets operator digest: 1103b1f7bf7af3f400c172227cd5a3659f3a03e5e8158b19ba0b25f7ed45208b maintainers: @@ -582,7 +602,7 @@ entries: version: 0.3.6 - apiVersion: v1 appVersion: 0.1.5 - created: "2021-05-26T07:10:50.616183+01:00" + created: "2021-05-27T09:26:25.030419+01:00" description: sops secrets operator digest: 15c72ba7fb09d0e980ec32fd94f56893c439c05c435281a9ab9c8bc94bd20063 maintainers: @@ -596,7 +616,7 @@ entries: version: 0.3.5 - apiVersion: v1 appVersion: 0.1.4 - created: "2021-05-26T07:10:50.615267+01:00" + created: "2021-05-27T09:26:25.0294+01:00" description: sops secrets operator digest: 025a6a6381b75286756ef55105ace6e911e5a5818b495ede6356cc8ec572aeac maintainers: @@ -610,7 +630,7 @@ entries: version: 0.3.4 - apiVersion: v1 appVersion: 0.1.3 - created: "2021-05-26T07:10:50.614268+01:00" + created: "2021-05-27T09:26:25.027817+01:00" description: sops secrets operator digest: f61b070b640169439cf4ab500047c1e356748a85871f7aeefde46d63d87d453a maintainers: @@ -624,7 +644,7 @@ entries: version: 0.3.3 - apiVersion: v1 appVersion: 0.1.2 - created: "2021-05-26T07:10:50.612957+01:00" + created: "2021-05-27T09:26:25.02676+01:00" description: sops secrets operator digest: 2b37dc4e545e8a9540f6b7693079b98bf161ec5a68899defcfc9420bdcbb33e3 maintainers: @@ -638,7 +658,7 @@ entries: version: 0.3.2 - apiVersion: v1 appVersion: 0.1.1 - created: "2021-05-26T07:10:50.611731+01:00" + created: "2021-05-27T09:26:25.025517+01:00" description: sops secrets operator digest: 2e2762b8f9d66aab0caacde225955fec8bfd5a4cc10dc6943a1de3809dda4091 maintainers: @@ -652,7 +672,7 @@ entries: version: 0.3.1 - apiVersion: v1 appVersion: 0.1.0 - created: "2021-05-26T07:10:50.61058+01:00" + created: "2021-05-27T09:26:25.024478+01:00" description: sops secrets operator digest: ce84f5b64402a582c7689cb842ba03fb10f968c38b57dc9e05f588493128019a maintainers: @@ -666,7 +686,7 @@ entries: version: 0.3.0 - apiVersion: v2 appVersion: 0.0.10 - created: "2021-05-26T07:10:50.607706+01:00" + created: "2021-05-27T09:26:25.023166+01:00" description: sops secrets operator digest: 5e4c8bc37ea2c819c55b288c0a5e76ff8c9c02be591bd53776606666af45581c maintainers: @@ -681,7 +701,7 @@ entries: version: 0.2.1 - apiVersion: v1 appVersion: 0.0.10 - created: "2021-05-26T07:10:50.606239+01:00" + created: "2021-05-27T09:26:25.022101+01:00" description: sops secrets operator digest: 50b8ebab19008dfc43de1eaee8b0f6287f7a55134585dc6ae88df2520d779f8f maintainers: @@ -693,4 +713,4 @@ entries: urls: - https://isindir.github.io/sops-secrets-operator/sops-secrets-operator-0.1.10.tgz version: 0.1.10 -generated: "2021-05-26T07:10:50.604253+01:00" +generated: "2021-05-27T09:26:25.020611+01:00" diff --git a/docs/sops-secrets-operator-0.8.4.tgz b/docs/sops-secrets-operator-0.8.4.tgz new file mode 100644 index 0000000000000000000000000000000000000000..67fda3279b495a17b67bc9902f0ab9afd757d6ba GIT binary patch literal 10335 zcmV-lD4^FLiwG0|00000|0w_~VMtOiV@ORlOnEsqVl!4SWK%V1T2nbTPgYhoO;>Dc zVQyr3R8em|NM&qo0PKDJSKPR=;QiTug|>6wA+XrpO}^&z+qq|Xz~r(?fCJ3Tc`rK$ zgj?;_U|WtPH|Y%7zkQENk}ZGr2M}^+9{wSrZKfV^umzhQhVMxKu%Dp@8xABuWDx=z%;Bn|l-zf%goZPpLpuAdLQV_rrUC!gzwEBx5w8F;NBfNf={J&U`az9&lOtVNBf}0R1w4pjC2&T zJe9~tV#@M(j8Z053lcV_6H3OODYmCdjnL5ZXo4d$@(==m$A(=9UW2;wkb=zwm5k2| z-PNvnI>1OAc}V?h)pC2WERSQ9v6zN)55cb!_%TAe@eQ5})95peRB;Mw=*kn$5|nW| zGmN_?+@V`H^CXXBQ+tFy{-(hl&j{yqOaw64x6B_a4syj;t%)@+)IYYu2=#hPK*TJK zY7i!Q958WQ;foSsK!q zYT>0RN@$u(BGB`Mrf9espyy*VcwcRLT-V;6NWw?xm4SJJ z)u3Dr%L!t+^x4D@<6KC>1FtNsT1iqhn8zbD!Ld;CoMAZ~85HkX6wx$7x_Hhtxq^iH z|2&F_P+h4N3@C{iiCG4N?gJYW^qiz28x#Ix$Wp;#a-e^1$1HlU%Ko@duJUMGNE}|D za~u-=_E*f)O{H~CI2-30T@~K%f~5^$hv|ehU>$JI_-4V-O)u81D*E`paE4+QApotK z`<$f&u?gBxNH&!0Y#8!4Hi2b;c7)Vt7YN`}J!1JqKuBhUU#X!sS1=9o0PSfxwW!95 z4;$NPgQgRv{wIp;jctV;r*oxWNkq72HTnk{pqnWTrzm8c6OplW46+dBLb3z_G!!d( zgaS{~kP|Fa;|gj#qzjCYLfLEwmY|mL6`K)*3|K1_YXvCf5N9%1VpedhO8sWwA*a%N zjSjwf-jv{2PERXPu4PU{xjBv`v#oL{M#c)dS zm@YuU?e_&ZT2TxKW)QwTdD}h!y(lY%_;7+QCC|wvdb@Xm^xT7PXdEjcQ=JcUxt<5u zjE?Q7g+5M{@*-n|1tRH;a+bmfwo`qZngFCnIDu~0st`~r83b&|*XWti<;ZrJDX8?k zQcofyp`Lz``7|7%D2s;Q7Re4E*|9v{J3;S0oOSUz%nCjqDJ>M^D>bl`K~WO;~2LBN(oHjOG$%w)%F!Wq1D^H8cHj>Kf({hmH0<56|xRM4fOO-j! z5~GwK%J4j9xK4+Q-L@AaW!I6uDV?$a}9?_71kn51fO3N$60D8-u#(t-_Lk(k}6Zd2cN!!#PD3N_81Z9knL#p^m* zc4R6urBhbUNs3c>xUcx9>z^40Wt^rV&2Vg}P!^;vJa(DC7gGWNp6`}xU39p=*@Sq~ zgc$1DEf9^Fxd2L0y(SSSEkXd2XCwi}#Wk6WqCMLM9iXaQsM@|$HE@=3mT{^EkugTr zmA@`_>^XAr+%k0AFhbL@UG&uE0`b(+iDD{%ad@Tqrh#YR?23bQ_6z2sO5WMQ-s!>l#oN<^gY&~9AWb-YNaki)uJ2D@k z;`K_cDCVtI=>3Vt#4c@i;}{mU0z`cX*@4kH(^XM1Ij4de&nET^3kf9>RQprGc51SCYe|K z1?v$tEPhq}pW_%73TmlMQoR_K%&7l)G4&L+Vf0CcVuEKxPaIevwWdx*NLj8&TsUQF z_^6ptjmumR9_YOV91CXcP$Ez`#c8Pj=TfNdLo9X0QFjfBsg$wShy^LzNaW#Eq5nWr zs@5}sn&sv!M`MO=a9U}JQ!P(*Yb6jjVR6iEl&~r2v9i*(5gz}p)RCN$L?K8?NQA(A zz76f?Bw;gc)rUEc=jh59!)j@UHcD1+1O{kArLk@i3bS0P;M39(-N&?KRG%*%Q)f`RPn4FoCcG(-|oXYtgOC|YSu6qw)LPE9Aoio+X zhx-b%>P4&sf#>P2_*tk$((uJ#P}p*B+seJ=EYE5MCjv$4wTIB8T0l4YoW+D!*X3%4 zYi$L9xUf&47*fn(YEkNUg1|NCb6>ebW!?_)g6`u}1|;*4++$n4HX0ZaOS z=go^3)&AcZ3|>F=|D!yA{L$Y+Gn$N$AQG${InT(C%G$=^l#I|;|La#zmGTZgXE3`@ z^**d!pTgW6c&41MYyz4R)N4OPP&IqVFUx}c5awhI+I~{R8){c%wB02y`9miKZ|hs=MVZb5D|J9DN=Sc)#*BVky^kF_3%+P5 z!Kr4Nu3XSsdAl}&YIQ6psP}Ke|2NUALDP8Gk-DzGE7It6vl>d~JXv)ybhVKiT?)33 zR_<=7)9Y-U%X|H|Ip#;VaPEaef_ne6hk6&iyNorKBrG)>UaL~9OKXrg%Yy4-fCZHG z^=jvjKh$C%&c{piNr1k7^`<0F0x|6aD^{s%cm|c56wp*iwfX=^Rq1dBlxF5`;Wp6@ zt8g4ppc++f(Wjir0<7X~E0hGMI3i>JYF?$uZb#JmW+nZg>q3r`+Q^G?=(Tu$1FszaZ&@H0rSS{*bDq0aj=s}cDJD|n7Lpv57XZTZ2JRvzv zqkY4ha(`A;tZ?0a(pbxF*G9o&C)6ouH&{Cgo1N0C0{Y&f`Sd)(vrPXRhky&tV)Cu@ z|C=|%hW>x?r2ik~sVxln6%Gs44@O9-#^D>z<&<&y1@_8<>mRgvGc?M7PfN=wi^-i- zez|Bd%Ju%5p69Xl0mT`GEkf8f^-;(eAJf!r2OPu~UZbiI=xyO4@P{z(HnujJ(0aXQ zWxcDK;7q_zL-8Gfnc96JvCL~gBA66?lwlc8;jcU!V@aBj$&92@l+A6&rAw_qXu?t| znVP?Xka5C95VE9=cCb%P=?>!c;dT>;@ss=Wkb1kjx@cYaYY9Yic3(&TUtB5D(rDdzVA=lfn^!ge-<_S;J8z!! z|6@E$^nXLG|A!WV)hC93k!e8WSHF``!c1TnDy}c*eW+7EM26eUeRvJi5R1tvnJ6wa zr^m2e0e<|F2%Wej5Le@wBY}9XGJ*>K{JbZ|z@G zHwt3AZ(2FBDvQ=-6^dQnYW3B38lo^O_Zggl^H<(x{ zmZcF|Zzt_jpQyFadqV?452}mT*T$#_fHTw;9Inlf)hHwfp%X!*SSs0n;w0{>R`BtM zn&Q^L;tE?HlreW<4MMi3^%M*)ezs-xFtid?BS5VnK>@K0LboV&nPI3IV|2;?j8RmVv+Yn`uZFhgG@u|P@n*)2s;yfWA6bGF) z>3yTZd$kV2DQ9&JFuVF`AqcbQ)73KR79ZXs6u!Zl%bpG>(^1^v&0el`n9)6S{ilAfYK@rM#dR$T|=~qzI|8q zyRJg*lAi|aP|GlL@K?$$=wHU7m@MzeYvPMp=$FBqYthv<{Flnzf0seAkc%9r5m`xa z++mY82290yUKJ^R*2{5%$H!?rH$J*cXtb)dLP$RsydSd=$Dm%d2ZyVoF^?+3{j3q( zm=MWnxIDUX0MU&F93S<3U)L4Bs^c4=KMr@^1cP7@40Wvvy*=O85tlv$Dpo7HO2m!J z3^K-LO_@Bi&fzh^W5N;GVw9!eMXhulXK_q8G8_qXahgWjg$_L6NGeQpEGLKx#L{>U zp|CiVbVl01)ElF*`+&XCQWG)lj|rqA@xed;$BIo^hE&(u2LQg{%(tP&PBk07Yd&?= zj9KJEY;9Xz_|R3e43_N%Pz$K7fvTw`Cp5f6JN10OEac*Is%B~omCj6ce2o!f18YHw zMwOvAl`?xvWc8&9J4byjd|&Dx8LxUcw8?0tPHUWP7XV9b&{C@oxE7_m6lA4*6<84( zyf&9q&G{oUsi5`&xm3bjz$TK;s%)^6z{&Cc#nJAEgBl+o`0FRmk~;H{_Utu#^{wCZ z)M1xwfl2XEKC9XyC6RBBkKevOxY#{8d4IUKdwzI)bg_4OuzzrLez^Potc~jJl&NF9p$oe4d&2M*=4V7zn~!Y0zTOMbeH;fHB$AUcPJ)7rA& zJ2G!;+Da|9AAv)E!av-WlP%) zxGsxT!mvG8FcxiPFPD^Bw02W!TB5!6eZIB zy$I|s4^?b9_kG!2!Q;f1m!;f*^SfbtnDf77=fCF6;lk+uI~@Zr^Z$GKW>EM4e)ZjCs%(Bq|j{0CDKCp1bKCl7#Q z+4z55_x~Hddj00*)A)ak=NUS|QWCB+r06b3H&c?LtDMG==rY6MHI9fV5&(-l%NUme zi7AO=6vgaHyI0UO+D4qj7`EqOJGgw0)3Nsqr6kh%#hz!JOz3BufAxQCnxv#Gg_?>a zlo1XYcLFciKf5@Sj1%t}GSSAr?46-8<-!XhD*N!SCf^ILzVJT$YhO&GzWT@h6tlEn z0=mNCb)M-=Pu^A_ZZdBxxWd=oRv?qi+xmarGxQ7Ql;r{)?jHy*$T<6*gwhM>nBcxH z$Jy^*FcTpg6Mzki2k+CTPr;Ulufkx<+X_B?`s8f|_$u_af*DP`5BQoWwBJ#iw2%MO zgWdfP2SGA^5FCrg|IVP1|6}-Su=6zjALV)0kv!j9In}@S>=`=K>6!P~n0Ve6`d@d+ zxBm}-bpHO|_fP-b^DZwhO*UQc?>cj_jBNtU!rxxsDBu*pSr*TcKQSctLp~N3^Tlk4 z<7|qD7iIX&MaaiG0i5@Dq~<)7XA#F^f_xvml;Rk0XhyWt-beq}L&*25R4F2KHoCyg zGk1A;>3RQ93YHUe*(`8r@*KhkDu`(aWFv#bhDEA79ENa0%+OxU@-ce%;Y_i9_t!I2 zs%SDsGm6pWHO0xL!#4#AQdv0$8RJm)-Qir=2wz8$kr1o%b-IKf|7 z3Y|=@MIY7;vY!jWqnwUO-=tXc4Jf;ng5R3`DJw*`qk8+3PM`qXKLaU8Q7fz08p zno@FMQ-msJY(Y-k7MM2Mo}4zb<|+%x^i*tc2NN)@2teuUjGkA?7)rmCy zT_1!Cg(_-61nvk<_DR)OkV!+mYfZeX#?4_WizL{d2h+43yjP4#Avw+zr5{@*xa`w) z#_Ogln=Dn(%N#ixZl76HaEjN=^y-s1!{}fl1=AX|0a(WM8)u#-yzaK2hq! zGbQ&*{I%06`ltlHwOP5ip)#EIRe?=I29(z9YOSMa(pg1BUvfhF3095h3#r(zL3s#m zq1{-SEnxk`iU^ZSz7^>2@+zijzsxtU0336hc)5~kRx)J@O&CvLe82l}X0q2AIWpO0 z)X2p`{E5a_E#WYH5zNx~QZuE_;33Nu6J65+&E5hA&%1=MwFm z?w36^Ev6aWk8k%*ypkF=tG_87G~l- zJ(%Z65DD7B&DN|PlrB{T7nZ}wO4Eu~<1)J?(qxZd=7p)s2kDXgb(zV%^a>JPI$ z)syp#^hT&x+cxTLn*u?gU39+cnNXPzOYpTN%7ra+T;%Ds*<#@!9^l?dobM{QHisza z=g*R3m(4~ysX4_V3zs>bsZB|mZb&r6Go9=o$KbtDtDz+V%c6Gqy*W97TxNtPR0x{^ zQ;ijqI~lleP+Y>)-!GMc(nMM?w1z%AJ~^vqu5Hz53Hw6h7{iS5%wF%5Mm{K6b3T7f z=Kf4yuuvJKIyEvXb0(w1eHcI0RMIwMY%>A#zv37+mc+tQT=9759LFF-QAL6xf-bMg zTm|j}d5Y^uSc;}PExQ4?T$Fcqn!>C>@5X`wjp*Zh7UCEw%U3Z| zvl~a`x97@CR-}|`>P;|ZeokqtF>}sPZa?*P(gOH=naq8YJMhv`TBF)hNiSkjck!ZC z;`x+V7gdv>SU~n^1>2FAkR=&QA+s_Tf`t^Wgeb;`77%Tc#!x}MHFRkkZLeZa1Kx6$ zk=iGe3aM)r#E&_GZG zleQySerRYs&!7RKmm^wv=#1DZ~ztAwVGtDe!&93E8J6Vbr%0ybouc&=#7=L z`U9Mn6r6R+*0?nbKt^F!6TMYM%eDHNZ%R*zLi85im12om)O{;np;CfsI*c?K_R#l? z6xeHF(sjI#aJxz?DUJ(EH!~jOk{OLYiE`_p5?1FtJ$idZq>rey#Q$=dalxkIw(^s^v>%X9XL*4 zUj@#>9lJL0#k^2P1XcjTO_OaEp`@+n#^Tneyt`a936RUEk|hcy!*bdirFk4fU)=G! zL%?YwXBr40h^IH|DQ(-^?m@&&Z`4z(M5Vy0aW=hC4{om0nrywR5g+(s#BXseqRXfv zzNsQKz$Ml8wJuDoz}2x&RoPa|wow0EHz-z`R*%Z6G*SyrwUrNYzao%uS6i~>5?2k+ z^;+y$4Xt$H3_xonEU3eKz^h#WVa3y_v?H|XaJ%^W77f5nI8jVfFh{L@sjva)L>m?W zU+F349yh}p;H6J`owbWDhJwnC7=yZ=|5o>iRk3SV-8FHqaQm0V(&`r5Vq&&md(;ZW zx}}!#@nSFl8L@X4wN`WdV4F27*CTaT2N&FC?Vnp}cRJ~ItKWz|7*STR=%ML z-FlwAgpuHIT5c9OXNi}-FNj3fWd0*`@5k-p&)+T)=25P%^BtsaS5@O!e_gW%p0tqEe&dA82dq zoMu~FBlMpv2S9cQ-wyAOjvW8?-1)J2pZx!>--MHi)bX4UYj^@L^Z$7@d{y)Reer7e zl>hHh9?$oEubKpklFyQ)aAwp@@C+*U)XWb1;FbXUyl#r9idQc(xlMGSzOpMIWE{K; z39np^F&hLggQ17?vX!#*oF+s_oMa=UEPT(+B4Nd_C10-19u(=Qf!2(=a2lwoGfvGc z6HXkSQd940AKvSH!3bq>&T%}drB1+6HTK$#@wysAtXYUkr66Vg^qP1 zUtxLYJ9~vETp6c)kHvYC78sN(O`9bcVh_%Uecz0*ivjgc*{_-g*c+ij8DyM@;tEbwdDsNu)XaGSZ1XAwZfv%Y zr85GiaLA&RekouJJNs$Zry5M?v=qmBp3pZ$CRi;;VP?%!2cFU2=mX>W7;=Q1(OZ=f1Wzii)D_0>vpBLFijyb_BcR?DcZvciTAJ|-@F49r-iQ=yIL2x+O=L- zbIlD(W0_dcU(P7CV5?afS_h+ga73Cxz!liLQS)y5>O&<-8h{t0)elL-_79y*D<4im zno&3{ZHG{4#3>00ls4;ayHj;d=Ez-KS{EvswYGF6+B&+>{fIfo^LkIftxVUmW!<5V zzUs#?t9MEh+Pg#?N|F@1wm4nWPLA)$+*-$>b70@foH3D@#&sotR*(g=jemhx>(FDZ zSFBZmOp5=uXQ?RNM+{+_y=!IQ??ukzm6}}kyzZBuPv74eaoZfca{W6BxDg#PzThMx zpO?t_sVbufW$D=AD!O9U0moRDi4LJOGkstY-nX+$p-@>UpWwS(1{)xquhKy&%UA`hS{O&UI&k*2M1g3%OUqo=e zsQ{2PqA9t6EMRwqaZTnI4=`PsgWAWH!{w@K_eMOJs%q0y)=9rb)b1fxn0HRX)z21exnx?ttu$!X9HG?J3d{ zseg}!{9q596i0QOuVWnCU;zM&bE$Q#gao(nxkA7P9GWdL>;JqC{4C0rz(09=@*qR{ zB+42?TETwU;ru5Z5|fr*Xdzee>nEBy}QvL3?g9z${yF*uz#+ zUT*|iN7oX$aNN;Kck`D1I%~;OjaDAIW$SGND!al7&Jd8vH+_kUjH+WQ^Z`)h?Qk8EbgNxQ66(U^!*QTf}8t5xE849c8&yTD9!)RVHA(A*v~y)RiMBhjv{nFt{avsI zz$+|h=;K^YSA{6VRF|*4m$BF`gVSp_#6V*f4~EXpvTmMj-Q}akafkiT$l~lG>yXfd zriU;sq2bD=MLT(ZecD~g5`aV96>R}1>*}r*%>i?oyvz(JF=?t$^%T0^mQ~H2#!Dsk zPIRzh0^@K4O8F+gYUFA)tU`Z$^-8YcQ0ZqfKC1fy^mOWad(00%LzZeKDn{tzZ=Oa> z#=qFZdiC;qJ9FIO>B|2nWO?`7h5C7q3*Z*}|GXFuhxPk^2QOd0c=G>wjK}wVPvlgp zQPvEJhk#b$Np~^eqspCto(E+{o`=vggfpsdv6drym?9vuigRUhso|ylnG4?z7-?7t z!pmEJd_={&n%4oFRIa2e3ziNb_2TwEJ6m>&#lDGRuc$egK$Q-MCOECP=i@-KHnHlh zGcAMgf^UidDE(Zi^f+$ zR}}c7i{6}ub`{o%UdH~_d<4PrONu+$fIC{%RkQFngZP$8VUvAECwu9D?hk?=f|puW zidAn#Qq&5)aD87YFss4%wgRNE1r}T2T$T7udwh8pE+*J=E_h5aT|_j8LZW8p={qg0I36`t<2j@gf|P5&H7w%lhnH z+>XWKU#Fr%3G|H> z%bexh{npa7BPQ?By0tpK6~xEEZyhE;y;=9dGVH?QvIr!p9u5M*W6#fz_m4-A-vEV5 z7b$7e!E=z5d2u@D&3{P?tc7jOJ7m|g%z%H8!7!z=jLfRHK4sEwt2YZj>}af9QrjGh zokY-yP3l!2j!_nssOyQp9$@2Ev{=-c=kIwDlZlgzG^@F1uuGQ4qz0?m! z!%EUsy9w)ou+Vq|FNTdI?3k2DLf!L-)fjk{)O;E9g1Y7EG#zN{8<43lk>xuTYau+Axn^;^U% z_1N^4BecO%;>#Q6%PA+M^r5iHJx6E*zCan4IwjgNZEqAgw%z-cH@;UNExH7`Q>iSz z#8v}tZDylv+Xcw?Yxd3>&2GO|`LUW^yHfdn&3>_dvs*4|e%z)T_uadWawnnI_Z{YL zYer}zng7LycKadj8sl8=O6c5D4P8$s&Fok(1E%E0E!}Pxn;Lb?Sj+mw+tY)C^TVUJ z9d@w2_8{VfRDvlAu8dIaTX6;Y(ee2|4^A&uL4;E#r-ZMK?JsL>wxRA~Q_Th_sEw|84o)G?E{k>e&u zu1i+K*A$_cCbZ^amgOTf91L8qri3JLZZO>W;R7w++dMVv*M2bhbUUru+Z7RLwz7-X z?$&m-cy&mHH;LX(StMvqsRtD>i&-Dp?wxdzV#uhLc%-ca7hz|QcHHD&+k>z6M)Oj9 z_x;fV6AW%~T4+?4oYJW{?A*|DF1LhpP`WiSzMeeG<|(rN)XZ*aPM4~!+v-;uLz zI|s?Uem~crovZcc6doE&hI^&NBW;4+hgY>jk#)EfWzldA6gziAvD1yBJk2WDs?_*C z