From 5d904697c59c07ae9a8238828dfe474cf1415177 Mon Sep 17 00:00:00 2001 From: jerger Date: Wed, 21 Feb 2024 18:14:47 +0100 Subject: [PATCH 1/9] add compat & logback to native --- build.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/build.py b/build.py index 6b4cb14..2b31e6f 100644 --- a/build.py +++ b/build.py @@ -121,8 +121,9 @@ def package_native(project): "--no-fallback " + "--features=clj_easy.graal_build_time.InitClojureClasses " + "-jar target/uberjar/" + project.name + "-standalone.jar " + + "-march=compatibility " + "-H:IncludeResources=.*.yaml " + - "-H:IncludeResources=.*.xml " + + "-H:IncludeResources=logback.xml " + "-H:Log=registerResource:verbose " + "-H:Name=target/graalvm/" + project.name + "", shell=True, From 04377f0daf54c84801d805cea6c121ec77ef84a0 Mon Sep 17 00:00:00 2001 From: jerger Date: Wed, 21 Feb 2024 18:14:57 +0100 Subject: [PATCH 2/9] update doc --- README.md | 105 +-- doc/Releasing.md | 77 --- doc/architecture.md | 38 +- doc/architekturbild-c4k-website.graphml | 632 ------------------ doc/architekturbild-c4k-website.jpg | Bin 106775 -> 0 bytes doc/meissa-website-arch.png | Bin 72108 -> 0 bytes .../build/image/resources/entrypoint.sh | 4 - 7 files changed, 72 insertions(+), 784 deletions(-) delete mode 100644 doc/Releasing.md delete mode 100644 doc/architekturbild-c4k-website.graphml delete mode 100644 doc/architekturbild-c4k-website.jpg delete mode 100644 doc/meissa-website-arch.png diff --git a/README.md b/README.md index 8c25e8f..10d0321 100644 --- a/README.md +++ b/README.md @@ -6,25 +6,62 @@ ## Purpose -Delivering cryogen generated static sites with the push of a few buttons. +**GitOps for static generated Websites.** -c4k-website generates configuration files for multiple nginx webservers, and -corresponding cryogen static site generator build containers. This automatically downloads a `.zip` from a specified gitea API url. You need an authorization token to access the specified gitea user account. The build container is based on clojure:lein. +c4k-website generates k8s-manifest for a webserver serving static html. -Following the example in valid-config.edn and valid-auth.edn you can add as many websites as you like (provided you have the DNS Routes set up). One set of configmaps, deployment, services etc will be created for each element in the :websites and :auth list. +c4k-website is an example how to create k8s manifests for OneShotDeployments with https://repo.prod.meissa.de/meissa/c4k-common. -Configs generated by c4k-website consists of the following parts: +## Features -* nginx deployment + configmap + service + ingress + certificate definitions -* nginx deployment has init container, building the website at startup time -* cron job for building and build secret for storing auth data -* respective volume claims +- [convention 4 kubernetes: c4k-website](#convention-4-kubernetes-c4k-website) + - [Purpose](#purpose) + - [Features](#features) + - [Serving multiple websites](#serving-multiple-websites) + - [https \& Letsencrypt Certificates](#https--letsencrypt-certificates) + - [Ratelimiting](#ratelimiting) + - [Monitoring](#monitoring) + - [GitOps your Websites](#gitops-your-websites) + - [Support Hugo and Cryogene](#support-hugo-and-cryogene) + - [Try out](#try-out) + - [Usage](#usage) + - [Development \& mirrors](#development--mirrors) + - [License](#license) -c4k-website is an example how to create efficient k8s one shot deployments with https://repo.prod.meissa.de/meissa/c4k-common. +### Serving multiple websites -## Status +You can serve many websites, each of can listen to a list of domain names. E.g. -Stable - we use this setup on production. +```yaml +# Config example +websites: +- unique-name: "test.io" + fqdns: ["test.de", "test.org", "www.test.de", "www.test.org"] +- unique-name: "example.io" + fqdns: ["example.org", "www.example.com"] +``` + +### https & Letsencrypt Certificates + +The domain names listed will get their certificates from letsencrypt out of the box. + +### Ratelimiting + +There is a Ratelimit included for each website. This makes it harder to DOS one or all websites served. + +### Monitoring + +Monitoring on GrafanaCloud (or any other grafana) is included out of the box. + +### GitOps your Websites + +If your repository is on a frogejo or gitea repo, we included GitOps. We ask every ten minutes the repo api for new pushed content. + +If there is new content we generate the new static html & serve it. + +### Support Hugo and Cryogene + +For static html generation we support cryogen & hugo. ## Try out @@ -36,48 +73,18 @@ Your input will stay in your browser. No server interaction is required. You will also be able to try out on cli: ``` -target/graalvm/c4k-website src/test/resources/website-test/valid-config.yaml src/test/resources/website-test/valid-auth.yaml | kubeval - -target/graalvm/c4k-website src/test/resources/website-test/valid-config.yaml src/test/resources/website-test/valid-auth.yaml | kubectl apply -f - +c4k-website src/test/resources/valid-config.yaml src/test/resources/valid-auth.yaml ``` - ## Usage -You need: +Prerequisites: +* DNS routes pointing to your k8s cluster. +* frogejo or gitea instance for your website repo. In doubt use https://codeberg.org +* A git repository with your hugo / cryogene website + * the project provides a `generate.sh` (maybe your generatoin needs some preprocessing) + * `generate.sh` deliver its static generated html to `target/html` -* DNS routes matching the fqdns in the lists -* cryogen as a static site generator -* a cryogen project ready to build -* a gitea account which holds the buildable project -* an authorization token for that account -* and a kubernetes cluster provisioned by [provs] - -Add a unique identifier for each website to config.edn and auth.edn (e.g. domain-name). -Add the list of fqdns, your gitea host, name of the website repo and the respective branch name (usually "main") to config.edn. -Add auth token and gitea user with access to the website repo to auth.edn. -Let c4k-website generate your .yaml file. -Apply this file on your cluster with `kubectl apply -f yourApp.yaml`. -Done. - -### Script Execution - -Optionally you can specify a trusted script in your config.edn. - -1. `sha256sum` "/path/to/your/script/file" -2. copy the output of this command -3. add the :sha256-output "hash-of-file file.name" :key value pair to the respective collection in :websites. - -Also, see the example in valid-config.edn. The script file needs to exist in the `.zip` and path specification to the script file should be relative to the root of the unzipped folder. Scripts can be of any type - as long as an according shebang exists in the first line. - -```bash -sha256sum your-script-file # use output of this call -sha256sum scripts/your-script-file # or this -sha256sum scripts/foo/bar/your-script-file # or this -``` - -### resource requests and limits - -You may want to adjust the resource requests and limits of the build and init containers to your specific scenario. ## Development & mirrors diff --git a/doc/Releasing.md b/doc/Releasing.md deleted file mode 100644 index bce2d2e..0000000 --- a/doc/Releasing.md +++ /dev/null @@ -1,77 +0,0 @@ -# Release process - -## ... for testing (snapshots) - -Make sure your clojars.org credentials are correctly set in your ~/.lein/profiles.clj file. - -``` bash -git add . -git commit -``` - -``` bash -lein deploy # or lein deploy clojars -``` - -## ... for stable release patch version - -Make sure tags are protected in gitlab: -Repository Settings -> Protected Tags -> set \*.\*.\* as tag and save. - -Make sure all your changes are committed: -``` bash -git checkout main # for old projects replace main with master -git add . -git commit -``` - -Open package.json, find "version" keyword and remove "-SNAPSHOT" from version number. - -``` bash -git add . -# REPLACE x.x.x with the correct version -git commit -m "Release vx.x.x" -lein release -git push --follow-tags -``` - -Open package.json again, increase version increment by one and add "-SNAPSHOT". - -``` bash -git commit -am "[Skip-CI] version bump" -git push -``` - -## ... for stable release minor version - -Make sure tags are protected in gitlab: -Repository Settings -> Protected Tags -> set \*.\*.\* as tag and save. - -``` bash -git checkout main # for old projects replace main with master -git add . -git commit -``` - -In package.json, find "version" keyword and remove "-SNAPSHOT" from version number. -Increment minor version by one, set patch version to zero. - -Open project.clj, find ":version" keyword, increment minor version by one, set patch version to zero. -Leave "-SNAPSHOT" be. - -``` bash -git add . -# REPLACE x.x.x with the correct version -git commit -m "Release vx.x.x" -lein release -git push --follow-tags -``` - -Open package.json again, increase version increment by one and add "-SNAPSHOT". - -``` bash -git commit -am "[Skip-CI] version bump" -git push -``` - -Done. diff --git a/doc/architecture.md b/doc/architecture.md index f36a207..111645b 100644 --- a/doc/architecture.md +++ b/doc/architecture.md @@ -1,26 +1,20 @@ +# GitOps for Websites ```mermaid -C4Context - title c4k-webserver - Boundary(website, "website") { - System(website_ing1, "ingress f. host meissa-gmbh.de") - System(website_ing2, "ingress f. host meissa.de") - Boundary(website_pod, "website pod"){ - Boundary(aaa, "website container") { - System(ws, "webserver") - SystemDb(file_html, "static html") - Rel(ws, file_html, "file ro") - } - Boundary(aab, "cron build website") { - System(git_clone, "git clone/pull & lein ring server & copy to static html") - SystemDb(file_git, "git repo") - Rel(git_clone, file_git, "file rw") - Rel(git_clone, file_html, "file rw") - } - } - Rel(website_ing1, ws, "http") - Rel(website_ing2, ws, "http") - } +sequenceDiagram + Actor a as Website Author + participant j as Job triggerd by Cron + participant f as Forgejo Instance + participant g as Your Git Repo for Website + + a ->> g: commit & push some new content + j ->> f: check repo hash for new commits + activate j + f ->> g: get lates commit hash + f -->> j: + j ->> f: download repo + j ->> j: generate.sh + j ->> j: cp /target/html to website + deactivate j ``` -[![](https://mermaid.ink/img/pako:eNqNU8tugzAQ_JWVD1UqJaka5cSxSX-guSIhgxewamxkL01RxL_XQFExSdr6gtee2ccMvrDMCGQRO-wPRhN-UqzBL5KkELL9--aMqUP7gXa8eDGNFty2q_5cEq4hZt_bmD3CZUT169Q6wmrCJVIXzz3Yfy06B_kWSuMIKpTO8U1RpeVW9Dl-y7C7n2FJXjaa1EbMmgUfevys34DEOZ-DM68Nl9qLEM647NRNpFGxeT8h9JiucqkwKalSPccRJ5lBH95kvaEasgekPgBrrgjd3aHSnpZZoyFtpBJw27nFVIWkJFNGD177AIbgqW6UggdQKDVY7wmMQ_ujzNQtkIG_hgql8JmnAhZrc1eGWTtz3ijG-d-0UMRrXjfb_9zMpB0sCX7u0f6SqA6yLYC7BTAs4guwNavQVlwK_y4HW2JGJVbepshvBea8URSzWHce2tSCE74KScayKOfK4Zrxhsyp1RmLyDY4gY6SF5ZX42H3BTITMPU)](https://mermaid.live/edit#pako:eNqNU8tugzAQ_JWVD1UqJaka5cSxSX-guSIhgxewamxkL01RxL_XQFExSdr6gtee2ccMvrDMCGQRO-wPRhN-UqzBL5KkELL9--aMqUP7gXa8eDGNFty2q_5cEq4hZt_bmD3CZUT169Q6wmrCJVIXzz3Yfy06B_kWSuMIKpTO8U1RpeVW9Dl-y7C7n2FJXjaa1EbMmgUfevys34DEOZ-DM68Nl9qLEM647NRNpFGxeT8h9JiucqkwKalSPccRJ5lBH95kvaEasgekPgBrrgjd3aHSnpZZoyFtpBJw27nFVIWkJFNGD177AIbgqW6UggdQKDVY7wmMQ_ujzNQtkIG_hgql8JmnAhZrc1eGWTtz3ijG-d-0UMRrXjfb_9zMpB0sCX7u0f6SqA6yLYC7BTAs4guwNavQVlwK_y4HW2JGJVbepshvBea8URSzWHce2tSCE74KScayKOfK4Zrxhsyp1RmLyDY4gY6SF5ZX42H3BTITMPU) \ No newline at end of file diff --git a/doc/architekturbild-c4k-website.graphml b/doc/architekturbild-c4k-website.graphml deleted file mode 100644 index e6d4fec..0000000 --- a/doc/architekturbild-c4k-website.graphml +++ /dev/null @@ -1,632 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - Client - - - - - - - - - - - Hetzner-Server - - - - - - - - - - - - - - - - - - - Node - - - - - - - - - - - Webserver 1 - - - - - - - - - - - Ingress1 - - - - - - - - - - - Ingress2 - - - - - - - - - - - Webserver 2 - - - - - - - - - - - Metallb - - - - - - - - - - - pybuilder - - - - - - - - - - - provs - - - - - - - - - - - c4k - - - - - - - - - - - terraform - - - - - - - - - - - AWS - - - - - - - - - - - Hetzner - - - - - - - - - - - local build - - - - - - - - - - - Mount - Holds website data - - - - - - - - - - - - Mount - Holds website data - - - - - - - - - - - - ... - - - - - - - - - - - ... - - - - - - - - - - - ... - Holds website data - - - - - - - - - - - - Folder in /var/www/fqdn-folder-name - - - - - - - - - - - Folder in /var/www/fqdn-folder-name - - - - - - - - - - - Folder in /var/www/fqdn-folder-name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - out_conf.edn -out_auth.edn - - - - - - - - - - - IP -FQDN - - - - - - - - - - - - - DNS Entry - - - - - - - - - - - - - ssh keys -server size - - - - - - - - - - - spin up server -of requested size -with ssh keys - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - k3s and -c4k application - - - - - - - - - - - - - out_conf.edn -out_auth.edn - - - - - - - - - - - - - application yaml files - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - copy to -via scp/rsync - - - - - - - - - - - - - IPv4 -IPv6 - - - - - - - - - - - - - ssh keys - - - - - - - - - diff --git a/doc/architekturbild-c4k-website.jpg b/doc/architekturbild-c4k-website.jpg deleted file mode 100644 index 38e7b9e88e1b4381e5727e541e4f5841cc5af6e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 106775 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%0DXXW zf#~6t3lly#*9muEAFojPA31sIALn**cPaiWn~u2h58O8x=@I$|-*qZL@_h+J>a_wz zDYxg*OD|h?#zGk;80*Bd&%yFVzRha!J@%%IbXv>3bRS;auoiw}ItI|ZF%oKvV>}?? zXTM#Zt~4*E;#clCSY~XwQqE07{=i~6=UePkhez+cHCDgif&`Ssku)wrCB}r~E)GeK zw%MWr+0-OqruOdwY}ap=h~P~*QIQ|<@n5Q1z+S)A8ZdbD(EsbrcX}1%s#YFRozjch z`KPc)yDWt%6440Lz!O$yh+Y2OH7T=4o|S0NSRuGL4so}vSAvULJj^mBbxTImAcGnp zPjzKcJ6hwpeuqjTOdj49ZK*??)A3T=q%33Wsq(P|tr-qSA!E9{fbNy|Fx_?97cCJ3 zWUVNS;RV@{-ahAYa|>9!EUR=EJRG}(m7yn`4eyOCIcr`GXU+C_{1<1p9d${jyEa^r z4#EBchP?i+X96yuSJU%z9+%RW!bq1%01Ik)IWw&^6J#CAz&qfPs7zBCWG^U_Pc?kP z^C8;($%3LT=YDh!&D>?tD?_HE11q!*o({g6OrQ6oEz7@ zH3H)M&d$`)L}>2L%QcTu(<^)}(~TWo5(^oSq`s<26TGUQrV4io?k<3zuZQs1T)*u?C_g&OJIB`4S*Y4Fgx4~ zOS3a*RGw{Yw;tpcD7c|ld+vo15{dz9^SV_z$23>d6Jb%YRM*}wWbp#6aUiyy;cMxT zUfJl3oM~=CU}jm!(ENKSTPpvJM~XPD)&0--bZ)28dU5!d3u?jbq7`x)bs&V6b2%kB z)o*Wz==et@FJT6Nx=PPKmriXTNg5j+8zWpzZdW)qxLM>7MH)_WRXuc|O7t|%8ro;E z-1Y8*MLKxs;^3Qd$Ih#Qg1>|4ZqM1E=?KcmY2ygQi=yJ(^S4#TCmi}rfmuw=VbrY{ z#Xv+;;I_ghf`@f@j7k*FK#0J!#eF(2cW zDL?l}>~RvGGm|qytQ&6`hjLP_tq|$tl(HEzv@p|Q<#qTr1Wfox0v0v2JR^HrL86@E zm8(80Seu-}2Eg(=b_P72o}VcltQACMtEta#@g*umU2-nOP;*<~J;s}>Mfb$_Y9bcA zRro#+&@$H|8@Jbn2`Wf>A~xwnP4l{QQj5fBo+EC9j_PHX8-iB~eYqWCFA0mDl(85; z>U7g+iy#Hxfo}`)PjG5gAJWQ}j5LtWw;32(no~}jp(Lno0xSs3jVfUi|1IPy3C&Cu z&F~47dtrw5SKIZ_VJV+b+{&oJZTQ9VE6-KeaAG`Ep!RTsVW83F>++rpHE`y(J1v&d zYKIMwZUL{`jRJTTWsd-TlN##j!le7#m2#^65RHn%G{AP#Au3o3n@G-JP`axp`U*t< z5k&6I7ci_uLzh+mC0ug$H4xGfDg$9YzhP{Y*ZvTMjrIv9g7)dUKE+Mof${|3#2+&M zO3P${Q$3Jp_7=e7aHcB4R60k?T`eG*J3I)9+$UgeP8+CI;~0F>#GW6>wWA-AHOG{+ zjrxB0O95fl>d(pK+Y!ysozwlxn=GgZ5xG$p@>LgyVz9COCA4zZKR->_zB7R1DWvbR z#Cn#3kIZd>U?lNqqqFcsawmfML84yBSyCY(6yIJExMz8fkcS{UkUL#t`?F`pMqkm< zi8}B>phlt}c!Nivm4{?@z&-qE{PzH-So)#;s-bA@FxAx>{F^!Tv(|dAr}D7PRDtA1 z{X;pGP2__&)-9un(ZRXS$vABzf!R_|w6wi;>zk~0JE~_7Z(Ck6s zY@Uzm+nDh2xZsTy?Y(YWd~4^5W{6hk2&p;YoqVI2>+?eicp{YyP$DV3+-w(;0DP z>*DIF4k&h|8r~$=*j16BrhaJdVX|<5Hl`UWo>Cpmhd_}__0OO7Do4<#XLNc|R|Ps? z8QL_wquwKnZg}-5ww~JzS>`KhowU2hD06vB_UEl}XEHKej zfBV4U0lP)Th{Zj;xX1V2i}O5v@@B1z9u1vXUhbKwUfq+ASmnl{uuQ3AOT!1^I6K&-@z2`6U#m zcYCX7qd~}qbNo6HS665A9B^6-L3#RBedScIvtiGxnLtBN>BIJCg6C9T5xKjGF&pCx z?oDGFb>sYM3{jz)waHrLKDSi!3bmY49lZ%eg4LrgD#-{Qu7Yga5xnrVPMWS zWQ7>a?-SAI+trM!kvjJWczNNOr%z8!Gr_{l(T;c~Azr`KH!B(=`ew9|oTDt{FUs3P zsnf-utKG9kj4-gJy-?gR{$;OlL6Q?H~fJ^^^0&r>C zfD4@RIHe&I4YhxN^C|M~iFWwyJpoJrwi`)#dTb8}4ct?~)9m;NWPIhlPz@H)lN70Q z*?Z7cO=%?f(o_)Xdwz6sB{wYpqf66Mpbvzyp0Ov|N&q7P{q(QX?TG{Z+9{ ziDpDk)A;lmY@M@YW*2n_op4}cJ-1BhDbM_zNbW}fnJywFCZEXIu2myULRpzs+llH3cf$qnp2xE*}lJ3 zXl`rCpznS8lI~tMEmp{L(CVjn(CO>-poyp{qb4`rWxb3Jt5Bgp#v9E{_e>uSo0(@~ zON76XTCk%3-~0*F69)CC?Ga3e0ZJ_EY!`;Coi@QxvXw%zlLnH(y8^O# z+kD=o1GZ#ESn9R0ezaGFG>)&Yh9w>aAaqW?;`VUj)Hha(>yj12!ctqa6qC||f=)4s zF{=tF+mz*40v1OfjU*`4&s={$ydfQK)a-w24u8p^dBvKR7SpJcjHGSUZpJlNA>E_~ zr`O*$XQ78_1OB=a2dBD9&#ya`z?kis*t2RK+scO&#So*yr_dpqszcGOs$-a27c5!2 zI#e{?F@QkgAe%mUcFAi`89kf!;ouN?^aEHVwV%UAEn5EHJyOZ^f~%q^iu_beGS(-VB3D~p{bf~ z`TYcE`F9&WI<r~l{h^q8)li*0GLiK?$6PO|$MAO(9rDFYjE?!>Ojxlv?B3_Z!I52=` zU)5t|loF&vDsti8rZ1`emN`S|XBwLnH9Ya$?m|G!CKMb+Bd5eL$n>^^xj_hNZdJ4M zTYeZlDI?Lr_M5SXH;DKBPX_KY7jkx%4(~(eF{4?^_C8Z}krL>m_s-*rw6CFWvZ_u9 z-4Z(lU?Y}Skz3AeGJM*`Da)b;N(yUT^$wo+Rxfo{&j5{}gRx!@dem%HO$qkhmA3Ra z?{($&1>VYvtFP9L8xX#?7&z=5?Z=WM1vG>E-Y}#&BUf?V^*Ynw{##!_sWzdpo|22o zp?^PEH%@o%%r>*tX=yhTGa@hTs_UF_QCxV zbT_c1DK#$^HVo&zU5a+cN(DPWyw`Pu_v_6v%KQ5V)bo$WC|;5=IZ~l^O#N2kMdd0( zUSv`Fa_XE1ND7z4OY`>$XlY~FslH;nXl&iPX|$^IU~Q+Xv;CQ^!X|>eJ$NZ1y~Qm; z!!l`n-H0tcEiCQg%d<|>11mA>=@I}za9uDBeq0Z$aaIdhxPlCiwtyZ#2+DcnF#YDL zbt9b5@heuudHZ~ie0Aw4$IK;1MS1v^Ym>`E2qWf{?KJ3PS+{3 z`0l;#tw*Y@DneRXT+}y6iGAffZ(X+z>odsoDm3&}FCRUXR?jupk*dTYj}R9cm(Tjv zn+Fp4cw-)buW%!Im!|9_shxd7-hF)z=hG>7=#XFKHx#e}Q4XR5lxlQ8%Etb$;V;37 zaHe=xW-&n+@ydNll^85@+I2poe25!iVK9eJs5Bl+Skxa~uNrZa z&Y2tFuRm(J-MRWPgoN$+CR;zi#p7~h>vw5JpeAVw6zk#0x;{zSQpxm>j4HGgv=ht$ z;J@ty!_7Zc7U0TXxFtW(EIgQ16Qw&dFjT(cQY>qDq|Kl;%*=P|o~!MigbGkA0cDre zF0dN2G>uj`s=182NWMD^cmBNKD%^qs)=GkXiaS5YV-;1n2Itl5?zdBLZ{r=qg-)69 zIpRx6ESPt!Ir=`B^BJ97DJxLFd7-XVc}USko9e1pwvusdE!_7~vk$f8Tw8TtmrTwXZ&}u^ zA38fdM)sEgH|i@?1b{R^KmHgvfa?3M8EePUI$WG1P$E5*z-? z8~QuS63D%D$+3jQxf#IV%li1&!T4i9UfTzF{$3AuSnGm>=oo0~` zR-)<8b`KpoOjcJ)s>`vXNy=f7jBRzXpWl3pi1_rFi+2P4TJqZV!U>y+_SyOjprbdj zep)3?PG1s9OUgCBj|?5$IuyeUv!w;gp3};hXS`D#V1!pF56ZA0x*q#0B_|#|--r*< zd?1yiqiWZ~OE|~%f&}9+=ZO{%MRWB63lJv!76H)9K)Du>A3}dU%)FB8-S==>7z40^ z+B-tpQ&$TIZ^D^q-}oHE!rrN+_p@#=(o<&etqAgDPtV_|miF;s=X)v|nKheZ{RQtW zF6Np>W=t-4uqzw9kYI^o7ytP{^1w&`)HZY;03->I2VokXft&cA+L<$(O2BAF%qga+ zVwa2*Qz&(Va5MbNH0d{bj!$NI-O3eZ4xUcuCVkbny730nY=Zxnt{M8}Xhef1uJFQ{ zvL3MY!Fd+KV9lU=&%il7Y+KM!yw(i>c1vz^u>=qJdpZ$I8rF z?zE^^RAAUM2Hn&jh3@wO02kuaUyjmIS?lVy9YBd0<&M~2IwyKYYGij$zq-7*!qeHd zL1J0yLswT9I>b3GL2|^x!h00qo>vJ1(Ksn3pl4ElsD}R9;lK5N=&3kc{lyAc1t5nh zUAt8Mqx;EeWh!e-v&@+Esy;9er_mD?chd6oI}691W`%r84Nu!r)@Jk(1sKD%$X1v} zvKu!hl`((r_g@}@?3H})KG^t|F5+}kAhSBBQuU!$47S?}yDJ8wPz9kOl%&#Wg4+fa zM>$PrCY8LL+5Ez8VNyNj&^YeL71b=vUfRv5P?xgK8?kX0PIDUv$IEr}Q?&7mU0%%m zQJ(Nk$nDQ*yKM0jIcv(#tgVPd%*#62ubBtpLmm#wejkVOLEVT%SgRM~ULyuYTKo}_fjSV82o=&evmGF&A{LK|lU)_{ zh+0acIh`Jev@^vda4}LB@UrKCg6A8h;3H1TNz^mo z7A$-LVqsP21xe^Bm=zGU0|$Y7g{s9bpf~seEaAdI!keVu0Oa$yB}y#ylCquh1ZNPS z%P|E&)Kqe)!gb-}{lm};-wC?!AnwJEzjq_TW5^DaI|^v$8Dfoc9Z9tP6#DyR?1G8F zgWN9x(x$uxWUx2_8Vf+ypzXrzlp3kX1ut?@?%yxtx1IpXRE{Yx&dxiKEjy9mgaf@S z0J{BahYJ7R7uzU3KrRrFQT+~zb+-vU_Q1BsU-<1xe(Q{Xdn9;&JdudskDNUkReSZ22>M9EgZcmRRkUq^|- z|D2)d6AG}J;mQ6GmfAoCmlwdR`Y=T%z8xy^Wn|w-xPE6!)*{!`;h3Ex6ia{49|U^k z3Q4KuyL3y&Q^51|rq3BxLC$PCzl&?P*GMe_tjev}|EvV=ANjw#GPW4iK{6cH#2Vs6 z4p{Xe5^|7Cua5E;oH7ErMGX~?dD}|E*pQ|7KtabX1|Mf8!gf?qj3ayYIM+n<9wdOx z8C4vztC+VQTP@i*kyb=)gvM73QZ*s!qpQ;{4s+jiD#(u}Ng&r#rV+z}V#{;Pgp(Sn;iNpb6_-MYwr2XoUjC-5Eq z$^7oR;%jKDxUM1A^F?knsU`@5`CxcHm-5S$76W#1YJK${(pvHb?uS0xwKWPSvN+mX z2$fH|rZfREtaF7gYCQJs%W|AC*L#EN*#`tmpOb5@SEg-ESOIb$4$2ekdfh(8W8_Cx z&u(>X1Uwu+Nk|ft;agBBiAFG9L=W}nKh`TyBnwgzEL1h|UnZy@+_j8`ivlQtgKc{5FKdqqSb;#!eL(Q4_we$x!nq&u1f@y<^I4wvjyi7Rh>Onrdn|Nf;F+6s_d z8#-7BEQ8*ioEG4A@OKxi>4!7e6f!>l=!_0oNp#F*Gc6J+&@w*bf9Nyb&ELhW|ApS$ zFwDw!5RZj-z-9gK-k!`Mw@};Zq&Sw6V+PSo{0b#?;gqMjmVBKG+h{zSV0x%V z%x7~>X)J$pl5xb0sL$NJadMF*=l41ilfk51dRU5heZuM#TSs`!jE6PBJxlS6MDFaGiMa&Ao?U{{h`i zKFC~Wfa%uhEy#$pPL8kH#AgFN!7<@FV3XgEXwxhy_LBAL{v=ClTT512yxr>(q2Rh} zlJYI@42Ck0IFSf0AD)w#c))GVq41^!)0k*F^<2^L)5YrX>oN0{qJz;uvjn~3;3vW2 zmUO<92prQ<$2<9LWktesVYey25v9|K$yvLL-#!i+O_<6&BbNYpVOA+b(hI~oln*g7 zlFiK!T1gBo_u7ZSMpg6A(Rq&Euqyy{tUw9Y4WI-|A7HR~52cO4UiUA{_5kby_LDKl z8hktlD975`EYQ1j1&TGlasif(7XaK?!3Y2H!^|tSKJdl_U>@PYW@}L%g&oKcNWi*q zW%&XE-57e#1_tEP;qY3({4oa%mm9#+_(Kg{xm5e&^oN;n=?KK%lXDLNn9>w#`;1D9C5JT{X#H3uFj zKVdqVcS}V`nA}d!)i#YUh_TkUtLJ0kw4z20I!uam@*Ig-J>R2;xes9L9KI9a$bPTa zy>Fl6qTW@yavpKtw{_fG>fZYB0OA55D$|y5Tm0Fd|M6ZylkkK$qxaP~LOus7v7Ul`(RH<8ug6 z&mn=Ps%XX~Kh?sw)~aoeF+uX0^1^k%roE*IJz)lLF>`S1h5VVhSn60(W3MT9jqps)?VOIm;QBl zhP#`%&=sai(&)SGrmfDV?M(u=-}-az@}GVGkF!WzhbvdU0%QX|P-VsunR(a?5{%Jh zGjOPxo5`a(Mua!X0gRBx10>zg2lOxkisqQ3!Ya3;z5nc6_^!9LyBiiaVr*jILUF*5 z+!4M!fG&yue4t{KIw_A*I>QvGjf57T3?ML70j#z+;5P~Xa#Sn&mnM1FX49`iGr)s< z11KcRIY5W~Z|{|+>EQU#DEFoT<~5dGcXrgLaq!s^xH@1XtW?;vl=Uyd|WLUpAtRA$Nk=XaKjT@oh|+ZH^h<=dSss*~JEIVB=7 z;oC(CmVoLOeXIPq@aio9O$N~VZa!&9D~vwsv(=dY?X!Fld!GHBDeZEhEUiwS| zPz5tTe6Ow7O6;yQMJ775UhQwCfc`(ML?_TXf@5LX3bw#re*_UT$^yB;h)ufd2@bD@ zCBnppCAR%i8GEfjr%y__HB4t8h0jO}Y8dEOQ_PJCA|R7wG2#Y7xsPW}jMo}7?UYqJ zDS~M~SXy|^9&v6va@J&46dnQW$81FJE4?52aE4HmD&gy(Z33JLKw{^g@*4qY$-nyh z|3uoJE~WPNzoPknnk@A1kq7*%{~w?m@rADPE)QJZ?f@#amCFI`-=+NvT&Gf0b1@*( zK#>0jbO7|v?q~n1?_2+_bEwtzyA=x{rS?Oh^B&?G;Rub?br zy1BXb{s~6dsp69 zRaMrb`bUQz*EJcbTAS30{qNr-dwv1fhte+1gk;qohgFXKSuh^Q_}{ z07!xXA=|#%QGHXN;*l_eTFM=A=vX73qu@YFh-}e%LsBgzH&HeJWA!UZ#(-CTBXd2d zoH?Om*JM%hu0@Y10!aLKkkNx_ue`IWM=t=b){hjO!U+_zMavmQBdNu>YtyE2&hg8# zbsGpYAlIUiGBFmpno_NM_8p`tT=)=BP>KVrTELxB;-i;6 z7c~HKDuF;^rGW{0-bZ;5&;xLy5(4I|n>zR~UU+=B_Hw}ydFMMw$$D<(40=SB0tAmf zD{CW&$}KOKX8<2z2!IXbK~Gps7S7rLvza*c%AyBa4`fL2ergC(oie-S!r8V8+}^xC zNUVgWT7I`lk?a*No48B0R)uEVVDH0?7w|XJxfEKu(aMcdta)P#mghPE=4VJ?G37t- z1OLUJq5A_{{m(F~-(;03f5<8)H&KdS0FRQP=rHIAUe_@YkrI3{wOE8ki<%LMQE=Awd?5dU{JtX zIrPDHjSQ+PFxS}iq};cwI39g{fn6+5>8907b~0=Rov`s5p!i_(*vYG<(naxs^>lgn zE?eD`x2XciZ!yX32^pJMhI!j0`K@0DY+c^dMB_kIC7Q|8!mX?m4TDyI3YDU?sOz4$ z$ni|neiBCh@30I1+Qxq&*QAnbPiNk@W13m%J6V3*0zoeHA*&Oe6)6R9As1E~6IK;7 z`>|0jWtd>g=U^8|8l(|-^#o*}ZC6id{=(^$T93ijppj~V?m-4mm6bc1a zBJTi0et97K7lWnHUC%sQwaeJ?PBbwlJ@^IQTYv|tGZ$Y;>B|>{uo1bCtXh0cZVA6$<(MF)=U1Symfy8mLa_scjXs?Ur|Of5lZh6cXBwZl z0~-&@uw^3-Kf7(bxzN!8s=f0b2E-Bc-K_qMBPd(cG+2Z&746s!&43p=6oG=4T&e6? zmgGF6@j1wGuVo5V6|gsYqU?Ku^LMSr=;1ObOf7Bc>E-N}TJ5+gARc_~jQB-5bl|+W zQf&(kJw9|NqPpq@md~=bmtqa`mVRYb{G!++mBrnUQ9<89Q3Qz0TXL&CkFc91EQEq@(XId&5s;YogZHIO(+m){i^xVV827Nat3W<@b(M;NJnE)A(KrYx@9#JlYeeuLg*$BB1z*;!)GZw0eLE$ii&(|!5 zv}2ZS^Xy#;QgdlM{L5mxC{y3|Jc~5WvChb=O`8JT@|!*pJK5mH;SGR>UhdaJWf*}k z9Kw$R13{8&;C0he0dC}F=xh+nFJhrzYYtLG9wen{%!xWAdRN!R8>Las>FiDpocRI~ znk~BA%mlscJ{jfcq#4sa{Q)%ZL=8<&!_^R>{u52-usU;$URpEwk^ANh!fO(s`B3_n zw;7miR$ci;efv(3C=c;iiFu)nO{IoTai zkC<@7vQi?O9;rb4g+8zvWwIeL&1>xHrF`y*N+9;dHU}uiA1?h(z@I=xwrrd;fo>mG zke3I`Bwds=k2lm8w)emHkeF-*Qg1TwyW!QG-5O`WTP2l|+XWr`t7gkLXgpzn>@K+@ z%8Snug{A$YEbDg#m(bHxfW|gC`GOJJS$Jy73WP|$8KwQFR#)nkQ8#pB10~IJg!ez~ z7dbWF8O5opl3-hV17}mv0-vbaV9nRd-dkZ!jT>ZkJIcAEO&^HN?8pv|YP52X1!gU@ z{hB1jYRcijGFFQV$Rqs)fAx>=`&q5EYewIE)|X$kpH@^l2W(_Gpog}n70fhB$1U|e{3k1-1HpD(7K$5$dLXVZ1PqTwX@hYkJ!a5R|#R=lXoDWHb&?=4XNZv+3^ zML$N~zho5g_uS(MpEQvZOJzKI_c|waG&~l6&A<*fi1?lU9h;klnuQNvz00f*;KU+x ztYl3I3CLyth&hO+t={aWs?Ap@A8ca6Ouvh0jvS=bUMBrn~*hcji4u-7|a7-e>mAcbzjoxVpONs(PyG32WW! zUiW$@Qk>siui^a48n!XWrKwWuqHDz;OKd?T#lGeb)6ffx_K14zsCF@+STpX$=4@<1 zp}<#!L-btV@WRc0j73(TH(#V6Y zc(ex!6u)|H-n?9$FaYtaqexWjW2KQ;9#+i=v3?1GsA~95f2BM{qf~d1;5aUPWjx9k zI>%>8siVXzd)PDMiq^wD-F8FDh}S>D3S(5yt;9<=SLW6DIsPOS9mOr}$6Z~FlJ%e^ zMZPr3sB+XK%T>Jk9j{RnnXa!1~PlM=vlAQ@Q zX-ifGF3g-n*1E68`$16-vLh3u_xw>et#XUF8V_Dp(f9)d-`yQk69tbbHPPfX2cnuYsZP$6EJGN6zdfSEP`mV@tb{ zpU-nsT$*s3#kZsTrIV5+l>iymapP1sRHzXVE?e?+BVx2dApl!V%w=dY$8*Bo^eNVGg*$u{Ca#V(<%x@> zacRMyWH7z>u#jRRH@HSnn2{S`^%Xbfrm&)sC$1)ao)2n7-3f3<&r3AyHS{g}VaeHp zDPUYBwe}3^ApjoKssOE|AYOvJt zm)*Aum#dLEb|@F|mK|27~5RO=vob_4xcyWi`+QQz*2f91dbJa7J2Z2yzy z=HDh?mArZUA9C6NAYAO-gbdYz+lDv!D~=)MQd($;Y_DBU|CoahuI)0r>0~Gr=yU0A zd;_9iR0@3C0~63ygVFDxonb=+XsktSSY_|dlwJkZT7Kp8BhilrqnU?1)htyLu1`Hj zzElTpqb1FouLnxkFogTF;XaeYsJ{l!#;UkUnOU#MhtE8%W~V6mni&eFw2M#QPOgCLe5Mt(uW- z42P_+r`AG=XTUl7J#j2)o$TG%$#tAG8(*n3#YR0|7C3UfEqAAjJZQvV-E1G^ zJT(fDcxu1UBsR{4c3NI!3TJS9JpN_=dWAdTyi^JAu5?BsoRA zS{tl%QAs-vJ+2r0p{e)zbv+6ff+vS$h}J27EDe+$0C}EX8SvE&G@(~i4IG+>PxPCD z`Fzd9?slJv)|U^)qfo#uzM5`i3FrPMhpf3H1_UyeIFphA3UUVTu@6It`7* z#z~zK6$kH&d(sJG0AfvoVa^$TP7e%F^A=(Atsb>4Du+Q;y>&cU%CBFT(*?h${f2da z9nEVd{w-W+y?n`PPOc3yUXVR2^Qu-)kTdFT#wuqk!-~+#JCQ{nes+S8`tcF>SuBR$vXrqjzCc|Jjg;%x%OV(0js*vvdf^357@ zIZPSSRymV~I^tuWS4ke+cU8dl9W^PUE9UFH)>X8Yr7|r{i~c6V(dJs3zsaNA5&n9E zQ5gfJixP(=*|auM?(lw2vF@CuK;N3~DsebO;HDu>hhxmvSD4~}6yi-pkIrAjA*LC^ydM-~TM>U44_Dc9r~RO$h_R zB{ncQ`x1`(hAIM|oBA=fP3KyV5wa)yg}E9h*n+I-r!s_>Zfp5vLh$PI;}*yWt# zwW^ASwX0;!)(efGZeWwzrDSOMd2v^ z%}>ZzgWX#J91@0xUzfmqrZbVSI+WEW`^`^^0EysT-Mk7MdJ(az)}l8nOV2#+2BPb zT^`fhHs^k5o4=Q=GRDDf_Bm_hvC7vzySG{AmNToWJWIi}$u^mjP|U}4hQZ-#oGugkJfJCh(qJR!8TIXF{fwO1DoXToK(zAALU?|AVXBKsqyyB#nBI6H&qAh(=Wh^ zB#t_|dRpCV_3T9HFQzI`U6$gjS7BFU1vHSxINcE#W4(JpTh#%3LF9=q#r+ohX8Lt9 zDmx|pr&ysMk|wT!tcOctMh#I5gay*fLYfvk##fJfjH}4n_^zeum&7*w>C2LL;Ala3 z8g0ZZd63Ta!%ZaJNct#edf@Q#WG8+1ae#Ng`$}OlhGS(RjMdaN+Y6^A0i4o`VPuu) z6)T&$&wx#od#Pf%iB~~QE=Zxq%ip|0Sb zL*(Ff=PA(@F2+D?fTk5t3vAUb5hrgfjf9cv{E|A3a!9GECyK_z+BzR+WYc@=wCmyt z#mZ9Xz08HJts9xQ#r@+nk+chqlpErCR=;&Uw;x@PL^aGVC0<+-2MfQclznP)|mfARE=bgC5Jss8)xnBWK2>>&rMf3EYVb{JcJ1;qpds z&jMUecb#N762QS0*`S9#SFf;Fix1BYmyl)+Hw)!=hFo{`0VMs1!2l;hfl3A6v+||M zYfyCzL&EU@8*uLAUP(B*EmBxNE9en!K$Uct*_3y6_E)C9xG&x9UUF}%k}$$_tQPd^ zBzfn$P6`Bll5<6@s2t@-*Uew?E3(ySxDr-XE0A(MU8MdL*X>{c81UPD~bvVMz6qDnOTO6vv}J4D_!Wd9i|qdXsE*Q zT=`XP6NS5bawzYw{0-b)8P4Zv4hfWU`Yda`qdT#0_T0^>1O&(;6YZZj1(EVwuJ35n zjuxEM2~^9k3@;^dqqjWPo-Af}MXlx>TgehTC7eeEha$-BO z9+3_vXEr#x=A#_AKxA(ZFYr$^VIPEY#KW}!(Q zVqriz_HxW7E8%R-I7#^C(G;m9g?%$Arnr@-!FP~y(+Hn&&j8o74JLy7ZD8|NO_(>Y z20Ig@48~qXLwyzeO|F4p)k)tpTUh0oZ36PnZN(gk5i@u8I7cXf&KI0F-$4!QkFzH3 zsB9%vd~2i|S`E={HqDh|4~bJtBax~b^JBi`?(~5ls~_+x)D;wMS3pCQQasgNPAPd? z?P=oCa@gJJ9Ud6Jvy+ueLGvN%*ovDtLt^T`wA$J`rKpB5<8@6kyqqGvjj0zEGvE=j z4@;mtys+%qQx~i}JJeR3=gEh-P+tRif@(@ex-pRgIWv0~jXMj&OE4$pg^5RXsr6^# zo@({wG3q4vvI(lXjH`<02G2HNv#O8!F}LC&=Wr+*4^- z%n;SngpBt(VIH2!65~77k8>4JKN0wT6%zNpqgNz3rqq#KcoBFsf3-|q|86NP$j$Q{xcV=_H5kMm=$YZSxHZi7?71bga$P&TZx}1n%Upu6{#{u zI)5d_9Lb_|&7C$K&mxXog6SwJ@2z|G285XF$MrfHU4Tsd9tih)TN+@^Df4V?Gy%?C zSLF0gE)qb2c`F(kDuE`h@0o@W(GuIL0(4S_cigJdVy+Ju4)IN*9y3I50H zHw>?#53B;cpB#}oUssq|*o&RrV*dyf?`4qxFq6C&DDKVLSSCL1U$FhMA8E0si=}>i z-`UL9U@?!X&E&NLMOoMtq@?#Unbo6CcYLU+cb;*)vJweU>F9?x3yJp(?^@IfWWvPW zW$u_*jwqLPg$)OIy~9usv-94`4Ab8Vx3!`qN$``Oirv6hU8CbWif|I{Q0l^5H&^yx8E1q>h9HZXb#6 z^X>+iSlRQp^wCxI)v<#vl?lVHCqU4Za{x>(4p=}&dR!0SSX_(sl-oibvvS2=ozA~8 zOy2AS(A8_QqxQc)ulc_Mu=@ELe-SkLQR`A1SZN1{p_33v1YN}!93Y(V@7BP*@lXEW zKacnHE4(~L-mt`VNx;W-jX49Dl@&!D7c&=p4Th^8l=luH-$7MSwdX)oWdOJ8_N%D$ zl5z*SS|L^-Immw$PdWAD-GYqLr!gG$itP56@=GArPhMZnC~?FCG^z*7L+i|~3;F6; zj9x!yo=0aR{SJCz64_GDoU3vF^9WH4t3t-sQMWZitU&)+)8SqpehkTVy;lP!_=#y@ zXogmgY5B;j#dnpkL#bRxKi+rZx8QvSsgV|^a&q0t)JZzMdb=tf7re$FW=^^i-Ihzyhd+tQbE~Tu1VAc(@1{ z;SQijn=U8i3BP=;xSGHMX2aZM1TZNAXq7UMlOGkW#7(Ku=eq+H*@SDr)d* zct{FeX^D6y%K(_6fefwQ6P$T-1Ow3>YD!x+gK>^)k!A<+ZtNhSgipw21V`FHoG_FP ze1ZU{FIm=qoWNZN!~1&Y1Ugm2O`1w8Yafe#FbmdWIR!;jFipampvZ9C{f_&WnEM#q z#~z2B;<=V=M|Bf-~d@9<8Pim^8Ynk=~;#xXtQapr{)^GwPLB@~IXhEEfEtR_Sep3-$rx zvj8{MEj^%^hmoCAyj^k5GtK;zSYxX9F56kzPoCVD}5t$ zW+@!N`7eOv|3NF+oN2D8?CrA#vAhZ6?;vX;Q>2aMn$L`19;|qD+f@OHxvF(#&`YFB zl?ZPMVJ?h$_vc7vAtRcw$~NAV1q3c{r2ky6Ox-DoqB>#$GM1ld9W$#J`cb3$nEvSb zL-q64dtKW?r$onMx@3wRF1mbxTBriMW8FO0vE1XzLB`(MeD2`YXGP4?HLv?o#O28( zKl8H}m{dj2i<(2out>s9P_(MpF_xhKF-EYN&3JHn*D(X~1%AzabADI!k`!@Hic3 z6((Detq|&Nkz0SlYqidrZY6YZ&yH%zB{~fMiqhQaQ{fO|Fzl%x#JVfP zU(nDNrND1BG9Fpp%JK#g52DalpU;`v~Q_*5X9wfHxK_1W443xZ=f2MNLK+UY0Yb@-vdS z)jhBfCkt9OzgKa$}Nb4 zA?ytZb0yjXr91cZiUz&Ipd~+HuBhuGf-8C>gQymKa+faftdiVAYFvCO zKFWjGaQ!JAn%!<#GB>1$j4zzm2WL^#Y0>+uz3#JJlh;oBicNI%z#%Jpk9%JWGCiIn z=ugb{tcbBOh^W22ZR9~z{K_k9`isC82hXU}oQT_LLo-<`&X;+2#^hWXEZD6n-xfyP zE-mh&Jw;QuvUnB4&})m|OX;I3By~HBhFLraHPTqi!=}vneg=AYkIW516}&i~Yu~j% z_VDoZ4Pm`ikP@%Xq1g1(bC<1`_p8I?81MpVdjj;64{xwYf^|Lw7W8#fPh7r|w4l&W zY7@OCVcbC-9}`jl1;TFGxVR%laD@Q`^3R+wI17xk{AJ(JNs zf^-FK&fc1kQ z_PRO-(yxx(^GnN!!=fKN!0g8mJ-#T))o}LyRPOC#v+&VV{%DTMnW(?$ZAOfKL&%1;D? zFP;@UJB@hy2!03MryjrG6bfB^Isx6Ku?HkYr?W?EPbZr$oO9+`-;0 zuw=bX!cykTW191k>#+B%&jzweq=|?WiJoCme!|K8F)AYe5y?_mJubQ8;^s;e(a=U6 z1VV;J5zKS5@c!@B${T@d<&D2qEB_*JkZ4=>(d0GRk>w(NzUgnc!ilgWgb) zNcazb8hm&x$J-XpZuG|COR0a@;#oiDnyQN0w|&oucIT3EdE)?UBRr|*RB2KyGOF7V zoiW4dNB6Gfrp3~aD|e3t!e<;mnHBO*r>91|yb6fIpPnfgnPbPp3VIgKEZy+l3GI{~ zxG|v3VVSy00{yqJY!(P_X9>{@qYfs28{1|%?q<`2JjOCHf7g0@`fJHA7y5KIel#m% z&wwX3xObHP0zF2IDl2=yOTAomJ@%X`O8*u6IK^AYFbYvGud*L^up&0MG5m2v&5l$_ zIj+s}_?_{u`IxTk8JtN5Y=wTKy^adr;SzyHFbBn2HKs zPF{FSD2=Drmj=$yPr)F#WvzFm-|e_@vkx{=bo(?!HHInD5(rLy?u7o#ECF!Zp906CNHEeLb^wo+Z?Ee1LEyZv{S@a6GZ z3r{hvaNd}uP*)i2$dA|-KCh`8fte+7ojUa1F5~jKMMgQ+!y@Yt(cfwz-bLO&*0xlT zVq1=_^d7Tsg+{Q5(sBArB`|vlC9zox43o}1;px1QZ7MGPb=6a2nuFMrCzU0*R zFKe5UjT&JyZ;@wT1B^L3I;y%JXFo-_%U2-!L{nd)WqRlZZM7exQkzphCjVL% zQqq~``sNR-^1R64H~-2fa;f}N+3kMi{g_j^fMkYj86YN_Mg`=&?RNJ31H`)`sJCsV z#f0E_w7W}XiP(t5uuH0+)}n(Q%9a!{bD;^67{m8FNW~V8KMy_3m0U71r#S_%f@Y45 z?;!GgpE9}2iTRM#IFlc;1Q%N5mFJ2 zKeH%){)BKAr$nJ#6kyaw4?Y+no%xuWwwPv|B?Uc`5fZT&+Ec zU}FKNrL}U7*2R^b9jo`o-ur2Q>HX3OQ64ECT5h}6nr4@pr`LxZ^pHzE#n+XO60wu8 zjgJ(wYY<+MpdsF#4lGHNG0vLCvZ`uScs%hmUt&No?%iXvs=kQJ4p|;2=n_tO2$hi5 z!h$x~cmu5_I4T{=@2}Y8!4v%rl^`N5%qesFf^)d#4mbP${!)x`tZRgI*WR)j7oEf! ztshv=%y&TV^(!m#bn^S5p1FE~4|JrCg`{Ke$=ZqcnJ6vau^eWTFFetGJj%6kcWS27 zN84vbl#Hf_LLir>mV${iPgQq2p}qXdrYysvH%tHVA$WBgU%p*i{woF%{D}KmRRFoJ zmPz%5v%*H@hnMBGPzFVtW^K1NBLR(%R7+(EpbVz4y_FDA`?NI6# zP5f8g59`2lm@yr)I5suQRAwq8CZ&GEY`W#+X(L6%;?jeZxm`D&lOU{-r%R4Cv~6hU)=GC-WEuGth;tMn2ge|t9Nae?Sra>UU*tk4QQiYayeXY zt5)Wd3(c!hellm0zPTysn}Lhr`ORAIP|-;-_k0Ieof~P!`fJi;yv6~r@m)8&s!Wql zXM}9{*H_r#U3PXnq8dtEEfDg@37*aTBZ=rWTJ;lm>IUA)Uq|rB)0)f_dW;9gWHhH~ zB`Uf`rSbMjyrBI&+%+sHCDi-L)1&}okQ(xT%WU@iJY>H@oU2u^HX?@5ac-I^iS`{n zqsCfXgf!bH&y}JlM@={2Dz%4(;Wkb%iYE{5JUO&2T>o6 z8#n(B61g69P%MEFYH|ar-l$UFLD^NvTegxHV>AcFe7IMk(8bsvXHz*%knC?fp^V;j zI{9z^DTMmN@*Iu!s86#Q<7Dkof>9hXZ*vV{_H*pFUlwamP78X5dBQ#{@4Xq(c>rKI zzYr$>S**N&PUbp`7e_WnK}J^4-q(=5Ve}AUB*n)esoAUvkf}$ceIKJ{eOcfYF6Xna zc^Gn!D*iPkyGg8{C&B##t{IaBhuX2wQP{Aywy@x4d7`^hqx!75syr<7c!W_YSCpaTGGk4haDFC3X3I6PF|FQilnn9&J zS|pX0{aYspWi;k#O^sjwv|?hsDzk}d|DGM8=LEg87?RJl6|9Fo>$mItEEeoQ$&8EdmY9Et$m9N7a*{7SeB?c!u38NzKx!;#m`N${VQ3ne!6oW_ zMfCyTH;2*W{hV7y`FZ(Lg0sPJDQTQ6sP4x0!j~rrk$1U1EZ<@E8I}>loP|d;r3!Ay z_|&y(G!$xsdv^BB*7f8Rr`8F)cL84(NPd_T1G?h>=6&a$$J!gT;q|hm*+!@fxlKBm zibq}oR&xe(4igz$raBX|0+6;zuz9tbx#ZNRo;&}}EB?JPr_`P}rK@3^{fJKuTb;bE z^*7!^^>@;k=<=J=lzzAmS^HxO`mF7# zqsE*7b>{DcX6{y2h3Q%HVz+~YKv3_2gY47&!58Bk8HqCNahg1dp<5;E{jx&4xsm~L z#uuNWmApA+T8}%sHS#j}FD|*pl8Eg;t9|W^CLi?{buX@}h%eMZB2~oU{^+kS=?wR1 zcbjsyy$gn9e9~mYn48ry^JBZ<^A(mKwnaWr{g6m5=l!`m{tEwCPFoPOm{`3iem*}I zm7)YYdM|9?7!&ES4%5^exko(hjL4m4kq*#xt*7gQ0+>3&>72 zJ0-(?nz##EE|V)_0`lk1B^9#T+#UVaKYXr}JQB!v;t*B-q-2ei$4VH+SGa>8eM=p} zK)Y!7#fka@S`zWlYE=lTHC;PZ?ewm~>a!t~*O7sjU%RiTw!M{Jde^lz0n;gvwZB*k zMoP-f)C0Mgl2>3P7O-pORC0UV-t+W32+wc_N4rW8`2@g~XO!?eM7s+8`Umj7Jvqnc zxi?eA8c^x)Cu=`@l@P1X({C-y@lc+qFf}|?;g%SiGwCK2;gbna<*VG{kkFH4I0d$VreCyx5Cs_}V@ zDvmMU6m!~I68j^-G$~0n-=`b)%am>@yzMDPG>@%TlB8c z4@TK87R1$ghEPG#~7Ec;uUzwynU*fgl4Ke^ad1)Nb;bqUOWKZ(Afv;mxvE~wUbP|Q}`-&z67B_HS;q$82dQniBgk zgZ-CY(Mr${|viXb1#R}m^pW-w3EBFVvM zAec23`Qh(Y_0a=zuYpi}5-3>fT2c|{1qQIuf7k6#HI{=t;~ zd7=4z8~-;c-(@dgl+h;v>@K5g8U&fMeuYmO&@rl2PsAv}hv|TE;~|UkZ;1wJPiIyc zr+tLL)_9cVLr7_(-Dyx6-h?aO73%K5kTD;}D9PM5oEaAxkBu!Gu(jpSk3Co8d(urW zJL8{Qd6PSWyNfB4`NnBsL&k!5h^~Hqfj4%{3{34fl?cbfPTCobk}~NNd4Ehtg3h*% z_a{YH`?C>|^mo%wwlkTIW+_=Vr^q(BW17*{rY{V&h7IK#%CGN?t(7ziax3z-k_oEj z7nJyMx0Jp{p^SW_km+WkJKPaupNN&1CtMWXb6G^rqxba1Y>=@qrB}ME*kKo@{h*qzxD9Ci!b(X3T85ATR4N(m8G+>J7Th`?GN`(xuQeOd{5VL&iS8$F?3F_Ldx!KT}6 zzb26--ZIM-eRy}c)09G^;Y*(%8dRl@zYp90{O_9g3gJ%<&I3;O zcR#!Dm7kfny_@YuF@K49ox$UPBi%(M5f6&|J=t;0hju4Hx#nORsn4cX)+kd`I%}P& zEwH}MZiX4zQJ>pb6x0+TsrIcCE)UrFR|KzFDI%N9fYN4_3s=IdmVqn#Q{O=ouqtH4 zla2Q8pt{i$=sT)4U|nGF+PX8AFIWjfZ!=!8Nz252j{981Pei@eph6&7%)_OKC0g(v zM^WO%z>An61g`9v7*Y0yAKORjTPy!s$%AP9WxNJOObSizqZzy;jq08gfU< z#U!kc789P1gG~`mEZd5?JFa-!%BeyrMuQeH+|!F@>oJtKguAv$P;*wzwYKkWWvfo#Aas;4q%S7~rrjXfRY|_I8s#%k1iVJ$*pH zgz)B%kT;v4feCRWf7gy>w<91CIxC6n)zP>!2b3sEnrqxGDWz$9o|#U#xO|nMl3bQU zRv6BkpIW0Y*;e(=qOwHq0;*>9CV&_sS4mq8!sq3BIu?2HBm>AZbp?1Hjj*PRQy+2m zP;R9RSws7)+`eKCD6yo62rJuXK#wZd@QMT|U%Ur!L?TswlX1;J1bqYyoOth6_|~}izb@e#N@AUv3>aw==R=f$p6JJ>vy4aTr+tO+O> zO9#lzG9e6sC|FAn1Ur3M)&8BRM$h#;amw4)B~wK_OybXD*L;y7%a-MAngLIERfqfg zuO%<;0bOk*neWfO_U9)NQD3>B%RYLW6@&7Fp1Exu=2-%ZIXtZ$S8~Ct``Mf}1yYFi z*=O~`D2Q$%6oxAS;eG${b2#G_I1_ljes#%6L5=L9xVD2>j0Q~=L5dSd)pGpFs8ANk zlY}>^88(II01d3gF#XEX@PZ96^H-dpKYw%9328+<1s<(f<0(?MX~%{M>D_qh+t^PwB9s3bS)Mv-XcU zGTF^c3#tX5qo*&U#lpo$JDtw)y|*ZS$g6?!)Kv^MZpz}Rgp|sCQ_o?Ic1)}@mLb%@ z|MQ{zBcK0qja=+AmnyAmnQ~r}tdG7Wm!qSa>Z$1kj1D7K&;OdRZT25(w5|UmfBXN6 z{Ox~CD>yjAVyOB>aRr3xcFUK@VE~3uHztL%wpcf`gfQpfDFQywuVq(sf0NC9zf7~- zI(TwGg9V@zjc)q@SrEw3XE<(aI=fv9SQ1J(L3zc?U0M0ls^47UV0Pn^b#CILXmqdZ->#+(F#h`qV6yi>|#L`z)C;xaTG;IFX_ zKlm9bxy@3lNXcCuU7K#n1E6-ej#?Zm9QS3pw=!2C?M)pR&f$h}N)vHjOrQP;yRAnWr zCxM7pjHA25hmEj0<qt6sM~bQK8oftTfLsAIZp}w+TMWA3v7kQ|2k6z)(A(OaGOW3Cx#N-$C7Chg=B1 z!ln~7P3hl#wQN*;!0YS8&G_ZH{TuSM6hPy$x?ZSHw|v z3wgALmE~M8at-DC*~#hb5GAYVPhPk6=_ zZMdLPS=pUt;z4%cy);UF!EwM1ZX|DvkR4$dbrz70j@8lsmX5r~eVIUe*nWB?&n||y ztQjS%347LRS#Z%!E16Q*5&~L*ofc6U1Zf;N2l#e&o!5RfPIe9vKsxC*ACj-u&MjO# zZ@+n|Gd=7XNOL~&1;JJf)cC%JVqN4+b)>EAbkiBh&Txp#-;fCFS+Cz%W@_oP(i`Jz zU{h!ucjgUBSiaV(n?tWnx=~1YrxWv@v>2C(0Zazu1}QoSdUzoD+NS8d8=B94mIiYO zPvLbW6}?M|?H?8mHjol3boozFH37)iM{@lE0RC`uvy`4b`-O2J!2R*i&}FI6CsL|- z<8mG=dDO#}7#I#9Ii_0lHilC65%KgO-P9WHkCYMu$z^SF@lbu`dTNnI9Iq48mrTD` zH9*b-3bc2AD9{2qqZjQQL~GF8OHKGSFl;iAW?9J6b;)mytAFz_!k>;Z{y#ZLHDr2u z`TSZ=%_;U6-Q;n1#2ok_6ABSaHh#@HB;)C1K9ZuOmRUeFc$hblW001kG6!H#Y-)4` zXURAz`1y&kk3~~sd4s|m)PV)SgEAz~I$O!wE>W#P z0Vtw{gK^#27V;|wa3q3I%a~Zpe03(+a2M_EeJAP=wY>}c91v@VTHCmPmVo&t-i*&6R ztb*mnOwb~8zGg!!ydFV2lD`yuGDGSDn6IP?rDyOJFUuF4!0c_E{`jTM|IX6e%j;;E)vMIh>&iqGv^Z2a!!>R$*8HUH@bIQvn4u;#%(f|5cFE6o(Pe7ceTAIU1-6`oyd47sua1prZ`|UoTZrbM=euy zy?641dzW(cy#+u}Iu%6DG8+#6om*V=G)FUvpSZ6+u1?DhX@>*G1cWgw)JZWfpi(e( z99FAqkfz(?6HJSSkd?6>METtY_{Z_uJ41hg8KM7$olrDf4Moa~BB57mVq#{88ApFq zIefAHw=9l7{?B&*yq%h6Y<=TrRM{O;O1wuh|kWOg^c~&7KCwR zSEOUUUvOGNR@N{4@%!n@51K-X)K8*0SXLfg^r!~Im6q2(V$pzR`Iyq<5;E!;yfv^A zeysNr%Z6`{dosr-TEex;QreZ zT|}Fw#V8&SXR%gqz$RkH+k7Y{kNjFGyy)1?- zmu%I)u{~xqc7L4zS(a!~g%wZ*G2jo&KsXT`T~NM-u=42d z7yt)#msa>qbL~AMm4OFn{q;f!|BaO-02v{kK-GK{G$a4{l5Yf?FB($Cu52Nd1_rop z2u(!9Tm#$75GB3rfjH$ikn_89GwEkX>`_8JwV(W0b$Y6cllqtTor>#b_majU@J+TQ zYmo?CsESPo^3Fp721b9D83vmNhgIiVE__Tw5zj^vM12f0a+$OD?(2G5m_h5vNhGCs zpS~$dVI(r>R5(PRPqucr%KS{whu;MZIy2!(c}%k7KzlVHH1e}Te*G@cxG-eb+XTq#~!vv#qR2-z4psZ?!Gi zd*BRvB-uri>+(Xdxxu`1aR>{E@(67d(fa#E8y6Q1CYwFpP9tR{*CgtZ-3l5~tEl;@ znb|KRyLM%d3o-XO>+p2d;Nl0~ZGN%`;~%40u&F7WgMF!*^(ZH{g(a^8xE?jP0nFRS z$%hb2pw#KmvgE#gUnJa~5GcR&Jo4hvZlU`)7gvRgIONE7j^_HguZd(x!Y0u}T9r>I zzR?QsJ`N9AG=WN&ae*CMGuu1$Z09BcH<+(b+LeIPUH^gif`UHxxd2h8JFol59@Tqu zU25Cs%b`}&!CM`jvyBTc=|>Qw(oi(mdaCg3A2!?s|H9$cBaZy7 z;$+hkAh-LHMC}p?qdz@3Ozw#5JpxwJhM14cscA`W)+rWQALxQ*wg2!p2hrYZiaV|> z+|;2jpJy8C=+CVxDFa;2Riwtlg=N=({aEmB_x>r9^ygR|({JgBn~^jHAQwVS8rzk` zUf7PwVlsiK?}uxpdPonHjDe;n)Z4LBFl0RRB@vOzR=} zvaD|10@jqQbgS+R*lq=R|4e}vrJJe3 z0pMlh8Y#r@0c&{T+ADv`>GHQh2cf3GZY(bXTgS7=-J48tIf4!f_Q}~%AD>}lbcVq> z%y;9c8HSdfw~M^*(jUxe+k2@Tc=t_A<)13p-tWJmJq4BkSGEZk)X`vXlD|mRmwYs0 z%|JyxKP=P*mmhv$|-_A$0Fl zoMsi%9S9tB(}?`+f&6>hM9JQn@tGvC4p^S6r1&Omw8))^l~by`hau$ED@-I#rkpk8 zI{Fo(vRHZYI@$%3r_Xq6z=tfIh69)(FEgBpGnQPV$Ij)v$z>>TuPh(pcCP2!l5L70 zt8jX;Lb({FTL@V=Z#Gk0E=Dx)&X;)+;FOrUX1UoyN)s4Kdc}C~-cS3cvsK%le*iCA z1(CdUV(zy!CEnkRG(`8yGI(YeT^C*3q`2)Vg(3wq!T|x|g7Bw^$3MG+Uk|NpMs{J) zjrA*{&cfF9a#8tJ36MQf=Q-6+sb6L8V=D7PT%VL^uIzQMm z@3BdRDmfO(HrVXF#}$|K0#jCE{Q7&IZG+*wiPY`ypu&xe*fr;pQ(Hm2;@a9vSG=8WbC4Jr`u>io$hFWPC00UFeW zh2#Y{uqR9%nonj1M*{LmL(Zr&5XgmiI$)p#+uaO`JBe7oq&zjIX2;kZ+0dT@% z2N)>2dDR>X9asaf#&=Momy*XjhkyG*D#&8fp$yJ(3vPk$9T=Oz|NaeTl{&v;> z)i%sC3=^O^O+?5S>zCi(_owsZB_O}Mo@M;rIZS<${R10fF6Rb3rS`sOH{+t?taUh> zwQUkDO%)k&HsK4JaI@BkuW_#Tzq_A*N8dCr*H0Sq=*^vXm(!xDG?DfK4%!z=JYNV} zqM02921di%+4k>>t6ekdWqi%lHV35W`PIue;IUiM?b?&1`x`FY*hIr?+}gt`+<2S8 z_mN(luww+QCFHyFnhyadmM8v0uoV*6j1D4W9khDd{n~fI4}P_|u9Us!409A1L;y2+ z1Ny_&Q4IYT$g4ONq-PWo9Z(PZoz+pEo}R$!`8Ce(?B9dsF^ryc;9R194s-l1w{YQ0|4n)GM@$?#T6A6=634-gDa;CUvj3w#YRz z)JcujP%cl)hQKclSx zzy9tt{A~}A-k%x4UKQbh=z@_avj=}s6@>nIW?Y;^yzX&n8qJ(Z>3rGRwuHfi7q#Az z?Y5%knn~C#%4-%NbF!|zPtNVC6nz??_Uh6_aXJqs0&``+JkzJWtnzwHV}LHo5+`!w zNtZ_emkk!r5o*j*v6*C+fKGFk8#KY0`6WU3{MNR?JD&sDyD6VlMEI%04Y-)=$mL-G z2a@|{O)XWg?)9S>+DJN;;Ex6dJlJ>-ad^w~FwNvASJf$^K0FFbEeX1aoNXV!u16ef zJ=CM~fcH$rOihoU5maNjeK^xfdC2c=%e<`-@1m7w- z#)A#q18#LD`@6lH|3V~ZYSpn)D%B^O>#FHhe(ElpBrBgXeFx(9qs-wcs=>_?rcGAm zvXXO6PSGPQ^FU{tL~bhIg)7$6u_I5cN@&qJ%amBh$yOtJ-^cUD;%_nb4wrP@JC@P18UCoD)5$!vNggQ7bU~4GyBZg> zt(C(PT}jI%br_+%>T-FkX^lQt>4gT3;B`RvS&na6y!yU046XZy?B^id6Z7`dLFPGT zQ*#TcTlnwCri89N(W`d6I2$cw$x7LPE9$%;o3Eq=uaktuoHvd&ZP34$8Ygn+nqO*t z(m!%D5jeRXU#GMq4Aiv_RGXwprLOF)jbKPs>lC%}Tg^C^PO}+N>3MLsFQ?k!uhk0H zme>;cvIlcMhu2vQsq4TU=tGb`ip8)~dKVbND-U{Lp5s_@rh*5&n978&9)OWw5R$!C zC$zQIU>A39vVU8B=P2&xd5%%qCmzb6Fra~2jRPCpZ^dH-f;4Cry@hW}|JYzis~*?7 zmJi`ZY%3*RV-9yCjk<5aoPazRF@s}PSJ_^0xO)U`R3j_e=j&`v77g-~QvGg;NSo`q zg#nP1w3Qg?w+S1Q_d0s0F*b%*DPY@g09l7D%1@>kx@*?D83VIkc{uf?)WXBN(#K<6 zuX(Mqoewh4;;T}PYjutylPpaQ+C@S?-ocQ^(8LakAI){0yKKsE-DB*Lm3TUi0)pH~ zH(h6AV4lVS={{+ixjxJ=EBPp}Ip4%_i>zHRS7`|siy%qV0LA-=3>$Kh?E!hyeGywU z+xlCQ*a74;qS)DKZ-mH21gisD&d51GHSSB=HP9B9`m@^&(Uw&NZBt2vW>8qY@KW-a zv7S(|oYzvu5p3zW?7f(}*c!21n|LHA;$!rwGvVH{1)%7@;K6Ik^oboS_i#M!V#m5d z-8nU9CYi7+V{{nLJig%*zo#g(ud&EoVrvKFr>_TE=B;xnS4z~T;#ZoDczn9UC8)_n zQ}5XmNw(*%Tfx%|aS;ecl%|>;y%T?wzwLAk5$g<+^Aiku?@nk~A>)TeiKc;16NXnj z3E#uM4}1TqouXu@_vcyud#*7^er{#D@pHFR9hJuEhJ=hIJtPhA2;Hzg65_N@7l9nu zxFv!tfjCr3ri5 zXmqH`!L)+h?9jeFLVKP}^o<6dE-DW|mjs@v_%%h;M5-wr7oLx9?rgG}{3hJ7y~Aq? zpei?^(%<`IJd#WM)mjeI;Fi~fN2BB39gNBk@hR^gGHWmAMZ2^KhGw>gbODyT(L!~> zR@M}}t+eAcccnO`qw=%D{jy20RSDN9fKK^KWa?|fz2`{;lI4+43tGHw+W;-(mXzv; z6N@pXU=8J(=ojsqxgy2b6Q_@#`M1e^4qK+nm~qIv&(*1{<72<+Sa@iZ7QP4!yrxX4 zQT6TKcjCQEVRHhKDoR|J9ED7A7s`&IQ!sb$#4Q;S5yI2!_enHJl!mjnrVsVqll&Ux z8x<5Yn7%H8%{%mO7<~h?8#FG7;&X2|j(5BlCeqs}H}a9R0gxEH)J+`gB%$YCNTHhP*6vs|HQMHp4&zL96i1pXcE)maen z{k?F2sG1gJzy3mZQ=p0j`u95){Lgs}yU><|EO^i8><-XYOawsp{0NKz*Vr%+KWdBq zlm40qs=EZR>4S7j=zXoPZ2GOpK+_bRq#czV)3ZPE@|>gtcDU)UD|fWq^6lRtllrbK zH4T*Wi+K%o>feP*}fp>NaKvDhvOn$lZA7Oh8LSWIjbk5{x zU(osM?6IUGp@@=rq%izzZOH0Z?WTG5P2oa**K&Vjbm!;VkV9uIfE=0>LpBh>&IHyE zLU5qd>o9LnrUV!lU>61J64$`XZX~Gq{~|k0=rf0N>uB#-YKXm^N&_JhJx z9vX%R@%HX7GtOa9jNq{qJF5-Zxt9DsyA#Xq{@i6%jV6Zz+9rachEf$94-b#~<>oYp zn`)8q=mD+jL#$67_m)dlbG#=z7B$SWh$f`PI@x09V|A+-nVja$gt(i>SU;3bE%3^@ zlw`D;P~cbgUJMb887|Niv4|XteGu__@xfvX#xzbC7An;nYpvjG%1Z0q)fH)3jCbXf zg+#6?(|+3@|7Eo*KWVbxW$fRdrX_;~$!{KRUk)Vlw-A}gjyLARy{RkIN_7RZ=lOC> zJPw|6%@Avemg1O*HEp2kxRAxhN`UlSXR{DZtQ{GO7TIv*eh=DSLkM%#b^p)$Nz`Z| zA43&XjD{ynTCS+4njKCSL5-X_yRA+PwqBrM_*ob!Ml;`f*+toT{m~_1?0IS%@3BO4 zI-OzG;_1!2jT7_dbQ*7u#L35;70K(IMVs5Zd2%xYA_CL%N^|N&kMj|+(lW9;sm;@Y zbAtrNDo?^5=d#SuY&$1oQ&R`&Mf99|#m%`dNQijoNTJR^gsj0&Lvf~7_PZB?|(@n(@{PPX~xlydZ3upGb-KWLGuSXTg&t<2Hk zYu_EJuaf+~3(fWtbrAKnbGFQtwWw10RR>-xPfHHa~eQuIpL{u+@& z2lY#V_faC);4jPt|Lz`m&RPC+7^E=F27BNVkrTDRj*TyB% zNpz<$C$Ksq+jfP+;Ya(9#aajp|_{ultJ4K?LoVO zyB4rFsi9L*9YA{i+s$*O4^g?o?8cq9LT8M7L%oO@7~(5P*5l1Gv{Y2;MxccU6?e?# z`#YwV<|Kck(7PF4j_JWWf8l;4%^{h6BJPKPxevPrtGnc>IjLPG&B2QckrMOL(T}7H z+D7*SH==Mz&=qmvJEpHgv)B9@wFzp6(#mSWjt*X|UTtZsebni~gFVf{LtKAeQJ;t> zoLt^T-Bj7MIXnJoR(F{91krg{v_Vq$naNw*$XhZInA}SBt#Yy}6m%nbR~w09UJcZC z@Y6nQ2d5IK1$M!MZ{Ldn>k<|n#72tQ$ZV6*$yUMXqM?Sk1m008nR|(B2z$7z zw}T2#9A-4ThDlqa=EVx0!_dG4#HC`h>-}0LcM?^LH`!aLWfNAn2gqQbZoC7nXjVwS z0_R-6Kz3sg{V_pQ$)%6s?$t)}*&jBuEbWnosf1C>AkB>f8o>iR%t;r8dllgHo&PUX?eB?9+ z^i}!kPtM>l2~-A;(go;$k^3T%Qzi+7;A%{GW*o7SA07OfuRYnxOWjmB^iL=KWc z$`_W~=hr2FGYzyD(QyGJ!8SioE~>nClF`@=>{&GF12uVBdR#p87{z`V@Pj;^9or|< z<5Jc)#2D(d)rGDwKFj8X-d04RZxdSP@u9LW< zKWMCMSqTq$GxvfY5Wl1KPdl!-aEe;T8|O0BE11$X%1RlT8`v4rF2$Q2?^8(oS?#^X z{75bXQ4#)ORosdVV=8tdtoB|`uoQ#HwyB(&`;QCN_rrLVd(@+npSJ&aAX%G0cr_^S z_@noruhaX_H?-6K$t28%{m{1VxytNsA@edrNTUs_6Ogti^ar~Aubj$@&>!Y7eQ5h9 zlhK(ns3h;k*l7T>V6y?})|P`89lC{3*;7YgcpD}?%yJu9coA~-S?a4SQG652ssjN& zs^$1_71~*Gj%z!U?^H)W%aHlkdr zOu@%zELjB(KauDyYg+(txS#{<7C!w_-zRvbJWRz@go^U6J?J3lO36u4t4G6 zh$D0REjQMZ0Y&?z$HUZ2yssLzSY#kB%l#3m0O|u8!n{7L*VZ<5@$)?#@>(NiwmWB~ zYd0<UZc+6{HZFa-{9#F=ccGfQu6 zVci;}Q>7_W<@CWO#U|zHRx~QRT>=+J{`Q<*u4jDtBH)XCLVY^D17(DLTub!{XQUTD z9-m0Z=WGB3YC>^pa|S)tAfme|xVVeWFpAwrO& zJZz~^mf*L^P5y|6+(mlvcH%>_1$?QQOqyx^>2@7>ocCDMdU~#y^zfm`j_ZjR(ka!M zc^^Gn&ivv-hs16hNluKX_fLit9Mhd_uJ=-faaB1nBb%vj3rkW*M86xsU~w-VzGPlL zsl^9Nn6%#;Nvz47*rLxRf1w7mz2?~aTvAds2WRbCJ05jJgzfm#rI)+fDR-jo=7r}u zT3;E!?JgjR;iMb6^bQ%s0FY6`d&rzKzB7zc{|PzG`%ZcC{+mgb%<=tmLK&sqp;#|X z#XcyNftvKaX_>sw>Z)yutr^p84^WAV{M%{1K&lDF5XDI|jH2B#GAFP;onC=r?N;?; z$=gbm(#0=?j5aC((xg&#SSjCim`t*^OfPvVX{i9Z@$7q|g?FB> zk=HZ6-}}7oDV-~DYcP4&-NXL!ibYW5$el|fMP|DEp6wk6tuWgdP$Y7gw=sEDxvJ7v zHE-!kyE%F7UCihAVwW8htp{RtQ)dzwt;1ZLzd&3?(vDp|3*?rXoejXdJJj^NZbzzJ z=N>eO>xNJ)y-Iy;9H|jy=Ck@ex>GE1oOTZ?#LPn z99JM?gy^i4BeJlntjteT){D*qpAR!ql(}sz%?g$Lu8aWvYn%?Osh*w>84g=5Yie=2 z?W9%7l|@M?;bakQZ9S$yXWn!d&8n;I(PiT#7@Y})K_gvf;=Y&oJjsmfP%CSA+}jaJm-D)a zcKfiAvvs6cqMW8;wh<(o?HLv?gzaLQi^eo-n#0T14L==86<~*@5nPRY+L+!p6VNwf%D_Eo z;*Q`2nQw^pkovNYh&2&!ckP{RdrV7aC8{Bua4UgY;hVobx=glAZN;ybRwL<_w^n)2 z^r*ih>g_nErtq(ux#TD%2lrLtM;I?zq7NXe$Q`wtBD+qfo`&Jo6Ce`csZ z(j2@62QhqJ5L)}(6ZubMfFQJ!vV779H_u{8btOzpkSWBkZZ##KshBC4p%6vkKgtt+ z{V0+nj7vq7L|NgDSV1mRLuTGQxwDoq!$7tWnm+!LmU2@(ZojhVJ889p=+6ta?-*WQ zU6Xwg1e;RONniK^*}7JPhjA5dLVBPguyB$k{RN_Aub2H0>bodaJbgTNQ53p^eg+_x zSZ+CKH->_b-iWEOBv0avbU$pvIB%jfJqW_}4e%Y_8atb`U}m{h?t|P2<+g`D86zqZ!r?mr!~|cIpOdpp$K{lNI^7{E4EK0XsYK$`s^?7xJc2!4E@$CpAZNP zsfXmBB*=oWO_%cclUIj<(t%xXVB>0{Q2N$k4-nI6cJcEr&f8SAliB1W28wy1)poHR zb7Nd0u5lz@fURvma67mX7Ff-kXQCWWIaJ%n5@lPFg1Jg?Divj0{!Gj^B#|y)`*7Ru zh&R&P)eN#;9Eh3W}Vh?0C9A)0tHB@{9`U+Ev?v}4~tO+wL?BUt2OT85-NO30OV8o&Q=5{?Ugc%W?`YObR@WI$;qK4CXcJ=k!T&X zAD?#5G=@2{F#mFKlznx){yky7MjCUk_kItF^$GC!mx}2VaUafqETvQKm&%s1OdD-= zP!+MiW8-gVJZ@7NH?jEwK6$<{u+4wfge5I0(5b5yWC14`(M`ZwG3;Q1=7$tDn{#ARg|==jwZ>p|i$A}hx*u;FW-8f(V-htYt0hj} z1ln4TJ0(npeinLnL{MDD)`lH;m8Y-Bq4- zyPOS2{3WveeU$qT&QV%kD1EIH1%99oC+tj#&}q_@u36`lE~@Tu-w1RYkW&dB8QMAC zNn3LUKp21E^6EUaLjNI8ASFBDb`Cv50Q^y3yXHyVu}gf&9%?m+0xyKbeILaC56=@C z@PZlV#%oG8Ru8b3gwD9r8D4NsX_sV=JJ{m%0zZ%eV1`zbbl92)o%fbm7fp}}83)x& zDp5CP;qAy9abKH8M^YxEE7bOHauA7Ds9`-`cx4{(cG22*Ma%+GrJF0KL?Xem>+rPS zHR9%gx%pPu9EUaIgVLF3;$V*j?5jcNhsRlVa*y6GW<3qlK zUi-dL!0*Mkj65>|OV@p!h94*Rih`Or{HgcJ9@1k;_}AGn0|*tLLheE`UN9l+Kv$)F zFMuj#CnRU}NfoIZG5>_ZRxR#Dk&2B^|7|4tT&Dmx-oPE!C% zj%ly)-~sSgFI1PxN;z9P%mxk5HtF*~EFfeaRxY?Tj5Vc!24+XB478MbDyoi8Ha#Y7 z-|oBfw3_xN=P1S~e>KJSVXj1sV9gSr0Y~kx9J4xNiO>^1Rh6eVGN<>*AUSc`Bh# z>iVXe`yKv}cp3$!>dc&uixXEf}pBB@x<_vRjbt*+M9%9 z9GRia{XN>e(~vRI5l$BK`O1>WDcL9TNn)3pr7`R4$wJaIgOf)E;qU7NfH|<8fKcJL zU+YuA?PLiZ}ya=A1(XWw+}IZ?1Jb-HCNlva$g zaeS)itVD%~vvg#evN(9dZcs%a>7=$*vqr=Cf^Q_M_4U!v_6HC6yu##a4Q9^IZun{L z;&jSRG5Zu(ndd$$i(DaWsJcgRA^!2$%+)owLiCqen*#5Y-C#oUC9=n;~vqx zp%Uh6G)0YN71SKz_$-_(or>)0$y`SLTt-wQr%TRaEE`9Y?gQV|EBM6}mnqV?QOA5< zW^R5sTC1Ff0}}lxxW?C{6^L3rJr6-#9}-R5B^-3D!#gx9FIwzL?YgD^bT*j=#_LtP z?KPnIC)WGsU0Ac&@)^F6IeKQ{cta=?n*(Oz1sMfT`92Z1g58|5tZyRh?|`sv@)Mys z3SQE1jQa(G?QA{75XjIep+M-sDIqNcRxwShVy>0eqj-3AM0l^G(HHz~C>Nf<5s zm}j#1s`>*>a7vnh)5ql;CGW;D^J*fiSE+BbS{J4F0sGRb7w5L&or_pA6!*;J1K=h~ z=@H=xQ*JVh8+wyY8jq`u?rVtqQ{zkc^S=s9Cq@~(i{m-5lv=fejC1Pcd*9cN<}NR8 zX-&g&^*lAyllt>;9HEYCR$BGJJ`s&8;j;nrr^%~4X} z>hx|L*baWyi2jI6V%kmsUL+deK9;r*t?QVMjQ9LR(PC@Nt0$iEcsM{q{y~(HHDb+Y z3`3in?gOKw)UAf*&8aC!u%!jF?y3JMG1VrCU}Jn5Du+XWbdG5D0`dzaYBA9!xA}4~ zkxV65yj%X;&2)c3RrsuJSsj{DdVTgd6sOrJZ&H(yz0~nKlf@T^arBa-dFNx=b{cak zdr&lyKF27^!mt8jy|A#WFEwg{-m&7Wy0{Ih+!bbsxyIJCHz7_J=|`e8(TeKXDiQyG zTQQyF@GPabRd3G$v}t?$Mv!t_p1pykOTpz=$FEY=-Y!w&rcv!~E9O=6q^@zX3Um?> zg+A=a;7jhr5W1Ct(t7^!OgZOTlCsr_elK@gCB0Pg>Okt6q-l0pm3!}HGQr*p$MX=} z-&W&G)PSXQYXYOxIk@Q|L;RdGtamo=!1x{CJ@x>%rZ;OZBZzy5?>Lho zALhwPjtwG>KqOo%YC=%yb86bE!`ag}4~|*uNVtgZJ#kt=ao{F9%47MV^O?)fX=5Fn zR0c!B*tluBwGcc(aoGS69siT-_^(GEc#(YMrJY8gZ)L#Xs8-qSr3TTm(2#Qx%*li2 z0f8G7w+HIxKPi`qH?#)R7k*J~QJBeHD1)(4@Omct$# zE4i-c)Y=25102)EExa0QZ~UPsx6Gd%njgR#L|}R?MTuGsDLKu4XZku}o^(i_lU~65 zVYC{v6p_tD&L>+|!EoHqgQ9U!Ag07|=UX z-VM=RkVW5=Y~mGtvrc}Lgr>kX;q9=hgBT<+grmzLr-m#~`uU+&vIpgZ2^#=OIn8YX zz2LpBu5J;Sy0X&#VfAP@srEGBZfZ{!#ryM^I#4Ek#8L+9&d94~i!VLXe29KVLTa0k z8Ik4U=xb-r0xMSkEOL}mUl|^4Xqo+5lCo*I)8I+G&`!@k65>Q?qH_2PnDl?|@AHGr#-qYjX#j6Pgz*f8dP$UNonu z?&>Uf*Sm0H^s(P$Xm3d0RBEOp&VtzujvoE0z44Wm73l6<$>Or2Td9sZ<)r1-;Nd;> z+E0`c+79Oje2gGcn7Ovu zJS!Ipt4$1~;$Ct+&kU|f@8=7osq-r^`5OxCP^054=c zo);K7B*%Ncp>oq%KPte_wV7Y4mSmpW>D?gZ5+0hBnWX55_S~~HQ;ASh#`hW81hZnh zbak1B6!S6g9_Z}o(|37(DrqOJNQ{Ij_rS2_H!XPvDiR3^X{V&caw0F14sL!+E-98s z$&WuSJ{S4KMfV&~w00~5oR`cOi01B-p~FD8Ta)S{CPv|#UQ^IICKo(Qc_-8y+x+nf z83%iE@nOmSOUZc?WeRWxghs{@G3v^_Cjq&7g3cyV7U!p|>%y&FMFFaq8qPIQYw(w< zTlSZm2koV5ZI;_g6~ap~2F|<1l;IaKG=Q^{`E2JPe{hIVqEBq8JXT6mN=!NHD}$MG z%hzr3?FW7Phn$(f3#f6W$m{4@Wv{LjeVU-s#y6xv`0F3DB`??Li50$X7#r@`8$&6? zh+Isv7dlq-B=z=eaa!%q{sOTyt2?*|a<`yR1+H7il+!qxnL{TXA62tey*bi}5R7+@ zlEA7Aw1n=lvx8bcp|l=Ls>;eZW<56b=KBn)SLQu^&~_l72&@lzfM1E}ldMMjo@gXr z_=u(;T(mtpS@z);tu!u4g{J+PF6HK?Bhq8c5{aDvGQ)C+ny(pPQjh_z2e9tlfP@YH zwc{gL5Ugi;9YDHDZF){m>L~ZvRfIw|kD}zYH9Ja;ICr^&7|DHjeXyPAysS^L#qE>S zrp&IaDPWlB`X^(B7I>oR2ic><;=*1HtNZ~EjLgwRYu9tZ$SFRzdF0q9*zz14)>dFX zD``fm@p!}1l6k2_jnLv+3SU;~5>ACg`~v~*W=ZGSrm70pkWHqQ)W{*`+s2)GT_Sg! zJIJoqR1hCE%l||*LpeUSjX)`$hLb?QK!`Jujot5-><$k@^4#Z;qn{j(0(aRhiivaM zht!wsi%X5C_>{2n+4Tu|n5yl_Ny|o<3w9Q3V~>2N=4NPXV$|5p^ZipEIBcKVhL$Hp zk(>Jc!53uRAX|=#8eLtd+^0Mm)^I%+0YyilS*fdZ5+c5Q=NaaDGAyLd4urvC4=`n0 zA$nm>nIrKxytZ6@&kZJICpzACS(4sv4dtAzkZ;^#dBDwmwv_M(kGy=d`&z}2fSVrj z8KNX|Y-$LUENK?+bk)QyT+LY=NUiSg!oH)ROTuNbl9*8K66SWcL|jda&2T{^Lx-{c z>i7r#>Q@?+Ro$I4=46O%_XxZ{c%I4;g}v)Jv_;U}-Ey1gsQYX6649K@+~vm`f)s0| z*4NqUQzZ!^`QH>=xxd{ktYi;1gj!)(!_sg^_n38|W5D7E2jSyz)Eg+FEzaxxIVvMo zEn5Ed@)?H_Ms$rMhoQ#hg>V>{ZO+VBV@#xP+J5OOZPIL&~BD;SC8-B$VsQy=i4KMJ1vUX*> zYrIfXVfU;rymJBn5KU#3;s)K}S#+f4pf5hIlMkZ4MH8#wZfanwyjH!&pL#N9_I5eJXo z?%N*xsert$v?L3cL+gUL9=Qd3#iR8@wtN*z5uC#;2MW4Adpf7hL*f?)r14nd0g4nk zq_a`GggHvA2RVF-kE9+p3~$PADV6)^Uvd)_YK9oJ&y&+G7#A-kC`U_QGASVO5cCz= z1Nl&AAFiHV^zZ}!Yt&PN_Pg>#tmj*nD|chr0%=V_^@`-W@_zF03VWAk4JdVkqx zU%B9+2*!YFi~j`W@ZW5oDO*%dDTgux=G)x~V0V|P08%b9iKMDBA_s+WuE|KwAOvQ! z$YX~3`i(C7!6SQWj=m4};VMke<}}*u)>U&~Kr>1j9tAQ{k6%$mi8a)Y&Z69j0O8|@ zTRDJzW*oM=26tDxuKP~AB@PlKP%OA&ZK|TO(J#p4pV^zEO-SD*DapqNOwJh}U@|{> z(fhN>3{d;rc}aVV6PNPsLUBie{X`W$2Na0h4v&a$42o3`*NP!%Y-)do^q(XBjd?-t zJZqF#?ArW9JRw4*PHy7z7syWJi5b$DoDSgF^u9pmGJ^^CxZ`mfhBB9>Ef@|;1AEUZ z$<);2IBtZW#;m*Q?6ATbG-mV8h(XT|oRBY&fD|ObG!Cq{@oU-da~NDnF1Z3UM9PHj zA0pbu5tdQ#Q$RmgH$zl6%e*s!z~+@fUTpmWX;yO0BR09k9AmIpn&t!-vozzapc{Hc zXZm^pNy1HtLzpUfxv|BhJH@Od$Hu66h)g}0Cc$<3fMIM*f`#JjOwJlc-`F0+$a;JQ zb}6LukcY!2fN6t4-iMyiZYXS&l1{yNU1~6W>oWjW83MENcZ>3yW%;)rF|OKzw&Msr zWUay%$RiOEBIq9FFm!zpdhkdQ^m>3!&bgsOy#xdIgydcYJnk3f=&GvaDyeB~&>+8` zAB5zfC9E-J&k_sER*W*tt-JcTTh=kKi1b~;*(KBIlY78E3{2sI9$Xu$+c5y96OnXs z1+>tLa(|BU1RK^ivd&Q#huE;NfUPiO!Dc#ONR}Y5!Fm;xfh`#hELknyfbWJ27HOPL zPqi#9BfVnEkl1NpIaj)R5a=A1a1vnQHxHzzoYMiZD|qt@#G@7N{p;?(X67GzXY{iB zZ;D$UGT{4?(9}go_$8t5m~>>mB2;8d|1+DNooqvIddxC!B@<@Z@7gu~?xeLzJVRdrl8o;pl+Oz|~ZzvvyxJp!>%W<7{AKa%qB%NxKYc<5RwW2%fp* zY1EW)pW5_ajWUFuU0hE%p{WMI2}PKZ9&~xIZifgdw3z|Bciwe_iSPW!5zm3}d@u=Q z5?a*P&Yv3_M)0#JMMM<2gG&r-9nH-mAPZ(Fm(1Pird56f~{_7 zct%D90+X?&=h50T`4>dwt;k(m0=AeAo@WyHUWzr$?jMc6eKSp23jLZ2bM8sAoq#r} zm=>>UjOs0WqLT_8j)sd@Hh3WU{Q2|Tt38Rj_UtMYwfCz#qij}oKSbbu7<(Q?Y1Zjk zy-ll+zfu3N*>+!Ff9F9vQHx`A*p?OrdwN)Fnp-BdB9C*g(K8Csq2%8ch47Q@raqf9f4DDXZeuRk&?6lQ zU_2Dda`b8%=r5)xH$$kr>z~^t;>HKekhZGF?UaN(DICy`HU0EVkTrVN>e;@KIGS2L z+0`;HHt*Qsm+^G*<7#ySGsR}_PB}1hsC+fz3M@FY?vsz-dv%S=kOpA|;XPw|^R~s& zx|zJZudhUAQz-S51xua7>u2|w{5kcLw9>Y`+vlk<^d1b~9tu0-%X(B&RZz)U)Jj%s zYVrB?r2-`yLi;rg7syC*g>kjPQnPM?u3}C6+}!0?6!WIzn5fRLyUHTko{(Xm2AHwG z5VRN*PvLg{5rRqNp#k-4KjI}?M-P`dJp z5!O4KU6ZX5H_#*Hxp;6&loU`QM-W*IR}m}!UBa}oV&mt}Q%q80h~n2yT1{z!!_mcG znwOV9Rk>+{vc;y=A4#9;fh|Tw=HXrp0b#Y@DNTPa3a`A>xcmO9mJ?AE=h3b>``&64 z11PC6bYQy+L20Mi4S;<7gYA&Dm+;-rKBN34KmK6C(vd&QkN*b(T?b(Fe(F~fe`2A= z`oiAKn*4R@wJWPpkN31xr7V(SG;9({@P%lo$?$}=eRLA_?UrRwqzSJ|>4>FF#&a@C zD7}+8%LlgVI@#=h!dU&AjoSYqh0))tdHz|)|M`^5-xVGIht*YI$JuhZUn;Justhe5 zf5>N+Ri0;99Grq*+_y0{O0Pp%rOl=HI$}WX0hw~h%&JyyfPTPMt`JlaUeZH$q)5o4=|d|87Y>-VQ~d`~*>Q3}M80G*F^;WqZitnNc7tr()8QC^RIK*GzU0OByz*3Zf2$)QEr5Ar0C`{@r z^|Cb*)fmF_>@`yc$isNgywiQlGsJP#m3d8vw4pEhx_*!-CMl<$aSP}Cs)FXp!~VHB z*8*o}!i_Sy$<)s0@8%+&U0D>8FQ><(^1_|pd<|$2>&tfH!l8za6;&~FO#A88d-t~E z^+-ZkeNagsL+FXem>xDtdP`Rf8u=_3)>WK8Nou3wiVU5#;??C?j~CAxl*Pa^pQRZ- zgyK)HMRHxgyY?nf(KA)}R_+ji_+F$Eb0J$$JT=;3vvHZ1d0N<<*`$nIb$Pjly|aPw zppTah2jr6HgUQ(4Ho7{FfxZXCWmCk3bs?JK2IX?uUUVzH&Rq=D$n&l z^;3^hQhC!uo9&P)PU=9-hZ{iS2R<6+q~4+>xYwRqzPGgmiBCpk;XS#+h@-Vv=G#*&27`Mg&DUR$?@g<^*0<4<0A7_o=BUO>0h>1?kfneV1 z!{Rue&qb?8*{vCOGw2T9BU=ZcE96F?n-dY7sR`MZ1#g={_Jr&sDR*RqldJd7DW3ql z*FFJpqO+6oaq4E#&Zzt|E%Z!L);?&#VExK|3de>^bb&e{+#mtUw(}eF(+_wx@qj%nbhDwBX$>Q zG!-Mc1aIZM6?Nw8#1V3!avVWwArT3(4Q?8+-IxPYCUyI@e&w{=HKdO^@S~b?oqOO6 zldMSZvt`5~D1L4Mpjsb3knib*f&5HuPTfhD3kPA^h&6P7Psf$+^8ixmm;$6!e!4Go zR(ch7Ksf^4&ay<_*A5n;)M^6U*X?c_0>RKl9qVQ2PMTfa8Qyxr@le@Ub_?XStti0T zim*kVm4b8*$I77G;e-qv9yQhY>lwf1>f8JJ>%IE5KYq!QUo!ER{`iXy|0NTD$;4kW z@s~{e-y##223`>NZBd1h*iTxggi73^4~iT)R@vp$6m#UWYQ(wLw*J)Sz8(}k Z8T?^#_wPvr{~G%{Q}@5Zyi$G{{XZ*U%%T7Q diff --git a/doc/meissa-website-arch.png b/doc/meissa-website-arch.png deleted file mode 100644 index c89662f84289d8b35df855896dd8e21f5294c97f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 72108 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
8^Cb|Yp8U0Aa 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 diff --git a/infrastructure/build/image/resources/entrypoint.sh b/infrastructure/build/image/resources/entrypoint.sh index f18d5bd..707ea17 100755 --- a/infrastructure/build/image/resources/entrypoint.sh +++ b/infrastructure/build/image/resources/entrypoint.sh @@ -30,7 +30,3 @@ if [[ $currentHash == $newHash ]] echo "Moving files" move-website-files-to-target fi - - - - From f0ed84822bf645c7e2e47ee6089bb7bb98cf15c6 Mon Sep 17 00:00:00 2001 From: Michael Jerger Date: Thu, 22 Feb 2024 10:34:24 +0100 Subject: [PATCH 3/9] new way to generate --- .../build/image/resources/entrypoint.sh | 2 -- .../build/image/resources/functions.sh | 24 ++----------------- 2 files changed, 2 insertions(+), 24 deletions(-) diff --git a/infrastructure/build/image/resources/entrypoint.sh b/infrastructure/build/image/resources/entrypoint.sh index 707ea17..05c3610 100755 --- a/infrastructure/build/image/resources/entrypoint.sh +++ b/infrastructure/build/image/resources/entrypoint.sh @@ -23,8 +23,6 @@ if [[ $currentHash == $newHash ]] echo "Downloading website data" get-website-data $filename unzip-website-data $filename - echo "Executing Custom Scripts, if applicable" - execute-scripts-when-existing echo "Building website" build-website echo "Moving files" diff --git a/infrastructure/build/image/resources/functions.sh b/infrastructure/build/image/resources/functions.sh index 7ab68db..d105f6a 100644 --- a/infrastructure/build/image/resources/functions.sh +++ b/infrastructure/build/image/resources/functions.sh @@ -16,30 +16,10 @@ function unzip-website-data() { unzip $SOURCEDIR/$1 -d $BUILDDIR } -function execute-scripts-when-existing() { - websitedir=$(ls $BUILDDIR) - if [[ -f $BUILDDIR/$websitedir/$SCRIPTFILE ]] - then - checksum="$(sha256sum $BUILDDIR/$websitedir/$SCRIPTFILE | grep -oE "^[a-z0-9]+")" - if [[ "$SHA256SUM" == "$checksum" ]] - then - chmod +x $BUILDDIR/$websitedir/$SCRIPTFILE - (cd $BUILDDIR; dir=$(ls); cd $dir; ./$SCRIPTFILE) #make sure paths defined in scriptfile are relative to $dir - else - printf "Provided SHA256 Sum does not match calculated sum. Exiting." - printf "Calculated SHA256: $checksum" - printf "Given SHA256: $SHA256SUM" - exit 1 - fi - else - printf "No script file provided." - fi -} - function build-website() { - (cd $BUILDDIR; dir=$(ls); cd $dir; lein run;) + (cd $BUILDDIR; dir=$(ls); cd $dir; ./generate.sh;) } function move-website-files-to-target() { - (cd $BUILDDIR; dir=$(ls); cd $dir; rsync -ru --exclude-from "/etc/exclude.pattern" --delete resources/public/* $WEBSITEROOT;) + (cd $BUILDDIR; dir=$(ls); cd $dir; rsync -ru --exclude-from "/etc/exclude.pattern" --delete target/html/* $WEBSITEROOT;) } From 209f1bd9cad5ff783b1a919afa7e88a50fe196c6 Mon Sep 17 00:00:00 2001 From: Michael Jerger Date: Thu, 22 Feb 2024 11:08:26 +0100 Subject: [PATCH 4/9] rename gitea -> forgejo [BRAKING Change] --- src/main/cljc/dda/c4k_website/website.cljc | 9 ++- .../cljc/dda/c4k_website/website_test.cljc | 60 +++++++++---------- 2 files changed, 33 insertions(+), 36 deletions(-) diff --git a/src/main/cljc/dda/c4k_website/website.cljc b/src/main/cljc/dda/c4k_website/website.cljc index 26de837..adf78ed 100644 --- a/src/main/cljc/dda/c4k_website/website.cljc +++ b/src/main/cljc/dda/c4k_website/website.cljc @@ -21,8 +21,8 @@ (s/def ::volume-size pred/integer-string?) (s/def ::authtoken pred/bash-env-string?) (s/def ::fqdns (s/coll-of pred/fqdn-string?)) -(s/def ::gitea-host pred/fqdn-string?) -(s/def ::gitea-repo string?) +(s/def ::forgejo-host pred/fqdn-string?) +(s/def ::forgejo-repo string?) (s/def ::branchname string?) (s/def ::username string?) (s/def ::build-cpu-request string?) @@ -32,12 +32,11 @@ (def websiteconfig? (s/keys :req-un [::unique-name ::fqdns - ::gitea-host - ::gitea-repo + ::forgejo-host + ::forgejo-repo ::branchname] :opt-un [::issuer ::volume-size - ::sha256sum-output ::build-cpu-request ::build-cpu-limit ::build-memory-request diff --git a/src/test/cljc/dda/c4k_website/website_test.cljc b/src/test/cljc/dda/c4k_website/website_test.cljc index 8f19da8..dd2210d 100644 --- a/src/test/cljc/dda/c4k_website/website_test.cljc +++ b/src/test/cljc/dda/c4k_website/website_test.cljc @@ -4,9 +4,7 @@ :cljs [cljs.test :refer-macros [deftest is are testing run-tests]]) [clojure.spec.test.alpha :as st] [dda.c4k-common.test-helper :as th] - [dda.c4k-common.base64 :as b64] - [dda.c4k-website.website :as cut] - [clojure.spec.alpha :as s])) + [dda.c4k-website.website :as cut])) (st/instrument `cut/generate-nginx-configmap) (st/instrument `cut/generate-nginx-deployment) @@ -21,20 +19,20 @@ (deftest should-generate-nginx-configmap-website (is (= "server {\n listen 80 default_server;\n listen [::]:80 default_server;\n server_name test.de www.test.de test-it.de www.test-it.de;\n add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains; preload'; \n add_header X-Frame-Options \"SAMEORIGIN\";\n add_header X-Content-Type-Options nosniff;\n add_header Referrer-Policy \"strict-origin\";\n # add_header Permissions-Policy \"permissions here\";\n root /var/www/html/website/;\n index index.html;\n location / {\n try_files $uri $uri/ /index.html =404;\n }\n}\n" (:website.conf (:data (cut/generate-nginx-configmap {:unique-name "test.io", - :gitea-host "gitea.evilorg", - :gitea-repo "none", + :forgejo-host "gitea.evilorg", + :forgejo-repo "none", :branchname "mablain", :fqdns ["test.de" "www.test.de" "test-it.de" "www.test-it.de"]}))))) (is (= "types {\n text/html html htm shtml;\n text/css css;\n text/xml xml rss;\n image/gif gif;\n image/jpeg jpeg jpg;\n application/x-javascript js;\n text/plain txt;\n text/x-component htc;\n text/mathml mml;\n image/svg+xml svg svgz;\n image/png png;\n image/x-icon ico;\n image/x-jng jng;\n image/vnd.wap.wbmp wbmp;\n application/java-archive jar war ear;\n application/mac-binhex40 hqx;\n application/pdf pdf;\n application/x-cocoa cco;\n application/x-java-archive-diff jardiff;\n application/x-java-jnlp-file jnlp;\n application/x-makeself run;\n application/x-perl pl pm;\n application/x-pilot prc pdb;\n application/x-rar-compressed rar;\n application/x-redhat-package-manager rpm;\n application/x-sea sea;\n application/x-shockwave-flash swf;\n application/x-stuffit sit;\n application/x-tcl tcl tk;\n application/x-x509-ca-cert der pem crt;\n application/x-xpinstall xpi;\n application/zip zip;\n application/octet-stream deb;\n application/octet-stream bin exe dll;\n application/octet-stream dmg;\n application/octet-stream eot;\n application/octet-stream iso img;\n application/octet-stream msi msp msm;\n audio/mpeg mp3;\n audio/x-realaudio ra;\n video/mpeg mpeg mpg;\n video/quicktime mov;\n video/x-flv flv;\n video/x-msvideo avi;\n video/x-ms-wmv wmv;\n video/x-ms-asf asx asf;\n video/x-mng mng;\n}\n" (:mime.types (:data (cut/generate-nginx-configmap {:unique-name "test.io", - :gitea-host "gitea.evilorg", - :gitea-repo "none", + :forgejo-host "gitea.evilorg", + :forgejo-repo "none", :branchname "mablain", :fqdns ["test.de" "www.test.de" "test-it.de" "www.test-it.de"]}))))) (is (= "user nginx;\nworker_processes 3;\nerror_log /var/log/nginx/error.log;\npid /var/log/nginx/nginx.pid;\nworker_rlimit_nofile 8192;\nevents {\n worker_connections 4096;\n}\nhttp {\n include /etc/nginx/mime.types;\n default_type application/octet-stream;\n log_format main '$remote_addr - $remote_user [$time_local] $status'\n '\"$request\" $body_bytes_sent \"$http_referer\"'\n '\"$http_user_agent\" \"$http_x_forwarded_for\"';\n access_log /var/log/nginx/access.log main;\n sendfile on;\n tcp_nopush on;\n keepalive_timeout 65;\n server_names_hash_bucket_size 128;\n include /etc/nginx/conf.d/website.conf;\n}\n" (:nginx.conf (:data (cut/generate-nginx-configmap {:unique-name "test.io", - :gitea-host "gitea.evilorg", - :gitea-repo "none", + :forgejo-host "gitea.evilorg", + :forgejo-repo "none", :branchname "mablain", :fqdns ["test.de" "www.test.de" "test-it.de" "www.test-it.de"]}))))) (is (= {:apiVersion "v1", @@ -43,8 +41,8 @@ :labels {:app.kubernetes.part-of "test-io-website"}, :namespace "default"}} (dissoc (cut/generate-nginx-configmap {:unique-name "test.io", - :gitea-host "gitea.evilorg", - :gitea-repo "none", + :forgejo-host "gitea.evilorg", + :forgejo-repo "none", :branchname "mablain", :fqdns ["test.de" "www.test.de" "test-it.de" "www.test-it.de"]}) :data)))) @@ -88,9 +86,9 @@ {:name "log", :emptyDir {}} {:name "content-volume", :persistentVolumeClaim {:claimName "test-io-content-volume"}} {:name "hashfile-volume", :persistentVolumeClaim {:claimName "test-io-hashfile-volume"}}]}}}} - (cut/generate-nginx-deployment {:gitea-host "gitlab.de", + (cut/generate-nginx-deployment {:forgejo-host "gitlab.de", :fqdns ["test.de" "test.org" "www.test.de" "www.test.org"], - :gitea-repo "repo", + :forgejo-repo "repo", :sha256sum-output "123456789ab123cd345de script-file-name.sh", :issuer "staging", :branchname "main", @@ -98,18 +96,18 @@ (deftest should-generate-resource-requests (is (= {:requests {:cpu "500m", :memory "256Mi"}, :limits {:cpu "1700m", :memory "512Mi"}} - (-> (cut/generate-nginx-deployment {:gitea-host "gitlab.de", + (-> (cut/generate-nginx-deployment {:forgejo-host "gitlab.de", :fqdns ["test.de" "test.org" "www.test.de" "www.test.org"], - :gitea-repo "repo", + :forgejo-repo "repo", :sha256sum-output "123456789ab123cd345de script-file-name.sh", :issuer "staging", :branchname "main", :unique-name "test.io"}) :spec :template :spec :initContainers first :resources ))) (is (= {:requests {:cpu "1500m", :memory "512Mi"}, :limits {:cpu "3000m", :memory "1024Mi"}} - (-> (cut/generate-nginx-deployment {:gitea-host "gitlab.de", + (-> (cut/generate-nginx-deployment {:forgejo-host "gitlab.de", :fqdns ["test.de" "test.org" "www.test.de" "www.test.org"], - :gitea-repo "repo", + :forgejo-repo "repo", :sha256sum-output "123456789ab123cd345de script-file-name.sh", :issuer "staging", :branchname "main", @@ -128,13 +126,13 @@ :app.kubernetes.part-of-c1 "test-io-website", :app.kubernetes.part-of-c2 "test-org-website"} (th/map-diff (cut/generate-nginx-service {:unique-name "test.io", - :gitea-host "gitea.evilorg", - :gitea-repo "none", + :forgejo-host "gitea.evilorg", + :forgejo-repo "none", :branchname "mablain", :fqdns ["test.de" "www.test.de" "test-it.de" "www.test-it.de"]}) (cut/generate-nginx-service {:unique-name "test.org", - :gitea-host "gitea.evilorg", - :gitea-repo "none", + :forgejo-host "gitea.evilorg", + :forgejo-repo "none", :branchname "mablain", :fqdns ["test.de" "www.test.de" "test-it.de" "www.test-it.de"]}))))) @@ -163,9 +161,9 @@ :volumes [{:name "content-volume", :persistentVolumeClaim {:claimName "test-io-content-volume"}} {:name "hashfile-volume", :persistentVolumeClaim {:claimName "test-io-hashfile-volume"}}], :restartPolicy "OnFailure"}}}}}} - (cut/generate-website-build-cron {:gitea-host "gitlab.de", + (cut/generate-website-build-cron {:forgejo-host "gitlab.de", :fqdns ["test.de" "test.org" "www.test.de" "www.test.org"], - :gitea-repo "repo", + :forgejo-repo "repo", :sha256sum-output "123456789ab123cd345de script-file-name.sh", :issuer "staging", :branchname "main", @@ -180,12 +178,12 @@ :GITREPOURL "aHR0cHM6Ly9naXRsYWIuZGUvYXBpL3YxL3JlcG9zL3NvbWV1c2VyL3JlcG8vYXJjaGl2ZS9tYWluLnppcA==", :GITCOMMITURL "aHR0cHM6Ly9naXRsYWIuZGUvYXBpL3YxL3JlcG9zL3NvbWV1c2VyL3JlcG8vZ2l0L2NvbW1pdHMvSEVBRA=="}} (cut/generate-website-build-secret {:fqdns ["test.de" "test.org" "www.test.de" "www.test.org"], - :gitea-repo "repo", + :forgejo-repo "repo", :sha256sum-output "123456789ab123cd345de script-file-name.sh", :issuer "staging", :branchname "main", :unique-name "test.io", - :gitea-host "gitlab.de"} + :forgejo-host "gitlab.de"} {:unique-name "test.io", :authtoken "abedjgbasdodj", :username "someuser"})))) @@ -198,13 +196,13 @@ :app.kubernetes.part-of-c1 "test-io-website", :app.kubernetes.part-of-c2 "test-org-website"} (th/map-diff (cut/generate-website-content-volume {:unique-name "test.io", - :gitea-host "gitea.evilorg", - :gitea-repo "none", + :forgejo-host "gitea.evilorg", + :forgejo-repo "none", :branchname "mablain", :fqdns ["test.de" "www.test.de" "test-it.de" "www.test-it.de"]}) (cut/generate-website-content-volume {:unique-name "test.org", - :gitea-host "gitea.evilorg", - :gitea-repo "none", + :forgejo-host "gitea.evilorg", + :forgejo-repo "none", :branchname "mablain", :fqdns ["test.de" "www.test.de" "test-it.de" "www.test-it.de"]}))))) @@ -217,7 +215,7 @@ :labels {:app "test-io-nginx", :app.kubernetes.part-of "test-io-website"}}, :spec {:storageClassName "local-path", :accessModes ["ReadWriteOnce"], :resources {:requests {:storage "16Mi"}}}} (cut/generate-hashfile-volume {:unique-name "test.io", - :gitea-host "gitea.evilorg", - :gitea-repo "none", + :forgejo-host "gitea.evilorg", + :forgejo-repo "none", :branchname "mablain", :fqdns ["test.de" "www.test.de" "test-it.de" "www.test-it.de"]})))) From 8af984c0797cfc4bbd04a9fbc2ddd31f56a34e66 Mon Sep 17 00:00:00 2001 From: erik Date: Thu, 22 Feb 2024 12:31:02 +0100 Subject: [PATCH 5/9] Fix title --- doc/requirements.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/requirements.md b/doc/requirements.md index badcbd8..6088fcb 100644 --- a/doc/requirements.md +++ b/doc/requirements.md @@ -1,4 +1,4 @@ - Aktoren +# Aktoren ## A1: Der Website-Konsument ## A2: Der Website-Pfleger From 277088347323d5bee4797256d5a46d840274f7f4 Mon Sep 17 00:00:00 2001 From: Michael Jerger Date: Thu, 22 Feb 2024 13:05:54 +0100 Subject: [PATCH 6/9] rename gitea -> forgejo [BRAKING Change] --- doc/architecture.md | 1 - src/main/cljc/dda/c4k_website/website.cljc | 12 ++++++------ src/test/cljc/dda/c4k_website/website_test.cljc | 1 - 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/doc/architecture.md b/doc/architecture.md index 111645b..741b82e 100644 --- a/doc/architecture.md +++ b/doc/architecture.md @@ -16,5 +16,4 @@ sequenceDiagram j ->> j: generate.sh j ->> j: cp /target/html to website deactivate j - ``` diff --git a/src/main/cljc/dda/c4k_website/website.cljc b/src/main/cljc/dda/c4k_website/website.cljc index adf78ed..0df972f 100644 --- a/src/main/cljc/dda/c4k_website/website.cljc +++ b/src/main/cljc/dda/c4k_website/website.cljc @@ -191,8 +191,8 @@ (defn-spec generate-website-build-secret pred/map-or-seq? [config websiteconfig? auth websiteauth?] - (let [{:keys [gitea-host - gitea-repo + (let [{:keys [forgejo-host + forgejo-repo branchname]} config {:keys [authtoken username]} auth] @@ -201,13 +201,13 @@ (cm/replace-all-matching-values-by-new-value "TOKEN" (b64/encode authtoken)) (cm/replace-all-matching-values-by-new-value "REPOURL" (b64/encode (generate-gitrepourl - gitea-host - gitea-repo + forgejo-host + forgejo-repo username branchname))) (cm/replace-all-matching-values-by-new-value "COMMITURL" (b64/encode (generate-gitcommiturl - gitea-host - gitea-repo + forgejo-host + forgejo-repo username)))))) diff --git a/src/test/cljc/dda/c4k_website/website_test.cljc b/src/test/cljc/dda/c4k_website/website_test.cljc index dd2210d..4487090 100644 --- a/src/test/cljc/dda/c4k_website/website_test.cljc +++ b/src/test/cljc/dda/c4k_website/website_test.cljc @@ -179,7 +179,6 @@ :GITCOMMITURL "aHR0cHM6Ly9naXRsYWIuZGUvYXBpL3YxL3JlcG9zL3NvbWV1c2VyL3JlcG8vZ2l0L2NvbW1pdHMvSEVBRA=="}} (cut/generate-website-build-secret {:fqdns ["test.de" "test.org" "www.test.de" "www.test.org"], :forgejo-repo "repo", - :sha256sum-output "123456789ab123cd345de script-file-name.sh", :issuer "staging", :branchname "main", :unique-name "test.io", From cc97cae0d0bdb0e7b32738766203b60584515ab6 Mon Sep 17 00:00:00 2001 From: Michael Jerger Date: Thu, 22 Feb 2024 13:22:08 +0100 Subject: [PATCH 7/9] remove parameter for pre build script --- src/main/cljc/dda/c4k_website/website.cljc | 7 +++---- src/main/resources/website/nginx-deployment.yaml | 5 ----- src/main/resources/website/website-build-cron.yaml | 5 ----- src/test/cljc/dda/c4k_website/website_test.cljc | 3 --- 4 files changed, 3 insertions(+), 17 deletions(-) diff --git a/src/main/cljc/dda/c4k_website/website.cljc b/src/main/cljc/dda/c4k_website/website.cljc index 0df972f..baaaae1 100644 --- a/src/main/cljc/dda/c4k_website/website.cljc +++ b/src/main/cljc/dda/c4k_website/website.cljc @@ -120,12 +120,10 @@ (defn-spec replace-build-data pred/map-or-seq? [resource-file string? config websiteconfig?] - (let [{:keys [sha256sum-output build-cpu-request build-cpu-limit build-memory-request build-memory-limit] + (let [{:keys [build-cpu-request build-cpu-limit build-memory-request build-memory-limit] :or {build-cpu-request "500m" build-cpu-limit "1700m" build-memory-request "256Mi" build-memory-limit "512Mi"}} config] (-> (replace-common-data resource-file config) - (cm/replace-all-matching-values-by-new-value "CHECK_SUM" (get-hash-from-sha256sum-output sha256sum-output)) - (cm/replace-all-matching-values-by-new-value "SCRIPT_FILE" (get-file-name-from-sha256sum-output sha256sum-output)) (cm/replace-all-matching-values-by-new-value "BUILD_CPU_REQUEST" build-cpu-request) (cm/replace-all-matching-values-by-new-value "BUILD_CPU_LIMIT" build-cpu-limit) (cm/replace-all-matching-values-by-new-value "BUILD_MEMORY_REQUEST" build-memory-request) @@ -165,7 +163,7 @@ [config websiteconfig?] (replace-common-data "website/hashfile-volume.yaml" config)) - +; using simple ingress instead removes the need of cert handling (defn-spec generate-website-ingress pred/map-or-seq? [config websiteconfig?] (let [{:keys [unique-name fqdns]} config] @@ -188,6 +186,7 @@ [config websiteconfig?] (replace-build-data "website/website-build-cron.yaml" config)) +; TODO: repo & commit-url sounds more like config map? (defn-spec generate-website-build-secret pred/map-or-seq? [config websiteconfig? auth websiteauth?] diff --git a/src/main/resources/website/nginx-deployment.yaml b/src/main/resources/website/nginx-deployment.yaml index 9133cd2..1e2a66b 100644 --- a/src/main/resources/website/nginx-deployment.yaml +++ b/src/main/resources/website/nginx-deployment.yaml @@ -44,11 +44,6 @@ spec: envFrom: - secretRef: name: NAME-secret - env: - - name: SHA256SUM - value: CHECK_SUM - - name: SCRIPTFILE - value: SCRIPT_FILE volumeMounts: - name: content-volume mountPath: /var/www/html/website diff --git a/src/main/resources/website/website-build-cron.yaml b/src/main/resources/website/website-build-cron.yaml index 1c79d09..a811e19 100644 --- a/src/main/resources/website/website-build-cron.yaml +++ b/src/main/resources/website/website-build-cron.yaml @@ -27,11 +27,6 @@ spec: envFrom: - secretRef: name: NAME-secret - env: - - name: SHA256SUM - value: CHECK_SUM - - name: SCRIPTFILE - value: SCRIPT_FILE volumeMounts: - name: content-volume mountPath: /var/www/html/website diff --git a/src/test/cljc/dda/c4k_website/website_test.cljc b/src/test/cljc/dda/c4k_website/website_test.cljc index 4487090..797cab7 100644 --- a/src/test/cljc/dda/c4k_website/website_test.cljc +++ b/src/test/cljc/dda/c4k_website/website_test.cljc @@ -72,7 +72,6 @@ :resources {:requests {:cpu "500m", :memory "256Mi"}, :limits {:cpu "1700m", :memory "512Mi"}}, :command ["/entrypoint.sh"], :envFrom [{:secretRef {:name "test-io-secret"}}], - :env [{:name "SHA256SUM", :value "123456789ab123cd345de"} {:name "SCRIPTFILE", :value "script-file-name.sh"}], :volumeMounts [{:name "content-volume", :mountPath "/var/www/html/website"} {:name "hashfile-volume", :mountPath "/var/hashfile.d"}]}], :volumes @@ -155,7 +154,6 @@ :resources {:requests {:cpu "500m", :memory "256Mi"}, :limits {:cpu "1700m", :memory "512Mi"}}, :command ["/entrypoint.sh"], :envFrom [{:secretRef {:name "test-io-secret"}}], - :env [{:name "SHA256SUM", :value "123456789ab123cd345de"} {:name "SCRIPTFILE", :value "script-file-name.sh"}], :volumeMounts [{:name "content-volume", :mountPath "/var/www/html/website"} {:name "hashfile-volume", :mountPath "/var/hashfile.d"}]}], :volumes [{:name "content-volume", :persistentVolumeClaim {:claimName "test-io-content-volume"}} @@ -164,7 +162,6 @@ (cut/generate-website-build-cron {:forgejo-host "gitlab.de", :fqdns ["test.de" "test.org" "www.test.de" "www.test.org"], :forgejo-repo "repo", - :sha256sum-output "123456789ab123cd345de script-file-name.sh", :issuer "staging", :branchname "main", :unique-name "test.io"})))) From 375f11c0d969bce24f0aa6ea389d6bd4e9eb405f Mon Sep 17 00:00:00 2001 From: Michael Jerger Date: Thu, 22 Feb 2024 13:30:22 +0100 Subject: [PATCH 8/9] fix valid config --- src/test/cljc/dda/c4k_website/core_test.cljc | 39 +++++++++---------- .../resources/website-test/valid-config.yaml | 11 +++--- 2 files changed, 24 insertions(+), 26 deletions(-) diff --git a/src/test/cljc/dda/c4k_website/core_test.cljc b/src/test/cljc/dda/c4k_website/core_test.cljc index d51d28b..8cf4ad3 100644 --- a/src/test/cljc/dda/c4k_website/core_test.cljc +++ b/src/test/cljc/dda/c4k_website/core_test.cljc @@ -5,8 +5,7 @@ :cljs [cljs.test :refer-macros [deftest is are testing run-tests]]) [clojure.spec.alpha :as s] [dda.c4k-common.yaml :as yaml] - [dda.c4k-website.core :as cut] - [clojure.spec.alpha :as s])) + [dda.c4k-website.core :as cut])) #?(:cljs (defmethod yaml/load-resource :website-test [resource-name] @@ -23,26 +22,26 @@ {:websites [{:unique-name "example.io" :fqdns ["example.org", "www.example.com"] - :gitea-host "finegitehost.net" - :gitea-repo "repo" + :forgejo-host "finegitehost.net" + :forgejo-repo "repo" :branchname "main"} {:unique-name "test.io" :fqdns ["test.de" "test.org" "www.test.de" "www.test.org"] - :gitea-host "gitlab.de" - :gitea-repo "repo" + :forgejo-host "gitlab.de" + :forgejo-repo "repo" :branchname "main"}]}) (def websites2 {:websites [{:unique-name "test.io" :fqdns ["test.de" "test.org" "www.test.de" "www.test.org"] - :gitea-host "gitlab.de" - :gitea-repo "repo" + :forgejo-host "gitlab.de" + :forgejo-repo "repo" :branchname "main"} {:unique-name "example.io" :fqdns ["example.org", "www.example.com"] - :gitea-host "finegitehost.net" - :gitea-repo "repo" + :forgejo-host "finegitehost.net" + :forgejo-repo "repo" :branchname "main"}]}) (def auth1 @@ -66,8 +65,8 @@ (def flattened-and-reduced-config {:unique-name "example.io", :fqdns ["example.org" "www.example.com"], - :gitea-host "finegitehost.net", - :gitea-repo "repo", + :forgejo-host "finegitehost.net", + :forgejo-repo "repo", :branchname "main"}) (def flattened-and-reduced-auth @@ -80,13 +79,13 @@ :websites [{:unique-name "example.io", :fqdns ["example.org" "www.example.com"], - :gitea-host "finegitehost.net", - :gitea-repo "repo", + :forgejo-host "finegitehost.net", + :forgejo-repo "repo", :branchname "main"}, {:unique-name "test.io", :fqdns ["test.de" "test.org" "www.test.de" "www.test.org"], - :gitea-host "gitlab.de", - :gitea-repo "repo", + :forgejo-host "gitlab.de", + :forgejo-repo "repo", :branchname "main", :sha256sum-output "123456789ab123cd345de script-file-name.sh"}], :mon-cfg {:grafana-cloud-url "url-for-your-prom-remote-write-endpoint", :cluster-name "jitsi", :cluster-stage "test"}} @@ -95,14 +94,14 @@ :websites [{:unique-name "test.io", :fqdns ["test.de" "test.org" "www.test.de" "www.test.org"], - :gitea-host "gitlab.de", - :gitea-repo "repo", + :forgejo-host "gitlab.de", + :forgejo-repo "repo", :branchname "main", :sha256sum-output "123456789ab123cd345de script-file-name.sh"} {:unique-name "example.io", :fqdns ["example.org" "www.example.com"], - :gitea-host "finegitehost.net", - :gitea-repo "repo", + :forgejo-host "finegitehost.net", + :forgejo-repo "repo", :branchname "main"}], :mon-cfg {:grafana-cloud-url "url-for-your-prom-remote-write-endpoint", :cluster-name "jitsi", :cluster-stage "test"}})))) diff --git a/src/test/resources/website-test/valid-config.yaml b/src/test/resources/website-test/valid-config.yaml index ae670cf..0d2c1a4 100644 --- a/src/test/resources/website-test/valid-config.yaml +++ b/src/test/resources/website-test/valid-config.yaml @@ -2,16 +2,15 @@ issuer: "staging" websites: - unique-name: "test.io" fqdns: ["test.de", "test.org", "www.test.de", "www.test.org"] - gitea-host: "gitlab.de" - gitea-repo: "repo" + forgejo-host: "codeberg.org" + forgejo-repo: "repo" branchname: "main" - sha256sum-output: "123456789ab123cd345de script-file-name.sh" - unique-name: "example.io" fqdns: ["example.org", "www.example.com"] - gitea-host: "finegitehost.net" - gitea-repo: "repo" + forgejo-host: "fineForgejoHost.net" + forgejo-repo: "repo" branchname: "main" mon-cfg: grafana-cloud-url: "url-for-your-prom-remote-write-endpoint" - cluster-name: "jitsi" + cluster-name: "website" cluster-stage: "test" From 4d7928f244c2ce83e3daf8f4010012cee729bded Mon Sep 17 00:00:00 2001 From: Michael Jerger Date: Thu, 22 Feb 2024 13:44:41 +0100 Subject: [PATCH 9/9] add missing lib --- project.clj | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/project.clj b/project.clj index 6596f86..18553f2 100644 --- a/project.clj +++ b/project.clj @@ -25,7 +25,8 @@ :dependencies [[org.clojure/tools.cli "1.1.230"] [ch.qos.logback/logback-classic "1.5.0" :exclusions [com.sun.mail/javax.mail]] - [org.slf4j/jcl-over-slf4j "2.0.12"]]}} + [org.slf4j/jcl-over-slf4j "2.0.12"] + [com.github.clj-easy/graal-build-time "1.0.5"]]}} :release-tasks [["test"] ["vcs" "assert-committed"] ["change" "version" "leiningen.release/bump-version" "release"]