1
0
Fork 0

Compare commits

..

28 Commits

Author SHA1 Message Date
Ryan Heywood 27a5916409
k/website: add CC team@distrust.co for web form 2024-09-10 16:56:33 -04:00
Ryan Heywood 4bba28e670
k/forgejo: add robots to ban facebook/meta 2024-09-07 00:44:38 -04:00
Ryan Heywood f243bb2d4b
k/website{,-beta}: add new contact form 2024-09-05 00:01:21 -04:00
Ryan Heywood 8951deadb1
k/website: commit matrix changes, add docs 2024-08-08 21:18:20 -04:00
Ryan Heywood 5dd08dc94d
k/website: include all current keys 2024-07-05 16:34:16 -04:00
Ryan Heywood 83ec5d1faf
k/forgejo: fix snapshot deletion 2024-06-21 18:35:14 -04:00
Ryan Heywood 0331504457
k/forgejo: bump version to 1.21.11-1 2024-05-30 23:46:04 -04:00
Ryan Heywood 800af4d364
Merge remote-tracking branch 'origin/pull/8/head' 2024-05-30 01:08:09 -04:00
Ryan Heywood 0ca85e65f8
Merge remote-tracking branch 'origin/pull/7/head' 2024-05-30 01:05:45 -04:00
Danny Grove 7899f443e9
Hashlock to element-web v1.11.67 2024-05-24 15:12:39 -07:00
Danny Grove a8ce7cc03c
Re-enable matrix appservice 2024-05-24 07:30:37 -07:00
Danny Grove b2e1530b33
k/matrix/synapse: increase rate limits to allow for slack bridging 2024-04-08 08:26:46 -07:00
Danny Grove 11840a0947
k/matrix: add mautrix-slack 2024-03-31 14:40:26 -07:00
Danny Grove b3882daf31
k/matrix/bridges/slack: update config to support team_sync 2024-03-11 22:18:45 -07:00
Danny Grove 342a85081d
k/matrix: update secrets to working configs 2024-03-11 16:33:37 -07:00
Danny Grove 4d463021b5
k/matrix: add slack-bridge ingress and update app credentials 2024-03-11 16:32:03 -07:00
Danny Grove 9b012b72da
k/matrix: initial commit 2024-01-21 23:39:49 -08:00
Danny Grove f5495de7c0
k/matrix/element: initial commit 2024-01-21 23:35:17 -08:00
Danny Grove 759571e589
k/matrix/coturn: initial commit 2024-01-21 23:34:23 -08:00
Danny Grove 19362e2706
k/matrix/bridges/telegram: initial commit 2024-01-21 23:31:50 -08:00
Danny Grove f520054dd5
k/matrx/bridges/mautrix-slack: initial commit 2024-01-21 22:05:08 -08:00
Danny Grove 8d6b5f5334
k/matrx/bridges/matrix-appservice-slack: initial commit 2024-01-21 22:04:42 -08:00
Danny Grove 90937430f4
kubernetes/matrix-media-repo: initial commit 2024-01-21 22:03:55 -08:00
Danny Grove 43bb6b8810
kustomize/synapse: initial commit 2024-01-21 21:55:00 -08:00
Danny Grove 701b304c9d
Update website submodule from codeburg to git.distrust.co 2024-01-19 22:28:06 -08:00
Danny Grove 25f62adf16
Drop old chat.distrust.co domain to allow k8s cluster to take control 2024-01-19 22:27:15 -08:00
Danny Grove fa1ac5a44a
Add matrix-media-repo bucket 2024-01-15 20:25:37 -08:00
Danny Grove e82185c247
infra/main: add databases for matrix migration 2024-01-15 20:25:14 -08:00
75 changed files with 4410 additions and 17 deletions

2
.gitmodules vendored
View File

@ -1,6 +1,6 @@
[submodule "src/website"]
path = src/website
url = https://codeberg.org/distrust/website
url = https://git.distrust.co/public/website
[submodule "src/toolchain"]
path = src/toolchain
url = https://git.distrust.co/public/toolchain

View File

