Différences
Ci-dessous, les différences entre deux révisions de la page.
— |
fr:installation_debian_8_jessy_raspberry_pi_2 [2020/07/05 17:12] (Version actuelle) |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | ====== Installation de l' | ||
+ | {{ : | ||
+ | ==== Télécharger Raspbian ==== | ||
+ | Rendez-vous sur la page download de [[https:// | ||
+ | Actuellement, | ||
+ | {{ : | ||
+ | ==== Installer le fichier ==== | ||
+ | Le fichier téléchargé est un fichier compressé (zip), que vous allez tout d' | ||
+ | {{ : | ||
+ | Une fois votre carte gravée, insérer votre SD (microSD) dans le port du Raspberry Pi. Raccorder un cable Ethernet sur votre routeur réseau, et mettez sous tension le Raspberry Pi, en branchant une alimentation à prise micro-USB (Bloc d' | ||
+ | {{ : | ||
+ | |||
+ | ====== Premier Login et paramétrage du Raspberry Pi====== | ||
+ | < | ||
+ | |||
+ | Si vous n'avez pas d' | ||
+ | Insérer la carte SD dans un PC sous linux, éditer le fichier etc/ | ||
+ | Ajouter les lignes suivantes: | ||
+ | <code bash> | ||
+ | if [ -e / | ||
+ | / | ||
+ | /bin/rm / | ||
+ | / | ||
+ | else | ||
+ | / | ||
+ | fi | ||
+ | </ | ||
+ | juste avant la ligne exit 0 | ||
+ | et sauvegarder. | ||
+ | Il faut ensuite créer un fichier / | ||
+ | |||
+ | Vous pouvez maintenant insérer la carte dans le Raspberry PI, il est prêt pour une connexion distante en SSH.</ | ||
+ | ===== Connexion ===== | ||
+ | Déterminer l' | ||
+ | - soit en consultant la liste des adresses ip connecter à votre routeur (ou box internet) | ||
+ | - soit en utilisant un logiciel de scanning de votre réseau Ethernet (exemple [[http:// | ||
+ | |||
+ | Connectez vous avec un logiciel terminal, pas exemple Putty [[http:// | ||
+ | <code bash> | ||
+ | login : pi | ||
+ | password : raspberry | ||
+ | </ | ||
+ | |||
+ | ===== Mise à jour et paramétrage ===== | ||
+ | |||
+ | Passer en administrateur root | ||
+ | <code bash> | ||
+ | sudo su | ||
+ | </ | ||
+ | Faites une mise à jour de votre système d' | ||
+ | <code bash> | ||
+ | apt-get update --fix-missing && apt-get upgrade --fix-missing | ||
+ | </ | ||
+ | |||
+ | Puis lancer la commande, pour paramétrer le Raspberry Pi | ||
+ | <code bash> | ||
+ | raspi-config | ||
+ | </ | ||
+ | |||
+ | <code bash> | ||
+ | Expand Filesystem | ||
+ | </ | ||
+ | <code bash> | ||
+ | 7 Advanced Options | ||
+ | A0 Update | ||
+ | </ | ||
+ | <code bash> | ||
+ | Interfacing Options | ||
+ | P4 SPI | ||
+ | choisir Yes | ||
+ | </ | ||
+ | <code bash> | ||
+ | P5 I2C | ||
+ | choisir Yes | ||
+ | </ | ||
+ | <code bash> | ||
+ | P6 Serial | ||
+ | choisir Yes | ||
+ | </ | ||
+ | <code bash> | ||
+ | P7 1-Wire | ||
+ | choisir Yes | ||
+ | </ | ||
+ | |||
+ | ==== Mise à l' | ||
+ | Pour que les balises de votre relais soit annoncé en heures locales, pensez à définir votre fuseau horaire, par l' | ||
+ | |||
+ | Après le réglage sur le fuseau de Paris, une confirmation comme celle-ci s' | ||
+ | < | ||
+ | Current default time zone: ' | ||
+ | Local time is now: Mon Jan 18 00:00:43 CET 2016. | ||
+ | Universal Time is now: Sun Jan 17 23:00:43 UTC 2016. | ||
+ | </ | ||
+ | |||
+ | Effectuer un reboot: | ||
+ | < | ||
+ | reboot | ||
+ | </ | ||
+ | ====== Téléchargement et Installation de SvxLink ====== | ||
+ | ==== Téléchargement ==== | ||
+ | Rendez-vous sur la page [[https:// | ||
+ | |||
+ | Télécharger le fichier en date du 28/01/2017 nous sommes à la version 15.11 remplacer VV.v.tar.gz par 15.11.tar.gz | ||
+ | <code bash> | ||
+ | sudo wget https:// | ||
+ | </ | ||
+ | Puis lancer la décompression du fichier téléchargé | ||
+ | <code bash> | ||
+ | tar xvzf VV.vv.tar.gz | ||
+ | </ | ||
+ | Le répertoire svxlink-VV.vv est crée et contient dans '' | ||
+ | Nous supprimons le fichier compressé qui ne nous sert plus à présent | ||
+ | <code bash> | ||
+ | sudo rm VV.vv.tar.gz | ||
+ | </ | ||
+ | |||
+ | Les instructions d' | ||
+ | <code bash> | ||
+ | cd svxlink-VV.vv | ||
+ | cat INSTALL.adoc | ||
+ | </ | ||
+ | ==== Installation ==== | ||
+ | |||
+ | Installons à présent le logiciel de conpilation (et autres librairies) | ||
+ | <code bash> | ||
+ | sudo apt-get install cmake libsigc++-2.0-dev libasound2-dev libpopt-dev libgcrypt11-dev tk-dev libgsm1-dev libspeex-dev libopus-dev groff libgcrypt11-dev librtlsdr-dev libqt4-dev | ||
+ | </ | ||
+ | <WRAP center round important 60%> | ||
+ | la ligne sudo sudo apt-get doit être envoyée en une seule ligne | ||
+ | </ | ||
+ | **A la question (Y/n) taper entré** | ||
+ | Et créer un utilisateur svxlink, et l' | ||
+ | <code bash> | ||
+ | sudo adduser svxlink | ||
+ | sudo usermod -a -G daemon svxlink | ||
+ | </ | ||
+ | < | ||
+ | Adding user `svxlink' | ||
+ | Adding new group `svxlink' | ||
+ | Adding new user `svxlink' | ||
+ | Creating home directory `/ | ||
+ | Copying files from `/ | ||
+ | Enter new UNIX password: | ||
+ | Retype new UNIX password: | ||
+ | passwd: password updated successfully | ||
+ | Changing the user information for svxlink | ||
+ | Enter the new value, or press ENTER for the default | ||
+ | Full Name []: | ||
+ | Room Number []: | ||
+ | Work Phone []: | ||
+ | Home Phone []: | ||
+ | Other []: | ||
+ | Is the information correct? [Y/n] Y | ||
+ | </ | ||
+ | |||
+ | Nous allons à présent compiler le source pour le Raspberry Pi. | ||
+ | Avec les paramètres de la ligne cmake, nous choisissons d' | ||
+ | La compilation dure un certain temps... | ||
+ | |||
+ | |||
+ | <code bash> | ||
+ | cd src | ||
+ | sudo mkdir build | ||
+ | cd build | ||
+ | sudo cmake -DCMAKE_INSTALL_PREFIX=/ | ||
+ | sudo make | ||
+ | sudo make doc | ||
+ | sudo ldconfig | ||
+ | sudo make install | ||
+ | </ | ||
+ | <WRAP center round important 60%> | ||
+ | la ligne sudo cmake doit être envoyée en une seule ligne | ||
+ | </ | ||
+ | ==== Installation des voix ==== | ||
+ | |||
+ | Pour donner voix au relais, nous allons installer les fichiers sons (format WAV 16k). Vous pouvez choisir une des voix française disponible sur le dépot GitHub de F8ASB. Faites clic droit sur '' | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | <code bash> | ||
+ | cd / | ||
+ | sudo wget https:// | ||
+ | sudo unzip master.zip | ||
+ | sudo rm master.zip | ||
+ | ls | ||
+ | </ | ||
+ | Le répertoire '' | ||
+ | |||
+ | Renomer le repertoire | ||
+ | <code bash> | ||
+ | sudo mv fr_FR_Agnes-master fr_FR | ||
+ | </ | ||
+ | |||
+ | ==== Installation de la carte son USB ==== | ||
+ | |||
+ | Connectez la carte son USB sur votre Raspberry Pi. La LED verte s' | ||
+ | {{ : | ||
+ | Vérifier que le périphérique USB est reconnu. | ||
+ | <code bash> | ||
+ | $ lsusb | ||
+ | |||
+ | Bus 001 Device 004: ID 0d8c:013c C-Media Electronics, | ||
+ | Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/ | ||
+ | Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. | ||
+ | Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub | ||
+ | </ | ||
+ | La carte USB est ici le '' | ||
+ | |||
+ | Vérifiez que vous avez l' | ||
+ | <code bash>$ arecord -l | ||
+ | **** List of CAPTURE Hardware Devices **** | ||
+ | card 1: Device [USB PnP Sound Device], device 0: USB Audio [USB Audio] | ||
+ | Subdevices: 1/1 | ||
+ | Subdevice #0: subdevice #0 | ||
+ | |||
+ | </ | ||
+ | Pour la voie audio d' | ||
+ | |||
+ | A présent vérifions la voie de sortie audio (haut-parleur). Il apparaît également le périphérique de lecture qui équipe le Raspberry Pi (bcm2835) | ||
+ | <code bash> | ||
+ | $ aplay -l | ||
+ | |||
+ | **** List of PLAYBACK Hardware Devices **** | ||
+ | card 0: ALSA [bcm2835 ALSA], device 0: bcm2835 ALSA [bcm2835 ALSA] | ||
+ | Subdevices: 8/8 | ||
+ | Subdevice #0: subdevice #0 | ||
+ | Subdevice #1: subdevice #1 | ||
+ | Subdevice #2: subdevice #2 | ||
+ | Subdevice #3: subdevice #3 | ||
+ | Subdevice #4: subdevice #4 | ||
+ | Subdevice #5: subdevice #5 | ||
+ | Subdevice #6: subdevice #6 | ||
+ | Subdevice #7: subdevice #7 | ||
+ | card 0: ALSA [bcm2835 ALSA], device 1: bcm2835 ALSA [bcm2835 IEC958/ | ||
+ | Subdevices: 1/1 | ||
+ | Subdevice #0: subdevice #0 | ||
+ | card 1: Device [USB PnP Sound Device], device 0: USB Audio [USB Audio] | ||
+ | Subdevices: 1/1 | ||
+ | Subdevice #0: subdevice #0 | ||
+ | |||
+ | </ | ||
+ | |||
+ | Sur une configuration Raspberry Pi 3 et Jessie, il est nécessaire d' | ||
+ | dwc_otg.fiq_split_enable=0 | ||
+ | sur la ligne du fichier | ||
+ | |||
+ | Ajouter la ligne | ||
+ | snd-usb-audio | ||
+ | dans le fichier / | ||
+ | Ensuite modifier / | ||
+ | | ||
+ | Ajouter également en fin de fichier | ||
+ | options snd-usb-audio nrpacks=1 | ||
+ | |||
+ | |||
+ | Pour la configuration svxlink, nous repérons à nouveau le numéro de carte et de device. Dans ce cas, nous avons pour la carte USB '' | ||
+ | |||
+ | |||
+ | ==== Configuration de SvxLink ==== | ||
+ | |||
+ | A présent, nous allons passer à la configuration basique. Toute la configuration (hors modules) se trouve dans le fichier ''/ | ||
+ | - Indiquez l' | ||
+ | - Spécifier la carte audio USB CARD_CHANNELS= '' | ||
+ | - Mettre en route la fonction relais duplex (paramêtré par défaut), remplacer LOGICS=**SimpexLogic** | ||
+ | - Dans la partie RepeaterLogic, | ||
+ | - Changer CARD_SAMPLE_RATE=**16000** | ||
+ | - changer la langue DEFAULT_LANG=**fr_FR** il y en a **2** ( un dans SimplexLogic et un dans RepeaterLogic) | ||
+ | Dans la partie Rx1 | ||
+ | - Changer SQL_DET=VOX en **SQL_DET=GPIO** | ||
+ | - Changer également GPIO_SQL_PIN=gpio30 en **GPIO_SQL_PIN=gpio19** | ||
+ | - Ajouter # devant la ligne CTCSS_FQ=136.5 et VOX_FILTER_DEPTH=20 et VOX_THRESH=1000 | ||
+ | Dans la partie Tx1 | ||
+ | - Ajouter # devant PTT_PORT=/ | ||
+ | - Changer PTT_TYPE=NONE en** PTT_TYPE=GPIO** | ||
+ | - Changer PTT_PIN=DTRRTS ent **PTT_PIN=gpio16** | ||
+ | |||
+ | |||
+ | <code bash> | ||
+ | sudo nano / | ||
+ | </ | ||
+ | |||
+ | Pour faire une recherche de chaine de caractère avec l' | ||
+ | === Placer l' | ||
+ | Rechercher (CTRL-W) '' | ||
+ | |||
+ | < | ||
+ | [RepeaterLogic] | ||
+ | TYPE=Repeater | ||
+ | RX=Rx1 | ||
+ | TX=Tx1 | ||
+ | MODULES=ModuleHelp, | ||
+ | CALLSIGN=MYCALL | ||
+ | SHORT_IDENT_INTERVAL=10 | ||
+ | .... | ||
+ | |||
+ | </ | ||
+ | |||
+ | Configurer à présent le périphérique Audio à utiliser par Svxlink. Plus haut nous avons identifié que l' | ||
+ | < | ||
+ | [Rx1] | ||
+ | TYPE=Local | ||
+ | AUDIO_DEV=alsa: | ||
+ | AUDIO_CHANNEL=0 | ||
+ | </ | ||
+ | |||
+ | Pour la partie émission, la voie de sortie audio (haut-parleur) est également '' | ||
+ | donc dans le fichier de configuration : | ||
+ | < | ||
+ | [Tx1] | ||
+ | TYPE=Local | ||
+ | AUDIO_DEV=alsa: | ||
+ | AUDIO_CHANNEL=0 | ||
+ | </ | ||
+ | |||
+ | Pour améliorer la qualité de l' | ||
+ | {{ : | ||
+ | === Exemple de fichier de configuration expliqué === | ||
+ | |||
+ | Ci-dessous, vous trouver le fichier de configuration standard (version 15.11) | ||
+ | < | ||
+ | |||
+ | ############################################################################### | ||
+ | # # | ||
+ | # Configuration file for the SvxLink server | ||
+ | # # | ||
+ | ############################################################################### | ||
+ | |||
+ | [GLOBAL] | ||
+ | # | ||
+ | # | ||
+ | LOGICS=RepeaterLogic | ||
+ | CFG_DIR=svxlink.d | ||
+ | TIMESTAMP_FORMAT=" | ||
+ | CARD_SAMPLE_RATE=48000 | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | |||
+ | [SimplexLogic] | ||
+ | TYPE=Simplex | ||
+ | RX=Rx1 | ||
+ | TX=Tx1 | ||
+ | MODULES=ModuleHelp, | ||
+ | CALLSIGN=F1ZZZ | ||
+ | SHORT_IDENT_INTERVAL=60 | ||
+ | LONG_IDENT_INTERVAL=60 | ||
+ | # | ||
+ | # | ||
+ | EVENT_HANDLER=/ | ||
+ | # | ||
+ | DEFAULT_LANG=fr_FR | ||
+ | RGR_SOUND_DELAY=0 | ||
+ | REPORT_CTCSS=136.5 | ||
+ | # | ||
+ | MACROS=Macros | ||
+ | FX_GAIN_NORMAL=0 | ||
+ | FX_GAIN_LOW=-12 | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | |||
+ | [RepeaterLogic] | ||
+ | TYPE=Repeater | ||
+ | RX=Rx1 | ||
+ | TX=Tx1 | ||
+ | MODULES=ModuleHelp, | ||
+ | #, | ||
+ | CALLSIGN=F1ZZZ | ||
+ | SHORT_IDENT_INTERVAL=15 | ||
+ | LONG_IDENT_INTERVAL=60 | ||
+ | # | ||
+ | # | ||
+ | EVENT_HANDLER=/ | ||
+ | # | ||
+ | DEFAULT_LANG=fr_FR | ||
+ | RGR_SOUND_DELAY=0 | ||
+ | REPORT_CTCSS=136.5 | ||
+ | # | ||
+ | MACROS=Macros | ||
+ | # | ||
+ | FX_GAIN_NORMAL=0 | ||
+ | FX_GAIN_LOW=-12 | ||
+ | # | ||
+ | # | ||
+ | IDLE_TIMEOUT=30 | ||
+ | OPEN_ON_1750=500 | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | IDLE_SOUND_INTERVAL=3000 | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | |||
+ | [LinkToR4] | ||
+ | CONNECT_LOGICS=RepeaterLogic: | ||
+ | # | ||
+ | TIMEOUT=300 | ||
+ | # | ||
+ | |||
+ | [Macros] | ||
+ | 1=EchoLink: | ||
+ | 9=Parrot: | ||
+ | 03400=EchoLink: | ||
+ | |||
+ | [QsoRecorder] | ||
+ | REC_DIR=/ | ||
+ | # | ||
+ | MAX_TIME=3600 | ||
+ | SOFT_TIME=300 | ||
+ | MAX_DIRSIZE=1024 | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | |||
+ | [Voter] | ||
+ | TYPE=Voter | ||
+ | RECEIVERS=Rx1, | ||
+ | VOTING_DELAY=200 | ||
+ | BUFFER_LENGTH=0 | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | |||
+ | [MultiTx] | ||
+ | TYPE=Multi | ||
+ | TRANSMITTERS=Tx1, | ||
+ | |||
+ | [NetRx] | ||
+ | TYPE=Net | ||
+ | HOST=remote.rx.host | ||
+ | TCP_PORT=5210 | ||
+ | # | ||
+ | AUTH_KEY=" | ||
+ | CODEC=S16 | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | |||
+ | [NetTx] | ||
+ | TYPE=Net | ||
+ | HOST=remote.tx.host | ||
+ | TCP_PORT=5210 | ||
+ | # | ||
+ | AUTH_KEY=" | ||
+ | CODEC=S16 | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | |||
+ | [Rx1] | ||
+ | TYPE=Local | ||
+ | AUDIO_DEV=alsa: | ||
+ | AUDIO_CHANNEL=0 | ||
+ | SQL_DET=VOX | ||
+ | SQL_START_DELAY=0 | ||
+ | SQL_DELAY=0 | ||
+ | SQL_HANGTIME=2000 | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | VOX_FILTER_DEPTH=20 | ||
+ | VOX_THRESH=1000 | ||
+ | # | ||
+ | CTCSS_FQ=136.5 | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | SERIAL_PORT=/ | ||
+ | SERIAL_PIN=CTS | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | SIGLEV_SLOPE=1 | ||
+ | SIGLEV_OFFSET=0 | ||
+ | # | ||
+ | # | ||
+ | SIGLEV_OPEN_THRESH=30 | ||
+ | SIGLEV_CLOSE_THRESH=10 | ||
+ | DEEMPHASIS=0 | ||
+ | # | ||
+ | #PREAMP=6 | ||
+ | PEAK_METER=1 | ||
+ | DTMF_DEC_TYPE=INTERNAL | ||
+ | DTMF_MUTING=1 | ||
+ | DTMF_HANGTIME=40 | ||
+ | DTMF_SERIAL=/ | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | #WBRX=WbRx1 | ||
+ | |||
+ | [WbRx1] | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | #PORT=1234 | ||
+ | # | ||
+ | #FQ_CORR=0 | ||
+ | #GAIN=0 | ||
+ | # | ||
+ | # | ||
+ | |||
+ | [Tx1] | ||
+ | TYPE=Local | ||
+ | AUDIO_DEV=alsa: | ||
+ | AUDIO_CHANNEL=0 | ||
+ | PTT_TYPE=NONE | ||
+ | PTT_PORT=/ | ||
+ | PTT_PIN=DTRRTS | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | TIMEOUT=300 | ||
+ | TX_DELAY=500 | ||
+ | # | ||
+ | # | ||
+ | PREEMPHASIS=0 | ||
+ | DTMF_TONE_LENGTH=100 | ||
+ | DTMF_TONE_SPACING=50 | ||
+ | DTMF_DIGIT_PWR=-15 | ||
+ | # | ||
+ | |||
+ | [LocationInfo] | ||
+ | APRS_SERVER_LIST=euro.aprs2.net: | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | #TX_POWER=8 | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | PATH=WIDE1-1 | ||
+ | BEACON_INTERVAL=10 | ||
+ | #TONE=136 | ||
+ | COMMENT=SvxLink by SM0SVX (svxlink.sourceforge.net) | ||
+ | |||
+ | </ | ||
+ | ==== Configurations pour la carte SvxLink Card ==== | ||
+ | |||
+ | Ensuite, les étapes à suivre sont les suivantes | ||
+ | - [[fr: | ||
+ | |||
+ | ==== Lancer Svxlink pour test ==== | ||
+ | Taper tout simplement la commande suivante: | ||
+ | <code bash> | ||
+ | svxlink | ||
+ | </ | ||
+ | Vous devriez voir ceci: | ||
+ | <code bash> | ||
+ | SvxLink v1.5.0 Copyright (C) 2003-2015 Tobias Blomberg / SM0SVX | ||
+ | |||
+ | SvxLink comes with ABSOLUTELY NO WARRANTY. This is free software, and you are | ||
+ | welcome to redistribute it in accordance with the terms and conditions in the | ||
+ | GNU GPL (General Public License) version 2 or later. | ||
+ | |||
+ | Using configuration file: / | ||
+ | --- Using sample rate 16000Hz | ||
+ | |||
+ | Starting logic: RepeaterLogic | ||
+ | Loading RX: Rx1 | ||
+ | Loading TX: Tx1 | ||
+ | Loading module " | ||
+ | Found / | ||
+ | Module Help v1.0.0 starting... | ||
+ | Loading module " | ||
+ | Found / | ||
+ | Module Parrot v1.1.1 starting... | ||
+ | RepeaterLogic: | ||
+ | |||
+ | </ | ||
+ | ==== Démarrage automatique ==== | ||
+ | |||
+ | Editer le fichier de démarrage ''/ | ||
+ | <code bash> | ||
+ | sudo nano / | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | |||
+ | sudo svxlink --logfile=/ | ||
+ | |||
+ | exit 0 | ||
+ | |||
+ | </ |