From 64c51ffbcd7e3ee7a04f61785da4eec5558d5b9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?HUC=20St=C3=A9phane?= Date: Sun, 20 Dec 2020 18:37:46 +0100 Subject: [PATCH] add script deploy bash --- .gitignore | 2 +- content/donate.md | 6 +- deploy.bash | 186 ++++++++++++++++++ public/404.html.br | Bin 0 -> 1152 bytes public/404.html.gz | Bin 0 -> 1476 bytes public/Puffy.svg.br | Bin 0 -> 14762 bytes public/Puffy.svg.gz | Bin 0 -> 17977 bytes public/about/index.html | 4 +- public/about/index.html.br | Bin 0 -> 6888 bytes public/about/index.html.gz | Bin 0 -> 8260 bytes public/android-icon-144x144.png.webp | Bin 0 -> 13646 bytes public/android-icon-192x192.png.webp | Bin 0 -> 20362 bytes public/android-icon-36x36.png.webp | Bin 0 -> 1590 bytes public/android-icon-48x48.png.webp | Bin 0 -> 2442 bytes public/android-icon-72x72.png.webp | Bin 0 -> 4632 bytes public/android-icon-96x96.png.webp | Bin 0 -> 7436 bytes public/apple-icon-114x114.png.webp | Bin 0 -> 9486 bytes public/apple-icon-120x120.png.webp | Bin 0 -> 10302 bytes public/apple-icon-144x144.png.webp | Bin 0 -> 13646 bytes public/apple-icon-152x152.png.webp | Bin 0 -> 15002 bytes public/apple-icon-180x180.png.webp | Bin 0 -> 19566 bytes public/apple-icon-57x57.png.webp | Bin 0 -> 3170 bytes public/apple-icon-60x60.png.webp | Bin 0 -> 3400 bytes public/apple-icon-72x72.png.webp | Bin 0 -> 4632 bytes public/apple-icon-76x76.png.webp | Bin 0 -> 5008 bytes public/apple-icon-precomposed.png.webp | Bin 0 -> 20362 bytes public/apple-icon.png.webp | Bin 0 -> 20362 bytes public/atom.xml | 2 +- public/atom.xml.br | Bin 0 -> 1916 bytes public/atom.xml.gz | Bin 0 -> 2336 bytes public/categories/index.html | 4 +- public/categories/index.html.br | Bin 0 -> 3826 bytes public/categories/index.html.gz | Bin 0 -> 4639 bytes public/categories/libressl/index.html | 4 +- public/categories/libressl/index.html.br | Bin 0 -> 3708 bytes public/categories/libressl/index.html.gz | Bin 0 -> 4436 bytes public/categories/openntpd/index.html | 4 +- public/categories/openntpd/index.html.br | Bin 0 -> 3681 bytes public/categories/openntpd/index.html.gz | Bin 0 -> 4416 bytes public/categories/syspatch/index.html | 4 +- public/categories/syspatch/index.html.br | Bin 0 -> 3688 bytes public/categories/syspatch/index.html.gz | Bin 0 -> 4432 bytes ...a7be73c808104a321b47dba0045a25dc6a2.css.br | Bin 0 -> 5179 bytes ...a7be73c808104a321b47dba0045a25dc6a2.css.gz | Bin 0 -> 5967 bytes public/donate/index.html | 20 +- public/donate/index.html.br | Bin 0 -> 6483 bytes public/donate/index.html.gz | Bin 0 -> 7710 bytes public/favicon-16x16.png.webp | Bin 0 -> 592 bytes public/favicon-200x200.png.webp | Bin 0 -> 25140 bytes public/favicon-32x32.png.webp | Bin 0 -> 1308 bytes public/favicon-96x96.png.webp | Bin 0 -> 7436 bytes public/icons/Logo-128px.png.webp | Bin 0 -> 14132 bytes public/icons/Logo-24px.png.webp | Bin 0 -> 1054 bytes public/icons/Logo-32px.png.webp | Bin 0 -> 1660 bytes public/icons/Logo-64px.png.webp | Bin 0 -> 4816 bytes public/icons/android-chrome-512x512.png.webp | Bin 0 -> 92180 bytes public/icons/apple-touch-icon.png.webp | Bin 0 -> 133348 bytes public/icons/mstile-150x150.png.webp | Bin 0 -> 17624 bytes public/icons/safari-pinned-tab.svg.br | Bin 0 -> 14762 bytes public/icons/safari-pinned-tab.svg.gz | Bin 0 -> 17977 bytes public/index.html | 4 +- public/index.html.br | Bin 0 -> 5057 bytes public/index.html.gz | Bin 0 -> 6132 bytes ...88138284a676835279695151bc852c31aa4e.js.br | Bin 0 -> 2738 bytes ...88138284a676835279695151bc852c31aa4e.js.gz | Bin 0 -> 3177 bytes ...384bc6236688d8bbec184bc4ee83a376cafff13.js | 42 ++++ ...bc6236688d8bbec184bc4ee83a376cafff13.js.br | Bin 0 -> 2737 bytes ...bc6236688d8bbec184bc4ee83a376cafff13.js.gz | Bin 0 -> 3175 bytes public/liste/index.html | 4 +- public/liste/index.html.br | Bin 0 -> 6404 bytes public/liste/index.html.gz | Bin 0 -> 7604 bytes public/ms-icon-144x144.png.webp | Bin 0 -> 13646 bytes public/ms-icon-150x150.png.webp | Bin 0 -> 14760 bytes public/ms-icon-310x310.png.webp | Bin 0 -> 44780 bytes public/ms-icon-70x70.png.webp | Bin 0 -> 4404 bytes public/posts/index.html | 4 +- public/posts/index.html.br | Bin 0 -> 3763 bytes public/posts/index.html.gz | Bin 0 -> 4524 bytes .../index.html | 4 +- .../index.html.br | Bin 0 -> 6474 bytes .../index.html.gz | Bin 0 -> 7709 bytes .../posts/openntpd-6.8p1-20201209/index.html | 4 +- .../openntpd-6.8p1-20201209/index.html.br | Bin 0 -> 6959 bytes .../openntpd-6.8p1-20201209/index.html.gz | Bin 0 -> 8378 bytes .../syspatch-asn1-exit-20201208/index.html | 4 +- .../syspatch-asn1-exit-20201208/index.html.br | Bin 0 -> 6810 bytes .../syspatch-asn1-exit-20201208/index.html.gz | Bin 0 -> 8115 bytes public/rss.xml | 2 +- public/rss.xml.br | Bin 0 -> 1848 bytes public/rss.xml.gz | Bin 0 -> 2221 bytes public/search.json | 2 +- public/search.json.br | Bin 0 -> 2567 bytes public/search.json.gz | Bin 0 -> 2902 bytes public/sitemap.xml | 2 +- public/sitemap.xml.br | Bin 0 -> 359 bytes public/sitemap.xml.gz | Bin 0 -> 412 bytes public/tags/3.1/index.html | 4 +- public/tags/3.1/index.html.br | Bin 0 -> 3709 bytes public/tags/3.1/index.html.gz | Bin 0 -> 4435 bytes public/tags/3.2/index.html | 4 +- public/tags/3.2/index.html.br | Bin 0 -> 3710 bytes public/tags/3.2/index.html.gz | Bin 0 -> 4436 bytes public/tags/3.3/index.html | 4 +- public/tags/3.3/index.html.br | Bin 0 -> 3704 bytes public/tags/3.3/index.html.gz | Bin 0 -> 4435 bytes public/tags/6.7/index.html | 4 +- public/tags/6.7/index.html.br | Bin 0 -> 3682 bytes public/tags/6.7/index.html.gz | Bin 0 -> 4432 bytes public/tags/6.8/index.html | 4 +- public/tags/6.8/index.html.br | Bin 0 -> 3712 bytes public/tags/6.8/index.html.gz | Bin 0 -> 4467 bytes public/tags/asn.1/index.html | 4 +- public/tags/asn.1/index.html.br | Bin 0 -> 3680 bytes public/tags/asn.1/index.html.gz | Bin 0 -> 4432 bytes public/tags/exit/index.html | 4 +- public/tags/exit/index.html.br | Bin 0 -> 3677 bytes public/tags/exit/index.html.gz | Bin 0 -> 4433 bytes public/tags/index.html | 4 +- public/tags/index.html.br | Bin 0 -> 3644 bytes public/tags/index.html.gz | Bin 0 -> 4393 bytes public/tags/libressl/index.html | 4 +- public/tags/libressl/index.html.br | Bin 0 -> 3701 bytes public/tags/libressl/index.html.gz | Bin 0 -> 4434 bytes public/tags/openntpd/index.html | 4 +- public/tags/openntpd/index.html.br | Bin 0 -> 3668 bytes public/tags/openntpd/index.html.gz | Bin 0 -> 4416 bytes public/tags/syspatch/index.html | 4 +- public/tags/syspatch/index.html.br | Bin 0 -> 3683 bytes public/tags/syspatch/index.html.gz | Bin 0 -> 4432 bytes scripts_nohugo/outils/SRI_maker_integrity | 30 +++ .../outils/SRI_maker_integrity.bash | 30 +++ scripts_nohugo/outils/archiver.bash | 40 ++++ scripts_nohugo/outils/favicon.bash | 99 ++++++++++ scripts_nohugo/outils/html-minifier.bash | 45 +++++ .../outils/htmlcompressor-1.5.3.jar | Bin 0 -> 68685 bytes scripts_nohugo/outils/minify | 90 +++++++++ scripts_nohugo/outils/minify.bash | 95 +++++++++ scripts_nohugo/outils/webp.bash | 51 +++++ scripts_nohugo/outils/yuicompressor-2.4.8.jar | Bin 0 -> 787524 bytes static/android-icon-144x144.png.webp | Bin 0 -> 13646 bytes static/android-icon-192x192.png.webp | Bin 0 -> 20362 bytes static/android-icon-36x36.png.webp | Bin 0 -> 1590 bytes static/android-icon-48x48.png.webp | Bin 0 -> 2442 bytes static/android-icon-72x72.png.webp | Bin 0 -> 4632 bytes static/android-icon-96x96.png.webp | Bin 0 -> 7436 bytes static/apple-icon-114x114.png.webp | Bin 0 -> 9486 bytes static/apple-icon-120x120.png.webp | Bin 0 -> 10302 bytes static/apple-icon-144x144.png.webp | Bin 0 -> 13646 bytes static/apple-icon-152x152.png.webp | Bin 0 -> 15002 bytes static/apple-icon-180x180.png.webp | Bin 0 -> 19566 bytes static/apple-icon-57x57.png.webp | Bin 0 -> 3170 bytes static/apple-icon-60x60.png.webp | Bin 0 -> 3400 bytes static/apple-icon-72x72.png.webp | Bin 0 -> 4632 bytes static/apple-icon-76x76.png.webp | Bin 0 -> 5008 bytes static/apple-icon-precomposed.png.webp | Bin 0 -> 20362 bytes static/apple-icon.png.webp | Bin 0 -> 20362 bytes static/favicon-16x16.png.webp | Bin 0 -> 592 bytes static/favicon-200x200.png.webp | Bin 0 -> 25140 bytes static/favicon-32x32.png.webp | Bin 0 -> 1308 bytes static/favicon-96x96.png.webp | Bin 0 -> 7436 bytes static/icons/Logo-128px.png.webp | Bin 0 -> 14132 bytes static/icons/Logo-24px.png.webp | Bin 0 -> 1054 bytes static/icons/Logo-32px.png.webp | Bin 0 -> 1660 bytes static/icons/Logo-64px.png.webp | Bin 0 -> 4816 bytes static/icons/android-chrome-512x512.png.webp | Bin 0 -> 92180 bytes static/icons/apple-touch-icon.png.webp | Bin 0 -> 133348 bytes static/icons/mstile-150x150.png.webp | Bin 0 -> 17624 bytes static/ms-icon-144x144.png.webp | Bin 0 -> 13646 bytes static/ms-icon-150x150.png.webp | Bin 0 -> 14760 bytes static/ms-icon-310x310.png.webp | Bin 0 -> 44780 bytes static/ms-icon-70x70.png.webp | Bin 0 -> 4404 bytes 171 files changed, 773 insertions(+), 59 deletions(-) create mode 100755 deploy.bash create mode 100644 public/404.html.br create mode 100644 public/404.html.gz create mode 100644 public/Puffy.svg.br create mode 100644 public/Puffy.svg.gz create mode 100644 public/about/index.html.br create mode 100644 public/about/index.html.gz create mode 100644 public/android-icon-144x144.png.webp create mode 100644 public/android-icon-192x192.png.webp create mode 100644 public/android-icon-36x36.png.webp create mode 100644 public/android-icon-48x48.png.webp create mode 100644 public/android-icon-72x72.png.webp create mode 100644 public/android-icon-96x96.png.webp create mode 100644 public/apple-icon-114x114.png.webp create mode 100644 public/apple-icon-120x120.png.webp create mode 100644 public/apple-icon-144x144.png.webp create mode 100644 public/apple-icon-152x152.png.webp create mode 100644 public/apple-icon-180x180.png.webp create mode 100644 public/apple-icon-57x57.png.webp create mode 100644 public/apple-icon-60x60.png.webp create mode 100644 public/apple-icon-72x72.png.webp create mode 100644 public/apple-icon-76x76.png.webp create mode 100644 public/apple-icon-precomposed.png.webp create mode 100644 public/apple-icon.png.webp create mode 100644 public/atom.xml.br create mode 100644 public/atom.xml.gz create mode 100644 public/categories/index.html.br create mode 100644 public/categories/index.html.gz create mode 100644 public/categories/libressl/index.html.br create mode 100644 public/categories/libressl/index.html.gz create mode 100644 public/categories/openntpd/index.html.br create mode 100644 public/categories/openntpd/index.html.gz create mode 100644 public/categories/syspatch/index.html.br create mode 100644 public/categories/syspatch/index.html.gz create mode 100644 public/css/meme.min.125c8bd0a5193a04c0d96304dfbf0a7be73c808104a321b47dba0045a25dc6a2.css.br create mode 100644 public/css/meme.min.125c8bd0a5193a04c0d96304dfbf0a7be73c808104a321b47dba0045a25dc6a2.css.gz create mode 100644 public/donate/index.html.br create mode 100644 public/donate/index.html.gz create mode 100644 public/favicon-16x16.png.webp create mode 100644 public/favicon-200x200.png.webp create mode 100644 public/favicon-32x32.png.webp create mode 100644 public/favicon-96x96.png.webp create mode 100644 public/icons/Logo-128px.png.webp create mode 100644 public/icons/Logo-24px.png.webp create mode 100644 public/icons/Logo-32px.png.webp create mode 100644 public/icons/Logo-64px.png.webp create mode 100644 public/icons/android-chrome-512x512.png.webp create mode 100644 public/icons/apple-touch-icon.png.webp create mode 100644 public/icons/mstile-150x150.png.webp create mode 100644 public/icons/safari-pinned-tab.svg.br create mode 100644 public/icons/safari-pinned-tab.svg.gz create mode 100644 public/index.html.br create mode 100644 public/index.html.gz create mode 100644 public/js/meme.min.bcab05de98c183b56bfe9f39289188138284a676835279695151bc852c31aa4e.js.br create mode 100644 public/js/meme.min.bcab05de98c183b56bfe9f39289188138284a676835279695151bc852c31aa4e.js.gz create mode 100644 public/js/meme.min.c7f2f60b55c96385ae5c6ffe1384bc6236688d8bbec184bc4ee83a376cafff13.js create mode 100644 public/js/meme.min.c7f2f60b55c96385ae5c6ffe1384bc6236688d8bbec184bc4ee83a376cafff13.js.br create mode 100644 public/js/meme.min.c7f2f60b55c96385ae5c6ffe1384bc6236688d8bbec184bc4ee83a376cafff13.js.gz create mode 100644 public/liste/index.html.br create mode 100644 public/liste/index.html.gz create mode 100644 public/ms-icon-144x144.png.webp create mode 100644 public/ms-icon-150x150.png.webp create mode 100644 public/ms-icon-310x310.png.webp create mode 100644 public/ms-icon-70x70.png.webp create mode 100644 public/posts/index.html.br create mode 100644 public/posts/index.html.gz create mode 100644 public/posts/libressl-3.3.1-3.2.3-3.1.5-20201209/index.html.br create mode 100644 public/posts/libressl-3.3.1-3.2.3-3.1.5-20201209/index.html.gz create mode 100644 public/posts/openntpd-6.8p1-20201209/index.html.br create mode 100644 public/posts/openntpd-6.8p1-20201209/index.html.gz create mode 100644 public/posts/syspatch-asn1-exit-20201208/index.html.br create mode 100644 public/posts/syspatch-asn1-exit-20201208/index.html.gz create mode 100644 public/rss.xml.br create mode 100644 public/rss.xml.gz create mode 100644 public/search.json.br create mode 100644 public/search.json.gz create mode 100644 public/sitemap.xml.br create mode 100644 public/sitemap.xml.gz create mode 100644 public/tags/3.1/index.html.br create mode 100644 public/tags/3.1/index.html.gz create mode 100644 public/tags/3.2/index.html.br create mode 100644 public/tags/3.2/index.html.gz create mode 100644 public/tags/3.3/index.html.br create mode 100644 public/tags/3.3/index.html.gz create mode 100644 public/tags/6.7/index.html.br create mode 100644 public/tags/6.7/index.html.gz create mode 100644 public/tags/6.8/index.html.br create mode 100644 public/tags/6.8/index.html.gz create mode 100644 public/tags/asn.1/index.html.br create mode 100644 public/tags/asn.1/index.html.gz create mode 100644 public/tags/exit/index.html.br create mode 100644 public/tags/exit/index.html.gz create mode 100644 public/tags/index.html.br create mode 100644 public/tags/index.html.gz create mode 100644 public/tags/libressl/index.html.br create mode 100644 public/tags/libressl/index.html.gz create mode 100644 public/tags/openntpd/index.html.br create mode 100644 public/tags/openntpd/index.html.gz create mode 100644 public/tags/syspatch/index.html.br create mode 100644 public/tags/syspatch/index.html.gz create mode 100644 scripts_nohugo/outils/SRI_maker_integrity create mode 100755 scripts_nohugo/outils/SRI_maker_integrity.bash create mode 100755 scripts_nohugo/outils/archiver.bash create mode 100644 scripts_nohugo/outils/favicon.bash create mode 100755 scripts_nohugo/outils/html-minifier.bash create mode 100644 scripts_nohugo/outils/htmlcompressor-1.5.3.jar create mode 100644 scripts_nohugo/outils/minify create mode 100755 scripts_nohugo/outils/minify.bash create mode 100755 scripts_nohugo/outils/webp.bash create mode 100644 scripts_nohugo/outils/yuicompressor-2.4.8.jar create mode 100644 static/android-icon-144x144.png.webp create mode 100644 static/android-icon-192x192.png.webp create mode 100644 static/android-icon-36x36.png.webp create mode 100644 static/android-icon-48x48.png.webp create mode 100644 static/android-icon-72x72.png.webp create mode 100644 static/android-icon-96x96.png.webp create mode 100644 static/apple-icon-114x114.png.webp create mode 100644 static/apple-icon-120x120.png.webp create mode 100644 static/apple-icon-144x144.png.webp create mode 100644 static/apple-icon-152x152.png.webp create mode 100644 static/apple-icon-180x180.png.webp create mode 100644 static/apple-icon-57x57.png.webp create mode 100644 static/apple-icon-60x60.png.webp create mode 100644 static/apple-icon-72x72.png.webp create mode 100644 static/apple-icon-76x76.png.webp create mode 100644 static/apple-icon-precomposed.png.webp create mode 100644 static/apple-icon.png.webp create mode 100644 static/favicon-16x16.png.webp create mode 100644 static/favicon-200x200.png.webp create mode 100644 static/favicon-32x32.png.webp create mode 100644 static/favicon-96x96.png.webp create mode 100644 static/icons/Logo-128px.png.webp create mode 100644 static/icons/Logo-24px.png.webp create mode 100644 static/icons/Logo-32px.png.webp create mode 100644 static/icons/Logo-64px.png.webp create mode 100644 static/icons/android-chrome-512x512.png.webp create mode 100644 static/icons/apple-touch-icon.png.webp create mode 100644 static/icons/mstile-150x150.png.webp create mode 100644 static/ms-icon-144x144.png.webp create mode 100644 static/ms-icon-150x150.png.webp create mode 100644 static/ms-icon-310x310.png.webp create mode 100644 static/ms-icon-70x70.png.webp diff --git a/.gitignore b/.gitignore index c75eecc..6a2fe92 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -/public +/public/* diff --git a/content/donate.md b/content/donate.md index 1925836..cb38bc4 100644 --- a/content/donate.md +++ b/content/donate.md @@ -30,8 +30,10 @@ de leur temps sur le forum et la liste de diffusion ♥. Vos dons financiers pour supporter le coût du serveur, une 60aine d'€ / an auprès d'obsd.ams, peuvent être fait par le moyen de : -- [Liberapay](https://liberapay.com/OpenBSD-fr/donate) +- [Liberapay][1] - +[][1] --- + +[1]: https://liberapay.com/OpenBSD-fr/donate diff --git a/deploy.bash b/deploy.bash new file mode 100755 index 0000000..d2aa184 --- /dev/null +++ b/deploy.bash @@ -0,0 +1,186 @@ +#!/bin/bash +#set -x +[ -n "$TERM" ] && clear +### +# +# Author: Stéphane HUC +# mail: devs@stephane-huc.net +# gpg:fingerprint: CE2C CF7C AB68 0329 0D20 5F49 6135 D440 4D44 BD58 +# +# License: BSD Simplified +# +# Github: +# +# Date: 2020/12/20 +# +### +# +# USE: ./deploy +# +### +# +# Need software: +# - brotli : compression format .br +# - sshfs + rsync +# - lftp (solution de repli) +# +### + +ROOT="$(dirname "$(readlink -f -- "$0")")" + +id='obsd4a' +host='djebeltoubkal.linuxmario.net' +#passwd='TfpLLyC22fbcA3Sm' +port=22 + +### the directory where your web site files should go +## dir_dist: relative to chroot SSH +dir_dist="/var/www/htdocs/www.openbsd.fr.eu.org/" +dir_local="$ROOT/public/" +dir_mount="$HOME/servers/${host}/" + +email="red+bckp-ebnh@huc.fr.eu.org" + +rsync_opts="--human-readable --progress --stats " + + +################################################################################ +### +## +# Fonctions +## +### +################################################################################ + +get_status() { + + case "$status" in + 0) mssg="Succès" ;; + 1) mssg="Erreur de syntaxe ou d'utilisation" ;; + 2) mssg="Incompatibilité de protocole" ;; + 3) mssg="Erreurs de sélection d'entrée ou de sortie des fichiers ou des répertoires" ;; + 4) mssg="Action demandée non prise en charge : une tentative de manipulation de fichiers 64 bits a été effectuée sur une plate-forme qui ne peut pas les prendre en charge ; ou une option a été spécifiée qui est pris en charge par le client et non par le serveur." ;; + 5) mssg="Erreur de démarrage du protocole client-serveur" ;; + 6) mssg="Le service est incapable d'ajouter au fichier journal" ;; + 10) mssg="Erreur dans le socket I/O" ;; + 11) mssg="Erreur dans le fichier I/O" ;; + 12) mssg="Erreur dans le flux de données du protocole rsync" ;; + 13) mssg="Erreurs de diagnostic du programme" ;; + 14) mssg="Erreur dans le code IPC" ;; + 20) mssg="SIGUSR1 ou SIGINT reçus" ;; + 21) mssg="Une erreur est retournée par waitpid()" ;; + 22) mssg="Erreur lors de l'allocation des mémoires tampons principales" ;; + 23) mssg="Transfert partiel dû à une erreur";; + 24) mssg="Transfert partiel dû à la disparition des fichiers source" ;; + 25) mssg="La limite --max-delete a arrêté les suppressions" ;; + 30) mssg="Délai d'attente pour l'envoi ou la réception de données" ;; + 35) mssg="Délai d'attente pour la connexion du démon" ;; + *) mssg="Code inconnu !" ;; + esac + + #[ -z "$IS_CRON" ] && zenotify "Rsync: $choice!" "Rsync: $choice ; status: $mssg!" + + if [ "${status}" -eq 0 ]; then + mssg="$0::Rsync for ${dir_local}, ended with success!" + else + mssg="$0::Rsync Error ${status} on execution for ${dir}, with message: ${mssg}!" + fi + + logger "$mssg" + printf '%s\n' "$mssg" | mail -s "$(hostname): Backup Review" $email + + unset mssg status + +} + +_del_gz() { + cd "${dir_local}" || exit 1 + find . -type f -a \( -name "*.br" -o -name "*.gz" \) -delete + cd "$ROOT" || exit 1 +} + +# Compress all thoses datas files. +_gz() { + cd "${dir_local}" || exit 1 + find . -type f -size +1024c -a \( \ + -name "*.css" -o -name "*.html" -o -name "*.js" -o -name "*.json" \ + -o -name "*.svg" -o -name "*.txt" -o -name "*.xml" \ + \) | while read -r line; do echo "Compress ${line}"; brotli -Z "${line}"; gzip -9 -f < "${line}" > "${line}.gz"; done + #| while read -r file; do gzip -9 -f -v "${file}"; done + cd "$ROOT" || exit 1 +} + +_lftp() { + #/usr/local/bin/lftp -e "mirror -e -R ${dir_local} ${dir_dist}; quit" -p $port sftp://${id}@${host} + lftp -e "set ftp:ssl-allow no; mirror -e -R ${dir_local} ${dir_dist}; quit;" ftp://${id}:${passwd}@${host} +} + +main() { + _minify + sleep 1 + + _del_gz + sleep 1 + _webp + sleep 1 + + hugo --gc + status="$?" + + if [ "${status}" -eq 0 ]; then + sleep 1 + _gz + sleep 1 + + if _mount; then + _rsync + _umount + + ##else + ## _lftp + + fi + fi +} + +_minify() { + /home/zou/Projets/outils/minify.bash "$ROOT/static" +} + +_mount() { + [ ! -d "${dir_mount}" ] && mkdir -p "${dir_mount}" + #[ -d "${dir_mount}" ] && sshfs -C -p $port -o allow_other -o uid=$(id -u $USER) -o gid=$(id -g $USER) ${id}@${host}:${dir_dist} "${dir_mount}" + [ -d "${dir_mount}" ] && sshfs -C -p $port -o uid=$(id -u $USER) -o gid=$(id -g $USER) ${id}@${host}:${dir_dist} "${dir_mount}" +} + +_rsync() { + + cd "${dir_local}" || exit + rsync -av --delete $rsync_opts "." "${dir_mount}" + status="$?" + get_status + cd "$ROOT" || exit 1 + +} + +_umount() { + fusermount -u "${dir_mount}" +} + +_webp() { + cd "${ROOT}/static" || exit 1 + find . -type f -a \( \ + -name "*.gif" -o -name '*.jpg' -o -name '*.jpeg' -o -name '*.png' \ + \) | while read -r file; do if [ ! -f "${file}.webp" ]; then cwebp "${file}" -exact -lossless -o "${file}.webp"; fi; done + cd "$ROOT" || exit 1 +} + +################################################################################ +### +## +# Execution +## +### +################################################################################ + +main diff --git a/public/404.html.br b/public/404.html.br new file mode 100644 index 0000000000000000000000000000000000000000..7684f1c9dd121a5d282badca7fe26bf68774c82d GIT binary patch literal 1152 zcmV-`1b_R{=!pPfQD8R~i*COA$%;YzBCJ6aq(cAc_EohR*z?E>1X~erPaY9A-@*`9 ztgn9ATnT+`5+lZ$v7_Qj z@G3!>-B<)lc!m3!V>m_esvId2E-Uf6Xbnst<#cEfm_VEq3<${c*!O%Pff`ky$a_?X zKB@NO;iP+a@AmJ7;OKpLjO70=-~=JW-3w&URL#!q+;a2ybI7dFb!z|%+2jaHgK5ef zlyR*CtXf;;x`tYU!aS3$s!WRjs=%x;y2Om@7?V!NUArp=`oSt^lA%0cD*7Yu)Dh!3 zG(HsC2js}U@*&A2j$-fQ6#BS5+fvd`Z=AUJnyP&5dS+ktf90JWyj%4n&ggUZFm3}? z0Be)nBD*SR`Y z^X`=m{+3>CL@>QTdk?82v$p^H~9%DBj_+gs_()hla`PCUzxar*rcO(MF zp=1>~3iyG}?S%dVFsypBt;bgloA`BgWAX1hq<=dM=#0$4RGhO4X}&j2Lj zNmn(E`U9TB+=*6HL1jpv`YH?B_|1AMWVD3|boT7^qjRsOPR%)Yfa&J<_6Yp`ju8?7 ziq-4lnBsT}-fKlJv`a`1!dOe{%nxXhP&BLxgTrQ(3UGC^J!3T7tN;m%qUF&;&7)*S z&wQrGH=wTn7C&iFVX14^CT+UsU@`jf^~#BU=pSD>itqfWi##1~XyZWTf~?)jc5!lE zyP8@`gT-kdnHsJc#yX?4{Ew#?2;)`$GeZrZpmqX@Dt#1`o72X*Cm#e;XEkYcLuqdi zb6$1gf*WkO%Pr$<3{Kw_m#fZ!>>%XYJ-ks_y*e*4m5YIhhxvdDu7ui{$7yIlc#iqS z+%DhtAhX0qHXdG(aTtz2E!oR*oQ)*|%GvL-+ziPD`WP1L0%_HV Sp?Ruz3LFc4E9RncU1LauVZre5#zRy!=3eaw7^p`k)j-3^CJFFK)j3vV`48uT) zM>1E6)JV#SyX_tJ2HUQNK1W_?kFZ0@b|}SZy%xJ#;K-7A&UgOLAwBx!`Nibw+vy8$ zW=ej(GqPVEC!!epx$@6^y2XNG>k2i zOKxURLXb(`Vc1QMlH-In68Zw>46ZAwj6;6SsF{r^%vlCO^RVYJ!3-lj&>7({PFl$g z*geEts*;$1f`QC1DI8=29IBZVFcxypqr|i~gi-}sH}_By#_?_wzIAH=Kh%t9VTQx`ARc&AQh+C<@p4%U>iyzfR3M&RKKG`w zR^FAYwfFb$zx_FiT9ze0XX3S|fRBA`798{p0G&R=gc|!%rgc!;`Y$=uoCDq&0W{ z^PH57FUBvQy?V4eI5?YfxM^-KL9u+u4B>m%#mqd7_Xcr%7VjN4*JHdU&6~vDKO$vy zwnVx__h-;xOeAe@rb=#rdI!ivmY6z*kYU5ITBS@^oGixrnqX3tKpC-KWC9JAf=fbe z@u7L`(qqE;<8}Hq&Jt2*idE+P|LZpFRngiF_j?_w&8*Y6F0iNuq~GHxv)n@O2N}^u}9T5AVBTaImSWq#nMH(2AhI(FDtFVD% z-`*!jG#_jN#NNaqKs&P85?8Y~pvQi465rr|PfnjatVFSK9JGX`Oc{P%LmJ?VAR`q? zIXK>4fZm?HX@hR4Hnz*{@oaCZb&wJjGzH{9r<`Q3+X2Aq3~Y67K>aB5SVnB>1@_H{ z8C7Z*2dz=2R_^=>!)Ob}E3{$KpY(a2Z^`=7rfgSen=7R@);q}|CemTt%@jAI1Z6%_Qv=_Z!JsX7N8_nh`;AhT2xE+4WxG5yK8paGObh2uyIpMvmYl% zL3|p-$yJ;To6nOt9>#H>>y@M|Xa9o9riG*HJN)7>HHnE__qQq?eVi_e#2?T;AFo@d z1KTvhck4W@^L)|tIfoB}2SPWT-%Tc7{QajZfJ^~~bq-b=OwR_QvhL5Q#J!@3-hh%3 z?nomFVC8(~;#SK*DMY@@gl>#4RDrqsrb!-$x8uwQ%DYF+Wg+hg>I!Sh?jrrsZoT&I z)4ez1ci!tT|Ju{!y*PL54y$h+`a)pCUR>nUHj)o{4J*UuO5X)f8Qog&PJ10ioh<>D zwtJ$vX2yUTW<*h^Tj{ziiCVOMX34f-B8)ga*m;pT4UT0k0N^tU+vRU zNf*uro3go=af0Va-(p}U!|L$9rm^|GBFbgnTV4;T4v&Lt*#o;*QyVzjUkQ@th#0JL zOn7*rw^J%+Y;72gj9}vcAj;+f>gBj&#fdiraTP3T z9g|oR>0Ad+Rc5&2tDM|7X*^%S25G zd?F$he>+}IjEnAT6GQ<`=fv|fodVW=ekvQ{0xz4H{k>TZs{GMbmWl&6=J_%}GssJ) zwZrsBNCBm-e+;6MTy4(}2f;@->~tUqI`w=iD~mvNd-yLSZDH`L}7= zemOL@n^`$98U_B0^WOa#1!fNG$bR175mlk;h^^5W1P8Jf1Pjv0$qDunkL=9?k7HlX z-61)|M=W^{WQ7hXKv?CazjR0n`+|p3@Q*^8AT>>Pi#BPCq-ayNVW?_l(m6KA4ho8z zKoz@TCuaXEre>YU&xcKz3A_+Hv*%?Na)|Bt9|MjoW4g9`_?>d?Z$rV_c^F8#%? z4H2?wp=vSt%rC%9#zHRweYE=-egqIP2)3Kma8(mI%c*?t0ArB)SRt003R!3U+N$E3;wv@ral1sV^Z=1w!TKc zv!@t})~#VWHXXi5}fh5%meuAb0-7CzW1Tf@rO*8Bx@BPSS%;&;!U~br{7iDQAI-sJ=)1 z&bAaZB1bzam38-$kF7DsN>XYNtBzAYOKsfpsNxOHca^aaqnsPOndiWwurB&<#6v30 z1J=`dUkUq$pHbTQ4O9YirN0+YPgwqf&0d|92Hn0v_YCX7xlTeX0&mJm89K~8#EROu zDf*cRXhhtEoUa;hUVC?UWxAYoD)6L4{{)PYo;75!^yaXZPDDK9Z>}*{uA$$7UfV{% zO?qc~Bx$r$^1(~0UM95yE{@ly$TdW1@V&2B`KCSoK7#LANg~GE;Uf)nnWVi>@g0Rz zE|3bqCv~-k>3C$#w1GU*_zl^brka3lM9Yn!7>w3CE=?!2Y;3r9z9+v|nJ5z({nrX% zFB^2M^IMGp#h71e@X|k1CTzgmE8!Z0v76y*z8Xj~a+6!}Rr_N{4fy>Jr?+a^fE_jd zX|9(Dy~OjKod>VY`?K^yBAJHA6F^mlj8Xruz2Pk=o6l%FM*i@^^N1F(nui0V?+snB zYW+G~y>wz;7VdDz4DLBqi!QprG}YC;Fl;vrLkqWQB8j;c`nJhK|AdwWD*bOv$K}AS zu+ak>_YIr2f{WhfwysWuH}A~W{%!)o;OW|!Y}*vKma=bTI&NFWQA~#u#+*3b;Gd9K2 zd`FG8^DWnCCz3YiAJoKYxo?;>9lnltzxI`n>_qkA-@e|zIGa0NQv7QpZEs9Pw7pu& zKADa;_a;`9Itjf^{Bka)cbKcvM=8rmuGK%khY@kO=%>ZQpUeiSxx3cEOHtj|{x5C= z&+v2_MA*7(ph(+C=}(>gbMX=d?-4||s_P3mdZ!h@%my#XPN%Ub!b|l3$<=b4Uv<1e z=_zV9t7x(N6HCh-ByPjms9IC23RUwsA7$;b6TEOL;4bCyB9$|?oCpwL;Q zQ;9+cKvSsB!b3BKZqWXWq{+ko@kz+$<@Z$SPa~?cIOUn(<#V|ihz9xKw$gQjOPMf5 zFYKdSdg(UA2W{Yp&8e3)DRo7?(ZTDYQ!d0>e?Zn*KEK|XbxCQf?~38%N5RoF;{J}6 z#fTcA8P5H$^FF;OEtGBr?(PFF`H@$1pQKU;PX<^Wsjm1ezR1Og&iXB4fX!bNJba3) zhWN)DAGvGes<^+igj@WL+u&JT&mUs*_q7sJmPNG7`pr#O=QTJt3O`Vnf2p-JO?W^T zsXW2c(%er7feGeECE&o{S!j~~tK546*ZUzFZDUriMd;T#?_49XJLAHGcLnjm43|^` zn476W^HKM!_Y!dDW5XHk$A+sBKREY%LD6$Df9jg8Ltz4`F=xxN_}Bb89K?N{{^7gc zeIY9j&Ut;YU)e3UtjBTGdoY-2E!w3R+}zWPU7mxVmQHBM=+d$O3Weg#jEf96B18{_FT z+0WNyIcHzS7(%y1Z3%@8@PmI|fxy-NJO1?%-B9ojPvk6wQiq#ykt-f6+iipY+f|n*tLq?5Y4}yQMIejptYn2d{$@AR&{?5=)AeFJP4%>flH+rdX~qnV0=!0 z@^0!@iv|>BWmN``L%C|krHx+8|C2R?_*rxHsNHT;x;4|5&n(_2OxySMH`hS%T^rr) zCK;$u*v*i?bHkJ})*qk$j(?EN`#T)mIe35A zyD{;(eZhphFVtA0oCmxb!@r2dwmQAEO? z%ys{H`;S7i8*+Mko`Sx7>TGr=_lKE3eQb;%di;)U-GDxrUzHXH&~)^2^n3nc@wbQ{ zX#9;WAnCE_(D+BM2Cm4D4U!nkGRY=@U0LhRu2cEn)U|3%Z=+&E&wGYV4np+-#HxpeREEpm%o4!;4|m>F2f*!M^8;`1`uaxvUFr{ZmYI?Vs2Uy`$EE}x7x0p4;LFJFz{COOrx3p;>kdR0F)r*?K-#7}IqXs3I3tp`6Z#l# zhl9-Y$7kG0E3VSB#+A7Dd&Rm%Qz8)UEy;N1Rv4_1JrC zo|+U$r=B&8>@SuZjM)9!@ACibk0%JV@Wlq`JuX zifo~vO#sg~vrQKHtKh{-GwU{NI;eJYXdJn$H_{2pCWLplOcNNjm=yq_-H8L$*AIpY z+Y@aC%S}Umq0!YkiutW~xHi@fZ7vKnAfUL~GfaL?1N^XtRKyHA1Qhocmr$*6nYa#H z(3$yjf2ikYth^UO@>jr8)x@+O;&nvwtV8roZb0HTY|q55)Ws}19M*P66!(8P-^4?U z&4~838T6G-?X1wl>fgdawZ4A`4U4&S|rn*G8|lVA{)!P>$Hnde*PZQ!jUEQ}01#)PyN$ zw5nfUUNbU=Kdh{Gb+Zh@zml2Hc0|_dt?F znv229`W|l0^!YiO*X6vJHpekr#A}RXS;J(b-=U2gJFHg4XZjz`nC<(g6E9X%u%U%Z zy|`G)9KXcq9i9kU%I||SZ}4_xi+{YpI}}%E8((kkGu&5uraeC+_OncfoEfCbB99@G&g_Y4|kDVW;8~%|1p=> zLUUP1+2+|0mKSCRxGv2NHe}Lo>c zSF*RyteN8b zV=sMO(7qM^dpFLWeGT0Ed928#F*Kr7&*ybSt(kri=$G)>?SpCGsTcUQ)i&@t?>YXX z)s}V|sW<4ET+8~Xac?N&yxl2&#!gq4Aw!&7*>9;b zdkoRYBHpn%oo#^r6_1oAoUcEw>^C@*H)Y+3QU?u~OpZ2)wMcl~X) z6)puC<=(;Wick1nQsACDnh@xGH}l@uYnOMGR*bLsmYut_BH%|n0C&A1NS}}G6(t>A zLo}k1KAMO4zk6QWnX5CQqV{dr$b}&iad;~C686bm?{FYe_!X6Exi3LxON(SLxBu}| z6Vi+CXph+78H9@EUctUZ&nII?-11BZ#+Qn$Jb)z>qe?`uT>82a+1NT9{z78I+pwBJO%(XcT1nzm-HjPfp`&=Vg*R#*o0(GkpR} zlb^T!yx!rhHSXAcn5#*n?2qJwaIL0|BOBbuL1SppKEFFHF24sP1h=%Y^f#q?*%12H z)6DET=`=<3THmxvpzAn7-QF9qgMj%emTlhC^(a-#x*8@&>xVUm>EPsGwwT z1u@+l*V5s>7;m(m1ay-SOnN(TOZn$FnmUKBowRVJxVNYjG;T&l+w@kM=guHsV~1!g zyTrXf&7DEHBWB;F+>(JkrNyI>#6mX%r&-~<2h;06Ynylb)}HALWT9TDXWEo+Ap3=D z+Y-J#!8h!|NoKZQ;5F7JbD7zpdA3)becj1pRvJh&409ITpr=QohI3kjg!0z$(LfTh zpd(hRI?ZwifXBif9L@9J$~X3+L?c+CeMj=RG>}gU_ZR`i(^+oL4;5h%q7~D+&w+S?P~4tKcn%YboKx%EHxMSGeB+i(=S|T&K*XACP5yvY?xJwNXZ8DmbljPZhh>#Zj}5958uJ za`~n@qlH4r8fRR;I7PJ7UNKI5h#$zdN3Gr54DbTQPaiRw9GeYN&YH`#c8+KqGtO7$ zynt>u!;r0xa;ZV8kR3G}_q3Ieh56OME4Pzt8>mt#sW>Yp33?vfERNmgk2S2K*NB^v9Bj*o#`-KLb@B^U`*E zCQu8;pRwp=W8bDaz~O{8>z?7A?)MhVX)GRLm1nXaQIAho0SoO_J&wfP+T~wLVoyJX z;uF36>-Sefv*0TRvhzpO+TvGj>jy_vs4sHp8k}z4bjo$gW14m}*IUhe75x_Z5L?r=c)RwcupWW#TT(4( zP2ws+*=6r@eYFPzIahrC&Lz)q`*o{c>91)6`R46ChGy3omh0GEkAvzm+>Ss^wf_sC z;Z~x#6TSAIC5dt!6>1M*KV;E9gvGV@o;jvu8P5^<626hG+UL6Ik56T7L-f{>71f;{U*xWM#FQ{p3O+Zpv1JVUot4als@HM&{=l!YV?mgN zPhNxn;k`XDO|jq4@qfjd;hsR(i#6x0 z%U2u2cd)9@dOgdCd}AGbhEZrcUrg{|47R%UHWy$lE+E<}qzBYh8{?))(dwvuk-S0* zUE(fb6f{`zq9V!79~0(^<38(yCs>-B1R)JmI-#LU_t-v@cFkVb`HE zd(CrZM+D#d)$e{x+nR1Zi$GQF9fg1V{HJghay@~NS?iuGgfoo)vjC?4vewl~Zrw<0 z9h#}f!xNPj`;Xau<9^2)%Ty)7Ea|El<#!hGrXIbhST}G zhrUYQfMIe0PJDhf#U1|+9yflC`W5eA?Y-rfdd%`(M!f?&(Ux(gcu%-k8V9F(p1!wX z@IAGKH|UwN?%F-4##$I1U34A-!VCAfE%JIJMqQ6dPOn^s*sLuJ>zF)btiu zuZUv?NGm#1{fNyeEl}E?y<;o&qSALn93v?Y?)<5gcxpk|0 z@A}=%jh*jZocg`z5aP~GIlb>)w|Z)AuUCh?caQJ#)^>W#DZIPRlbE){@iABL2LX|3 zm}tm;mSc5<9e9J_^LmHZV*{H#`#$5(kVeR;!V>tM@#VW;u77DxE^?=w7YEzx?CvYm znQ(`&2E^%i6!X37?PZ_M`H4NzwM;EtUKUgOlKn|Ak={ns!4up!^z8x1C^=j?DpIvA&pXoIwP5Jzu$>+KwB|Gd&mG84?w#F!lJ1wi<0YZQ6rBio7JDfi#Ug_J(n&Hb8 zu8iY12Gtb`Mm-v}l5+a=YSQcQ+*TVI6duVQzcxmA`#OL3utZ0*7~Q>N&B@sM;34X0P6Y z1=1XEVQ}vYBu)qY%BfeeUII&}`gsNpyp5$z`9D-nU>DrE+0#6JY=BRxj4h4~#I+0m zgjCRN_eDp)hE15Z|Sbk+%rcV?DpmgXTkVLZ%62j zYYL`L{U$oq`k!2JJtjHc@@-gE+aR-$&u}TDZJ1VMz2=-~L!^c6_r!N+9AAm)XZT8@ zL3wTfzVh?3?7&f!9-msbW_v@G^TM?aOM0_#O*yvR>5&e-l*n$E2x_$>D(^Eq_j98~1d*wmp&sE^GIh&O@ycJX86+ z?x-;qr2_RRwr*^}(1jkPN6E5BZ@_#IKAt+$zEuOlD|tgrG0vZO%CU~lfhqbAZU}W| zjCyR)Vz+0fv(g^?Y8cm1IHqtQt6L^=a@{Hln#5~LQYT8()w<`Ifn5}}# z>z79iVpkBo-^ZIJ%JlT^E~RKxbL8ZJq(%0u$xbs`$9XMWm%q(^p(;)p0x@qSf>3#X(0`1Y%9-CkJ8c+KxIbY|c@8Aj;33f9nzbzqrSN zfDVRHZ}WkiKc)>cb%ocw(NhLo;vL*78Bkx>GaP%Ou^_V~5NCnNEsg7VYe8LbZHtbJ z1I^goXT{Csm1zIUgxx%}2p+JkN=(1j-(jpx!0N0?{Eg94LJe*QqMM^z4oD7hZZv6o z_#yl#grMMT-bOA#2j{ha!!)m0o@KtJ zT`Lm>2b@%L2J}3SUApty^cc^TuLdQE1xx9u_uZ|qFZ zaNATM!F4U$t2HfD?;M2hCw7Rf<~*eBDOT}^vp{5&#sNmE-ALUEw&%TxW%;Kwa@<1= zXN0Mo9`Ie-$}-m*E57nCOU8m!%F(GuK#p#gxhB z{UQ8Fu^ZMz(`{JnhcHA_hNe5v3&i}b0?6gMR9isJ)r$m1HfTt`*h!RavfwuAw^D7q ziJDEy9YV_d&a_CBgzY}EPmQzCgdGa|#FUDkch}SUL*8EuHE1A;aq`bvf5rx*so$PwI{3)Wjz>SjZ9*LMOLYgb;e z>E)f|$MUuNMU+gg=r=ZFnVjD0zPc zK^o+w)F$Kd;~si%tWZsi%^jh{B%_|L<;xK9;)16oA*Rdj@XMF z3*VW_s5qSsKSN;kPn~E_whOm_nDHOkY9#JZ`Kkfcf=1|E_N(Y7)2kQao z{!r+Ot_W^BE1KP-y}w%%XZDsArx)W<`dj?q>=YRxVUtne8U4ruqiQX@W)0WW-LnIt zXD5);ER{UM@_CD48#Pve*0u-VD~!hcMzz41SH+l=|8$@wl;q4Qp8!$j&Wy^@Htim-PMWKM*h01IS z6@KyRiIsNN_CM76kxe2~ig{2m%&CEsMT=NV=;VN;4r@wY2`pe3{HQePrWp%e+U1KK z>5~68XRj;OffT0`x@ZR5D~jC+idJ_YsB>FmI*rhpcNM(C>Nv4QINmxs<1Fl~FPzuP zWDf4H?HK|!;0oS#oHJTy-1Y2Hq%qI7SrAYEIIv=dh=616>t#+i)j{#!wq^}s_uQwZ7^HtyaYI4mfM+dn_@TRV} zp{I4vR?J*R`NjjX#42t_MPJ}MpsUR5vn!yZTy381wqMS6WP)-zr7CCYVeK2EW#*g; z{g&y@lAOkj$qMYn?J{9A(GOr}k2RQ#xrbw19!Ev9e}eJBI4NHM=~L$AoUQSSlL9;3 zA*K4ty6)n87)2SMjwbI}p3|0rU8QV2LN-FSxm2zm0b6C-yGz|8AbK_Kt_sHmWUQ_0n(y*y#} zF>}3BOdXYc4gD02c}E@})^<3rv`tVe7%TA=*YnX?;l|+b<>gEm*EWtq&J?d+`=f*{ zCWycrw9)NcOM(t*I0pge`z{JzV0a|U z{^4$P>r8~_A{h{7*+HGd%{kO7_zOEUTRY?YwYbzZ2&`yD7sfEN3o*>&0_?Oy-5dwc zsN<2P;YCgc5>_DdFnjOS0~8z_g>$c_>P7cvEKCh%UaKa~F1Q%nyO0}eht25}i&#?x zbyIL%m|DEc^)GnsYj4g;RlHa0Mz`jWeU>A>Lz~!=cK3BiKja~|Y+x*u57StlT@c92 zCsys5@@ONsUucD(dmBqM{CPB7+vn$)Zj5oxH1 zO=)sIXP79^l*Yv zjg(K~ajPBpl)ys7e{lK_+;Nwh0WFQyAJ@OBzB+`P2_%D9FLaa6@%9B-S)%icu9}qk z*VnB=7Lf|&l?+1lbU)Gf!!dV)x`@5qCiTVem6~e}bD?^U2*PHt8RG62SqK;+)V<#+S7`X1s|ShHinh)CLN)#G4*m(H zx{MMtLpiL@zNZe4{gjcn`+~J-7yN+DBF+sxOh=J0y+NeCE?Q)k<`JbMg=}@q{-i+H z!Y+4Gq@E2`krD~bRbS|ajJguz@_nH!zS?ac&I{uM2?PhaYi}9fcNPQsFUF>gNlvUz zPRXoo>4L~i4w3iDO0laMip1|li^DzaSTp3hx+;lyGnS=fwtdq(;pk)PcIn$wIbknG zSaTnX$}FZSWA|r`@`wFti2juxOK&RLS}8N`_=c`~o0i#C2vpL zJ4beM?mY_8u{&pRWHDdA$D(*26(43mkc75cNz3Rczi&&uIWR7BMuH$?&?Q(1VY z+u~B2T#mY5o5qZE(k}z08j^2JNuM3xQeqr`_{{!O^ZRHHf5!G+sg?*t zTbf7XNwp%E=dMkeHS`J+X;alVRdrRyQZNk?iQyufj?x>^y>fqx`_fLJHn!deLm#7JJzabnD9k0$yxLaH<++CzLDDEnnV{8GH1kYdTxZ8^E3{lH_5j2MuM$+PoQmn;(0ZFCW=DP{C!j943 zOy-tTnNzEMY94kQ%YaKel|jsOrav%ICaN>Yj$v7+3w{Jq&$o2mR4L%1C36 zcJ93orBy>KGSuY4`4 z`H8cQ2U{;rNV6Ong}3~F-Rkx;kuPvNWinB_?`UVH4Op$7<^40<8uBWW;c5?$O%mOV z$ao9mGu=T^w@MV+Yii_6el9SC{8R5ke82RU3rlrI1T4CMnHAZHBpUdrKCAq#?k7de z*x)Yd@#rnVHdVyE!Xwr&Q#*QyMs6F!3AL|5xiFSH);!=x%L)xwkD%mQF@e2D*}MQf z(57U+D8#fQDtTy$kuJ)gqHp%KS>a#R`~X8qoUE-R65L(ru!+3RVSO*zK^3>&JNmbe zB8;8?1;>y-dtS`m(W4ib%SGY87qHbjI>~`)H3A7P8k((2GwxJL)Px34a>J%BsD-V* zR!#j3aKijLKy(z`62jAKg47jXTp$WEL#2lAta0m=jkFHA6H6=9=b5}&^$xq%<&YO$ z`v!mZ#XV#)>KVR4@!BkZZl1@5U@q_@UEuTgbg&J=ude5nR;@a78o(2x0!7(iSgxtr z2TD~lR!_)guc@rAylCbgjfLdfN#0$p4fU{kr*(#I2d=iPZzvth3|DpjkLu*5sDDOCKb9e ztXf^U(04n);ogcD%3U=dLyL4qsbcwJv|VhjajEFyY$q@4fmKZ5bRh5!EHzf#7Ivd# zg#;%R98GjvaOX6ELf)ua0w}+(lFg2RWyH1Q7}m*X;!4#)- zSID{Anj=5?m6Ahe)T*iVdHLw+W?A(j#FwYXL2WX&1QvlvT*e8uFAF+gw?RCBS>ha<+fz8Ky}1g1QREJ zo-r$RGbtsi9R!Poy39;=>0zqYisao?tJOwU1G=(gH|v?G95RmmhIZWTqTJ?nOy*+}cmG5l4bp!UvO zq*a&cyJliC8i?`Na-wrO=lW7r)k~_ZuC^7I8QY^;{l2SGwO122woKnNo$8=qWhX1! z%R4}K^uI~}pLj$&m`O*>&PMMjLx*-m7c{Z2g=Nh(n^;vCkr#b-lvjYf61(6`Jp24VbOTcX0B~Fr(Uh&##rS z{8a5jZ1$ctyg57u{VE&A-H$@g$S(g<^?=Jv!>Dk4gzvmHpo`4Mkd1D`V0Ndl6N5&t zdev8Y+L=G?2yYT?_k81a*lpu9uQPc2@m?(L*fYys6r(f0cJWp9Wi zNl?GX`Rqx?oBjbVJY=tJX!XcSkwt6;D1}zYc(pAHTTDm-=Lxy}St+5Yz9J0jPx9JY zv~vWQ-`%5m2R;NVxZ8TRC*$m}fu5IieV`4YYUXRxePNiAL zA~Z1E^Szb$?Q?TCw75*kLOV))3VZ(JokAubG&<-q3dUlX zd#|komfQM%LIv6jE~YU%HOigbnVG<}{h8|DFLqQ=|kv6DV7#`bE2 z%JgOjm2pl&^uqW6);8Fe_^Gc=!*;FjVzC2-n@VVf>k;OM1q` zOMUV4EEZhQz$%)gE%AHGKdFo_tGHT>e2%y;tcFN6;Z6kCwrYLf4U^JV`K|^|Ar5+ z5|>+b;&kM?ZZ55VIjVvMeO$4Q{@f-RPuAFs^L>Jz)Qog?vM|=YYc`vjoJGZbEx}SV zS!lq3i5{vzk1aO`@go?j=yqZ*tSTpQuzH5M3nDPx&tVqDMWB{9`IbiYy$wH(ZM*q) z5~!?ew?W`vftN$MwST1!aNfMWz8gcMq&fFC?-5owF8M6)B-e`VynVJ$GslFx$fy2d zT9F^qFZO!I!Une90>`vnb_4wuX6>2nsn)&r%^i#VYmkp&D^)h_KkxEkly_@GTD_0b z-;;LvS;)trtbjfAr}rT)qG-iMs~#qMD?{XG-D8)IcutyJB%Q%&}71$Od;~1iu>pQwr7XD$23t?QA$!4vS zY`J3tdmDD+6(g|jH?@?kLYih=p2k11cBxf7{ZsrtoSkjRMhhtz z_x}6e=wg1>+!nf?gl^&(kVYyQUQEs93j zVTJCuDTuL$f|0M>b-=_Mxlc3Gw9rmGP4!vm=28(I&fhv4`tr8WxMI~EKWX;@em9F# zdbjD2xY-D!;A*`!=sB0ae!{;#K)P*sUl0h-;X@3f??*vckbmCdHscI7t& z3`nd&fB`^L^c&?l@?!Z;<2G{!T8Z9ugjt3zm&l%;p8n1`eQtew{hJTB^XjL1wVo{( zZ!V0|7gfC&FDJ9b^_zhhn|e|` z%r-aG?-oC<$D_Nt`s!x0xx2c&e0X?Jvt6NDuC6a%Rm0)i7cX9~f4Y8ARTaLwSYJ)X zZ!UH(+}*F{rQ&3KSSO-;?5BFXyuDp6*5%E``emc?YBD|4 z=H5KmQpx0;FEw2f4N+sbeq3xuABOE$(Z^G-lGgeX&yF=euh!LvIY{x*&XlLkuY>$| z`2X<2zCf*)_p5O|#hbNS)SJt9-@iLN9BMV$Od8GXso(l;izSQEZN0u5jqCO0zP!Bu zFq>>{-dvD@JR~A>ds~Wc>e=-tB7x{pN8F$XqzYE6df@%SjlG-0164 zv;>Q0o5w42aeQStovv#%tQ%#8qIiKq!l=Fc{Etni(~xTMv9C{j&7A&PIDGB(Wt%L2 zo{AqM)5pndD4C020oW-r8jA5rWc*y7nbRN3zY-OTdbzq;)li2oPmuG^QrjMzF{}|t z>EOem@DYX4sf-bC-LWcdt7adL%|D_rkun;3;aK&0_o*KivkkQA{kmR##~SGmiyzkY zksx0HdNyt7lvT1O_%?R0td7A_8@o-)hZt=eyjIqv+^Bo5;JuE%4cLVG+IS1K*8LZS2~p z=(U&N0Z5azE%4DQ@*&vN25+1SMmzsh@LX#&|5d@aKVclj&+MeE_5EtJSi>v3eRFX; z+N@?DzJi)0a@qTV#(zd7s6r5DFf0+R@0Mprzh*Kz#fcXADp&dl*BQ$u^J6RIZAD;E~p4A5!+Zhb*Crm0&7wxC)*sI zALo?WambQ$-dp@WbXj4{0?Ml%2yN1BidvZ6q_t^NG+33RZ>Z|&$-2{%bqhtk(>iOi`t4xXN>Iz3r+M^BxfBA@WZpg#js)51tuZDTKp z8QR3mP7x?12Rw8bMV;H!?9`o}tXs&LP0meg{%L|@xJPZvfQP=occ3tOLD9BRBKUSh z)D&8#68u^ipN37Do~%1PSr-(|DmqX4^CeWPX{6#cVBwS7+}EC1$LqB0#GJz1@>YNwTo@+P;5~DSuj4r?B#6xpzds2-I>S% zebm%pJPe@F^&Ap-tD6b6BK7dZv`w)O;Dx$F9ByEuO$U7PUW|AsHf^Y5=aQn>%&(p? zcA@TAsoSOlz4vdtB`NiA7-P`U2*zV9z|8dmyij+>tKhV=!p?bE0BuBmR69g-R!Y4! zP?*{ELh6OSvl@|oj)L<9bMCV>ZSchAPYcFd_W7digOPVa-GP~2lNH!a#xRby&3N{2 zQZQODo)9yJphF+P3w39c3clmlTb>ml$#_n)k;#JdP?*`}*axY1uA}R9PFBWqj#FCX z+u%8L%i8;nU$32Web9GK=sS3(+G;J`JHYftFy6C~Pg(@C9)=F`&<794N%sya4CdQ( zq&|3`grNgWmz$Gm`$#^*QR>5x_tL$?Fb*kt0iNAEiX_~-2#=sS-MJs~7z?%!*kv%w zvsO6=q3glopp9^Cb5PD%q3z%gV9Zb-Vj3^B9q=SAr@nRIIU*ZG5<@FQ>_Nyp>Uy26 z>jQQf%OV=nt#n-RZ)_O}!nsRU1yoKQ2PgaNdokd0B&<2= z55ZdD;1Da!=3LDggYPEqpxK<@ydj0~C;LwR3UNV_Yd&}a-sL_Rx*!xD8*XPvC_K%h zJ6g&4fG{t~XqFepfG)k@d^ehnCgsjbC)QzN$P>Hu-gX)9U9x?!@=@qJVyTZwD0`ih z4K|9bt>!dc7AxEeom?-V3vI`6VsmZB7P?iCZPQ-emy=31dMzAVj1L`k9~_)0lpWMs z)G~pSt+G+;EU>e4XPfG>tm@?HIf}6lW-gvc-FdQYuReQa9XXk>)@=M_-V$}S@wpdq zd=$!#qJlYdUV=|4lkn>~sg>m{O?HaCn_i?XlTdb+=jXB!nqE6N`^gFHR91(ONMfKa z^PDm8Q}FRVboP)?C-C&2-SSEjNN=0fnZ?<6=(Zsr5dR~zKiS*4MU6)P2T zh8qi)NN59S`~dLn><&C4O*v&cf6l|DX@TdYp0`@4!eHU%_~xw4)&!DrrtR_~{)y4K zWcvWU>+^cAg#|?Lhaf*C;rdX3j5HJW#qWdrK$d(TunTQxVe6c3+kli*2$V^1-3DHm z_k4aSF@v`iYl5DY`x!7;q! zEJf-AcItZdPK%HRC@FiAx;}8q$H#V<8=)IDdD90&N8K>jiWO<#rAwi?>TnT^Vp0~gWs0etGL&@e<|0WJW+@$p%% z&~WhIqswXM*xd4}!RK+Y7q=itnnQM{1aXh`5UE8h4uz@r*=lahWygZ=5 zDwjqlMBPgKN6G;{5yY8f==hbIz>`s-LS(&_Y zoX4ehMB}{*AsX8YsSllbI}cHA+d0b-yKim@-|sXD%^jwN?`$W1cIWTc8j{&7UTm6k zYL9qu7&S@zj;eR<<*F!ko=1YQeZZbN>#lQd9(7W%bN1a?xt|hBFqqPM9vopZ+65#;_1#q% z4$8{Ob49grlJll4(etJq#=`(;56j?t0KSp9`@FSNTMy7<9OUFXJFuYRb?yZFu=rxu zetYytF!4)*kDu*@{aVLReo^r8IfKv782o2Xr~FNVx6c{;b5?lfIV(K#oE0AZB8B(Y zJ8JujVzJkLQ5>^(9}{RDL_$AjQ{5 zP54TxGHeHY(D=Tf248E)vnQUH`?x^w8P)WDgZN|jqAnw)1N+dQQzJDd%Qkb-i~IA%bzi} zE-|PsJG}rs>$lrm-NMkg(vwows#QL)T)l1dg!}hT*N2<4y2!rU{Lg>i-HaA>^{+pC zdkP`zmTn`ZX6Jj{Y>}Pyllt(7yL$1>ckin2>(T8KyCA>DjTV}&Z|bKJVt;Sr6FYF? zW8CKY{{5d|Xq!yG(Q4z=&1N^yc9mNV%twpsdkmJh|Gc z`{m~A0(AT9pqg#|VO@=?_2cdP<-A%>s{=;y?u!N+Sa~#+$-l|**U%?VAA0SveOIrb zBi6rYY%kU?|5)FxmXrH2V`vZRzr5{tv-M^*dw>6{v|X=eKa~ee>~-_tu^KNI8$hV` zwt0K`;AFPGLjzZ{1-obaXM0CzhQ2P=Glui#Vzav6SJ)iyn<&4|p;5o$OOFES6wP2* zl1)}8`)Y5??naxN!%qI~w~yB;PGLo^U|+s^*}YKfRe9RDdlAfA{#aivmWz7#`__fH z;_Vqe@Uc4ka>fK=T!DCtNwe@z%h{q`3Z~bqIedZ5mD`t1M)0^+E0Cx8vF^Q$Y`ZIR zd`umgG~k{5iQtD-`9n%m8m+eOT)JsLL3 zTZF{}vUr`W-!>i48+_YwXNJU^^PRBYd+@SiDn@dQPZNR^$F-t~ zo(BXPC+!U+fS6ar9goUEU~E7qjQ1u0F@T~ZSA1Md4u%2StX(vfHTca@J`_>qm@^>` zbj52K_+rR`X5N4bm2qVehvQ3iB3{f~lA}cfywEinG)WMbY;t05#{ibb$`YS29m4>f z)4a<27UWVwQ?eV%A_rgp?;BsPH-n72^P(NC7PwmV0904l-vl=uG8?PsiV%|BR^~&AkHyhGLFw=Xju`naRUWFvC5$V6H+il$hF*ZufJR_d z)B9N#0Txy&-gb4-nO zNe40cm|XC3j*nURm%98&Bk%u@tb40(8PS--*)gKr?qi7^ zVx8GzgTR-8;d74c3)yn-Am78PB5&pT-}cURH?r(H(yx-x{22jB&c0tT<3BU-{PRPM z8Dv+~h{DdH6YhJp7(s zJbV(xyav%nQKofeq1=MThM8RuO>d=ZfZK?XLz$`>We@n=;uu3N&4PZ84f>ql}UttupKE=ttqMd$p`nbLIIeTfFaJ{ZzI7 z!s2y(p?LlK|J1MayZ`s&A1;6V=YRYC@BZ+9nu}koOJ7R&zOw!(@$y%eAvW6EH5pZt z4OOCYG<`odW%)Q7_*9E3QB{fZ>$}sCnJJU2%Gd9uy3HHUD(+ylNqRxPf2%Czq_2@` zamTPMxh|BK+e&3!9@q@Xsz4r8KPumSRxLkWKb5oXZMrQ#{P6j#{#E82cVy0NUa&&H zb+U9-sPUG{|2-YB6E#If6SBD9Mr*=FxLjE&bO7pFy<-((zjo$=4?a2dy3%>o3Ou4!qL$wyI6 z&Qyj)aTQL*%$JFAOYO?@d@E%mPe$shwi+g$bWA%EHy%2vvg&6M^VyF1yD;Rurv!-E zYGbl_MF3LykDfXW2;D1Lf=Qq*%H@IfcI%^FeZ}MmFAsFCWxc}198I;dGM}9~7t^!3 zwsg0f-axw@O%MHm=$!Ap6l@>1PSASB==#i}x66T^O!PVfZvUs>WK7O>N>xI0Z3&eS z`AiuQO|YWe9y;;HytS6y=9TfVGEff~3mFfk+VoX>;2ey;^ewYMs!PhF>sdGjYtF9E z<=tuO+m>Rb2jzcyVZFV|of+>{x9^RO$AGu2J+6(2sH7uqpYo86wV-w$zF5jrU1=kT zaWOh!R~kkpB0RZ=u+vGrO$nFGaV}4ZPZ3vRVBnl@7?l^fg@Pk<;Px1WmTaJ z73qWVf3G_+E=AT)3Gj*S#)s{`zE0H5+47LriuXh_TgKCsNp&!uEheonfQPmHYTU?D zCK*of$Ui|(^f6YH6CiBRX;6WYd0}|aj|?MWk`U@<*p;9-<1X2mLT3m2*w_)lI zcNmTtJF3v^PK~Kk&z$X>C9&_)>Th39mXUJ1mZ@~4t8B#TBs&QhRkA*$3;S9|pod_f z=3wZ44woG8x$0o3_$*3^=>Gta1CC?=%Z=R>n8}>IubdcSQGe6cJ%VCqXU|C>y*>fISO}d>%urCZGC6O zPMK`>n%swF@Iz|{d}ggz5SL4L^Fo#*cSk2yF2P0qCuDQBPkq`r8ro%|6gf3`lv z!x_`6G*rdlSRRVXsbyb02*B(!>4j3vqs3JWqCKqENp&2_NPbiqj!MuQyYzh-mUU8) zQ}CM`ToW_EkL&lf76k4zDCTDcMco$&gJU`h+Rix-1%uolOpV2L#$vLq z5`FewW8&Iu=mH^mt0W~!rKij++ooQerl`nFa>C(hOTQj1f_7rS^OIL1&d5ie=Dq*|267_6uYG7#rXuNJr;1wq+x zsCr!OLcdLw%rXXXv{p`9s41lnNBY&JK0t;p+u=ytOwlu?yii`FQXd{LU_DETN5L>f z#o@*q_Bn=MnJur()m^261X?2}FCBEgDawY{37h!Mbww_|w${!pcV8j!Cf9B}?y&%j z0()4cq_}o@7%hxGXJ3wd|jml-=oktIDiEBg&dBz!FnAD=1S%zbwns zWgB(p%h3+4Pub2sYmAl;v;FKn!wXV2BOzK8yt*p|6%R97(?bQnr--vG-=bNZb&M=O zM+v{>E?vQ^2%j_qc3N!BFqK%%y__ZQ+1)VkF3*vvuCtNhTc;|&6mqh^06BTS%=W(F zCbs^>ospf$R|spTJy3ixY^pP4?kgMOkznZvAEtN3zZpJ4#u8hW-=7XudB6d#c~F z@?Q2XJrDM)3f`rRVUMpL)BSz=$$h?b`Og)zzPIbR6T9uoB(pWyEvxcJhKWo$AU{fr z*)Hp{!1lIZa~G-YlIz98&`Q-=6&6Z+#<=wP`M*`fy~X4I$AAChAHQ{%AS2!`XM9B} zY;;!im?;;p?KPn1%WHgTkwkGH)=K4~w5qPsn|I~bS)Te_1^NCS{dXzyE6E4wCg}QA zZ0uqb92>QS$cbtZA#$#aEm&DnDaZn4No>0&<(V&o-+HrA;NR?nXDLZl9C)>+gwl95 z)?U4j_LwJIF-5hyQqATan3kJgsZBAIS7f4-2IYFQY0%&7qhAZ0N&;L4wq!fKA5_)N z)z(&0Ux?B@kbuhA2TRXvd#Bci=Ra$tlTlo49}oX$=H57!ZHS(J1$p)uo{mjZLjT=r z3x`A3&?%!%blS8f=465cN>An+C%vWm;qHGX(V;Ht@C&eg+gd^UIz;O~OTsqO_NF>TVx?|K~~swuq8SgpsW=P==w9O6C)M7nZdi46l@U z&V8-)d{**IIM)v708n{h6+>xHPh%fo5Eh7aM^f1yg4NDW#)XnNM_aJ|6fpO>BUIi= zom#$7r~Yr%sqd#g{o>+E$>Z1e5dJzd88Bfro2qUwmCKy76zjHCNp)X9#d4i1kkUG{ zX>TvGD+#Bag#x?6p`5jnL(jiA5VI9^Q)RJHRV_WU0NyKx`lTheGfqP1cPdlAWWF+L zy9@JWn!Gv5h07DvSq+WH1&q0d!P6>=R*YE}d!wkb&Dl+DGl4s(a2jbYwzT#bbRx&& ztja+>f!jS$o4G0kT;L`c+u(Q@arUk!Ro1w*C_na&lxntIikr)F z@d?=1EY({JDz93sF*E}eblLX0(&8L-HFi;RtHF??vTdnm%QH44*%)@ll;GN7{8Q*% zk1+-nm32?1>%+*Aa>a=%Vwden4un4j0KuqpVLrezWcI#ra>sd15SkNoNdbqF zw$rVJ(Z=*hZ^2RIg(OZ)&?Y?lMi7X9_N|FDPJUbK*5~ z)5hvrD)T6IQk^Axc8>3ahwZTYi3M*R_VTzR3l`{>hVGJQBPg7A7yj%| zLNFq4*N6FbTFU^U9rqy5t4czz2yQj#_$qMA;d!1?m=X}pGMo1^p_Yp6g`WE{UU{z6 z_qk5Jb=;fnZhYrIT;S>HOgDm!3*_bH{{SyqdCWSm?A{LDvVB>FNlGr`x)1|UVbCuN zSYO*@H=F3TY7Z2PQq5#Px)tey{EnTKG-d5w*!hI$aLJFBE90>!!*9ZNa*&DQ8OG zrfzs!8)CWKiz3+~wka=M*bt#Z)e95bRCvofcGW?ftVt`LDd$%}+Y}L572ws|)r&V( zo#MW(%ni!cJ-aN#09lP68NiF~Aarl~e%LFAN{f-FXYvmQ`W3IS=*&q%BX)Af zdItY=V^=AWp82tO<|T*0GMQ7Yo~OsJQ>El|vQ-n)@B`xue_?+t6E?<&1HrpaEZV-$ z;>uqz>0Q+=H32+RMD1j*>?xQKX;gE0nGQT510$uBIxDrXi&P|XT&yEblT5Ma~4ZA?D0bDe3Zh6Hq~VP=Syf?`itIIhjAwVVG-U&9q3L36&M*q|4Kr zZO_r_JoBmR*2cT9rVo^@PyjU;gECxWKbV$pt1jUJrj;^FeX3NP&r*A`8D<`f7BwV0 zoXLFHtLgeJ-|6ZWtd2*JmS>jFV5;p6M)C&gD4({<(~S*yU%dmRvHIC6@Xdm*OBMJc zIl^jca{Xi7jLN{-1xHhs-4cK=R`|9%sCDH&=)?}yA&|-|UEbdI>!yNF%uNa{hhy&y zDBl^&!Jh5L<}2kcCLL=&x=O%_j#2W6HS0u4kOAPyTBgHnCTP~v@3~%%MQL6M4mtps znf@zt?xvf}9c$gZ_zM<#9T2{2mFC@Ex!_G#5L4%^h^mTYw$!~9gRK{cGi9>fYlkqK zCr64F_{omPNe*@|5mEU&E0n7q(1s%OoTPsM;_?FH&;ZJ(Gk^CelYG!W;AlCM`yh`(JSCt(HB zWXx-JLk8fun;tEzd>p1?%P1^CytZdC&l7;wN*BDbS3>|O^Nb_5-Z~FycNNMi00EVI zSI~`ntWfl+3OrPKQ@LIZYVA;UWCaA(#N$5D{ZwvgiacfS)9l+z<(^d?T23Bx$W#GQ zEo-l3RB|c3p83I>gR9zIai^BeC7qZP9bjGlf=aHqRLwJRLG7ppa~!)7Gw}ivz{GWEwkKC$Rxkv$gP`9GxC8 z=Gp2QBlFEMajzZM-{!udRftqUh4VZgcqm%9RuU587 ztctba9K?e_=k~IsEZ#B;?cl>#8D}X+y?L8t-GQxoi%9f5vYF8#S2Kq2unT3tg!QWJ zWmmZo0lo%_mTGAl)E)#rB238;DYasn$))_T9p6x%m|@S{;>{6@{T>p;Y59&E%Q177 z5wqH!p}|5mnI$H4MCBeC5RIDItn)*^9%7FyKh6OgJ@(zhoUV10>O~oJ@al0NO=Vun zDf>&ibqdm7cf0f##mo6NVa)9EY>1WpI8btR2ANkuYt=Fjcs(T#v(b~Bx-O=qtGOSv z*6U);yyo_CUHXTMYv$y|;yFT0xdl=E(TY4X+^zGEkzQ%I@v0j7?N?%0JKNqSe^yGzj0P0NSnw6b}$n89A3FimHM zyLt1YypiF)2kFXKkCpAuYeq-B^l>C1h4m&YOZMgxPCgMLkToq}o+eDZL1Yen`HU80 zU7Z}Vg(M%N0#=qk0bmaF_Lk;Zp9JP`x@XV6?%%&!6>U2Ovl(l)r+cVR2zUTj9mgG-QYGpD5yt>bMz2_ zSTd2j$yX{BQ8ZDWZ#fT4U402K=F2X=Y~WRV~^>paz|8n@0&dikb7 z?u}Cuv(!{5f&f)+*)39&ZG~oqxiOvlLpcp^ao3wK)|qYK70_fR%qhie9#{7^s{@~I zSN4!?&WfH#$O?Ojo>})<88>d7pNw`-rdxJzFxi0Vad4v=Q1*!UA6tDc+whWr`dGw(oVDncG&ts;GgnT)mWGj)RGf z3e0Tb5O_I`tseZ<3WqhhJ*j|a!RZSBf4=-kqB)ettfz_gS><+Xnx0w4U07yumr(`U z6QsuuIOHrXg!#BTY;1u!$Sw_fi`Iv0a63V8Ej{FkWDR#Nforvcsx7rc3-0NKeTqSt zx6VEGYYo;#i_VH%5 zN(OR^xW<;(b|6$yXciI0L375@kXdJx{Ws@UTJ0|GTZcBFA(|k&ZTas5J)ZYY&H>X} zs9(T?-a?h6lx@6!haUHH?g6JnJrpyn*cYm$hGu0`OgweN4%p;b=CN*_dF=ZzTk9xZ zqT`j|k*fwC&Kl_ve z{^TvA0e$8yZ_S1^(_fu;e2=z&nSBb^skTM&>%k}(;jp?$Hfh#5$oJw7Q% z8KpWQ4Zm2+OI|QBYt3mJg&cu#q&!WA=C@us7c69*S?<<(Nltfh;YOkbowy@sl-QfvX|00i^%JEA`&*W0(ry}jiYX&lC`qI&% z&cI8e;^r2ba4_cLtl6-fn$9lWPPaDS_$Kc1t;Yb}V1(;Zh?74X2P#3g&v&l0$wa3; zA}I85tT`g_G}~~uYPQTWjeC!6xD;GfR>!6X@TX1eeIpL;QBm3Bp&M7T4>ElMAnO%#bB0F&AP00yMRa=%@ zekE}>*g9UTG>>wkKl0^m@SOLpxBqjwD|{=vF-z4!NB(HhgyahLRh)>lv_>;sYAZcJ z;ky-Oi!f`n)()oXoJw)vD+tC6RpZMWr~rgAt!Xx^dUNOtv2KvDvzK}XTG+SFSlV5g zur=%YE;EU3MJijcv~~cohS^dm&`aJ2|AwwfcFh;`3Z^iII~Q=}@Y;We>prJ!3Y83a zU6saMihw2(EN*2_-|f>nZ{K>OKc{=zmFh%7y<&*C z-ddlLt*DXiRLy=|*37h>SDxD_y)+iYe~O*5+9!^`r*ZmAM;y|Mhic4(}GL$m|-kil~-2;wjo8eTk&%5{2 zV;-dI53Q+Ql5P|#j(rMOV}G?=0*$j|LPBo3SJ+4|d;|r~Q1ZHn;6zZO&jWDLS?#iW1CI zlLdsffstJT3RVx8^w|bh$+xB=uH}w8o+TlV4kCqJUv{#dm}wLf>0Q>5=w;T_8?c1| z6V#`@sbI`;g0k64fxE$^SeAe^8$tAXMh zQvqYK@wVflfiU{`%d^|(t9u&vZayn2_ko09e}lSf4`qZZo%3P5!4lSkd59GSV#+@1 zlRaw>42#o`!-|f2svyz|?r4rAnNu88%&44H{c7dYNdG zkE*krWh~|9;tA=lNNlE33TQ{=MAJ}ZZA1%ulGO+X1Px3eI^bBK)EjkXH_19#X!i_B zbp#eJkU*sYrD+aAFQjj*&p2?Ms`+&^K*}$<)bSJMjL!zVIjH5XScsrZ&vg%Kb;|O& z!+_0uBMa{KX70QeETf-F1}IHNE3sdE6b-1dgC=aOB-i1kJnMj8AqscfCYu1FWJZ8` zRB4^%p10;?o3E8hxRuIYiz_rPgWXcNzI-5a)`>S++z1!aqdi7DrYdN)*}_L>>eW=nUC{25JF>77}- z#A_yl>CY&2M&ii=Y*V>aupa1xUQ}_H7JRLbSW8`J$E!slz){i+6qg!Raz4aZH zjS}AOvLuxlFCrf3DpUT!tp-x7dX$~j+;S_8(T-P!HRI)AqBM<862ZIe=r`#|dkIvb zdqwryEWB%8@fN+MS=;#OD+>**6lCOd7L%8M`HHSoVguD*RsUN9P{|h*(hTep1f#9N zVy^$e*F!&)ZdEHVq}0xDMaBse8~>Vz-&}h2m#A{2LqU%gU%T~?2$GdgcC^02NR(XFWdtsB&u)r&^_+LfIKe`MS7^JDjU zDTVbXCa>J8WUcLZ27kKzE5j+JVKdB_qXXC-vE8^s0M7P}MqW1#bri&n9^7wVJY|-i z+<{O$XNDq&Qv40%06dXB=`;EqtY%^~K#_by%b^n))}*K5$B<&VKnHR8h1JS=dZ{k-O|<@^ciJgP&Iq&EJ)`_lx=b<8$?U)@vLNzSI%-!_XlLwl<8IQ>7*U$BzcPe|{!HGYEvr2y2?iiI4LxS~i`C%EIO-59D zi1y#R@w=!Lu@T8*Nt)}9FV~DMr5;C2f9IcG`01|G_-a4>%;D+%KmO*w^QSdS%m4c4 zL+xMoaqm*77`FU1mm4@%8?x?Dn`@2`HteH0$+3nziYEw(7&baaiI>p8ZE&Ij8pd5< zbcNrk*s7O|)z&eALu9BDp{UHQc!tlZON^#+^{P9=<_(qx)!=2_1un&A)W0^%pGxN{ z7ZE-t{ZnM%daRWb4MmBYyNczxM3Wti2kaKg{bJWt?n!6sn*5D>N4GKQFJ2_-@f$vU zdNFO@rn50|flBsiI8zMg6k;x8k57u*v_jIh#+iN&VlJqN>hPfH3sEf3tq+gWfg~w6 zv8vMW!`2-^1{(5?WvL$}Bq_Gc7d764MSN6&yv#|`+wG7a|M`m3ew^oT(QJO>V_p{G zzNmgsU*q+`H9$5*<~LR!!^D+xOK?fGZcKyiBh%}VCl6LPjLu%CTLE;Jk0D4?@ZrEL zxweA0XqQL_RNdiR8H+hZE!pvPG8(+Nu-H$Bd7XGMS@wHsh(3Fm?+95W_mBMchU6we zvlr3>*&=3M8n3|zH9Djyu)}T(UG;-UR(EEdJ=(WwdwlI>`Rz|H%ZuBg!=uZ;zYV+L zpJ%u+A<0)IdPo`>WrtU4-sez!MJk1&Dx-J|Jh|28E>utDC~$j;wMUd3Vop73%GME( zEn>@fHk=sLLtd!MR!9#*^klkor%MclWM|p$y@&e)mbY3UH1rxL|-v}$acy~ zRU>&@DhvEVEAc1C3&|-YQH4%k9cJ%Y{zLV6+H7D*jq|REFzUl`<`4}+5n^SAX;PBt z^C=DQW@oA+a=$)l_L6pvcz6p2a`%T)P*^MWHQ;eeA#4&VNwc{`iE}Bx02ux) zQ>3#pkS3^7jdq(dkaj8~eab+U5bYQ-&opZkdA-*fL&_T2y7IX-!{{p-dQ;|(dTm8j zRtrLZ{7YG}oUiIH@8BW#=!{oZ>E4K&J<5=T(2dftMuxmsxA0AI37B0%5M@v;BB`4G zG$j;AUgY&;KzZFMG^q3)zxHy*R*yoI>}NP5H%PjI2V5>*Rpz(TG`rM~GxV3vQ0ZP7 z7;?1eOR0vTzKpsr09*3-B}Ug4T~$vE-+o#HB{#vDw1koCaNhv^6Y5`Z$!`46?KYSN57kka^#c_KupU% zOQT0u1Ej8V9f$&B71!N@bZqA4_<*DA%ts4EZnK}CtNwAWzId+Ap4WW$&nqi|U?y^# zd$~Bg-*4uZaf6(@poBCSX_U?{|BSkK{ET5Luab{1yBpEU zLay=qkj7?ra2r!KPd$CFnmb8;lhWbeJVXUBwj&*CA#trDmX#yy(9m*U(EmDgVg0Yi z60FIFed&o>eCAVn<<@nS7TK*(La6>xzDR^Y2=AWQla?U0Iaw&txgpO^sEfDZER7xmI=Rp#&gGk*b2*A21GJ z^MDW_nYYiMIA)$PsPlZ>zu`5E5Q3^IhT4<0LmII1CCz%Wp`&Wt2j?cMc-P}0lM3n9 z5X%9o1S@_#?pzMO*chOU8F#26IEGF2v?Ern=?kd*aRdcvcHse8 zVvZNkrU!tyj=$FlDMR+p)1P`=6?gd$jI?Dfe8+sTdyl*97QYNxk8^O^(f{tH#vS!I ztweyp9J~M}+xC@mG`Z`-G`k{|I_;Ffvgj#Xwr94)Pf=pVKml^eBlgq{{6k##k`WWnp?N$GZcQ17?GsQEIY3El z>Y3A{&6PrFw@qEyYbnqRp6%qNH)k6DrQnD51@OcF{g>bU;YQepe|rA7{)qw6uf7tI z)A^V`^D@V${@Ee^3v-)aeSXi^n&!D>pE=i0ApOlSsvY?5AtxQ^skUfmu-7yXoRk8K zC-fybtAc}OF&9%RP{N69dyOaUS)9aX)R&n82hhKHY?rOFNW+wN*9fpeUivgJsLe}q zG(Qy)i&=c5jZjdnGJ40L$wm%RK(@9$i?{r1%l-(s>|@72!Nm9MkN(*;>{rVrelMr- z7?rrN1~Sbv(+5UZbB#3Pk1s%&P5eBKvfRi*=>;h$B_!hSf{l%tz&mN_~Yf zWYu54&$#@ZjWJ&uW5b3`DuC*3cOi}_&-Z1FO+XmCUJ zw5_GLI+NNTf`MmvC%Tok<61z|$+K?;`5u9SVQFozyBGVN+v3QCPZG&7zdn(i{jW_V z|4L)`7sf6P8B$QyNTn<~=~gLfGsjBxaJf2+Of(aZY8J*;GIq(eU%fWA&E7MWKcL$I z&ufpYakac4x}$YboqQ_8Tgy}<&0^iH*P!;!skz%F3v)b;$&7GdGNN2;@9h1^606eB>ZD#D01I zHn7KDYzSyzhN)rXSW%vW0673~rJ7)g&)`y!4dx(uY5i4}_((yp#K>o!a2NPlu*4{B z)Pvc2C14z?pmq)Lc_LG9Th@YvuIB)esw97%bDH-N^nPg4Vcr8 z!m4+q@LACPgEQzlz=-c`xcI{~d+fN<M38j9%oIO}Jo`L5u#Hx`qG$7s`SE(njLgSoxtG3pg?*!C7j0Y`B)`x~4#Pe^Gc zbOUH87|b%*h-K@hLIDVCgZGG-%zauO*zOq_C7)%p;@ebLMY|-gUV@Eo!@%_P z`PJX+ttb@ssoLqC|A7ztr+;FlnVg^1eEt)sH$;B+PkfbA-ua%Ka$(0ruJ}4xJ?_Qg zG)P6R!T$JYn~C;%EG_q@OA3$}4Ol4soBL8x^Teockpj{hEPAZge67I_SPU7NZujf& z4Ut2d?!BFk^WKhA;M+RZ??CUTv|5#Cnf9x_C|Itb1<#;w_0k;dZ|c}4l}jue$wZ}k z#|`e(9Aotnh~0(2Nd?^wti~m=E;-3z^AxYMFgRd6Ae-Sr;;U*&-z`w(UoA!Ut5OAX0nv0tdO(U@Bu0dKkD& zzy%erYLQ^)RWQ#g;vWkF;NG85l%JP6p%|Ga(*~EkOpk9^waBQ!OL)fkSm-&A_HcnWQK`8~~lWU{J%P{o-v!z-T}(f@ zjK3R8x4&X!?+T&5iEQ!S2~Y>FrTH>;u4kyibkJ^}UQtG#kvdNNPdrD)w_$Ui+Bp%S z-~cuVX&pWEBSr~Qg8+m9XERE04tDCTo*XJb@d8n3uG}vF;r-sK7$^4x(bNhyfkV<4 zk{z^P6XGUo=C0E?7X7GshIXi4I-O1Od7fjqC*O@H8Nem=hQzZ{VN}+59 zEaTO3#eQe#4sq;u$>S?QM~`)1?0hRR4+jy_6Il@mmNs%(*g6*Hm>F?~M2zAYm^5fG z + @@ -428,7 +428,7 @@ virtuelle louée chez