@ -9,11 +9,11 @@ resource "digitalocean_record" "main" {
value = "143.198.235.76"
}
resource "digitalocean_record" "chat" {
resource "digitalocean_record" "billing" {
domain = digitalocean_domain.default.id
type = "CNAME"
name = "chat"
value = "distrust.element.io."
type = "A"
name = "billing"
value = "45.16.98.153"
}
resource "digitalocean_record" "www" {

View File

@ -60,6 +60,24 @@ module "digitalocean_database_cluster" {
}, {
name = "forgejo",
create_default_superuser = true,
}, {
# We're creating this database, but then need to delete and recreate manually with LOCALE=C. Otherwise synapse won't work
# CREATE DATABASE synapse WITH template=template0 owner=doadmin locale="C" encoding=UTF8;
# GRANT ALL ON DATABASE synapse TO synapse;
name = "synapse",
create_default_superuser = true,
}, {
name = "telegram",
create_default_superuser = true,
}, {
name = "mautrix_slack",
create_default_superuser = true,
}, {
name = "matrix_slack_appservice",
create_default_superuser = true,
}, {
name = "media_repo",
create_default_superuser = true,
}]
vpc_id = digitalocean_vpc.main.id
@ -87,6 +105,11 @@ module "digitalocean_mysql_database_cluster" {
digitalocean_region = var.region
}
resource "digitalocean_spaces_bucket" "matrix_media_repo" {
name = "${var.namespace}-${var.environment}-distrust-media-repo"
region = var.region
}
locals {
database_host = module.digitalocean_database_cluster.database_cluster.private_host
database_port = module.digitalocean_database_cluster.database_cluster.port

View File

@ -7,7 +7,7 @@ spec:
spec:
initContainers:
- name: forgejo-ssh-key-prep
image: codeberg.org/forgejo/forgejo:1.20.5-0
image: codeberg.org/forgejo/forgejo:1.21.11-1
securityContext:
allowPrivilegeEscalation: false
capabilities:

View File

@ -19,6 +19,13 @@ spec:
name: forgejo
port:
number: 80
- path: /robots.txt
pathType: Exact
backend:
service:
name: robots
port:
number: 80
tls:
- hosts:
- git.distrust.co

View File

@ -5,6 +5,7 @@ resources:
- namespace.yaml
- resources.yaml
- ingress.yaml
- robots.yaml
- snapshots
patches:
- path: forgejo-env-vars.patch.yaml
@ -33,5 +34,5 @@ configMapGenerator:
files:
- app_template.ini
images:
- name: codeberg.org/forgejo/forgejo:1.20.5-0
newTag: 1.20.5-0@sha256:d665129e66cc04fa72aa6a284eb98b17c0eee642aeaad7c88edec21f9edbf519
- name: codeberg.org/forgejo/forgejo:1.21.11-1
newTag: 1.21.11-1@sha256:d036b8021aac6449e3a128fda50bae3598f1403578f3e83bb7717bceb60ae875

View File

@ -43,7 +43,7 @@ spec:
type: RuntimeDefault
initContainers:
- name: forgejo-ensure-directories
image: codeberg.org/forgejo/forgejo:1.20.5-0
image: codeberg.org/forgejo/forgejo:1.21.11-1
securityContext:
allowPrivilegeEscalation: false
capabilities:
@ -61,7 +61,7 @@ spec:
- name: forgejo-data
mountPath: /data
- name: config-templater
image: codeberg.org/forgejo/forgejo:1.20.5-0
image: codeberg.org/forgejo/forgejo:1.21.11-1
securityContext:
allowPrivilegeEscalation: false
capabilities:
@ -79,7 +79,7 @@ spec:
- name: forgejo-config
mountPath: /output
- name: forgejo-migrate
image: codeberg.org/forgejo/forgejo:1.20.5-0
image: codeberg.org/forgejo/forgejo:1.21.11-1
securityContext:
allowPrivilegeEscalation: false
capabilities:
@ -96,7 +96,7 @@ spec:
- name: forgejo-config
mountPath: /etc/forgejo
- name: forgejo-oidc
image: codeberg.org/forgejo/forgejo:1.20.5-0
image: codeberg.org/forgejo/forgejo:1.21.11-1
securityContext:
allowPrivilegeEscalation: false
capabilities:
@ -120,7 +120,7 @@ spec:
mountPath: /etc/forgejo
containers:
- name: forgejo-web
image: codeberg.org/forgejo/forgejo:1.20.5-0
image: codeberg.org/forgejo/forgejo:1.21.11-1
securityContext:
allowPrivilegeEscalation: false
capabilities:
@ -140,7 +140,7 @@ spec:
- name: forgejo-config
mountPath: /etc/forgejo
- name: forgejo-ssh
image: codeberg.org/forgejo/forgejo:1.20.5-0
image: codeberg.org/forgejo/forgejo:1.21.11-1
securityContext:
allowPrivilegeEscalation: false
capabilities:

View File

@ -0,0 +1,50 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: robots
spec:
replicas: 1
selector:
matchLabels:
app: robots
template:
metadata:
labels:
app: robots
spec:
containers:
- name: robots
image: nginx
ports:
- containerPort: 80
volumeMounts:
- name: robots-txt
mountPath: /usr/share/nginx/html
volumes:
- name: robots-txt
configMap:
name: robots-txt
---
apiVersion: v1
kind: ConfigMap
metadata:
name: robots-txt
data:
# Facebook/Meta have a web crawler that absolutely _spams_ Forgejo when
# large repositories exist. It's nonstop requests.
robots.txt: |-
User-agent: facebookexternalhit
User-agent: meta-externalagent
Disallow: /
---
apiVersion: v1
kind: Service
metadata:
name: robots
spec:
ports:
- name: http
port: 80
targetPort: 80
selector:
app: robots

View File

@ -75,7 +75,7 @@ spec:
| while read snapshot_name snapshot_date; do
echo "$snapshot_name" "$snapshot_date" "$datestr" | awk '$2 <= $3 { print $1 }'
done \
| xargs --no-run-if-empty -n 1 echo kubectl -n $(POD_NAMESPACE) delete volumesnapshot "$snapshot_name"
| xargs --verbose --no-run-if-empty -n 1 kubectl -n $(POD_NAMESPACE) delete volumesnapshot
env:
- name: POD_NAMESPACE
valueFrom:

View File

@ -0,0 +1,119 @@
apiVersion: v1
kind: Secret
metadata:
name: matrix-appservice-slack
type: Opaque
stringData:
config.yaml: ENC[AES256_GCM,data:r4qTOla/LsGtMojbqC0px9vVeDN/308lx19WR1FcHOh/FenPOmhiVN6yqEHiL6NppHm+SfrSdAa58ghF6GVdbv51/Z6K435MPpoAXbcmw2JceZbHZJ2k0u4aY01nWYMKUU+oKcowdzL4bmkA4jkX4XcDVEsA9VlZPAYmSN4O0s4uLl2pJ1K5i0qng2KaCYKAwk5OTK4w//+lK7UhmVC2TBlGZ8MUyuHsvk0zUkWfdXeFtmtVN48LwS3gdjY2ynHDTYl4cmXtErfbqLkdjWLGcTS1LCaIhOSFYTQm04tAWc9TCKB3xYvpx9hSUKN/KrreK7zh6zr2NTYaRMiXPlUT8PC7VdwEkpZPq9fYkeMBBSlRiYUUO2q19Y2rtidWZ3UeKr2MPJA2a9A7l/JGpYeLk7Bg/623xfp2rvqysFbjVQHsR2FUrnhdV/DK6vafRrjPbdKOWjaorc3UdZ6LeS191zwTKUsZHQuW35LXrg+Xhiovle5FetgqVSeMtdAigLQ7rtUzmilZk8clDstibLzmGkKeBsFZKFDkNlMxQmHarA2bH5RcBazugokztEUgRBGVL4XAjStlyYez0EqAXdC7FmxRctx/8fS6n7gLv2eLOxFswNbjpZRDG8ctPGQIF2xPIkV3Ahf9UH1A2Q5pVRCvd49yLflCBE+MFyVjz2FvpkFg915TN3K0j4OKuIW8E5D3whO8e+ofJiZGSgw7+NYZfJi/d1SPMkCyJG5M9wtTJLtLWMDxmvhJlkGO5Hxu/f06EygMKvF1P8DjkpvbFDjClKS/WjmN4IrccYUgrL+kL7XsQZ1EfvFPu/ioKGV9OuHQfOJNqMNPQdGwjg830GSjn2GeyArYSsQ1mJ1QOCPPdlzNpwYf8WRCELAt8LnTWEuKuNpfesvp5pN8DaAa2qagiHMwRKXcwuutgfL3j9gD1wmu3hzbWEilWXXykh75JjM8bPTYkQQWQVJSwjfv9fnlxwxg8bueaVydOyI6TOLfowsDEJR1zy7L5d6uUMwJlrtjHms6N3SYJ4mrgogCrOkH4qX+MMAnkUfVAbxmPvX3u9bxIqbOSoUuzjQto/LJnpPwY6MblEEpkLVo42n2Vaaq2ihMtzXLeq4qd+g7PIQf47RNWtP78+T8csxzlPG7s+c8UPZCoKoVw9EFBXS7SBE=,iv:xNXCfyNWCbWgeDL0oEkPFSxtPxH9SNcUb6nfGo2bRaU=,tag:uy9IUhzGgKgrAI0Fu+hR1g==,type:str]
slack.yaml: ENC[AES256_GCM,data:68WCMYcGwY70UwSNdEPeWPWZCJ1+BFO+KJni+oW+1VAnkGgwM7DAw06bWUIlYmwbPMotJqghU8pZicQu2CWaDKxSyvNvTYIyUBSgaUgyhgkAt5iP1fJzM7AA64OLZiJkP3WvfMvQqZpj5q6VMVtci+kETP/C2n2D9SR6g0GqOvSVDOQ14BcEdQZhX/GIqYVy6O1WwER/MMcrzF0gS8Xljhgh1QEwbHN3V6SaDRRt9H3PtxINovs6+N7WBTN6X19npNCvo+vBWc04BqRQOnTbvKDodeI8CSNoZVCCXnGmRdDYmQTX3l8B1ax7pVcq8qgQbT/g10CzIQ4D5/xooXWyPBJO8G3DvWSBS1q6eq/h6Ff5/dof0dpM90r1Snte+rBygioNXNDxZxHiftGHDdHutI2xFsy2d6jpAgSWI9SE+FPrOZO+VVg3oGf1CJ9szcAir9Y3SafwzyNBwvCL9XbRWOb5YR3v9JRbLlyFdPSuBFQciYnxxhPK7xdLr+ggC4YBg5NH51TvPFFrlRBhkHc21GgMpQWW/ambmIPoN8N1ibaIAAywALHVvKcVhVRjSgStRubqkPOw902V1S9YhVl5vb6QtxaI3jZLLtq1uCJwEJ350kY7xIPDvS17J0/HzZBivm8=,iv:BsODzIfvxPxLpZSomElorgtvdn8ejcYIMHE8Ze4VC1k=,tag:xpSnNsE06QEoNAtnCN2vNg==,type:str]
sops:
kms: []
gcp_kms: []
azure_kv: []
hc_vault: []
age: []
lastmodified: "2024-03-12T00:01:19Z"
mac: ENC[AES256_GCM,data:VSdnKuVIv4VBy4MpIuruPVgDqMFLM33VwfWHrQ2V9rWJkqEvWlgrZDZG92qGdBthmcmfhpClCZeAmEI//U5/ejb+rilj1OOkfFqYIHG+JGzEXyKVnWZeHEcWzEGuYDG78n8XgFuCMiexScHOhLcRSiGRN++jzXTAGMp8U2z7feE=,iv:aw7cTJfRq9Z2tJlPFQhE0HYoLweds8b4ybCTofEcMFo=,tag:lgWspTjb1IX8jR1Hq95WCg==,type:str]
pgp:
- created_at: "2024-01-11T20:55:07Z"
enc: |-
-----BEGIN PGP MESSAGE-----
wcFMA82rPM2mSf/aARAAkFACzQmqyF9BqaD1qEjIO4e6owS/n4h3U6ee0Y7fhO8y
a5RJ4/HvMmfXcYeHm+CZjsFaui4YJkPS93clGTJzV4w15yXJUunIVjAmkvSrVh6P
GqRUtNpi1y+JCS3sjlAfvm3h9b08dNxFv7rTwZtDiP8zmcNuB0zbLBFR7G6ixetx
ZxL7piPYX75Rqoz8A/+V7VAtsoX8t3xv5xgjHzzfhiM3TeoQUgLnF8aN5huiSptf
dMmNMa0GGu5QaUjYJ3iHjv5eMtCJ79KwpuCfv5iX34Q++rTe5VUWoQabNAiE/Frt
Rc3JB8o8rfL6WME9qIIa5k654JlVDKqOvTH3mtHkOIWhD2+CEK89Siq3G35Kkct8
Ym7UNa6gE8IdSGkCOH81G4ZheU6Z8OKF1Z7dO+o7IdgIURTwLEFeBIC2PtWOKOJP
PnzqZNk1w4n4XK6hQg4bmIj8VaZXXgHEXcO/jaGCoRyr36BHCE1Sj1ae5cMUgDje
p6WKVO6gXfRg7SRJqQNUh03Lz0YKIjsI/429UPyf9mtXbHfvVyrW3+wyByok86FG
cGL1Y/N7thxAxXqHy4OZFCE0NMP2bobMzzGJTtDY9oPsGwTb6xk1g0wE5zg6IoQa
9hnObBJhdpvYcD6juz+V0wkeI30essnz7ZTtsLdfCox6mnP5BMTtzxmcRrCpNvHS
UQFIZa0XryYoXv3rcw6yUpkqv6aYzD3L4PnqYtGUEtbMoTb8NXa9Cp+1OeypqZ0g
7uO5zCKJgL6sBaPnJL5/n+afafzYcIOsQc2O+q0s4O1d5Q==
=3E6w
-----END PGP MESSAGE-----
fp: 6B61ECD76088748C70590D55E90A401336C8AAA9
- created_at: "2024-01-11T20:55:07Z"
enc: |-
-----BEGIN PGP MESSAGE-----
wcFMAw95Vf08z8oUAQ//abo3n5r8YdQ6p+/X031/n8MCvWKw+ERGSvDuT2r7g8m8
DqrBQmX578jHVmZkC2B6fYqEBuQAeyEJyQ56MLMuGMNSET8dgNS4Uj/gwvsuEDQf
NhU10WLkfQ3g2/o654BVzPC2b3UQTL4mmXqp0+ID79uynn0/WZ0TQQ8xj/uUaDS1
h6/uC7mmDGTHaxF3gFuYkvWMghU0bqX5BfrAPdICAr8FIqxUGIvUD6KkBu9hWTYP
RLtfwpU/DAcT/7pNtic25WzzQt7W0mok3zUZZq5r2UqO35x2XOrgC5DQ69QYf7JZ
a9S236gEpAS0Kl1IWSvY2kDzj/J27T3nonY2kX3a+UqVWX15LEmVmNNUMwjz91/b
0G+26vustzinHBs30EHGBqhyELjRW0RjcmlVGNXvZwhgGL5/LNIEcfBi19tIang1
dRYE9TasSeRbyTU/A/CXFDeuGtC8K552SzXjv1zP6gkwZFb0/zd0/XHPSyGyOLbM
1PC3JhkA8GEYQ7l9y5BdPXxZseuoSHDPHfMRIcnogx6w6rfBdd9+78M1WjnGzhYi
/utORBaiwU9Zk+Xm3B+WbkDl5+jio+UIp9nHoYAGfuJ9A6TZYBIavB6K171wALke
Kl6hoTxef/VGwdfXB9ikUy0bi0Km1vVpZGVzIjSFXiSlLkaamhxUFSgDPGZN21rS
UQHeXKkhgKXTEVvi+kypRbN2/174bElGTWz1C2TWPNJAcvvKmRw66t5g8pahnXbm
SYQoB5JaAl0URu6zHWBYhCjQjiyePhnxHV4tgGtEYAdY3g==
=xXRR
-----END PGP MESSAGE-----
fp: 88823A75ECAA786B0FF38B148E401478A3FBEF72
- created_at: "2024-01-11T20:55:07Z"
enc: |-
-----BEGIN PGP MESSAGE-----
wcFMA0/D4ws+/KPtARAAsxa6N9jRT1AUqfWI7gIfJK6i6g0F5oxRYJ5A2mjhc89k
ZAN4/tO9GC+Fg8+lLhPHdiz6v2T1+92AFXET3jm+ax6rYei2woMHNXKzgqxjkQEQ
xQ/3LcQ3+FOTrvy7Gir9HQ/DoWSePBF7tx16unxH75hi6AgOiT0nFoEbXP3CJXie
lVOO5r5jKgBg9LENj/U+9LHjXB6W0PbVdhxdeStk2TTKcmuDnrGeqKZ3SyZ9V33p
DEfydW+T0ac156Eb2tdszzW5e87oPmW78wvLkotboZcPVWBadRtJkzVn3JXoMAda
gN+W2+I4/4iQN8ITBQ+2i5GsdbHtnrmPkzSbtSqhujwZ1k/a7uRmHy46ejDK9QnT
lQzm2OKyjTlCDhnxnKj0eTE4nN0CDyxGBNlNVG2piKd8i+HpqrjKJ9IUcMj7oO3U
8rtQ2A0LHquNvu6ZatP6fUk3tKgLaEslV4ORXMlILdZXlYqgznmvWJaII3XVeu8l
G/tHPkOhrcQDIecBeYcTLZYXtPtmY1UNJZfbDazG/9J0rdq/r9NmnB7woy7FSYEp
yRNji1i/89nVLsu94ra1D6FHyxgIFTSLkD7s1iCMTsz0UdwfbxqdLIWumYrm04XF
wM2eTB8OAGe8mdfi1q4te0FEDMLTpdYBhYDDjHmBv4fXwKPcWkgixvNJtT6xPgLS
UQEvOn03hQ8MCQ5kh1R1FoTOw1UpgV0eqJSateC2wkBKbZ/4NWPbnZA7XAW6Jb98
JidKJ8TiYiI33hxUhu4nUeZWjNcd7MgHyl1Do2r7SfyICw==
=TXST
-----END PGP MESSAGE-----
fp: 3D7C8D39E8C4DF771583D3F0A8A091FD346001CA
- created_at: "2024-01-11T20:55:07Z"
enc: |-
-----BEGIN PGP MESSAGE-----
wcFMA5Wf+FyJ+zFJAQ/+I9khYJfqjCHhrAaElVWKgn4c+7C+oilVNE0132pQZfLb
u17yv6AYY5zThK6Lg0GZMKaKFn+JuF9wonTyixJQccJ+w2MxsJQRNQZTV/t19HrQ
B+6YFLVPNyOglr7jf+o5BnOdIvpR0Cog5JDzn0j4iwpRWRSGW1sWXiABKWUIW0Ks
nR7Rm/k3Jm8zYO6LtoyYog5HGUEHRMuOY6Yoj/EEbfDLKFU5WZ+hfKnbGGM9KW31
RkXoCtjm2AstZTia5+Y0E3wNb9bbvpbkewyQd5KqaHmHaX3MzuoYKNHGVEgPMfla
Y26aED5uSLETv+C1U/jYJyxyVJxNYb2JBrS8a7+p+mo00Cvbs/pbM/cr5Y/Ogu7Q
Ed0+Ixst3LzSTOcYAAiEC/LpWztaIp/4h/cAfE7eKnsoFUVcv2lLpLHyI7fS/sJH
Ywp8tlqlfx7DaCqYEVjPMSfI9qBbJomoQ77szHL+Gyi4ibyF0iRz0/NnF5lmu5H5
sDAYiqnHEIpk1v+gWXoj/CQq7a5jJf044cYylcO+al27cugr+jr5TBQQVv+wDNJV
LqpAxmmz8yUJ6RlTSg5JwNlNCCOONv6f+lX0Cjk7V0kPcOMgbVn19Su7zIvhM7wd
m9mzuVWWx2SBGzORdK9W4tt7lybU7aCvusT1jP1nwXF/JCz9lyEbb1syaNIAiXHS
UQE2Va23CUVgB+cV/ImXBCEuAjZhiSMFVCtWOZrcqPS8EZX9s6WzscpsEmFnDE7t
GVR3u1IyjxTsuTxxYU0ldSjHqYFjQrgRD3ZBzwZcgeajqw==
=bF9b
-----END PGP MESSAGE-----
fp: F4BF5C81EC78A5DD341C91EEDC4B7D1F52E0BA4D
- created_at: "2024-01-11T20:55:07Z"
enc: |-
-----BEGIN PGP MESSAGE-----
wcFMA8KRInHl7Vz+ARAAoMRyGipvXTgUChfL1Lryej14FI9+8dvWQculBjPQzg6x
oxdPzz07ifIX8D64zfToE+qc439l/RYwiMx9XyGscEim0D1GIFPwxOm4DCXT+/5m
wlLkOBP7oMwirqSazS7dNF1hE83717QTi1GqC0UqhoMINtxrhQIv1Y6xxREqD1Wd
eW3M45p1i8iSZkzF7n0EhIK3J59Wl3vxt9FUX3YRWk1JH0oaqIc1VCH3TJc73DAx
9e1jIVQSo4R8BfQc5Y64xRh0eq/87Ud2E2x9JbZmpnw4FN/OHg9QqRMaZ9r6EQ/l
VerhJFkfSj3UVAfODzViKXyNTKRak1GOcQBE5lfAXynAW1nfTTx0re0rl6/tvOwC
i02a/raksTI8afak1RMclNFqlihsegGU239ZGDRPb4apL32nYY0SMim58vET8rv5
eTiQE1udg+1ttIRAGq/PxzHKlc6FUEdyJ6i2Da16c0K76FpF3Gnxxhw+Tleixx3h
6+PbhC2qEgt7LS8TNg9J2WTDy4Hlw5YEmzOAM9NA6UYrH9BHsR87sbdriz6pAC55
CnFkWptrME4CjUP72qIezRYt/4784ABTw6poQ51jP30641YhgPoYLrWS8hWQYaE3
jcrum3JQnLTjsE88OclcreKNvNj+b1t0uxuHa/6UdMnyRCd8osJ22s6JJHLGgB/S
UQHvy+Rv0QJ65DjsJ4TfdRBLcKXaF7Ar5SaANqGi8EYwjVbhfImwx5VSEsvQclEU
7JihoETtCrRwJM1BkJz3nuBAaYDm1Y+lWHSyVZ6xi8G0eg==
=n6cE
-----END PGP MESSAGE-----
fp: C92FE5A3FBD58DD3EC5AA26BB10116B8193F2DBD
encrypted_regex: ^(data|stringData)$
version: 3.8.1

View File

@ -0,0 +1,25 @@
-----BEGIN CERTIFICATE-----
MIIEQTCCAqmgAwIBAgIUJnvJP3vy1FrGBmP3zN/Q6le9D5owDQYJKoZIhvcNAQEM
BQAwOjE4MDYGA1UEAwwvZWI2ZjdjZmItNjBkNy00ZTg2LTlmN2UtYTliMmU5MDdk
YWUyIFByb2plY3QgQ0EwHhcNMjMwNTEyMDMzMTA3WhcNMzMwNTA5MDMzMTA3WjA6
MTgwNgYDVQQDDC9lYjZmN2NmYi02MGQ3LTRlODYtOWY3ZS1hOWIyZTkwN2RhZTIg
UHJvamVjdCBDQTCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGBAO41H/hV
eJYfE+b0aMPj1vLhefmGkdjD5N3HD1StaL95bjiB7U73exQenoEZYTW3Ns7+BzHq
ffFJwXC3sL8qVxqnNdJy3IkrwJxdmJrj5+KoVUrD8yNbujjQ5q+r0fMRwBwtJYkf
78b/mCBP7GOllJim3nG4MMzL1sA/5JaOQEwZgmERmIVJi1RK1k8nGuFKbcr7YW6u
vE8VQR77uQIUffokC6tDzhjxDz8eDzZ3lwsnGavCG31nW5Kc6+rg6Kpo097/ZkYf
DThwFmGwmP4oT6h2+/LPqsb3OCvFWh5DLHXTa5xvczFwY134o55CW25JNebrTYxc
ZnvlE1afgiuKsqGsGmvmnjgxKTNKOhMWKd1gXLmQ6Tt0WrLpIBlAVlh4pn0YtWDm
Nz+YcOnQ20O4pZyOntc2TGFmbHqAp5HnmRmtDWWbUQoRRAIsvvUpIGRxWid124gV
2h9UxbymVoieFpAjNv6d9Qu9+kKeJ/FOwSq6qatOuI4ILSjG6E1SMeimxQIDAQAB
oz8wPTAdBgNVHQ4EFgQUpoMewYjVdrnCuCjW/57GlzlMtdQwDwYDVR0TBAgwBgEB
/wIBADALBgNVHQ8EBAMCAQYwDQYJKoZIhvcNAQEMBQADggGBAKRENCIP7KTg2ULy
DCuZAvPDzqRwAstmXP54DZOpeMT81c+m9Kq4urM1PMFvPOfiSSlE3wAA1+oX5wyv
r4kKgSYqG4QRk4aUfk7NJUQ2yAEtNcwrTc4MSsoFJOJVWdW/E+KNWYKjepg1t2kV
4hzZNqnIO05sxVp/Sx0tu5dhn8xPwNTVuDD5VjoC7VweSlq+E2vTNz10VBSHJ9Pm
bBJ32kd0lXdYsmy9vGDLa2NrjeTESSBfk8umm2dIbIFxOShHSs/6jHwCGv5WvPpo
HoPH69XBnXQuXf+gPltEaAtRwKVqdgMTFQe1gfeK2ddvlzPtGJ1mj+1rPGZApEuV
Ax+5Klk+711dhJrRQsI0w1Zl/2CgpKToIVbBe5nLyH2Q7SstcdpfnNcs5+k3iXb/
KMUIMP84ScQ+ojUefMntny2SqUFT/CD1IVpOsHFTbKc2ZHUllrDf1p4qopMdiwWj
TlnDOh78B94f1O9by4ftQ/g8G5TaKgRsMxrDNy77tCpKy9vR4g==
-----END CERTIFICATE-----

View File

@ -0,0 +1,20 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
labels:
- includeSelectors: true
pairs:
app.kubernetes.io/name: matrix-appservice-slack
app.kubernetes.io/part-of: matrix
app.kubernetes.io/component: bridge
resources:
- statefulset.yaml
- service.yaml
generators:
- secret-generator.yaml
configMapGenerator:
- name: digital-ocean-ca
files:
- files/digital-ocean-ca.crt
images:
- name: matrixdotorg/matrix-appservice-slack
newTag: release-2.1.2

View File

@ -0,0 +1,6 @@
apiVersion: viaduct.ai/v1
kind: ksops
metadata:
name: slack-ksops-secrets
files:
- config-secrets.enc.yaml

View File

@ -0,0 +1,17 @@
kind: Service
apiVersion: v1
metadata:
name: appservice-slack
spec:
publishNotReadyAddresses: true
ports:
- name: appservice
protocol: TCP
port: 5858
targetPort: 5858
- name: rtm
protocol: TCP
port: 9898
targetPort: 9898
selector: {}
type: ClusterIP

View File

@ -0,0 +1,38 @@
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: appservice-slack
spec:
serviceName: matrix-appservice-slack
template:
spec:
containers:
- name: appservice-slack
image: matrixdotorg/matrix-appservice-slack
env:
- name: NODE_EXTRA_CA_CERTS
value: /config/digital-ocean-ca.crt
ports:
- name: appservice
containerPort: 5858
protocol: TCP
- name: rtm
containerPort: 9898
protocol: TCP
volumeMounts:
- name: config-secrets
mountPath: /config/config.yaml
subPath: config.yaml
- name: config-secrets
mountPath: /config/slack-registration.yaml
subPath: slack.yaml
- name: digital-ocean-ca
mountPath: /config/digital-ocean-ca.crt
subPath: digital-ocean-ca.crt
volumes:
- name: config-secrets
secret:
secretName: matrix-appservice-slack
- name: digital-ocean-ca
configMap:
name: digital-ocean-ca

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,13 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
labels:
- includeSelectors: true
pairs:
app.kubernetes.io/name: slack
app.kubernetes.io/part-of: matrix
app.kubernetes.io/component: bridge
resources:
- statefulset.yaml
- service.yaml
generators:
- secret-generator.yaml

View File

@ -0,0 +1,6 @@
apiVersion: viaduct.ai/v1
kind: ksops
metadata:
name: slack-ksops-secrets
files:
- config-secrets.enc.yaml

View File

@ -0,0 +1,13 @@
kind: Service
apiVersion: v1
metadata:
name: mautrix-slack
spec:
publishNotReadyAddresses: true
ports:
- name: http
protocol: TCP
port: 29335
targetPort: 29335
selector: {}
type: ClusterIP

View File

@ -0,0 +1,41 @@
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mautrix-slack-bridge
spec:
serviceName: mautrix-slack
template:
spec:
containers:
- name: slack-mautrix
image: dock.mau.dev/mautrix/slack
command:
- /usr/bin/mautrix-slack
args:
- -n
- -c
- /data/config.yaml
ports:
- name: http
containerPort: 29335
protocol: TCP
volumeMounts:
- name: config-secrets
mountPath: /data/config.yaml
subPath: config.yaml
livenessProbe:
httpGet:
path: /_matrix/mau/live
port: http
scheme: HTTP
initialDelaySeconds: 120
readinessProbe:
httpGet:
path: /_matrix/mau/ready
port: http
scheme: HTTP
initialDelaySeconds: 10
volumes:
- name: config-secrets
secret:
secretName: mautrix-slack-config

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,16 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
labels:
- includeSelectors: true
pairs:
app.kubernetes.io/name: mautrix-telegram
app.kubernetes.io/part-of: matrix
app.kubernetes.io/component: bridge
resources:
- statefulset.yaml
- service.yaml
generators:
- secret-generator.yaml
images:
- name: dock.mau.dev/mautrix/telegram
newTag: v0.15.1@sha256:e328dcf5893a3ec782212d9bb008e4f81ac3cf4e3c7abc3a49cf6b277749b32d

View File

@ -0,0 +1,6 @@
apiVersion: viaduct.ai/v1
kind: ksops
metadata:
name: telegram-ksops-secrets
files:
- config-secrets.enc.yaml

View File

@ -0,0 +1,13 @@
kind: Service
apiVersion: v1
metadata:
name: mautrix-telegram
spec:
publishNotReadyAddresses: true
ports:
- name: http
protocol: TCP
port: 29335
targetPort: 29335
selector: {}
type: ClusterIP

View File

@ -0,0 +1,42 @@
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mautrix-telegram-bridge
spec:
template:
spec:
containers:
- name: telegram-mautrix
image: dock.mau.dev/mautrix/telegram
command:
- python3
args:
- -m
- mautrix_telegram
- -n
- -c
- /data/secrets.yaml
ports:
- name: http
containerPort: 29335
protocol: TCP
volumeMounts:
- name: config-secrets
mountPath: /data/secrets.yaml
subPath: config.yaml
livenessProbe:
httpGet:
path: /_matrix/mau/live
port: http
scheme: HTTP
initialDelaySeconds: 120
readinessProbe:
httpGet:
path: /_matrix/mau/ready
port: http
scheme: HTTP
initialDelaySeconds: 10
volumes:
- name: config-secrets
secret:
secretName: mautrix-telegram

View File

@ -0,0 +1,118 @@
apiVersion: v1
kind: Secret
metadata:
name: coturn
type: Opaque
stringData:
turnserver.conf: ENC[AES256_GCM,data:suQA1LL8JiKemZo1LojR4WYSk5ex5DIv4wyOGjS6gZKGCViqR2uvIBT1DVI/LfIjYjuBDM7NqDOSP/kQxChJDrUksaOCU4Q5uc/eE9zlyP7A/c4Cb8evPQ1JApK2GTzFwz8J5x6S4aa+JpoAB5aTvijfcW131pmQOtz6uanEhuU1As9c9g57nbGGR2lLRx7rYVMqGC2fxg30JJewSjIYWsOJoz6+Y/callulnQKznil7cMYwjiMK/QoVgdsvmW4fjcm8PbBKdBZbh7nDQBcvtrr8lqyMBNl/XOTtU4Ael28YWzDtdbWH1jdJMnMieWxpa2D2XnWNqd0XdYxPwS3HnVHVXSgwOYUQutMyWNBA1wnIaC1sg8Z5lzqE38DzXfA=,iv:8wwzXOMCH4zadAtifiFAbwFEQ7O5CO2ogvCiuEDV8gU=,tag:D04paJjlkzeXmuyLvk4f8w==,type:str]
sops:
kms: []
gcp_kms: []
azure_kv: []
hc_vault: []
age: []
lastmodified: "2024-01-16T07:13:58Z"
mac: ENC[AES256_GCM,data:t8y4z+JQ2ua9KcykwoH2rHi1wsHC0Z1TkxkMZvUenQFxvwNTHC4NghwWGN2kcCDO9SjUb1J3BPobZd/EqSitQ7kTxyeBTa+qcylUIDvCmk9S1ZHVyJKhoQABbJX9raClYV3a3zrk5WNi4obXAHgXGpMdq1cVe53GR/X5z5ury7Q=,iv:x+WQ8t86EOrejNyv0grHSyd1bOpWcoZ/lqmFtFHHR0o=,tag:XuiuZUKe32MjNMg4nx9Kvg==,type:str]
pgp:
- created_at: "2024-01-11T20:55:07Z"
enc: |-
-----BEGIN PGP MESSAGE-----
wcFMA82rPM2mSf/aARAAkFACzQmqyF9BqaD1qEjIO4e6owS/n4h3U6ee0Y7fhO8y
a5RJ4/HvMmfXcYeHm+CZjsFaui4YJkPS93clGTJzV4w15yXJUunIVjAmkvSrVh6P
GqRUtNpi1y+JCS3sjlAfvm3h9b08dNxFv7rTwZtDiP8zmcNuB0zbLBFR7G6ixetx
ZxL7piPYX75Rqoz8A/+V7VAtsoX8t3xv5xgjHzzfhiM3TeoQUgLnF8aN5huiSptf
dMmNMa0GGu5QaUjYJ3iHjv5eMtCJ79KwpuCfv5iX34Q++rTe5VUWoQabNAiE/Frt
Rc3JB8o8rfL6WME9qIIa5k654JlVDKqOvTH3mtHkOIWhD2+CEK89Siq3G35Kkct8
Ym7UNa6gE8IdSGkCOH81G4ZheU6Z8OKF1Z7dO+o7IdgIURTwLEFeBIC2PtWOKOJP
PnzqZNk1w4n4XK6hQg4bmIj8VaZXXgHEXcO/jaGCoRyr36BHCE1Sj1ae5cMUgDje
p6WKVO6gXfRg7SRJqQNUh03Lz0YKIjsI/429UPyf9mtXbHfvVyrW3+wyByok86FG
cGL1Y/N7thxAxXqHy4OZFCE0NMP2bobMzzGJTtDY9oPsGwTb6xk1g0wE5zg6IoQa
9hnObBJhdpvYcD6juz+V0wkeI30essnz7ZTtsLdfCox6mnP5BMTtzxmcRrCpNvHS
UQFIZa0XryYoXv3rcw6yUpkqv6aYzD3L4PnqYtGUEtbMoTb8NXa9Cp+1OeypqZ0g
7uO5zCKJgL6sBaPnJL5/n+afafzYcIOsQc2O+q0s4O1d5Q==
=3E6w
-----END PGP MESSAGE-----
fp: 6B61ECD76088748C70590D55E90A401336C8AAA9
- created_at: "2024-01-11T20:55:07Z"
enc: |-
-----BEGIN PGP MESSAGE-----
wcFMAw95Vf08z8oUAQ//abo3n5r8YdQ6p+/X031/n8MCvWKw+ERGSvDuT2r7g8m8
DqrBQmX578jHVmZkC2B6fYqEBuQAeyEJyQ56MLMuGMNSET8dgNS4Uj/gwvsuEDQf
NhU10WLkfQ3g2/o654BVzPC2b3UQTL4mmXqp0+ID79uynn0/WZ0TQQ8xj/uUaDS1
h6/uC7mmDGTHaxF3gFuYkvWMghU0bqX5BfrAPdICAr8FIqxUGIvUD6KkBu9hWTYP
RLtfwpU/DAcT/7pNtic25WzzQt7W0mok3zUZZq5r2UqO35x2XOrgC5DQ69QYf7JZ
a9S236gEpAS0Kl1IWSvY2kDzj/J27T3nonY2kX3a+UqVWX15LEmVmNNUMwjz91/b
0G+26vustzinHBs30EHGBqhyELjRW0RjcmlVGNXvZwhgGL5/LNIEcfBi19tIang1
dRYE9TasSeRbyTU/A/CXFDeuGtC8K552SzXjv1zP6gkwZFb0/zd0/XHPSyGyOLbM
1PC3JhkA8GEYQ7l9y5BdPXxZseuoSHDPHfMRIcnogx6w6rfBdd9+78M1WjnGzhYi
/utORBaiwU9Zk+Xm3B+WbkDl5+jio+UIp9nHoYAGfuJ9A6TZYBIavB6K171wALke
Kl6hoTxef/VGwdfXB9ikUy0bi0Km1vVpZGVzIjSFXiSlLkaamhxUFSgDPGZN21rS
UQHeXKkhgKXTEVvi+kypRbN2/174bElGTWz1C2TWPNJAcvvKmRw66t5g8pahnXbm
SYQoB5JaAl0URu6zHWBYhCjQjiyePhnxHV4tgGtEYAdY3g==
=xXRR
-----END PGP MESSAGE-----
fp: 88823A75ECAA786B0FF38B148E401478A3FBEF72
- created_at: "2024-01-11T20:55:07Z"
enc: |-
-----BEGIN PGP MESSAGE-----
wcFMA0/D4ws+/KPtARAAsxa6N9jRT1AUqfWI7gIfJK6i6g0F5oxRYJ5A2mjhc89k
ZAN4/tO9GC+Fg8+lLhPHdiz6v2T1+92AFXET3jm+ax6rYei2woMHNXKzgqxjkQEQ
xQ/3LcQ3+FOTrvy7Gir9HQ/DoWSePBF7tx16unxH75hi6AgOiT0nFoEbXP3CJXie
lVOO5r5jKgBg9LENj/U+9LHjXB6W0PbVdhxdeStk2TTKcmuDnrGeqKZ3SyZ9V33p
DEfydW+T0ac156Eb2tdszzW5e87oPmW78wvLkotboZcPVWBadRtJkzVn3JXoMAda
gN+W2+I4/4iQN8ITBQ+2i5GsdbHtnrmPkzSbtSqhujwZ1k/a7uRmHy46ejDK9QnT
lQzm2OKyjTlCDhnxnKj0eTE4nN0CDyxGBNlNVG2piKd8i+HpqrjKJ9IUcMj7oO3U
8rtQ2A0LHquNvu6ZatP6fUk3tKgLaEslV4ORXMlILdZXlYqgznmvWJaII3XVeu8l
G/tHPkOhrcQDIecBeYcTLZYXtPtmY1UNJZfbDazG/9J0rdq/r9NmnB7woy7FSYEp
yRNji1i/89nVLsu94ra1D6FHyxgIFTSLkD7s1iCMTsz0UdwfbxqdLIWumYrm04XF
wM2eTB8OAGe8mdfi1q4te0FEDMLTpdYBhYDDjHmBv4fXwKPcWkgixvNJtT6xPgLS
UQEvOn03hQ8MCQ5kh1R1FoTOw1UpgV0eqJSateC2wkBKbZ/4NWPbnZA7XAW6Jb98
JidKJ8TiYiI33hxUhu4nUeZWjNcd7MgHyl1Do2r7SfyICw==
=TXST
-----END PGP MESSAGE-----
fp: 3D7C8D39E8C4DF771583D3F0A8A091FD346001CA
- created_at: "2024-01-11T20:55:07Z"
enc: |-
-----BEGIN PGP MESSAGE-----
wcFMA5Wf+FyJ+zFJAQ/+I9khYJfqjCHhrAaElVWKgn4c+7C+oilVNE0132pQZfLb
u17yv6AYY5zThK6Lg0GZMKaKFn+JuF9wonTyixJQccJ+w2MxsJQRNQZTV/t19HrQ
B+6YFLVPNyOglr7jf+o5BnOdIvpR0Cog5JDzn0j4iwpRWRSGW1sWXiABKWUIW0Ks
nR7Rm/k3Jm8zYO6LtoyYog5HGUEHRMuOY6Yoj/EEbfDLKFU5WZ+hfKnbGGM9KW31
RkXoCtjm2AstZTia5+Y0E3wNb9bbvpbkewyQd5KqaHmHaX3MzuoYKNHGVEgPMfla
Y26aED5uSLETv+C1U/jYJyxyVJxNYb2JBrS8a7+p+mo00Cvbs/pbM/cr5Y/Ogu7Q
Ed0+Ixst3LzSTOcYAAiEC/LpWztaIp/4h/cAfE7eKnsoFUVcv2lLpLHyI7fS/sJH
Ywp8tlqlfx7DaCqYEVjPMSfI9qBbJomoQ77szHL+Gyi4ibyF0iRz0/NnF5lmu5H5
sDAYiqnHEIpk1v+gWXoj/CQq7a5jJf044cYylcO+al27cugr+jr5TBQQVv+wDNJV
LqpAxmmz8yUJ6RlTSg5JwNlNCCOONv6f+lX0Cjk7V0kPcOMgbVn19Su7zIvhM7wd
m9mzuVWWx2SBGzORdK9W4tt7lybU7aCvusT1jP1nwXF/JCz9lyEbb1syaNIAiXHS
UQE2Va23CUVgB+cV/ImXBCEuAjZhiSMFVCtWOZrcqPS8EZX9s6WzscpsEmFnDE7t
GVR3u1IyjxTsuTxxYU0ldSjHqYFjQrgRD3ZBzwZcgeajqw==
=bF9b
-----END PGP MESSAGE-----
fp: F4BF5C81EC78A5DD341C91EEDC4B7D1F52E0BA4D
- created_at: "2024-01-11T20:55:07Z"
enc: |-
-----BEGIN PGP MESSAGE-----
wcFMA8KRInHl7Vz+ARAAoMRyGipvXTgUChfL1Lryej14FI9+8dvWQculBjPQzg6x
oxdPzz07ifIX8D64zfToE+qc439l/RYwiMx9XyGscEim0D1GIFPwxOm4DCXT+/5m
wlLkOBP7oMwirqSazS7dNF1hE83717QTi1GqC0UqhoMINtxrhQIv1Y6xxREqD1Wd
eW3M45p1i8iSZkzF7n0EhIK3J59Wl3vxt9FUX3YRWk1JH0oaqIc1VCH3TJc73DAx
9e1jIVQSo4R8BfQc5Y64xRh0eq/87Ud2E2x9JbZmpnw4FN/OHg9QqRMaZ9r6EQ/l
VerhJFkfSj3UVAfODzViKXyNTKRak1GOcQBE5lfAXynAW1nfTTx0re0rl6/tvOwC
i02a/raksTI8afak1RMclNFqlihsegGU239ZGDRPb4apL32nYY0SMim58vET8rv5
eTiQE1udg+1ttIRAGq/PxzHKlc6FUEdyJ6i2Da16c0K76FpF3Gnxxhw+Tleixx3h
6+PbhC2qEgt7LS8TNg9J2WTDy4Hlw5YEmzOAM9NA6UYrH9BHsR87sbdriz6pAC55
CnFkWptrME4CjUP72qIezRYt/4784ABTw6poQ51jP30641YhgPoYLrWS8hWQYaE3
jcrum3JQnLTjsE88OclcreKNvNj+b1t0uxuHa/6UdMnyRCd8osJ22s6JJHLGgB/S
UQHvy+Rv0QJ65DjsJ4TfdRBLcKXaF7Ar5SaANqGi8EYwjVbhfImwx5VSEsvQclEU
7JihoETtCrRwJM1BkJz3nuBAaYDm1Y+lWHSyVZ6xi8G0eg==
=n6cE
-----END PGP MESSAGE-----
fp: C92FE5A3FBD58DD3EC5AA26BB10116B8193F2DBD
encrypted_regex: ^(data|stringData)$
version: 3.8.1

View File

@ -0,0 +1,69 @@
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: coturn
spec:
template:
spec:
securityContext:
runAsUser: 1000
runAsGroup: 1000
fsGroup: 1000
containers:
- name: "coturn"
image: coturn/coturn
args: ["-c", "/config/turnserver.conf"]
ports:
- name: turn-3478
containerPort: 3478
protocol: UDP
- name: turn-49152
containerPort: 49152
hostPort: 49152
protocol: UDP
- name: turn-49153
containerPort: 49153
hostPort: 49153
protocol: UDP
- name: turn-49154
containerPort: 49154
hostPort: 49154
protocol: UDP
- name: turn-49155
containerPort: 49155
hostPort: 49155
protocol: UDP
- name: turn-49156
containerPort: 49156
hostPort: 49156
protocol: UDP
- name: turn-49157
containerPort: 49157
hostPort: 49157
protocol: UDP
- name: turn-49158
containerPort: 49158
hostPort: 49158
protocol: UDP
volumeMounts:
- name: config
mountPath: /config/turnserver.conf
subPath: turnserver.conf
readOnly: true
- name: var-tmp
mountPath: /var/tmp
securityContext:
capabilities:
# https://github.com/coturn/coturn/issues/994
add:
- NET_BIND_SERVICE
drop:
- ALL
readOnlyRootFilesystem: true
allowPrivilegeEscalation: false
volumes:
- name: config
secret:
secretName: coturn
- name: var-tmp
emptyDir: {}

View File

@ -0,0 +1,12 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
labels:
- includeSelectors: true
pairs:
app.kubernetes.io/name: coturn
app.kubernetes.io/part-of: matrix
resources:
- daemonset.yaml
- service.yaml
generators:
- secret-generator.yaml

View File

@ -0,0 +1,6 @@
apiVersion: viaduct.ai/v1
kind: ksops
metadata:
name: coturn-ksops-secrets
files:
- config-secrets.enc.yaml

View File

@ -0,0 +1,39 @@
apiVersion: v1
kind: Service
metadata:
name: coturn
spec:
type: ClusterIP
ports:
- targetPort: turn-3478
name: turn-3478
port: 3478
protocol: UDP
- targetPort: turn-49152
name: turn-49152
port: 49152
protocol: UDP
- targetPort: turn-49153
name: turn-49153
port: 49153
protocol: UDP
- targetPort: turn-49154
name: turn-49154
port: 49154
protocol: UDP
- targetPort: turn-49155
name: turn-49155
port: 49155
protocol: UDP
- targetPort: turn-49156
name: turn-49156
port: 49156
protocol: UDP
- targetPort: turn-49157
name: turn-49157
port: 49157
protocol: UDP
- targetPort: turn-49158
name: turn-49158
port: 49158
protocol: UDP

View File

@ -0,0 +1,61 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: element-web
spec:
template:
spec:
securityContext:
runAsUser: 1000
runAsGroup: 1000
fsGroup: 1000
containers:
- name: element-web
image: vectorim/element-web
ports:
- name: http
containerPort: 8080
protocol: TCP
volumeMounts:
- mountPath: /app/config.json
name: config
subPath: config.json
readOnly: true
- mountPath: /etc/nginx/nginx.conf
name: config
subPath: nginx.conf
readOnly: true
- mountPath: /etc/nginx/conf.d/default.conf
name: config
subPath: default.conf
readOnly: true
- mountPath: /var/cache/nginx
name: ephemeral
subPath: cache
- mountPath: /var/run/pid
name: ephemeral
subPath: pid
readinessProbe:
httpGet:
path: /
port: http
startupProbe:
httpGet:
path: /
port: http
livenessProbe:
httpGet:
path: /
port: http
securityContext:
capabilities:
drop:
- ALL
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
volumes:
- name: config
configMap:
name: element-web-config
- name: ephemeral
emptyDir: {}

View File

@ -0,0 +1,44 @@
{
"default_server_config": {
"m.homeserver": {
"base_url": "https://matrix.distrust.co",
"server_name": "distrust.co"
}
},
"brand": "Distrust Chat",
"branding": {
"default_theme": "dark"
},
"showLabsSettings": true,
"features": {
"feature_new_spinner": true,
"feature_pinning": true,
"feature_custom_status": true,
"feature_custom_tags": true,
"feature_state_counters": true,
"feature_many_integration_managers": true,
"feature_mjolnir": true,
"feature_dm_verification": true,
"feature_bridge_state": true,
"feature_presence_in_room_list": true,
"feature_custom_themes": true,
"feature_oidc_native_flow": true
},
"roomDirectory": {
"servers": [
"matrix.org",
"distrust.co"
]
},
"integrations_ui_url": "https://scalar.vector.im/",
"integrations_rest_url": "https://scalar.vector.im/api",
"integrations_widgets_urls": [
"https://scalar.vector.im/_matrix/integrations/v1",
"https://scalar.vector.im/api",
"https://scalar-staging.vector.im/_matrix/integrations/v1",
"https://scalar-staging.vector.im/api",
"https://scalar-staging.riot.im/scalar/api"
],
"defaultCountryCode": "EN",
"default_theme": "dark"
}

View File

@ -0,0 +1,44 @@
server {
listen 8080;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}

View File

@ -0,0 +1,28 @@
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/pid/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}

View File

@ -0,0 +1,19 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
labels:
- includeSelectors: true
pairs:
app.kubernetes.io/name: element-web
app.kubernetes.io/part-of: matrix
resources:
- deployment.yaml
- service.yaml
configMapGenerator:
- name: element-web-config
files:
- files/config.json
- files/nginx.conf
- files/default.conf
images:
- name: vectorim/element-web
newTag: v1.11.67@sha256:5dcccfdebc05852e835de3fbb36d34cd34de2776724f0c8c50167d5da382e8ae

View File

@ -0,0 +1,10 @@
apiVersion: v1
kind: Service
metadata:
name: element-web
spec:
ports:
- name: default
protocol: TCP
port: 80
targetPort: http

View File

@ -0,0 +1,152 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: matrix
labels:
app.kubernetes.io/name: matrix
app.kubernetes.io/part-of: matrix
annotations:
cert-manager.io/cluster-issuer: letsencrypt
nginx.ingress.kubernetes.io/cors-allow-origin: https://chat.distrust.co,https:app.matrix.org
nginx.ingress.kubernetes.io/enable-cors: "true"
nginx.ingress.kubernetes.io/proxy-body-size: 110m
spec:
ingressClassName: nginx
tls:
- hosts:
- matrix.distrust.co
secretName: matrix-distrust-co-tls
- hosts:
- matrix-fed.distrust.co
secretName: matrix-fed-distrust-co-tls
rules:
- host: matrix.distrust.co
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: synapse
port:
name: http
- host: matrix-fed.distrust.co
http:
paths:
- path: /_matrix/
pathType: Prefix
backend:
service:
name: synapse
port:
name: http
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: matrix-media-repo
labels:
app.kubernetes.io/name: matrix
app.kubernetes.io/part-of: matrix
annotations:
cert-manager.io/cluster-issuer: letsencrypt
nginx.ingress.kubernetes.io/cors-allow-origin: https://chat.distrust.co,https:app.matrix.org
nginx.ingress.kubernetes.io/enable-cors: "true"
nginx.ingress.kubernetes.io/proxy-body-size: 110m
# This combination of configurations allows for the media-repo to function
# properly
nginx.ingress.kubernetes.io/upstream-vhost: distrust.co
nginx.ingress.kubernetes.io/configuration-snippet: |
more_set_input_headers 'Host: distrust.co';
more_set_input_headers 'X-Forwarded-Host: distrust.co';
spec:
ingressClassName: nginx
tls:
- hosts:
- matrix.distrust.co
secretName: matrix-distrust-co-tls
rules:
- host: matrix.distrust.co
http:
paths:
- path: /_matrix/media/
pathType: Prefix
backend:
service:
name: media-repo
port:
name: http
- host: matrix-fed.distrust.co
http:
paths:
- path: /_matrix/
pathType: Prefix
backend:
service:
name: synapse
port:
name: http
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: element-web
labels:
app.kubernetes.io/name: element-web
app.kubernetes.io/part-of: matrix
annotations:
cert-manager.io/cluster-issuer: letsencrypt
nginx.ingress.kubernetes.io/configuration-snippet: |
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header Content-Security-Policy "frame-ancestors 'self'";
spec:
ingressClassName: nginx
tls:
- hosts:
- chat.distrust.co
secretName: element-distrust-co-tls
rules:
- host: chat.distrust.co
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: element-web
port:
name: http
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: appservice-slack
labels:
app.kubernetes.io/name: appservice-slack
app.kubernetes.io/part-of: matrix
annotations:
cert-manager.io/cluster-issuer: letsencrypt
nginx.ingress.kubernetes.io/configuration-snippet: |
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header Content-Security-Policy "frame-ancestors 'self'";
spec:
ingressClassName: nginx
tls:
- hosts:
- slack-bridge.matrix.distrust.co
secretName: slack-bridge-matrix-distrust-co-tls
rules:
- host: slack-bridge.matrix.distrust.co
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: appservice-slack
port:
name: rtm

View File

@ -0,0 +1,18 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: matrix
resources:
- synapse
- coturn
- element
- matrix-media-repo
- bridges/matrix-appservice-slack
- bridges/mautrix-telegram
- ingress.yaml
images:
- name: matrixdotdog/synapse
newTag: v1.98.0@sha256:8d962e48a1d88d2fb646c82b1babf4dd0ed765b21a4cf15600d77e90e46dc413
- name: coturn/coturn
newTag: 4.6.2@sha256:9a5d44d1aebf28f1a96de4595bbab3eadc1ebd6bda705ca040df907f353f9fb2
- name: dock.mau.dev/mautrix/slack
newTag: 4530ff397d08d93b673cd71da4c2a75d969ca0df-amd64@sha256:7db11f874c655dd8be77a75fb07bd6071cc0d7e92bc564e1397f5b2e0e1883c7

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,41 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: matrix-media-repo
spec:
template:
spec:
# This does not currently work as there are some weird expectations on
# run scripts as running as non-root
securityContext:
fsGroup: 1000
containers:
- name: media-repo
image: drgrove/matrix-media-repo
ports:
- name: http
containerPort: 8000
protocol: TCP
- name: metrics
containerPort: 9000
protocol: TCP
volumeMounts:
- mountPath: /home/user/media/
name: ephemeral
- mountPath: /home/user/config/media-repo.yaml
name: config
subPath: config.yaml
readOnly: true
securityContext:
capabilities:
drop:
- ALL
allowPrivilegeEscalation: false
# Right now setting this to true is not possible
readOnlyRootFilesystem: false
volumes:
- name: config
secret:
secretName: mmr-config
- name: ephemeral
emptyDir: {}

View File

@ -0,0 +1,15 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
labels:
- includeSelectors: true
pairs:
app.kubernetes.io/name: media-repo
app.kubernetes.io/part-of: matrix
resources:
- deployment.yaml
- service.yaml
generators:
- secret-generator.yaml
images:
- name: turt2live/matrix-media-repo
newTag: v1.3.3@sha256:59cf338753598af400919caf332c92dd0e8e6c6e6e5d18270e52552c7c1e3c4b

View File

@ -0,0 +1,6 @@
apiVersion: viaduct.ai/v1
kind: ksops
metadata:
name: telegram-ksops-secrets
files:
- config-secrets.enc.yaml

View File

@ -0,0 +1,14 @@
apiVersion: v1
kind: Service
metadata:
name: media-repo
spec:
ports:
- name: http
protocol: TCP
port: 8000
targetPort: http
- name: metrics
protocol: TCP
port: 9000
targetPort: metrics

View File

@ -0,0 +1,122 @@
apiVersion: v1
kind: Secret
metadata:
name: config
type: Opaque
stringData:
homeserver.yaml: ENC[AES256_GCM,data:9O2YODDpJf6FzX6DojwGaIYkRs99K/GP+HCBCb4PO5fNJPmyEaN3DllpZjSn1WlgMIMi46gs7wfZJjoJRVz5wq+owwmZw+4lrAnYN8niNKcYoakuHn57WSzlrrqZDMY5i0VKZ1S+QATGll5Wl19AjHIuVEbJ5nQeeORVq+n7voG4/MX3PcZINjKdr4PnTwCx21TrPb9lRunH+oGhbHjMvx4yxNzqOvrvuFMSqkC/lDWrrSfCcn14qbLhq//OAk+c49IUkHTjJVbaK4mx1dbi7LA3rsZmb5cM9iFLPImWZnlpGM3SZasO91paiV8EaH+EkyA/4TpWODi+0KCiwVrLnOxEvmx6NweGOIaWgk04DgFomD468F1i0VVksk5/FwM8QvS8cIZ6Wqk/mAtbki5pnpvSZMrWXV4WSja+IcpoPYZjYdzttiHhxqoQ9Kkka3AqPEm1Nj6ggYtgjfE78dWVxN0jcKTXLV6C2T59jqpwyT9zmIpTJZ6AbZL6hafBprJenwD4mUO+pGzW1zs2nzDDr49nRSLtnRub5ecdYgZTPoInxxJYqbgZIjCYfwc7Y49JeSxklQXspCYZf+xmS0O4w8FzgwWYKCcajju4cRKHe46oN6QUftcmJILyt4LVSCuKzGsIKRnPazPKWqPUDjAs7j/i+jCha6gIctF5wvihfrCXHqD0gHa92kR/M581C6Ch2LFTupyUZtyZEbE+Y1oPlYyn2psBohVm/izl96QKuX7Ujco5Iahf7A55CTMuoBqXtvhpNwZVcmLf3SWiFTN2LfrkG2rXarvq+2TsgMcFeNia094Yk0gISR8UTu7uhhKuoPoFMN+3cCnXqiqMHoehbT9KyV7QuXG+M/jvGnUKPeTtp/Grmd4arvLpFp9UKAXbVkvFCFyTW+562qRnh0Int88ycr6FBdQl1HTN+mQfz4lNLxNomxu+0iDMaNP0+YTncSRragpjV267IUvWzzu5Dl1StD8YUZ2/J+66helA3IGBVlIqoeoAJyrP+GNuhwInTFVBlVxDyn8N/VqJuFw3B8c2W7BX6+68asZROeaTHDu2rYfxVWhGss7oKTxz4RdiK510tLh5OtI7M5f2b8gnhqwTbsiHM4UaCXGP4JdmIsyLcUEeg9K1jQx/LsYCBi9ZaegzbhIvgi3r12495Fzw5gWfZ5Xsf7gvQYR41A==,iv:QemGZaVH7IHvLdTjhr+R7FMyuJlGk9UsZMn5aILwwNg=,tag:N3dCm2v044ZrOgPjWSrjuw==,type:str]
mautrix-slack-bridge.yaml: ENC[AES256_GCM,data:7prhlEl/Ftf2CJWX67OF36fU386C5aGtrG45ofQCepBlI1Chi9ntswRd4VmiOnEt3vepgy4WFPRrAGu+1ycvILgCztK/2hFhEEmnf6vOlNkddXhkyuB9AgOTeCZ/ieTFXw0kErmaAvFwCkdp/SZIh+rqOTGk/3QoPqv7+1mLTxyuUOGeKlizs+4AfzFqpommfQNC2ZPpbOCtih/OZty+nbleyYnwBCyiIEOSI/to8m2aAIlg69fIT6cOwj4xiglO5dovXtr3Qe0VqkxBPOzD+1T5cFl2Q6zW0pFI320lP9MDwif92l8tTUEh12io6QtI5vQj7sNOoJ1FtnJwToL1V/vjESjl5MN1+LpZVicX4V2fUevJbms+7HUJFz4hETv1x/9tNmGSm5blZBz3qtUBJM/mRyBhnznjok0E9EXbGI6ox9O8scsvmXSYnkZHgFTXerqY/DmWmfFenWJLopNy7x1YNXUyb9z90//shUK5/Knau/YcCAKkDmzg6RObgHjkdCx/lfVePIkdKqrwS52lL5+CCgIKDVQm7Ds58E/0b+84N/6FWCwy5YV1+1R0SEywgVQ1WzjxJnR/Yg80tKQVqAzroFO5RWhffQEAyp3YQSURVQiZw4L89UXrfSvDvXu85olcGq1rXWGrDHgZSo7NKCbEQ29q8LsDgw==,iv:GyV3W2Rl+0T3pwrV1/Qv3OV4gYb8btnHMu340brhEcw=,tag:xRywHK6w5TfUdZTfS9XYhw==,type:str]
mautrix-telegram-bridge.yaml: ENC[AES256_GCM,data:WI3qnnmTi6/k0BdVOLFndk9nQPlBXMwvB+JAg68Q8o6eUjaFGQ3UzitmexxmX5JK70G6ZdCmqsfsut2M2eGGxYH4FrwP8nMIz/vtD1IeXciu7IFmNOptNC5NZI41C7UP+OO21SFPeu+tWblu8qa3+OrJOQaL+GLLnRDDk21w6HTR2vvRieTy4c8NSC2XYhoiplZ7Z1FIRKTO75jjQN/L8bGVM3a0nNCmi8cGt+LPtyJBv7Espr3l1kUhiLMUxVK2zeP5HRgXWxB9UeUdqdJa8Yfz8QPHQmroOTMsmXLnocM8LVPOleSWLrYfKvML22g1oTesR5LxazdIc5BRL3upPwz7AO6nOcOKNZVuyVUUmrg2wNscKs6r5LDBJzsNxte4OEtzygpVAjHyiAqYU61atycVzYgfziY7cy0dUmkhikyBfmO5mVFP2YkEINtPkX7tJW4E5s2vqRP8L0PB3rwqBPQPHr3llsUQf1rKLjEThwEcWc1OBgDaZJiRxUd/P5m2lMvdh+hW6y8gDNURtY5uwSh7k7DNJ8n6MSzX8ZnhBAsuwg9tXU0YwgR+uT14D3xsGfUJDYTKpsr5ejY4adbQjOMzgbhadz8iKbZdr8cWVPotBIR76SaGgRXqITWl5ygf1N0PVkgzrkTxdLmIv+7ttqndblkjyW/2W5NvY3iU+skC+GZpgLNDEmGGkmITpBIfxEEYBLNQZynD+NaA9hiATr+TVzAcp760FSOqbFLeDMx3YOpbcNQ77FdPq6qcCPxfe1nstzlQixjf4cEpdfuQWkFZIrlV4EBYh/WNH0VP,iv:7PhPWul/rDWEJB5ecn0myPMwbC6akihS0xZEvyeEB9s=,tag:TMAusZ7EneDQgLsthzaL8w==,type:str]
doublepuppet.yaml: ENC[AES256_GCM,data:bA8r1TZECeDxIuUxkBcM0MOFdplcB5wus7KEir7LfPWFA06aUCz5o2BU/YKSzf5NlEtwQLlCiaDdONPPfLMvjHxaXBfyd2YCIoqeP7GCCqRnfZE4zaY2QajrUkBZQV9DAvf23Mt9Zw6ByLUHWIGvB95WOGHXxKeyDo0jnUgDWu+Osm+UIkbYKEOBw/rF3NOAUBQxxh9AlxwU/IUMV3++dhbGaTF46RN7FF/XLUJ4d3zt/f9r/UUrPwksiyUFyDRjRuV0ABn0aLneeJhcL2H4MeFnkjuRie9t292ief1UGbbqZnSMSuh//V7UrxKJw3o/asVRQQkxJOVQfAa6TUcBq/kxhuYXDBg1mAFD8/RGmA6pjJGH5+q9Cqaqmj6PgLRU+HS2iZnkkz6FRK6GmSAXu1vcwB0GC6NkLXU75B8j+3b8DV+rM6boKzQgAVNT+McCm0Zg2DdtMvQ//Qqetg8AXOvHXSJZ/zU7HsM42fm8Zk49uF6abKY=,iv:227zkv9T+yoycJNumdo0rV44ngXlM5hYu/1kRBj93r0=,tag:yQq2Aiw2sB4kmp/CeJ0G3g==,type:str]
appservice-matrix-bridge.yaml: ENC[AES256_GCM,data:D7v8HJ1UbN/LI0OQ/VZnMqELIE7C2WiaxNYEGZJg6e0zV7sZ+xV16nQkrfmVEHbIfEsdf/LlmEZmf5JTrqfVi4LPAL9zFYwvJAOKTLmjqKWJSUS+qLqzBgoHwuwvn2qWnZjCDDuqQ8h+L8hDcLoI+GOW805icJxrg3ZX8zrVFldoG23YV9WhPQwnTbpi5LRDGMWWDTxxOFt6/ZgLyRTRAs8D601VEAI7ulyMPsIPZzKOx1aBIWb5VzmP+BKcWj8yYTR6UhFg0ac9a7Kb/U8u/soBRnBLmSEFnL6pVrv2utsyS4SdZNaSZN/PZtgxctdvPFYo/fGH+iFeYWZ11izyaTUngSgOvGTwvdEkn98wd2hwKnM0HvOOm28VX76/2wTiqU0e301AD5ouUKvvTFqJqqowQJp5DD5DX4BZ0jS6n9+QsH8MfeSP89ZgKIhNvHQ8KAnm1yJu5nEvaOt7NVkEL9CVFtrymDqRCCS3/FMVYBtq4bjJsrQ6yXqIzSPH,iv:Kv4eGx1vFgs+sV6iwBZD/nR0h2GzLKqjNJmgsRldNrY=,tag:QGmJZUhn23c1pez9+MCrfg==,type:str]
sops:
kms: []
gcp_kms: []
azure_kv: []
hc_vault: []
age: []
lastmodified: "2024-03-31T21:34:41Z"
mac: ENC[AES256_GCM,data:RZ0jexcJq46ByhdZsG/Ab1ONc0cie8UAY7e5pw4+3IZmh1Zgg41vz1+sbitIUVC1tFjND7Jo0Ess+agS7/b45JZU0rta9rKp7WhCOtAVhBO+BDXmRKMtWynd/TSxoBdUtHG+AlGAoPRmz/4HjUMDoeO0CFoa/jR5Ajfv/xrSa2o=,iv:W/XuQZ8Ju6pv3E/b+0ugDsg9J/FXw0ixfFwLNlmLgxQ=,tag:W+xjNY+AJdZb+dxUrvLosQ==,type:str]
pgp:
- created_at: "2024-01-11T20:55:07Z"
enc: |-
-----BEGIN PGP MESSAGE-----
wcFMA82rPM2mSf/aARAAkFACzQmqyF9BqaD1qEjIO4e6owS/n4h3U6ee0Y7fhO8y
a5RJ4/HvMmfXcYeHm+CZjsFaui4YJkPS93clGTJzV4w15yXJUunIVjAmkvSrVh6P
GqRUtNpi1y+JCS3sjlAfvm3h9b08dNxFv7rTwZtDiP8zmcNuB0zbLBFR7G6ixetx
ZxL7piPYX75Rqoz8A/+V7VAtsoX8t3xv5xgjHzzfhiM3TeoQUgLnF8aN5huiSptf
dMmNMa0GGu5QaUjYJ3iHjv5eMtCJ79KwpuCfv5iX34Q++rTe5VUWoQabNAiE/Frt
Rc3JB8o8rfL6WME9qIIa5k654JlVDKqOvTH3mtHkOIWhD2+CEK89Siq3G35Kkct8
Ym7UNa6gE8IdSGkCOH81G4ZheU6Z8OKF1Z7dO+o7IdgIURTwLEFeBIC2PtWOKOJP
PnzqZNk1w4n4XK6hQg4bmIj8VaZXXgHEXcO/jaGCoRyr36BHCE1Sj1ae5cMUgDje
p6WKVO6gXfRg7SRJqQNUh03Lz0YKIjsI/429UPyf9mtXbHfvVyrW3+wyByok86FG
cGL1Y/N7thxAxXqHy4OZFCE0NMP2bobMzzGJTtDY9oPsGwTb6xk1g0wE5zg6IoQa
9hnObBJhdpvYcD6juz+V0wkeI30essnz7ZTtsLdfCox6mnP5BMTtzxmcRrCpNvHS
UQFIZa0XryYoXv3rcw6yUpkqv6aYzD3L4PnqYtGUEtbMoTb8NXa9Cp+1OeypqZ0g
7uO5zCKJgL6sBaPnJL5/n+afafzYcIOsQc2O+q0s4O1d5Q==
=3E6w
-----END PGP MESSAGE-----
fp: 6B61ECD76088748C70590D55E90A401336C8AAA9
- created_at: "2024-01-11T20:55:07Z"
enc: |-
-----BEGIN PGP MESSAGE-----
wcFMAw95Vf08z8oUAQ//abo3n5r8YdQ6p+/X031/n8MCvWKw+ERGSvDuT2r7g8m8
DqrBQmX578jHVmZkC2B6fYqEBuQAeyEJyQ56MLMuGMNSET8dgNS4Uj/gwvsuEDQf
NhU10WLkfQ3g2/o654BVzPC2b3UQTL4mmXqp0+ID79uynn0/WZ0TQQ8xj/uUaDS1
h6/uC7mmDGTHaxF3gFuYkvWMghU0bqX5BfrAPdICAr8FIqxUGIvUD6KkBu9hWTYP
RLtfwpU/DAcT/7pNtic25WzzQt7W0mok3zUZZq5r2UqO35x2XOrgC5DQ69QYf7JZ
a9S236gEpAS0Kl1IWSvY2kDzj/J27T3nonY2kX3a+UqVWX15LEmVmNNUMwjz91/b
0G+26vustzinHBs30EHGBqhyELjRW0RjcmlVGNXvZwhgGL5/LNIEcfBi19tIang1
dRYE9TasSeRbyTU/A/CXFDeuGtC8K552SzXjv1zP6gkwZFb0/zd0/XHPSyGyOLbM
1PC3JhkA8GEYQ7l9y5BdPXxZseuoSHDPHfMRIcnogx6w6rfBdd9+78M1WjnGzhYi
/utORBaiwU9Zk+Xm3B+WbkDl5+jio+UIp9nHoYAGfuJ9A6TZYBIavB6K171wALke
Kl6hoTxef/VGwdfXB9ikUy0bi0Km1vVpZGVzIjSFXiSlLkaamhxUFSgDPGZN21rS
UQHeXKkhgKXTEVvi+kypRbN2/174bElGTWz1C2TWPNJAcvvKmRw66t5g8pahnXbm
SYQoB5JaAl0URu6zHWBYhCjQjiyePhnxHV4tgGtEYAdY3g==
=xXRR
-----END PGP MESSAGE-----
fp: 88823A75ECAA786B0FF38B148E401478A3FBEF72
- created_at: "2024-01-11T20:55:07Z"
enc: |-
-----BEGIN PGP MESSAGE-----
wcFMA0/D4ws+/KPtARAAsxa6N9jRT1AUqfWI7gIfJK6i6g0F5oxRYJ5A2mjhc89k
ZAN4/tO9GC+Fg8+lLhPHdiz6v2T1+92AFXET3jm+ax6rYei2woMHNXKzgqxjkQEQ
xQ/3LcQ3+FOTrvy7Gir9HQ/DoWSePBF7tx16unxH75hi6AgOiT0nFoEbXP3CJXie
lVOO5r5jKgBg9LENj/U+9LHjXB6W0PbVdhxdeStk2TTKcmuDnrGeqKZ3SyZ9V33p
DEfydW+T0ac156Eb2tdszzW5e87oPmW78wvLkotboZcPVWBadRtJkzVn3JXoMAda
gN+W2+I4/4iQN8ITBQ+2i5GsdbHtnrmPkzSbtSqhujwZ1k/a7uRmHy46ejDK9QnT
lQzm2OKyjTlCDhnxnKj0eTE4nN0CDyxGBNlNVG2piKd8i+HpqrjKJ9IUcMj7oO3U
8rtQ2A0LHquNvu6ZatP6fUk3tKgLaEslV4ORXMlILdZXlYqgznmvWJaII3XVeu8l
G/tHPkOhrcQDIecBeYcTLZYXtPtmY1UNJZfbDazG/9J0rdq/r9NmnB7woy7FSYEp
yRNji1i/89nVLsu94ra1D6FHyxgIFTSLkD7s1iCMTsz0UdwfbxqdLIWumYrm04XF
wM2eTB8OAGe8mdfi1q4te0FEDMLTpdYBhYDDjHmBv4fXwKPcWkgixvNJtT6xPgLS
UQEvOn03hQ8MCQ5kh1R1FoTOw1UpgV0eqJSateC2wkBKbZ/4NWPbnZA7XAW6Jb98
JidKJ8TiYiI33hxUhu4nUeZWjNcd7MgHyl1Do2r7SfyICw==
=TXST
-----END PGP MESSAGE-----
fp: 3D7C8D39E8C4DF771583D3F0A8A091FD346001CA
- created_at: "2024-01-11T20:55:07Z"
enc: |-
-----BEGIN PGP MESSAGE-----
wcFMA5Wf+FyJ+zFJAQ/+I9khYJfqjCHhrAaElVWKgn4c+7C+oilVNE0132pQZfLb
u17yv6AYY5zThK6Lg0GZMKaKFn+JuF9wonTyixJQccJ+w2MxsJQRNQZTV/t19HrQ
B+6YFLVPNyOglr7jf+o5BnOdIvpR0Cog5JDzn0j4iwpRWRSGW1sWXiABKWUIW0Ks
nR7Rm/k3Jm8zYO6LtoyYog5HGUEHRMuOY6Yoj/EEbfDLKFU5WZ+hfKnbGGM9KW31
RkXoCtjm2AstZTia5+Y0E3wNb9bbvpbkewyQd5KqaHmHaX3MzuoYKNHGVEgPMfla
Y26aED5uSLETv+C1U/jYJyxyVJxNYb2JBrS8a7+p+mo00Cvbs/pbM/cr5Y/Ogu7Q
Ed0+Ixst3LzSTOcYAAiEC/LpWztaIp/4h/cAfE7eKnsoFUVcv2lLpLHyI7fS/sJH
Ywp8tlqlfx7DaCqYEVjPMSfI9qBbJomoQ77szHL+Gyi4ibyF0iRz0/NnF5lmu5H5
sDAYiqnHEIpk1v+gWXoj/CQq7a5jJf044cYylcO+al27cugr+jr5TBQQVv+wDNJV
LqpAxmmz8yUJ6RlTSg5JwNlNCCOONv6f+lX0Cjk7V0kPcOMgbVn19Su7zIvhM7wd
m9mzuVWWx2SBGzORdK9W4tt7lybU7aCvusT1jP1nwXF/JCz9lyEbb1syaNIAiXHS
UQE2Va23CUVgB+cV/ImXBCEuAjZhiSMFVCtWOZrcqPS8EZX9s6WzscpsEmFnDE7t
GVR3u1IyjxTsuTxxYU0ldSjHqYFjQrgRD3ZBzwZcgeajqw==
=bF9b
-----END PGP MESSAGE-----
fp: F4BF5C81EC78A5DD341C91EEDC4B7D1F52E0BA4D
- created_at: "2024-01-11T20:55:07Z"
enc: |-
-----BEGIN PGP MESSAGE-----
wcFMA8KRInHl7Vz+ARAAoMRyGipvXTgUChfL1Lryej14FI9+8dvWQculBjPQzg6x
oxdPzz07ifIX8D64zfToE+qc439l/RYwiMx9XyGscEim0D1GIFPwxOm4DCXT+/5m
wlLkOBP7oMwirqSazS7dNF1hE83717QTi1GqC0UqhoMINtxrhQIv1Y6xxREqD1Wd
eW3M45p1i8iSZkzF7n0EhIK3J59Wl3vxt9FUX3YRWk1JH0oaqIc1VCH3TJc73DAx
9e1jIVQSo4R8BfQc5Y64xRh0eq/87Ud2E2x9JbZmpnw4FN/OHg9QqRMaZ9r6EQ/l
VerhJFkfSj3UVAfODzViKXyNTKRak1GOcQBE5lfAXynAW1nfTTx0re0rl6/tvOwC
i02a/raksTI8afak1RMclNFqlihsegGU239ZGDRPb4apL32nYY0SMim58vET8rv5
eTiQE1udg+1ttIRAGq/PxzHKlc6FUEdyJ6i2Da16c0K76FpF3Gnxxhw+Tleixx3h
6+PbhC2qEgt7LS8TNg9J2WTDy4Hlw5YEmzOAM9NA6UYrH9BHsR87sbdriz6pAC55
CnFkWptrME4CjUP72qIezRYt/4784ABTw6poQ51jP30641YhgPoYLrWS8hWQYaE3
jcrum3JQnLTjsE88OclcreKNvNj+b1t0uxuHa/6UdMnyRCd8osJ22s6JJHLGgB/S
UQHvy+Rv0QJ65DjsJ4TfdRBLcKXaF7Ar5SaANqGi8EYwjVbhfImwx5VSEsvQclEU
7JihoETtCrRwJM1BkJz3nuBAaYDm1Y+lWHSyVZ6xi8G0eg==
=n6cE
-----END PGP MESSAGE-----
fp: C92FE5A3FBD58DD3EC5AA26BB10116B8193F2DBD
encrypted_regex: ^(data|stringData)$
version: 3.8.1

View File

@ -0,0 +1,101 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: synapse
spec:
template:
spec:
containers:
- name: synapse
args:
- run
- --config-path
- /config/homeserver.yaml
- --config-path
- /config/secrets.yaml
env:
- name: SYNAPSE_CACHE_FACTOR
value: "5.00"
ports:
- name: http
containerPort: 8008
protocol: TCP
- name: metrics
containerPort: 9002
protocol: TCP
image: matrixdotorg/synapse
imagePullPolicy: IfNotPresent
livenessProbe:
httpGet:
path: /_matrix/client/versions
port: 8008
scheme: HTTP
initialDelaySeconds: 120
readinessProbe:
httpGet:
path: /_matrix/client/versions
port: 8008
scheme: HTTP
initialDelaySeconds: 10
resources:
# These are just some arbitrary values, will have to be tuned or removed per-deployment
requests:
memory: 1Gi
cpu: 1000m
limits:
memory: 1Gi
cpu: 1
volumeMounts:
- name: data
mountPath: /data
- name: keys
mountPath: /config/keys
- name: config
mountPath: /config/homeserver.yaml
subPath: homeserver.yaml
- name: config
mountPath: /usr/local/lib/python3.11/site-packages/shared_secret_authenticator.py
subPath: shared_secret_authenticator.py
- name: log-config
mountPath: /config/log.config
subPath: log.config
- name: config-secrets
mountPath: /config/secrets.yaml
subPath: homeserver.yaml
- name: config-secrets
mountPath: /bridges/mautrix-slack-bridge.yaml
subPath: mautrix-slack-bridge.yaml
- name: config-secrets
mountPath: /bridges/mautrix-telegram-bridge.yaml
subPath: mautrix-telegram-bridge.yaml
- name: config-secrets
mountPath: /bridges/appservice-matrix-bridge.yaml
subPath: appservice-matrix-bridge.yaml
- name: config-secrets
mountPath: /bridges/doublepuppet.yaml
subPath: doublepuppet.yaml
- name: tmp
mountPath: /tmp
restartPolicy: Always
securityContext:
runAsUser: 1000
runAsGroup: 1000
fsGroup: 1000
volumes:
# Will need to be a persistant volume of some kind to support media uploads, unless using matrix-media-repo
- name: data
emptyDir: {}
- name: tmp
emptyDir: {}
- name: keys
secret:
secretName: signing-key
- name: config-secrets
secret:
secretName: config
- configMap:
name: synapse
name: config
- configMap:
name: synapse-log
name: log-config

View File

@ -0,0 +1,10 @@
apiVersion: v1
kind: Service
metadata:
name: synapse-federation
spec:
type: ClusterIP
ports:
- port: 80
targetPort: http
protocol: TCP

View File

@ -0,0 +1,98 @@
# Configuration file for Synapse.
#
# This is a YAML file: see [1] for a quick introduction. Note in particular
# that *indentation is important*: all the elements of a list or dictionary
# should have the same indentation.
#
# [1] https://docs.ansible.com/ansible/latest/reference_appendices/YAMLSyntax.html
#
# For more information on how to configure Synapse, including a complete accounting of
# each option, go to docs/usage/configuration/config_documentation.md or
# https://matrix-org.github.io/synapse/latest/usage/configuration/config_documentation.html
server_name: "distrust.co"
pid_file: /data/homeserver.pid
use_presense: true
enable_search: true
public_baseurl: "https://matrix.distrust.co"
# Homeserver blocking
# Set to true to globally block access to the homeserver
hs_disabled: false
hs_disalbed_message: "Homeserver is not currently accessible"
# Federation
allow_public_rooms_over_federation: true
# federation_domain_whitelist: []
federation_ip_range_blacklist:
- '127.0.0.0/8'
- '10.0.0.0/8'
- '172.16.0.0/12'
- '192.168.0.0/16'
- '100.64.0.0/10'
- '169.254.0.0/16'
- '::1/128'
- 'fe80::/64'
- 'fc00::/7'
# Listeners
listeners:
- port: 8008
tls: false
type: http
x_forwarded: true
resources:
- names: [client, federation]
compress: false
- port: 9002
type: metrics
resources:
- name: [metrics]
compress: true
# Rate Limit
rc_invites:
per_room:
burst_count: 200
per_user:
burst_count: 200
rc_joins:
local:
burst_count: 200
remote:
burst_count: 200
rc_joins_per_user:
burst_count: 200
# Registration
registration:
enabled: false
allowGuests: false
autoJoinRooms: []
# This is handled by Cert Manager
acme:
enabled: false
# Bridges
app_service_config_files:
- /bridges/appservice-matrix-bridge.yaml
- /bridges/mautrix-telegram-bridge.yaml
- /bridges/mautrix-slack-bridge.yaml
- /bridges/doublepuppet.yaml
# Turn
turn_user_lifetime: 1h
turn_allow_guests: true
# Metrics/Telemetry
enable_metrics: true
report_stats: false
admin_email: "mailto:matrix@distrust.co"
log_config: "/config/log.config"
media_store_path: /data/media_store
signing_key_path: "/config/keys/signing.key"
trusted_key_servers:
- server_name: "matrix.org"
# vim:ft=yaml

View File

@ -0,0 +1,31 @@
version: 1
formatters:
precise:
format: '%(asctime)s - %(name)s - %(lineno)d - %(levelname)s - %(request)s - %(message)s'
handlers:
console:
class: logging.StreamHandler
formatter: precise
loggers:
# This is just here so we can leave `loggers` in the config regardless of whether
# we configure other loggers below (avoid empty yaml dict error).
_placeholder:
level: "INFO"
shared_secret_authenticator:
level: INFO
synapse.storage.SQL:
# beware: increasing this to DEBUG will make synapse log sensitive
# information such as access tokens.
level: INFO
root:
level: INFO
handlers: [console]
disable_existing_loggers: false

View File

@ -0,0 +1,123 @@
# -*- coding: utf-8 -*-
#
# Shared Secret Authenticator module for Matrix Synapse
# Copyright (C) 2018 Slavi Pantaleev
#
# https://devture.com/
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
from typing import Awaitable, Callable, Optional, Tuple
import hashlib
import hmac
import logging
import synapse
from synapse import module_api
logger = logging.getLogger(__name__)
class SharedSecretAuthProvider:
def __init__(self, config: dict, api: module_api):
for k in ('shared_secret',):
if k not in config:
raise KeyError('Required `{0}` configuration key not found'.format(k))
m_login_password_support_enabled = bool(config['m_login_password_support_enabled']) if 'm_login_password_support_enabled' in config else False
com_devture_shared_secret_auth_support_enabled = bool(config['com_devture_shared_secret_auth_support_enabled']) if 'com_devture_shared_secret_auth_support_enabled' in config else True
self.api = api
self.shared_secret = config['shared_secret']
auth_checkers: Optional[Dict[Tuple[str, Tuple], CHECK_AUTH_CALLBACK]] = {}
if com_devture_shared_secret_auth_support_enabled:
auth_checkers[("com.devture.shared_secret_auth", ("token",))] = self.check_com_devture_shared_secret_auth
if m_login_password_support_enabled:
auth_checkers[("m.login.password", ("password",))] = self.check_m_login_password
enabled_login_types = [k[0] for k in auth_checkers]
if len(enabled_login_types) == 0:
raise RuntimeError('At least one login type must be enabled')
logger.info('Enabled login types: %s', enabled_login_types)
api.register_password_auth_provider_callbacks(
auth_checkers=auth_checkers,
)
async def check_com_devture_shared_secret_auth(
self,
username: str,
login_type: str,
login_dict: "synapse.module_api.JsonDict",
) -> Optional[
Tuple[
str,
Optional[Callable[["synapse.module_api.LoginResponse"], Awaitable[None]]],
]
]:
if login_type != "com.devture.shared_secret_auth":
return None
return await self._log_in_username_with_token("com.devture.shared_secret_auth", username, login_dict.get("token"))
async def check_m_login_password(
self,
username: str,
login_type: str,
login_dict: "synapse.module_api.JsonDict",
) -> Optional[
Tuple[
str,
Optional[Callable[["synapse.module_api.LoginResponse"], Awaitable[None]]],
]
]:
if login_type != "m.login.password":
return None
return await self._log_in_username_with_token("m.login.password", username, login_dict.get("password"))
async def _log_in_username_with_token(
self,
login_type: str,
username: str,
token: str,
) -> Optional[
Tuple[
str,
Optional[Callable[["synapse.module_api.LoginResponse"], Awaitable[None]]],
]
]:
logger.info('Authenticating user `%s` with login type `%s`', username, login_type)
full_user_id = self.api.get_qualified_user_id(username)
# The password (token) is supposed to be an HMAC of the full user id, keyed with the shared secret.
given_hmac = token.encode('utf-8')
h = hmac.new(self.shared_secret.encode('utf-8'), full_user_id.encode('utf-8'), hashlib.sha512)
computed_hmac = h.hexdigest().encode('utf-8')
if not hmac.compare_digest(computed_hmac, given_hmac):
logger.info('Bad hmac value for user: %s', full_user_id)
return None
user_info = await self.api.get_userinfo_by_id(full_user_id)
if user_info is None:
logger.info('Refusing to authenticate missing user: %s', full_user_id)
return None
logger.info('Authenticated user: %s', full_user_id)
return full_user_id, None

View File

@ -0,0 +1,21 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
labels:
- includeSelectors: true
pairs:
app.kubernetes.io/name: synapse
app.kubernetes.io/part-of: matrix
resources:
- deployment.yaml
- federation-service.yaml
- service.yaml
configMapGenerator:
- files:
- files/homeserver.yaml
- files/shared_secret_authenticator.py
name: synapse
- files:
- files/log.config
name: synapse-log
generators:
- secret-generator.yml

View File

@ -0,0 +1,4 @@
apiVersion: v1
kind: Namespace
metadata:
name: matrix

View File

@ -0,0 +1,7 @@
apiVersion: viaduct.ai/v1
kind: ksops
metadata:
name: sydent-ksops-secrets
files:
- config-secrets.enc.yaml
- secret-key.enc.yaml

View File

@ -0,0 +1,118 @@
apiVersion: v1
kind: Secret
metadata:
name: signing-key
type: Opaque
stringData:
signing.key: ENC[AES256_GCM,data:yrRjsuapmgDgBNNXGO9YyuZtkZaFPDg80SuJgdYWS3grCnN/hmkQ5x2icAf5i4f6TjAOreYxJYzRwQ==,iv:0ww6IrM9oY47ex1zYRULQx7TdATJ9odkk5k95yDo0ms=,tag:4/MjSSY2SltTuPtMtCRUtw==,type:str]
sops:
kms: []
gcp_kms: []
azure_kv: []
hc_vault: []
age: []
lastmodified: "2024-01-22T05:45:47Z"
mac: ENC[AES256_GCM,data:GitHfIeAeu4g0bf1obvjd0TS6j5AZ0qo00i4mwIL3MKtCVa3dLfGkx4dE9SD0NZqBMpHdZTWnns145uCXnJTVdyLAlz54AuG/bn7eO642SghLpUvhyhH+c+xxQF2c3UJiR7TBdjJBh0BUBSO/yOBB0ondzocW9T1hDg/ExBjeo8=,iv:77yhCNc2cJ7/uuXOEma5LEyU0YIJSQiw4IYLLASli04=,tag:41IvCCKLfQZUNHsv6DvMsA==,type:str]
pgp:
- created_at: "2024-01-11T20:55:07Z"
enc: |-
-----BEGIN PGP MESSAGE-----
wcFMA82rPM2mSf/aARAAkFACzQmqyF9BqaD1qEjIO4e6owS/n4h3U6ee0Y7fhO8y
a5RJ4/HvMmfXcYeHm+CZjsFaui4YJkPS93clGTJzV4w15yXJUunIVjAmkvSrVh6P
GqRUtNpi1y+JCS3sjlAfvm3h9b08dNxFv7rTwZtDiP8zmcNuB0zbLBFR7G6ixetx
ZxL7piPYX75Rqoz8A/+V7VAtsoX8t3xv5xgjHzzfhiM3TeoQUgLnF8aN5huiSptf
dMmNMa0GGu5QaUjYJ3iHjv5eMtCJ79KwpuCfv5iX34Q++rTe5VUWoQabNAiE/Frt
Rc3JB8o8rfL6WME9qIIa5k654JlVDKqOvTH3mtHkOIWhD2+CEK89Siq3G35Kkct8
Ym7UNa6gE8IdSGkCOH81G4ZheU6Z8OKF1Z7dO+o7IdgIURTwLEFeBIC2PtWOKOJP
PnzqZNk1w4n4XK6hQg4bmIj8VaZXXgHEXcO/jaGCoRyr36BHCE1Sj1ae5cMUgDje
p6WKVO6gXfRg7SRJqQNUh03Lz0YKIjsI/429UPyf9mtXbHfvVyrW3+wyByok86FG
cGL1Y/N7thxAxXqHy4OZFCE0NMP2bobMzzGJTtDY9oPsGwTb6xk1g0wE5zg6IoQa
9hnObBJhdpvYcD6juz+V0wkeI30essnz7ZTtsLdfCox6mnP5BMTtzxmcRrCpNvHS
UQFIZa0XryYoXv3rcw6yUpkqv6aYzD3L4PnqYtGUEtbMoTb8NXa9Cp+1OeypqZ0g
7uO5zCKJgL6sBaPnJL5/n+afafzYcIOsQc2O+q0s4O1d5Q==
=3E6w
-----END PGP MESSAGE-----
fp: 6B61ECD76088748C70590D55E90A401336C8AAA9
- created_at: "2024-01-11T20:55:07Z"
enc: |-
-----BEGIN PGP MESSAGE-----
wcFMAw95Vf08z8oUAQ//abo3n5r8YdQ6p+/X031/n8MCvWKw+ERGSvDuT2r7g8m8
DqrBQmX578jHVmZkC2B6fYqEBuQAeyEJyQ56MLMuGMNSET8dgNS4Uj/gwvsuEDQf
NhU10WLkfQ3g2/o654BVzPC2b3UQTL4mmXqp0+ID79uynn0/WZ0TQQ8xj/uUaDS1
h6/uC7mmDGTHaxF3gFuYkvWMghU0bqX5BfrAPdICAr8FIqxUGIvUD6KkBu9hWTYP
RLtfwpU/DAcT/7pNtic25WzzQt7W0mok3zUZZq5r2UqO35x2XOrgC5DQ69QYf7JZ
a9S236gEpAS0Kl1IWSvY2kDzj/J27T3nonY2kX3a+UqVWX15LEmVmNNUMwjz91/b
0G+26vustzinHBs30EHGBqhyELjRW0RjcmlVGNXvZwhgGL5/LNIEcfBi19tIang1
dRYE9TasSeRbyTU/A/CXFDeuGtC8K552SzXjv1zP6gkwZFb0/zd0/XHPSyGyOLbM
1PC3JhkA8GEYQ7l9y5BdPXxZseuoSHDPHfMRIcnogx6w6rfBdd9+78M1WjnGzhYi
/utORBaiwU9Zk+Xm3B+WbkDl5+jio+UIp9nHoYAGfuJ9A6TZYBIavB6K171wALke
Kl6hoTxef/VGwdfXB9ikUy0bi0Km1vVpZGVzIjSFXiSlLkaamhxUFSgDPGZN21rS
UQHeXKkhgKXTEVvi+kypRbN2/174bElGTWz1C2TWPNJAcvvKmRw66t5g8pahnXbm
SYQoB5JaAl0URu6zHWBYhCjQjiyePhnxHV4tgGtEYAdY3g==
=xXRR
-----END PGP MESSAGE-----
fp: 88823A75ECAA786B0FF38B148E401478A3FBEF72
- created_at: "2024-01-11T20:55:07Z"
enc: |-
-----BEGIN PGP MESSAGE-----
wcFMA0/D4ws+/KPtARAAsxa6N9jRT1AUqfWI7gIfJK6i6g0F5oxRYJ5A2mjhc89k
ZAN4/tO9GC+Fg8+lLhPHdiz6v2T1+92AFXET3jm+ax6rYei2woMHNXKzgqxjkQEQ
xQ/3LcQ3+FOTrvy7Gir9HQ/DoWSePBF7tx16unxH75hi6AgOiT0nFoEbXP3CJXie
lVOO5r5jKgBg9LENj/U+9LHjXB6W0PbVdhxdeStk2TTKcmuDnrGeqKZ3SyZ9V33p
DEfydW+T0ac156Eb2tdszzW5e87oPmW78wvLkotboZcPVWBadRtJkzVn3JXoMAda
gN+W2+I4/4iQN8ITBQ+2i5GsdbHtnrmPkzSbtSqhujwZ1k/a7uRmHy46ejDK9QnT
lQzm2OKyjTlCDhnxnKj0eTE4nN0CDyxGBNlNVG2piKd8i+HpqrjKJ9IUcMj7oO3U
8rtQ2A0LHquNvu6ZatP6fUk3tKgLaEslV4ORXMlILdZXlYqgznmvWJaII3XVeu8l
G/tHPkOhrcQDIecBeYcTLZYXtPtmY1UNJZfbDazG/9J0rdq/r9NmnB7woy7FSYEp
yRNji1i/89nVLsu94ra1D6FHyxgIFTSLkD7s1iCMTsz0UdwfbxqdLIWumYrm04XF
wM2eTB8OAGe8mdfi1q4te0FEDMLTpdYBhYDDjHmBv4fXwKPcWkgixvNJtT6xPgLS
UQEvOn03hQ8MCQ5kh1R1FoTOw1UpgV0eqJSateC2wkBKbZ/4NWPbnZA7XAW6Jb98
JidKJ8TiYiI33hxUhu4nUeZWjNcd7MgHyl1Do2r7SfyICw==
=TXST
-----END PGP MESSAGE-----
fp: 3D7C8D39E8C4DF771583D3F0A8A091FD346001CA
- created_at: "2024-01-11T20:55:07Z"
enc: |-
-----BEGIN PGP MESSAGE-----
wcFMA5Wf+FyJ+zFJAQ/+I9khYJfqjCHhrAaElVWKgn4c+7C+oilVNE0132pQZfLb
u17yv6AYY5zThK6Lg0GZMKaKFn+JuF9wonTyixJQccJ+w2MxsJQRNQZTV/t19HrQ
B+6YFLVPNyOglr7jf+o5BnOdIvpR0Cog5JDzn0j4iwpRWRSGW1sWXiABKWUIW0Ks
nR7Rm/k3Jm8zYO6LtoyYog5HGUEHRMuOY6Yoj/EEbfDLKFU5WZ+hfKnbGGM9KW31
RkXoCtjm2AstZTia5+Y0E3wNb9bbvpbkewyQd5KqaHmHaX3MzuoYKNHGVEgPMfla
Y26aED5uSLETv+C1U/jYJyxyVJxNYb2JBrS8a7+p+mo00Cvbs/pbM/cr5Y/Ogu7Q
Ed0+Ixst3LzSTOcYAAiEC/LpWztaIp/4h/cAfE7eKnsoFUVcv2lLpLHyI7fS/sJH
Ywp8tlqlfx7DaCqYEVjPMSfI9qBbJomoQ77szHL+Gyi4ibyF0iRz0/NnF5lmu5H5
sDAYiqnHEIpk1v+gWXoj/CQq7a5jJf044cYylcO+al27cugr+jr5TBQQVv+wDNJV
LqpAxmmz8yUJ6RlTSg5JwNlNCCOONv6f+lX0Cjk7V0kPcOMgbVn19Su7zIvhM7wd
m9mzuVWWx2SBGzORdK9W4tt7lybU7aCvusT1jP1nwXF/JCz9lyEbb1syaNIAiXHS
UQE2Va23CUVgB+cV/ImXBCEuAjZhiSMFVCtWOZrcqPS8EZX9s6WzscpsEmFnDE7t
GVR3u1IyjxTsuTxxYU0ldSjHqYFjQrgRD3ZBzwZcgeajqw==
=bF9b
-----END PGP MESSAGE-----
fp: F4BF5C81EC78A5DD341C91EEDC4B7D1F52E0BA4D
- created_at: "2024-01-11T20:55:07Z"
enc: |-
-----BEGIN PGP MESSAGE-----
wcFMA8KRInHl7Vz+ARAAoMRyGipvXTgUChfL1Lryej14FI9+8dvWQculBjPQzg6x
oxdPzz07ifIX8D64zfToE+qc439l/RYwiMx9XyGscEim0D1GIFPwxOm4DCXT+/5m
wlLkOBP7oMwirqSazS7dNF1hE83717QTi1GqC0UqhoMINtxrhQIv1Y6xxREqD1Wd
eW3M45p1i8iSZkzF7n0EhIK3J59Wl3vxt9FUX3YRWk1JH0oaqIc1VCH3TJc73DAx
9e1jIVQSo4R8BfQc5Y64xRh0eq/87Ud2E2x9JbZmpnw4FN/OHg9QqRMaZ9r6EQ/l
VerhJFkfSj3UVAfODzViKXyNTKRak1GOcQBE5lfAXynAW1nfTTx0re0rl6/tvOwC
i02a/raksTI8afak1RMclNFqlihsegGU239ZGDRPb4apL32nYY0SMim58vET8rv5
eTiQE1udg+1ttIRAGq/PxzHKlc6FUEdyJ6i2Da16c0K76FpF3Gnxxhw+Tleixx3h
6+PbhC2qEgt7LS8TNg9J2WTDy4Hlw5YEmzOAM9NA6UYrH9BHsR87sbdriz6pAC55
CnFkWptrME4CjUP72qIezRYt/4784ABTw6poQ51jP30641YhgPoYLrWS8hWQYaE3
jcrum3JQnLTjsE88OclcreKNvNj+b1t0uxuHa/6UdMnyRCd8osJ22s6JJHLGgB/S
UQHvy+Rv0QJ65DjsJ4TfdRBLcKXaF7Ar5SaANqGi8EYwjVbhfImwx5VSEsvQclEU
7JihoETtCrRwJM1BkJz3nuBAaYDm1Y+lWHSyVZ6xi8G0eg==
=n6cE
-----END PGP MESSAGE-----
fp: C92FE5A3FBD58DD3EC5AA26BB10116B8193F2DBD
encrypted_regex: ^(data|stringData)$
version: 3.8.1

View File

@ -0,0 +1,16 @@
kind: Service
apiVersion: v1
metadata:
name: synapse
spec:
ports:
- name: http
protocol: TCP
port: 8008
targetPort: 8008
- name: https
protocol: TCP
port: 8448
targetPort: 8448
selector: {}
type: ClusterIP

View File

@ -0,0 +1,32 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: docs
spec:
replicas: 2
selector:
matchLabels:
app: docs
template:
metadata:
labels:
app: docs
spec:
containers:
- name: docs
image: git.distrust.co/public/docs
imagePullPolicy: Always
ports:
- containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
name: docs
spec:
ports:
- name: http
port: 80
targetPort: 8080
selector:
app: docs

View File

@ -0,0 +1,8 @@
{
"m.homeserver": {
"base_url": "https://matrix.distrust.co"
},
"m.identity_server": {
"base_url": "https://vector.im"
}
}

View File

@ -0,0 +1,3 @@
{
"m.server": "matrix.distrust.co:443"
}

View File

@ -0,0 +1,58 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: website
annotations:
cert-manager.io/cluster-issuer: letsencrypt
external-dns.alpha.kubernetes.io/hostname: beta.distrust.co
nginx.ingress.kubernetes.io/enable-cors: "true"
spec:
ingressClassName: nginx
rules:
- host: beta.distrust.co
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: website
port:
number: 80
- path: /submit-email
pathType: Prefix
backend:
service:
name: web-form
port:
number: 80
tls:
- hosts:
- beta.distrust.co
secretName: website-tls
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: docs
annotations:
cert-manager.io/cluster-issuer: letsencrypt
external-dns.alpha.kubernetes.io/hostname: docs.beta.distrust.co
nginx.ingress.kubernetes.io/enable-cors: "true"
spec:
ingressClassName: nginx
rules:
- host: docs.beta.distrust.co
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: docs
port:
number: 80
tls:
- hosts:
- docs.beta.distrust.co
secretName: docs-tls

View File

@ -0,0 +1,762 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQINBFi8udoBEAD0OKIpZJ7TAqFI5G0x5AIX/0milJYZt9ZBfv40SBBm1ZgDg4iY
jugikXidxF21vDcj7VweY0DZSzsBsEgnFsRStSjAWUc0lVpIi2whJ0t4tXQJU0+X
qc4yb1IcIA8wsSgzEA/LRktL5AuvJbD8Y6jvFjzPryopSpZvFrydC+Ziy4THlh1o
lVAX3CfF9PgXF3P+XvFLhU0Iqo2bLChM8gUtwA7kT1+vaOXTaLfjIUsHDPwknoOu
qdLoou0DKWxcHd69riVoVveOhY4GnUbHbCj9LaRLjg8DSI9+SSM2X+YJ4scB2MCD
G9PtKIyAkuLjsZbg91hHFqRJyRPUZRxn6WR7waxvoKvxLanLJbTMiBiCepbRxDQT
r/hEPQ3tsDmPgg0j0ZO1FT0iLtjYm9gkTEIXiur/ZwGG3fqyAg0vKm0/crrBdLGL
TOGT4g3w5JbOF//ORfCcr1OxYtcWNiiO/hWElBMfbP9/iBXxZ06BW5Apc2O+tHQq
gwhQ76mKZNb2rwphnBt7Djz17vPIeqoH4xBYmo4obcvjMqlj8z2YkGSs7xj2E3hg
N5LHjcSJAQMiM85fZYmnP4Dlorz76qIkx+HXxy8V99HdFe8WFeeStbRywCjkp2RZ
YEZ0jVIS7re493VY+2f21lCIqMS0d06NYpscuxpDeEKilOiCkauC+N/odwARAQAB
tC5TaGFuZSBFbmdlbG1hbiA8Y29udGFjdEBydW5uaW5naW50aGVuaWdodC5jb20+
iQLhBBMBCADLAhsDBQkNgEknBQsJCAcCAyICAQYVCgkICwIEFgIDAQIeBwIXgBYh
BD18jTnoxN93FYPT8Kigkf00YAHKBQJj0LldOxSAAAAAABAAInByb29mQGFyaWFk
bmUuaWRkbnM6cnVubmluZ2ludGhlbmlnaHQuY29tP3R5cGU9VFhUTBSAAAAAABAA
M3Byb29mQGFyaWFkbmUuaWRodHRwczovL21hc3RvZG9uLnJ1bm5pbmdpbnRoZW5p
Z2h0LmNvbS9Ac2luZ2xlcmlkZXIACgkQqKCR/TRgAcrR5xAA75FQNh3zbZzNpLcT
HZLF0Rfu9jR244AaLFcr+j7BLYOi3bRnukE1L1f1evIln1QVZQUTPuKgH4q5MApU
erIGDQ7pe8oFflzU2wRnpu001D7lbNDkNqHmEo0G353YbEe+QRcpgq0xhuW9ZbZy
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
ZG5zOnNoYW5lLmdnP3R5cGU9VFhUXRSAAAAAABAARHByb29mQGFyaWFkbmUuaWRo
dHRwczovL2dpc3QuZ2l0aHViLmNvbS9zaW5nbGVyaWRlci9jNWU2NTBjNWE3MzRm
MWM0ZDZhNTgyYjBmYWZhYjg2OKMUgAAAAAAQAIpwcm9vZkBhcmlhZG5lLmlkbWF0
cml4OnUvQHNpbmdsZXJpZGVyOm1hdHJpeC5vcmc/b3JnLmtleW94aWRlLnI9IWRC
ZlFaeENvR1ZtU1R1amZpdjptYXRyaXgub3JnJm9yZy5rZXlveGlkZS5lPSQwVjd3
MWY2X0tlNVpKTXUycXlNdXVBVjVSZmVadVBKQ2NzMnFiaksxd0l3RRSAAAAAABAA
LHByb29mQGFyaWFkbmUuaWRodHRwczovL2NvZGViZXJnLm9yZy9zaW5nbGVyaWRl
ci9naXRlYV9wcm9vZgAKCRCooJH9NGABypl7D/9k7XFqGXeKkqTrXrbAuf1I3l0z
1dWs8WksfsROqni3P+NjI8tdeuDO+7XRdhR3ZWdvHaB9bTuJ5UaE0p/Un8U9UWUl
qZBXgLuYTSzatH0Ln1f0poeYR2ufR6SljSCxKUEhYABmK6+mNcTmpD1mUINpmDce
BK1uZu/aCBVUVLqQu/epkEBTR915Q0imsvClPda2WffNnK9JTY2wW+GtBHJ3D6Da
FemqwVTX8rSG2Ms0h/uNij3wKX4UysyyWLYpRGUJuKVYH8Fpyijr/biiDR53gi2A
isydA428BMZqsPmQLcVOyV8/lS4qetXjAUZGgw67huxvPHJ67e3uCYgDue2EqPoN
L9Dlxc2TVVI3vTLBlczAvVw0FlMErlSXH39oyrBTYyIgC2vQlOmQq0+Eb/+m24QG
S7UvUAVl0aVzZYXpQ4MOM/0ZkK/5A7ppzpzn2X6El4ZbI8/5Z72q3ZIRiDixhLtg
NQlrA/cupYl+JyRBGD767pe79AMBplGuMN9TMR4ka1HIEMfnrr/5uQgrA5Ylq8jg
hBVqWFy9dVwD/+8f2R1Es3/vo1lXxywwr1SGlRaipt4jayUYb9azn5yE70k6HSHe
6aNkJGRcr/q8ohuWetdXEir4cRZgS/MeEjp3+N9QVU/hZLCR8cE/cIYXn9RE6v5G
RsezLdXYIsnDdB/WVYkDoQQTAQgBiwIbAwcLCQgHAwIBBhUIAgkKCwQWAgMBAh4B
AheAAhkBBQkOz3WZFiEEPXyNOejE33cVg9PwqKCR/TRgAcoFAmPQhNpFFIAAAAAA
EAAscHJvb2ZAYXJpYWRuZS5pZGh0dHBzOi8vY29kZWJlcmcub3JnL3NpbmdsZXJp
ZGVyL2dpdGVhX3Byb29moxSAAAAAABAAinByb29mQGFyaWFkbmUuaWRtYXRyaXg6
dS9Ac2luZ2xlcmlkZXI6bWF0cml4Lm9yZz9vcmcua2V5b3hpZGUucj0hZEJmUVp4
Q29HVm1TVHVqZml2Om1hdHJpeC5vcmcmb3JnLmtleW94aWRlLmU9JDBWN3cxZjZf
S2U1WkpNdTJxeU11dUFWNVJmZVp1UEpDY3MycWJqSzF3SXddFIAAAAAAEABEcHJv
b2ZAYXJpYWRuZS5pZGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL3NpbmdsZXJpZGVy
L2M1ZTY1MGM1YTczNGYxYzRkNmE1ODJiMGZhZmFiODY4AAoJEKigkf00YAHK3xQP
/Rapb5NSCikCjuYAjCSVNrH7F9ufgJUGRQMPO5sCUsg/RQzNk6AD2J6Sw8A132PP
pg10wfxoVLhJVwwgHiWbXNwEbcQVQO4gG53LxlerLzNWQfbCQL7q46P0G9iAAmTC
h8pvTnLNaptWwvS1e5FQ9ltcuVtKaGq3IS3iLTfLQmZ1RUV1SZ6ND/aOdDAUDwuL
/ybHyqfi9qWJhJIFwut7lWEG1/nc2+gaFOPj+R4DCDe7cOo3hZBqDf8CrLbevVTv
8fCwuPyPIA5B/FQQxqxmN2fkbGTaxA6mqiDYFwhsyf6A1Lyw48CSFaHGowcSZ+VO
MNF7hnNHP0BOdE4dpZGCgUd9PbFdEIl0+fEfgDTsQYDNDSStTcRV0f7vT8BEXXnH
5gXi5gY41ShyxYgPWEG4h5a9trSy6pI9cjBpcx7fbEnWQ9qUCfG9P+bgQIZ/1osl
vIBnr+2Aa01ZzHsN2NKwDZOTaWJyzMrhK/VGsR/cqTVoU1RabmLgz1URTLJ04WOC
bgJ31TG9xhIs2XBthebSEFFpjJu8b1CWC2gypi5ZwHMjEYWJBodqFyngXYtW1oLB
rkdk8cxIh5e50MaYhPzoZpRU/vqEbcgWsQnE9DZ1t+cGnCRPPjVF3Inu6+Lajlyl
eCtA0iadi+D/FEbUEPylvtTc52pUo5/8sbe/F5wwGQHfiQNbBBMBCAFFAhsDBwsJ
CAcDAgEGFQgCCQoLBBYCAwECHgECF4ACGQEFCQ7PdZkWIQQ9fI056MTfdxWD0/Co
oJH9NGABygUCY9B0nl0UgAAAAAAQAERwcm9vZkBhcmlhZG5lLmlkaHR0cHM6Ly9n
aXN0LmdpdGh1Yi5jb20vc2luZ2xlcmlkZXIvYzVlNjUwYzVhNzM0ZjFjNGQ2YTU4
MmIwZmFmYWI4NjijFIAAAAAAEACKcHJvb2ZAYXJpYWRuZS5pZG1hdHJpeDp1L0Bz
aW5nbGVyaWRlcjptYXRyaXgub3JnP29yZy5rZXlveGlkZS5yPSFkQmZRWnhDb0dW
bVNUdWpmaXY6bWF0cml4Lm9yZyZvcmcua2V5b3hpZGUuZT0kMFY3dzFmNl9LZTVa
Sk11MnF5TXV1QVY1UmZlWnVQSkNjczJxYmpLMXdJdwAKCRCooJH9NGAByqvhEADG
ZDGHWe9Ga8D4EPdHZV3EErZOE1FznNMfd0yPVJwDaL2QKrGJfiCbld7WHHlkJBdu
12642L1F83Iw9R8PnVFnDTG2VBzUtdxXD+ogKqxqiGRfO9ANZHX0bQ++h06wkk/E
Q1dzoAv9gnc3tVKtqjHgSScIDT2QbSUypuK70tqLyZWv+hjpv6xlJYz/cGwbCSHC
11I2pCfRxMAKj/gY6jdkWbYd9/Ck3R0ShPy9E3yiKfmCrGxnfnTVH5nnS3WDaOnc
8eqN/DZJkixF/Ud8j2RqyCQByDYRLzVsJvKcXFWPWz4UDd2xbaQ3DqFHER2fyTlj
V7Vzf/fnMi23KkpnRB6J2lrFCIZzOQZ3moig67doazkZzLwEAow3rfza1G7xDULI
hpw6rn/BY7Mi9YdItl/wTx2Xb67WfCIWlEplpO+mm3ZCLxQgN//mi8xSggN2QLmm
9yjwEgrG4pFivyVldDwx3GrVteDi9sG9e3DZahVK6clCYwT0uT6IigF2WJUhQY9W
IPXDGIyDKXBP7pcdIwEnYXryyluG52XENU3p4lz9ECRn4y1abOsxdAMsjDLZTzU2
2/cNjE3C2ETFEE+ZbMle8R/mOzUGPxWOK+9jh7Wq5Np1pdKOW5H0NEhlJu1f7Ktu
gpZmAvEG8uwUiJFlGmTV/VYCCTdvogSSeegKyEi+6IkCWQQTAQgAQwIbAwcLCQgH
AwIBBhUIAgkKCwQWAgMBAh4BAheAAhkBFiEEPXyNOejE33cVg9PwqKCR/TRgAcoF
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
PokDlwQTAQgBgQIbAwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAUJDs91mRYhBD18
jTnoxN93FYPT8Kigkf00YAHKBQJj0ITbRRSAAAAAABAALHByb29mQGFyaWFkbmUu
aWRodHRwczovL2NvZGViZXJnLm9yZy9zaW5nbGVyaWRlci9naXRlYV9wcm9vZp4U
gAAAAAAQAIVwcm9vZkBhcmlhZG5lLmlkbWF0cml4OnUvQHNoYW5lOmRpc3RydXN0
LmNvP29yZy5rZXlveGlkZS5yPSFkQmZRWnhDb0dWbVNUdWpmaXY6bWF0cml4Lm9y
ZyZvcmcua2V5b3hpZGUuZT0kblMtVnF2S3owY2Y4VWREX3AyejFwVnRrVFFwNXUy
SXhmRzZrOFBCZ2JvSV0UgAAAAAAQAERwcm9vZkBhcmlhZG5lLmlkaHR0cHM6Ly9n
aXN0LmdpdGh1Yi5jb20vc2luZ2xlcmlkZXIvYzVlNjUwYzVhNzM0ZjFjNGQ2YTU4
MmIwZmFmYWI4NjgACgkQqKCR/TRgAcpE3Q/8CZ36kXGZ54z8MXWSq5joN4pII8nN
38MpZN4QSB/lzMrdhrkGb8WD+wzOaff5Bt4a7u2l8Imx36f/CtbsEk/ig8J2bpsG
Cbvnon2zPo8aKFtOV35kfEHsqvCvy6q9fPpEF0MW37pdKsANVjusAvaT8yiFXsW3
8beaE1naWX4Bx0/kb7ERIIyHLZW9sS6tdCHM9fHmujeMItwUPtjMRGyHvMXTXYAQ
mkovWEUKf1tVc06KNzHx3LOcAowt3R8/YwtRxCMNU5oTFwfi9uxR1rsqb5urjwbI
N3uD40zfXP9UWz+GA0USHYymtoR3+kB7sZXLDI1u42wJcVVjEfK5m2Rg8hoKseOz
uOtBttVP7zcTfRDj2Y59G+dYHPzScwmvA/8JHy2Mdg8vcWwHazypHgA+E2R1Fgmp
uz6zLotGife61jy/x7g2y20UWcbogUCLpZDWW5tgzbpb0+jZQ0LRLNNxz3VV9apc
DVAfPjE03e9+xMgtUHSiT8MBGjJ5OWz6mVt7j/LAxL3LVPkbCYASjZAfVecXppdm
MvJ77RCApRB3lMbaOF1WW8DYIgDLm+8Drz3wT8xpbPxCFdvTH4UQLO8nIB9UYYaD
Bp3/YLLRpG4nJcm2CywDot2COq/MP8xYnHgM2frk759Z3gdl5F1IEBFE2NcsEUTa
Gi+SGZYCwcfxi1eJA1EEEwEIATsCGwMFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AF
CQ7PdZkWIQQ9fI056MTfdxWD0/CooJH9NGABygUCY9B0nl0UgAAAAAAQAERwcm9v
ZkBhcmlhZG5lLmlkaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vc2luZ2xlcmlkZXIv
YzVlNjUwYzVhNzM0ZjFjNGQ2YTU4MmIwZmFmYWI4NjieFIAAAAAAEACFcHJvb2ZA
YXJpYWRuZS5pZG1hdHJpeDp1L0BzaGFuZTpkaXN0cnVzdC5jbz9vcmcua2V5b3hp
ZGUucj0hZEJmUVp4Q29HVm1TVHVqZml2Om1hdHJpeC5vcmcmb3JnLmtleW94aWRl
LmU9JG5TLVZxdkt6MGNmOFVkRF9wMnoxcFZ0a1RRcDV1Mkl4Zkc2azhQQmdib0kA
CgkQqKCR/TRgAcoa+A/+P7uaM0Yna66tHAhd4Y7myXXGEpR7W+jgG0UX5AgduoV5
sS2E5mSXtUROgsaNUqrHZjq4L30Yk+tEDD/5G7gppg27Qtanl+tfArd6NCHFOcIf
O61tUcS/tl4EmZtWRCUWjriAI21cwzq/0dxbCImEYxX7kCC9ZvSStAlRUeK8HkkO
tBUYOU9GzDQyt7ZCCfGZe5gJejqqET8I6K1/wn5ys6vCL16vsrnDSwRH0BVUqcy7
daY+pzhtKkkWTIm2GTs2Wqpykeo90ILfVx3VTYRXLXvuBAWhzFnldw1pq5Aqpo2p
dNPjw+2eAkGrCgelivrAYTEoJUxjA/4sxDhMfk/lRWXjt0+e32/mwNB/9e9R2ms0
C8cq2J8rjkfYYu0YtDPth+K9pJEI7ZV/Yf/v7R4CvToLDKzpeucLJsn9MPmIkYQj
wc2iED6NLJsYBYcgir057q8CZrfEUarIEaC4Kus9wfhxk0GLM7+Jzs8vP/qkwcoE
ur2vdj9h8nTgdzFBAjkE6a3AHxWls/OQ9Lpbmp4NTofsvwriAOPHVpUVi0QWuaaa
VAF+eclu1nvnyNAa8i3w87MISXkEGCc2ErZeKT1kedNmJ5GBw5kPdlgj+dh5m8Q0
bqMo4mJr2cVVHPU9pM6CsXha2D1MRYrWrazOyB0lAkLG5g/P9UumzD0RGqXQYPGJ
AlQEEwEIAD4CGwMFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AWIQQ9fI056MTfdxWD
0/CooJH9NGABygUCY8nIdAUJDs91mQAKCRCooJH9NGABymh5EACbE2DFTrW69+pK
tL/L+ufXnwP2L7rGr6XsPb4yTv4oPVHXKl6E+xRYYQEHHIhB126cT/vqTkRSvJD2
6EpgRL9gT8LwN+woGcal4f/O+uw/gletCA0wUg2x1ewlx93QPRKkjBJ7LjBOWBam
vLMxhNCXYy03jZVaZcNQpWz7tgJOpaajT9+uxGoms/YhwJY7chIQCjuhjIH23XDe
qPSlq8e0Tl4He35QaOACP7PxhZc88ZC65OzTOkhiJCRdkPOiSk33CgRgg3MookXO
gHyU8/wUQH4/uuw/0NPgjc9paeQ9ytjiuAUn6yokuWNyrA4VTz7l4yICvtI6fdhY
c411TfcNgBEKgQKrZi39qBxX4UyiWnvwlTTCBfxzeKsgRe6j/OuPdGKAfyh1J7I9
BBVyGv+6ajOElP4/SVbvLD+7SIjbRsFUh4921getL1FjeFkdHalNsPzwuGpb3n+p
HshHsD1oz4dX/Jrsi+dVCe0YCCVR92bAyKqbeEEDdUuivFwWVj/FRzcpxAIc/qOP
M017Trsoi2n7LNlH7J5G3TABNBvo4C0GLIULX5AcafuaEvStigJriT3JE4CeEc37
Po9l2X2RHBsoAw8PvkaR8Ywe8CLtoK6I/7zQFQi4zz48kAUf1PwlK2V+PV0ZnpZk
KgdFuXmZHLiKYv4nrv/GCzn6KgQa64kCVAQTAQgAPhYhBD18jTnoxN93FYPT8Kig
kf00YAHKBQJjycT5AhsDBQkJvdPUBQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAAAoJ
EKigkf00YAHKy/wQALobF8pMQTN/lSRinyzfXyzRRgXqT733L5i0/vJPI883x+1y
JgxkroQIYaPjS51vG1es4d8dNQ51OFJTLEkNka/yQLUEmXY/deSDziIBl9jbyq7R
L5FnSnl0KD1E/zSfdmsq0WNY1pag5k0d2HW8gnv/9y666wSthsr28jNxKbHEO7+H
lIus71CZXdW1+rcXq12ATmpYV56ukMvyqnB8VHGrj01SDzWc6tHyBKRH+bOKAzTN
uoDWu0lNLoVQlwG9zGgIgZYSUNehcsHe7q2XVfC4xhJ7WKzUucAXs9IeiZDMyhp9
vgF1PcBLpGhoKU764z7ExxvuoV6JkdbojpovtHXnnRyYkhht/U/N4hCxGB/P584p
saJirQGqDPQUPVCJDcPUE/O56OHy01fP5DrbOPFMZq4Sll1m5WJAh3P4MdhJ/u71
lF47Fsrl8TOlj0YQhH3UL4U5GBTmAjn/oGXm98TLVcciu9Jh5qagF8n9XvjdUkrA
1ibpwwqvQjqtjGXsvTK410YRHhNrP7Dgk3n9PSJfOAbuCbt5HS4b6ZaeoT+DuzPE
YbpNSkmGHAmL0u5HSGoElp5w39OoztEjJDdS1QFd8Xu8B2I09qqd0374aY+l59YB
ffzSoqIfML4pXm7QtUSoDuGpSBPwF7Bt+/73LiWoajfblT/adSVLWeoIkX4/uQEN
BFmPTDIBCACTnLnc2aKaxWdgIfS56OfQZ3+kAZjT+eheFroqlUeVQNCbomOYbY5q
V29wz7c7u5wC/lpVk3+lsw0++3r48M+oUWvRTBWsGSPKxZXLaN2BQMIQZNJG3j1N
XDY4L1zL3gGN5az1Le7PjU8ZGbffZ1/CNVGk3pYaCthmjgNQccUkBx3X22Ngz7hU
gOzfsk+nexn0Cojv+DxJA2QDg4wdsvH1Pt/wRitEUdRi3RkKKZTQoO+Hvp5TZDSh
Cxict1uBFaRbOXxnUizORgVD/lc1gTWau2WWZhLCPoF21bpLELCKU6NOfYKQlGNd
A3/bJC7tj6qRP64QtW9CH7j0s/baibm7ABEBAAGJAjwEGAEIACYCGyAWIQQ9fI05
6MTfdxWD0/CooJH9NGABygUCY8nI8AUJDfzjvQAKCRCooJH9NGABylJRD/0c76GS
svUpNK93saTUtk/28mccTUtgN1saqDJmRtEdLG9MquL/SHK+i4UsikedR7Go5RJr
n4UetFwaWA5wWawyYCQI+sMx4IEKdQ6ww9s6ECAy221QPKWPOaE/kXyc9+oVXLso
ENTCylbR5Ao6rNWe2iPSxZMuwdtmt3fS0urKG75m2yEM9WX64icHXAfQ+sw43cel
EEflDRoOcEe2OlfA73GYXbdGtnQyT2nA+x8W5EwrW3PWUpjZEl7VT2Gb23xBiRf1
OVtRDdzLz9lWDZbTiiDDWQ3yowGWvyHGIzlz/l73HbMlnnu6bqNb3ih+S6EnGTK8
AFifIoZWZvnqckfw3C0fkAMyUC6vs7VEz2tbyJ5Bge0kzDX6sEuU6iaxyRFEavw4
nUsap4yj1v8aCBV9idBpvzsa+JlU8AvyLA6G1DAXP3Gi4dDoYGhcuCzOgNlMtyBZ
bprBVurT9MyjsriZdGfxGGCM8RUl0BtB037xwJaZC6V3ev0Qkj7vLjlf7Hz8Lk4d
Agcg3Vl2PEax92SqjMCcMAguoe0MFjGotULr7KeAiO2s7RjUywAi4NGdA+BIsg8U
TU+MEhVsoK0edMl4GA/k5/LYEi0SbDTndEzFx8H0BnxmQcRGfQBsKK8nZU+N7KZI
GeeoQ23tws6O4Y+opz0Voeg3QFFxM2uxHd0hHbkBDQRYvLrGAQgAsXnfvqJowrLh
8RH3ateObOnjJobEt/LcS4UnALYUj2grY3IEC5082qJmYmA3hrmxs81+6OK1MArj
cqi6KnRqKrdIOszQzbH2oGwPnPI0bxaygef7pprOn7iBvS5Bsl4Whidbc/Pk+Ykr
rLmg8BmLqIm+r8B1Mz2ymk9MRYjvGXhHpb6egvjReXAN5HKqcAMHMeeMcvesoi9U
JAsMFxz3NQfW49Jei3BOeT7GhJEGBM35CHTfcaegSzAn5/z3hdBLGtHh0fJMgIcp
XuWnvF50ney4QVHwpikUhEFNALb2Qz5Neste1r/3HzbPEb35MUyl5HJ7GA1SHQnI
h5ajLw/7rwARAQABiQI2BCgBCAAJBQJZj7vfAh0DACEJEKigkf00YAHKFiEEPXyN
OejE33cVg9PwqKCR/TRgAcpEHA//cffEoPopaNL2Ep9lRX6lKUuOHLjIF/Oib+OC
DMiV3ZAQxFJn63dg3vu768gIJfia8uKIYlQvNZgitIQFlOpO8jPInuTFWnuVTa0/
XUa0K+qNT8Dc/pjAXMEmpqhoZLw+KiM6EFKrvTI2BTB7jVlWhd/EqrwCI8Tesg+e
s6PZHIl+gk7DpOeW1Hn7K6qGKThASQNJTkj2gRqyx3Q3Ml8f3t8DrWeZtt0SI5FH
Nfbmivo2smh/4GMJ169EIm9nzOyPfMUT+PCIZCbIBai8byQ0/hqLK0PCq3UO6y6A
cqzfLd0kta6ZdZqcCjyttQQ5dWzmcYoH7Su2/7fudXrSOcQLfdcpt/J1nibM0TA9
a5BPx4N1vu6+AkR9O8ZGCemok3EOH71bfWtz6lkWzDAxkD4ehNaSy6J54dFBs9IX
wbAHYzi7CDyiMuKjpJK1zDNkbpT0fv4M/Vf8OV7cjioVszZ91edvCX8GfMkWuPnN
7YExnHSInA42ygiRnnWbddfvWi0o0Qo01QQ0Rh6CpqU85AS4+ldOWthIFiGsw20M
/DQ2mRrDFyw0nuWzf32SmyW+xcuUmVWut/zMDKZOsgpKEOzfBpgR6ecNgHiYARCQ
/jvAqWMkN+nspisnJuE2xcr8jRYLb3OKfvTc+IiCfWOJVJiUIZ67Kf3qBaxYkGQg
HynQR86JAjwEGAEIACYCGyAWIQQ9fI056MTfdxWD0/CooJH9NGABygUCWL3elQUJ
A8OKzwAKCRCooJH9NGAByrSnEADSNU2UB3VEyr396G2BW9PAaILCUfM8PBaCsiyw
6rO0a179Me+HO2GDvP/d2b0fuJu7+rTeTIjM7180tJi3Ajqj2hZ/k0HXCXac3jCb
cqpBSSAmDW1LDtwQs9bBB++i5M9ym2NSyMpRJx1MB/Peu8OWEGOqlcARhtrirHQy
4URfP5W7+c+A8BU/Bb5brGldCEJxti+GhKd+efzG5ZAkgl0xToBR5UUuZO25y7QJ
LabRSsm7MBQN2tDEEIMZ7JKrLIUT/KkYMfuSkFzY57idVyI73Y3QSQyq9Jj2Bru4
GRww7xTkWkVzcU7ByEk+lsBqH2v1bQ8dDqrok35XiLFc8yVaLgPr6k4k5+ZUpq7X
hB3TMpXVOYDYhZbHuHYO466CV8pbkYL/jbcpP4uXyu/coOAvfjemDJQYks9bqpfZ
vg6ANRSYhLg7xUsB75mt30uWXUga9XopXFyvcCFEis6uRZvMqoRvPO6oLI+ado3d
um13gqsL8Txo8JheD3PUfuOrmgSbdry1cK4MjYtmAvZ6mQNInArCkm7fUjLBwvLK
JuBH+iFbgwaCWtqE6tjQ24aZfMqyZxCAyZQ3q2wcAmGYIUlWQURiQ6paIXB0MN3k
d9BCCdzOkqUUVED5YvsKCHcsehisjy9k018cy/5XrdEIo8POMN/XGhja+oUkxp2n
vLMzRrkBDQRZj0vdAQgAtisYPNu4b4Bi4XHWWDS4GOR6DXqqp+e2dOuak2q4IVu5
GR/80PP70WFQTHolcTlqyPLcsZw6KmQcW/J3umUgOJKA6NGg5bwHRmHfC/wp8vcX
eaUTeOLHUXNauQFDX5bdvc1b6G6vuQAnuchLIDakYn4wgbpOzi2GkN7p0a+RRrHo
OLg6tfVLm5ct+XPf3P1sZX1BkMxFvB98Fk34PMriGvmLsHHJ1ABSFBh6whQDmbv6
d1ozk4tR2gZNUxPKhuRule8poiMSycw7vUHbQvK5crDmiZ3zKEGnWOa5bIWWP5Tv
Xb8MIq2ltq3KTUMvCwZ+BxoC6DdH9Xjx8SfGTT4bwQARAQABiQNbBBgBCAAmAhsC
FiEEPXyNOejE33cVg9PwqKCR/TRgAcoFAmPJyO8FCQ385BIBKQkQqKCR/TRgAcrA
XSAEGQEIAAYFAlmPS90ACgkQhoBXCLM9LyIBtggAlAaxZ0etU+bsMRUkaDKzPdQH
5XH/PSwryQXrmdf5jHHZj5/8Nq+FdBof0zTwynLzt+X+eRZmjg+ZBumm+d0tYIY8
7oNaZepYKzQfReCI6iPxhNBm0PpDoV8C1depnZrUH5r5UBdKw7t6/SXsyM0l8KNg
l4nTll+W1lFFvtJ9PeHs1k3DUBuFiKpovevXTpHSV4t3Yd8V70Q3IXu/1XoKU92s
mF1yFroVmZkjkpo8U9+1v44yTHksHdn59wgvejgo64o//Cv/D32gvUWyTbsw87Pe
9fjjEuQShlqCnh7U/NojEU6sFp0rAcD/2yGFIHeMD9s0ta7RBnTM+2wwFZJO9Reo
EACmJLKoDgdBRSuy64yOUQEBRSj+TmR5nkp14OH7sF69dTKtO+vesNMgXflDxkz1
0ZjD/zyjTGXwHCHI+riffRd04ZsGOlzzSi5buLX1r+oesarKNEs68vFeLIMWTW4P
Y3+vD1WSzpjvpJdlE85AhNT7ZerlTzafEJE/1aukqz3P+SP1Wz/ynyyqRgHL3Pmi
HZiDV7A0aj0YZFap48T4ML+14tQw5vO5AYrZU38aWvljhuT/4sX8++EALE97us72
RzgBLFSidXyNIjdKoByDDbULc39G4NDf8cGG9qRXL8VAuQnGTH3EmoBp1s/An7mt
wt6YzWS1Hufl0KL+TpmBiOmNOwGqrvQbMIQ7tdjQJizhAooHBsOk2RIZGeHP3N5Q
p9UIq+zOLr8+U5YTDHTaTC478hCLEUfhyuvf2oQoze9PxOpWErVxocC5pKrXd+xS
vtGZTLZRZ1udsSGnYFrfmll3gVNL+Xa23FMj2jOdjmynrIeLFOs/S17iJXmdeXwE
CE4YkHPUjhm2taFFFKMD8DROfgl/Hb8TNOD1wzJJIjVw21YiWkWatqNauneQF1N/
PvnGkqYcrdnpecvaKdkuhPBYjXRtPSGYId80dbHm5iPDew7BiS+rLDbU3HcTGJHl
Pa1lDc6Y9hHF8QN6Q0jo1jhRA53BTFQyH0HuiiTtmykSLrkBDQRYvLp8AQgAu9zX
/ewUje1gU0Fox0wUpAACA3MeY0NnXjpVwN6VUy6IXl26G2NdtbD7TZGledjJRw7Y
CK0tVsowtL2L5NXS9+drl8/MVN95RHTRbBqZn5zXfofJH66GyskU3iBSdPk390vr
KTQayHpk/0G3wCtPuEv6CVVcd/POmV67Z9+aQRKVJlbB3VNhrV2vHlR2Z3qJj5xC
DGahnOW4rb+X2xNx665uv+qder40LUaVFIuPlbLJtfh8Js7cSIkeEcKLiDqem6MP
at1UahnzaERqVJAMrPm/Y9EbLWF2ELQtFtP0SFvwKu07sA8q962bV8fcrsctHgJa
HTiNK8hKnyU53D2DeQARAQABiQI2BCgBCAAJBQJZj7u6Ah0DACEJEKigkf00YAHK
FiEEPXyNOejE33cVg9PwqKCR/TRgAcqIYRAA2uM4dDyMCZXo9hpMeexn0VnyT0AJ
MTrsCNoupCpCwX9XX+D/SnZVkEFToc4bVzlX2euDj0FnFCbywF15c2/DGzbZaOrO
OTkYCGtde8SKhuGWhjIiNquI3CLwizeFTOYSEQKga6h4ZCtH9g94JDjjTAu9p1E5
tuo2uFL+MQkED7lQvrELSqr5jUQ00OsEnTUgsLNgG5RrQ2j9Zk3TcFyQC3nVQrgZ
Gypu8GFDXU8Hxk/3x7s102vda3+NESgAr6O3YUtprqEeOKwuXLib/spMNk6MWRsk
9/vQ0vbTvZjDgKNL6ycIWlx0gYJjmjFaatv6bfYR7xloIlhJ8mvOyBorBLO0X9TD
8CUamcx4hBimqMafFin0zFH0tKFcnZPcVjVJ9bWqDjKlp7JZUHVA0zLy4A/xQcqk
dYHNrWLkM2HeTV80TOzrMMxWuMMif8MoL6z10NNecQyL9Q0WjNqbAyPRoDuhc1rb
gbo4vTddoL9Jj/5cabDEj4GRxF3pdE0MC21aotRGBRXAtFDjdZ7VREitgCc6+FI2
pByJbTS6pr/n/4d8VcjUHa7ATQlcNOM4pxR71621jxMQwH829GRczsnybmK+KAR9
IgCJH/UbbSP3UiIDQe9ojEKeIpNQ9zVREfApoU+2G5VL69f5XfZaLJEZrPqQuozr
QX57mHWyOUitU16JA1sEGAEIACYCGwIWIQQ9fI056MTfdxWD0/CooJH9NGABygUC
WL3eUAUJA8OK1AEpCRCooJH9NGABysBdIAQZAQgABgUCWLy6fAAKCRDiCVSRIQ46
zbS9CACh3+WVuqnpfyJQ/lweRN22u6xWzjNy1/kCw5D9ok0LfJ0Jr1ycAdLeJdQ7
kkzpYOgKC6d+0vqlWPO35QpkjBbJbWn+X9Ur0E3MpERHmm8/xnmyrdjV0//wSov4
HOAsLjGaEo86y8BbW7JCI308jkdscXs6qMMetYHkPeCQBTC5LzAZc6TjkPgsy3Qs
TecDh0NYeypFW9sr2EfuTsx3joT4NR9ANTAkvpakZCLTEGx1wrz1z6VZO+QAISM3
4HJjU5o+HnN+ughuyWofSV/L+SgsOfHhFKCoDJM6RPD09iJGGjpubvOcfulG/xA6
PlKzMMqTeLOdSJrLq8xCsGnnMB0n+p8P/3l+aNgUaG4lwdfGjiHcDi/ys53AjWIF
8PoReD0ssaY3eBoVezMygsKLVP9n8S8i6bXEj8s5z0UVvEWVG+fjePn6G/J4pE+1
gV5J0Qpss/52+xJKKcyE7RG1ZFdDK7o8fCbHke63g80zDhdox4dfhD/WApykO7l/
1PGSI6n4a53FaKXFIsq9WUu2g8cY8lZTg8RXpg0q0YTICL0DMXvX9gxmC+5pgqS5
cUrBd+iAn9e1Y0RbXSaY+9XNG0W9oC/V6dx0NqBHuKnqNR8tFda18ZX6+KTTPyez
txvWUueI4/9X5QEnRr9FH2he29L5KvqqGsddomeYUYQEHh2/iveY02tnHHTcwmhW
jlvEa8PtCqQqNmykTeqt0t1aaBanZRnkhqBpc4nYQWxmKxjuAfkmewPQUGajAi9A
SoQ9Yq/4LAwTpHbSrU0GzyhD9Wo+gxbVHdZMdOfgt9sffWmlwFIsp/FkH0cDQf7/
Qev5zvLnTlism5SaQq24hMaEDovJc16GGv849edWrtHzvsFIhlZreNsKNUU66avm
sojja9r+/LsVNqWtf9WDBMLTuTS5OoVVTbxXEebY1lxvFKzqGsncPV8PL9wscVp/
w/ShcO3JpFjRKUoouXCYjOH1FLar7pSsHwbnRKCg8fUJJD7OF2FSx3S0eSjgPGh3
bMb/iF3XhEWmuQENBFmPTAIBCADMDSWLRARpeDLFu2BL/JWEw+fit3cfDOe9IWCR
uQtI/pPlWT9VP+6qp1pRBQMfsTR/0OeC1YWfyZc9ndRJRmMrklSGMgvJ8dojJiJE
VKxoANbcF/laxxtRSag9wchWKWG1MGq6BFRrZETlvvTQeV9gCBZi0zXJCcguS7Ts
6jdFSSjOcYCNPqQYFCBhaF88XjBLUdr5jXvY25mJqow9BSqk2U1B/jTVSNRablOD
xhsnphP3MQfjvdry2f3kL2IHbjtZDNaUGuoC72IzHZ7JA15M8w/Qv13Qc+q1I50n
TkVYUr0d4Oe9YL4fi+0aIA/HSzyhCX2mSI+sAJg0Jjp/eA47ABEBAAGJAjwEGAEI
ACYCGwwWIQQ9fI056MTfdxWD0/CooJH9NGABygUCY8nI7wUJDfzj7QAKCRCooJH9
NGABymNNEADxdfe71zZZujhxQXQaJD4N21My9MZNz2L9TZaHR7/MGd8o4aZN0iV2
qIqkULrE7S6U/YrQLLY6FRXK/Yj0TUqb986urXtTjSdo9GSLrrgVe4JbKrs6G8WU
Z4MaQp7aqN6yoBuuogLyZwJKM09b9nVucLugFa0eHFLzsFXgBAM1sH5g0mJuUNEs
dH8Zy/IrVTafmNd9sowkosBO/5RDXxwEwkCe53YtFmJlclCJCV+SSrPKdBTVTG3X
BKiVDE1097S2u8aZg4RsvBERqLPz7DiMd5Q84kqtzzckyWS/qNWQ08uHl0bbNUPO
Ai5+kZVWGlv8fG1AqK8musRkTPZziswhsrknSav0psHun59A9epY8ctiHf6szSw/
wWGmdWNKdAWu2sROe07b/KAstNzuB/oyXz8ubFIEXSSj4rQWcxXblbRUfieZF7lS
uKane1oGCFaX1xcMm+/K9QVZ5f2cfcuuxmTCue+DY9X6JGglQ1Yu1VCYNK7ZbFI2
77P9DEGLuA6tXpYu3kf7jF5zgRwNY9fVWpDWggTWJaU3b1J6NB2+deM+b4WZLiMd
xgolN6KmSY0nhj1nK+m1JNiAcmFQlvJebm6nIsv1J13dQFhkpP3HvkRUKyzQNExm
xXjNyhsL9Q4HWY4OtB+eog/hIMO79+Mld9iUV0G2gRulsY9RPohTorkBDQRYvLqi
AQgA0Dy+a5IvZaPncHAeFcOSA9ouGThM8vrhiRgpetLt17lKd1XF99OjncQczoAb
lDKIR/uU+FKcvvjuTG0hSPh1GRKvCNsLmkgpJmN5V7rr3B566xfd5jZLww+8E91j
hrbyeXZFy2s184ua9Ipx7v5K/ERiH0qpP8xy6S26lkdFfmTxx80Hp3ts9ecoVARp
YXTTomKMqw22stteH2gCke3t/pO7+y4yOym3pUnRJIM5BAKGaffZV+XW+Xo/kJiy
35jWxZ90vPVsdFbYEnuU2ZhvA4oCf5X9RN+XVszFGLPcJUi0qTkZWIDRXG8IXIP3
KNGXAA5kMY0ac/P8siuqgIqOjQARAQABiQI2BCgBCAAJBQJZj7vTAh0DACEJEKig
kf00YAHKFiEEPXyNOejE33cVg9PwqKCR/TRgAcqNFhAAhOrHZs4nCbDWI9QkC+jg
OzSsLv78sPiXLCzKpPBaJXTMmH8UQO66CjGJ+KXMoE60t/a9ISPCHJTdo+p24IxR
XaNmTWb+SQj4ReY79xsBl9ANityQ3lRFZzX1Ft4Y1SdxQMMAs7ShOKH4JA1rt22g
/X4XcDzk1RnLfpVSM50ofdqGeN4M9W4oBAYh63V+imTVBwI67oFdTe00A7M2Rc3T
yzbB3PyqXMPpr8uSM3Jq+KakkCyd91x6xdLk6Pgqgnr9+egDiL/4CTwnr7kkXKNO
J9Cg+/zsZU/dR0xj+WTSa7kHF1Kt5vc+dv39kH9zB7dqn+8BkXEoP3TpAs1sVOjz
4mRHpRHHeloEKnDrzF3GDwgUvIUUmNfagly76QLYnkrHXMZE+9ZQTK5RImhJdhZj
PomdOZ2dPMUIy6oCLLH1VC7SAXm6j6OH9Xaeb/skYDos9t29BM6Sg6J36xgWj7BB
6nZH1TAfoIveg5vLAwRkwRN6yIVcdRVIeNlhW2ebCiQhmtbErWhO5BIvDzP1CDMR
rR3OG2nsUMA3LTfIUC0kDfxNCHr/pW3+CrL26mJBrU4TTSXt7TgmXvPvQ8TEKyGB
+YkrzC4hsqw89FMOawxofDsT/UdzgIo1DeioTZylzOO74wJS0Pc2jFLbiUEy0FGp
dl8N8BxAJQnv9TpHPQJtx/iJAjwEGAEIACYCGwwWIQQ9fI056MTfdxWD0/CooJH9
NGABygUCWL3edwUJA8OK1QAKCRCooJH9NGAByjW1D/9j6+cTGWyo248xCqBRJGgP
Aqfp5iVP5mzPl4WZquLKJYdvqsOTC822zCkCgxAp7es6mEkx+NkqcLz4wsixu9U7
NvRJXaNftvcIEDMW7LxopBi3aBJuQFheWQFZddm3uUhP65B93CnkdGmJF4nb9gEL
UDERVyAOISGYjRFXTYnYwpsw3uHm03sX6ib1O/3luMk9KTD6Vfu/NknwnaXrkbV7
PkyiAge/zBqw2JYtdyQZK/yrV8Labh9vgKRxMOfUX/fYJD6WPKW2KqKgQRriAHrV
e1PW7sYdgR1NHM4JgpMn/3pCaDvDhYGtUCpWLLESK7GqEr96V6UABXAERBYRZ9L3
MBP5QzLSw9WwbJUEGZ4IxONR/1rTyFYXZgu4g8KDLgaRw2yZidHsKudDMfXthZfz
bu42l733+iG4om6U59t2TjL+ZVNrrfsagoGQYd11r/YwoyD8oJeZaVTvzL96LdPo
pbpc+CRQ0dQBDqzubE0kqyamwGC1QQuJ8R3SF9qYcBcG0w9Wr3MSDTLVNGG3g1p4
CLcgkecOuu/LbDPf3OFq7z8vBiuVKozQcxzs7ZdPORValOMNPXiIg2Eti9C9psgM
OMLH4Vwg3X4nmepRrsmymoRZfJsitp2wvk1xkDTx7gvDnmelEO+tBeTUjjCcmfOS
+qzLxYk3+O4exxfOyi1Gv7kCDQRYvLqLARAAkv+lPoGVWZsEZ67IpeiDoI5iT3L7
I4TAk/0unFU/vu527MfKDhAEOEmVom1VKAlZQAzAlx+tgo4r18mBsZxi56h+RAAK
MmCr/ODqpjvQrzmhfetTt14K/DHqNHhGWFjs0w9UK+3IgyXuTHia9XY7esa5GPmf
YPge+aPw5Q2A3rmi/fjIe8pYZkV4dtQ43Oa5fFisG2AUHwApkpD+Ja36K0D3pRTN
xvPXMEp57hXS0J/50Kt7zOc3GzGD6HmQy4E+CDUr4z730wWE6mevGAON/QBSzxmo
JyhCeei2kPsaduJazC6ucMZsVKKXz5Ut34c+ghmfIACrQiAC86bluw/RQrstO33A
GsGWWzx1NcJat5hqOR3lBAAg3ei4PNLwfecY8D5IViFUSa40lr/TzbI9NR9F1gMn
8JG6ES1wSvEBOvvy87PMh4Q/fBROWKWj8SBy/Rg8DD49sOSnDFMF9ilCZllitTH6
y9+asU0dm9/P+JNnAKBguBf4sUuVsrd2IZhXWbTQEdvLsJ3YKdeSzk5AjHgZITJ8
hXOiXa0LOxMmR9ztLbmkiAPhIBJc6yGi6Tmi5zOUH2wJSCtHCNN7eqXzVmLESjYn
O6JRGsMFAov2R/S/2lZft5qp+jReG+mQBFSHZHDqHOQoIqvTqWB7IpAqNRrkAHvM
edApeEqFzd4+RtsAEQEAAYkCNgQoAQgACQUCWY+79gIdAwAhCRCooJH9NGAByhYh
BD18jTnoxN93FYPT8Kigkf00YAHKffgP/iJHlhf7PGCPWK9DWBdFZCIuISPv2C9C
RCLc2rLvZNwfAYF5pymIUYCjYva464AfFY19JiKvYoT1FqRWJsoWOIpqDG/CMY0y
Ktp3EXiv200HxWeeEBTOnqDl3FVAviWSiLxjI6rJvOdoQ9aUzc/459/04XuZlgKR
kLUcxOx1lsINLWdRMuPlzGSlcfP0JG9i4tRqxZWj0lvA3jKVrjInX8lYZg5BN8uf
WNtr/JeCIV0UnejWJvyDuGC8LIfSKkmIPKtvG15cWNGgAwtIHwYtl/A2FSTDQ4iU
gNKMnHoHRl71Z4NfS0Nt0t1AGFUX6RpHfoP7nm9s6sSaaJfn9yI/fWKAgWteRy27
A3nrkcL+pKt6vGIuNqRbJYHckVS2C9t1t6ANQUHef96Rc/HPlNZliiJ+BgXn83P/
msQXxD7WOzxj3RP0pd6N0Hq/NTK/GKeTJM4CXJ43Nqc4H1XzUWAx3HI/810aWRee
R+Ae1PkjWLNGU/hVkfSw9EaF9ujuntFtCij98J+0AyHU0dynUAZ5zmTlZ58fr+IU
iS3RKfNMdFzjuRZT2WP8F9cu1gFcW7MOZmeVZLHY8Y3XQdeQUj7YK9af0ogeOMMn
Fe3O3NaZHPXUJpOlj5N1GAxKAlD0w7Ipgt88rYLJu+CAB+3Txc/L2JdnoBDbCAFc
XirwdSPTjhpsiQI8BBgBCAAmAhsMFiEEPXyNOejE33cVg9PwqKCR/TRgAcoFAli9
3oMFCQPDivgACgkQqKCR/TRgAcpgog//Xy4Zb/OLrpxAKyq03YPDX/ZaE3MpswkX
wcAwh/BsREZS+suR/FkCN0K45zzppN1rxuiyXaHKUoOfJNv3yUf+4uoRbZzOdtDA
WAjghvcPVWkg3L/z1l86nfAZJ6gTCxt20IEwJbqPHxR0cnMlijE+z0cGZOo9qi66
C3T4HnFf8lO3uJDMo7zwx9q+hGXinpe/9DIuBz9rZ6qeAYe63+OZbA/g2rfaNw27
sGe0oiqFCwdBkIBzMI6cGl62BECv4SaVtEgBVUb4LODEjhOncoUvsSGNIP3bFExA
ndDj9PavFzU/U3vRMxsX1jhJxnFXruE/njXLG6MMhnjPLHWTAsMYxBA8vvQTvvQR
sa+KcE+6VFbjSzjsFn6VRymUplrryJUp6cU7gFmSAfea7th6IZ5p+L3+E1+oRYx0
u5B0qNBIZ+rxoWAmNdVPEl9c2z2YWN1ajCuLuR0YUgtu0Sbjfs1lxELVIIRzdhNt
2bwJvKa/KoAQ5sgxRfcG9ETvqRY14OVkFxuOahiQTHXyppDn83jvPGepUAfvumvj
U9bSjiJklcveJ3S21m9IyWcSQdGj58975sXCdGjsq+IhAVfIKRZS+aWsLM128Ofd
JkttTkLDF1h6WNSagBmB8o/UFlO6WrriwsHCAvmGQb3PJRNRZNmDp523UT6ufBLc
RbUmmlio7IG5Ag0EWY9MZAEQAJT0ddUNYO4nrzmXP+hvisrmt2pe2O1TQdkAAlH7
An+DJxFGMhv3HgtnbDinhCL72sx6W/eLe1o9i229SUHCPMAPk7uaKkyTY4TIbuF7
Xr3PDFo0OJH1Rq7f9dA7eYm1oURqPgtZqpJbIZ7CrdC0PhyvmWDwUu0i8O0inMOw
TtOLQP2WyMMK3uIdLAd7loeZkcEaKQyXxQi7rJbn8j2+8xfK0BB1VsAPDWDkXUs0
GTb/ysJqtUC1O9xnK7YmOKF49fujxvWLgmlCWdSfFmmMdhv1pzMVvmIIogSNY034
8DtKwZV6aP/UzVCNgXGp2X8Tzt9Yd6E4NNtDY/RZ0j0vfXy/0Y68onm+MOVYeCag
e6nwgUANGWZGhXHWQL/MwYsl10m624xsDqPahWtppzc16xUt0chYkqq/znQl0dGC
5bQXAwKBCjdPgp2EnGRQl+V30aDz2w8SCEH+QopQeZbwM9WyVYrNbsaA8dOhG2lT
jxzhD2UseV/UPrymlVXrOuPcvSOwYZbuX4ZOPSzkb1PmMNsrdW6LTVROHVKRTVJ+
k0rLSvoSh1nu1WE/jtALUd2rK8zvo35ylmCROQ5PT8+yAlLgQKtFA5bWYmqdku+j
ZmK4tSp6XOVEwQKd0joE0+N3eZJyLG7mPt3FNqUm8XVYVQKndcU0PYYCDRgcBdDq
v1erABEBAAGJBFsEGAEIACYCGwIWIQQ9fI056MTfdxWD0/CooJH9NGABygUCY8nI
8AUJDfzjiwIpCRCooJH9NGABysFdIAQZAQgABgUCWY9MZAAKCRCU1B38bUPOnL1f
D/oDWX6xPlyT1Y/7mO0L3lh31FuYp+TR5hDVRDWm1aaFrEE624IN4MaJ64qm1xnD
vWzyj8W5Yc/NFA+j/axcgam3svjrh2m0cWmlIDO/FAQDnLzoTcTcQyCdAojKxbbj
268NRPEYBulXxVGLDGhjyzJubaZ7vDqi+fdV9TMw3de8ZhLUa7YneBy96HCgL6vx
AoggQ08XQzUcu3vVsMWcyPTOCkS6RsWcUe+SmUGgxzG3+8BWspOs5TsIDzGLbhcL
5ualmZDANLRmu5Zcl9qbeSvHR+dWxjYBzzwvtnrMyA88RCSx3rjyWfI7EtB5Auhx
1Ibg1ObvtSrIhPHKqyne9EQfmj9zHi+NuRrizB1JxXgVBGKqrReTqsOubZKs/OTr
Nc007haI2J8/2hCNbCr2iuXWkqJu3rZ7Pc+HnrDtfqXy7LtjnHs60qHDsI3p+DZC
NWveYnFsfwXV3P5+Nf58txtqaEtlCdLSuVd9CoWz7MKvFojcCjNw0xe16aVOFcSJ
95WHzslpybuAvSUqQdVOOCHtN6zBuzQV9mbniVt16w5D4R2dEVYMSg2+1ULK4EIL
Nf723h7AfBslzEo+jfC2jMjkU6ToKVa7so4eGzfweVZOkdMjlf+WcbLt+HadA/Tl
inr5mcrA/iuHZiY+CUGUhDGhOewawXMaisSvvO4OxyxwOW+bEACMbbWou1rAciXe
l2B+FLBGR1aeMvaN92r72c6yN9ihDxwjS4iIUrd+H8Kd1LAix7CMioWqnAQafOjk
BcxRkllVSEJAAvYwBNFQZDGdCpSPY3k9slXqus5c8MWclHDZXuj8jfxt6S/dB88D
i1vzAlnJAU6E+0mLxqSKAg/D+jMxOjPHHhDH0eUdqrJSA5sYufbRtQ3/vCpNhD+2
0APUE6W73RtDMAwAx+Escs6ogoHWwkVXFkPZDR/kIKjGS43fw6XS9DCcvAkqKsxi
V07ZOu9ZbswTPvROEpfSIXvFgQI5b850VyiB6mv/EIcZB5Jdn9Z+yWwC7cAxym6V
DoOD2XT+c1UYCDrVJBza072RiYhgM3q1Ad3U72PiEodhawooaCUIBkxUAFf93Xhy
judsbE3U1sAQWUVg278wwvj/rhIrjnEODSTqqgB1oaQgPK+x52urwtuqs+6LcsDy
aK/G+2o7L4Kghf545MqrdpQXwoB960+Hy1A32Yyt63qqrp/qh6hJTXQCxZOgTxSP
ucnnPioPXULUchTKbtA+ehtDYRHo1Be4ULMUED3rg8Yi71ekaiTPdQT2/df3QyPS
k2X+DFzvhFooAjFj4rvdyb++IRKDYHD9DFAdo590//9bFTXRsYxg6TxgVl8Wx7Bi
EmSky3H2uuDUK4hHa9Flny7avsqVr7kCDQRZj00LARAAssyA8Ey1gtT7nIi9PclE
v5ErDNvlRjgZojcpNzjjjQ63DNOBBSI1vEcx+cLGthEc5S9nOM/nrEMJaLLwoPMs
yRHaNyhNneCedgnIrn7iqZXPp0Ul7G9nenLpeYmVIc4KLteG0UzdMZi5WVGXijNY
8hqqZLYToQUYnftBqSwJV0XlJ7vjFR0q3nqrYFbMJmj9UXb0zy1tdXp8glltCMXy
qe0VFqwygDREOfmlF82PeXccECcW8NUYdiGzyLoGht6T5JbeHCkS2B8n99Avx5Qb
8svRZuwB52LYzTgPDlS9TCOz3+bFtFV12NB55QUnfuUSLRE1F5ecbqZhMCh3ci2n
Q+/aax4P2fvuucQCRGBdQvgVZSKojF61BHT8MeFZx+tSqQQInGPluVf2CXjHnqpS
PXJYMpz8JIj5mp/UxjTXVz8+2d0NdShx2xQRTj5ZEfUxliy8tnsfq0Xo4U0CZSNv
YWzfuMLolbO6C7q7D+ulRAz0zbl9WkRScK1NSSRy9yPIqZeQeXJ+jTYDfL6lAVM4
zG0skYnKNIfY2guMrcKWTjLRYxHquLdCSGF5Ml44ocu7Fe/7BfBGgfNXUxrZXKbO
nGfoaJnWPJf/eIOUGtv+QQRYdWcQsJKpbIGTyOaxwNU3u7K+lrheJ4lIbkhgWLn5
jQU9Vun5N0Q3kdFtiIC+xxUAEQEAAYkCPAQYAQgAJgIbIBYhBD18jTnoxN93FYPT
8Kigkf00YAHKBQJjycjwBQkN/OLkAAoJEKigkf00YAHKtTsP/2EISV8hLeW44zAf
U5rj5S5lWba/8xhpNkGjBhEP2xlLBmHIrC5SF/2oqRQp7/NIICYI8ElHGgm6nIs0
G/75lcc4xnoLVZMxGcNCrXYhIeXwZd1gU2XgwNjh4DizI7kUFJKvVVjOE93cjxRp
tGPj+Y2d/LWfQR5kIN++8CTHj9CurPt/cvqiep7OvSCwlFpPNJk5LkOp0X8yUYZT
ZnQjHCcrHbmWkR4OWNhBzYfKoix0LEwwOTiwbgOolMg3b6D8sF40SzBTrg4E94fy
yt5TBKqyOxjzeLvHiSOIdEeNcHALWlx2d01IytH5uebJyxHsQfzYshjz1bnrzrcH
pWUDDgDaCUGBtBuiKnnwbtW8L2Dl8YkYjYSKRRX0iNTP5Rt9OTjdSbYxPxtwBzWR
b8JsWGtyAUOuNy1TOypIH/l3gYF6Yb6fNJxirByw2FzQNtw4O5TNwcALxNjwBiep
q9CIAB1N1q4+Z/R7ZZo0xc6pcW0SlrfM6epmeWL7ks5BgmJAEBu4eNMxx4qB57DT
HEuAWj+nP6ASHBhRbRiY2wbnI4hKP5Wc7wcc9RAGmQW/Hov/U6VbOR6kpP1t2k5z
KCjOFCUGUdrhpxUfV06rYRLdDGgH7xi6MmvUXchZs1xojUpKRVLbZHMN7rItaN+x
nCu59nCFH2020ugfWlECoDnRmZtXuQINBFmPTMYBEADPoFtSc466OGgcjbaeIKdd
iClZ5WZMTvLWhHuNtGZocpwb9nT2CZiKlKd8WarIUhyetZP6G8tcSk8I/y/AMps3
rCC8J0djWr+l+V1b2G3PBrZdbCGqYVqCYzbMTj3Qo3j6MxrSbaQo1dNKGaLruzsz
6aPzFkB7v/YcINJRIRbhc6nCkwTat9/tKQkrsGSUMnYPMY9qdguB6ZLaUuN3vAAl
YIWJO71dXviWoiKquADcIXW4iW6s2ZVR7mMzKbltEMEOqePESJeLUmcBVWu8Iuxj
6XdG2g1+KKVLbplFPyR52UYzN0GkdwG7CkPNKdYRarL7QpjjLW7vJHH66mCC3/I1
T5ntCf/w4hMB9v+J9bP9pS0Iq1zW8hQMQe67vHgi86kwsj8kLdCL+v90GThBD0kf
dzYXZuHu54gxRT1mOKVxsPvFNC32C1cctq50+DsAUwREe507J1/4ST0eCwGn5oAV
dOKt/vLYKFicAzi8lckG8Os+XhCVqrw7sA8x2V4PedyD+eNwDkBe67JcKKt609b/
q0QZkcixeAJlO2aC4BASby8Sobi2oat/EVjEphvguoKtFKE/PIE6vqTy/rTz3/ra
UQBF4TPpvGbPMZ6Ip53hocsiVSKl+zCNOT+2M+gx96niqovPDUsASyDLMRc37J3M
ufFieE0dnnKF1nrdwKgbMwARAQABiQI8BBgBCAAmAhsMFiEEPXyNOejE33cVg9Pw
qKCR/TRgAcoFAmPJyPAFCQ384ykACgkQqKCR/TRgAcr7RQ/+LDBEn7XsRjTKrxQO
Jhow0MCstAJ/IT2fT4gl1jpWXqSROrGHtHk71I+K+5H5HzuZKFsq+T2TQEOFglwC
LPFx2FEuP4wQRZtza+UVyS017736blfS2elKGIAvkPm3fNkaVCxzG1//Hnyaf5Mg
MdELploQbyYY1GYSVGLZ0TP/QvF7SO2wOK4qtxQuYeu2wgcbMf40cjapobi8Psgj
fb4bcER+d38n6ZjVQ6kc9t6J6rKu7wO0ik+r9TzP+hRea6GZQC4X54yfHpLiThcb
24fib8z/EYSppQb8g6QD90bgoNfSjjbMhdqhOAo1D2GMykrlWbNTImUu7bFxrXnq
jAPToFgvWwPDqOikG48nBGHGUzCWyzWIgoq17oxXdo73YfZgH7kVKuFJ85UOO6nq
LFWX/z0cHWfUR217JoR5ylGHR5axWKejosMf8g9YOGzFFpYJe+GRdawm/+XBJRkC
zacegwSGXZz8omN8Hri3noB0WeTNn3TDXTZurJJswux4AsljpGTJES9heFQbAbeQ
XD9mQQvBQqW1lftpTls+4pxiCBA059Yx5AEpWdMtMGHZ9IwPwLV+H2uRrmCGvW3H
8Gmd3YU2W06VQdQtU2C8GKGCGjqbdPbu2Ks5B/Zq6Xmfh6OQKp/YRu3kcWZCvqkn
taia+S2aA04d+kAzJFkWhsZubIm5Ag0EWLy6aAEQANa6ECyvk1DekRqijQAke0jN
Z6v7ig6m7catFh+Uw6EzQveZISsYhkbbdoGXWOKIa3nI+L2Kdzw5Ox7A0WblD2A/
nBLfz3j7jBh6xJbTjYfjypcq2L6Mww51wZoDu496bsZiFUOZLYEgYk22dSwcPjQT
yk1vmuHLA6GeQOpk35Cm4KpqFck/c0oLMxcQLaEbaZDNVw/bsRz3Aburtar792/5
VTJZ2hvW3WXBcW1VVIG7gU0i3wPGznCRGnA8p7qH3sKwq6KCblhUwUXjhWC+XQ6G
BLZoTyQTjrd1ZOVOamLlrrB2wJKViEVlsrPkeZwGQ97fJeccdCZqG8xnPd1F9x8N
E7dBcV+GYYVwaDrUkJutHmiLidD1qrrRiFTcMinv9bbWuesR5kJ7mUU8sZrmgSfN
kwkmTMEuTG7b17Q+uKWWDaVS+on81NsuqoenBTEg4mf0NILSR55eUPIwgeyZ+m55
Bz2Fx0LNvK4FgP6T4CtL7vhzSHEL83ayCcwBSkLsKct2xWMKmf/Hf++w5/XpYg/F
1cEntP/Gm2+o8qWOTMi25c9LJr/sui1b40Es+9DQgVbedUTurvWa86YzRmOkThqq
xHEgVhSv0IQ/gd2mktbblbLv/rnwEZIfUmhxGdfIpwZRwaqo+S8T6wQxuSVuMEPH
Qm/Ynga7v29BeJxBsOKVABEBAAGJAjYEKAEIAAkFAlmPu+wCHQMAIQkQqKCR/TRg
AcoWIQQ9fI056MTfdxWD0/CooJH9NGAByst/D/92GELd3vgtzDAo2oQtgDOId/gI
XU225nwpSmFCzliymyhks5Qx8P6n/5IijaCVhdk0dGNWAeOZ6Q+1yJDOl8miWf1Z
Y39o7+2RGCrQxg12ZgwI6mBvDXWm8bm82cg0Gx6t6XmdklftwnurlCNufd+1pHG+
O1dH7jGQBmQY1cAE5agcXDgjV9JEsVgqymGjn6uebVxcFyCbTDyvzdt2xX5IAuIP
0Xlkp1xFF8IP82nPAVcPc11z/FiPGyv7vQC3YYpS366JKmZLFNyWo4dvecO5JMbS
mM9sRTQjQ9a70s+yRXBXs9l065mVE+9NMAYIsZoMb9/2rmVcAEBtsRCmSSeeo5hS
4mypfBn+HrMt3IhomfVwlt0PNog2wVJLBc1/VKaBBbxh6W+ObOfP9Upf6ZcWMJjN
LJHEx+ZLvpB5Tzwz6zGc6Rx2IWwhOyVpkphHwF9u/9oPMFyMde89/LkSbg1n3kin
jrB85/JNWwoiwX/OSfq8WkvleMtXeO0OFU7qgoQyqN0+RJmyT57cXPoNyjiQRuqQ
SfZkQeC1UhHioCTd5DR250eMvR5go4ozPQqbdUBW+pOErr7TxzdQva3ETfADEKUN
4ouzj5rBsR6qKzGRdCK3NHWvq6lSCr5w69Huyi6T/Zj3utFevqoXnOl2tCwTA54S
44mnxcCGuASUr8ldvYkEWwQYAQgAJgIbAhYhBD18jTnoxN93FYPT8Kigkf00YAHK
BQJYvd5aBQkDw4ryAikJEKigkf00YAHKwV0gBBkBCAAGBQJYvLpoAAoJEFvo0rp7
Uyt1O6kP/0WkW9Ma0sNZOmz+t5dwiWlDuiCobJ3fTYPL3/MNRLpbWY7hKE6WHUnF
IiMtjUTrsSzkMk0U+THZpNxrhlA5o0BS59a+s+/16QJXCaB+x9A7sPNrBYks8YtR
CBVFZb3//v0+MTGMYyah/WR8yl53/U164JQJnRbUneKRd1se2rvTpbYANu3d4P9H
yI9wxEleu531E91ZBjEvNE0GKvIi8JI/eqoW3YyMINqtIHnImDipPSxGaY8b/jiq
67Su5ohMpMF0B6jZcST9Aoj76HIudG1xOkVJt/0mbTseVhrGrIdCPdP0Ip1kQjW5
yVUKu8QAHEDnE0l1s5pN+JA1hd/8io2clZwLfSdNbQflGdpd6vTgOMIpH10kHd8b
2ua4Bnb+v5Um843KBpEVEl4XvKdGgrzhyslyjh9JWiGq9+1jPvR7YrYrAAT0Gr9e
3e6pc17A91LA5yGaU0H4MNtYwx+3tX6RwWzfGjnxBQyeYGRFys1KvHPXozjgqbbn
DB2tSVkr/8dEW8v9VWWayC3UBA/JzxNHz/FgdZZNQiXz0eu0yuJQ7T5B8Mp+qbG0
pIGsU6asaeg8pmj4PMHP5k20vtWzeg1MwsmfOrv+QszZ1E+qwjQ3PtQD9Y7ksWyN
p3TeV0Qxh/cYVjiGiCy/56loWTk7uBL/gc2PvPoCt+NtaX34QsF58SEP/iqGNZNH
oBIwsDfl2ktJv6pGN49oXYJ0o1W93pDRvlDfCSBUkUJRiOv7ILehFwtR/sZiSrjh
oyZFVBMtsV6Dn+hCRO7W1MTePogrjDULDqEUSbrAP+TbfyC9qIFlBxLxgGNNVB4w
qyLMG90VeDZo/i1ZljJ+JEjeTQqZ6v24ARJ/YGOje1/wnELaZ5N2I/4j5gbJ+itP
7m5n18Zo2568YkZDj9opUVqPDlbyat4vm6C+Ae8tJ/LbrSe+Fo3hMQUl9gubgMD9
PcDqn5UxOU+R/twYcZnteX9orSWQLyd59ijj8pUPSBANL7z4IZ5l1LPm8H3qgwtI
E4bO7km106DYEv6rulA9Wrlzu5S4WqSBK830rPHnQUhsmcr8y2OZSZhR7l1NuOwI
f0O11TIOfWU4yfkHy2Ggzv7Qs2mfRFjFHjpyMZR4M0Yslurxsdx5UIJAawQtw0qv
1qvfGX3eJ8szGt36/mAMmwuVLe4tFSe4tYGV6KqaI5D3FtL3jQxJszAy/6RodO4G
EFr2us8ObBT2IA0IwRPkAqVvP3L3zOqI/xPycpTBs/rp3WLF/EMtnmQwC/mcQsoS
hh2YqBS8T/PNHH5JJ3ZDg4idS1bbENEu3NVSwlifjoWlPa6Kxizuk2fcC1m6HaHz
EsgVxIPtxfZOgDIIIJakbz0cIdjzh7TpOL2DuQINBFi8uqwBEADYs9KTWFZwT+WY
Md6B1yMrCM1sAgqPQPypUsxwPCGBa7YN51k9xnKZUgkVkGldbF20c17h+qCq5wCe
TJJSn24SdwxI5YGATwzl/Jwj/7VFacxu3MzHaVkoI6VVTHAPaIox2jBpJKnM7jad
D8ccxApTFbv8AKjdOq/OGF3DUvdp47WdJhkazs6OeFzHa35k/c27DbRQTTrKh0ZM
oo8BAGNHybZqCBeiCPOjjpxNuWNCx9NZDJZNl2GZCHkLJug4OYAqjr+bBh2aVWdC
gi7Sx4+rcCQEzNAc3jT/0+z4n6NCecvYeALfHTQ6OsvuOAvZ68HgIcbNGxcl+8qx
m6cmO86P8c8JHJpi+n+iTWLLT52+zcFyKJSKcEOJPuSdZCWvjxhCv5+/sHWluaA1
pn/nMJ8eMPN/b4k2DRPheE3Pq1zbOl2V1MEyYzb2iHN90NGZ5bVuXa2Wsvwr9AeR
8Mwa3a1rqoYsc9khERo+sBHCLuPk/Q3LgQY7tJAfuG9G0lvqwIjABDRsh+t9moTc
tTAL/WqYxtPKplMlTu9hsDXNQIE4K4dGZYS9oxKEFjDcXLf4PtsKJKn4Cx6YiXZs
+/0IyM4Qhe5J965tzCrx52Cm9QoCEnOj3i6eDMa9LS3A9BAkhx16NizahPta7Hfk
ZgOTX0Ke+NA/sl/SE0W08jikxa04lQARAQABiQI2BCgBCAAJBQJZj7wAAh0DACEJ
EKigkf00YAHKFiEEPXyNOejE33cVg9PwqKCR/TRgAcpn5RAAouAUnzpszljHVNyD
eIXzxN02bCy+CyGZbZ3x2XvKETYOte1zweoD8TzFjqZ7y9JdtXEZRdESDwIuGkF8
sPLg9zow8Uw9v2YhNHzpMFn7IuWTpmI1qz4iwiftACIvMjZ3HaulKv+3BKr9VWJK
zrL3dqivJA1tcj7r3yU0xpWpq3Jn54em+ZkohOrKSsMWYVoUUiDcQgtdau+3CPXE
4qp1zIYCE2kOYtAQd73OvJQ7aKMW8ZLNKUikO16VcWAmQpKaH31S9LV/bNo+pcXa
WuscpjNoTqoarIWzibw8R72KMjD64Bo2Pg2iBjaKhV5tPXiLGIZkxRfCa1HBC/G4
xOs8QaYFVv1CZOaS43/1k5pudlb/Yz9N2/cQJTlbB6JRGTGJnNnTy/jGBoZxBynN
8Kskft5MOjWtW1LR1kbbsE5nfR5+iX/0Sp79rhFPOc3PS7fo0FeMk/ktb3W42U+R
YgbPu1yRqOCgpHStBskCP4TpxwdAleJTp3Kd/a5dMlg7FMaSNhIl4i5ZeQmjCKTR
3jccFl35zP9QLeeSAp6Toi4dmRF2sogAlcSjVHL1P2aiR+lHiTd90u506IjdU9pi
dop71N5xRpCm5n5lb56jobM63jwlH+4FVKVJgIZU+QqjOMX1b+OL5RM8KlU8a16C
gHxlea65x2rkxNZ8hdxieyaUwq6JAjwEGAEIACYCGyAWIQQ9fI056MTfdxWD0/Co
oJH9NGABygUCWL3eoAUJA8OK9AAKCRCooJH9NGAByqYBD/95IdB1Hc7Qf8uycf4h
tYw2V2rY7eXmP4Up3+PcBM3dJNVe5b72dk4lNejDBIdEGZN1bPWdNSriMloWuJdU
L2vvzAr0cDITHfxFKXtbL7PDjYFiquFxm19Qc7o5x9v7EW2oo5uISYNuZZA/K1hQ
jFB88F4CpvjeIrvkrZh4op2EoH6UXb0BDTtx6GBX7bot1ZKIXzwPce+iZU9DYbZN
Phe1PDRsqqOYEDKcROV63n9Gsk0Uqe1Yqz0Hba4JTyuFhRIFENbRWRmJutu+TJMr
BBinHUtyuZa6+wPdyly6oSKqwKgfWXIgai9SBWHm4V5NpDl/45wCK47ICvQfjvlp
yS3rYwmEM6P8KJHTyModtaq/jKUET+TYYMpwbwNRp0fxqGrrHJijjm663TMZT9m4
WBCui8So4u94bF5hZFIuOFXAc3GPG4amnqE0LLgYAZxl/VYqTS/5+HAfOoaQJkVw
CdS0irfmnPBH72fDXIwREjUPQtDe0pfMtMhiIo1Pu6bJBO4Se9h2eOIe8wQOTk9o
AgATe4hrNFeqxxHYxy/1hF5DwHdNXB2s0PBmRelpNaKeOK+J/Mtvr/AoVHU31x+3
IDqGN4hR/ozyzVBQWOlZbObuqLGH0aXbtgIZOemRh/9aHbED6cQ93EJhGWwk7b/m
AM2D5GNb2Nj86UcSCjkKDNH4kLgzBGFwP7YWCSsGAQQB2kcPAQEHQGfh/31s5jCv
bY4N+6KmawVhaxcgQu13H1L234WVTZNJiQKzBBgBCAAmAhsCFiEEPXyNOejE33cV
g9PwqKCR/TRgAcoFAmPJyPAFCQYb8DkAgQkQqKCR/TRgAcp2IAQZFggAHRYhBBL/
kjAspKJlijyrqNnfcDuDuam1BQJhcD+2AAoJENnfcDuDuam1BN0A/iqU70D39iqq
Jr4jcze4q1uelBWzInDG1uUbFuU6s7mBAP9xEG2ZnTJnED/FmpqtGZA9nt8ypA+j
r2Bg1pR5HfiwB8HvD/4vA8qqMcGcys6iyNI8kfU9lcnoJ2bCnXk8mO/Gvc9ArKqr
xbhi4neJFqkkscrFIQUZDA1733Wx7bgCp+1QQxgSNhYUpzoTTsesJ0qNoJSUl86o
CK5bF+9xcq/gIROrqmm2Ko9ZeUK5FYJocSKHBWqebIyGHMCPaugkNJXRLjdUAZdR
N3RGLXghw+KdWQ8mAlzlThk8WwzpFHIEBaEMFzLz2JIct0esZKQrGjfwz8by2s7H
Pd1pjqImfVJEEHVQCsB+zAGOpPpe28eutqFR/A5E0n5lZtrjp+36kzIgKbM1Z2Ap
nF30/xTrv1tjq1VjsjVkMLX+WC3yrB80GDc+RlhkI3CY+PCuQqFy6hKnqeffif1j
bNX4GJp3W+Ul6YWFOWKXjiRWIrlXjehPFZiwklS/vxPivv/9cJXP2nyvT0lX99gR
mr3jWYo3SflqNclPCXkXvQw4p5oVoRLzzpn0Q0Ysh5o8huJgl/X8izNrQuyXh6L0
5U/PXdxWlBHcfr0slvQTcB9efbAWDg5tirnrV7FMRstDMFDeSMNVCA8xL5XbvBH7
BzeyJkDkz8CthrIH6peosxuJ7/PLpaP0QRUwYORwr3XdKCV5CiToJM18Xtj2arsC
F3t576sa4fAAheE8wpHiGJfsJyDMh90KQiPVGM86gqrBHzQz4B2tq8fqN7oQVrgz
BGFwQAEWCSsGAQQB2kcPAQEHQJxAuhzL2xZm1GYbNB2g1BcQHVZqC345n68v9glP
seDeiQI8BBgBCAAmAhsgFiEEPXyNOejE33cVg9PwqKCR/TRgAcoFAmPJyPAFCQYb
7+4ACgkQqKCR/TRgAcqfIRAAr+8eeNIF6vBcqUS0jds1AJUtD+64jzxUKviLgTRL
rVS/qieZGeXHLebssbg6QUa/WvGAxkprDP7ZzYkf0zvsKbV8Q2prqCFQbmxzijhi
tuu93NLHyeEATnmGL2e2GAB7197LTQsPCqJA7+nmMovANwE8RIT50ewhr7vjeq9u
orrfeYpXE5lkb/VNSY3M1CyL8UvoNFi0jg8YVVmc1Ir2uBCsfwT3BQOLxzphdBt7
TLC0bxTHJlyCQ0fEtMqo5o9X2PNn0jH0ZNIy1H0flO8J+ZQ70ozg3z/IEr3rTEfK
8KRN+73v8Jj70pECwFgDdTMnjFrcfUtIhgYgjmB4+KN7VLQEAEiS9/cZD8ZBE/jo
jlfx9ydvpx58Dc4SF1w5+CQZu1Fg08vFo1kRXbDOGTGzugIbrVPADHRLSiUhAJIF
42/iuTbqZVSf27bgjd9Ibvn+Z39LSBtPTLBudvHDNsUTxUvzQkYcMhKJ+jd04UHV
lt2XBMTaOzXGRA8s4SrKp8yfwdV9eM5js4XIV2PuCF39YFrHgTAcDv8zes/SW6ib
xr6IfbC+gZuRBf5KmQKzn17fAWWfbrVlWGECrLeOhs/u2eGk91hCtjzdI6sa7rBK
zOTZPMP69sI35dYXr75GXvw7QR0MXV/o4UezI9cqZizg4kkagpQPB1yjWbMtsOTa
S6q4OARhcD/qEgorBgEEAZdVAQUBAQdAZtv6qEAeEe5FZ1y59lr331+VPELjJGS1
jUnmPFssP3QDAQgHiQI8BBgBCAAmAhsMFiEEPXyNOejE33cVg9PwqKCR/TRgAcoF
AmPJyPAFCQYb8AUACgkQqKCR/TRgAcoKFhAAyQgJxQam/Nuor4ucdlSJ2CeFPKrk
CGuDgT0FAlDahj9aalkg8sO26EdhQeU5tT+EDvUGjvtqk15jdbLCuXB2pKSGWET5
Y50FRvyj5C/QXox/ozqL/jRBPQoxn00bP2iiyTVIEbCFp9zXI7Jdg7baa49enIaH
gFYOx4M6dxXZV84lVCwPQx0T4GxSwkOoZP2vNYooBAX5b7NZscjwcrg7WBGUlopO
P6ZtMhJplyCy2XyW02M/ptc525o4kSjHxjwm9RDDd6E31YcXMDIL+LzrPAju0efp
CUD7NkrhTUF+//ic2Go9t3Bh5j6SyUWQWMWPuEabuq9qVllJgT6LM/wE+gPTPuc+
EiYx08MlJnvlPTCJCEqwsJXME5PaLnM8zpyY1Vng0yGpBeLB64CiELR1Wt6FINkP
OX/HNZnJV9/EIRKSIbQLgjaH2Cvti+e3CZ3dcO6qoK0qiV6DVUEKbdkkjGgiYtAt
IJharJ9GBuqRhNqh9QM21M8cPaloero+I5ZX7pqBLP4GiPN/uu0vz/NCb14dwTe+
Bw9wQ7bREj/l2ZNWyWZyzdT1qDUifNYquBZh51M0CteM5itVdo1hN7yT27H9akoH
aB5/RNRk6MGRhWvAIG0MJ25vqFLT0HUp+2fLCzcuGlTf03Nug7JUzisbQtc4doRT
U+pVYGFv4IXQhLs=
=y6JC
-----END PGP PUBLIC KEY BLOCK-----

View File

@ -0,0 +1,582 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQINBEoE5H4BEACwigcH2W+tLHRC++V0FD6ppThtZCEBPo4Kf595N4dkOCRzqZrn
uZeokptTFdb2Xcsi4kQXfx2gTsQStri5P8nFywG8dTniful3BNuLbD9WuNFhWkg2
TZx64BsJEzBOBeKluLsiN0IpgAj1KA9PGBNU7U0DEGEsw8HVGDcUVYhg/gVcWQVG
O+Z1UYLpdws9lmMnTwg8KVudjL3YcUB/ybsLat4qfhsH5hjFsXQwwlaNh3GlDpkc
qldoZ2WjYEtw/U9rZadc3HPYvRp4keyb7aGfdGDgDBqXGbtjdHvM5sqiQHgWaw9E
RcUrICsZX6vS8+lLx+TLjzX1/bwNgtOVmiBnnWmcB+JDtTNWI5ux+6F2vq65IXXV
1m0kPZo6B0w0yYOayOKvgMXtQ0hNuoRZO41tO2W6P114FwTQIKNwrUh6Ypb1ty6E
Sp/hHDPUopcSezpt1oS0IHDOKVKoUBRkN7rne+bNUtQ+O9hEyZlxjbFnSpa6KzjL
A4TB/3qm6H8pBgbzqyQQQOrXK8qFOpRYk6lOXdrFwFhXO28GLQFkNk3wWnBrTp0t
OBj7RA5wL8BTEWSwz9aa2dU/SdwExRxxbzweMbJpsaDdtu06njLUXNQvA8aMiVOI
NG+kra0Kkh/jRdTxeR2dg16qqBA2rwYwnk5vQ1WzFcbep6gfUpyWIbdTNQARAQAB
tCtMYW5jZSBSLiBWaWNrIChQZXJzb25hbCkgPGxhbmNlQGxydmljay5uZXQ+iQJY
BBMBCABCAhsDBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAIZARYhBGth7NdgiHSM
cFkNVekKQBM2yKqpBQJi2L3ABQkatQzCAAoJEOkKQBM2yKqpsmoP/jN9YEa4c0Xc
wFpHYawCOSF1Kj+2g++K/DrekREO9EVBNY3ZFdkHm/ahJ+Ku8RV9S9YDFnGuh9NS
jNZdqy0P+Wbb2V0A75s7YbmUOIjOYa8n3IepyWG2eAyTDXlXTU0LopNOoxNXlf5o
d3X6n0vL9nQM8AnFNJpAZNaeyACmX5FgB19K+QErDkEcurxGhP+INl1JHyEPz/3f
tpsFpeCl1NSYq0dVSpIAYR13guLG3iFizoUxIv2wZPFU1SSbvqAPZYP0817EHm0G
dHfdRqAlW7ICTZ54+4oxuuwvToQ/235ZOzcyecJvBpaMlHG9N2ZPrnUxeFOg8iFA
+33syaPmhX1k/g461y0Fd9BwWLCMi4bxg0loFUwpDh6cYZpJDt0mzH0vP78g3neu
TRepeg3hisYGFAhTqRQ2YH4XckYbEtB09EcGTLUBlZnRms/wmDBi9cdmiCH3BU2g
ac6cljEedL56I/5Q19lZJtv0fWLI2iFGu1M7QE1lZ7rLCNiYdiLd/i+1VOpmEgoV
WCnBZtRUrZTVqxciqAko5wIYmOYHU0IVjMQNrV52tg7R3wD/XiuQOxkit2979y5o
wjkYW1wlBTJWzXZVHxAl2zRSNA7q/GDoyyb7M0LtK2UOTQQc1wKajvtDkvcLZiQh
j7jgzvf/lBfokenU6aITrXWgCUS94dUfiQJYBBMBCABCAhsDBgsJCAcDAgYVCAIJ
CgsEFgIDAQIeAQIXgAIZARYhBGth7NdgiHSMcFkNVekKQBM2yKqpBQJg9yyCBQkY
03uEAAoJEOkKQBM2yKqpcp8P/1nk5XjktsBeAlmQ/3NKg5psX4i4xsOxG828bPY9
EgRuKEjiOrlhDGTqDb1GhuS+t1Tyj7Yh0T4fIGXd5npzsg6HikUJ/4+w3TME07Ac
ptc6W4nZvgdd2AHd0oL5tqM17IxPVxON/xKZ1aLs/YhZ9r/Q/0nnLpavQsY3hVnu
55ypK/UGbsnl0heVG86mkBzXSqyidHWyzROPaZIP7xF4c8izZelYrzm38FLgc7CS
6PcS3Q3rIp7aMnMFsNa63i5eGBvdKD84kzNYo0dTswwXc7iwAhotm2eOK1CeAMlq
RT8TLMENZI9ZkrZuc+OoqIL+1yz0+uUc/R9Kfh4kTEoQjOQBf7XAl/diDehK5bAo
Kb+pprL5FjG1abCe4ikrm7nVr/y51Zn9cGzFRW7vd3udnB55jQqQP4crD2lmOp+2
K6oJQj/vnOExm2htuYU9jRM6rhZrur8svdw3CKcBMfQbe4SlI2w20Ch3qrVe7r0k
kEyVeBBRGNCDGqX6t4Lrdq3odc/ElkLxJZX2oRPbxLW+hPmkz6PYlXG1I4F+dkfL
WQGePDx6Jx4aqPiEnhbmAW2bfftMAagkNGzn6cGDvrISYU79EKPJnrsUlIsMkQhT
aW4usO407/pd67iAp7pGxaHAEF5glhEzuvIuLvHL+Al4rTYX+RR6Zmgj0Ty6HFl4
I5sFiQJYBBMBCABCAhsDBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAIZARYhBGth
7NdgiHSMcFkNVekKQBM2yKqpBQJdJfq4BQkW4306AAoJEOkKQBM2yKqpDBAQAK4r
JGAF8/3Ljd99lPFkhF1J8s7itYJZHlkEINDvONp5Um5dAVHk4QuxiLg4ATXb4qnq
xo9UZ++m682VYN+ursEgXqm/uL90oAt9ZPKvHbkrRCDTuljHPg37T1nluZ8vZH4D
T+8wSg+iLMSsRutbNWCHrRGt9D+//j29BqnDb5Xjh5AiQluFJTAUYwDWoyKyEmUT
MybRQMi+cSKXX6Qu23lETbbihxNRbW0TQ+tQ711wMDyDUo8FAjKRke8pTCA1LQ2P
MxdpS0g2k1id/kVWj7JZ5iRhKISgSa85JoD3fipmp1SWkfv9oVEqRo0lnBYG3PCF
++M2UIS060kJ17cVvIzBjN6X/jG2TUxdo4lFP3/NaPxiccUgU6+eH36Zm0J+RGet
3DUBqXLEnmnHtLubaHOnkN1rducWBVYGIw1T07PGQCQwTGgk6mI5u5f/TxZBdAMQ
NyUZuPuVNfF9axBsZehxL3YTTjnh54N85diRNWfmW9ekldt5jW3mzt175+MQGXXN
EmJNTDKdG1lg35Ay7UGJnAQ0G39+Riva1lijs/BK4Gm1RdgjWqqluOgJFGDFfdGl
s4FSnhBYDlFWbSPAdPlMrTKr+zdF3I3gti8YRu0EnbTEVTNfqOSKsLImfvk4LMHi
lFJghrM/1SdRvJQWDOVgd6wI3DRJP2aROyiFgQ2qiQJYBBMBCABCAhsDBgsJCAcD
AgYVCAIJCgsEFgIDAQIeAQIXgAIZARYhBGth7NdgiHSMcFkNVekKQBM2yKqpBQJb
O6LiBQkTF/HkAAoJEOkKQBM2yKqp8N0P+wQsf3EPiR95LHlheJrreoEhkpeCrLu2
m7dHD83+khZanhOw25GeUU5annXVg0pFICUYdHFqYjlAXULI8gDS193GaP4lCU/N
92/byesCk67OLANBpW9+2WEEKdVMaQbs7Z8zurx+3OQmm1OLfNPDTjkDbKBGdEuz
XC0JSpH690aa9rAO0K+t2+GLaOoBO622KBXtbBRpIUnPDu+UN6Kl3qCNBAEX0EoZ
Jt4mGYiM0rBKrlmNwxiPY9FvjChjVUSElSbMIr/0/aUBWXYS+CeRvRVD3ks7H9sC
dcmJ066O1HuZPFs8W6JBD40+UPZtqGLokoabPJbn1v5N8nfrFLemIgtRfdv/t7p3
6rWsSSQLYpdNWQf700YtHhAi1+9ze2jj8j1PtJalGRdOIilsfugKp+I7sU01T50P
HnYGGwEqYCSkE+rnwUl68/kH7+gkK1xaHj+LTiqwCcS7OxZsVNGpoEKH6gy1Z6py
h5dKuJgaRy87t9ram0KJC0O3bEBvikrCmkRJphdlJBRrfKkOEx7x8O7jbLn4zrph
U09xkcZpOrBW4wHpRf/fOQVI8xk5NNwECSqnGkRpIfs8BdH3fmY6GCiA9x2uxXMH
lhCuSqBfUJMq6GLMx8HMRARU3fsR0HwGTZc4aNxFVnzILZ1aO8mzlw93/1lpG4k6
nqwc9HNT8uk7iQJYBBMBCABCAhsDBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAUJ
ETZ7chYhBGth7NdgiHSMcFkNVekKQBM2yKqpBQJZWjCIAhkBAAoJEOkKQBM2yKqp
ZzMP+wf3IM4v2Zke5qyMnMZvA6Vii1yq2q/Nqtv4aqv6NfhRz2XsNl+BotEuxMR6
6aEuI0FwQhvUBvORM2HJzz3kbRAx1d1ICG4G8Tq4dHqjAg2lekpotTavLqh7K5Im
kTsQRvgK9+7Lq6e/UnaeSZwioxiGFAovrE+p36tKooZSKzUO5vohBL652oHb1jiX
AwoIfng6IfVAew4zQKwJe8IVeJfthk7XG7+4YVmO2H1F7nrfWRIJgR4OtarCw+3z
VADln0HwyEK41kuRjIpvnsRFTAWgSZO9PUGalBI54VL9dvT2EZXuPaRFbV90w/HE
TVxZybALstU59lEOCnpIpjQix4+iPn0ke4Wl0P2X95j4On/fFnDhJpO4DYXQJOSr
ER/kC5fOQP98CoKNQu5dvqkuhzPcinkIANlrbGKP2ltESkIw1ZBIRMWR9RNvxx6j
1F2dWieCPtCmOZ/bR08zQJcXbjWkMSyyokXBv/YD0UC65eCTG1nRdWEOJq2kv5qc
k/CMXSWufGWYEfFhIEM1RWs+mJA9UkHsmgy+XSg8wwYv6e+RaRw7zZW9OrJ99e67
HMVVY+FtckpGHebeLaAQtneZsUYyXW+nGSBygdwKMcLgu7mWogR8RANqEt8gy5sk
RBG8VhLs7/0yifqaGrfx8onSzhYIOhVHSQUUwqXAAlxT9hXIiQJBBBMBCAArAhsD
BgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAIZAQUCVj/FJAUJD/1HpgAKCRDpCkAT
NsiqqaUGEACHcGjGTjXU4/hFyr16eaQ4RxK5Gcr5QKuYabjdyHPsFQayCIHh6lVB
HHeYFjeiNozyGe5Rff60+vbR4l+ZzD3dFf6IlxqMrnrAyD8WI7WZkew6uFsa3Min
5pAdIP2a7kDDLBVO1RTMYbFN1yaa27RFVRfPOly9vJej8amtAJGWB3nWNKIsn+MV
SEWo8gozpnPqWGWc8g4WuFdbRCEXiFqqnB+n9+TOCZymr158tqFEEQEO3StoyWHw
qkpTvyYBZpFM05uM6BqUkcXlwq0fGX4mJADYwMfSvaDFjfNt+3/+N1wtnWSgkpFq
ZaiSPSQxJpTo67ZuHwn4439giy2NA7visq/QnJDeVj6VaRaJo6Nk1ThlGGr6hnPt
/lQTBchkSVTC9UMFBCzcO4iAVn/cufmODaldQFLiqrnI/frIXqw5TqpShj/h2y98
hnqTM191bdzzJ4QNDcv95TAX2UYGrvNWfm+my33Wwd2WNmDo+hDVBPFP9rRZT9un
vJwIsXCScXdSNtoW8r4Q+4fjMnVIRP7QUV7wfdGxQ6du4IC3Hxoc0xPEOP2of5TB
RiPtZPNy9bT29h6/aBXUlk2tZKzxwhXzV9Nq4WXZTrmU2NTRZnVJxXjqBaIALgrj
LKzSvaA5yjWxguhQajeH2t1ZtidYhAkm/7/FTivxyO/CTTBywRnkcokCOwQTAQgA
JQIbAwYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AFAk4IrmsCGQEACgkQ6QpAEzbI
qqkUQA//dvj43bk8eazJ9XOMcXpTMCDFTVP8/yqfBlMZVDrv0JBzBesfGAIjlVfu
+xAf1GjZ+AiW17rgr6bbb/yQBtT6ckK3yXArQgWRzpYISISFFGji6ZiHPYdVOgeY
p3Vy4rCe4QIJD7gUFtbND/gaXf4v4TrvkPZ/eAkmOioYRoLEuTvIVk0xda6HR+AI
fWrt6RzaYxIG/APlTae+WPEg4mh28mVwbhVeNNBi+W58Kn9IHhBu+GC/wKv25BRy
jE4M7pIS7Lxn4W/pHaF3XxPAuAXkMkWdPtzf495jTzW44WSd26mMwSdASHjEwm/T
AYD8w2vjA+baDwwCG3/lMyAPQGJKU7hHhc/e6cjm/Icn8FLo5/aiNdny1vr8NoYR
u2qEI5z2cNM5p35sG4IJ1bWgAAiWjr8tMHTkpGFgadddwMN14j/ICd2Y2AdeyNF7
kvy725FO21SDPjNQlcs0ckMxQLk4gdvB8W59TClbHSMhhgDnBu7XOWFjzpNqrFau
UoQKtS7Qekyn1y8CTpaG7ougD2iIxVLpUcgAOzc+FV1VHCoD0aDmG1JsRqt7MPpQ
APHkF+PUQdRagspAmNusJnwG2xh6QkXqs29YtPLgb48a1bQMZEKpJMOBpYiCwtEU
CzG99QnqYkd8xG5kaKGc8Uy2vUu94nbmjelRGlbHohEqf89u2eKJAjgEEwEIACIF
AkyvVWwCGwMGCwkIBwMCBhUIAgkKCwQWAgMBAh4BAheAAAoJEOkKQBM2yKqpuTAP
/jaBYWdj7UbiGZ81Kz8xrYRMZ/KKcrLhhPeBpaZbtjdJRnr14Kr450DIYibJ9tTw
87sK+ZZ1gR6i21SWAEz8hqoBNzpz3Kzh/qZPIFdkHDjyLmBTdr1IBioaOzggTiON
4eHOWXSSnpHLbKim9lrs7LryKeq+R79gnWOwYUq67AraXJeS/heUD0kzaoIi1yQb
FrpPIk86mbJ1TSgE6fJ8PG4l+UEO3BZwMTdHLSy0iZ8czJZA13N8hxils70VY36F
TqQicBeKwt88aknCth9qcdFUpueG7TjyCK+gysgxcXe5PhV0LL7Z3pO0UCXCCnMt
WEyh5pDUpbQWSUe19mVTaWTtPeIxNRfo5w6lzSuTYNizHKhITY5qnqvo9kfmzwhR
3gsX2A4SCsJlPdp0kBvtXR/FxYFwPNXe/u10xcoFnOZ8JEqMjDv4ckKr5L1N+U+r
hdPfuGe64AI7Ouwxi8KgWxFeQsT4dx7teASxMb0US2eJkzrDzH6WXECzz9ez7s3v
mqsQBlwjFDGigRJRLKRl0LCOiGYURiC9tUJbAFi/dN75fLrfO0NJJsZCgekm0XjM
wRhRh5HBOBSGI8mTZREaeDW6ku//rG/xlRlsFXY9jYIWjSKG0RUdpwrtA/tdJctp
GojZAhZ24GdaHCGXR+3PFx539MSXYHgaPNC9XeYF9IN5tChMYW5jZSBSLiBWaWNr
IChXb3JrKSA8bGFuY2VAZGlzdHJ1c3QuY28+iQJUBBMBCgA+AhsDBQsJCAcCBhUK
CQgLAgQWAgMBAh4BAheAFiEEa2Hs12CIdIxwWQ1V6QpAEzbIqqkFAmLYvdkFCRq1
DMIACgkQ6QpAEzbIqqlaAw/8DQBbYCnTxZ1mKmQDS9eaDS+sO8rFsy2qOkwMhS8i
ehSYMj/SQ5SqnjVVgxMLm4Wk7YN7KtuoA/mdkopHQUivEaWoOSuvR2AlzgldFzHa
wfC1IxbE6fyZXcC2c0vnDdShB0PfwiYXtMddXz7E9SvzBsVa+8BiuIufP4B2qp21
l6a0nKJ+ymRD1xHtWqvT1Ela++qfJMrjdhuM7Sv2IZSe/YY2+gUBNdRH8O10173p
Dm1jXKMsfMgznPAyZKFQwwojR4tnCVpgrXiegEvIChTr0gwxJ2U004OAmqYXweMp
t1svBPv/fnKyCG+jrxJ1h59+ZVwfsCAtNtLbFG73s4ZwWI5nnlyzJuy5kRGcLIfO
vvvsqQM/d00wAEmMzb3C/+uXzyBW5Hgg1FLY2CcbxoUiYB+gqJ07aTaoEDNQm9Gq
kWZY0+C1qV36q1NRyRFRMhmL7B6EJ6DJU+Wb+P/XiPohbakS32dCOXCIbtjdy7uS
b1YqDIglshz+Tbw5eJD8Fn11GvkUhDGTWzbL9UFdExTZO580A3Qh2UtMCRQJNu0p
eHwljyc8JJIapMEXlhi1llwQN+ajtPhYkvmhljqWFaprlZPPpfjuEdQQNcvnqGFx
T8zGIdyu8kEailpHxf291XSG5sLfzmtf+/rwAU2WmLD3DZWo6BFTagwYEFHH3UZg
HhGJAlQEEwEKAD4WIQRrYezXYIh0jHBZDVXpCkATNsiqqQUCYmRlpQIbAwUJGNN7
hAULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAKCRDpCkATNsiqqQQPD/0eX3PgaIQk
BgFiWbO8yrHaGni/eUoy7bVrIOiH6i/wOF4gKSoW8IpScMf6b6I92DZsT2ltYjJ1
RhYxj5mzwhx3A4JSilDw/HTm4YnvzHoADYJqioHkZRZJdGshsi16fWzOvk8T1aX3
hiQD85PYsmTJNuLxpmzziHRnuYnrP3EBwsr4TOXlHLTYOun5GCcnfq/M/VdVz5DR
pcPj2+ir4ZW45V8+bcFuIqZkrLGVPuG2ECvKMWbMrN/CwOIC6gR1u9SFiOLhI2p8
9dOeYjTE1WFxEiSr0wsfFk9Vd4uk6DDU+WWjssPfaSyXJdAJZtRg19PYJupXHJRG
P20KS8t2ftHyIll5hPIJI+CAmKM4IRhXLxl7GxMttxfJCl2BnHz2VlKvprJ2922Z
V9UFyA/CxgSo2MCBKZZT0KdN0FLsBi3QI0NH10j5ctnWN0N8MznY03FNEHBUt/pX
EjaeQN9ma5Qxmqut/OpON8/0A2z9HyU0KhGcyfeE0LN1skUdVJKwpGyY3TOe6+Ls
Hd8iO2DoMR593u9Uxp5b9Y0LPZQhOf/WQ3QoAQGoOxG7owKZiUa7asUiTdvgLA0w
lpyFttSRMot4BQe4yqqfOOz/ksZXyNv6LOs3jF2t0vzO5r/paXdAk6WuAmG5qMOr
c94oXWXw1WOAaS+psmYeIL1R2N2yZv+BxbQsTGFuY2UgUi4gVmljayAoV29yaykg
PGxhbmNlLnZpY2tAZml0Yml0LmNvbT6JAjYEMAEIACAWIQRrYezXYIh0jHBZDVXp
CkATNsiqqQUCWash7QIdIAAKCRDpCkATNsiqqWfMD/wLMr7VPNRl7EmECc5tpRyX
svX3A9QnRoUZxOWZK8BBzMUH1h9CTe0ntGQ3Xt+41N4QzOYWXloYOLIwieOBNjGf
iLbSMdVFkBR6BuYYC1YW457XccJDMdYATbhPtOVL8jmg4wrhWcF3NSgPwDZ8H10b
3+trf1vWLk7F/Gz1pGu8f6DQtDY4PlV+QmJ87coR/uKwZbZ6YRX8aFNefp1/zsic
Is2fy63ds2rHwWx7BbBuzfvCThkvokXeSpLuJQwzm9NnSrMnJcWc96VdefNESiT+
j0UhZmtcwUmNSmuKKSVBvCVBudmG+1m8PUBG5TI15ExU5W9k8AJ60CoAw+/xrHiW
9Cibcf00JjjbnDg4jpPXFm8+Y+R+joP//MHTx5yRSqdPx6nq2/D2dXHGb0uWwUT6
Kfx+zE/BApvCqB5rpDfbOYgrON3YORYiijoaQnukYa7GJrjyBQnGXYtxU1Vf65xP
C+WdvNntTn5JuDVAyEuEIJ7LVaW8bDJpCNzLbelHOgtRVJeQgcJj6FtHbblG2wk/
QbJV/IMUaoiGz3tIJZHqZVt7GMbCI9MalL1X0B9B+qPt50k/CGdc9onkrXRW0Azk
NPTN/V1tQ78am7MP3OiC8B+sxRxW0NFs0q0gWhTwS+uWiGiT16vAwww507jeCqnM
E8djc0WfefPdoEvfxAIov7QmTGFuY2UgUi4gVmljayAoV29yaykgPGxhbmNlQGJp
dGdvLmNvbT6JAjYEMAEKACAWIQRrYezXYIh0jHBZDVXpCkATNsiqqQUCYmRlIgId
IAAKCRDpCkATNsiqqWTqD/9N/d4Ln3u20PlpqXVymUEKrQ/iKxe9YnpfpaXpdzCQ
gTBoNnjVK4Yx8BgxekLWasmalpxSQQr0f/RffwRcjLZdE//UAPxEORBeQw8psQhS
O5YVIavJI/jSV/9Br0nGGLqFfDXq1QFddwdmuFYIIK1DjuAwJOMHIUe+DWFqJtUb
J0dvjHLOiWmcUXj1CUJE97f8CqNA3+cdgLLgQjJXmPdJCrqm4j6BoriHH4eXYam6
NZOxnFHkNL20e2CmJh8duUUpowE0x6XNNZw/E8z2iUXaxBcqx9GIo1fZjfV+6vov
PV94QSs6eW06oLmuYobS5MgQk/b7Oc2F6V4WsEob2nEPMJ7lp4Ir6cfQ6scCrKd+
7+aZUOqz278DOgtsmFsFmeQOnyTbVCdl37tw7IdctHTyI5bksdjxD3KASOOS/17E
mX9T+4VvA8nNmZqZ1ADkJp3odKLG7jKOB7W7U/l/ULtYlN0JSXgIgJidXY1ec5FC
3NGMf50FwF93Atv1XNO3OaN21Sdcx/Fu7MEwmzFens5F5mCIeKrTeRNL1oPNWTBc
9W0rrWIagHEjs3ZKJC5tFLXybbwhCuShRGLCpmJxfIgTF28jT6JaT3nZW11pwZt+
FluTGOuvlLhOmZQh8yF01SEexgK4lOWQ4vKm2h8XTGRjvmKr/g89h2ltS/Hll93V
L7QqTGFuY2UgUi4gVmljayAoV29yaykgPGxhbmNlQGdldHBlYmJsZS5jb20+iQI2
BDABCAAgFiEEa2Hs12CIdIxwWQ1V6QpAEzbIqqkFAllaMCMCHSAACgkQ6QpAEzbI
qqkXbxAAmpYWpysXbcIKPSS9bYxwLPdsMmRb2LpIY8AVmkpprZduRr4Itg+YHslw
KpIPFimup08Sla/C1iVWYUxqWfss7XfFwfh4/GQOUQbx3aqtuRsOLtaIUjykT/jR
uh1a3Fu3elEnxtVqjh2NPqFPz0GQlVzUZwY9R31DeWNBCUzG8kPK8FDc2D1oV5Md
qLch7tWwwcpv+bdn4u1lpJtfQ04BUFGNkLHCmisZYHe8TvhIDmib5M47sv/S7Bt7
nwh6vYS/ncz7AqAAFhL9dNJRfB4VE2WtiJNJvYuyWupmSSSLvGtD+imxc7FdjODK
MeaHN/LqAOrbohdIihsJDGkcioTi6ckfcgrF6vknYlYv7LyM/b5RPLJq58+5Rh5l
2YWMZycN0TtqD6tuAWg5WPgpXm+QwhgwqzsDIBgFBnOZSs+Nsl04xQACtKF0miWu
Vo2mocqiAeyXGFOdO4DipRaPjae12XOmIfnQLszeY3D+uqJCJ/i6rMJCBlWZN68e
1BCIuRiqprmy/Tk4cRU3m8JU7HPx8DZBcG+jaZYbq1a6uIqN0tAL4SO4jfNwmMP7
bPhvb0gLKWBLGWHOZhCvz4cGEEJVPxlJuV1gP0+l6sJIBMy0Ii2/JvPdTTWZincV
pgOZZGss1+o2bUK2FN0FXbbIuPQFzCjCoGjIQW6l1MbSd7FHa8K0LkxhbmNlIFIu
IFZpY2sgKFdvcmspIDxsYW5jZUBnb2NvbnZlcmdlbmNlLmNvbT6JAjYEMAEIACAW
IQRrYezXYIh0jHBZDVXpCkATNsiqqQUCWVowOAIdIAAKCRDpCkATNsiqqQkCEACw
Od5nt3qGtfLjaj/BRe+0Ep8PhHdX07h/Hk7z+u3sgtI1aapMx+5Sf5nakd20J3Kp
BKKzJwsO+5zyvL9u3BMI+GvkPottO+caj0srLa+y35Em9ydgviKEpWtWoM8xuGkL
kGCeA4O8IpH4ws9LEqLhMoYgFFALaohITx0vVosXwcjkmir5OOQXS7PqD3QDJa5c
bTrFxGDwJ44LERUZt9qrycT2pedeLTnxx+hMiAJXzSsIXDh+KxKNB5rztyqR/goW
EzXOUeQRyCU2D7JNnAEWRi1IBbEOV/CGLZA35zD7bMobwXGQNaCL+Hs+fnWHCcSa
FAq2vt3efUq5lgseZFEC5XJrJCsROQ2IJ/ZoRN7Hok79OpdMlxp0HHfuEOG5YKgR
pwy35kKNgFX6mfyJW74fIjIgIYB069QIYZykZbjNUpIRSye2S1b9P5UDJww3vGUh
L0XNc9JwutjWijeNr4Gpsv4Goreee7vip5U4VOrOUuOn4819GQHORmVZPAnB5QlT
xEevDvsBirCIkwaV9bS32+0WEXtU4AwvTXLnuySAAl6FLt4y85QglxNugH347UDx
BkQghjlaP3AER7V7hOOwXG6JrxoJR/7dJ6hqHrtH8V8fkAqjsx8XB8/IALdGBKfW
64e43PhjCDVi7zCmDdFEP2IjmDWnvrQ68lV4HG8sMbQnTGFuY2UgUi4gVmljayAo
V29yaykgPGxhbmNlQHBlYmJsZS5jb20+iQI2BDABCAAgFiEEa2Hs12CIdIxwWQ1V
6QpAEzbIqqkFAllaL/wCHSAACgkQ6QpAEzbIqqn8OBAAg6lfQrIA0Pmf+kQEjMaj
An2bWmfoUPBMG1liiBDrR0CnGQN+A54Z5UIfT8Wha0qvdYJh/JrWOYSQ3w1lMpDu
6QSb9mKxsPKL7HsE5RGB5zPQBJPgTo/Plurek21IxDWMYKi0/L+Q8RvWQDeYPK/V
FYDOSYHLoDgTe7c4sV990uSnkBJdPD/+3dhCQ6mW7wTvJ/XP6QKa+5+J71jEByIW
RJshYgbjXrOZQtn+74ZOCC1pOlcyVrhLzp2anRVFbrMMBRJV129zS8k+B9401haX
7SvnmL1Kfrt5/tOXRakdv3w7Sc+WdopuVChFzhxsHt90wyW8sowLjndBbEQ8g61s
JGZTJaEcK7vzbO/h1T0WTnxDDn+wKYr2lx+0YKry06iDmVbdfIQNOAXskjXLhDQz
71nn5rsfIzhRnpyQaoRsl17SdL4nodaojdJbntb6/ANflvIklbYBqNP8zJhXdLC6
BAGbvHjdntfbfZePJWBZEhBkDdHjXRKuRSPrnXA5yPvLs6u04QFzN0RDy+RTshj4
TuLd3VY2b6bM8EBIBHgsE1z8OkAyIwHFSAHR1frz0e0n6XgJgGACvbToF9c/8jMW
Dw6LnZQP4qPwk/rHFCaCGlPu4uPd4f1V1ic+HndEuGN2GCuGt0FI2C2ZDZklHhDz
afUGAUAmvNJgbKYOzX5uCb+0KExhbmNlIFIuIFZpY2sgKFdvcmspIDxsdmlja0Bh
Y2Nlc3NvLmNvbT6JAjYEMAEIACAWIQRrYezXYIh0jHBZDVXpCkATNsiqqQUCWVow
DgIdIAAKCRDpCkATNsiqqYJgD/4+vg6QpffzUEe6cTX5cZNb+FAAdMXcTYe69hwb
IEoFwRE2lKDcgqzbSuyOTeqBeYYIdkIcjZC/+o6mANWSmF3JHfOAz39zQ0/kW4ox
je5b8UKwMBbr2jun1RSVS7qGlZ7wD8WYKTj/S3Om9ASCO9VHgSjMtbwrGTa/3a/t
abhM47zGAIY0sRnKve4f1I1kjGix5y/ErYr4D60yS0ru0EDAT3rpymgdMQLD10Df
DrrIaqO6bTk/ZR2TACTFB70wRbmV3m61CmLNqJjzxcs0yX/6FHR3xTLzmFyY57xG
cyRW4yTfWHS6zxFugzHDF8xwylqszpqM14yeD96oDvkMPqW/vE8TM0yeqnwK5ugb
fxFUIECwOvRN5gfz2oZYURSssn8obQFn8smj0+yD2xUNjzR2i4xuTco875+QL3AL
RjXL5IlKJzMk5ipzYg3bgL5PnLGZ3NBObjAW5rvb0+oLMS9+SvoHlvx5EkLJt7Wo
+s5X9Xd6apivR6WRVh6qmAZgKmh+0gcKu/m0aIPJTUgQyBLGRRKBqKbU4RmF5uJn
7pFxjhnLsQ2Xh6ZIUeisJ4otZkBtSO51WbRhpEuqADbrPWqyS5OaMH3eqQCfnO82
LQZzitly/UBrpIiJ0isYM3bgKyAuozXYVXBQ5Xx9lYvvvu8FVluzwarEfZ2zln3U
E8JdP7Q3TGFuY2UgUmVhZ2FuIFZpY2sgKFBlcnNvbmFsIEtleSkgPGxhbmNlQHJl
YWdhbnZpY2suY29tPokCNgQwAQgAIBYhBGth7NdgiHSMcFkNVekKQBM2yKqpBQJZ
WjBrAh0gAAoJEOkKQBM2yKqpEV4QAIqMAvQx+XsJoe7Shl1Ormq951mQPy8IS1QV
pNg2m2bMybPEkH5kNyr/W6dGpLsjSsO5FoRwZyJgYM61HYRNYq2bX+z5zGdJ6gc+
p2Tlkb9QEkZNZh9CHJmWReGu5qPavQArQkMhQQUG/VE/gYAUfkihYP3prm/lZd9w
kHf3400Ii/a5a+cZKyCxGmVMgYbDRqhSu8Aal1acud55ZRicZwctjllUFZDhQ73V
MZgWRiZp6t5iCLNZ+jauI9jI/Pann9o7ibxMnURVfgGoRmWDhDdNvFOVSfCPUFg5
QZvgg/zA/6meqZNCPc1g84PpC9OY0SAaE85qestz9PsZoo24FPL8VVap/dZV2Q+H
qSIIyBvoTkGHCkspXCz5XoQ805Oxllc3cDJHog3286+KmfynIr6hwJAttPGR94CE
NouICr4rtY+zTtiuS3g09NE41y8uDpnDzogd4J7Sxgq/uMvgjaJwu70Fz08e4dmD
luUIBvakpHXY0azoegAv7Alxw5tE3nsR9kYS/IzEdk5EMPoxSVaY6dEYp19gU9jN
7CcofK3XJDM5fByb7VXqbnPJRPeFSdF1XANeJffzeY/MrExK6pl1XPk3czi9YUBj
GNL1zBXHf9IoJ+bkNvx+uwkZeUDllWfzRR/4i8aGR54HmMjL6+vy4NJz7U0FdAG4
ou91fitD0dc61zgBEAABAQAAAAAAAAAAAAAAAP/Y/+AAEEpGSUYAAQEBAEgASAAA
/9sAQwAUDg8SDw0UEhASFxUUGB4yIR4cHB49LC4kMklATEtHQEZFUFpzYlBVbVZF
RmSIZW13e4GCgU5gjZeMfZZzfoF8/9sAQwEVFxceGh47ISE7fFNGU3x8fHx8fHx8
fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8/8AAEQgB
HwDvAwEiAAIRAQMRAf/EABoAAAIDAQEAAAAAAAAAAAAAAAIEAQMFAAb/xAA2EAAB
BAEDAwMDAwMCBgMAAAABAAIDESEEEjETQVEiYXEFMoEUkaEjQrFSYgYkQ8HR8TNT
gv/EABcBAQEBAQAAAAAAAAAAAAAAAAABAgP/xAAcEQEBAQEBAQEBAQAAAAAAAAAA
ARECMRIhQVH/2gAMAwEAAhEDEQA/AMR7KJQEcK2XaCdt17qpx7LLSKUWR3UF1IC+
yAEF1kGrNdlGTyoGeUXC0O7rvhSuqsnhEcFF4UnjCikEd7Xd1PZRlUxAK67UgKFB
IvuuyuqwuvKDrXLr8KeUHcnBRxyvieHxuLXtNgjsgC7sgZfM7USvlkPrcbKiMjr/
AIS4dXColL2PNONLN5anTTky0AoQMLL6j7y4/umNLM7qhpcSD5WcX6C/Lz8qQof9
x+VFkLQtP2qxp9YoUlw6yFe03IPlRYcZlA44KNg8oHjBWG1EjrJKXe6la9wJNcJS
R2TldXFDnkqYQS7PAVauhw0kIi7uKU15QtRcqjlwXUpVEd13dTi1ygisrqx7rlKC
FFZU3hcbVHKKU91ygg8rhwpXIJzSEqSSRyoKGuUOHUbVZUj4XA0VQuYy00cIQS14
I7FMzZaClXZKirSc2otR2C5ZUbckJmP/AOTIpLM+4Jll9RStQ2zsokUsQSmlhtnk
zDlpH/5KpduvIWpqZ5SPVDttIEPJJpdXGKKKYixHlDTr4R9gOChfwTRhF24UDCnK
qJXUo8FSg4Y7rqXKduclBFLjlTgcLrQRtPC6lPKkBURs72u25UgIq70oB2+MqC0n
hHlTygppRxhXUu2g8oKfCj8Kwx+EJYQqV1bmkFKPaWv2lNtNFDKzcQ4dlBQuXHlc
stLIh62/KYjB6uQloz6wfdNR2H2VKsMtzSGbgqWHAQz8LEbph5ifMPUHgdgVTPLD
GRUQd+UhA8MlJ/20jed5WrNqc3Iv/Uxf/T/KW5cTwuIUjgLUmM9XU/4XLhjhTdcr
TDuVJq0JNruVQRK61wCmvKg5dVqRngKaPfhBAHldQ5C4ua3uSVG89hSAs+FPqpVk
uJ5KjKC2j+y7sqs9lIa48AoLB8LiUIaRyV29o/utAfPso+UHUFcLupfZBzmdwoyR
SnefCgPzwECrxTiFCaO13LAUJjjPYhTF1VH94TMQp5tVthANhytjBa48nCzWotjd
2XTZagjJBRyH0rDbNB2v8Kxsob3BVc4AdQVdErp65+HOoHDFKaS8Iqyr7wFZEv6k
mh7oRnva7uuH8qoKvClQMFSDRyiiCmwOShN1jCGvKIPqf6QgsnJKnCINc7gcooRy
pxVqxsQvmz7J2DQGSnEtaP3U3CQhtc7gYU7Gitzh8BaEuizTT24JysgMIfVEEeeV
Ppfk3pGifUsgZta53Bcm3aIQy7NS4g3ivtKzxK7e0gU5h3Bw7Ldl1UeogAkBII57
hZvVbkZ+r08emeHMBfG67vNFIQwdR3pG7NEWtJ7g2GSJ/q9JLT8ZSWmf05A4ek+C
cFXSwDtOGvLbIxYvCN+hmY0PADhdY5Wm4w6iPcGkH+4HkI9PLujc05o4HlPqpjBe
1zHFr2ua4dioW1rGs1cIA5Z3rIWPJG+NxsEgLWs2OpdRQhyMO/KqIypa4jhQXWOF
GURc1wRPNx4KoCkONKXludFjI0nKje3sFTuU3lMY0zGQQSEdqmE+k/KtqkHd0QF5
UNHcow0uPCojgY7rhzhGQ1gtzh8IWyNc6o25vkqLBhrnDhSWNZ97wPhXfodU/l7B
3AulWfps/IZuPyp9N/NQC3dTWccko4yHOBddD3oKh8EkeHgiuxVkTXDI7KXpZz/r
RiYJBsiDIye5FfyrBp5dMdpaHB3cKmBhkw57ccAhacReAGubuacc8LGt5hGcSxvD
mU5ruQRwflK/pjNK98lM3jHhbhhbIwt9IPgLMmieyQB32j00U8RW3Q3JxV8Jl8fT
dFTR6m0R5KfhaxmnY9xuhlKn+pqbaL2mx7IQBbHLDI1zdkjAS0+ccLJlh9MPAtq9
Nq4RLE0htPJ5HhZGu0x6odt20KI7ApKtijTuuJzHCnN4NZT+lZ/TZvYA68Ef5Q6f
TGN7nPG4FtpmSIxx011PA3NzhwRGdr4zFP1GEttJvLZHeo0T3WlqpmzxjdzXNrOe
NpNYA7rSUpJG5ruxvuEII47pl7rokfsuZEyUEVtd/qWpWLCoN0Ci/KN8D2Cy3Hso
28Xa1rOBAXccotpJ4VMxde0A+6aYUNLsLqyrY4HOORQUBQD0lMNYSpbG2NtKuWRx
aaxXhUG+SOMCzZ8Kl+pe7A9LfZV3YARttuCLChIgeurP7q+CPce21CGtcRtBBWtp
Po+pljDtu1pyLWbXTnktFAHutzrrjKfg0sjzTJXWFpaX6MxgaZcnutGDRshFROLR
45WPXX8jId9N1Tm+tokHvyqD9PdG7LC38L0wjcO9ojFuFFoPzlMZ+2BDosbq/KcD
Wsadv8crQ/StF4r4S0308kW03/BT5T6lY+p1G6QFpAI/Fq+OtbASR62mj7qdT9L3
Alkm4jkEJXTOdod+7ubo8I1idW4wPaGntx7q3TyxCRr/AO4c+6oh6s8pk6dtGbck
m9QylrRbieAhI3IdaN/SkHf0E8FTNtmeQ4bbFJPTayFzOhrWUOz+4TMrJzHUE0M7
f7S404flAq7UdOSNjhiQFpPghKyah7o+juBMZtl9x4TrGB7DHO0bwbsG0tqtA539
SO9wzSJjP3+ruitrrBXOj3c2HDlCI9vke6qY4Q7nc0FcGbWkNG5xUMia45JJ8J6K
AVZFD2yVNMKw6OVwuSSh4CjoxyPaKI93d1oy6cCIybXEAXt/8pSGZznDpv2A9uyu
mOk+migGPDn+TgBZ8+k6TqBBPdeiETmRkuIII5xSxdW0bzj+U1MZojYzgZRWaoAA
KAe/Cm6XVyQ4UL7pZ5J/KZcbu1U6EiNrz3Jq1KKBaJtk0VzBbXZyr4I+pLQoKWrG
l9I0H6iQFzto9uV6uECFm0vsAcnssKF8ml07emI3Hua4/IQv1cup9Ln23wOFiu88
eiilEzyWn+n2PlMigFgRzSMaGCzXBB4TEermJDTfypqWa2QQpDgkop3HDv3TAdau
s3lcXICSpGVxCrJWdpcbWF9Rhdvx+AFvy4CUMYdb3D4WK7QlGZf0oY4iPtXj5SsJ
02nl3Oe5z6xtHdbkOhEjXyyeokelp4CyDHHtk6gcHBp2Bo4ctTlm9/qqb9LqGhzd
4J5JHCrb9OkcR03NcCcZpaf07bHL6iCNtOFI3wNOoMsY2C8AcJZhLaq0X0tzDcpA
9mrQkgbtwFZHdC0ZyFhbWLq9A2U7gKd5Cy5YHxupxul6WVubSOrgsWMLSMnTxPfJ
taMre0uiMcO559XlZ2maGzNJNC16RhY5vpNhDcKiPdGRzYIK84dOY5C1ooNdwvUb
em+uxWLrCItU6u5yqbro3ucwBpoDBas3XRhstd1qEN6e9oohZWrlDyCeRgqIyrtd
390FlTfC7OGrGizni8qTcsjWYFAn4QNBcayLTxja3oBjR9hvObP/AKWa1GWBQsI2
YdbrHwuDQ5pvBYU39O0x1MtbjtHKlrcjomiR4Yxr3k82cL0Oh0bNHHvn276xXZTH
p4YInbWgCs97S8DJNZL043YObPACx66eG5p2AFwDWgCwXd0EUrX7T1BbgDQVWvhE
L+m0l4a27PddpH7XRutrsAkD/BV+U+mgWPYNzbcEcWoTU0LIx1GHYO47JJ7bcXt7
qWYvN1oxPBVjyKSGneeEyThNYvP6CTJVTmu6dAWVYVO40st+K+tMzG4D4CpdpWyy
F7xdm6HCZ2AlE1gC1tT8Ls07WCqFK1rFdtC4gKGhqguUqDlMFUgFJaQW0pmQYS98
hFINA/UNB4JrC2mM2D08LGcHCVo97+FubgIATzSrO4GRxMRPjK839Xm/5olp+4C1
vTEiE1y5ec+rxGORl8uCq5+Cimd0wLwWkrLc8h5vg2rJJCxhPnCVDgfu4SRm1U0P
ONq0NNoGObumlAA/tHJS2mifK7bG2z8rbg00eljEmocCew7LWsfJf9HDHbiHAVgW
qHvueMAYBtNOc/UP3O9Mfk+EvP6ZA5oIYDwfCzreFpNK5skjuwOR7HumdJJ+nNtA
o+DympowWtNdq+QqtG0NmoAhwKWtSHWtl1Dd8jiI/wDT5TH04tgc416ic/CtZGQ0
Z55U9E3bVnWh6wRaj1MsSVXHKr0+jDTuLs+AmI4z4V7Y65Kus5IrI3Ot1u+UMnGB
QTBaOypkFNUqxVCfXSd7JCM/1U6DYRa680pAVbjXKJrwiLQFO1SzKJakc7f1WQV1
IyopMXQ0ocPCOkBwlWK3iwlHYJTjkrKOVloi++obGFraeNz42l+cYWZI1uTmwtiG
T+k0eysZqqZpaQ7sF5n63N1NUQM7BXwvT6yZsOnfI8gAD+V5SeE7DI4Dc7JKvh/G
a4kgOJ5OAp2dMbn1Z4C6RoD+3gHwrxp2ni/kqsnN7dINkYFtGUB1HVdbm7nDjOAl
pGvcd2STkqyIOw2vc2o009LOzmUAgD7ncBKauePUz7NOCW/6j3Vjw15jiaLa0Z/3
FczTsZG17QSS6kF+lAmha3/qxHjyFAaG6n0+bVUpOm1xdH38d0w+jKJGkU7H5UVo
RkEBXNCVgddJxqirGikYGULUYwqlERQS8wwUxeFTNhjj7IclIG28n3T7GYSMZLKP
7p+KQUKSL1qHx+VUYs2FbK8VZVEeq3P29Nw+UqTVsJLTRTBVF5CuaQQqz05T2QnC
Hems5onKtyPcgecI1FRKXkyUwVQ8YWWyk3OE9FrIGxNDnAOAqu5WdqHAE3wEq7qf
ew0AMKpiPrf1F00jYWAhgyVQ/WQu0wZtBk7AJZ7Oo524+r/KTeHN9vdaZonus8Ub
4V4ka82+93kJRrjef/auYN324J8og2zWbyXuyfZWWdzvVdkc/wCEtE7+rnsj1Fia
QcepRTjNSGyNcK4RmamlwBABsV5WYXUL5dSZ6ojha0myeUDrHDUQlpNStNqGanOx
5pwzSz4pzHNvaSSD3TTozPbtpDubCjUa2lkBpaMbuywNDJtO159QyLW1E6wCgcaj
AyqWOyrmHOUKJVzN3RuA7hWWoJRIVDOpHQOUERkjftd6grXtolzTRUxWXepGxH1h
Fsa3IGUWEJdkgozqC7NlGHhUOFqGg91AzvFcoHkUhrF2oLxxyqIDy054VvIVbW2R
hWhtBQqsqlytcaVUlUT5QZmpB3brxwmWwn9O0EZ25VGopriPJwnmEuhF3wFFeb1g
EGpIHeiEpKC4Eg5OcLQ+sRnrscFGmg6jac0NxzS2zWUGmwfdELaRf4TZic15aCHC
8e6t/R9eEgNJINpqYzYyATZwf5VupIeBI3+4AEe4SodYvwmmf1GBu0kDuqiuIbpL
J45Ryttgom+SFLBtPFtXbRm7rlFUs3gmsLa+kakbTC8B18ErJ3W4jsFYCIy17HO3
A4RGt9T0p00jHMdj/Ca0c25tHmks36hFrNMGTvayXjPC7SPFbQ8OLHVY7hRtsRvw
Eyx2EhE6wCm2OtRV1oS5De5wAPKINAvuVE8ATYyijOFEjTRQNdtZXfyqerXAk84C
Gt3qfghV7rxuUOkDBWXfCNTldu9lW+VreSFBDnjFgLhA1va/lMWSKnSveKYaTEMe
1ucnyoYyzxwrm8KJ1jgPUicaCF2MhCXEjhGFcr6al5HUCd3AuldKcX44S0z27Dfc
IpV/rmYLFblpkANoLM0zepqhZNAWtQgBqisH62wFhcc0stmtfEwNaKrucrY+tV+l
kx+V5xy68zY59XDkM/8AUDyQTdkLYGoj6O+I+ruF5oEglGNU5gxY/KYk6UtcLr+3
wnoZLZtDqaVWNBQw/wDhcNK9hGbFqbFwUlABzDX5VQc/dbrOMfCLYAKyroIus8tP
I4+EC+70ENv7kbgemCmX6Tpmu/chc7TO6HUAsA5TQoQSAPCa0cvTnIIpp8eVX0+a
H5XTMLHgh1GkWPRROIAyM5CbjfwsLRardsafuHK1mOvjKy1De4h24dgrA/aLKXY7
cEw2nDKhS0+pcXU0flVtdI44IATMsYKrEXhNb5wbIb5JKubE1qrY1wVoBWi0VgcB
DW4omgFWCgE1jcCG0uOEXIVbionoHO5vsqi8kAgqZLPuli/aWk/so0J0m5xYEpqn
VkEkeyJ0u0k4GM2hhYdTM1tehuSUF/0+IiMOdyU64YKljQBSh/CyMP668N0wb3c5
edetf67Ju1TYx/0x/lZLgu/M/HHv0HPKBwCspCQtMNYlQVxFY4Q5tcXcvqGEBxb3
CpjlLSCL3VSPU6g/ZHx3KFjN7Q5pFf4K3GLdWiWVziQ6zWQUw3VHp7SCL/Y/KUjy
7aCR7LRgY0sdv+0AqKrjd1WbQASDaCYU6vIwjhawnc0G+FZK07TQFe6ilo3CMNc3
7m5yVr6TUNfHuBvz5WG5tn8qIdQ/TyCgdhOVTXqWP/uBTMUg/KxodW0MIJz2Kchn
Y420+kee6zWmnyoIzhUxyXWcBXNfuFKCxjsZ/ClziKQtoqeShjhngIkTaUE5pVEF
1DCqL7se66UmjQS++3uvlRqDe8XYSUzwTu4pXOcMhJSuAvygj75NrsuK1NLD0o6H
JSejhO8ucOAFqRihlQSAq5nBrXOPAFlXFZX13UdDROYD6pDtHsO6siPNTy9eeSX/
AFG0u5GcYHZCeF2njhf2q0JtGeUDrVRt6iPY8+6T1MhazaPudwm9RKXuvssyV/Ul
JBwMBc5NrrbkVSABoUQvMZscFS/7aUMFsXTHOUx1ADuAB+VY2aRzS0GhVY7JEnNF
XMl2t2g4tYsblaGmBFAWSmnOaGEuyfCzotS5jTZsEcAKQ6WX+0hoyTXCirsF27B8
4Ss4O7a6qP8ACacRHHtsEnKUlcXHceSB+ySJai3w+prg5o/dN6HVh8gDiRZSBbeN
37oQ4xvD2cjwrhOnqdLqWE4OE7vF/wDheZ0WpB3O3eq8A+Ftaebe1t8eb4WLHSXW
kx5BAVoJItJxSNvB+Uy0iiAVCrQVzigEmFBeA0+yo55x4pKPNuJODwrXvFHwEnJL
RGeSoQE8tBzQcoNPCZpLddNPPlcyB2omc4G2+aWnDEI2U0IoomBqvAwhYFYAhqKX
lPr2oE/1AsBtkQr8916fVzjTaWSZxra3+V4cuLnOe425xJK3zHPqoPKAojaFy6OW
qzi0Jyidwq7QMza0vO2MUPJ5VYCpjbbrKuUkxbbUP+1Cz7VMn2oWfaqyLaHDKDZX
urBwuKLBRah0QoNacq52re9tHF5KVr8IgMqY19JfI5w3A/JK5kmMi/8AsuPgKKzS
uIm6F8ErguK48YQQ0mJxe0BOaPVuI++j3CUv01Srhk6MwfVjuPIUsanWPSQakhrT
knyn26kGMZ+VjlgaBJG8hh7XhMMglcNzHgDwuWY6tI6kbA8kX4VT9WKLmms8quPR
WPUScUrG/ThsyLH+EMB+p6jgGbnfAUxaSV7t0lAdgnYtKxgArHZMtjFYUPFUce1o
GMK2kVAcBcmGuajUNCGWVsMT5HmmtFlWJWD/AMS6z7NK0/7n/wDYLBvKPVTu1Gof
K/l5tB24XWfjlboTyuOcqSDWEN0FplXIqzyrXqo8qIJgpqNQVw5QDIcIGnFV3RO5
Qt+5Bb2Ufhda5VXcohSgKUEuwhF1flceaXF1cqDlJ55Q7j2Clji5tnyVRDigfxbV
L8HKhpxSDS+mTW3oPyD9v/ha2ikFll5C81G57BuYfU02FtxSh7GTs4IyufUdea9B
HRAKuACztJqNwAK0GPBWMdBiqwpGAhLvC7lEESuCgKbQEsf/AIl1PT0jYWnMhz8B
bAK8j9f1PX17mj7YxtC1zP1jq4zbzlTd8oRyiXVzQoJsIjyhcEAOFqo8qwk1lA7l
Ef/ZiQJWBBMBCABAAhsDBgsJCAcDAgQVAggDBBYCAwECHgECF4ACGQEWIQRrYezX
YIh0jHBZDVXpCkATNsiqqQUCYti9zQUJGrUMwgAKCRDpCkATNsiqqR45D/9b7GbD
hpie+oT8pTrjOFuG+TZUrQspaj+Wz6KoR4IgRvFc3qiV7DuBcb7qzlZXnmJx96f1
INR9HZmwFX4krYuLqFaN9qmh+OUNMP1rzxw1ZvdxXWRo7qx28BgsVvAI6IyuYwuR
vZWtKbnHYBQ+ld5t90w1qE43UZCnTO8P6lpx7oBYWGAsKyGQ6cU3zMZ0tgfeNyCY
CHcBhh6C7jpA8XY9XgevwKXGAUOe0VM5wLxOgCRjkfIXO0Wc4NJKgKM+mc6Jdwgh
u1fwUY/I/CvL1ypQMbHZ7JijnP38OuZiVJpwjxG0bgRYrDCO/Jrs7f+Lg/Rd9BQT
53R6Vu5v1Q1ISNI3eca7l5ITf09LNveyZOk37ypWlQWhr74hOBdc/uyCdqsxcIMx
4VE+Iv1lxf3xpUxVaPVu6iyx1bn04tXYb0wd8+rHJDvaXSpFmWJy7ZvHts69xlRJ
LSS4pPSqsdp/3oRuqp+8m8qMEbl7vqR/BSskaVW7Z8cviojuavXvWuHZhissMdGa
96fULCyzMV1vA8yMJTLgFiVKGV5JZ0lBk0a79deD+eD3XdHnzAY41wFfkyrl+Jam
z4QJj/aBmUuYb7dAszC0cgAwJfgbUEnPTtzfo18xgXrVcgfgf2h5HOXNbl/+nHC8
GgE1R4gVGYHlrngsTh2CG9SHzY31BXNlXtSGp4kCVgQTAQgAQAIbAwYLCQgHAwIE
FQIIAwQWAgMBAh4BAheAAhkBFiEEa2Hs12CIdIxwWQ1V6QpAEzbIqqkFAmD3LJoF
CRjTe4QACgkQ6QpAEzbIqqlxqw//U1TCO9de3+8Ts5Bs3+7oFlXEwVhjH8/H7MDW
sdlkRMfCgVMCKxjIGfAa+OB5FWwaI+aIYCn24rqosdUrJPbr6JC94SNhBw7xxkkR
vlH/xyPwps2z9qVgvQbQui0NPR+PTlkpaS5TGjDSbNMj9qz/e6ywcABBujzYpKK1
f6T2Z5dOzOzRRu86TLTpe0e7C60Fg/vs+iyjIU63etm3cWWMzpkJlxkmiDzS5QJc
nl2CcjfrVh1MdylKR2ZvBKZJPLshjf3W/xaCcl240yPpQ4oXNg5csLOCE7C3j1cu
tYaa/67ENjh+DaewJSMSDdXCt0I+O9PpcVgcfqSAfD8bV35+kbQVvq9SPGQt/e4T
VinpcF04zwO46/XJdyEe9ovpxnsS5AZCmlb+0yd2XLIeFt8lJ/cXdK3LFSkRwXwP
YCtC4CeQ/ClJD0pVbrFNWDe1KhftByjyweuENgb5SrX8HpBAW+sJlBVRneXLgv7C
tD0pLm9HnPAg5nmjIN3y5dLOyxbEla6BW+pXA2co3Y75V4NgT2StfSdkFEebXbdb
vTcFeqAKlYZdrUuW+gRnJLOoTyd4hG1BdkFMlPa20LPokZjizXNdEXsils1A1sy7
SLBAXmmjKoFPa/zfGptgD91wFdN476wVqQ55j/WhfnlHaeuzDABoFMgm9Icc5tZ6
oSRVZPKJAlYEEwEIAEACGwMGCwkIBwMCBBUCCAMEFgIDAQIeAQIXgAIZARYhBGth
7NdgiHSMcFkNVekKQBM2yKqpBQJdJfrEBQkW4306AAoJEOkKQBM2yKqpY2sP/2uS
gaESiesLhVN1f+cwK7qmLu3YBk8x4gNvUlCQIXep/+tZeo+juERzcpkQMfyCdK6+
H/b37qlb3RWMDYusmUw/vt1pjMDg2gC+DH3gedQVrRlNMOEn1OKJH+C1AhEjsyE7
gy5rX5UtySW3n36nWkujoWAGxs9yvKYK8AYzsO2kor2fpPv87EqzfSc9V/FvQJNV
KN/MEOccGN6NSYSw3AobZwms8yFMUSccIHrOnvqrOGxhpYUJgh1h9vjWEoj4B6zt
OF0XCdi9aF1/G1SsoFWnnrzXwvoB+ljDuEujRVEkAEHSONOwH1nKCevjK3B6Qzz0
2JdhK/Gmigz94v7xrwEnSUxMbjliJ1LO08+LvRZ7tpiWJkZ6r5BfRBEmBbfeYwPS
mRDqLlEG1NCvp+qVdD3ZrsprU/cfV2FXIvox+MZj9ppYJzfecdpOcZOkOE/C+YhD
lLSec5+2ZfYG5t4VglncL6afnWX11jnRUWZd2cHCVDc/iqRCbITDQ2tlDbNnUXT2
bHfEfpHRJg9KdsFnFjMsTXPfqrrk6FkHgk+fqyz4ll7dFrtcxyHM6cM01S0ZPmr6
UrCBuxAIhNogWuaTGJnQWpuc+dnOBk2ACohG8x5fL99IzYIRa4KDkMROzO7P1q9p
3+uC8g1bjICkzfQrlMpwRBXrrBOGyFYaTNmZFWmciQJWBBMBCABAAhsDBgsJCAcD
AgQVAggDBBYCAwECHgECF4ACGQEWIQRrYezXYIh0jHBZDVXpCkATNsiqqQUCWzui
7wUJExfx5AAKCRDpCkATNsiqqWcQD/4tyzkXdOqP3a12QPku5cL2u1ugzQsyabG3
6L7r/VKLnqy6s4CbCBaoxEi8j/dJDl3gfRQj3M/liM25pXlDhMdQAWVLDR5nZQ1X
Vz8+djK32V1wK0uxa3wKfV3uUglleINp3+LFSFrRTjMGErRxzEWNu8FMJwqnWOmj
gOtckYycQxye0Xop0x+oxQx3V68bKQ3ZwDDNHjUIaNnRHxsR5nBRz5P2z86+mACF
kocathc5m7sMwLoO/bBiKd7MTyA17XuYIA0dEvBfDU5XYT0uzDDMZTFfNvtp3SXn
xBQ+i3DFYLMH0oUXTpQhfdqFP0CuK4n6mwxU+yOQuT5WF4HNmZk/PnEPw1AguRR2
tQg+RvOdImaxu6P/3QTf/ldOVsK6wGHXINtSyjqNLJk0PGLjQyOK4pAuZnav0VR1
1uoF7oOv6D+dvnCJdn5tzR5kmeWp5BtQHIGpTk8teBEdKtcaGDn7yRTHOn9N80JO
uxfFapvqDIHvstjAJ4H4auSUyRYBse75EGRUT40tcSRitZ37OYfWn/qJDwb601UA
ey3bXJbT/Nq1QS2G7nJ2flARDwyDr4fNyUq1HN0tx73Ggb1txnLbskc1rxFg3uom
i0nfpiJOPJDkN5mYQ95EUaHE+MzoENzy62JdRV3Cq9xHEsLrxxtOqYqT+vjK8DIb
X6m7KPb98YkCVgQTAQgAQAIbAwYLCQgHAwIEFQIIAwQWAgMBAh4BAheABQkRNnty
FiEEa2Hs12CIdIxwWQ1V6QpAEzbIqqkFAllaLjcCGQEACgkQ6QpAEzbIqqkcXA/+
IX1d/v8gfs2PzXJyTv6/wfB0f8185QwRN8kjJtoZXDU2cbE4Id3pQ2yM5n4ubuxh
vQsAvWi8H7lighSPV1y/mAQLUL62WZ8BvUYjEQaDK5NP+0hYtuwRNshUP0fEe/pH
Aj9DYJZxwNf8wxTf0W5s+SQ/0pX1ezV2FyOV5Zzkti8BfH9kDgYx1mLCKSHtkdP5
nnG6J1H5XbzrB4zYHw8KMpz80l8ow9TvwjjszXYwNF6c+wZzaSAHzkJFUqtO123T
J2Vico69YnhjQbPcPYvmCRjn9acgPbpac4TlOTIQwOovXWHDvNO969G7v2C7znBq
k2srbgOt3sWL4Ss+N+9iakpwNW6NnN2sKtDuGCaAhHanSDJH4wGfEUdc9I/kuJdz
VsgyeubSasEEho8XxiVi3rR6D/m1aGI1vCgAL5G033wphviP5IbsT4ztWOdUR7aL
p1T4jyKdu6vc8ZkC8ejTSqOUN4UqF45oFavn3nuiHo7hmswZuxCfDlwCzcTSxcMk
deo3NvRnCHWeopZl4QG4eJhj0yDA+hf4WDt/1bas1BvXeKH6A118/0qzBHthoBca
r0rn20FM82+BpQwipP+bUB7AkD/XwFtYkd0D43iBfcxRrnVWlnSsoL6RHqDxH+zA
8Gp/aQL0v+FKXY5VxGCGYhBlsGKJfCebyX0+uxS5FzSJAjwEEwEIACYCGwMGCwkI
BwMCBBUCCAMEFgIDAQIeAQIXgAUCVj/FJQUJD/1HpgAKCRDpCkATNsiqqVmBD/4w
Zy+DOG7v+Wwspd4Up1K+9nt5yFEPnuHNRH2qrv2RVQpFtIFf0tTaBEuvzxnxGFVA
jfIyulY/MEICoLd4SbARxPuP7ft1Y+JZOHnwDb41dYWS/EZsi18QyOasa5kUYLDK
Yh1HR/glNrxN2QVBeMs3nBQ+6n/lcfW0vjBqNrYPI0M81sFSh8qsWTE2vGkraJ1x
VLQhRTcda7Ym4iiu1+QumNLQN/JjtUMbIEZr+Y+CIp7Sdk9mRFCu3K/wHYDtPVlN
KAR+bDtncdd9cDzyvlEy3w68MqC2mc1rVG5fdw0TGC5/QrCkddM7Fr6aWPY34a9b
L07Dbd/r2byPjPnIxRQ2fymRnGAEHHq6HPHSzdDxOpgBgY5YafgZHESanzLL7F9+
bipz67YIbc/O11Xcz1QZXkSVPuCN4kObj+LUCGs0KAIck38fO/e8BwmMw5qvbuP9
UW1NXUEJfXXd8zRTWR1lcHqJ4TJLxbP9gjh2+dKVzb0aVDzn1q/vijCd+MUzqDdu
6+GaQYE92/Td3jag1EzDulF6xVIPBC0DJ7/STx1nXwkV8R5rN0+GvLWoKYzejM6n
NKwcqtnL2u/ZXXhdiGKlPjHGZwY/q3+jdPxBhYQjukGgixmIkEWyhei4Z5uHle7C
n+vE7WEYExrmbmIELzi0pwUUWwli43XBO86QOXPYH4kCNgQTAQgAIAUCSgZjjwIb
AwYLCQgHAwIEFQIIAwQWAgMBAh4BAheAAAoJEOkKQBM2yKqpGwoP/1hXcFYHwecO
SsnqN7knakBVZMFzmPB6yYy/ZB6usUYwHnBDyvIuVyvrNUpJm6/Pk0YQziZGZ26b
qq/9bbLSB1spe3F1hRaQaU8EtBOesP0jR6nPyGur/Su10eqtmUQWs4nKD3E2HiQV
9Z4xuJVu2Pg1Xh7Yw08CUjZ7KcJvmeJgyxHBnyerh9I+4IglO1JJAd4JgEHOl++H
9bzxpPLsNwUbinwAoFq/W8JmqpB/6X/hVUWuj3kdC0pD/ASYTmULagqHtq/I2WPV
6OEpQElPJzvoMcXN0lRwD8izzcZPDIGcwAIqCHJQdKBmtpGuSQAcWaF+xkaTi3DY
i7d3oKHmgyMGd9nn09TdhkpEesVQfKYwlXSto4z4gzrfamjmv1OcA2nLL0ZSE3T7
vS8kAJOuE5Zvm7BQEKSAJaQU+vWFSN2yAZVCH/viPPUTdR1iM2tX7V3aEcppOKHg
0/56vJn9hldYKv6Y1LE8fnGuOONR8zLasibRCjtZWtTful7LHqtM5deisGvzD3fY
q/j/D+IuVljb+aSLWwMkAPwjUp4Yz02bXoxwmvro2UGlZ8mfyZHeh8og4/vjoCpe
Ip1u1YZxK8pzCBPI6U6uhorIXY8YQSFWhCk/yzrmsCyZJ2ep9V6LYibt6328CtHb
AXMVw4b9u1TLobg1q6PPRzcujlTAR9UjuQINBFbBIKYBEAC91ISzAo7Oo0UJ8aAt
R2gv36xXdXrC9kDyX/A5YUf6bSUmiP+TZdKAFMRXzVgv1MFhmDEPYdYP8Rw8AFo8
BoLilxoEL6opVQb4DYfSHAETpUE0maKfTLnBHTVIESRF17GPuLC444blwNGsFoOX
1XoAy5YA6YYkfkV/6I2KH6eISczn0JJB6NePWwxIN7cHM/Vmd4OyLjG6s4XP8rgv
xQroLVIjSOEUCdntwmn58Uiz109XxAiNZCM1yiqc6b7pBXRcCRvPSCpledee++Ss
z+pRHBVqxBZ/wK1LHla0ZyNUZKUoT5QWJOV+Wk4BkbY+GTrIZbk3lq8x1VOFy4FZ
MNgOtN2vTgbYLYwKmCCk+n0pHrOwkdSaFlv3vsGccFDWUJu9kXlo1gR2lvoIoYr/
uiJzXwWO2D7GfgfGLxzLYKwZI1YprqVHYQMRpFp8jXiFE8pbQLhqIokiq8isWWg+
Kx3oVCzVAldzMbyUreP+Bl9252lg95DHrvDm1B79se+lvEAdpKGZH5zo/1JBVG9g
OdFTJnWqbTa61gTTHy2R7dTrh+Oa64pnuo7IMbArpBp9Vc1UH5woEB0JH8OuogWX
eT4rT53KJrVl7hWinlcI4EYmX8M46mZQE6DxwKpGiTnfSxxgA3WtwHiT0hDs+Vxq
flvAinTGvdq+Qniy2haL0Xb37QARAQABiQRbBBgBCAAmAhsCFiEEa2Hs12CIdIxw
WQ1V6QpAEzbIqqkFAmLYvZoFCQ340FgCKcFdIAQZAQgABgUCVsEgpgAKCRCOR6Hs
NaFVHVerD/94EflKRZhgHpvSykohB6l6eVRto/N/btO5VlhIfaLcaDbkownrZ7ui
7MSK1EyPYwtnAXmjZ+CGxIIy2TInqu7MbGi+attXyFduUKtdZ0H1pEjxsDpv4BLq
pJUq+WqWT4n+v1Yhj/vH2X0RUYLQRcgx/ZoNdFRMEOV+HlQL6cnQdR/n+yyflic/
JblfQehbeMt4Zn7jWRUd0u9E08N8LoRUCx11BGrGIXBlsN83PKgMZMQYbQXT0iYq
YceT2crWtvYs+IzvyqgOZ9l6asLQsh8PX321Bpy7XcZx1mPVAJAytwCCk1JIC4v2
MNCZ+AgwiLDG6pkWHJNzHEFYHBO4CdBvqLBMseWVwEUbk3TaRKPzmCpJ7iIJyhyH
cttmluWRcDHP/WPN1nSXsaxrg9frH0iXErWBBUflF7MARroR8YGWYqsmFlzRvbGw
4/aFkMYQa9ZQEidOrzd7IFrJqz+AiScM/3bkxPdIyTjsGZucFTpdEJicUoGJztqF
JV1QMB7Bm3wmEmPgtxGGT+RlNmL3VnhgFyvWFgw7zA8Y4Vlsyb9eisW2xepVm/aT
LlYyGZoKmBODz3UvPjkZO0YGWgaIRypIs3gVIWSlEFSZxbpsWSlTTo3JBhollVFp
VEjutnFKqG4RBZS2kAwQNfM4uaho6eFQuFxX5VPdGh/icck4Ja26rgkQ6QpAEzbI
qqkzXw//cpobItzNQe4S4spXnJs53Par8jleVh537PiFx+K9hjjWdi+bN/bJUZd9
AjdxInnOX8DCTYVdSggLG/sSNxIyP44dXVJX7Wli+7Lu5eZhAI8ng3/DeUasrP60
1+UDd8Bnax+Jv1RGauDLAuRSBVCPlrTgKuKUvIh5saIGiB14vM0zAI9HAwfsv/Gb
+cXOXuh1pxlcsX7wbgm7oXIKgjgjpmk8RNJrt3mscjRdIKmokBi3dlTNmzrH5WDS
DJDavfKwyrofzKDQ3SPFpkVG4P0gal85+QAiG1R6ufTH9MyNlGPFR4BOKbELgDdT
lWVjfKPfISPAOQzquktYEbyunlM2wO1tkiecaOVRLLja2LqFGCNhxl8rYuJl0OIx
EIDG8yV7HqFt6DuWed0CSM73KF8t9tjPt4v9Om0Vb0j475fOZ/XexeukvfMjL9so
tS2ANWNpJprenDAh2QElbywetKNcD8BoDZlSOtBsQvfMe8IZ6w8pPgzpWm7uCMUr
6AC5nc6iQmjCAMNe6NnR+gxmsBQpc6c+Z4I+fGpoRi5Vk6UTDZP7mtsTTYn37dmu
P4N5bwP7QWD7Db4uv1tqkIFTBC8r+COFvk6Ql0gE9lYHh+AK+paemZP8IeygFobE
aIZk6Kg4RvORomqGSSnIb1lHlT6n6CdgTPOws7LN7JIwqjZ+YH+5Ag0EVM3g+wEQ
AMPLqtsM6sXC+Yuif+ZzxFN7vagtGs8nN4RYLegX2q/VSmzNXX17EP33xDw0Fmnu
hK57Agf4VnhzJmg4KnToM4UOOGUe+siPVQU3tCIQTFqTFJBQFvLN88w+tB7gK3dZ
Ug3uKCTsf4nmtP946DfCWgsdSH8dRSKxhv/HaKkSgCqCrqfdt8pHzfYw3rc7HTEm
PaNzEUS99b53rma609pPFlGRfApSepkDXh9p1XHRrTzsYm+gnPY5QUKI2QtSvkiF
LYzPrYxqRSz//P6KGTxRygJQpYzM3i3FMsUlNSoEDjf+01IjSCSn3+AAIulQYBDn
cS0VeHjvlXqHdeg2RULP6WwopL/KYrtDAhgkwOgLLAGl135g+GhMcJQCxq2AGf/4
DMrxCe7XDlOzbZpBf+4h0qgHlxg634nQ4xJa/86Fhjvg/iSiWJqxDEW1m+ImAqDc
jBJN6f9cE7AEPlIaIbcR9ylW2Pk7cGDqo6+ZfQvm4tD8aCD34L3TexEKfVGOVRmj
9soZW3/7PxjleYQ2UdYXh5CANqcvsPPraG8lsg9xJh0I+hmPrq3zU4/vbUsPhPmk
X+uv6GK9ksA4FFsNQwHBFfD5eN3UsFA+xwEm/t5bk28jbeHWYiuC5n6p+61FCdPx
mEU4jTq8HLq6qDLqpBnbvbAqsDbs4OTa0o8MonKlmb0vABEBAAGJAjwEGAEIACYC
GyAWIQRrYezXYIh0jHBZDVXpCkATNsiqqQUCYti9igUJD+wQAwAKCRDpCkATNsiq
qb5qD/9Jbu36I77DNh3yd/DpaZw5vMzLp7dKppOWPFz6ziPPT7vbE2vWTpuem1ru
auRfDW4wyBX7Sb0WLXzNJSxCKKPaktJyC0LnpHh2lqvRpOshIAWA9PHrNW/KzkuI
eq4JFbVClKP/WoD1FQqlkHWILDfQngUz0GKm7q0fDI58aCOC0Ny7Upx3m+jQSjKs
Gm219UhhFcEgsWw7eWlxIU/2OqRUD7zTGL709ZhyQOIIsC6rPD0Y77HCEYjBOBpE
K8FcAY4icFMwc466cJb7toOqOG7ehKIUcyUYs7zSD2IUpN+n3s9w7lS0xCvfF+LW
u0ic3hBXZbcalk6qNhFT+KG/etoT3j6wFCUgjlj4w7uBTcH60xcFDCt0z78e90B6
UgIHhp1A0B4qSrMUhjO0XpjEXvqZazS9igBu97sLi3LubuuhBV0q9X6lOXtNMBwa
B+LGPIj6j/jmSs9HDKFGEkRtjWw7jwGuWnIkLGbY8WprPw1rCo926A7KK8mOV/FH
cE0bi4JvqctxDiARHvB8PAFM0UaFienjrSeXEeb4DvhcSk4IxDwQ1qVejs0PMiSD
9cXAKCufGzGCryrJh90TvRpMAroPx3tY+nmJf4ULXH9tytP3/kIe1ENzOfkUaDNJ
CICz/DlxnSiRsKVY0mXYRVXtGkDfJucmREQ1S1rDGI2kcx6raLkCDQRKBOTuARAA
wSMu/kQ5mGjWFpP3K+G5aapsdXLVLIZyJ+B3Sw6uLmK509feHYJ2fIhdjx772ZbL
u7T6de+xVtWyBMcBehXL06YsiHJoc8Rl97f403fT95BGmPVqTviEZF66DmHMmTxJ
kzjp8BrE9shjb6bRlszlSz38sMkkvrnHSvAZewtVw8L24B/DVe7UCSismjc2LckN
HQ1CEFL3yPHQkrzuSMtdV7qoCQgspAN7eqQ8WmTyZy5uW04c5XFoz9TC2fw80aUQ
EZR+6sxKs8ZEquqMYZ+kMdpoBs7OA4cDckvOimAPtQGmyYN4HPAvY7lXcfTRGBlM
IgApT2zUI2Mql5PQn4UtBj83KYzdsesH3pmm517bSrdApPhP4CQF/B8K2JPBeCmt
ihvXMho54ibBfHYBLVjxa4Fvw1CveD+UfqBaiqhbiN5GqGVTdmZ5bMSjVI1fFl29
ZImd6rtQaJQJUfBmwTGHLuw/3BoucSyJWZmwGA/KN1LTryMpZ1sXmOgHyvF/YI3x
lIeSXex+g4LaTA+8hMwwHC4KlwcHrZGHZbFvovr6UgjcTNFIHBaYM+xJOUWvNRGg
LAn4mmsIZI7ZdbOl7O3raFae7TSj5kmJR4d+oRVJ2Bg0ubxl7j/zaWhvIuZvnj25
Dbb3PeKJvFQmB4TXyE1gU+Ol7PwHG+HOkJH0vwsq6YsAEQEAAYkCPAQYAQgAJgIb
DBYhBGth7NdgiHSMcFkNVekKQBM2yKqpBQJi2L1+BQkatQwQAAoJEOkKQBM2yKqp
+6QP/AhUdjnyQHGZoCl5nF6jcKUt5dCgzQN6xL7YKpn4afZOhoOm55EN+YD5qHBk
ERhfEoOnUPj2W0pwCcPe9oGltTBxFY2521ccH3PVixpCkFlu4zOy9aUAKvXayVnO
WdJYqJCs7uUpoxIfRxBGwZmSUO0vjUrOoXA3zGU/pbMhGZe5oaJRQNWyQw2rFFbL
2Ec7uJJru5r3zKZxTNuFrPMQmz+j5cq29KaNnssO3qNW3khxT7jZx3ybIE3UUW/D
TsQW5imyaZ0X86yd1LGt54WXG+/GcNOak6Z3cgocSb1nWkS3DaNXI8/rm8Bo6TtI
6fYOYKN8Sutl2OzWLddClT4LG8Ky1hYXT86JGsc79lK9gfAfljr3GryOoxX2zVGP
EhQqgMtkC408I6HBw2z8UXuWjaJSL678ZC549rw6bO9W2ndbD8Dz0m2KFBI1q3TM
c6raxOQRy4baiburwz9m9qlNLViDY8zzKAtO7luxX8tkOlTXTcLKuZgww+pCzVN1
rE0NMwXrbN7GH1DxsJMY1K+vNhXl3rkFZLo73gAP/UOyzCQiWY7H9RgFzBo1ikBT
6k9fSIUamPLJNh8RNRCP1XIpsuLw79CmnOA3i9EHE8t6WuS3vr8/V3YsXZ7y9Iia
mQeu5gsxjNoXY1Dy7SKP0k8zT1TfW8Hf7PWbqR45H+CgnGtuuQENBFUKi8sBCAC/
QcpHsPzj70slgn2RIRV45FncrcxjAsoUprtYon+odAAcZNI9/g7yLtDyW/P3Lm3R
42R841ZrbLTu7EySCPYdeeQPVihFpj9s9Xj/nxJg014cNpJjKIB2hxsIIbXxo5eJ
bTIOSUO3vAhOqWI3Cv2C+DEYfciMQVKbXuHXR0+S8R+Ug7V3A4JsILn7U90/A7V6
gwt8xVht2tijMe0gv5wlwTKXbz2RaCqyl83c/OeCo88YsWkvV0hMFhQaTW0D6U1H
OchyJcKqEeMBWqHQ7C3GQygdbfGhiLaNBNiRFUJQPWrtVySxu7DwBM87lEZsf68N
IfWXusNL6WlF0IHSNQrDABEBAAGJAoAEKAEIAGoWIQRrYezXYIh0jHBZDVXpCkAT
NsiqqQUCXSX8EEwdA0kgbm8gbG9uZ2VyIHVzZSBteSAyMDQ4IHN1YmtleXMgYW5k
IHdpc2ggbXkgNDA5NiBzdWJrZXlzIHRvIGJlIHRoZSBkZWZhdWx0AAoJEOkKQBM2
yKqp9SAQAJgJbT6YgDQ3Vx9PXIPYLLpTqZG1lKFuCJcB9LGgNfII4VlWmLH1w4Tb
DAuGnGtTIf2E9927BYAn9DMwKvtcFGlI2ZEx5tRCtl/jGpkW9QZa48VVUcLyWtWy
YAKF58hnC1B+diV58NaoD8qn4lBM/0LDg502+Ig1PKNiya8rtXlLUhx/LoDQhN37
MWrl5gsBcfdWoUwDADAKyMMBkDyRtdP7oaZ8ppU4OEbloanlmYw/9+voURJFwBS4
xvxhi6/zhRWO84dwbJ4aWkCtSCLcYSJJpnhnN+hFFIixOELDFM+V+JrPxG8ICF5r
SrGK0gE797uR3pFCFxiT9c3m1jnYobCg4ARuLipAPoXw1AJZ2hbc25vKVd+ao2Dp
bW+NIjhWqzas+YtgQGLjcuw3s03awie/7o87H/c5HR1eTEV2UEWiErmmi/iHTEqT
KhkWKa0TlCAvVA7L8HZrzJQ5LxYfxThvjwq5tYzcZqTeNfqLJ3YInIB0NU4tQmKY
HSEnq4M/nKyY+jEGpNNvTGfesKmNwrQk+h1s0TfuWex/ioJOYtUF4uI/Lr2Tga95
3X6CQr7ayGxmAYcULgQLz65TyiqCPHh34kdfGat2wwt7qx5aWFGR8ZqPWLs9dTaN
/K06Z3B5tGzRZX6svoeWWC7qyG5wyRrF58H0bZ6oSKjEi02cBrqfuQENBFUKjCgB
CADE9xujJH4tsvuvwzzkXJowmwe55VMK/vuqLHjC7e6qd293rbLvYpA7WhkL3Vyq
ATUqa+VPZZ9/zInd02WX6FEPgYg65QyOEqzDkTPgzZh4QTzXVPa+K4DX6b3YtpLQ
86ITWs3He9RKK9dDlZwaYOCWh1bKL3pWq7uhXU4AFhXjVb5Gjv2jPaaWujPTrG+z
15fIup+ZFjYJFI/AQLJjxScu7vKyL3Uj9g1ImQ4zh2JJKiAPwKfdQGLW9yXJtugY
2y5uwHVjWnM3xw2NtwW4U+5IgIJEGzzDdImfQkhEZmhssQKpPrD8RIMTYEYXdP41
5eRmPajhjO5JrJ7ahsyKIU/hABEBAAGJAoAEKAEIAGoWIQRrYezXYIh0jHBZDVXp
CkATNsiqqQUCXSX8HEwdA0kgbm8gbG9uZ2VyIHVzZSBteSAyMDQ4IHN1YmtleXMg
YW5kIHdpc2ggbXkgNDA5NiBzdWJrZXlzIHRvIGJlIHRoZSBkZWZhdWx0AAoJEOkK
QBM2yKqp7tcP/3gyen3nwYMoAHRAcb08XZqS6LLUWzKeCtuo+UUQY9A5ihAOXUyN
HjNrTgYBnfv/+BzfdxU7Pe8dwugnv6bA6V7uHAm1u7qEoS3XnuVNg8Hg5XFnGy+4
PaIkBJFA/m0VX9tdXUmbXW4b999whyorwzNL5xSxte0o33l6rbSLdePRpcD5hgB+
M+WCuHyaVPVgyVF26EOKWYd619uaP/ag+HbukyoiS2Twlzf193H+WzoK5hsFzcYl
iXIeumTJ5ESOUe6RzVUWUT8TxwakNEKCbIK2dZ0P1hxGzV9ONWVJ79cVBDlIPV++
N6fkbsChWKkxnTL+1AI12jKPDNOuPmV9N6Svv93vmeqny9CtbqD+jGiJG/Dq/xYc
XJ5H2BG+ZS/G2Tw6e5bjay4ulAdXHSws+dQsqZrztFOIpQTzuyOufm2U8QUuTZAB
jPMVVfuBHeJZ26mfrRTsHi1IXPbgvzLsAMnKIb8229Sp+XZ1eshS5JTxkDxqhArY
0SQgOKXs6q5GUSTEeqw2zdRcUzOA2VMzxsPdFVTqEg0ZNypSeIAaQ2ccISmHZH3R
b8rQkSe7CcLRyNbO3Ehn+fNl7IxkNmzzals/hTAJOgW2PUlJElzpinFUmn/el0/H
wvBG8DKqgXfbFYIrQstgkE6eOv5kSuRUAGNWxm3TZQrYaiEZkD1Nra5suQENBFUK
jJ8BCADaRD22hxOa+6ntwKEPnTZGvA4syMHLnlC38k6Smr/5VTjf+LC+nJbUhk1Q
DLoJIX3IjTICNpFU0JH5S04La446mFZEqGYZdP6u1fiugDc82fRceJsAUdx9QlBn
YE0G9y4mV8E/O+0pHN5vNLG4aJYA07UQZSrI8ap+Hp/YNPTBx0hLFidBnqWKUiEP
wAhjCavX65L5ZZZe4fEvFMOxmvWzQAfF15ResU8+qKFRxrl2UPE9UmKgQwXI/CGO
t8WOku93+vVdep6diSXkJoHM75I1e0AVzG3Tmk45rYa1hRoYYR47991DSbNCxIwc
brSlBbgj0YmjWBMNQcxg/gltxYynABEBAAGJAoAEKAEIAGoWIQRrYezXYIh0jHBZ
DVXpCkATNsiqqQUCXSX8KEwdA0kgbm8gbG9uZ2VyIHVzZSBteSAyMDQ4IHN1Ymtl
eXMgYW5kIHdpc2ggbXkgNDA5NiBzdWJrZXlzIHRvIGJlIHRoZSBkZWZhdWx0AAoJ
EOkKQBM2yKqphIMP/iWPzFzKvKeFnTB9fUT1t3YVCzt5ZV4TUTIP9wc/b5ARtOD1
zpzprhG67DmIGa/aJ+2UevPeZS7vuA+X5BuykeWiYdKco0fzGQwvQsA+4nv7fjoW
xwL3KcoYc3kJtAAYLZvUC8ZK7qhs1i4/9KO32aI7FBlyktI3tU9C/0BbJkKumQyK
L8fSimH56BgKabatofcgF99Id5f75/NA7y97f9yp9PgZ/Efwwnp8jnYdR8JPGrVp
V0XTO9fqHb/RrL3uhZNrkOavI8Wbr7D2RCTZRX39mLvyplr8Mc1ky/4GZ739vPyv
5ja6uwFBz1JupBpdtUpJwo7ieXIqN+4WCasi5joyPOMFXeDArJFc/2j3HLW8iarF
vHWFjQ5gn0a8OeKoYCHc8X/MFqB/4EBGH8c+GFDGcdjmBUx3Lnsnn10+HiZNb7WB
5VjKWjveJ1KL3pNTRc/i2DNDVZzKJ57Jk29yvkWSqwIq+YtQHPBX1TeJQkineX6W
w79iYRgjypsX7iLmTponDaArDHuyIQnS7e/HaFTDmdKn3AyMQbBL7ThswzTFWRFs
L5ZWKTqH7sELahjkDtgqMU7YNIoZNdtghpkxkS+EGmEtHV0rdVs1YUwGBqZgp5CH
gQIjszDNQkRsf56MpIytm7vHaBP7SnB1At/vmpxzMBnH9yx7zQTVXHRrPSPS
=z4xZ
-----END PGP PUBLIC KEY BLOCK-----

View File

@ -0,0 +1,235 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQINBGBiDUIBEACwTbvu3ohQvwrv3eaYKRR7fRUzgFEwbmCXt+e1CgVR9dwAuNp4
1KW0yMg2xD2G6jhoc0z4WaTjt1Mnc8Bk4q+Dt6nFIBOb/DjIeAPcOGP9FKVES7fl
71PFWV4j1eT4e8XeW2TRIdOLKJufwUMGXytQbxGonx/KPLjbVdbYMOOouj9rjbY2
uzXC6JfnYv/9GTLkWiy2lMwgHojknKmL98nhfsvVps0CbMfLE0q9P7Atgxd38XoD
0UbijZsLH+liA9ewOCoknxXuPc6E1TO+KRPVfXogRxh2fWZuV4ZNLe7MN4SXT6Qr
MZAF1ruhM6oGgJIEueOG/5H1wdJ+W5cRJ6vF3eSDXz8ZSmBB4ezixR8wbhj2YEhz
09Vp+QjtwmvJK1INmt97Db1iy+zqCj2s6+Ub/MEzygmFPpcTVnnY4tsPy3kfeL84
V/N0MxbywPZA7u/f7uC8Hs2kz4xaSSbYI3izZuDzklgGOdChUOyRa+g0JXSwA5AP
Uh5gKXDx3hgH33WubkQZdmM8GISEpUaD4IfCe9nw5Pv7cxB/kupnnQOsoDlcmrv7
b3QNxueZ861QRFdISKgxdn2ZqO5d9d70xZHuCfWEnckBXHJrCXSZLK7iH0f+xnTQ
wms9MqetXKTaACTN03P64eXoxgXAi2X/I22S33R9Ftnu6+QEbazLjIj5iwARAQAB
tC1SeWFuIEhleXdvb2QgKFJ5YW5TcXVhcmVkKSA8cnlhbkBoYXNoYmFuZy5zaD6J
AlQEEwEKAD4WIQSIgjp17Kp4aw/zixSOQBR4o/vvcgUCYGINQgIbAwUJA8JnAAUL
CQgHAgYVCgkICwIEFgIDAQIeAQIXgAAKCRCOQBR4o/vvcpTSEACFge0zA8PsW5sy
A62NBoKEq5/NcpFrW5Q7HRwspmLq/HUppJ0FqjmYMaIuDkkiv3+P9Yz8LSml3OZX
Eqiq7/hj7SXiSZ0AVNyluRdGGIO/nX6xVDdS+LTtizBfN2JLwGWCsfVcxpUQl1Wg
QMZusni61/zb6O1VqWB6z+Os4jGLA92HNF5yVH6tR+D1pd0xFxMXczA8xux78E4H
YpjBnf/I8Lud9QS0z6t+KH+wZE5QTinYzADyCFAed9t+38CNJrQgbm64JAE9FoEH
uEvi/wF04SMqEJ+9cmjuEyAVvULUck5SgBMRPx5MyxvBjpZkasNha0OgoBRSEQ5h
tqea7CmKfWaWV79az2E53K8vDtr2NkYe4F3iS7w8hbeItfnrsQYMAGdjjXO9Aqmg
vRWivbtwMpGqU4cx+T+d7kVwKXYMPjcDrQ4G2CaU3SEibFyxPSwc9a+5OEvHP1Rl
7G/XkG2kbA7abgcTOpO1AMpUMvF5MQMr83AzlLDEz0onxQU3RR6UFcOHLd00XX9u
eV4YTbdSQK6Kb58uDVx08hDO8rqyJqXRWRhfA4pqA+2y/hEfbSEOmPV4tcpYoqro
+kAN19oFCOsddq7WfIaqkXyPlZMA0crqC5s53va29ULHmJkMtW7nqCKPp3WucyQT
R6+eF7rw+Zhc+jkX1nNefvUriMSlcokC+wQTAQoA5QIbAwUJA8JnAAULCQgHAgYV
CgkICwIEFgIDAQIeAQIXgBYhBIiCOnXsqnhrD/OLFI5AFHij++9yBQJg2re6RhSA
AAAAABIAK3Byb29mQG1ldGFjb2RlLmJpemh0dHBzOi8vZ2l0bGFiLmNvbS9SeWFu
U3F1YXJlZC9naXRsYWJfcHJvb2ZfFIAAAAAAEgBEcHJvb2ZAbWV0YWNvZGUuYml6
aHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vUnlhblNxdWFyZWQvMWEzNTBjNzE1MWNm
YmJjZDhiOGYxOGZhZWJiNGJkODUACgkQjkAUeKP773IZOBAAm95gnhIty2S1xvG1
MhUWI7yUlCgKYu75SOVYnr5Pzgs3oKCB6lffBTdtslqcsw32FzSSJ6ShVZX5QxVw
spgxv+r46CQK0Dvh59GgvN6DhcLw3qtJJkgE4PS5dN9wn3GIV2uJJOrnnqIRh1Wg
XdmMZfYVlazWqfgfJygZ+WHdk+5g8fTvYda0qsYWZ0pnBcqC/zfEMwNDTN1bQEJ1
YAvatNAw3KpUOHrsY1yBrgAIEyArf8DJ7BzLF2V1n5Ee+YOEP66+9kEn7TDA0lV0
xaNHInE5orNro/BFmwj0faCW9YZlB/xP+Q9Hbl1RGp9YPhVEkFTFASKqMwazMrat
wV7mW6MnaP+oMzcBHhJq5UVXtxSTUcPLav4G7TLkO0iU/ztiPaIw0L5OpEYjW02i
yYYWftauWqbkDtMjFJ9Elnud86/IO0ZTQXELLN+nnZVMU3lqw4VK2gmfytmlk9gM
uE2mvTbnFWkQ80tUaYCy5fIde5Qg4vJxG26Sr0GfJiR0szav/9X9Bovc9I7xkmXW
bGRtfgMFDY0K1GkvN2mk6uikZJu5iqd+x34stvbnAATpMLOhAWjbV4/dJDBRlY1X
jb1ojEdmAmI1FHT4d90y/jc7xNHY/wq4JF8bQjSM3JeWc/RrC8rqElY27ERy27xe
AJiNQyJt2S/hpBYMzJ6KagNodACJArQEEwEKAJ4CGwMFCQPCZwAFCwkIBwIGFQoJ
CAsCBBYCAwECHgECF4AWIQSIgjp17Kp4aw/zixSOQBR4o/vvcgUCYNq1El8UgAAA
AAASAERwcm9vZkBtZXRhY29kZS5iaXpodHRwczovL2dpc3QuZ2l0aHViLmNvbS9S
eWFuU3F1YXJlZC8xYTM1MGM3MTUxY2ZiYmNkOGI4ZjE4ZmFlYmI0YmQ4NQAKCRCO
QBR4o/vvcspWD/9tPmipSq3Bp4V12PzTr1U1FpRG8mWzcqZW2CpNGSIK9AxFH3CN
yBG9/CvCSuDz0Lgyjl69ixoQKGlacfDHRyPghJrRzzV4TTiBpMmRnqgi/TDnEr1S
b/2hFxT3/XFaPfTVIc3JPkfS/ywRf48UOt3gF/A3/CmVDNfQWUpW0+1Z6QcjmTfX
xNhYUF/CqyyapfuBuFX7wKoY1PBZpkOOoycKlEyrtJjjWRMCX5ZD09jhVVI8va1U
Umxshfol3yapxGwkndrX2qnIHJbVwwJrrxr2i3jMnp4+EopK58epSx0d91vqGsti
JJCl6PHB5XJthyyFZj5DssDyFPnf7Y1RovsXcoBU6TLUF6k1jk9V+t6c0D9PQb5v
UJTprIOHkqCzJwGsflyJiLjWijk0kUN5XDsUp+RqeweIr+5o0FI3HLOGE6cavRFU
NzXPHTLBdDFWK8TPH3IJ9WdHkAWkzPDzuYokVR8HCVQygrnzKm+iufr3UpOLvtSK
I0hdbfpeAj2fNKEwPoK/XS/AkjaobMuhwYB1wS/ZiX7lBrWxULYKzdCp1qPTqD5I
Hn2UMw1kmI7jSd8/gtYosHf2cKukc5uFCMUj0lLbHJGpOUCRnpAbarypY0heH3Fk
1nDNWwsKfX+hxHQgSLl/TO/YBXcECYSnWrHlAPZzfTywbeFR5lW7n/QhaokC+wQT
AQoA5QIbAwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgEYUgAAAAAASACtwcm9vZkBt
ZXRhY29kZS5iaXpodHRwczovL2dpdGxhYi5jb20vUnlhblNxdWFyZWQvZ2l0bGFi
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
=y7aU
-----END PGP PUBLIC KEY BLOCK-----

View File

@ -0,0 +1,10 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: website-beta
resources:
- namespace.yaml
- ingress.yaml
- website.yaml
- docs.yaml
generators:
- secret-generator.yaml

View File

@ -0,0 +1,4 @@
apiVersion: v1
kind: Namespace
metadata:
name: website-beta

View File

@ -0,0 +1,6 @@
apiVersion: viaduct.ai/v1
kind: ksops
metadata:
name: webmail
files:
- ./webmail-credentials.enc.yaml

View File

@ -0,0 +1,118 @@
apiVersion: v1
kind: Secret
metadata:
name: webmail-credentials
stringData:
WEBMAIL_USERNAME: ENC[AES256_GCM,data:9tO99BuuepmaOB3vDS+Sovlxiw==,iv:1QnVUEgwZqmJiPfq2eDODCppmid7MAwwYtit4RQGiwk=,tag:nTKA86gwJzaCQG9jbdsCkA==,type:str]
WEBMAIL_PASSWORD: ENC[AES256_GCM,data:G86wfaVvxJcyAAEf+hfNXgt1IvUlXAbP,iv:6nrRUBkRCryUsA4Lk0Qlxm5EwdPvVmJ1NtvD4H/Wlhk=,tag:Mk9mSfSGCO8ceTq7+0jCFg==,type:str]
sops:
kms: []
gcp_kms: []
azure_kv: []
hc_vault: []
age: []
lastmodified: "2024-09-04T19:29:32Z"
mac: ENC[AES256_GCM,data:iBZgkBJcRK5ll5rqCyo+eoYBRlZUNPQKMVo/fkcvWygX0vjPUJes7ZlcgUkMvLKuE7sg2Gjxfi/Hz5wHTHONHi6H+NrX8wMV5YBADyTit6iUnY+E4prKkO+4UjNApJWK2qkYSJOmki2tsgnSOtrOBE1kTzrQk8PX9mro/6Bd9lc=,iv:pCyFOQUA6DKigmL/AhaqDZ+ubhFUGfTuznDv9RSK+ek=,tag:G7getVh7S7ehj4pXI7mhAw==,type:str]
pgp:
- created_at: "2024-01-11T20:56:23Z"
enc: |-
-----BEGIN PGP MESSAGE-----
wcFMA82rPM2mSf/aAQ/+PJZZk8l5rIqLgeZzumY/oZYbgSLhB1+kfrQSFKuWlWU2
wO8dabV77egBrHrViU8ZryJeq9rEmAwEZPTlTbvGdP4YWkXuQvjcnG41a9047p4Y
t67hvZbqdrLhtpAbYYC4DqEJAlQIFC9CfCCHybU3NvxDOntmSoXJ1VRdDwxeT4k/
2/W/4XbzvrV3mK4pocHryFkWfitplt92TQS+N+Y5mrRZAHioQNvSjD+mB5qllIGE
OenplDUOR5K28lAhKwJi9YU+4Q+WwRILn4Anh2kbthkOKbR2V01XEE7rZZ7miSmJ
HSSebOokY0KEwc5TS4YJjz4VJ25UTcw74z9oZXFh5UOCCbiOHS3vRqd8ZvbAOtxg
N69bHW6I61EvAmNj34r8ZIPYDsAUmVWg3RODzrHv53XH+7TIRAVwtyf0sq49BJz7
NYOIoAh3gfdt6AcX1wzE3NPO6GaF9loccKHzjZlgPrcG+OIiCfWvLe/ZSdEfWOz3
2ts4TH2GCTt8y5A3YZv6TiJTqkeZp+aTKTWHZ8VPbb1f/K/LZCgy8xJtsdPAm76H
Hs0fra+/igXCcsTn1hy8ApBd0kQmtaLfMdABJ4rdeft8M8ZYUE3hx0nk6nAY73TM
vUdtLKYYTd+8ZY8e61Hop7MEsxnV1MRCmxQYNTBCCLXyEb7EXBAFI3Dd60C29ZXS
UQGgFne06+Ylj2sDkWOEVDe6YJJ9uQpFLuVS0wkZv5k1IkSgQn+vIZLqo5ltWFlN
5sovHvmmclSlC7m0G90ReoNpSWP7RbSddqI3ht6H5GVYCQ==
=HuH6
-----END PGP MESSAGE-----
fp: 6B61ECD76088748C70590D55E90A401336C8AAA9
- created_at: "2024-01-11T20:56:23Z"
enc: |-
-----BEGIN PGP MESSAGE-----
wcFMAw95Vf08z8oUARAA55KjH0BV0S3PzGBlbxNr2864BRPbHcupAj52Smdh/dwb
0GL64ULgfFoytddgYXeXVKPwBw1l8UIZnRDoMZyeTlUGKrwR6UgAtYcs/BId9/jF
B8yJzLk19d1ld017Pl/3zGE6/2YxnE56MMeX+4Az8K1z1EBVOI5XFBjYz+r8tG0q
9j2ypWtzLK9Az0g4V5kTrnGQwA3NN3siF1Uo8lvJzL+YDVV7d9cfB+slYM0xBOKn
6amxxwKwRZegSckPg+/UWXZOdj6NEDpiQz94hQMm4Bm3N0HtrulATAMjAiTFfzst
W2R9X7U9FCMwhX1wi9QMVOy5crbBMMc3wmv0b3Ya+5smnrr/91ZDwD8s0fHKk/ju
BVMI9DaA7usAvlziX8LQv8Be6EHQSnBF3cDVQSTyM8TFtbQMMKMFQszbsRnvRqs1
k4b3veNYev8fJOK5JaQTJ+Wm7uFm22tw7Q6orSoPuD2+gIzfWzPFU1q0I7ROdN9h
sMc+/ytwKCU3oGbSLQLAyXI5E5czRJJ2797uwLQ3a5aFUSP3/iR/qfu4/MzGDgnW
XNVYadheL5xdgwnugm2CeYNwskZZXgto/bwiL/+jzeTmX9GfKN0+Nl2VqZTSRw+0
o9MTmKsZfq7BBJ/eOJhD1xK5rF2bvduQ9re4LJ8+31RGTN0eXWvQ43jU5FA6tF3S
UQHrcMjwQaVpVMNRH5AjrMS2ZKfMf+Ehbjoby6c+7W/zkOgYkPLI8dKFpUZGjPAg
YifFb+hBtcJTNiNJjVU/QGEenfMho9X9Uu0QmjyEbbXnIA==
=upcn
-----END PGP MESSAGE-----
fp: 88823A75ECAA786B0FF38B148E401478A3FBEF72
- created_at: "2024-01-11T20:56:23Z"
enc: |-
-----BEGIN PGP MESSAGE-----
wcFMA0/D4ws+/KPtARAAt1m79BSP6vyV/zZNl+2tiI+1KLA4q+lMcWpzD4YAkWof
VDKGnr7sxDXA3EP5SZoCz9KJuKHMxc1cDgZ1AGNTNHYRVGyMNmWLbbqfX9XW6pZT
MuDr3W4wZc8aJP8sL8VjknbzuXTQPqdu8SYfHSPjXmNz3ai0h1dmYWJBF+2E7Uxa
r223JDz6TwS1VMk8TtJvlZgx+hCc1hroMmO5Su3CsbSum8ccRSPCOzXzURloM5Jv
xWZrmTWSsvg5lb8MQjnJ2ETG8alQDAZOgsK72Brq2baRZCcWJArFFMx7y0UlbBML
PYlC5QzsKFEnCC6lF+V1O1jUFgPYqs5Ck7H0kbfZbSCiF9fs7lhi2tQqRN1My7aX
cy5G+rbRg+4+TaA/xBssMiaCVSnI28zotrLX+Q5q+/laL+AdMSWTtfYbGpfEiLx0
ejWym/PJfgeozZsUXdcZsrVmMowksVyP0cnczNFBWbUVcSFRZ6+KaNBobjr2hiFC
NqX77VhkKnDsNE7HIo42yyqjU5ipqPaLp0qs6pQquWVNb/MBid07S4KBTQ2HJo79
tTki8djQBpBGPZJj1hwJvUtb+HuJTWEgI2Az6Pw9S70kmdWLSnp7aJtHAP9/GN+b
NainzJJ8mwv+03ohCxPHUercRtlSKjws6miCKQkxdGpqVCMrXlqx5XV1N3BX+PHS
UQGLbpsU8EovlP+jyc7WIqPAcGl6UGpHKuEJtk473eWKAwdoGdM2hug/83Iru6DI
pQN6SMixNNNpxvhoyaHhFyYFzC5Xj5YO/obEYpDfJa7tWA==
=TZtK
-----END PGP MESSAGE-----
fp: 3D7C8D39E8C4DF771583D3F0A8A091FD346001CA
- created_at: "2024-01-11T20:56:23Z"
enc: |-
-----BEGIN PGP MESSAGE-----
wcFMA5Wf+FyJ+zFJAQ/+OZlDJaJgpA0OZIXM4zRaDwztjdvrsmEkupUH/mC8sXsJ
1Q7/pVDJZqi5z/ewl2EJGyar7uvmgVVauvqOGVP8pIb04hL16M7p385U9VdBMa9V
IhBIYDKQi8Ia67xz6kQsMvT4zvzo52Z7opb6Rmxf3qQt919iOLdJRtJXUX0Vhjs3
m0zyBw4jji5zeBcfNWFxwLe8Ie5+0E2zZpyakQobTLrinEzTqwOpoEi6p18b6tWw
/tLHvi52TejXxkfBVsBzHMDz44WEOMu81BG13BY2JvSmOtj9+yPad5SMBy/4ugti
6YN974B7Dsetsm8UavMj9kU44nh14oZ8cPJ+sbf0POttSXJJY98+i5eUFptrIZ0X
4SyUo8wMkxHtDiL7rx3nkiglUkpG4H4+uzcaS0y/A9zlQas+igYL5YdE7CL/M5ET
V0UWNQEVqCk3EjCFYGR6Ccc3nGOtxnc3eWuBDBCd3oYINjqci6ZK+ds8yIqUY64B
Y29bvQvLSBGWkJs7ol86LyuQrFC7vvLZelsGvkSjwaRE/Be8AADgreZe1BHC91cn
eE0vr1rY8RcVvFjbLonzBhO9aMC5o1FkTbmKbpYcnrB7VyiierGMe9g7wRxcJrEh
SMvquMdOZxPgiB6e1yJ44WPsWHZMQvBjacCToX9LhIPe8QsebnrIHny0GYmYS5XS
UQGiVLKMnZJkACJGLtotqZWFPJi0oE1B+X3+wQch5aYTDWqtQqY9aDXSHbKSvZ+u
MU7a2nFCcMMrlM3Z/MzQNQxD5az/NivyIXjT1tOjc8PiLQ==
=3nk5
-----END PGP MESSAGE-----
fp: F4BF5C81EC78A5DD341C91EEDC4B7D1F52E0BA4D
- created_at: "2024-01-11T20:56:23Z"
enc: |-
-----BEGIN PGP MESSAGE-----
wcFMA8KRInHl7Vz+AQ//WXsaXLEl1BDCWBw0sDI02p8QKUosA9JOSr9Za5iO/G8v
Pn5JU1Fk5hAPvy874pk5jlGSSyXsO9b1PAY0i18kZ8/MMZgolyNgi/mK2B8QvixY
zOr6tQ2aG84tbVmBO9rt+AVkhggOx/gu3ZF3gWskjs3dY7/mD2krhNynIReQfTUc
MpOWmVsPh2x+8zJ7siECIkD4stNcgRGKAabQHRNig0Zg0dJhsL7z8tVuGzZGCDbu
q5fXPF0bM5Rb38g9DC0pXp1WAfdpCoSh8LoOrF7UbWsQFws4+looAoarFzk0tUM4
/XTZTzBEAhf/f/RX9yJku+14erwC7hnWnM7Yr2O19lfQ1ZNuOqkZKFLT8kV4PPcR
vB/3OD15HGvQD3T7DQUe9C1kFs3u1Kymk0SUocv5xTRTvbQQSEqe3KkEhh3yjb87
0ZsEczDafx9b6BSG7hEUyBhND9Rk1FjbGM0u1Kowy+oLMFrEQ0Z/wtm4bam5Nyho
5i7BBvFUquSfqh3zM+uzd/69G5AD4B+E3VDtz04cVqzNYbCmRP9Tof1czxiPYJ+1
kyqlk1Kd53zU2RtH1K66Dy3VNHtjVheccEHhRYCMv1q1g1+4LgdaBkouqfNld9Zc
9OfK8ZYeeH1iiTjgvSB2FN5ZBZYSEfs1Hnfw0XpyZcPXxPw+UA3h0awellWk7D3S
UQFE/ARKfbhBbLgbaCduwrF2sWLMAj5WlQv+z4QLJkWire4Z9A13qUEvUNvys+i7
/nOXorVH9UnvqXobQSAT8I91/LzkyGZB7lZrTnHzKQm6pQ==
=tZkd
-----END PGP MESSAGE-----
fp: C92FE5A3FBD58DD3EC5AA26BB10116B8193F2DBD
encrypted_regex: ^(data|stringData)$
version: 3.7.3

View File

@ -0,0 +1,71 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: website
spec:
replicas: 2
selector:
matchLabels:
app: website
template:
metadata:
labels:
app: website
spec:
containers:
- name: website
image: git.distrust.co/public/website
imagePullPolicy: Always
ports:
- containerPort: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-form
spec:
replicas: 2
selector:
matchLabels:
app: web-form
template:
metadata:
labels:
app: web-form
spec:
containers:
- name: web-form
image: git.distrust.co/public/web-form
imagePullPolicy: Always
env:
- name: WEBMAIL_TARGET
value: ryan@distrust.co
envFrom:
- secretRef:
name: webmail-credentials
ports:
- containerPort: 4200
---
apiVersion: v1
kind: Service
metadata:
name: website
spec:
ports:
- name: http
port: 80
targetPort: 80
selector:
app: website
---
apiVersion: v1
kind: Service
metadata:
name: web-form
spec:
ports:
- name: http
port: 80
targetPort: 4200
selector:
app: web-form

View File

@ -0,0 +1,111 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: wellknown-openpgp
spec:
replicas: 2
selector:
matchLabels:
app: wellknown-openpgp
template:
metadata:
labels:
app: wellknown-openpgp
spec:
initContainers:
- name: generate-wot-data
image: registry.gitlab.com/sequoia-pgp/sequoia
# TODO: distrust.co is hardcoded
command: ["sh"]
args:
- -c
- >-
cat /keys/* |
sq wkd generate -d /output distrust.co
volumeMounts:
- name: data
mountPath: /output
- name: keys
mountPath: /keys
containers:
- name: wellknown-openpgp
image: nginx
ports:
- containerPort: 80
volumeMounts:
- name: data
mountPath: /usr/share/nginx/html
volumes:
- name: data
emptyDir: {}
- name: keys
configMap:
name: openpgp-keys
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: wellknown-matrix
spec:
replicas: 2
selector:
matchLabels:
app: wellknown-matrix
template:
metadata:
labels:
app: wellknown-matrix
spec:
initContainers:
- name: copy-files
image: nginx
command: ["sh"]
args:
- -c
- |-
mkdir -p /output/.well-known/matrix
cp /input/client /output/.well-known/matrix
cp /input/server /output/.well-known/matrix
volumeMounts:
- name: data
mountPath: /output
- name: wellknown
mountPath: /input
containers:
- name: wellknown-openpgp
image: nginx
ports:
- containerPort: 80
volumeMounts:
- name: data
mountPath: /usr/share/nginx/html
volumes:
- name: data
emptyDir: {}
- name: wellknown
configMap:
name: wellknown-matrix
---
apiVersion: v1
kind: Service
metadata:
name: wellknown-openpgp
spec:
ports:
- name: http
port: 80
targetPort: 80
selector:
app: wellknown-openpgp
---
apiVersion: v1
kind: Service
metadata:
name: wellknown-matrix
spec:
ports:
- name: http
port: 80
targetPort: 80
selector:
app: wellknown-matrix

View File

@ -0,0 +1,32 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: docs
spec:
replicas: 2
selector:
matchLabels:
app: docs
template:
metadata:
labels:
app: docs
spec:
containers:
- name: docs
image: git.distrust.co/public/docs
imagePullPolicy: Always
ports:
- containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
name: docs
spec:
ports:
- name: http
port: 80
targetPort: 8080
selector:
app: docs

View File

@ -1,6 +1,6 @@
{
"m.homeserver": {
"base_url": "https://distrust.ems.host"
"base_url": "https://matrix.distrust.co"
},
"m.identity_server": {
"base_url": "https://vector.im"

View File

@ -1,3 +1,3 @@
{
"m.server": "distrust.ems.host:443"
"m.server": "matrix.distrust.co:443"
}

View File

@ -33,7 +33,40 @@ spec:
name: website
port:
number: 80
- path: /submit-email
pathType: Prefix
backend:
service:
name: web-form
port:
number: 80
tls:
- hosts:
- distrust.co
secretName: website-tls
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: docs
annotations:
cert-manager.io/cluster-issuer: letsencrypt
external-dns.alpha.kubernetes.io/hostname: docs.distrust.co
nginx.ingress.kubernetes.io/enable-cors: "true"
spec:
ingressClassName: nginx
rules:
- host: docs.distrust.co
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: docs
port:
number: 80
tls:
- hosts:
- docs.distrust.co
secretName: docs-tls

View File

@ -5,12 +5,17 @@ resources:
- namespace.yaml
- ingress.yaml
- website.yaml
- docs.yaml
- wellknown.yaml
configMapGenerator:
- name: openpgp-keys
files:
- keys/88823A75ECAA786B0FF38B148E401478A3FBEF72.asc
- keys/6B61ECD76088748C70590D55E90A401336C8AAA9.asc
- keys/3D7C8D39E8C4DF771583D3F0A8A091FD346001CA.asc
- name: wellknown-matrix
files:
- files/matrix/client
- files/matrix/server
generators:
- secret-generator.yaml

View File

@ -0,0 +1,6 @@
apiVersion: viaduct.ai/v1
kind: ksops
metadata:
name: webmail
files:
- ./webmail-credentials.enc.yaml

View File

@ -0,0 +1,118 @@
apiVersion: v1
kind: Secret
metadata:
name: webmail-credentials
stringData:
WEBMAIL_USERNAME: ENC[AES256_GCM,data:9tO99BuuepmaOB3vDS+Sovlxiw==,iv:1QnVUEgwZqmJiPfq2eDODCppmid7MAwwYtit4RQGiwk=,tag:nTKA86gwJzaCQG9jbdsCkA==,type:str]
WEBMAIL_PASSWORD: ENC[AES256_GCM,data:G86wfaVvxJcyAAEf+hfNXgt1IvUlXAbP,iv:6nrRUBkRCryUsA4Lk0Qlxm5EwdPvVmJ1NtvD4H/Wlhk=,tag:Mk9mSfSGCO8ceTq7+0jCFg==,type:str]
sops:
kms: []
gcp_kms: []
azure_kv: []
hc_vault: []
age: []
lastmodified: "2024-09-04T19:29:32Z"
mac: ENC[AES256_GCM,data:iBZgkBJcRK5ll5rqCyo+eoYBRlZUNPQKMVo/fkcvWygX0vjPUJes7ZlcgUkMvLKuE7sg2Gjxfi/Hz5wHTHONHi6H+NrX8wMV5YBADyTit6iUnY+E4prKkO+4UjNApJWK2qkYSJOmki2tsgnSOtrOBE1kTzrQk8PX9mro/6Bd9lc=,iv:pCyFOQUA6DKigmL/AhaqDZ+ubhFUGfTuznDv9RSK+ek=,tag:G7getVh7S7ehj4pXI7mhAw==,type:str]
pgp:
- created_at: "2024-01-11T20:56:23Z"
enc: |-
-----BEGIN PGP MESSAGE-----
wcFMA82rPM2mSf/aAQ/+PJZZk8l5rIqLgeZzumY/oZYbgSLhB1+kfrQSFKuWlWU2
wO8dabV77egBrHrViU8ZryJeq9rEmAwEZPTlTbvGdP4YWkXuQvjcnG41a9047p4Y
t67hvZbqdrLhtpAbYYC4DqEJAlQIFC9CfCCHybU3NvxDOntmSoXJ1VRdDwxeT4k/
2/W/4XbzvrV3mK4pocHryFkWfitplt92TQS+N+Y5mrRZAHioQNvSjD+mB5qllIGE
OenplDUOR5K28lAhKwJi9YU+4Q+WwRILn4Anh2kbthkOKbR2V01XEE7rZZ7miSmJ
HSSebOokY0KEwc5TS4YJjz4VJ25UTcw74z9oZXFh5UOCCbiOHS3vRqd8ZvbAOtxg
N69bHW6I61EvAmNj34r8ZIPYDsAUmVWg3RODzrHv53XH+7TIRAVwtyf0sq49BJz7
NYOIoAh3gfdt6AcX1wzE3NPO6GaF9loccKHzjZlgPrcG+OIiCfWvLe/ZSdEfWOz3
2ts4TH2GCTt8y5A3YZv6TiJTqkeZp+aTKTWHZ8VPbb1f/K/LZCgy8xJtsdPAm76H
Hs0fra+/igXCcsTn1hy8ApBd0kQmtaLfMdABJ4rdeft8M8ZYUE3hx0nk6nAY73TM
vUdtLKYYTd+8ZY8e61Hop7MEsxnV1MRCmxQYNTBCCLXyEb7EXBAFI3Dd60C29ZXS
UQGgFne06+Ylj2sDkWOEVDe6YJJ9uQpFLuVS0wkZv5k1IkSgQn+vIZLqo5ltWFlN
5sovHvmmclSlC7m0G90ReoNpSWP7RbSddqI3ht6H5GVYCQ==
=HuH6
-----END PGP MESSAGE-----
fp: 6B61ECD76088748C70590D55E90A401336C8AAA9
- created_at: "2024-01-11T20:56:23Z"
enc: |-
-----BEGIN PGP MESSAGE-----
wcFMAw95Vf08z8oUARAA55KjH0BV0S3PzGBlbxNr2864BRPbHcupAj52Smdh/dwb
0GL64ULgfFoytddgYXeXVKPwBw1l8UIZnRDoMZyeTlUGKrwR6UgAtYcs/BId9/jF
B8yJzLk19d1ld017Pl/3zGE6/2YxnE56MMeX+4Az8K1z1EBVOI5XFBjYz+r8tG0q
9j2ypWtzLK9Az0g4V5kTrnGQwA3NN3siF1Uo8lvJzL+YDVV7d9cfB+slYM0xBOKn
6amxxwKwRZegSckPg+/UWXZOdj6NEDpiQz94hQMm4Bm3N0HtrulATAMjAiTFfzst
W2R9X7U9FCMwhX1wi9QMVOy5crbBMMc3wmv0b3Ya+5smnrr/91ZDwD8s0fHKk/ju
BVMI9DaA7usAvlziX8LQv8Be6EHQSnBF3cDVQSTyM8TFtbQMMKMFQszbsRnvRqs1
k4b3veNYev8fJOK5JaQTJ+Wm7uFm22tw7Q6orSoPuD2+gIzfWzPFU1q0I7ROdN9h
sMc+/ytwKCU3oGbSLQLAyXI5E5czRJJ2797uwLQ3a5aFUSP3/iR/qfu4/MzGDgnW
XNVYadheL5xdgwnugm2CeYNwskZZXgto/bwiL/+jzeTmX9GfKN0+Nl2VqZTSRw+0
o9MTmKsZfq7BBJ/eOJhD1xK5rF2bvduQ9re4LJ8+31RGTN0eXWvQ43jU5FA6tF3S
UQHrcMjwQaVpVMNRH5AjrMS2ZKfMf+Ehbjoby6c+7W/zkOgYkPLI8dKFpUZGjPAg
YifFb+hBtcJTNiNJjVU/QGEenfMho9X9Uu0QmjyEbbXnIA==
=upcn
-----END PGP MESSAGE-----
fp: 88823A75ECAA786B0FF38B148E401478A3FBEF72
- created_at: "2024-01-11T20:56:23Z"
enc: |-
-----BEGIN PGP MESSAGE-----
wcFMA0/D4ws+/KPtARAAt1m79BSP6vyV/zZNl+2tiI+1KLA4q+lMcWpzD4YAkWof
VDKGnr7sxDXA3EP5SZoCz9KJuKHMxc1cDgZ1AGNTNHYRVGyMNmWLbbqfX9XW6pZT
MuDr3W4wZc8aJP8sL8VjknbzuXTQPqdu8SYfHSPjXmNz3ai0h1dmYWJBF+2E7Uxa
r223JDz6TwS1VMk8TtJvlZgx+hCc1hroMmO5Su3CsbSum8ccRSPCOzXzURloM5Jv
xWZrmTWSsvg5lb8MQjnJ2ETG8alQDAZOgsK72Brq2baRZCcWJArFFMx7y0UlbBML
PYlC5QzsKFEnCC6lF+V1O1jUFgPYqs5Ck7H0kbfZbSCiF9fs7lhi2tQqRN1My7aX
cy5G+rbRg+4+TaA/xBssMiaCVSnI28zotrLX+Q5q+/laL+AdMSWTtfYbGpfEiLx0
ejWym/PJfgeozZsUXdcZsrVmMowksVyP0cnczNFBWbUVcSFRZ6+KaNBobjr2hiFC
NqX77VhkKnDsNE7HIo42yyqjU5ipqPaLp0qs6pQquWVNb/MBid07S4KBTQ2HJo79
tTki8djQBpBGPZJj1hwJvUtb+HuJTWEgI2Az6Pw9S70kmdWLSnp7aJtHAP9/GN+b
NainzJJ8mwv+03ohCxPHUercRtlSKjws6miCKQkxdGpqVCMrXlqx5XV1N3BX+PHS
UQGLbpsU8EovlP+jyc7WIqPAcGl6UGpHKuEJtk473eWKAwdoGdM2hug/83Iru6DI
pQN6SMixNNNpxvhoyaHhFyYFzC5Xj5YO/obEYpDfJa7tWA==
=TZtK
-----END PGP MESSAGE-----
fp: 3D7C8D39E8C4DF771583D3F0A8A091FD346001CA
- created_at: "2024-01-11T20:56:23Z"
enc: |-
-----BEGIN PGP MESSAGE-----
wcFMA5Wf+FyJ+zFJAQ/+OZlDJaJgpA0OZIXM4zRaDwztjdvrsmEkupUH/mC8sXsJ
1Q7/pVDJZqi5z/ewl2EJGyar7uvmgVVauvqOGVP8pIb04hL16M7p385U9VdBMa9V
IhBIYDKQi8Ia67xz6kQsMvT4zvzo52Z7opb6Rmxf3qQt919iOLdJRtJXUX0Vhjs3
m0zyBw4jji5zeBcfNWFxwLe8Ie5+0E2zZpyakQobTLrinEzTqwOpoEi6p18b6tWw
/tLHvi52TejXxkfBVsBzHMDz44WEOMu81BG13BY2JvSmOtj9+yPad5SMBy/4ugti
6YN974B7Dsetsm8UavMj9kU44nh14oZ8cPJ+sbf0POttSXJJY98+i5eUFptrIZ0X
4SyUo8wMkxHtDiL7rx3nkiglUkpG4H4+uzcaS0y/A9zlQas+igYL5YdE7CL/M5ET
V0UWNQEVqCk3EjCFYGR6Ccc3nGOtxnc3eWuBDBCd3oYINjqci6ZK+ds8yIqUY64B
Y29bvQvLSBGWkJs7ol86LyuQrFC7vvLZelsGvkSjwaRE/Be8AADgreZe1BHC91cn
eE0vr1rY8RcVvFjbLonzBhO9aMC5o1FkTbmKbpYcnrB7VyiierGMe9g7wRxcJrEh
SMvquMdOZxPgiB6e1yJ44WPsWHZMQvBjacCToX9LhIPe8QsebnrIHny0GYmYS5XS
UQGiVLKMnZJkACJGLtotqZWFPJi0oE1B+X3+wQch5aYTDWqtQqY9aDXSHbKSvZ+u
MU7a2nFCcMMrlM3Z/MzQNQxD5az/NivyIXjT1tOjc8PiLQ==
=3nk5
-----END PGP MESSAGE-----
fp: F4BF5C81EC78A5DD341C91EEDC4B7D1F52E0BA4D
- created_at: "2024-01-11T20:56:23Z"
enc: |-
-----BEGIN PGP MESSAGE-----
wcFMA8KRInHl7Vz+AQ//WXsaXLEl1BDCWBw0sDI02p8QKUosA9JOSr9Za5iO/G8v
Pn5JU1Fk5hAPvy874pk5jlGSSyXsO9b1PAY0i18kZ8/MMZgolyNgi/mK2B8QvixY
zOr6tQ2aG84tbVmBO9rt+AVkhggOx/gu3ZF3gWskjs3dY7/mD2krhNynIReQfTUc
MpOWmVsPh2x+8zJ7siECIkD4stNcgRGKAabQHRNig0Zg0dJhsL7z8tVuGzZGCDbu
q5fXPF0bM5Rb38g9DC0pXp1WAfdpCoSh8LoOrF7UbWsQFws4+looAoarFzk0tUM4
/XTZTzBEAhf/f/RX9yJku+14erwC7hnWnM7Yr2O19lfQ1ZNuOqkZKFLT8kV4PPcR
vB/3OD15HGvQD3T7DQUe9C1kFs3u1Kymk0SUocv5xTRTvbQQSEqe3KkEhh3yjb87
0ZsEczDafx9b6BSG7hEUyBhND9Rk1FjbGM0u1Kowy+oLMFrEQ0Z/wtm4bam5Nyho
5i7BBvFUquSfqh3zM+uzd/69G5AD4B+E3VDtz04cVqzNYbCmRP9Tof1czxiPYJ+1
kyqlk1Kd53zU2RtH1K66Dy3VNHtjVheccEHhRYCMv1q1g1+4LgdaBkouqfNld9Zc
9OfK8ZYeeH1iiTjgvSB2FN5ZBZYSEfs1Hnfw0XpyZcPXxPw+UA3h0awellWk7D3S
UQFE/ARKfbhBbLgbaCduwrF2sWLMAj5WlQv+z4QLJkWire4Z9A13qUEvUNvys+i7
/nOXorVH9UnvqXobQSAT8I91/LzkyGZB7lZrTnHzKQm6pQ==
=tZkd
-----END PGP MESSAGE-----
fp: C92FE5A3FBD58DD3EC5AA26BB10116B8193F2DBD
encrypted_regex: ^(data|stringData)$
version: 3.7.3

View File

@ -19,6 +19,35 @@ spec:
ports:
- containerPort: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-form
spec:
replicas: 2
selector:
matchLabels:
app: web-form
template:
metadata:
labels:
app: web-form
spec:
containers:
- name: web-form
image: git.distrust.co/public/web-form
imagePullPolicy: Always
env:
- name: WEBMAIL_TARGET
value: sales@distrust.co
- name: WEBMAIL_CC
value: team@distrust.co
envFrom:
- secretRef:
name: webmail-credentials
ports:
- containerPort: 4200
---
apiVersion: v1
kind: Service
metadata:
@ -30,3 +59,15 @@ spec:
targetPort: 80
selector:
app: website
---
apiVersion: v1
kind: Service
metadata:
name: web-form
spec:
ports:
- name: http
port: 80
targetPort: 4200
selector:
app: web-form