From 9c4a7026b89f4a4a78b806c8f8fa0c272d412662 Mon Sep 17 00:00:00 2001
From: Yunobot $@J>WXU4zs2^fSzill}E@?Kl=|BTHi^ds+OQ;#oMO!Ai
zfHPMfJ)=9zuMx7`W@8(*G)BI^CNN|qA&p)0nx0O#gBca}tH(9yn;1bdX>%qJXUBJ{
zlVexM5BITP!^p;o3G0(aUSHI06}z`>1V7nE{3H(#=}2bY>| WG9E1yq-#~+Y;>e4j*`swnYm&;r
z3BUpF Dev environment in LXD/LXC Environnement de dev avec LXD/LXC
- Usage:
- Dude, show me the code !
+ Dude, show me the code !
+
+
+ Usage:
+ Arguments:
+
+ Example:
+ Details:
+
+ If provided, 'url' is assumed to be relative to the app domain/path if theystart with '/'. For example: / -> domain.tld/app /admin -> domain.tld/app/admin domain.tld/app/api -> domain.tld/app/api'url' can be later treated as a regex if it starts with "re:".For example: re:/api/[A-Z]*$ -> domain.tld/app/api/[A-Z]*$ re:domain.tld/app/api/[A-Z]*$ -> domain.tld/app/api/[A-Z]*$Requires YunoHost version 3.7.0 or higher.
+
+
+ Usage:
+ Arguments:
+
+ Example:
+ Details:
+
+ Requires YunoHost version 3.7.0 or higher.
+
+
+ Usage:
+ Arguments:
+
+ Details:
+
+ Requires YunoHost version 3.7.0 or higher.
+
+
+ Usage:
+ Arguments:
+
+ Details:
+
+ Requires YunoHost version 3.7.0 or higher.
+
+
+ Usage:
+ Arguments:
+
+ Example: m9uk``O>&Tq6n0-Z#T#NUd+Ce>vW~?Imr#tNNw~LK|d-UloL;NpSspWb+
zPJ7UoEqKRu+Iu^v=)zk4ON|so!erl={bmoKFTO}$D$)yy0E1U14#dUphQ2q~eobdx
z+NdI@v#xmUeja+cZwr!hw5>DD)w(lrrYgdNj&d?#rMe_**_E&jip$bw?Wt^(^1&-+
z_hfd6&_AQQ*nslBLk{CQv+oZ=85wak4Ur#TALDA+SCm+T?Cqn*jqc{xg0c;p
zwNsXd5x{Cohozlqa7;`BIWF-wsji7XCbNF{Nkj!*6eZ0v4r8y)@89)iugM!B1$XJ=zUgpAe*^z^XQ2w61fT9+nJLEfx;vI{_8_O>koOwr|lOZn|rz1
zGv?*x^!9e|i+$bV{jLa~#i?!qp`lx&&Bon(2u|eRq_{XHNt@yRv?PAYY`NwQEn*J&
z$CVNa)#>Px-;*op
|laVYm
z?uFEF!-g%jL{$YF%Jp;7V>CphiA{=b*kLfyq5MOUiLokjlxEM%m8Ps(pPMQ>W(f_I
z5y{kQvRH^Tlcq+M7VIz)k)?P`xjsHd)zL04_{A04t=upveNL2$NERBO7*$?$$e~iJ
zWmUU(l$so>P<@mJUjzXFeh<2J4(EodTGA$J&;O|nS39>D+xOZ^Wm0lndSB_eh_x6S
zoZ3ij`^ytM8fqKVq5NWvPOECDG7?d3gQYk-IdK(R?j%jP(^S=
-YunoHost ist ein **Betriebssystem**, das auf die einfachste Verwaltung eines **Servers** abzielt und daher das [Self-Hosting](Selfhosting) demokratisiert, wobei sichergestellt wird, dass es zuverlässig, sicher, ethisch einwandfrei und leichtgewichtig bleibt. Es ist ein Copylefted-Libre-Softwareprojekt, das ausschließlich von Freiwilligen betrieben wird. Technisch gesehen kann es als eine Distribution angesehen werden, die auf [Debian GNU / Linux](https://debian.org) basiert und auf [vielen Arten von Hardware](install) installiert werden kann.
+YunoHost ist ein **Betriebssystem**, das auf die einfachste Verwaltung eines **Servers** abzielt und daher das [Self-Hosting](selfhosting) demokratisiert, wobei sichergestellt wird, dass es zuverlässig, sicher, ethisch einwandfrei und leichtgewichtig bleibt. Es ist ein Copylefted-Libre-Softwareprojekt, das ausschließlich von Freiwilligen betrieben wird. Technisch gesehen kann es als eine Distribution angesehen werden, die auf [Debian GNU / Linux](https://debian.org) basiert und auf [vielen Arten von Hardware](install) installiert werden kann.
Features
--------
From 7fd17c3eb64c0ce0102b107a6218895ca7486976 Mon Sep 17 00:00:00 2001
From: Alexandre Aubin
-Il suffit maintenant d'ajouter les redirections DNS comme indiqué dans la [configuration DNS standard](/dns_config_fr).
+Il suffit maintenant d'ajouter les redirections DNS comme indiqué dans la [configuration DNS standard](/dns_config).
###IP dynamique
-[Tutoriel plus général sur l’IP dynamique](dns_dynamicip_fr).
+[Tutoriel plus général sur l’IP dynamique](/dns_dynamicip).
Cette partie est à suivre, que si votre IP est dynamique.
-Pour savoir si votre fournisseur d’accès internet vous fournit une IP dynamique [voir ici](/isp_fr).
+Pour savoir si votre fournisseur d’accès internet vous fournit une IP dynamique [voir ici](/isp).
Commencez par créer un identifiant DynHost.
diff --git a/XMPP.md b/XMPP.md
index 2cef78c0..f549d01d 100644
--- a/XMPP.md
+++ b/XMPP.md
@@ -53,7 +53,7 @@ XMPP chats can be made secure and private using [OMEMO] encryption (https://xmpp
To create a chatroom (multi-user chat) on your YunoHost server, use the identifier `chatroomname@muc.yourdomain.tld`.
-For this to work you need to [add the corresponding `muc.` DNS record](dns_config_fr) in the DNS configuration.
+For this to work you need to [add the corresponding `muc.` DNS record](/dns_config) in the DNS configuration.
## VoIP and videoconferences
diff --git a/XMPP_es.md b/XMPP_es.md
index 228b941f..76f45f25 100644
--- a/XMPP_es.md
+++ b/XMPP_es.md
@@ -43,7 +43,7 @@ Es posible cifrar tu conversaciones XMPP con la ayuda de [OMEMO](https://xmpp.or
Para crear un salón de discusión (Multi-user chat) en tu servidor Yunohost, utiliza el ID nombredelsalon@muc.dominio.tld (donde dominio.tld es el dominio principal de tu servidor).
-Si utilizas un nombre de dominio personal, es necesario [añadir una redirección de tipo CNAME para el subdominio `muc.`](dns_config_es) en tu servidor DNS.
+Si utilizas un nombre de dominio personal, es necesario [añadir una redirección de tipo CNAME para el subdominio `muc.`](/dns_config) en tu servidor DNS.
### VoIP y videoconferencias
diff --git a/XMPP_fr.md b/XMPP_fr.md
index 594f2151..0273219f 100644
--- a/XMPP_fr.md
+++ b/XMPP_fr.md
@@ -52,7 +52,7 @@ Il est possible de rendre les conversations plus sécurisées et privées en les
Pour créer un salon de discussion (Multi-user chat) sur votre serveur Yunohost utilisez l’identifiant nomsalon@muc.domaine.tld (où domaine.tld est le domaine principal de votre serveur).
-Si vous utilisez un nom de domaine personnel, il est nécessaire d’[ajouter une redirection de type CNAME pour le sous domaine `muc.`](dns_config_fr) au niveau de votre serveur DNS.
+Si vous utilisez un nom de domaine personnel, il est nécessaire d’[ajouter une redirection de type CNAME pour le sous domaine `muc.`](/dns_config) au niveau de votre serveur DNS.
## VoIP et visioconférence
diff --git a/admin_es.md b/admin_es.md
index dc6bea60..573adb3b 100644
--- a/admin_es.md
+++ b/admin_es.md
@@ -1,6 +1,6 @@
# La interfaz de administración web
-Yunohost tiene una interfaz gráfica de administración. El otro método consiste en utilizar la [linea de comando](/commandline_es).
+Yunohost tiene una interfaz gráfica de administración. El otro método consiste en utilizar la [linea de comando](/commandline).
### Acceso
diff --git a/admin_fr.md b/admin_fr.md
index ec8476e5..5601de0f 100644
--- a/admin_fr.md
+++ b/admin_fr.md
@@ -1,6 +1,6 @@
# L’interface d’administration web
-YunoHost est fourni avec une interface graphique d’administration. L’autre méthode est d’utiliser la [ligne de commande](/commandline_fr).
+YunoHost est fourni avec une interface graphique d’administration. L’autre méthode est d’utiliser la [ligne de commande](/commandline).
### Accès
diff --git a/admindoc_fr.md b/admindoc_fr.md
index 2f186795..d248a210 100644
--- a/admindoc_fr.md
+++ b/admindoc_fr.md
@@ -1,56 +1,56 @@
# Documentation pour les administrateurs YunoHost
* Découvrir l'auto-hébergement
- * [Qu'est-ce que l'auto-hébergement](/selfhosting_fr)
- * [Qu'est-ce que YunoHost](/whatsyunohost_fr)
- * [Essayer YunoHost](/try_fr)
- * [Choisir son mode d'hébergement](howtohostyourself_fr)
- * [Matériel compatible](/hardware_fr)
- * [À propos des fournisseurs d'accès internet](/isp_fr)
-* [Guide d’installation](/install_fr)
- * [Sur un ordinateur "standard"](/install_iso_fr)
- * [Sur un serveur dédié ou virtuel (VPS)](/install_on_vps_fr)
- * [Sur un Raspberry Pi](/install_on_raspberry_fr)
- * [Sur une carte ARM](/install_on_arm_board_fr)
- * [Sur Debian](/install_on_debian_fr)
- * [Sur VirtualBox](/install_on_virtualbox_fr)
+ * [Qu'est-ce que l'auto-hébergement](/selfhosting)
+ * [Qu'est-ce que YunoHost](/whatsyunohost)
+ * [Essayer YunoHost](/try)
+ * [Choisir son mode d'hébergement](/howtohostyourself)
+ * [Matériel compatible](/hardware)
+ * [À propos des fournisseurs d'accès internet](/isp)
+* [Guide d’installation](/install)
+ * [Sur un ordinateur "standard"](/install_iso)
+ * [Sur un serveur dédié ou virtuel (VPS)](/install_on_vps)
+ * [Sur un Raspberry Pi](/install_on_raspberry)
+ * [Sur une carte ARM](/install_on_arm_board)
+ * [Sur Debian](/install_on_debian)
+ * [Sur VirtualBox](/install_on_virtualbox)
* Finaliser son installation
- * [Post-installation](/postinstall_fr)
- * [Configurer les redirections de port](/isp_box_config_fr)
- * [Configurer les enregistrements DNS](/dns_config_fr)
- * [Installer un certificat SSL](/certificate_fr)
- * [Diagnostic du bon fonctionnement du YunoHost](/diagnostic_fr)
+ * [Post-installation](/postinstall)
+ * [Configurer les redirections de port](/isp_box_config)
+ * [Configurer les enregistrements DNS](/dns_config)
+ * [Installer un certificat SSL](/certificate)
+ * [Diagnostic du bon fonctionnement du YunoHost](/diagnostic)
* Apprendre à connaitre YunoHost
- * [Vue d'ensemble de YunoHost](/overview_fr)
- * [Conseil généraux](/guidelines_fr)
- * [L'interface d'administration web](/admin_fr)
- * [SSH](/ssh_fr) et [l'administration en ligne de commande](/commandline_fr)
- * [Les utilisateurs et le SSO](/users_fr)
- * [Les applications](/apps_overview_fr)
- * [Les domaines, la configuration DNS et les certificats](/domains_fr)
- * [Les emails](/email_fr)
- * [Formulaires pour enlever son adresse IP des listes noires](/blacklist_forms_fr)
- * [XMPP](/XMPP_fr)
- * [Les sauvegardes](/backup_fr)
- * [Mettre à jour le système](/update_fr) et [les applications](/app_update_fr)
- * [La sécurité](/security_fr)
+ * [Vue d'ensemble de YunoHost](/overview)
+ * [Conseil généraux](/guidelines)
+ * [L'interface d'administration web](/admin)
+ * [SSH](/ssh) et [l'administration en ligne de commande](/commandline)
+ * [Les utilisateurs et le SSO](/users)
+ * [Les applications](/apps_overview)
+ * [Les domaines, la configuration DNS et les certificats](/domains)
+ * [Les emails](/email)
+ * [Formulaires pour enlever son adresse IP des listes noires](/blacklist_forms)
+ * [XMPP](/XMPP)
+ * [Les sauvegardes](/backup)
+ * [Mettre à jour le système](/update) et [les applications](/app_update)
+ * [La sécurité](/security)
* Pour aller plus loin
* Noms de domaine
- * [Nom de domaine en noho.st / nohost.me / ynh.fr](/dns_nohost_me_fr)
- * [Configurer un DNS dynamique avec une adresse IP dynamique](/dns_dynamicip_fr)
- * [DNS et installation d’une application sur un sous-domaine](/dns_subdomains_fr)
- * [Utiliser le résolveur DNS local](/dns_resolver_fr)
- * [Gérer les enregistrements DNS chez OVH](/OVH_fr)
+ * [Nom de domaine en noho.st / nohost.me / ynh.fr](/dns_nohost_me)
+ * [Configurer un DNS dynamique avec une adresse IP dynamique](/dns_dynamicip)
+ * [DNS et installation d’une application sur un sous-domaine](/dns_subdomains)
+ * [Utiliser le résolveur DNS local](/dns_resolver)
+ * [Gérer les enregistrements DNS chez OVH](/OVH)
* Notes à propos de certains fournisseurs d'accès à Internet
- * [SFR](/isp_sfr_fr)
- * [Orange](/isp_orange_fr)
- * [Free](/isp_free_fr)
+ * [SFR](/isp_sfr)
+ * [Orange](/isp_orange)
+ * [Free](/isp_free)
* [Échanger des fichiers avec son serveur à l'aide d'une interface graphique](/filezilla)
- * [Modifier l'apparence du portail utilisateur](/theming_fr)
- * [Ajouter un stockage externe](/external_storage_fr)
- * [Migrer ses emails vers YunoHost](/email_migration_fr)
- * [YunoHost avec un service caché Tor](/torhiddenservice_fr)
- * [Utilisation de certificats autres que Let's Encrypt](/certificate_custom_fr)
-* [Guide de dépannage](/troubleshooting_guide_fr)
- * [Débloquer une IP dans Fail2ban](/fail2ban_fr)
- * [Changer le mot de passe d’administration](/change_admin_password_fr)
+ * [Modifier l'apparence du portail utilisateur](/theming)
+ * [Ajouter un stockage externe](/external_storage)
+ * [Migrer ses emails vers YunoHost](/email_migration)
+ * [YunoHost avec un service caché Tor](/torhiddenservice)
+ * [Utilisation de certificats autres que Let's Encrypt](/certificate_custom)
+* [Guide de dépannage](/troubleshooting_guide)
+ * [Débloquer une IP dans Fail2ban](/fail2ban)
+ * [Changer le mot de passe d’administration](/change_admin_password)
diff --git a/app_jappix_fr.md b/app_jappix_fr.md
index e9b0fd2d..aa044fe2 100644
--- a/app_jappix_fr.md
+++ b/app_jappix_fr.md
@@ -1,3 +1,3 @@
#
Jappix
-Jappix est un client web [XMPP](/XMPP_fr).
+Jappix est un client web [XMPP](/XMPP).
diff --git a/app_nextcloud.md b/app_nextcloud.md
index 66ad3fb7..44bfa713 100644
--- a/app_nextcloud.md
+++ b/app_nextcloud.md
@@ -37,7 +37,7 @@ Finally click on the check mark to validate the folder.
#### II. Migrate Nextcloud data to a larger partition
-**Note**: The following assumes that you have a hard disk mounted on `/media/storage`. Refer to[this article](/external_storage_en) to prepare your system.
+**Note**: The following assumes that you have a hard disk mounted on `/media/storage`. Refer to[this article](/external_storage) to prepare your system.
**Note**: Replace `nextcloud` with the name of its instance, if you have several Nextcloud apps installed.
diff --git a/app_nextcloud_fr.md b/app_nextcloud_fr.md
index fb889026..4fcfa6f2 100644
--- a/app_nextcloud_fr.md
+++ b/app_nextcloud_fr.md
@@ -37,7 +37,7 @@ Enfin cliquer sur la coche pour valider le dossier.
#### II. Migrer les données de Nextcloud dans une partition plus grosse
-**Remarque** : Ce qui suit suppose que vous avez un disque dur monté sur `/media/stockage`. Référez-vous à [cet article](/external_storage_fr) pour préparer votre système.
+**Remarque** : Ce qui suit suppose que vous avez un disque dur monté sur `/media/stockage`. Référez-vous à [cet article](/external_storage) pour préparer votre système.
**Remarque** : Remplacez `nextcloud` par le nom de son instance, si vous avez plusieurs apps Nextcloud installées.
@@ -158,10 +158,10 @@ Sauvegarder et nettoyer vos caches (Cloudflare, navigateur, ...) et le tour est
## Applications Tiers
- + [Calendrier](app_nextcloud_calendar_fr)
- + [contact](app_nextcloud_contact_fr)
- + [KeeWeb](app_nextcloud_keeweb_fr)
- + [Carnet](app_nextcloud_carnet_fr)
+ + [Calendrier](/app_nextcloud_calendar)
+ + [contact](/app_nextcloud_contact)
+ + [KeeWeb](/app_nextcloud_keeweb)
+ + [Carnet](/app_nextcloud_carnet)
## Quelques liens utiles
diff --git a/app_transmission_fr.md b/app_transmission_fr.md
index cb94f3bb..fb7f1e75 100644
--- a/app_transmission_fr.md
+++ b/app_transmission_fr.md
@@ -27,7 +27,7 @@ scp -r /votre/fichier/ root@votre-domaine.org:/home/yunohost.transmission/comple
```
##### Comment télécharger un répertoire entier ?
-Une fois connecté en [SSH](ssh_fr), placez-vous dans le répertoire de téléchargement et zippez le répertoire :
+Une fois connecté en [SSH](/ssh), placez-vous dans le répertoire de téléchargement et zippez le répertoire :
```bash
cd /home/yunohost.transmission/completed
zip -r votre_archive.zip [dossier]
diff --git a/apps.md b/apps.md
index 70eff9be..7b5ff79b 100644
--- a/apps.md
+++ b/apps.md
@@ -44,7 +44,7 @@ Disclaimers
-
Installatz vòstre servidor simplament, avètz ja tot çò que cal a l’ostal
-
+
Profitatz de vòstras aplicacions web e fabricatz vòstre canton d’Internet
-
+
Gerissètz vòstre servidor coma volgatz : via web, mobil o en linha de comanda
-
+
Exploratz las possibilitats de vòstre servidor, e aprenètz perque es important
-
+
@@ -19,21 +19,21 @@ YunoHost todavía no es compatible con las tarjetas ARM64. Para obtener más inf
- Un adaptador de corriente para alimentar la tarjeta ;
- Una tarjeta microSD : al menos **8 Go** y **Clase 10** (por ejemplo una [Transcend 300x](http://www.amazon.fr/Transcend-microSDHC-adaptateur-TS32GUSDU1E-Emballage/dp/B00CES44EO)) ;
- Un cable ethernet/RJ-45 para conectar la carte con el router / caja internet. (Con el Raspberry Pi 0, puedes conectar tu tarjeta con un cable OTG y un adaptador Wifi USB.)
-- Un [proveedor de Internet ético](/isp_es), de preferencia con una buena velocidad de upload.
+- Un [proveedor de Internet ético](/isp), de preferencia con una buena velocidad de upload.
---
## Instalación con la imagen pre-instalada (recomendada)
-0. Descargar la imagen pre-instalada para tu tarjeta ARM
Si no existe una imagen dedicada a tu tarjeta, puedes seguir la sección "Instalación encima de ARMbian".
+0. Descargar la imagen pre-instalada para tu tarjeta ARM
Si no existe una imagen dedicada a tu tarjeta, puedes seguir la sección "Instalación encima de ARMbian".
-1. Poner la imagen en tu tarjeta SD
+1. Poner la imagen en tu tarjeta SD
-2. Conectar y encender
+2. Conectar y encender
-3. Conectarse en SSH
+3. Conectarse en SSH
-4. Proceder a la post-instalación
+4. Proceder a la post-instalación
---
@@ -41,11 +41,11 @@ YunoHost todavía no es compatible con las tarjetas ARM64. Para obtener más inf
0. Descargar la imagen ARMbian para tu tarjeta ARM
-1. Poner la imagen en tu tarjeta SD
+1. Poner la imagen en tu tarjeta SD
-2. Conectar y encender
+2. Conectar y encender
-3. Conectarse en SSH
+3. Conectarse en SSH
-4. Proceder a la post-instalación genérica
+4. Proceder a la post-instalación genérica
diff --git a/install_on_arm_board_fr.md b/install_on_arm_board_fr.md
index 02f207cd..68be4675 100644
--- a/install_on_arm_board_fr.md
+++ b/install_on_arm_board_fr.md
@@ -1,6 +1,6 @@
# Installer YunoHost sur carte ARM
-*Toutes les autres façons d’installer YunoHost sont listées **[ici](/install_fr)**.*
+*Toutes les autres façons d’installer YunoHost sont listées **[ici](/install)**.*
@@ -19,21 +19,21 @@ YunoHost ne supporte pour le moment pas les cartes ARM64. Pour plus d'informatio
- Un adaptateur secteur pour alimenter la carte ;
- Une carte microSD : au moins **8 Go** et **Classe 10** (par exemple une [Transcend 300x](http://www.amazon.fr/Transcend-microSDHC-adaptateur-TS32GUSDU1E-Emballage/dp/B00CES44EO)) ;
- Un câble ethernet/RJ-45 pour brancher la carte à votre routeur/box internet. (Avec le Raspberry Pi 0, vous pouvez connecter votre carte avec un câble OTG et un adaptateur Wifi USB.)
-- Un [fournisseur d’accès correct](/isp_fr), de préférence avec une bonne vitesse d’upload.
+- Un [fournisseur d’accès correct](/isp), de préférence avec une bonne vitesse d’upload.
---
## Installation avec l'image pré-installée (recommandée)
-0. Télécharger l'image pré-installée pour votre carte ARM
Si il n'existe pas d'image pré-installée pour votre carte, vous pouvez suivre la section "Installation par dessus ARMbian".
+0. Télécharger l'image pré-installée pour votre carte ARM
Si il n'existe pas d'image pré-installée pour votre carte, vous pouvez suivre la section "Installation par dessus ARMbian".
-1. Flasher la carte SD avec l'image
+1. Flasher la carte SD avec l'image
-2. Brancher la carte et la laisser démarrer
+2. Brancher la carte et la laisser démarrer
-3. Se connecter en SSH sur le serveur
+3. Se connecter en SSH sur le serveur
-4. Effectuer la configuration initiale (post-installation)
+4. Effectuer la configuration initiale (post-installation)
---
@@ -41,11 +41,11 @@ YunoHost ne supporte pour le moment pas les cartes ARM64. Pour plus d'informatio
0. Télécharger l'image ARMbian pour votre carte ARM
-1. Flasher la carte SD avec l'image
+1. Flasher la carte SD avec l'image
-2. Brancher & démarrer
+2. Brancher & démarrer
-3. Se connecter en SSH
+3. Se connecter en SSH
-4. Suivre la procédure d'installation générique
+4. Suivre la procédure d'installation générique
diff --git a/install_on_debian_fr.md b/install_on_debian_fr.md
index 4b05905e..eaa21951 100644
--- a/install_on_debian_fr.md
+++ b/install_on_debian_fr.md
@@ -1,6 +1,6 @@
# Installation sur Debian
-*Trouvez d’autres moyens d’installer YunoHost **[ici](/install_fr)**.*
+*Trouvez d’autres moyens d’installer YunoHost **[ici](/install)**.*
## Prérequis
@@ -18,7 +18,7 @@ Sur une plateforme ARM, un VPS, un serveur dédié, un ordinateur x86 standard,
## Étapes d’installation
-1. Installer manuellement
+1. Installer manuellement
-2. Post-installation
+2. Post-installation
diff --git a/install_on_raspberry_es.md b/install_on_raspberry_es.md
index 902c8ab1..b4fd51bf 100644
--- a/install_on_raspberry_es.md
+++ b/install_on_raspberry_es.md
@@ -1,6 +1,6 @@
# Instalar YunoHost en un Raspberry Pi
-*Encontrar otros medios de instalar Yunohost **[aquí](/install_es)**.*
+*Encontrar otros medios de instalar Yunohost **[aquí](/install)**.*
@@ -17,21 +17,21 @@ Antes de alojar tu propio servidor en tu casa, te recomendamos que consultes las
- Un adaptador de corriente para alimentar la tarjeta ;
- Una tarjeta microSD : al menos **8 Go** y **Clase 10** (por ejemplo una [Transcend 300x](http://www.amazon.fr/Transcend-microSDHC-adaptateur-TS32GUSDU1E-Emballage/dp/B00CES44EO)) ;
- Un cable ethernet/RJ-45 para conectar la tarjeta con tu enrutador o tu caja internet. (Con el Raspberry Pi 0, puedes conectar tu tarjeta con un cable OTG y un adaptador Wifi USB.)
-- Un [proveedor de Internet ético](/isp_es), de preferencia con buena velocidad de upload.
+- Un [proveedor de Internet ético](/isp), de preferencia con buena velocidad de upload.
---
## Instalación con la imagen pre-instalada (recomendada)
-1. Descargar la imagen para Raspberry Pi
+1. Descargar la imagen para Raspberry Pi
-2. Poner la imagen en tu tarjeta SD
+2. Poner la imagen en tu tarjeta SD
-3. Conectar y encender
+3. Conectar y encender
-4. Conectarse en SSH
+4. Conectarse en SSH
-5. Proceder a la post-instalación
+5. Proceder a la post-instalación
---
@@ -56,5 +56,5 @@ sudo passwd root
3. Desconéctate et reconéctate con el usuario root esta vez.
-4. Sigue con el procedimiento de instalación manual genérico.
+4. Sigue con el procedimiento de instalación manual genérico.
diff --git a/install_on_raspberry_fr.md b/install_on_raspberry_fr.md
index 3290b24f..c3fd6452 100644
--- a/install_on_raspberry_fr.md
+++ b/install_on_raspberry_fr.md
@@ -1,6 +1,6 @@
# Installer YunoHost sur Raspberry Pi
-*Toutes les autres façons d’installer YunoHost sont listées **[ici](/install_fr)**.*
+*Toutes les autres façons d’installer YunoHost sont listées **[ici](/install)**.*
@@ -17,21 +17,21 @@ Avant d'héberger un serveur chez vous, il est recommandé de prendre connaissan
- Un adaptateur secteur pour alimenter la carte ;
- Une carte microSD : au moins **8 Go** et **Classe 10** (par exemple une [Transcend 300x](http://www.amazon.fr/Transcend-microSDHC-adaptateur-TS32GUSDU1E-Emballage/dp/B00CES44EO)) ;
- Un câble ethernet/RJ-45 pour brancher la carte à votre routeur/box internet. (Avec le Raspberry Pi 0, vous pouvez connecter votre carte avec un câble OTG et un adaptateur Wifi USB.)
-- Un [fournisseur d’accès correct](/isp_fr), de préférence avec une bonne vitesse d’upload.
+- Un [fournisseur d’accès correct](/isp), de préférence avec une bonne vitesse d’upload.
---
## Installation avec l'image pré-installée (recommandée)
-1. Télécharger l'image pour Raspberry Pi
+1. Télécharger l'image pour Raspberry Pi
-2. Flasher la carte SD avec l'image
+2. Flasher la carte SD avec l'image
-3. Brancher la carte et la laisser démarrer
+3. Brancher la carte et la laisser démarrer
-4. Se connecter en SSH sur le serveur
+4. Se connecter en SSH sur le serveur
-5. Effectuer la configuration initiale (post-installation)
+5. Effectuer la configuration initiale (post-installation)
---
@@ -57,5 +57,5 @@ sudo passwd root
3. Déconnectez-vous et reconnectez-vous avec l'utilisateur root cette fois.
-4. Poursuivez avec la procédure d'installation manuelle générique.
+4. Poursuivez avec la procédure d'installation manuelle générique.
diff --git a/install_on_raspberry_it.md b/install_on_raspberry_it.md
index b2f88cb0..1b3ca866 100644
--- a/install_on_raspberry_it.md
+++ b/install_on_raspberry_it.md
@@ -1,3 +1,3 @@
# Installa YunoHost su Raspberry Pi
-*Consulta la guida completa in inglese [qui](https://yunohost.org/#/install_on_raspberry_en)*
+*Consulta la guida completa in inglese [qui](/install_on_raspberry)*
diff --git a/install_on_virtualbox_es.md b/install_on_virtualbox_es.md
index be31c3d2..9a6260d6 100644
--- a/install_on_virtualbox_es.md
+++ b/install_on_virtualbox_es.md
@@ -1,13 +1,13 @@
# Instalar YunoHost en VirtualBox
-*Encontrar otros medios de instalar Yunohost **[aquí](/install_es)**.*
+*Encontrar otros medios de instalar Yunohost **[aquí](/install)**.*
## Prerrequisitos
* Un ordenador x86 con VirtualBox instalado y bastante RAM disponible para iniciar una pequeña máquina virtual.
-* La última **imagen ISO YunoHost** estable, disponible [aquí](/images_es).
+* La última **imagen ISO YunoHost** estable, disponible [aquí](/images).
* Un ordinateur x86 avec VirtualBox installé et assez de RAM disponible pour lancer une petite machine virtuelle.
-* La dernière **image ISO YunoHost** stable, disponible [ici](/images_fr).
+* La dernière **image ISO YunoHost** stable, disponible [ici](/images).
Télécom | Darty |
+| Proveedor de acceso | OVH | [Free](/isp_free) | [SFR](/isp_sfr) | [Orange](/isp_orange) | Bouygues
Télécom | Darty |
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
| **Box/router** | Personal/OVH Télécom | Freebox | Neufbox | Livebox | Bbox | Dartybox |
| **[UPnP](https://fr.wikipedia.org/wiki/Universal_Plug_and_Play)** | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
-| **[Puerto 25 que se abre](email_fr)**
(cerrado por defecto) | ✔ | ✔ | ✔ | ✘ | ✔ | ✔ |
+| **[Puerto 25 que se abre](/email)**
(cerrado por defecto) | ✔ | ✔ | ✔ | ✘ | ✔ | ✔ |
| **[Hairpinning](http://fr.wikipedia.org/wiki/Hairpinning)** | ✔ | ✔ | ✔/✘ | ✘ | ✔ | ✔ |
| **[Reverse DNS](https://en.wikipedia.org/wiki/Reverse_DNS_lookup)
personalizable ** | ✔ | ✔ (excepto IPv6) | … | ✘ | ✘ | ✘ |
-| **[IP fija](/dns_dynamicip_es)** | ✔ | ✔ | ✔/✘ | ✘ | ✔ | ✔ |
+| **[IP fija](/dns_dynamicip)** | ✔ | ✔ | ✔/✘ | ✘ | ✔ | ✔ |
| **[IPv6](https://fr.wikipedia.org/wiki/IPv6)** | ✔ | ✔ | ✔ | ✔ | … | … |
| **[No listado en el DUL](https://en.wikipedia.org/wiki/Dialup_Users_List)** | … | ✘ | … | … | … | … |
Para obtener una lista más completa y precisa, refiérete a la muy buena documentación (fr) de [wiki.auto-hebergement.fr](http://wiki.auto-hebergement.fr/fournisseurs/fai#d%C3%A9tail_des_fai).
@@ -30,7 +30,7 @@ Para obtener una lista más completa y precisa, refiérete a la muy buena docume
### Bélgica
-| Proveedor de acceso | Box/ router | uPnP activable | [Puerto 25 que se abre](email_fr)| [Hairpinning](http://fr.wikipedia.org/wiki/Hairpinning) | [Reverse DNS](https://en.wikipedia.org/wiki/Reverse_DNS_lookup) | IP fija |
+| Proveedor de acceso | Box/ router | uPnP activable | [Puerto 25 que se abre](/email)| [Hairpinning](http://fr.wikipedia.org/wiki/Hairpinning) | [Reverse DNS](https://en.wikipedia.org/wiki/Reverse_DNS_lookup) | IP fija |
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
| **Proximus** | BBox2 | sí (activado) | sí | **no** | **no** | **no** |
| | BBox3 | sí (activado) | sí | **no** | **no** | **no** |
@@ -40,7 +40,7 @@ Para obtener una lista más completa y precisa, refiérete a la muy buena docume
### Costa de Marfil
-| Proveedor de acceso | Box/ router | uPnP activable | [Puerto 25 que se abre](email_fr)| [Hairpinning](http://fr.wikipedia.org/wiki/Hairpinning) | [Reverse DNS](https://en.wikipedia.org/wiki/Reverse_DNS_lookup) | IP fija |
+| Proveedor de acceso | Box/ router | uPnP activable | [Puerto 25 que se abre](/email)| [Hairpinning](http://fr.wikipedia.org/wiki/Hairpinning) | [Reverse DNS](https://en.wikipedia.org/wiki/Reverse_DNS_lookup) | IP fija |
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
| **Orange** | Livebox2 | sí (activado) | no | **no** | **no** | **no** |
| **Moov** | | sí (activado) | | | | |
diff --git a/isp_fr.md b/isp_fr.md
index 1e8a3900..35e6d8be 100644
--- a/isp_fr.md
+++ b/isp_fr.md
@@ -1,8 +1,8 @@
# Fournisseurs d’accès à Internet
- Configuration générale box
+ Configuration générale box
-Voici une liste non exhaustive des fournisseurs d’accès à Internet par pays, contenant les critères de tolérance à l’[auto-hébergement](selfhosting_fr).
+Voici une liste non exhaustive des fournisseurs d’accès à Internet par pays, contenant les critères de tolérance à l’[auto-hébergement](/selfhosting).
Un « **non** » peut entraîner des problèmes d’utilisation de votre serveur ou peut vous obliger à faire des configurations supplémentaires. Le statut entre parenthèses indique le comportement par défaut.
@@ -12,14 +12,14 @@ Tous les fournisseurs d’accès à Internet [membres de la Fédération French
* ✔ : oui
* ✘ : non
-| Fournisseur d’accès | OVH | [Free](/isp_free_fr) | [SFR](/isp_sfr_fr) | [Orange](/isp_orange_fr) | Bouygues
Télécom | Darty |
+| Fournisseur d’accès | OVH | [Free](/isp_free) | [SFR](/isp_sfr) | [Orange](/isp_orange) | Bouygues
Télécom | Darty |
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
| **Box/routeur** | Personnel/OVH Télécom | Freebox | Neufbox | Livebox | Bbox | Dartybox |
| **[UPnP](https://fr.wikipedia.org/wiki/Universal_Plug_and_Play)** | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
-| **[Port 25 ouvrable](email_fr)**
(fermé par défaut) | ✔ | ✔ | ✔ | ✘ | ✔ | ✔ |
+| **[Port 25 ouvrable](/email)**
(fermé par défaut) | ✔ | ✔ | ✔ | ✘ | ✔ | ✔ |
| **[Hairpinning](http://fr.wikipedia.org/wiki/Hairpinning)** | ✔ | ✔ | ✔/✘ | ✔ (depuis la Livebox 4) | ✔ | ✔ |
| **[Reverse DNS](https://en.wikipedia.org/wiki/Reverse_DNS_lookup)
personnalisable ** | ✔ | ✔ (sauf IPv6) pas de support | … | ✘ | ✘ | ✘ |
-| **[IP fixe](/dns_dynamicip_fr)** | ✔ | ✔ | ✔/✘ | ✘ | ✔ | ✔ |
+| **[IP fixe](/dns_dynamicip)** | ✔ | ✔ | ✔/✘ | ✘ | ✔ | ✔ |
| **[IPv6](https://fr.wikipedia.org/wiki/IPv6)** | ✔ | ✔ | ✔ | ✔ | … | … |
| **[Non listé sur le DUL](https://en.wikipedia.org/wiki/Dialup_Users_List)** | … | ✘ | … | … | … | … |
Pour une liste plus complète et précise, référez-vous à la très bonne documentation de [wiki.auto-hebergement.fr](http://wiki.auto-hebergement.fr/fournisseurs/fai#d%C3%A9tail_des_fai).
@@ -28,7 +28,7 @@ Pour une liste plus complète et précise, référez-vous à la très bonne docu
### Belgique
-| Fournisseur d’accès | Box/ routeur | uPnP activable | [Port 25 ouvrable](email_fr)| [Hairpinning](http://fr.wikipedia.org/wiki/Hairpinning) | [Reverse DNS](https://en.wikipedia.org/wiki/Reverse_DNS_lookup) | IP fixe |
+| Fournisseur d’accès | Box/ routeur | uPnP activable | [Port 25 ouvrable](/email)| [Hairpinning](http://fr.wikipedia.org/wiki/Hairpinning) | [Reverse DNS](https://en.wikipedia.org/wiki/Reverse_DNS_lookup) | IP fixe |
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
| **Proximus** | BBox2 | oui (activé) | oui | **non** | **non** | **non** |
| | BBox3 | oui (activé) | oui | **non** | **non** | **non** |
@@ -38,7 +38,7 @@ Pour une liste plus complète et précise, référez-vous à la très bonne docu
### Côte d'Ivoire
-| Fournisseur d’accès | Box/ routeur | uPnP activable | [Port 25 ouvrable](email_fr)| [Hairpinning](http://fr.wikipedia.org/wiki/Hairpinning) | [Reverse DNS](https://en.wikipedia.org/wiki/Reverse_DNS_lookup) | IP fixe |
+| Fournisseur d’accès | Box/ routeur | uPnP activable | [Port 25 ouvrable](/email)| [Hairpinning](http://fr.wikipedia.org/wiki/Hairpinning) | [Reverse DNS](https://en.wikipedia.org/wiki/Reverse_DNS_lookup) | IP fixe |
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
| **Orange** | Livebox2 | oui (activé) | non | **non** | **non** | **non** |
| **Moov** | | oui (activé) | | | | |
diff --git a/isp_free_fr.md b/isp_free_fr.md
index 59242ee9..58ebb590 100644
--- a/isp_free_fr.md
+++ b/isp_free_fr.md
@@ -1,6 +1,6 @@
# Free
-*Trouvez la liste d’autres fournisseurs d’accès Internet **[ici](/isp_fr)**.*
+*Trouvez la liste d’autres fournisseurs d’accès Internet **[ici](/isp)**.*
#### Accès à l’administration de la box (v5/v6)
@@ -14,13 +14,13 @@ Allez à l’adresse : [mafreebox.free.fr](http://mafreebox.free.fr/) puis authe
#### Ouverture des ports
-[Liste des ports à ouvrir](/isp_box_config_fr).
+[Liste des ports à ouvrir](/isp_box_config).
##### Freebox ≤ v5
Cela se passe dans la section *Ma Freebox / Configurer mon routeur*. Il faut :
-- Rediriger les [ports à ouvrir](/isp_box_config_fr) vers l'adresse locale de votre serveur YunoHost.
+- Rediriger les [ports à ouvrir](/isp_box_config) vers l'adresse locale de votre serveur YunoHost.
- Définir une DMZ vers votre serveur YunoHost.
La présence conjointe de ces deux règles permettent d'accéder à votre serveur de l'extérieur comme de l'intérieur de votre réseau local.
diff --git a/isp_orange_fr.md b/isp_orange_fr.md
index 56cabf4d..1c80f9fe 100644
--- a/isp_orange_fr.md
+++ b/isp_orange_fr.md
@@ -1,5 +1,5 @@
# Orange
-*Trouvez la liste d’autres fournisseurs d’accès Internet **[ici](/isp_fr)**.*
+*Trouvez la liste d’autres fournisseurs d’accès Internet **[ici](/isp)**.*
#### Le courrier électronique
diff --git a/isp_sfr_fr.md b/isp_sfr_fr.md
index a163878f..9b159b56 100644
--- a/isp_sfr_fr.md
+++ b/isp_sfr_fr.md
@@ -1,5 +1,5 @@
#SFR
-*Trouvez la liste d’autres fournisseurs d’accès Internet **[ici](/isp_fr)**.*
+*Trouvez la liste d’autres fournisseurs d’accès Internet **[ici](/isp)**.*
#### Accès à l’administration de la box
* Allez à cette adresse : http://192.168.1.1.
* Authentifiez-vous, soit en appuyant sur le bouton de la box pendant 5 secondes soit avec les identifiants d’administration.
diff --git a/packaging_apps.md b/packaging_apps.md
index dee9331a..5da09827 100644
--- a/packaging_apps.md
+++ b/packaging_apps.md
@@ -6,7 +6,7 @@ The purpose of this document is to teach you how to package an application for Y
To package an application, here are the requirements:
* An account on a git server (e.g. [GitHub](https://github.com/)) to publish the application;
* Basic knowledge of `git`, bash shell and other programming stuff;
-* A testing [virtual machine or a distant server](/install_en), or a development environement, [ynh-dev](https://github.com/yunohost/ynh-dev) or [VirtualBox](/packaging_apps_virtualbox_fr), to package and test the package.
+* A testing [virtual machine or a distant server](/install), or a development environement, [ynh-dev](https://github.com/yunohost/ynh-dev) or [VirtualBox](/packaging_apps_virtualbox), to package and test the package.
### Content
A YunoHost package is composed of:
@@ -21,21 +21,21 @@ A YunoHost package is composed of:
feel free to use it as a framework.
## Manifest
-Manifest
+Manifest
## Scripts
-Scripts
+Scripts
### Architecture and arguments
Since YunoHost has a unified architecture, you will be able to guess most of the settings you need. But if you need variable ones, like the domain or web path, you will have to ask the administrator at installation (see `arguments` section in the manifest above).
-Arguments management
+Arguments management
### Nginx configuration
-Nginx configuration
+Nginx configuration
### Multi-instance
-Multi-instance
+Multi-instance
### Hooks
YunoHost provides a hook system, which is accessible via the packager's script callbacks in command line.
@@ -46,7 +46,7 @@ The scripts have to be placed in the `hooks` repository at the root of the YunoH
Take a look at the [Nextcloud package](https://github.com/YunoHost-Apps/nextcloud_ynh/) for a working example.
### Helpers
-Helpers
+Helpers
### Registering a log file
@@ -85,7 +85,7 @@ In order to test your package, you can execute your script standalone as `admin`
su - admin -c "/bin/bash /path/to/my/script my_arg1 my_arg2"
```
-Or you can use [command line](/commandline_en):
+Or you can use [command line](/commandline):
```bash
yunohost app install /path/to/my/app/package
```
@@ -97,14 +97,14 @@ yunohost app install https://github.com/author/my_app_package.git
### Packaging best practices
Here is a list of best practices for application install scripts:
* scripts should use `sudo cp -a ../sources/. $final_path` instead of `sudo cp -a ../sources/* $final_path`;
-* install script must contain support in case of script errors to delete residuals files thanks to `set -e` and [trap](packaging_apps_trap_fr);
+* install script must contain support in case of script errors to delete residuals files thanks to `set -e` and [trap](/packaging_apps_trap);
* install script should use the command-line method instead of calls to curl through web install form;
* install script should save install answers;
* application sources should be checked with a control sum (sha256, sha1 or md5) or a PGP signature;
* scripts should be tested on Debian Stretch 32 bits, 64 bits and ARM architectures;
* backup and restore scripts should be present and functional.
-To be define the quality of a package, it'll obtained a [level](packaging_apps_levels_fr), determined according to somes criteria of installation and according to respect to [package guidelines](packaging_apps_guidelines).
+To be define the quality of a package, it'll obtained a [level](/packaging_apps_levels), determined according to somes criteria of installation and according to respect to [package guidelines](packaging_apps_guidelines).
### Package script checker
Package checker
@@ -124,7 +124,7 @@ A continuous integration server is available for packagers who want to test thei
* Publishing a [post on the Forum](https://forum.yunohost.org/) with the [`App integration` category](https://forum.yunohost.org/c/app-integration), to ask for testing and feedback on your application.
-* If your application is released under a free software license, you may ask the YunoHost app team to integrate your application to the [app repository](https://github.com/YunoHost/apps) (c.f. also the [app list](apps_en)). You can add your application even if it is not stable or working yet : the current state can be specified to `notworking`, `inprogress`, or `working`.
+* If your application is released under a free software license, you may ask the YunoHost app team to integrate your application to the [app repository](https://github.com/YunoHost/apps) (c.f. also the [app list](/apps)). You can add your application even if it is not stable or working yet : the current state can be specified to `notworking`, `inprogress`, or `working`.
* If your application is *not* free software, then in the future, a non-official list might be created to handle them but is non-existent yet.
diff --git a/packaging_apps_arguments_management.md b/packaging_apps_arguments_management.md
index e967af6b..130e3de4 100644
--- a/packaging_apps_arguments_management.md
+++ b/packaging_apps_arguments_management.md
@@ -1,4 +1,4 @@
-Application packaging
+Application packaging
## Arguments management
#### Retrieve arguments in the install script from manifest
diff --git a/packaging_apps_arguments_management_fr.md b/packaging_apps_arguments_management_fr.md
index 28471773..5d66e707 100644
--- a/packaging_apps_arguments_management_fr.md
+++ b/packaging_apps_arguments_management_fr.md
@@ -1,4 +1,4 @@
-Packaging d’application
+Packaging d’application
## Gestion des arguments
#### Récupérer les arguments du manifeste dans le script d’installation
diff --git a/packaging_apps_fr.md b/packaging_apps_fr.md
index 7e06bae8..df480230 100644
--- a/packaging_apps_fr.md
+++ b/packaging_apps_fr.md
@@ -6,10 +6,10 @@ Ce document a pour but de vous apprendre à packager une application pour YunoHo
Pour packager une application, voici les prérequis :
* Un compte sur un serveur git comme [GitHub](https://github.com/) pour pouvoir ensuite publier l’application ;
* Maîtriser un minimum `git`, le Shell et d’autres notions de programmation ;
-* Une [machine virtuelle ou sur un serveur distant](/install_fr) ou un environnement de développement, [ynh-dev](https://github.com/yunohost/ynh-dev) ou [VirtualBox](/packaging_apps_virtualbox_fr), pour packager et tester son paquet.
+* Une [machine virtuelle ou sur un serveur distant](/install) ou un environnement de développement, [ynh-dev](https://github.com/yunohost/ynh-dev) ou [VirtualBox](/packaging_apps_virtualbox), pour packager et tester son paquet.
-Si vous ne comprenez pas ces prérequis, ou si vous ne savez pas comment écrire du code, consulter d'abord l'[introduction au packaging](/packaging_apps_start_fr).
+Si vous ne comprenez pas ces prérequis, ou si vous ne savez pas comment écrire du code, consulter d'abord l'[introduction au packaging](/packaging_apps_start).
### Contenu
Un paquet YunoHost est composé :
@@ -23,27 +23,27 @@ Un paquet YunoHost est composé :
Paquet de base n’hésitez pas à vous en servir comme base de travail.
## Manifeste
-Manifeste
+Manifeste
## Les scripts
-Scripts
+Scripts
### Architecture et arguments
Comme les instances de YunoHost possèdent une architecture unifiée, vous serez capable de deviner la plupart des réglages nécessaires. Mais si vous avez besoin de réglages spécifiques, comme le nom de domaine ou un chemin web pour configurer l’application, vous devrez les demander aux administrateurs lors de l’installation (voir la section `arguments` dans le § **Manifeste** ci-dessus).
-Gestion des arguments
+Gestion des arguments
### Configuration Nginx
-Configuration Nginx
+Configuration Nginx
### Multi-instance
-Multi-instance
+Multi-instance
### Hooks
-Hooks
+Hooks
### Commandes pratiques
-Commandes pratiques
+Commandes pratiques
### Référencement des logs
Dans de nombreuses situations, vous pouvez vouloir indexer un fichier de log pour qu'il soit affiché dans la webadmin. Pour indexer un log, il faut créer un fichier d'indexation dans `/var/log/yunohost/categories/app/APPNAME.yml`.
@@ -79,14 +79,14 @@ Ces informations seront utilisées pour permettre de filtrer les logs en relatio
### Améliorer la qualité du paquet d’installation
Vous trouverez ci-dessous une liste des points à vérifier concernant la qualité de vos scripts :
* Vos scripts utilisent bien `sudo cp -a ../sources/. $final_path` plutôt que `sudo cp -a ../sources/* $final_path` ;
-* Votre script d’installation contient une gestion en cas d’erreurs du script pour supprimer les fichiers résiduels à l’aide de `set -e` et de [trap](/packaging_apps_trap_fr) ;
+* Votre script d’installation contient une gestion en cas d’erreurs du script pour supprimer les fichiers résiduels à l’aide de `set -e` et de [trap](/packaging_apps_trap) ;
* Votre script d’installation utilise une méthode d’installation en ligne de commande plutôt qu’un appel curl via un formulaire web d’installation ;
* Votre script d’installation enregistre les réponses de l’utilisateur ;
* Vous avez vérifié les sources de l’application avec une somme de contrôle (sha256, sha1 ou md5) ou une signature PGP ;
* Vos scripts ont été testés sur Debian Stretch 32 bits, 64 bits et ARM ;
* Les scripts backup et restore sont présents et fonctionnels.
-Pour mesurer la qualité d'un paquet, celui-ci obtiendra un [niveau](packaging_apps_levels_fr), déterminé en fonction de divers critères d'installation et selon le respect des [règles de packaging](packaging_apps_guidelines_fr).
+Pour mesurer la qualité d'un paquet, celui-ci obtiendra un [niveau](/packaging_apps_levels), déterminé en fonction de divers critères d'installation et selon le respect des [règles de packaging](/packaging_apps_guidelines).
### Script de vérification du paquet
Vérificateur de paquets
@@ -106,7 +106,7 @@ Un serveur d'intégration continue est a disposition des packagers désirant tes
* Demandez des tests et des retours sur votre application en publiant un [post sur le Forum](https://forum.yunohost.org/) dans la [catégorie `App integration`](https://forum.yunohost.org/c/app-integration).
-* Si votre paquet et l'application qu'il contient sont sous licence libre, faites une demande d’ajout de votre application dans le [dépôt des applications](https://github.com/YunoHost/apps) (voir aussi [la liste des apps](apps_fr)). Vous pouvez ajouter une application même si celle-ci n'est pour le moment pas fonctionelle : l'état d'avancement peut être `notworking`, `inprogress` ou `working`.
+* Si votre paquet et l'application qu'il contient sont sous licence libre, faites une demande d’ajout de votre application dans le [dépôt des applications](https://github.com/YunoHost/apps) (voir aussi [la liste des apps](/apps)). Vous pouvez ajouter une application même si celle-ci n'est pour le moment pas fonctionelle : l'état d'avancement peut être `notworking`, `inprogress` ou `working`.
* Si votre application n'est *pas* sous licence libre, il se peut qu'une liste non-officielle soit créée pour gérer ces applications. Ce n'est pour l'instant pas le cas.
diff --git a/packaging_apps_guidelines.md b/packaging_apps_guidelines.md
index 0c606a94..41fe5afb 100644
--- a/packaging_apps_guidelines.md
+++ b/packaging_apps_guidelines.md
@@ -164,7 +164,7 @@ Adding an app to the [YunoHost-Apps organization](https://github.com/YunoHost-Ap
It is also a way to quickly deploy a security patch if necessary in the event that the maintainer is unavailable.
-Transfer Procedure: Ask the [chat room](chat_rooms_en) to be invited to the organization by providing the name of their GitHub account.
+Transfer Procedure: Ask the [chat room](/chat_rooms) to be invited to the organization by providing the name of their GitHub account.
Once the invitation is accepted, [transfer its deposit to the organization by following this tutorial](https://help.github.com/articles/transferring-a-repository-owned-by-your-personal-account/# Transferring-a-repository-to-another-user-account-or-to-an-organization).
#### YEP 1.8
@@ -221,7 +221,7 @@ Keep your code as easy as possible, keep everything a script needs directly into
#### Stabilize an app
#### YEP 2.1
##### Respect the manifest format | validated | Home | INPROGRESS |
-The manifest allows to describe an app so that YunoHost can apply the good treatments. For more information see [dedicated documentation](https://yunohost.org/#/packaging_apps_manifest).
+The manifest allows to describe an app so that YunoHost can apply the good treatments. For more information see [dedicated documentation](/packaging_apps_manifest).
#### YEP 2.2
##### Using bash for main scripts | validated | Home | WORKING |
@@ -287,7 +287,7 @@ It is advisable to make the scripts as generic as possible, a good way to do thi
In order to simplify packaging, standardize practices, avoid errors and increase the lifetime of a script vis-à-vis future versions of YunoHost. A set of helpers to do many actions is proposed.
For more information :
-* consult [helpers documentation](https://yunohost.org/#/packaging_apps_helpers)
+* consult [helpers documentation](/packaging_apps_helpers)
* explore [helpers directory](https://github.com/YunoHost/yunohost/tree/unstable/data/helpers.d)
#### YEP 2.13
diff --git a/packaging_apps_guidelines_fr.md b/packaging_apps_guidelines_fr.md
index 4048f777..847367d4 100644
--- a/packaging_apps_guidelines_fr.md
+++ b/packaging_apps_guidelines_fr.md
@@ -165,7 +165,7 @@ L'ajout d'une app sur l'[organisation YunoHost-Apps](https://github.com/YunoHost
C'est aussi un moyen pour permettre de déployer rapidement un correctif de sécurité si nécessaire dans le cas où le mainteneur ne serait pas disponible.
-Procédure de transfert : demander sur le [salon de discussion `Apps`](chat_rooms_fr) à être invité à l’organisation en lui fournissant le nom de son compte GitHub.
+Procédure de transfert : demander sur le [salon de discussion `Apps`](/chat_rooms) à être invité à l’organisation en lui fournissant le nom de son compte GitHub.
Une fois l’invitation acceptée, [transférer son dépôt sur l’organisation en suivant ce tutoriel](https://help.github.com/articles/transferring-a-repository-owned-by-your-personal-account/#transferring-a-repository-to-another-user-account-or-to-an-organization).
#### YEP 1.8
@@ -222,7 +222,7 @@ Gardez votre code aussi simple que possible, gardez tout ce dont un script a bes
#### Stabiliser une app
#### YEP 2.1
##### Respecter le format du manifeste | validé | auto | INPROGRESS |
-Le manifeste permet de décrire une app afin que YunoHost puisse lui appliquer les bons traitements. Pour plus d'information voir la [documentation dédiée](https://yunohost.org/#/packaging_apps_manifest).
+Le manifeste permet de décrire une app afin que YunoHost puisse lui appliquer les bons traitements. Pour plus d'information voir la [documentation dédiée](/packaging_apps_manifest).
#### YEP 2.2
##### Utiliser bash pour les scripts principaux | validé | auto | WORKING |
@@ -289,7 +289,7 @@ Il est conseillé de rendre les scripts le plus générique possible, un bon moy
Afin de simplifier le packaging, d'uniformiser les pratiques, d'éviter les erreurs et d'augmenter la durée de vie d'un script vis-à-vis des futures versions de YunoHost. Un ensemble de helpers permettant de faire de nombreuses actions est proposé.
Pour plus d'informations :
-* consulter [la documentation des helpers](https://yunohost.org/#/packaging_apps_helpers_fr)
+* consulter [la documentation des helpers](/packaging_apps_helpers)
* explorer [le répertoire des helpers](https://github.com/YunoHost/yunohost/tree/unstable/data/helpers.d)
#### YEP 2.13
diff --git a/packaging_apps_hooks_fr.md b/packaging_apps_hooks_fr.md
index 76578e28..c81dc654 100644
--- a/packaging_apps_hooks_fr.md
+++ b/packaging_apps_hooks_fr.md
@@ -115,7 +115,7 @@ backup_name=$1
##### `post_app_install`, `post_app_upgrade`, `post_app_remove` et `post_app_change_url`
-Les variables utilisables dans ces scripts sont les mêmes que celles disponibles dans [les scripts d'actions associés](/packaging_apps_scripts_fr).
+Les variables utilisables dans ces scripts sont les mêmes que celles disponibles dans [les scripts d'actions associés](/packaging_apps_scripts).
Example: pour `post_app_install` les variables sont les mêmes que pour le script `install`
diff --git a/packaging_apps_manifest.md b/packaging_apps_manifest.md
index d757bdba..f4407aa1 100644
--- a/packaging_apps_manifest.md
+++ b/packaging_apps_manifest.md
@@ -1,4 +1,4 @@
-Application packaging
+Application packaging
## Manifest
The `manifest.json` file defines the app's constants, a bunch of values that YunoHost needs to identify the app and install it correctly. It looks like this:
@@ -71,7 +71,7 @@ The `manifest.json` file defines the app's constants, a bunch of values that Yun
- **requirements**: dependency of the application package to a Debian YunoHost package version. For instance, "yunohost": ">> 2.3.12", `yunohost` package version must be up to `2.3.12`.
-* [**multi_instance**](packaging_apps_multiinstance_en): it defines app's ability to be installed multiple times.
+* [**multi_instance**](/packaging_apps_multiinstance): it defines app's ability to be installed multiple times.
* **services**: services needed by the application among `nginx`, `php5-fpm`, `mysql`, `uwsgi`, `metronome`, `postfix`, `dovecot`…
diff --git a/packaging_apps_manifest_fr.md b/packaging_apps_manifest_fr.md
index 72791575..50a9c611 100644
--- a/packaging_apps_manifest_fr.md
+++ b/packaging_apps_manifest_fr.md
@@ -1,4 +1,4 @@
-Packaging d’application
+Packaging d’application
## Manifeste
Le fichier `manifest.json` définit les constantes de l’application, un ensemble de valeurs dont YunoHost a besoin pour identifier l’application et l’installer correctement. Voici un exemple :
@@ -71,7 +71,7 @@ Le fichier `manifest.json` définit les constantes de l’application, un ensemb
- **requirements** : dépendance du paquet de l’application à la version d’un paquet Debian de YunoHost. Par exemple : "yunohost": ">> 2.3.12", le paquet `yunohost` doit être de version supérieur à `2.3.12`.
-* [**multi_instance**](packaging_apps_multiinstance_fr) : capacité d’une application d’être installée plusieurs fois.
+* [**multi_instance**](/packaging_apps_multiinstance) : capacité d’une application d’être installée plusieurs fois.
* **services** : liste des services nécessaires au fonctionnement de l’application. `nginx`, `php5-fpm`, `mysql`, `uwsgi`, `metronome`, `postfix`, `dovecot`…
diff --git a/packaging_apps_multiinstance.md b/packaging_apps_multiinstance.md
index 7f847ba5..03bc6680 100644
--- a/packaging_apps_multiinstance.md
+++ b/packaging_apps_multiinstance.md
@@ -1,4 +1,4 @@
-Application packaging
+Application packaging
### Multi-instance
Multi-instance is application capacity to be installed several times.
@@ -6,7 +6,7 @@ Multi-instance is application capacity to be installed several times.
#### Scripts
When YunoHost installs the application, it passes `$YNH_APP_INSTANCE_NAME` var to the script, set to value `id__n` with the application `id` coming from the manifest and `n` being an integer incremented each time a new instance of the application is installed.
-**E.g.** in the roundcube script, database is called `roundcube`, the install directory `roundcube` and the [Nginx configuration](packaging_apps_nginx_conf_en) `roundcube`. This way, the second instance of roundcube will not conflict with the first one, and will be installed in the `roundcube__2` database, in the `roundcube__2`directory, and with the `roundcube__2` Nginx configuration.
+**E.g.** in the roundcube script, database is called `roundcube`, the install directory `roundcube` and the [Nginx configuration](/packaging_apps_nginx_conf) `roundcube`. This way, the second instance of roundcube will not conflict with the first one, and will be installed in the `roundcube__2` database, in the `roundcube__2`directory, and with the `roundcube__2` Nginx configuration.
Retrieve app identifier (including the multi-instance id):
```bash
@@ -14,7 +14,7 @@ app=$YNH_APP_INSTANCE_NAME
```
#### Manifest
-Set `multi_instance` variable to `true` in the [manifest](packaging_apps_manifest_en):
+Set `multi_instance` variable to `true` in the [manifest](/packaging_apps_manifest):
```json
"multi_instance": true,
```
diff --git a/packaging_apps_multiinstance_fr.md b/packaging_apps_multiinstance_fr.md
index d652343a..58a6809b 100644
--- a/packaging_apps_multiinstance_fr.md
+++ b/packaging_apps_multiinstance_fr.md
@@ -1,4 +1,4 @@
-Packaging d’application
+Packaging d’application
### Multi-instances
Le multi-instance est la capacité d’une application à être installée plusieurs fois.
@@ -6,7 +6,7 @@ Le multi-instance est la capacité d’une application à être installée plusi
#### Scripts
Lorsque YunoHost installe l’application, il passe au script dans la variable `$YNH_APP_INSTANCE_NAME` la valeur `id__n` avec l’identifiant de l’application `id` provenant du manifeste et `n` un nombre incrémentée à chaque nouvelle instance de l’application.
-**Par exemple** : dans le script roundcube, il faut nommer la base de données `roundcube`, le dossier d’installation `roundcube` et la [configuration Nginx](packaging_apps_nginx_conf_fr) `roundcube`. De cette manière, la seconde installation de roundcube ne rentrera pas en conflit avec la première, et sera installée dans la base de données `roundcube__2`, dans le répertoire `roundcube__2`, et avec la configuration Nginx `roundcube__2`.
+**Par exemple** : dans le script roundcube, il faut nommer la base de données `roundcube`, le dossier d’installation `roundcube` et la [configuration Nginx](/packaging_apps_nginx_conf) `roundcube`. De cette manière, la seconde installation de roundcube ne rentrera pas en conflit avec la première, et sera installée dans la base de données `roundcube__2`, dans le répertoire `roundcube__2`, et avec la configuration Nginx `roundcube__2`.
Récupération de l'identifiant de l'app (incluant l'id multi-instance) :
@@ -15,7 +15,7 @@ app=$YNH_APP_INSTANCE_NAME
```
#### Manifeste
-Passer la variable `multi_instance` à `true` dans le [manifeste](packaging_apps_manifest_fr) :
+Passer la variable `multi_instance` à `true` dans le [manifeste](/packaging_apps_manifest) :
```json
"multi_instance": true,
```
diff --git a/packaging_apps_scripts.md b/packaging_apps_scripts.md
index 78592f57..7d5c4a88 100644
--- a/packaging_apps_scripts.md
+++ b/packaging_apps_scripts.md
@@ -1,4 +1,4 @@
-Application packaging
+Application packaging
## Scripts
diff --git a/packaging_apps_scripts_fr.md b/packaging_apps_scripts_fr.md
index d17dde86..8854f287 100644
--- a/packaging_apps_scripts_fr.md
+++ b/packaging_apps_scripts_fr.md
@@ -1,4 +1,4 @@
-Packaging d’application
+Packaging d’application
## Les scripts
diff --git a/packaging_apps_start.md b/packaging_apps_start.md
index 9cbecf34..7f4e99de 100644
--- a/packaging_apps_start.md
+++ b/packaging_apps_start.md
@@ -43,7 +43,7 @@ Scripts used during application packaging are simply a series of bash commands.
A [bash](https://en.wikipedia.org/wiki/Bash_%28Unix_shell%29) command is a line of text that will be interpreted by the computer and will produce a result. This is commonly refered to as a command line.
-You can ony interact with your server through the command line as it does not provide a graphical interface. Usual access is through [ssh](/ssh_en).
+You can ony interact with your server through the command line as it does not provide a graphical interface. Usual access is through [ssh](/ssh).
Package scripts are therefore a series of bash commands as if you had typed them directly in the ssh console.
@@ -53,7 +53,7 @@ To know what you can write in a bash script, you should start reading this [simp
Before starting the packaging process, you need to successfully install the application. The script will only perform what you instruct it to do.
-Once completed, you need to read a little bit more documentation about application packaging. [This one is more technical](/packaging_apps_en) but now you should understand all the wizardry.
+Once completed, you need to read a little bit more documentation about application packaging. [This one is more technical](/packaging_apps) but now you should understand all the wizardry.
### HELP! NEED BACKUP!
diff --git a/packaging_apps_start_fr.md b/packaging_apps_start_fr.md
index cb64df10..0d8c3ce8 100644
--- a/packaging_apps_start_fr.md
+++ b/packaging_apps_start_fr.md
@@ -37,7 +37,7 @@ Les scripts d'un package d'application sont simplement des commandes bash les un
#### ... Et c'est quoi une commande bash ?
Une commande [bash](https://fr.wikipedia.org/wiki/Bourne-Again_shell) c'est une ligne de texte qui sera interprétée et produira un résultat. C'est ce qu'on a l'habitude d'appeler la ligne de commande.
-Or puisque votre serveur, sur lequel est installé YunoHost, ne dispose pas d'une interface graphique, vous n'avez que la ligne de commande de disponible. Vous l'atteignez en général après vous être connecté avec [ssh](/ssh_fr).
+Or puisque votre serveur, sur lequel est installé YunoHost, ne dispose pas d'une interface graphique, vous n'avez que la ligne de commande de disponible. Vous l'atteignez en général après vous être connecté avec [ssh](/ssh).
Les scripts d'un package ne sont donc qu'une succession de commandes bash, comme si vous les aviez tapées directement dans la console ssh pour installer l'application.
@@ -47,7 +47,7 @@ Pour savoir quoi écrire dans un script bash, je vous conseille de commencer par
Avant d'envisager de faire un package d'application, il faut réussir à installer correctement la dites application. Car le script ne fera que ce que vous lui direz de faire.
-Ensuite, il faut aller lire (et oui encore) la documentation sur le packaging, mais la vrai cette fois, [celle qui emploie des mots bizarres](/packaging_apps_fr).
+Ensuite, il faut aller lire (et oui encore) la documentation sur le packaging, mais la vrai cette fois, [celle qui emploie des mots bizarres](/packaging_apps).
Mais maintenant vous devriez les comprendre tout ces mots étranges.
Mais heureusement, vous n'êtes pas seul pour affronter cette épreuve titanesque, il y a d'autres packageurs que vous pouvez venir rencontrer sur le [forum](https://forum.yunohost.org/c/apps-packaging) et sur le [salon de discussion](xmpp:apps@conference.yunohost.org?join).
diff --git a/packaging_apps_virtualbox_fr.md b/packaging_apps_virtualbox_fr.md
index 1aadff27..e046139f 100644
--- a/packaging_apps_virtualbox_fr.md
+++ b/packaging_apps_virtualbox_fr.md
@@ -9,7 +9,7 @@ Il y a principalement deux raisons pour préférer l'usage d'un serveur virtuel
- Vous pouvez torturer à loisir un serveur virtuel sans courir le risque de le casser, puisque vous pourrez toujours restaurer un état précédent. Alors qu'il serait dommage de casser son propre serveur !
- Un serveur virtuel sera restauré avant de travailler dessus, pour garder en permanence un système sans résidus d'une précédente installation. Cela permet de se rapprocher au plus près d'une première installation par un utilisateur.
-Nous parlerons ici de VirtualBox, pour son approche graphique facile à utiliser. Si vous préférez une interface en ligne de commande pour la gestion de la machine virtuelle, tournez-vous de préférence vers [ynh-dev](/dev_fr).
+Nous parlerons ici de VirtualBox, pour son approche graphique facile à utiliser. Si vous préférez une interface en ligne de commande pour la gestion de la machine virtuelle, tournez-vous de préférence vers [ynh-dev](/dev).
## Installer VirtualBox
@@ -20,12 +20,12 @@ Quel que soit votre système, il ne devrait pas être nécessaire d'installer l'
## Installer YunoHost sur VirtualBox
-Suivez simplement la documentation idoine pour l'[installation sur VirtualBox](/install_on_virtualbox_fr) puis la documentation sur la [post-installation](/postinstall_fr).
+Suivez simplement la documentation idoine pour l'[installation sur VirtualBox](/install_on_virtualbox) puis la documentation sur la [post-installation](/postinstall).
Lors de la post-installation, il est inutile d'utiliser un nom de domaine en `.nohost.me` ou `.noho.st`, votre serveur virtuel ne sera pas accessible depuis l'extérieur de votre réseau local.
Nous préférerons l'usage d'un faux nom de domaine qui restera cantonné au réseau local. Par exemple, `yunohost.packaging`.
-Ce nom de domaine n'étant enregistré dans aucun serveur DNS, on l'enregistrera dans le fichier `hosts` de l'ordinateur qui y accédera. Voir la documentation sur le [DNS local](/dns_local_network_fr).
+Ce nom de domaine n'étant enregistré dans aucun serveur DNS, on l'enregistrera dans le fichier `hosts` de l'ordinateur qui y accédera. Voir la documentation sur le [DNS local](/dns_local_network).
Votre serveur virtuel est à présent installé. Avant de commencer à l'utiliser, nous allons voir comment créer un premier instantané et comment les utiliser.
diff --git a/postinstall_es.md b/postinstall_es.md
index 015515f4..7cb92da2 100644
--- a/postinstall_es.md
+++ b/postinstall_es.md
@@ -32,14 +32,14 @@ Es el nombre de dominio que permitirá el acceso a tu servidor así como al port
* YunoHost te propone un DNS dinámico, proveando nombres de dominio del tipo *midominio.nohost.me*, *midominio.noho.st* o *midominio.ynh.fr*. Si no posees un nombre de dominio y/o que quieres aprovechar de este servicio, elige un dominio terminando con `.nohost.me`, `.noho.st` o `.ynh.fr`. Si no está utlizado ya, el dominio automáticamente estará vinculado a tu servidor Yunohost, y no tendrás más etapas de configuración.
-* Si, en cambio, dominas la noción de **DNS**, puedes utilizar tu propio nombre de dominio. En este caso, refiérete a la página [yunohost.org/dns](/dns_es) por más información.
+* Si, en cambio, dominas la noción de **DNS**, puedes utilizar tu propio nombre de dominio. En este caso, refiérete a la página [yunohost.org/dns](/dns) por más información.
-* Si no tienes nombre de dominio y que no quieres uno que acabe con *.nohost.me*, *.noho.st* ou *.ynh.fr*, puedes utilizar un dominio local. Más información sobre cómo [acceder a tu servidor desde la red local](/dns_local_network_es).
+* Si no tienes nombre de dominio y que no quieres uno que acabe con *.nohost.me*, *.noho.st* ou *.ynh.fr*, puedes utilizar un dominio local. Más información sobre cómo [acceder a tu servidor desde la red local](/dns_local_network).
### Contraseña de administración
-Es la contraseña que permitirá acceder a la [interfaz de administración](/admin_es) de tu servidor. También podrás utilizarla para conectarte remotamente vía **SSH**, o vía **SFTP** para transferir archivos.
+Es la contraseña que permitirá acceder a la [interfaz de administración](/admin) de tu servidor. También podrás utilizarla para conectarte remotamente vía **SSH**, o vía **SFTP** para transferir archivos.
De manera general, ésta es la **llave de entrada en tu sistema**, pues piensa en **[elegirla atentamente](https://es.wikihow.com/escoger-una-contrase%C3%B1a-segura)**.
@@ -54,10 +54,10 @@ Si llegas aquí después de haber visto “Yunohost fue instalado con éxito" de
### ¿ Y ahora ?
-- Si te auto-alojas en casa y sin VPN, tienes que asegurarte que [los puertos de tu caja internet estén redirigidos](isp_box_config_es) ;
+- Si te auto-alojas en casa y sin VPN, tienes que asegurarte que [los puertos de tu caja internet estén redirigidos](/isp_box_config) ;
- Si utilizas tu propio nombre de dominio (i.e. que no sea un nohost.me /
- noho.st), tienes que [configurar el nombre de dominio según la configuración recomendada](dns_config_es) ;
-- Si no puedes configurar el nombre de dominio de momento (porque todavía no lo has comprado, ou porque es un dominio test), puedes solucionar temporalmente el problema con las instrucciones del último párrafo [aquí](dns_local_network_es) ;
-- No te asustes demasiado por [la advertencia a propósito del certificado](certificate_es), tendrás la posibilidad de obtener un certificado Let's Encrypt :).
-- Echa un vistazo a las [aplicaciones disponibles](apps_es) !
+ noho.st), tienes que [configurar el nombre de dominio según la configuración recomendada](/dns_config) ;
+- Si no puedes configurar el nombre de dominio de momento (porque todavía no lo has comprado, ou porque es un dominio test), puedes solucionar temporalmente el problema con las instrucciones del último párrafo [aquí](/dns_local_network) ;
+- No te asustes demasiado por [la advertencia a propósito del certificado](/certificate), tendrás la posibilidad de obtener un certificado Let's Encrypt :).
+- Echa un vistazo a las [aplicaciones disponibles](/apps) !
diff --git a/postinstall_fr.md b/postinstall_fr.md
index d02cee89..7b912a8e 100644
--- a/postinstall_fr.md
+++ b/postinstall_fr.md
@@ -33,14 +33,14 @@ C’est le nom de domaine qui permettra l’accès à votre serveur ainsi qu’a
* YunoHost propose un service de DNS dynamique fournissant des noms de domaine de type *mondomaine.nohost.me*, *mondomaine.noho.st* ou *mondomaine.ynh.fr*. Si vous ne possédez pas de nom de domaine et/ou que vous souhaitez profiter de ce service, choisissez un domaine se terminant en `.nohost.me`, `.noho.st` ou `.ynh.fr`. S'il n'est pas déjà utilisé, le domaine sera automatiquement rattaché à votre serveur YunoHost, et vous n’aurez pas d’étape de configuration supplémentaire.
-* Si en revanche vous maîtrisez la notion de **DNS**, vous pouvez utiliser votre propre nom de domaine. Dans ce cas, référez-vous à la page [yunohost.org/dns](/dns_fr) pour plus d’informations.
+* Si en revanche vous maîtrisez la notion de **DNS**, vous pouvez utiliser votre propre nom de domaine. Dans ce cas, référez-vous à la page [yunohost.org/dns](/dns) pour plus d’informations.
-* Si vous n'avez pas de nom de domaine et que vous n'en voulez pas en *mondomaine.nohost.me*, *mondomaine.noho.st* ou *mondomaine.ynh.fr*, vous pouvez utilisez un domaine local. Plus d'infos sur comment [accéder à son serveur depuis le réseau local](/dns_local_network_fr).
+* Si vous n'avez pas de nom de domaine et que vous n'en voulez pas en *mondomaine.nohost.me*, *mondomaine.noho.st* ou *mondomaine.ynh.fr*, vous pouvez utilisez un domaine local. Plus d'infos sur comment [accéder à son serveur depuis le réseau local](/dns_local_network).
### Mot de passe d’administration
-C’est le mot de passe qui vous permettra d’accéder à l’[interface d’administration](/admin_fr) de votre serveur. Vous pourrez également l’utiliser pour vous connecter à distance via **SSH**, ou en **SFTP** pour transférer des fichiers.
+C’est le mot de passe qui vous permettra d’accéder à l’[interface d’administration](/admin) de votre serveur. Vous pourrez également l’utiliser pour vous connecter à distance via **SSH**, ou en **SFTP** pour transférer des fichiers.
De manière générale, c’est la **clé d’entrée à votre système**, pensez donc à la **[choisir attentivement](http://www.commentcamarche.net/faq/8275-choisir-un-bon-mot-de-passe)**.
@@ -56,16 +56,16 @@ votre navigateur ou la ligne de commande, alors félicitations !
### Et maintenant ?
- Si vous vous auto-hébergez à la maison et sans VPN, il faut vous assurer
- de bien [rediriger les ports de votre box internet](isp_box_config_fr) ;
+ de bien [rediriger les ports de votre box internet](/isp_box_config) ;
- Si vous utilisez votre propre nom de domaine (c.-à-d. pas un nohost.me /
noho.st), il vous faut [configurer le nom de domaine d'après la configuration
- recommandée](dns_config_fr) ;
+ recommandée](/dns_config) ;
- Si vous ne pouvez pas configurer le nom de domaine pour le moment (parce qu'il
n'est pas encore acheté, ou parce que c'est un domaine de test), vous pouvez
contourner temporairement le problème avec les instructions du dernier
- paragraphe [ici](dns_local_network_fr) ;
+ paragraphe [ici](/dns_local_network) ;
- Ne soyez pas trop effrayé par [l'avertissement à propos du
- certificat](certificate_fr), vous aurez probablement la possibilité
+ certificat](/certificate), vous aurez probablement la possibilité
d'installer un certificat Let's Encrypt :).
-- Jetez un oeil aux [applications disponibles](apps_fr) !
+- Jetez un oeil aux [applications disponibles](/apps) !
diff --git a/security_fr.md b/security_fr.md
index 16af38ea..8d9c94e2 100644
--- a/security_fr.md
+++ b/security_fr.md
@@ -11,9 +11,9 @@ Deux points sont néanmoins importants à noter :
* Le fait que YunoHost soit un logiciel répandu augmente les chances de subir une attaque. Si une faille est découverte, elle peut potentiellement **toucher toutes les instances YunoHost** à un temps donné. Nous nous efforçons de corriger ces failles le plus rapidement possible, pensez donc à **mettre à jour régulièrement** votre système.
-*Si vous avez besoin de conseil, n’hésitez pas à [nous demander](/help_fr).*
+*Si vous avez besoin de conseil, n’hésitez pas à [nous demander](/help).*
-*Pour discuter d'une faille de sécurité, contactez l'[équipe sécurité de YunoHost](/security_team_fr).*
+*Pour discuter d'une faille de sécurité, contactez l'[équipe sécurité de YunoHost](/security_team).*
---
@@ -178,7 +178,7 @@ sudo yunohost settings set security.ssh.compatibility -v modern
### Désactivation de l’API YunoHost
-YunoHost est administrable via une **API HTTP**, servie sur le port 6787 par défaut (seulement sur `localhost`). Elle permet d’administrer une grande partie de votre serveur, et peut donc être utilisée à des **fins malveillantes**. La meilleure chose à faire si vous êtes habitués aux lignes de commande est de désactiver le service `yunohost-api`, et **utiliser la [ligne de commande](/commandline_fr)** en SSH.
+YunoHost est administrable via une **API HTTP**, servie sur le port 6787 par défaut (seulement sur `localhost`). Elle permet d’administrer une grande partie de votre serveur, et peut donc être utilisée à des **fins malveillantes**. La meilleure chose à faire si vous êtes habitués aux lignes de commande est de désactiver le service `yunohost-api`, et **utiliser la [ligne de commande](/commandline)** en SSH.
```bash
sudo systemctl disable yunohost-api
diff --git a/selfhosting_ru.md b/selfhosting_ru.md
index 07881197..40f82c63 100644
--- a/selfhosting_ru.md
+++ b/selfhosting_ru.md
@@ -4,11 +4,11 @@
**Свой хостинг** - это сервер, расположенный у вас дома и предназначенный для размещения информации для личных нужд.
#### Обязанности администратора
-Свой хостинг создает для вас определенные обязанности, если вы хотите разместить на нём сайт, [e-mail](email_en), а также запустить [систему мгновенных сообщений](XMPP), ваш сервер должен работать и оставаться онлайн 24/7.
+Свой хостинг создает для вас определенные обязанности, если вы хотите разместить на нём сайт, [e-mail](/email), а также запустить [систему мгновенных сообщений](XMPP), ваш сервер должен работать и оставаться онлайн 24/7.
Распространенные проблемы, по причине которых сервер может быть недоступен включают в себя: отсутствие электроэнергии, потеря доступа к Интернету, итд.
-К примеру, если вы используете [e-mail](email_en) и ваш сервер по какой-то причине становится недоступен, отправленные на него сообщения будут отправлены снова только по прошествии от 3 до 7 дней.
+К примеру, если вы используете [e-mail](/email) и ваш сервер по какой-то причине становится недоступен, отправленные на него сообщения будут отправлены снова только по прошествии от 3 до 7 дней.
#### Минусы своего хостинга
* Медленная передача данных. При использовании ADSL, скорость загрузки составляет 1/10 от скорости закачки. К примеру при скорости загрузки 1Мб/с скорость загрузки будет около 100Кб/с;
diff --git a/ssh.md b/ssh.md
index 05073dbe..68084a69 100644
--- a/ssh.md
+++ b/ssh.md
@@ -95,4 +95,4 @@ yunohost user ssh list-keys
-YunoHost est un **système d’exploitation** qui vise à simplifier autant que possible l'administration d'un **serveur** pour ainsi démocratiser [l’auto-hébergement](selfhosting_fr) tout en restant fiable, sécurisé, éthique et léger. C'est un projet de logiciel libre maintenu exclusivement par des bénévoles. Techniquement, il peut être vu comme une distribution basé sur [Debian GNU/Linux](https://debian.org) et peut s'installer sur [de nombreux types de matériel](install_fr).
+YunoHost est un **système d’exploitation** qui vise à simplifier autant que possible l'administration d'un **serveur** pour ainsi démocratiser [l’auto-hébergement](/selfhosting) tout en restant fiable, sécurisé, éthique et léger. C'est un projet de logiciel libre maintenu exclusivement par des bénévoles. Techniquement, il peut être vu comme une distribution basé sur [Debian GNU/Linux](https://debian.org) et peut s'installer sur [de nombreux types de matériel](/install).
Fonctionnalités
---------------
From e41e91b37f8859d20ff840a9e93825e2c711d436 Mon Sep 17 00:00:00 2001
From: Alexandre Aubin
ynh_script_progression
- Print a message as INFO and show progression during an app script
+ Print a progress bar showing the progression of an app script
ynh_script_progression --message=message [--weight=weight] [--time]
-The execution time is given for the duration since the previous call. So the weight should be applied to this previous call.
+ Usage: ynh_script_progression --message=message [--weight=weight] [--time]
-t
, --time=
: Print the execution time since the last call to this helper. Especially usefull to define weights.-t
, --time=
: Print the execution time since the last call to this helper. Especially usefull to define weights. The execution time is given for the duration since the previous call. So the weight should be applied to this previous call.ynh_permission_create
+ Create a new permission for the app
+
+ ynh_permission_create --permission "permission" [--url "url"] [--allowed group1 group2]
+
+
+
+
+
+
+
+
+
+ permission
: the name for the permission (by default a permission named "main" already exist)url
: (optional) URL for which access will be allowed/forbiddenallowed
: (optional) A list of group/user to allow for the permissionynh_permission_create --permission admin --url /admin --allowed alice bob
+ ynh_permission_delete
+ Remove a permission for the app (note that when the app is removed all permission is automatically removed)
+
+ ynh_permission_delete --permission "permission"
+
+
+
+
+
+
+
+
+
+ permission
: the name for the permission (by default a permission named "main" is removed automatically when the app is removed)ynh_permission_delete --permission editors
+ ynh_permission_exists
+ Check if a permission exists
+
+ ynh_permission_exists --permission=permission
+
+
+
+
+
+
+
+
+
+
+
+ -p
, --permission
: the permission to checkynh_permission_url
+ Redefine the url associated to a permission
+
+ ynh_permission_url --permission "permission" --url "url"
+
+
+
+
+
+
+
+
+
+
+
+ permission
: the name for the permission (by default a permission named "main" is removed automatically when the app is removed)url
: (optional) URL for which access will be allowed/forbiddenynh_permission_update
+ Update a permission for the app
+
+ ynh_permission_update --permission "permission" --add "group" ["group" ...] --remove "group" ["group" ...]
+
+
+
+
+
+
+
+
+
+ permission
: the name for the permission (by default a permission named "main" already exist)add
: the list of group or users to enable add to the permissionremove
: the list of group or users to remove from the permissionynh_permission_update --permission admin --add samdoe --remove all_users Requires YunoHost version 3.7.0 or higher.
+
- Dude, show me the code ! + Dude, show me the code !
@@ -4524,7 +4783,7 @@ Please always call this script in install and restore scripts- Dude, show me the code ! + Dude, show me the code !
@@ -4564,7 +4823,7 @@ Please always call this script in install and restore scripts- Dude, show me the code ! + Dude, show me the code !
@@ -4611,7 +4870,7 @@ Please always call this script in install and restore scripts- Dude, show me the code ! + Dude, show me the code !
@@ -4655,7 +4914,7 @@ Please always call this script in install and restore scripts- Dude, show me the code ! + Dude, show me the code !
@@ -4706,7 +4965,7 @@ Please always call this script in install and restore scripts- Dude, show me the code ! + Dude, show me the code !
@@ -4753,7 +5012,7 @@ Please always call this script in install and restore scripts- Dude, show me the code ! + Dude, show me the code !
@@ -4800,7 +5059,7 @@ Please always call this script in install and restore scripts- Dude, show me the code ! + Dude, show me the code !
@@ -4836,7 +5095,7 @@ Please always call this script in install and restore scripts- Dude, show me the code ! + Dude, show me the code !
@@ -4847,7 +5106,7 @@ Please always call this script in install and restore scripts -Generated by this script on 07/11/2019 (Yunohost version 3.6.4.3)
+Generated by this script on 03/30/2020 (Yunohost version 3.7.0.12)
+ \ No newline at end of file From d0f35af3b1cd0eff1187d6f12c72f959e3ab3d42 Mon Sep 17 00:00:00 2001 From: Alexandre AubinDoc auto-generated by this script on 03/30/2020 (Yunohost version 3.7.0.12)
Generated by this script on 03/30/2020 (Yunohost version 3.7.0.12)
- - \ No newline at end of file + From 9d37a75daa41a8cde087687a6ce692a03ba16eee Mon Sep 17 00:00:00 2001 From: Antoine <27826950+Antoine-lb@users.noreply.github.com> Date: Mon, 30 Mar 2020 19:19:54 +0200 Subject: [PATCH 24/83] Fix SFR (ISP) source link --- isp_sfr_fr.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/isp_sfr_fr.md b/isp_sfr_fr.md index 9b159b56..43c311fb 100644 --- a/isp_sfr_fr.md +++ b/isp_sfr_fr.md @@ -11,4 +11,4 @@ Pour pouvoir envoyer des mails, il faut désactiver le filtrage.X)hY+89E)|zfJ zcc1gFb#ib3fjpibdwIk8_D6T%Bg8$c(&Z?_ 2_1y#JYu# 4c!9cu$ z+K^2(#(Qu7_wd{H1_`KqOgFc)4rAVS5%GbKukq8TPy6#_D6f3Z$jDg7XjnwCsf${3 zM^jls;edz;pep6HQFuqk3u%Q<${ob#{7N_O5->18oJdAbugAgg@go)s3yUf1B09O4 zR!S2fUX9uCmD{6JM$t=A=jBJ43slfEyobqv2{(w#_8zr)XQZW(((pi8TG}TviS*>+ zr!aKwn1A^~%0h$Z)(FVjB?8#vS%?^_7%QFLLb}=rtY>Xf6TVsZ AqQ6= z5Y?+dv~An%&O_(j$S<-zBK8)&IABuR>gkjEqtG&bAOHZ><^xXxLzLral3fK&0qlt% zf#Wf9D=kkT4GnB*85xZ^KG4c#YqZpw;-wvl26lv^v|8J;x0VNFeSQ7s+#X~t5#!t3 z2J2;=8|ukdo!?&LRa2N0$r1-_oEjRV;=h5OgiDDF17^F@t~YXnCo3Bg8rCzoB$@xv zC))SfGOc4Oq${eQDZ_v2Ru&H$`mwr!G5-7S-(&-uzBY9~4(G!vrEyX!SA@0h>DbH9 zu0NfiS}rBW#uflzU5Uul?~d=t*Z1_v%=E@hcYE&*Q$(Z(&?3Zuupb;etL!#@Tu$DJ z=ov? _;# UQd_u`CSVrhBqxfTDUT`4hM^&ZUt>$6t73zle~p$IBu zNLU#82SKppDn&NT=m8Hbv_K#}_1RNbOfO!C@*G|;G@k$Kn9AWvNEu6nEbRGWyAXGB z>9hW%mK)^Tm`~#8_uA}r0u5Br)J{~Dl|=*mMV)-tfhWuo?~=vlj5r5%1EW10ur@Zg zwQOu9Sr_ZHpaZGjHP-7N`UeNLBj4C;RvR(W((wKq@|4jg(e?r$(i@prqE#+zvDt%A z&<#CSkDyo|`&&j(|FMb2*Z(!Ao5SB>xq*VWBs_6_LyB9sKb{=iZBtKnD@kgn78kY1 z$!PJRp`oiM_PCZXFcMMGuzqac{My|$gN26&P(jA#$x%GuT!5{0kGxH8o(4- zJ5tBl-nRLw0A&R71TDsQfqf2^`-nAK*Pm`a$S*rh9IEH$SHxnxWd(}nb_Wj$p5J<^ z?6)#8ELYdpvo~aKUSIh~0i@G5KqXnhNC5$3LUQs|6*87o+f<3|?(IuL_OtQ884B4W zX43E!sIz5eeVApN#d>hL=lU3LR_%>o&pDAC;3sPQr;y9_yU O6)NpP3IQrb*%vfqi7;jnnLtsiG$f`pKJ7ox4wQ1 z-UU(P$x^tg`DCt6(x}C9D^I1t-S1`_Plhh_t3n`&bMV`abpjAdI++#jPgi2;8IY`6 zt+wL FM1B3nJqh)JFxFzJb>L&YKr{ ;OOA7Hp=f;nLfdS|SL*v;}{F{6lgn$6cA>W+D+myFuecZ!96T2tL0vk>v@zo(4 zz-{3V)l&NoPEUjK!+fKEcq4D!m%MFgwNZ8+FY~SU_dK1l#Wh&>EDsS(Dkyw4r*>+` z6lP561O5h@ceDfn;B2OV7Y~52ttO$SGC!ROpsI{K%m-otT0tUCOu6Zg_BOZWiZm!d zYF3i_VV!4gLQv?Vr>$&l7EN(cQFww_SI_B7xZ~xuHaFj#$X=YS<7sb_=$x;} ;rGkN6q#etKP7(NsnAj_twob-Ji8=o?l% zwG=i%L4y -V;&>>a|$vXvahC*+}OkfjgT =y{urZMvqgNj_WP4yYM^}YRu_hzry0;E^U(DeLixXO)i7GP;N*F zAY_5;%l)IHvQ> d5Jqz%t8)f;ya!=gJW z+9WcdSNUz>cmFv@EkC76u&+t~1MfB(VN#>{Ubfi_psFXEW*5IOEdC+WfM z>&=oMz`M?U{9<1iEuP0ZcPg~21=Po3Pl4_O;Ju-{i;BxL!OqQwcmOOhm7mVb%llQP z;7_G(VSFEekS?DaLRVn=-o=Lfmz1d^M$VU8Dts=dp7S&4ly8EGKSi<=zI$Yk@b1Ha z!r^a8OnYt40`s}OH(7PO*n0vxJ7np>lr-LXm`Q E5)s#ailL7eBsYV4S7)%;3WXx0BD1oH zVIIYy4%v*6uK|%WLXb2oUhW?~=6}_%|FT;2KO8or+iFym2Y(|;F6KLL0G5`4mtTD& z|8KnqQzwWNwj5Zm-nYDXg8u^&+kaAo{_m01OtJngf@$CJQ{zU$MSdOIDX8@Uf+{n! z!s5^7y2hr{=#V0xRX_YQB(?naii)z~9X}ZQjU7wq^W`YThR2j}@$izh&;wHbUEiym zhK)l2!^fu^(QgbZT;c ;9i|;3P-; zxVn_2TGs!m3hv*0^H%xk4T`~KBc3Dr;p`iOCsZN_* _sB3%5$|d_%Lp= z*>mhFf3>@F8CgiYjb8SJoi5z+HPxBB*2V7uHelk55MgUZ>bCQ|(a7MoSate-_yAR& zVEPm=C}v=z{rQks4~XwhqQ&j65Lcz0no)=5Cwfc59RskuoADJH$^|L~#@c2JlRv7> z*TLuwY7yl#*u%6aR61@KmtlZBq23kkStC1x)BLLS6F&EC0B>uxeo-!=TaK|zRIZb} zxohn_+h&uAM#3?EuP_wqteLoYc)Hv$<;_cEoo+2uj++wVASqqrh#eaG@_@6Wyr2+o z_+4E5dTr>{w4mIS6YR5vMTD6=e%%1t*4DO>wRN;)CF4Nrif5g9o^I9D#a`nH?(Iv{ zr~)~xR<#A3)k0|~)6?Ax#o^tI$(f37 okg&bI>GX@ZwV!7xl) ;4DNHCTd%ZuGc8PY>>NNznd2O _iHek zz0U-($A7>9Mf+@SPL?t2es8iT9c+8!QdLt=WevGquWNxHWi`9=)xFsrtfK&4xHK6- zINu59JLTB*b!#w~p>H&FY 4y=6vEaDc*MU6elD(EsfX> zUdoH=wACMk?@#L(sWDd)(FK9cf3x$vd Y?SU4MDO{AUWGavp+UJL}-j z+)FqYC26p+syRcgpQQ)yd;Lm bjA4pe}{gLTgl za5)@|&eb|&1t>uR>Gl|{x5wl^3kr7bhsVc#_|A%JdT}5+(E)iJDpd5t^?i92^R0iP zS``YOppM0CZZsfB$O1Yz_3^5|Qn7MTr^91cU8!e!gAEm6`&2+#w+L_@Ot;fDI<>MB z3gG CzM{5bqNO*oVa zX_Y#a*4w+it+5&EQ#cF{+JFZpIGmp=e_%cjtu|R8&TUi`Gdg>PXqgYC%+4R-oqXGr z$^|^4H_~4L4uwPjyHGCsBX>(Pf=JJYKckQQ%u4S!D%a|06wbbQIad~)#kLI{)2xC6 zn6VJRAz^KK-LQCF&-C|srKP1&&Bn8+-W?n$DnL_FRSi9;+l6P06$sgW%fvKjheZbx zCmFfh*s-yhv`f7V->(&??+q`+WJm+}ydtpD@h}SU@JO6n%qgVu+a`bgo=MMcJEM`x z;@!E#e}mtO&}H|cYP$qzG$C2Ok0lMcW(>=4PsoJmf1O%Tv9TH1E!QLg0W-mhSbkK% z=bAg$`EDxY{yxMe9^hPI=dAePxa`(`d8Cbu(1`jjQ1%{sB0#+X<);2`MZGIf(IKr! z_;3ITBq}NzG+n1CWc1u$BI+U+lcPjkJC{INvrsRDSwGeO#NXwXX{hb2v+gb=mdL$> zbM}1L!423W)$gn;HQY8fxpR0qEaa6>sN;iA@Z?S5Z~%sJq`?bX&I1{BC!>B~RsJAO zRU)MM1vY3Wgeqv@%_kIaVmQ3Cpbdg#MzzdcD#S;5?d(sMX+a0vhDQDCxk2t0t>@hA z^0*D;a$jRE(2T#aL5iS;yr0!E4^=XH<9~a~#~)>dv~h0lo;Xp6^9zpRLvCnXz;)pU z7JUS)7OK+EDC!(oYBE^bUzi12`#EY7U}y;7w5001A*eFa(q{r0E&eu(6kl!Nh&t~C z`4=X}GkKhMGyXVt(qtqW7ISxai9T$9+2zPic}~n*MC7g1lVKDjW^;na8Zx5#4z-+! zDWQzHr>RIi>;H+GC|EWxsgNX-q2WY*jkkjSkxzSsN$Gp^rw5rGE=4*q&3?@6cx)-U ztg37^jT3qG$^IQ0I=3R~%05L}a!vilW+VohAw2^94ifn5g;QDCL;Uky%Yw-ew$apv zno%J%Z5hA7JpS81P#-rYW=H2u@J9V{oWE1;>M2>pplBX;;3%KIGB-_ONhlL%JBySE z3hMpw<5lHx< *Q_<>+i$*n>0#gI@6#Nl79>}sDZ4AAeVR0-d%@OM`F|*T3#h2N zwtsj81tk@vO9ezp=>`SqmTr(3y1P*UX#oN0F6nNDuA#e!9%AUO;X8WY&-1?jZ>|4Y z-^X$ZGqY!(bM|%ZtFPbI2~1NQ>V}g{pR{$m0nfDIWL2_ybuG1#a CgMQ!--j)uW8=G?&~yp9d3UD-zpSXYR+RrHun*h^0V`+19P=nTjuThJY1gG zw%g&dP}{6JD^&jkG+Ba{d=Drny_@)VTVU_y<#AY9<25fg1lF1k!n`r7#YJQN`auuT zA60m5&?B$GL@AW}X2~o?F4lZCw&<;Ex`5YkLp73b=uOILWpJq-FOk51&+uwECCl*Z zwHS1QZAnOniRU}q<81xJ9rKrfJqixadCpF9R8(7ttvc&v>;r+b^)=8#G_?&tMGo9s zyc`x-Y+k5&S4-(Q|0^n?Z>M_K{bn%A$^G;hNa)uorKaX=GQ_T}j{LoYGzKafL^{Z2 zkC^v!UDw{PA3u5{QhZOA_>IgLD;|N^^L#(fM?@~Kt?90C*}1rg7fxnQnH}1>((%#; z9B|)u{^FJxI~%=!pjd4|@M DkpI5$o*><{RQ#ao>Jskv;YB{cNu^KgMeX{jCWCy#YyIWT7R%Q=u z{UT;#V|PD3D)| $p*|!aeKO(kiV|FJy zhk+}Uo|}<;_8o+`8+hvJJ15xQ%bBQvI~sMkD5NBm($$rBZ8l2wEF~auHlT-f^M?>V zd4w={=DZV25bBcmt~dx+FsY9CJU*U*?(^~G>BUDO#C~{9J~DT1B-&x1I_j&Ms%azH zfmV502|WRi*`(KL)ruEsQZ5);jwQ6aCzJQCqw)@luJU?o&yK#a0J=!Ed0wBD5|SY3 zJ(92b(3A9Ybzo#%z3=Oj-6PosPN&y`c|UBCY!g=rnS3m6ZIJ`XBEU{3iEpg%jvTI+ zoW35C-QP61ZLD|JXz-ru?mqkJ$>}(6VD1U~zNYy2WoJr`P0G9L=1Y-;akXMSXfn%Y z=J>W-jrtK3vbMVF?l>?H6h8l=@?Gfd%6}uD%+q&-Pp8phJW2r>oK68f#wzMRjm-Ti zIPzO<@De7pv=ruTNs~74OU}Q=?}9Fj_oZtNO>HCzAH<+XRuEA3!n6moLBL z=-GLAdM{z}^73N4Pg*u@X>Dms@zoktNG3%A_X Dm-uh`gB27Td$LB$@cJ-UH z3-lyT!@-6#V^fort!2f{^F-~)dTT6PVNpFj%Cns*&bW-~>Wvcx@K1VfVU{$*(q{kC zNL*z)1x7(duF42U_;A)6jBqkeMjLhs39V|kAM9Z2(njnO9`|DokLFZyF{xh+JCg;X zE-qZ~;j}ytv-}KE)t^nQ@KFiA(FPMtrMx?U^X&HS#(CnT4(Q+z=UBZZzcdyX}z%CuWdXKIeWCbW&u>G?t1^Odt_ zV3IM|NM_fAdKEf>#KFO6+IOk_82V$ZC$zRQP>|Q7u-{Cj+G&+`U^rp{B|zrw)x_cG zrw$33G+SoYx)k)3c5-tSF^NXf4XQjyN^iQHGx}QV`p$53QbUE8t38UrB9fzl)1iBE zsi951*>8-+$I(?KCfQ`>{65oRl&Jk{TTbns{|gFDcZ?N#_lcug_W8iLpUTkbp&c&z zzQhKuQZ)euH=Png11ha1N^nYIkR`vvtJkFqcZPjJt`*8BM{ysK0 (a`}~D3p#E`8 n=FZPy)K_{)o?laTxP63u=aUy zhmIv)I(;%!$NKFddRF=9JGYr?bvI}OJs9k|mlP0-SG;34X)xKcg<+~S`XW6$EDQ^z zw{^irAHx4RK 6CRAS-3(vx9Mv`A8MQx{su5 TD*AaAi;Jow(+S$8#*k(uECuhat3== zv*Q3c9ScD_WLBpoNOle!-sTM;tj?g_P{|ILuE;GZIq!n|b!NglQcCB1DI-W@ZaNl( zhNnBS()7~P6%Ex`^ewLD46_3BHuX4$(vk~UD)&mxXAh)|*9q}9!9gvGZE8k52ig@l zGPT2VGj*vBGAXu MOpB9C9%IH9#Ryu3`T23meybdTJZ`hp=f_ig*So*=jK z;S&yv5x)m4XGRyPf;s4kAtKe8n4|kPHY%7HRbD{n3#x%5gF2VzkdBvEQ{V6~ymA=M z>XDt%aSvPRNamv$>dy%^o69b@M`mXmqew5D>nYKqqtc?|0+mwJ1G@<0Itsh)9;#1S zVQJ(iCnv=te`#OKr>|KekdZOz=G)FMaK9?!#de~+L~;|?wPywf*M&sIC|^HP2VhsY zv$0DkC&0$0aW*jnSZi(0Sq1%d9mhL+O%!J}RkFCaxJy2cG`0}lXm;?cOVguIOI|k= zBBCPs+H?c!eE$cTZ99*As4vFPs&0x^9Q@3Qe~=0_5@CODO6HW^T^X#RTq2L`GufP? zxn>H wH$!RJ%! 9sLLJg&VFcQ-W> zl?C+sIq}9Uc?Ja^M8J2&WWt0`Vw2+4fAYQ^`avadN~ILfobhHF_Va#!(N$G9!pPP( zGVP!mbr$HXO|Pz|Wqlj`!=kO*ci*PO&8;qL(t@FiQl_R{%kC*(N{I?@KtO=N#b@6Z z*kR0(?cRJfZIKJp>n8R%TBust$$>AUO;2lUYvzZUD7>$^vOu2aCa|iFpxR>cW7cTd zeQVn%UtzZ`;pF7x#~4K(9YzCvqrp|DW9s<|sTj4t!;+M2W%`?lor7UMFtt~G`0d#j zOJc=pj(oSWN5MJC9c_t5z0qsH|C<(@t22oWakb6d7Q&iy`?c$sGOTy*J= 17yjaUgF7C%=qFI5yucYacUD5`-yY%FoZTGMldd9fuSvKjl zrWt%;p3IFCFOF;R6E^m7WzOB@TQV|ZrJG6(rf02&XgA4fGjbydJ&S(>D~I9q%O};O zF(jr%cZYWrV6I`08#Z_(O${aYfNkF&;)m2JZD>_s$5s7DzWb;as%3} gFxa`XM_3M|XX;SG8&Yz}b7sPGjfH{422v@OIbeewajO)_cQHgF?t*on0 z9W_AT)(gv)ESEu2vudq4M*Y4+!>_!~e97DF!dcEx!jIyq)U2!p6E`SD1Vlu`;I!ea z`Itz2`*TKy7Tqo*U8MSE7AjzNobJqiRe%q4EiQ&%pY1%Opcq7_lJA)A2`b(6)yp{3 zXb2Z #Njs(Ln(n6+F_~_xQZ-iPb{cRHm~^G2VNP zy}1GHLxPN#lXmv@D=`U`N5`j4FRkqYk_s9AOoohyJ=LhDH>|cS2OkIlx$!Orma~rT z&2E_2r&@Vp2(l#{>3y@jwbk1$CL<{&)iys5U1hToZ)SSS{`z&GA+`ANRQ~k#NDBph zYzUR_+&8Uat`_RHuC9PJI(fU>PN~~lFPUc4|MFFCkx{P-IX^G2mdbQt?S(0VPG-)# ztG4jce$7;^Si@mlzH=YP0!MdXWu%Mzcip_+3CRn-YQGELkURxPZh4&{lcjTG4^C$> zaN(-RC!yhi$knX8=54KEl2{D2eJQbGW* 4PN;8T$D}Awrd $ZhKB01&?r(spA`tSqi{eu3ghJ3Ij8-Nto>F 5$;HTYeEv%2{D?=W2qo{CR>_kCLNmz}%ubQCR}FVtLoLj+_iS7SIJ* z5%fW5- t`)@m5;|cAgcLqt 9mQt3Km2MxNjyL?OZ#crh0{dw| z$!*GE)UA-dD0<&9*_Dtgn40TZOBd!UxiI9B#83&C#a;r=crZq-egv;$`KTFCKySF8 ztl1sEf9AcyD;`NAaX@r^)Ro6>Hr}9m1nO WO&qj7CdET zX~OKja_h}hYvoFX`D?a44KG#0SXlT8Q!JbKuI7(qmwc*twq4J_Mwwk7 JTZMrwkkFk529#&%q{yE*z%* z+}>JCq|xlYO5(%0O5j!eCk(f9=o`vZ`_vBnLRP@%w5SfLo$8KG)t0>L=i|aDmHw_i z3vpn*a2F<(<%2G7uojV!1NwNtT3>AO`~RDhC!T|*gdUdJ!hFv6=JhS4Aw)NabC#uS ztJN!vnhjxnF|SYh8Bk|x??G3Ou5zXfEelr)Y!oW&$6s#_B@L_V57k=S)qa%*!Z><3 zUvrt}#!3$`vB(4tQ#FRef25?y0nQsUbC z&wb` zBRTqkzSiimG J~4RB-c%%+!6C+fd0!HoOMje5*StB$NSYs0_w-@#*Fc1X#}8XtGM z9-S6-)(E?nc@9Iocx@v%BA$N9mK6kCpD-;7nO|uXi)7H{dk=x5t4E*5F@9Zqp%P-| zvf@i_t5Mdpa;pxpf_X34{4q)2S=xZ=@OM0tBvF=yI6SX=WUsdH1Dm;`ix5^Qg=#Cn zcHJH+DgHBm*M0Uo *S?IMHC7y{UBmq%Z{#_7Yiu?q5lOfIlAF+xGRT*CneNxU~GHtch;L6ZwAA zDSW>VDWrU0HjD6|udt~{egF97x2LWIDa9e_(lukiw_Zxe$jnEB{`~cKl7q;*4Fb?+ z0j -?wLmO_X2-jEG(jG$C5Vd`Swh+v#{V67pvic{{8C9k790~o(@N=V#mkF z`&(_k0Ok)RrA=)y&N0J($LxDNgR?~c{3)V`Oi6e+GG}pgXh%&`7V tOa0&R z-~QJJFQ0(^-s9i 0Qu+6R|!vt8LshK zfl=c!sBvBLs4iS%He>Q*YH<_#|30pz%H=Z | zJXN`kXI>mNBU41=DBvNVM$wes-Pk7A?y7dtF+U <0sm8fC$nnFFt%xi($`M34km0{iP+{mIJa z!yzAHjMnZBlBN?;@`U<;hn{m401N94C4O=~U= M41<**_`dNURM316OjP4-ZE7E7Z@{`2&_PyBGwKC-PEDgdz!v}Je} ziC5Lzh;6|;;+j{9zOW|`3~Y^Sj!stc$@O%f$>s44kqe~BsW=Ex3GG2etFbArsc>>x z_rRib^YgQTB+a+^D_M_P)rvpQ4L>Pbi1~stfY<=L)Hk67tiZYt4`vykKT1@qgjX&h zv2;9wFP#LL@={ICmVZBVTWCn`ivzA+Hu~=J@o!_Ox;N^f)70S=RWO1trYpo>6|{xy zdekuGx(TQT#>LonFogC~x_bVqA+(8z9)H=;$Z8m;I+@2#DCt`miqOtVPkV|~a` z5iqa-_5uog1hq!1V6)7XVaWQ=;Ldiy0QTl(si{9cxvh)GKttjqB^$V{M}^4 zRHvBO^DP1oZfCwbt9DtcbM#{Vn72 N3Ju{R`n3iRc54{{5K+uA$&odd4En<|u-9V+E(gPzkX3jPOCEvZWJjDRzNmXv zC0&|E*}^6@NoO8`oq@<3^d-!$>8`+g=FNAFwNzSU1ovTuE;8u%qi-K!>G}j;dDA-{ zHY-wMIIf1PvVyS8^@F!2P>?(ceYqXmKsaO!QqBKl+ha+~F~Paxw}aW|H*Kj}rdHuB zlc|7zbuw=0KY=~M>au6jg3wOTmw0rt2YK6>OK6bgkI!1~^n0x{aK%5&cOdi`tXo4B zqMh2srUX{Db`W}-1_+TWAGa4lbZT^hjX&Jyqord7P4`TGyPK07+0n+Bq g2`A;NsN6%d}Uy# zCg+pi#+dJWv?4yfUMI`r-<@#6V5hnMePdStGuqarK4nGIDS!KWS|PRz7d={)GmDS{ zMc=ajd(R#8nFsI6iuscwvSVyly&pm-hO>3C(T&)SbJT1Qg7I=%E-yhP=N6PqbGh=> zDUTze)Iz$xawNqfh$rV&Vp)N<=xB%69h8?17Ce+O(9JB8b%HluV;vG`_kW4KIwS*f zvPHDp(y>VnGG{CLGxdzQS44%*ZUA-}-vpb}mS|ITXErI{o^NV@Hn7JsmRjGHn*660 zAW;4sb8wNzuB9%fcrt%W*9nS51q7;gS#o4(pmKS=m7vX*j>7(?=*f@y>G~x=-Ug~7 z3bbe6U2aYHr|3tJpiz->4(#mpG{Sn=w)1#Q&(1}QQ53+~QB;#OBOUKX%(XkBPJ+8o zX}Hm`an;zZloe^2m_#VbDwQ%SRaf?`IyS0M)?VZ&|1$hBmXVA9?8u!)hf|VO6*8aE z#Fu0dBdlOLCNPtlE* |!w97}ZwwGsPW^0%}zPS)*G$EDvF;d~^ zIepgwmR$vdP>Q)qU=PLsQ+#qxPe=Ksd|1CtmsHD7M#1}!#!A)*lHcKiqIbby`-$ID zy>H&QlC83zsyNUyD}W2zKNP-VzUwc~c^g~jF!Eb+h<-7!Pt#*TdZO<`Vf&D{*sdbF z>G`Q)H%stkxX>U}CbMrqbzNKbuc+5R#OaKkJ62{$r3;eb<~>u9l2OIg{vv2CCCT!x zKG}$u;<__zEajXb1;Ie!2=?5Kw|utR`ZLe#^7i5*8gqT;8g}wkT@cKAp0z;J0~tP$ z+19xlKgw${Nn`qadDlX;gPsrI1`Z1X=i9w7)Rf_SNn_}!lL|c$G06^Tl$%ARsWvoF zy44iR_-w`!&xZE)?W{-Pj%#78I$T;l(P5s3Rwi;+6}6aQbqwRzr4jjkA>68oc0uJP z*Ld6B^$jx=@{w#o%G!ikTz2o~ICrsEf+W>?vp* qCUhsuj;xkT76{hC;HjD{p(14J^u8=)thhV_Vb?0;W1qNUS+$)M2I z(-jzYDS*e0sR$sAhUB^PSV%(OGRlwfm`l^DMOR|<^}fvx3Bnenw9Dv0Wu`IRaz8J8 zvuUmH*$FOvEcg1ask5K_5Y##@r!#B!BHVz5NrBVlE$3F#E5X{4%!(!*4n%lUP0Zeg zRYzC$Ed~?%NO2VAB5D1PpBeCtE+wxMb-ZEWEf;N 18WMXrix<>rV?1OnqG=rwG=HK zb}(2Pw~8$k?Xydb1=5TC7obU674CCR+)%+WCcL{Gfd7R{Q@S8$pI04QPt00<08MhC zt}a|@T{gMWQ6xB299 QMGv`rXWeyv1PA0B?9cMIJKXF`bbXZ|V ziaxiNt{U~T0Nie*2RJd0?P|sJ?&OZvO zU0}Sfseh2{6@V>v^SPsq!{XXPW^u}@#HUu&-I;6hHH9T_IUQRlplP-+4cA>qi e^Nmb*nlf1Y*QK2c`lBl*xVeLexLp? DJ$?Gin A8wy(}3(OYluOWbgbM*OBgn18&yoFDkK_Z;!dC zh71fLt3)zrsud;*#$45~aD$!Ahd?~sSI#|l(dx1yl1f*o`TZnoUU{YJ37||)ZFc&R zC%g|MvFV&{NdT@SnHbV->H5bX=(3rm00Gf5Ep^uyZ Kl@U!5SQs~5(@b={p!IL_z-vy=+Vp66%z zTDm49CaQ{8Bp09LX|iY2%YCsK^nB2y%Q4_Sl;(q()jPz{*`?P37=9qHQ%Ca1345-k zYgkPnwK7*1Yeftl5EC0ie0>aDf~}^I$h)Pb_Z!vf*5bf%8f(#xAryHsD?3XZDg7u- z5I}Ihvk5xhxmBT#cbGT+#BFPOalV$|PW0xDikbR&@Jk8-9%tTZ4V#mvo~bs7{;f$? z*@JCxMG-iue#~Z0^LEi{dvYR{-M-#cM?1kHl2T4bb|0W>rU>0j?DfG?>sx`lgfVO7 zvetKlP|XfuTlCmOLc!+1BM6I^&f+D^nPHwpI7xedEzkQhJIF8v(7Nr#ox0e7<2zcN z8Z&D>bL=r$I5%5AaP@pShO%q7F;gmi=n~)0??~-F8pw0pURn_RLx}u0v6*iO8mdy_ zEbrKCy@*5?`}y>291rxX9m*T+_gok#BKk96?Qd{oA2(ahZL3Y!3j~C$U~myHG2br* zY9NUzyrw&U7PvG$v)0kOv&{o+`i!-XEBKxPki;OaV?;wQ4pH#DSvqv4X!s>M{75MW z?fM@FctN@r@ystK-tp?r7)>y-PP#DEQ(mMYwY63r$cqw*`Ez S27(7kI-tI!3Oh5zUrR Hj*sy&G=-^`h}WnXlGs>vI6F*;pU*@7wmnG#~`WnA^sv#Xs&eWAT67>8bof8PHxx z+`u@Q&%73KiGu}amo@d?>pdq(Z7l5>(Z9=(iF6m!NBI+*_~&^VgPQ&cJN$Y5$2 hXndFZ=1fK-=Z6OeLj?IEn zei*_iKT@M;zxw`XL^}!>DRye?g4FOpgSB(M9m;#9=OnlPPzD&IM)Tmb_UM_1`;+wl ztfD
>M0KisQ(O{tl^g&c1m2?P;wfPy>O3gVWj5gHJ`J zU}%`Z5%Tx*zXVyZEWx_8wz2~7gXmtq{1E+b_~lPj!@kr5QQl+c>PpAO6$c>fNum6u z>fh)`XY*Ej0H)LK6t;qb!s_a(q`Z6_%|G=0ciQ8V6JB4Wz_9SWz|zvvM+u3T=;&8c z|Auk?gmdcR*Ecqz($W;%+<3fi&T||#`hkYRA8~Q7|Bq4XTW20?3Mi>U-ia?o0~PBX zOaP4Wj{ulcNTww9lfSF?Cmhq+yxgw~a(8zp=XVKH$`V(~ktSf)YkKp4&ZR?gt6z`5 zJdz @5y z %6$AW7S=jI9%B=e#UK0+GBb?;ybB^s!qWA{x9mJ#rw=n;ez*NKs zQxBE9bZlCpsdtDg7y$Q8^EziC-kU#ogMS(rDk&}h@-1(`q9^WxDx4*lRSL8a+diC} z0fT-uyEU*(tle%U%Ywb;VjkkTOVjn-x>^Y3up0Y MPy9ns*0WkCN{!bFw6xR6hXSqhSLNEQr2ep(0iylDLycohg zBHu7F(g3T|-Y!yOHQT<_>^WOwO%_9^&^ 5 {EoSRrrX$zx4c=0H8n~kT^Y^^#D>96iY9LH^G9lfgy zZ(O)Ny)!>2a$AQ5H8N1{mvGq5&19Oq_7zBS*JojJoXhCwaYJsX_YDm-XWYQ%%D>f} zEGS2UfK@JY-{nH`d!YECIa`kBIHFh9jsQ@5BL^F8on1ZSxvDaFc=)q*S76}0GL4o? zOQ55Ym;=EHy1wxC|Mrb$sz_VmqcIJ{cGk@0dhuhH624kt;L!=Lu=Pq`N#rtomsR zQS&82xryBbja~%{abI+FkW_ Tqz zmO-7(7wMJii*!dKZ)}^In##({KNL>lJ$>q@SK2c*RU@*iaRKxZ)HSYbuS9%p7919s zedOs$5iIrgo5aUsSQLKIl_5LM`T4}-C*lDi+3U}z?k?FW=4 S@Rb`PqdWEquHlQsAgWia0I0dyuxRE~MNT$iCmtLh7q hMsWl zHj$I{aLYi}P7@yM=q9@(M&$v(A{@VOoiv0@`d! jc8Vx`C9yPMPQuGwHjGPxcp zTeLd*8F=?#J~%v-?oAnncbaD)EyMIvM_wEWbo3>+GlC`o22DX vs z777-Cqhg8FxXLf>mRL6KL z&!P}>o_@5j;*Rl-6hK^a xkpc@#R`q`fu{13Mq(U=nG~`IRi+XaIAgsGt7Y8>p zO%yG^gbLcFK$dG2O^zA$-g?pX?t@)v1(#7Xjc5OI_5AGY;-QbeJFFu{I92y|>G`L$ zrRh%BLPEK4Z~n+kq@BBWz|RSez$PSDrH}`eJ{1ed=W0&@IdjBKr9kRCcn#1W+<@F5 zx5eurKJY-vN5G*(<8&nV=Ut~#fLN`a5HLxhOX4)|T-_*~ZFUvjo3G+P3bM0@dZXjA zA5Z${T%W6=+{&dI1%{JL02CdqvPT7)^1I3LVxkj-x)dW%h_c+kV;n74pV73eXNg{y z=%p3RaH|r@T&GVvGB>9!vPXif=C09ad3l|-CsIkM!oc0=YujT5g1|ebX^s0MB}|R3 zHby{h4m)M4%BiBF!mg~gr@K3_Y_8hQ$!;0aA;IHv`;h *$SZPu1)RVOmkGq$f+8YeJ$-%tX}*hU8CNnMt^>O>^Sf@|TMSraGm-f+ ztc?2A5r4S2@5^ix*E+3Q@qHAgQhYX8>49K_VE;sd{yXPQ9X+q}0ycPGfBz oHe^q>61IuX}LBu}E6s<9X?m773LGN~7<`o?`kQEcJ9AWtmSm@P=f*a~wjkP{Um* z0UUaaNuxP1=MArOYx-Y1o31)XeHNvWJ)7@b{H4R#+BX#2v3mgDt}mk^P5j*cd0 z4XY-3gQ=mlwRCC2$?bVm3a@}lZZT*JYF*x1v3NM??b)fZXecINGUiWCyZ$a&UlBja4JV$s=QZ_umnzhp*50ugK6^sAy0R~x zw$ybr-DIBSfS=nFL3VC=ckTSZ&aNy^tJ)x1`P28{dapgAux`Zzh|3+c(MS)xUxZtL zIDjsc#t|E}s@!Vg=>s;~mF&F}B@>lZJ2h@Cx3 (k`6p(v v;G_)AfF-!b<^sLpweJly?HTZb*^mfSH*M9OPqnJV9ddO^w0z zP(NyhrIdN|^S#GVPBf?v$_`dX?#;SBP8o_QiFD$SKe(2ZaN^@XNARmy=qa;RRuCh* z-(X;3lAQKK%{WK}1Q}TGLlvYHhSP!5)tWf$-uSB)9$w|Kg9hXwT5ca{;*Hj}X78RP zr=;YoQh(zP#BLp&4EWyb_)#}x
ocyMSxw$)>r_7mNK`uo= z^0U4%=4Ud-n{I|x^&~+!W(8ZN+fA_&Vf=i7kv9F!%_;)XiLXn!BKtA>s1ti6cjN2j z&9wm-93-8ynkBWieKcVND6ZAL4XF+fXCBXekpea<3)tK*R_sF6uQFmO7Ru#bV(_3j zlAX16Nr1V+YwJ=lB9|Sk$cF__p1Wu<4GqbkZcW8PT=sI()0a~tYAN_#4i6yrnWJW9 zm6gD$uNhlTe1uF|9}Ns%#53!@>gk*;*d &5jOGb9x?z)_K4Gy8I@mKWL70aE zX}}KBS1c1dGbPomOOzI{K>WP+zJY!=GC)She`#MRC0yIk42F9;qrcPMFF1T$QBmo> z6D(0)S-IvfepW!H2G!WSBTuUJX`PA&SYJ;aFFn&<^H|5sCN19BM$hpGOz%T;Ucz3E zG>&%=R_EYVRD+BpZgc;JsV`lW(H`kWwS388EcWfYmLw;$T51SqPMNE8->unA%rk0K z>vrrRn7^NsyWwIgt@kt7Cs)pMk&`E&1^rQjJ@cVImS4yRq_NU~&7&tzu!v9TdlZtF6Y|nN1BEsZ0_SVQ!$`lT zq{Nlm%FzI#U^dNrXk^87WcxID|4G*~U`4A;D-3&(6i6b4d?;tNqo(IfO0S)85&> zd$w 7FJD zjp7{+3&r>vrlhs4tryKW3?^WBnN{pc-h;w;H^%gApe(J-corj9)&m#U6`Hn4e rBa_qm}n(-ISjPprYfX1C0yI{^$VTP``Z}{NXDa zD|m<;K;{kz4-a3li2m9kclD&T;&l5=rM}$E!Ba8p>;CcO&+q;W@XVh-Imju n)tzrM2;SeV6P6!g!w37tIX@NBv_` zr|y^}69>GAJ?B%m3e0(zeP(V=13AdZ*fw{?zszJUr=L;8uPzrHE>o6|q}`>qw{oKk z$RuV~8v@*!@n=yvl=#(7sSHwgfQ@5yZ%Ndg>Jtrkc&~ {C*bFn8c7LFENs>geo5(F>>aMt4Tn$(S zOSieO)n!z6HjQ`$@esQLnN92> 4ZGDQM=Y_-R7HiD7b}i%GE2dZs42Hu>y{oH7 zIhYv>k<%3}NVfb*3q6X7v^+}RpLanxl|TXR)k+?d*E>Tjz0~7e1sO(-rizIJUG?*m zjRXh2m*e2UwyCMO%BUzWHX|;e^&MsTLKxY(w3JG@*ce-{qsbD=knpYIt-bTBoljWo z!uqX#EyLr06f@(ni1TTTtGoPGh-bbL6kD&sY^zzU7Mk@HRo|DjdBNnM+HKs7 i)j`+0LXri!{R6)btpriyF-kMF-HcW*VG#naD2n4g1pjJ32 ;{d(gV$FQjVFz>NH3zDF9Vy>?F_U?`1B2$Oy8#s>233DX zMx-Eb!#w!~g=tA%x!ksdS)G} ?wFI#-dib%ldkrXunUoFWh61SaB5jup$B-m(P|SP z9?Vo;fFvSP{)ohhDkmfOqZa_Ia;&uTyg~@jrE?l43#g{!kMTpY?zUJqHYGr}uVe%b zrY^~?XI )+Gc2ad>)~ zt=H^P*Vve)RtRX+x`qaa?J?T1@$oCb)+*4hWd=%%YXzPd$Tv3xf`Nu#Aq?WBpWd%m z8G-Jo%WJpzMjb01uYzAH1u6jkQ$o0~%&O&~9}x*xzA&H~x`3zvV~C|X5%|-macSKT z{Jtw=-V{l$B6#T)5Zn4lRK~lZcWw;3zpcgA#u87WI8PEog_Vz}%hg#exvW}D4{c?8 zKkA#dPb5q?o!v`2q!+odPyaEGY_=|9r`7ACAHH$F@evWp?6a<{LE`n;9eu(|8`AD9 z8^ynLTFU&?)5LkAGrHP_-U~Q-odtHtrRI15c}4wFN1eOqHJw6`BfY?v#7WV|MOpz{ z&~kDik1u6foJAfiQT2Z`m8CVguI(&f8Of*|+ZiqN8Vby0zmy)mr?eXT0RZhL+>x|S zT24Cxr)nbh_OA9Wgx#Gx->gA^zO3 ?(2d}gO%?zmOXq-LA(n-9HV7C; zfX<=6xvIErbOu~mhhwLQ!12X-Wr_-tb}s-QMYDbr-QnaIK$bIE43q;REtiRD7j* xqX9b!=#QkPrJc;QW+#Ads$l+>u3mmmSgIlCA^uu(c9v16 zCPV>F>LaqP7sg$!6<%3+!pU+zzU}nw+qaP-O?E!leOaJrxZm5R@)cgpC!5~e5B~lf zzGWo$`}4!luYt!_X-H!*_(bO*^)>XydR`vTh`s$orfYHfPYP90Jv~!q|45(-dd>$( zpHl=9ST|;BLF#d<`f7`BnM#FM+i?B2Z{93JvU+$uZrA_tngiZ)|1zYB|B9Y8ekwV# zC}CRXHX(#6xH)9Dvh*`*PyQCPXtr#2$0wtHyS4$QUQudVaD0ssfrA5JsXE-Qn|CY= zvj#V#BN<%12?`*ctXMnu 15slmqnHdhxpAIBpJsuR?6gtE+Q#lcvH*?$CgpIZ>iIzJ6L* zphDjrM&8|28vky!*wx mR1m2!C&NpWFqwIn6w7afVJ1JqvL*py1@ zXgLa1nCdy&3tC*hhyg?vxVhh_#Z*5;JvBOVLvs$0QYo$4^9KyG>SR|tt-JdSO}DF+ z04_qRz7H&-G?FONWvA8Fcc0PG+h~c{)cKA!0$UhU(ET=lHx<6)Lcx7RP3c*soWPP* zb^4c?HV5>3J1FLe@6{?jIDKX=WeSKkwdM|3Np94VU5mrBcHiFU<$ZddBNBO@+(;~^ zNZ@P!;pM _*>_&lV+ E{q`bxbReI |BjFXeQ!+5d@qhh&X1PF-4Q8F zx{u;^EOmJLjb1f7{6C3BJkV-MTpBJBOZ)j=nGJ>2oQgnk*;7)kZ*-|3baZoue{*U; zCaP}tIiZL&200IijElGgIQviABXvB_@XjM&6Q7g=RNeIHKeq;?B=;$Kd7nOe06|(1 zFCQ#uBAc{pi1$$*KL)X|nDhUyIoGz&o>Jj9y0l%uI#?jYde`8Puc*nqs7gx9D-TG+ ztFr#4*Pe<1*~Eo%Hn!zU`;KBH%ojHZHz}B$%nUe**yY>iV8$m}bJ71btI-CWtYqn6 z#?Y+~mgXzs(Xed-;1qj%noZ;EOb7i|ZJSgrLH;KnNCWDmkWj*6x#D*lIgEycla+e+ z!6wNmGE^BlRPS@;UUEEdYHl0CQK2_i{`VSnMEIb9D_&WCn6B0#^ZL)iyv+ctc4R}? zbX@2RLW&!r*z7UVB6!6_hOaFLWv%sn%%UT!W);Yh|L@~y RSG{ZZls|HB*n z!MYz_ww2FL%;N{$Z-&m?#XQsu*$(*fC0&>Q)H*RnWjrM&mf2p!^^1x#9!AK2FZ_oR zZznL^a^Ok_8f+O5y>|CqS{0>7xkL_jesN4nd{uOXN{`{U?7XX0@n%Vw&lO*U)BnqD z7nUgR3msl4^hK*Rb?|I%7udgy;q%q)zJX)LHLsV-Q*4d+-x7ugV~*Mn>@lvm wvM0kE35bFHHpqVr&p2h&soa&h~iuSz2l&KQ~wyg z{iIl1d8P$>`wZprh1Bw|JD*j~^5;uKz0dzyf$yHOMtRIL*^4b?M+{A->gwuMnoJ{g zb9OI`*v+rqW|L}zG3*BEUof^GMhjms5w@%!_@k#Ap*ti^ZhT5_kIIa{-S}ORqXcwR z|H Jf1p^WVJ`EGA--W}lFfC2NadrFipoPnKVFD1+Oy|qXdhm{6sX`C zsk~6Q7X-X{bL9h1W|vxVi#ua%X~{Aqe&q98+sjMf$&)A9Iors?S7740+-%T~%@zA% zl<~1c9>>6nB<{7VwaB_6eO&e9tyXk2k(+a3>-o>c`e_e^h4B^_rMQz+hyEh5y%KAk zoQ$n7fv)cEYV)Ck)(OjJUvLpl6@LvO$PmLkJoF1CGK9-t?(<(FJ$dX}k6Z) -EFCP zh=J`}0~{c8Td0KEA6E^-`1hD8QqYgjaj7^#xbu(=SXmo#q@{|Z&Wpt7>d{cLeN#(X zTJt!pJnJs?p3k`zMzyeTS_}aY{eT}dP ^GpnuNH==ebCu8dv9CKr#Eah *o{W4+p)^X+do6x_v zV+MLJZ4AF3qt$>=#xZ@RmN?eS^YOmnMgp^U1S&T3{ba}sy8VMj2>hUdq#2X2 A8|fZ|mt zD$=W -LBa|SB(A#G~$ zUkBiUfkA%_+b#au=i~Eu_J9=5TbKN7n3L+kr7wT`g>ny#!aG-@2niN-6^~m0+HnsO zsa|U|2n04Xx-+_miq#Oz@)H-k1{ikst@GktZgQU&N &%a7RLQQl5iiT1U*DP}?_Avo>#bFhiGni% ziMU5kx85RH9f}BZ<){~mF1`)~l~*2_0 gW7&Hv&e(5^z %Yj2T)ew`ScS|oBt zMik6(6g^HVKg`>v75uf^z7`alSVsgpX8N@W0RDfi(;QcrAjo?ByxLxbaiv|r%!t@f zu)N~EiP)%!0t>D`x0+6a7KqvWGC6XcL9(nw48(WHi2xeC?f;D|!0&ZCWX(PHKJ5{* z?czu%H#c9%^81lu3r_GZUt71Tg1PN#&OkQ;ygTl5OX5Xe#`3YK(){NjaY^Utn#ilN zrPp7rpAI+0&9{bs=Ul0IyAWHALD`{LPtM?8unN0K@r^Dm<(tm;P{W!sBPZC;P}Kb% z{6lv34^t=f9Z738V1(2MmxTbgsRf?R$<`aJYN;>ftyi5BG;K0BhBGyb>zM7w+Nc1w zQr;?&skA2J_7&KBk(-z(K8ziFX?p-%<1jZ`IR8(@QM|nngxZ9jX3|UeMoaM4kJ5m5 zZ+N-Z6UtGUJXZ;lG-2agU4zYbRgFk%{YB}76>mgt^Z>IHX{}UIRqHN{P8Y3}UuQBu zHqnqpx#O*RqLaF=vsRfhXa^D-^XxZtnNJ |bYGETMOvHI?LR9fWENu(4rqstWk~-+HR37|8N7 zVM0D;5*=5W=9)-BJ-;erUxxsFbWbK$LTc~cRihvGD(}aO``$Y}hH*eYe_?a8q_42O z{QOKc=(k*>*qHU|5j&v+v?d6LZ8| Y KUo#++#GjIydNpyu#Vt@*Y z8SD9aR~akyt~7uhTI#^dV$WqJEHX zLqe+L#?HxkR4eX@@pL_9d0+ol9h-kv;Y{!WvHToOXbm{6e0y*Y5u7Ij_}Axg$^p`H z(5T5@touxMLW2NBaL{{Ua?H|L-q^*r@HA=6kam*jf}fo<4c}!L!1c#uF|ykr>9g5e zF!~0BYtMo`D6toFji$3N-;QCt>BxX6WdU$QUmA|NfzRKvYaZ_^Lyz>y=p~{72Js5~ zhzxKE3YN@sWBKK{R%d#cP*874AhUvt_a~DbP*lpZT<35NuQm+0&AcYHB5y@4Q-ov0 zkjZ&0?dX-FqD$*<;ax6Bji0x}8!ZA+-yf9o+pj8<1t0iHNi8&bas4Cftm4ubCWKei zXhdPE+bx&BU;w2!L*PcK&Ypl8?gXt~Bb>6b0Yc|%WLo3k9EP?2-fc(kR#%^tH!PN! z#sAiGy0Gi36qi#WyS?+_p$_Kt$S4}VTy=tm*QSq*<5U?^Ahz>q*Str>*Kz(FqKh+d zrnvOU&m}QWPF|tQ7F3ss5%|Mo{Sc16<6P~y)nN?PP7g<6zl>zL3T}Q+AzQ$Mb>g0_ zsrcVo+z?EYp|_(u@s@Adu39d;>EzP>KFcInV`+=hYMN{-sj%mSVhCE-%Mr*R5*D-D z2GQ M;eHGg5XpFQP&kPlCA~oZ#u?`5gjiwAH2Zro?9KFk&JeqB-9Nw3l zbqM@Vskhbrkw$2Gde0H;C>2)ZLWKX=`Xo @O$Zmvg-qXoPc7tM>q GW+?5Kru&vV0^&I z{y+{FT}N5}LZG0%VBD|3)DZ}>V`L;HP9`myD4NmHRjS!%xAP|~c6F^#hm7%(Gl^Tz zdM{%JNVf?d?rPB=G?45gtJZ&Q9^H4ItKp)q2bnG`a!3bQR~icPwGTG&DEBebOhy37 z5o-_tOaDc?2WT{|q#~JawPSUmx&7e5gQ+c~HPLc@7HkFU+V*XTk8)#bX;J{TG9})N zeftS}hVCz ESEhjY*zy@}Y~$c9!r2Z_ =by%uGFD z76Zw~u~1qI!i6xD3}PX1GU>829=4e-I!x;fs5L6_b&21m3%hEQI;&U49oKu8;12TT zo#9K2N4(Teb-$RmN*eNGRfl=Y#OoUIG0jgr5c3=2gWOfU!MtEZ1TASoa&m7@+~XgG zI?CX*=V@4j5-&sFQ2~Ky#w#M<@zSAi)@XDb(!?XWkbm&I7KK*gdH}F6Q$2nonBP!s zSKYJoQ>rCtUB|Q@G=5Zcz2h*UnBS>x7@x&rG+e=qO|WbY+ z74)ol#L32RAy~?=kYv(}8`N5~)VGtZYUHu{SVFe}PT;Q1uY$`^DJb882PT7IEpqg< zl)b`q{t8mDby=S)FWU85!};QP>=x3HGn1toG#&kt9AZ%XlP=%jmkqAjfjzAktL6-e z ~Lw?f$AV6lR@&$-y{Yz+#^Oa_mE_%2)zlWVN9O*=nO z)-71343pc>JdTWt8Zw<6>k9ou`puF~m!hEm1MapZ-Ogflc$1vmHQj=c85?%%@3Kuk zdt{^y4XO4sU$4`VdOJ)2Fz#TXIwf+2{gcB%nsP2Q|6Hx30<;?9we_7PB-~%>WmGek zGe?eJIgW*-i>+fR?vVxG8gj}a+bDq(h>}Jrgj2k;`h;+4C$?Hz3^LVtx!iSt74k(n z1u%I#kSuSb6*7&5janf*04u4~Xfy3GwxkcR>q7z-=61Q$I1HVwb9qtT$CB&vI@9R@ zl`0U`tKQ|A0U1tRS2UycSg>=d0J`uI!CSA|F7^UqStStyb8XStXqS65y#QLqOJJp# zt7DeJE4pfAfsvbI`7_OSeB_KG-AL<3mn?u<@3B0?wIds>In>|3YV&lde0#>?w72;T zTXIw`nVhlJp|t}Sxuob23L<>3^X4X%o|8$r8@^L1Hk&7e(fMbxF(N_ I|50v RiQI`(7w1#TW15 Fwb@mK!f@BowBzz^4-mmOVcV-a_+`e~}OkM{MGHLW((PhP|Xss|?@ zf-+PieH-Q{$bE0UeU}pTScsC(`eKGhZTd>w;D=5_xrd~a2qAlY3V{zLx2qR?yd?t~ zKfaaYDXS`l+ S*!r7&Tk{81fQkWFEK u;vANk| zu72jdRkao9mBD8q1veasL@r2sULjZz;$;c60LNiKptwC>U?cQoK5U_a+2<$~f$kBBS8)ZSVuI9fCPu-HF^ni$yK+iTG 60GkRRl8R?Kdmuj_3N-L16*Qg1`kb#(`PJX9Ub% O3?eXn> zVsj{~MwvGhSa(?sOzE{x>GuxFzagEzS^KOjYCoH1>O&kG=ChvPB7;8o8R^sqzSuWV zllhh8iFs+y1bXrWs2P=K6z=THXVTKr(k(H(n=p`wKbv%(o38R^bZxnmupNX}xuZER z>)mw_bH^u7ht|6tPY*3L)Vk9%OxOB^TrcG>n}el=^3-$vj@&L!psw0F+JY9W=knM1 z6s7tWg9y0u>KQdSH~~Q^^WH8^aHdX2fDIG^nER{jF!FL_IbBDg&Pf2K+8i9*is2xY zOO^|Xz>wOaxNo+!w)*9bjGa4fdHuaTH8SN6z)Y^LtbF_0qx!_4jH%Xf3Lwo&w15%# zDl03WJI{;t1!am;`Ia6u&}qJY?QF_(GA1p+C6HaoJ1uSTAM0xN#n#6Cgh;isZy!-I z{Xf%^|2ve(@N(gFKEPEJunSP?@h0ZH%7OYSU2tYo#CFoInt6i(k9>Ss{A3mYE4I@r zptHoP?aegHcrM~SG2-r0>0iElkvjTV^3;~>(87%O(W4JI9CT~46wR;s%mlT#Ddszg z;Lecn-r|fav=r~2kSqRrht4oGmRZsUPD}0m++uri>yWGF8?Zf|LY2+M{*oPWFf*h- zVyufsSambEZtCZf^EqAGLF`8P*+ga#Li%1ueHHW#X*{^5B(!DcsM8R=2uYXM?jml? zU}yWnbLzg2xtQDTyaqUhXL6d`&vgk>y$%heEj=Nkfr+w`!R2h@LWVVJvUm3y-6FU* zxqeZ!WT_UWM5>5=JHfSj6-;M5Wg&7Bub*4_y~dqQ2Bw}6t&p9gd4gr?Lv5Y&S6%94 z6o6NDigmk& ~(&K!r{+WHa7>>yB~_UoG}**uZI;^mtQr@g<8_^nGHs!Cg>KLrs0ohUUTq&`u<(1 zv5cgGTk!L2t;5RhZqS?IwO~Em#MR?Rk7kx+-R%rp))-OUh~6FR4X77cv(L`*LM58+ z7&Ui|bh4vw>PA!#wWz4?v$B%_gwI~I&Gw{ojmyF -GYUw|dS$SXA3#%?Us2-*usVyuEX+UXlb~?269T z*~eJPzRgx@k+~#M ykcu4~2zel6j0@XB(3P%PP0QrDEu^ zWm|?Qc9u~x{IIpH#4{cH FcV3~VVZJD0y5_Ws(vJqpSj z%RmriWn<+V0H8bn34ULnUSjY;#=v$4lE_nnM%m9`(iT`b#ez&f=)P9I7kgwj?BK7v zJv^Vxy5BdGdCgyM9r3gje`NYl;8o@LNfE**)zMm1PznmVE7#hPk^XXOu+&|&`CvCv zPn5<#nQk(3My-nHLqKuOx~?`8>~>4I3JW#V>ZrhJNWAu9`#gB^^7X)_H_M8Ov0&(y zRI(9EY#kh;%5m69B%$y04L0IL+GQDVZoWuCA5G3Uhd%w?F+KHWh#@8W;`sr2B_%}z z;Q$&FP`IN-1h>j=QhpR(iSa5Kqj=Vzfpx;PH&E@vanv9TYs$f-WH#OTkD-=dKZc%} z;;1hWn{WZ^^q?7tuka&*13}j~hMr*~q0IwJUlc;J?{lsy^IjK#4-M9o9spuJ&^O(G znevo*?fwuSnQqIF6nP_Eqd3GLX*3XA^og{?Q1aU?cVl3ob%ys*$-4G3`Ynn{kK zzuidPA5|nJqf=Z%NVmxBNe?C;_gcIEgXyAl$MrwRQ_qqE8pG1|SD@A!2%G((a<}D< z;Iq>JQc=;{jWR_Wy rv}Fc!6)sqKdUH*W>>5pu9!R>(|ZRXumiL=2_da?I$$Kb6y*P@^M7>?{W=40OjXt zVWS_iTi>BwMW>0vSen^6HYc{-!3Z%T!izXmEmy1uIp!#`#e@0d7iXWErSskDCwT|x z#caaGX|?T;{sy06M0oQJY>Zz@nVBRe&A=vRp)X%b=SujdFQxAy6s>+aUzH>p*4`_9 z>g8_eE9^Mg-%tIO{%DVGueF{LRA^uL!5nZ%BfbWaSze;sFKd5CBhp003D0r$^_r_o z1PmIZj|lc=c`%;Oayz>XlZ(vW9kQYCY53$38KLg#`A9nLm2b?$`S!bSIP#BlhMSy* zYy*C@5LLdi^YcD3Eb`NbY%E|s>}Dha{oMp6YsQ@_#hNcl#zx=MaqeZRBLyd*qF#S- zTklYI_y{zLEtVlIhwv`}r=kwA6k{bc9qhtKQ_W4_Q*xh4U)!HPGy(sX!m?9f(OxW- zKg&|d2_Dk3Ggz^FN%3Z+bTMzwqGSBxw#q^|C^eec99H3eq%SYe@Pri?HPaeE$ wXf zqRpBI0Z|JK=|IR?n~2|fg$-SWWE-}xBx!s6C)^#>w%C@nSrkx<1~LE!AGcnu7q@Vw z*pdO!Zoe#!To;h+zqyp33!C(y&!^(rv!tM5&fo4Z;5!x&U$K|ybGy)pPP77=Q5-*s z>_@JtZ<3~}KYiX lUEM+W;e{!KQaZ~uHc_8T=Y!4nlYjBn(W&*S&xg3-44-30EIQJQdMj!?s~c7@ z7=_nJhW`%0ojX%Y#2K{x^hJUwo Tle1OH;71q3Mn>N9v0> zHJ(h8f0fLxEs?5s?T^CQ8UAH$`kiC@lehYv;`%dtMaBQ!@|6hmC+Bl_6cqCBb!#cx z$dVQrk(lo1wA#*`NjZOhf64m{66&$HIZp1z1I!}~NPQZ)TR1({?~)g0t@tTH{AZwe z)7)9M4Pt1jPNBho_A`O|4ciDyJ&eVlM?aK#1}WGeNzsYI-U=c1U2-ls;`<}<>M)zE q`=Wd~Z_A&@^*hV{Ps;jtS2y&J5_-xQriVbl@#=+!Vwt?<-~R_JY(xzJ literal 0 HcmV?d00001 diff --git a/images/github_commit.png b/images/github_commit.png new file mode 100644 index 0000000000000000000000000000000000000000..d299c878ed36953eaa075fdc5a628be3945a8458 GIT binary patch literal 25815 zcmeFYcT|&G_Xda!t{|e)lzJ(mbVPbp5HR%Ki_$wtCzOb&h=_C$DM5M%snP|c_bwel z2qc8iLa1R*y!W?ezTf(0)|$U(G#GsIz9*;bv-h)~{hV-3btQ6AI#MDcB67&nC)z|r zmy(HyE*Skq46fW_K{bFkVoMdJCq(CjzZp$=ap1~T_oqglL_~aSgr5t3IkG ^y$Udw+>Fk?}hd7Vw&8p-qTnxVFw){A~Js0 ziuP%6APkG>k&3|RWx_8+avX$zUq)Xgy!~x`k?=Om?x{mhm6TXi)z6pIr{Hvfa8c@m zV%F(dAk{hsWi+`yW Q7TuxBpwm z{sJol{@f7!)7)#-KmTK)B)mQ9mSRY%{7my_01N@$JUl$Q&t5X~{%K9DCfdl*@IHj} z`t{s5e;!g|7QFh2@Y_q8tI3!DH1sIqwd%z`vyq`7$8q6LtHZ1;aWDT&js4eX$e&9@ z#yr+cpIW5^vi@BEt`(-bv6NGB`Oh%EKL}HO^=}*U9FHqk=g*hg-$!U@ng+g#jnh#- zSt0cA ~7}0 zDx~l_>|8_W^!=iN<7%O>1TM95;;VdsA}gV>v4_@7Wf^rrUF!4hedyl){=(Y14KK&p z1IC$}ps+RAc1-&D&=_5^*lCshTo}`*93$M^UC8d xo>R(%@T-`$N(N}6Knd-$-j%Jqy`k@-*m)Uz->LZ3@`J)%Vypk0B;=cAS1baH z>C0Nw v>FmKk)|Ye>>XE0 zh_5>N7C$!J6f;)ZsGrpdU!7j-G_k$UC-YeLtm0db4-Ys0ROL`hekBLIEdA=G3Ew3F zGk-MJxXuy#9QWXM LShRG z3%#)WDOJz`;~^i8I0z?a0rX_v{}_pK+ut%ND{?ZWg~Sfn?p+=;Kr|QR!Gjhm7nkq0 zICl02>?0hKHhw8F<9HS;yi;<`q|H= 7`69h{7k<)5rrZE;$d^_ evcAU*I@%S>QZD!3Q8pqG^0evK5G#>R#5<3bSaCw||KIrd%MB|}>? zBJ#|au6~N$U+yb|UR Ssr4(?h+km A{AFIp%%`4iIe!q`*9V4;t#ScdEjV+EHSj zY%7x~qIF*k!Ynzj?eRBnUi}11_eq{CG0k072__iM2eQzeC4s=>WQ0_o1$-}-CU7U5 z=KL^iIbdJY#wG`kkAg83&q`vHW5JbS {^q7vZJQf|0jnRJGC9mP5AnrV_^Z z#=38Y(}{SM 8tH;uT3h@nr9p`NqepAJ4yB7&?>ImQpSa;R=+&z_BRj~%CT~< zLWNf*Q*0`ysctfrlGx5?$)>?d2gL(owYA46rg5VxxyaFoyh4*HG3nE#v)#RtAR?{N zt 2O?Td3@+ z92m7}fyAB$26U1R5H4 c7nTVDMADJ#u7{yQP<*&7Soz79z8WRwMv|d znwrjYtr+$K-=Xv{Q_ES=FHyl~E_Lh #iiZl*jVDB ztejqP8V83BF3y6cs;U57sbI2dx_2lE`S{Y~OB4;5^%yoOxQj@NgqMBUfJseZe*VwO zz@?Y?-hsX`{)i+(R7y`)${M+!)R$9;L=yKgi7zkdye!d2vDnbkCgo>l%EgX9Y*uOt z`y0EyU}kP^o^A!vHip)39?YOCJw3e7)N1`Fsi~Qz7E5MpxNFQlbVf3k%m*BB-4#|N z_;Ry)Fa7i8t8_BX?>Iit_i2cNfxAn*?JpnJymO7XZr(K~$4)4qCH4%5g2cA8EV7_b z&9}0viZ`RNt&bn451E^jU}B`)dz@SZD*R-aw<>xQxe$iqE@ZM6Eo?KQLhRWKIGKfo zuvA3Ap6u|7hRoft_UTL;S{laGj)R?@g7Yqt(8s~S%~&~GfB!m!=i|pA!A2ETtt)GY zsX^nx#uXnuJv~%tl#IT&cXe#64>zYnt<3SE&YQPy*OOt=Bfo9B32S9+)V;s6qi>ot zI8( |+ zpck@~m;&TnYfaK5y~iVlq_aLU&h!C4rUbvBBy@7B x`Oe6( zjq&uR6Kla_ug=#m>M>i%$G_YCq1*Tq_KD`}cC$5%r}3A-VDe158&5|gsHbuc(tChu zIgI+#uD_Wsvu|y4!wv@Qd1Jjrk;w>0i^^XJ1Yv%-fcIA6Pv(LEzldG8(&%aI65^;nPkBUBT0C5uirJ^AzN>y5$c zLJ#U_s{t}YFH|Z8L2**co>xgp_X8Iyec{ Q^^Y^sz)COfAzn|xWzjt^S;i=N(Rf6RHo;?ff=v!L9SH*b0ed$iiV zKbLUYJ%Sz_B}s++MEgvotX?N0Tg_ttQy> BH?(!>DwWHuBJ!&eeiBJ{_MOr+ zXJ*Q||9pvUK48kit7A2Z$p_xBmHK7TpmcO0s0Vr$S&Kbr*h9|CAAK)Ap<<-={(%s* ze*^;?;l6CkBQg;9)lx*cCGQ!aEi=8(stue5QEvCy*mMZs#||F6`>wAAyGCE-HSOjh zk@gvfSNeS33IoAmqRj18TYFo4N|HfKIxP8%O`iebvGZeGC3I)i;I~JebY;f5FGlsv zWfGNGzI15FLdto_Lg0y6(Eg$Z6%|!>?5Ot8iRh4oRT~S%YXT5=54@u>9>O~NWPL1Z zZKL2G{>#@aB~B?GRhkH+g@py=q_Dc^ynxvv|6#>KfDmB@gIDzCWl>C6 W1L1#iwiaIivmY$h;{eth$^zlRShR+@_pPDGy+rN`J zb8iNXhi7JG>YAaWr>#fJzl35tiz>ZG-q8BhoXuLCYedN&mlI!K=P#Nl+)QPdcGkzD zQZfj6!ujb5B)IJl&goxr{VmZQzwg|kSoslpqinBDtt(r<&j2{i5ME5D-x6EJ7c71>9Vv-EY18dV_9C0Uju( zkz_8V_w_4U*Hk;Ru+Y&PGpY9w^DXU9ww7x9spn7P$3SWOPp;T?<$uz|KiB^=gZwwG z{BIfOqwfFP`(IMF2eMv|O-#;;9rX}TQ#U5;H6ryl0`?-@?DsWeZnBhcTj$!Wf!L=V zbMuQJ-L=@c{Xe;3sxEQeoa-trRS$2{jN cJ?|WWFR7no5XbmKJysUwZt{O}5{?8s<+bKO3LcDDH(9ynPHl ^O&%>HLaBkL6dPZ)RpY^9}i)UDwkwd%I*+ zfvd*V5w1lbmM|UoDP}#UDN=ae%7Pq!p#M1J0=A|oKYuiNMG-pq>*a@jo)V)LBQptK z&8SkdkB6s(* _PTgs(L{@z z+mMf$gtw-%>Nv}ZNikObnWORBOjfq|n1rl!>3XJHw dbly9FDz@xX3rB zlww@kD12(Bv-kUXyx+MPxSj8Ra5mxzyZ&Y^osjAhRrN+2>6w*aV5XVPO)J%+cl8ny z^mY#pMqj>O*xlJlWT&R0aac)oshH)aW}wO+9$tdlP|;93p+1^%adIY%*y~!S{Dno1 zsBy$;wVX8@zj@PPY*GPnnSGLPA;%Ab!c2vC9_jmtyS3xFYTu53_{Q~EOKkcZ^KkeF z`1?2G0J4azRHPRn#E*l kEtWP=6_{AmjD0T~bnNItH)quPL6vBw}gmyr;itv6wNP z0G%;i*IMpj*+)&w4Gw#gj9j%zeU@MCpDoG^Y;hB&p+uvo{@&grF_oe2(e2ht-km>V zcK5Io^=c;U5MaYalP;Pm+wN+q0><+VKKdTYpY33^vn6^ck^5rzHSHpqOK!FkbMnht zoM>yaL)ycx#dlb0oxff{CJn0q=)*nb99 twLh9!WoxO+FpLsyb|sxB08Wv@anPSmKq_SoH(V)6D`)=XBjy%VW;bbNRp ze7}N14ms1kmhz{ot3Hu*GKL@{2e0{MiH+LDsrz3HqHGu0jLluA2BiZgIHZafWM+N0 zMn0MaP)y_dUt~#PRUmzuUb@-roE(KEfF&r29TmKCcp?l{O_|^-8pwSAJ~U+1S&&nZ z)zl%`2su-i#m>q0&?If9i%a_9NwnZ+&tMo8<(NKk=wtl|h2UTr((Bja2W%7AuaI0R z$j+`QAtQ~TL;o4;>we14F2vH^RPz&l%96rDZ5x{e9-7Mjwa^JbA!(_n&1oAN7H2n| z=$gAGUDJ*n%h?`|CXUj1UKTxzo)ld?4_vSBRX#cv3gmQ{ch{Hn+|UPWkKLGPTJTAe z_#xsql+~k4|0LqQimtJ7>8JdfYVYc4Dw A2E~GlEOkxbfB*(wXOzJgN!z1 z`I-=;WRUICT}xI=vyexcb2tmpNng;3{lJms=;+8^VD!gFy^QuB|3Dm?s*Ygk1C*(a zz-_6dUghc}W2S4`)o^mb@nDhh#q&q`F#r|_mYCOS1wp+H8rJUv_v^AyFHcRKKn{-^ zxgXI{98THEpk;=9TluPu)n%bZUb?;u5CfC5r3C>@aXNs-Y`~5!FCr(J%Cn#B%rDcC z2Y^cq6Y57t$CD;ZOmwVvYLTQ7?-MLE^YgpA+XuUudZd%X$ZLq(pVv4wmJxQ$4Z)~z zcv%!FX+-romwMFP=|w=ROp+!0G?=wM4mpuE=zS*8ZClyvSlzSX-fN`8wucY6)`up! zWc}hrIFEj%rBx;cA2(;rgr&=NYG6>%Z+9^;QPEMp=yu1{LAr@=j@FgN6edaazxu(p zpBDF@DR+o?OU|TO#uWKN!YMu`xnx1Qfm2Fo|5>+J!#-+v0?;Bmri!!CXi1;G*)A0p zm|sRz>oZMN-FU%D&xDkuJoBA-4P}_ YW+@gvKFCaiC__|m z@hk4*`I!~kJ^^n$_DHKduuvPsTA^E6I{Dj~Px()C?5x3Tk1grg04Eq*B`U7qu#v1Z zv8aZn2BUsCxe=e-bM5N&(ddw~Dkq%z-MmQ|oAJd(4SC`N9Y4df0FGG&C5H}VH5Y%G z=A)Nz;!PMXd)j&OJ3gq&A9WqAqOJ$n3<=*46Y0NoA=-xa<(9JwDBuFR?S=BKPJEEF z4S9)W##sqYlTO<&n;jQR(|k5(vKmk2$nX5rIHQCT+^_L|Uzy Bc51%K3wC5_8Hw z8!f|I@Eg5 wJzn+RFOtr<60H$@T&tvHkhX4!Sh4Cl|u5{>d<3 z=GK{(&J@YVjg8-v+4|I5n8Fw-#7i)wjGTV~2yd=l)4egruj_LV%5`DFM`8*O;{LBy zivK`uM0uLs&cD4=2{*o^-1M`lT4555RLnAUt(`k*AzUT8C;O~^-W7n=ZfDo&q>l_Z zgHNyDUgna#XL0ivONFxF?Q7t*&qcU3^~Xyiv^&?mGR@Y K99X3HCc zL=iCVch2w50OoaD#N2!iZcx^?eqtB_7b85pG~PaD^WO>-f56s%R$BgZ4F41~zH@f` ze+F0nTYQ?9B7iK1o{B7U7*`Rnmx(q70EnbZK6+<%JyOBIDmur%?rS-1S%CQkzS77% zIHcM5+f$UN>k%CFp*YnvApww>G?hl}#1zp{Q9}+o_ZXVk7%B2r3<;~nvX`HoYjdAV zQ0|VAxQ7_SxlUS4l^q- *D#qncVE*`GQNyY|UZEdcsk^F9vo5+c*6jhF_ zRP{U>{B{H}7L_&M!&z8dOu#dX3)0j}n5k#}2k(_ZyfM3?&;c?8fc5pu4qYpZK%_05 z#L4o3`*vnhVhekFx%>kH93IKJ9Ub}s4`EPLUT)~5B2wT20OJQtE{2A8a{UJj>0jG! zRhw(6PFCJ7%60Rlye7Vd8Q%;&R9t3W7ik2FCaZFwRUi|C^8v!H)|vgbafOW6&l-P= zVmBA`I2|^y$Z`HJ23a=3c}!~97gnpx1GmK|SHKf`qYKu0dis59HhPHbUy(m$^ka4P z%}doxeDcfl4fRtL(j==4x(?7F?(Cy8JCL)I<|aOyy0~wH?;Ytk?of#E&q5egz)C!_ zQZGpE|KIRzyV$eN)VSI;bmn!K)AH*P?V(QrN`fcNiT~VaS7o51X9bf--7NtED;Vc)NT6*rivP z{x^E1 zt_d}55@-OB-XCJKW(vLy zGFl7K5i*Gy7gnhgk!pO@HR4dkd)M`9`O<8J=vGlHS?{(5sHrDlV#+61%WzK)~hV zb~_v$%3QvckdRnp2bkWJfr{zk_oz87@wy|AI#ZIqh{(ig=U5Q!PkctW?%&t;rcAmb z+OXN4>g0) gEwG384FUw#YP!7VPVmTWYwJk+fV zPoIw}EY3xa=rW7y;bT6=SV^akZN$&=g7vu*Nes{?62MuiB~0F{OiR6=+~d-vgcjxG zUroq v0PAAA*Q#?sfT!kYMDC<$HrOnX09--i9N(R6x;zz-=3r}fb`N#~Mee8-78E#? z^90nH=@%*J7p*Ss1O);7Mu1P=Fu(khZEF6qnTn#qLhEY7>jCL%3FsB{{O>xEyi)Rl za)WMAok+pJWW3C5asq<_f1^-Yd}$K)*m^bOG@H7N%z~0$A`X8bW-9#|xsux}JNm$* zxQmRmm^??8|45CcHN kyI=+~^j`M^bPPD}v#LYUAwfX7x5eJ-@QsL@MaN#l;tEb8+;mXq`M^+$rd)L4 z=JOML63PJUr_^p~Dk#`Aq32w252gn6RtgRBpa`Cx?Ji2$-U j}m1lUaH?X4?N*G23@Kzt{l`wXwD>@*Q#oNZ|L<)H{|~696(}CLH6&e#KV~@*k}p zgt8PAU}3tZrmPVY#Xo_;O1pO4y{lwK!fe5;XCSEy(4LXLzBylL>)*_ap%2x48kz