mondediefr / docker-rutorrent Goto Github PK
View Code? Open in Web Editor NEW:outbox_tray: :whale: Docker image of rutorrent with filebot based on alpine (multiarch)
Home Page: https://hub.docker.com/r/mondedie/rutorrent
License: MIT License
:outbox_tray: :whale: Docker image of rutorrent with filebot based on alpine (multiarch)
Home Page: https://hub.docker.com/r/mondedie/rutorrent
License: MIT License
4.2.5 Change Description
Resolved search feature regression with v4.2.3, where a JavaScript error is triggered when searching for torrents.
Resolved view panel bug with v4.2 where the label size feature does not respect the settings in the format menu.
Hello, Mondediefr.
I have been using your rutorrent docker project, but since the update to the 2023.12.08 version, my rutorrent can't start normally. The specific phenomenon is that after the transfer, an error is reported, rutorrent cannot start, and the plug-ins in the log column do not start normally. But I can only return to the 2023.12.01 version, and restore the content of the local config folder corresponding to the docker at the same time, so that it can be used normally. Please tell me, I don't know what has changed in your 12.08 version, so I can't use it after upgrading from version 12.01? In this case, what should I do?
Via l'utilisation des volumes, serait-il possible de supprimer des plugins présent de base, tel que l'afficheur de la charge qui à un calcul trés mauvais de la charge.. ?
I have reconfigure my docker-rutorrent recently and i have found issue with symlink on /mnt/docker/rutorrent/config
out-of-the-box and get two error like Bad response from server: (500 [error,getplugins])
and Bad response from server: (500 [error,getuisettings])
In one recent update this point to
/rutorrent/app/conf/conf
instead of
/rutorrent/app/conf
a temp workaround is to edit
util.php require_once( $rootPath.'/conf/conf/config.php' );
and getplugins.php $plg = "../conf/conf/plugins.ini";
$access = "../conf/conf/access.ini";
Hello,
Le container que je crée n'écoute sur rien. Y aurait-il eu un changement dans un des derniers update qui aurait cassé ça ?
On dirait que nginx n'est pas lancé
Si je rentre dans mon container et que je lance nginx moi-même, c'est bon, j'accede bien à l'interface web de rutorrent.
$ ls /bin/s6-svscan
ls: /bin/s6-svscan: No such file or directory
I'm unable to start phpfpm7 inside the docker. Unfortunately it doesn't really say why :(
# docker run --name rutorrent --rm -it -e UID=0 -e GID=0 -v /share/Torrent/config:/config -v /share/Torrent/data:/data mondedie/rutorrent:latest /bin/sh
Unable to find image 'mondedie/rutorrent:latest' locally
latest: Pulling from mondedie/rutorrent
c9b1b535fdd9: Already exists
eb4f6dbadfc5: Pull complete
4d85206ec698: Pull complete
27e7a3860fb7: Pull complete
0724d55fb22c: Pull complete
4f83d6832e74: Pull complete
1f592742d787: Pull complete
Digest: sha256:e9ad3b4b7b42212415252e9db8059418f99cd83c72996c1ca29f350022302797
Status: Downloaded newer image for mondedie/rutorrent:latest
[2020/03/28-15:29:48] Create user torrent ...
[2020/03/28-15:29:48] Create user torrent done
[2020/03/28-15:29:48] Generate configuration ...
[2020/03/28-15:29:48] Generate configuration done
[2020/03/28-15:29:48] HTTP authentication configuration ...
[2020/03/28-15:29:48] HTTP authentication configuration done
[2020/03/28-15:29:48] Update old configurations ...
[2020/03/28-15:29:48] Update old configurations done
[2020/03/28-15:29:48] Apply system permissions ...
[2020/03/28-15:29:49] Apply system permissions done
[2020/03/28-15:29:49] Apply data permissions ...
[2020/03/28-15:29:49] Apply data permissions done
[2020/03/28-15:29:49] Start all services ...
/ # /usr/sbin/php-fpm7
[28-Mar-2020 15:30:55] ALERT: [pool www] user has not been defined
[28-Mar-2020 15:30:55] ERROR: failed to post process the configuration
[28-Mar-2020 15:30:55] ERROR: FPM initialization failed
/ # echo $?
78
I'm trying to execute this on a QNAP station:
# cat /etc/os-release
NAME="QTS"
VERSION="4.4.1 (20200214)"
ID=qts
PRETTY_NAME="QTS 4.4.1 (20200214)"
VERSION_ID="4.4.1"
It has an intel processor
Intel(R) Celeron(R) CPU J3455 @ 1.50GHz
Any ideas (beside googeling) i could do to find out the problem?
hi,
the /configdir is symlinked to /rutorrent/app/share(symlink)
but rutorrent writes the config data to:
/rutorrent/app/php/share.
After an update, all the config files (rss/traffic/usw) are gone. Because the dir /rutorrent/app/php/share is new created.
Can you change the symlink or the rutorrent config dir to /rutorrent/app/share
I lose my rss configuration in rutorrent when watchtower does an update.
They are stored here: /rutorrent/app/php/share/users/xxx/settings/rss
Is it possible to fix this? Thanks
Hello Everyone,
I don't know if i'm the only one with this issue but since yesterday update of the container (thanks watchtower), i have the following error
[12.01.2022 10:26:56] WebUI started.
[12.01.2022 10:26:59] Le serveur Web ne peut pas accéder au dossier des torrents en Lecture/Écriture/Exécution. Vous ne pouvez pas ajouter de torrents via ruTorrent. (/rutorrent/app/php/share/torrents)
[12.01.2022 10:26:59] rTorrent ne peut pas accéder au dossier des torrents en Lecture/Écriture. Vous ne pouvez pas ajouter de torrents via ruTorrent. (/rutorrent/app/php/share/torrents)
[12.01.2022 10:27:00] Échec de la récupération du contenu du dossier. - /
Can someone tell me how to fix it or if it is depends of the dev ?
if [ "${CHECK_PERM_DATA}" = true ]; then
f_log INF "Apply data permissions... "
find /data ! -user "${UID}" -exec chown -h "${UID}:${GID}" {} \;
chown root:root /data # fix chroot sftp
f_log SUC "done" # success of Apply data permissions
fi
Because the /data
volume is mounted to the host machine’s filesystem, the directory will be owned by the root user now. Why is the /data
directory owned by the root user? Shouldn't this directory be owned by the supplied UID
and GID
instead?
Thanks for maintain this image by the way.
Hello can you modify this ?
sed -e "s|d\.directory|d\.base_path|g" -i /config/rtorrent/.rtorrent.rc
I need "d.directory.set" in my .rtorrentrc, it's replaced by d.base_path.set, who doesn't exist.
Thanks :)
Hi there,
On my docker host I have a directory called "rtorrent-data" which has a "downloads" and "complete" directory beneath it. In my docker-compose.yml file, I have that volume mapped like so:
volumes:
- /rtorrent-data:/data
- /rtorrent-config:/config
In ruTorrent, when I go to change the "path to finished downloads" to "/data/complete", I cannot change it from "/data/downloads/".
I can confirm that the "/data/complete" folder does exist inside the container and has the same permissions as "/data/downloads"
Bonjour, depuis la mise à jour (automatique sous docker) j'ai une erreur, et Rutorrent ne fonctionne plus :
JS error: [https://xxx.xxx.xxx.xxx/js/rtorrent.js : 1116] Uncaught TypeError: xml.getElementsByTagName is not a function
Une idée du probleme ?
Merci !
Bonjour,
lors d'une mise à jour (par exemple via watchtower), le fichier .rtorrent.rc est écrasé, et donc supprime les réglages qu'on a pu faire (notamment la variable directory.default.set, ce qui peut être gênant...).
Il faudrait que ce fichier ne soit pas touché lors du démarrage du container, ou bien que l'on puisse mettre en variables les chemins choisis
Hello,
Cela fait 6 jours d'affilé que watchtower me dit qu'il y a une nouvelle image mondedie/rutorrent:latest (et donc maj image, relance du docker etc).
Est-ce que je suis le seul ? Car je n'ai pas l'impression qu'il y ait des modifs chaque jour quand je regarde le code.
Merci
Salut, je crois qu'il y a un autre problème ( pas pu le confirmer vu que la seule image dispo est "latest", j'aurais voulu revenir en arrière pour tester).
Il semblerait que depuis le filemanager, un clique droit puis déplacer soit à chaque fois en "failed" que ce soit un fichier ou un dossier.
Depuis un autre programme la même action est ok..
Hello,
J'ai cette erreur dans l'interface rutorrent quand je lance ma commande docker depuis qu'il y a quelques soucis avec les nouvelles releases :
JS error: [https://xxx/js/webui.js : 611] Uncaught TypeError: Cannot set properties of undefined (setting 'webui.lang')
Par contre, tous mes torrents sont bien en seed, c'est uniquement rutorrent qui ne s'affiche pas.
Merci
Hello,
Si je fais un restart de rutorrent, voici les logs que j'obtiens :
[2020/03/30-21:11:31] Create torrent user... [2020/03/30-21:11:31] Unable to create torrent user, you cannot use UID 1000
[2020/03/30-21:11:33] Create torrent user... [2020/03/30-21:11:33] Unable to create torrent user, you cannot use UID 1000
[2020/03/30-21:11:35] Create torrent user... [2020/03/30-21:11:35] Unable to create torrent user, you cannot use UID 1000
Ce qui est normal au vu du script :
docker-rutorrent/rootfs/usr/local/bin/startup
Lines 36 to 43 in 26ea679
Après le premier lancement, l'user est créé, il faudrait fixer ça ;)
Ce répertoire est présent, mais n'agit en rien lors du build..
Un COPY est réalisé à la fin du build, mais n'agit pas sur le bon répertoire..
Le dossier n'aurait pas du se nommer "rutorrent-filemanager" mais "filemanager" et là oui il aurait un impact.
Par contre modifier un fichier avec un COPY n'est pas une bonne pratique.. surtout quand on part de master depuis le repo filemanager.
L'idéal aurait été de modifier les champs avec des sed ou équivalents..
Mais on peut clairement avouer qu'en 5 ans, il a pas bougé.. donc autant le garder tel quel
Dans le Dockerfile, le repo cloné est celui-ci : https://github.com/nelu/rutorrent-thirdparty-plugins
Le repo est périmé et engendre des erreurs dans rutorrent depuis 2 semaines.
Il faudrait migrer vers ces repos :
https://github.com/nelu/rutorrent-filemanager
https://github.com/nelu/rutorrent-filemanager-share
https://github.com/nelu/rutorrent-filemanager-media
Hello,
Soucis 7zip au start de la page web
filemanager: Le plug-in ne fonctionnera pas. Le serveur web ne peut pas accéder au(x) programme(s) externe(s). (7z).
De plus ca ne garde pas en mémoire mon changement de thème, à chaque restart il repasse sur le default thème.
Le path data du montage docker à changé ?
java.lang.Error:
There is an incompatible JNA native library installed on this system
Expected: 6.1.0
Found: 5.2.2
(at /filebot/lib/Linux-x86_64/libjnidispatch.so).
Flm\Archive::getCompressBin(): Argument #1 ($type) must be of type string, null given, called in /rutorrent/app/plugins/filemanager/src/Archive.php on line 32
Hello,
Je crois qu'il y a un souci avec la version de cette nuit (et je vois un built en ko).
De mon côté suite à la maj auto (watchtower) le docker ne se lance plus depuis ce matin et l'image que je récupère est pour linux/arm/v7 alors que je devrais avoir comme avant, celle pour amd64.
J'ai voulu mettre l'ancienne version mais j'ai l'impression que pour ce projet, les releases anciennes ne sont pas dispo.
@Hydrog3n Salut, ton build a fail et a été push dans dockerhub, ce qui a causé le plantage de rutorrent lors de la récupération de l'image..
Pourrait tu revenir en arrière sur cette modif et rebuilder
Il faudrait aussi mettre des tags sur cette image pour éviter au maximum ce genre de problème et pourquoi pas faire des tests pour s'assurer que l'image est fonctionnelle avant de builder :)
Pulling the latest tag from Docker Hub and creating a new container results in the following error continuously logged in ruTorrent:
[28.03.2020 23:48:36] JS error: [http://localhost:4490/js/jquery.js line 2 > eval : 7082] TypeError: this.actLbls is undefined
Is ruTorrent outdated in this image?
Bonjour,
Ya t il moyen d'envoyer les fichers téléchergé via cette méthode (ajout dans le dossier watch) vers un dossier specifique autre que celui par defaut /data/downloads
.
Sinon, prière de me suggèrer une alternative ?
En gros, je suis limité en termes d'espace, et je veux que les fichiers téléchargés via le "watch" soient enovoyé vers un autre disque/dossier que j'ai déja monté!
Merci <3
Problème en redimensionnant les colonnes "Nom" "Statut"
JS error: [https://xxx/js/webui.js : 892] TypeError: this.settings is undefined
Ligne correspondante dans webui.js :
theWebUI.settings['webui.selected_tab.last'] = theWebUI.activeView;
Hello,
When I create an RSS list and load a torrent from it, I then get an error as soon as I right-click on the RSS list :
JS error: [https://www.monsite.com/js/webui.js?v=417 : 1600] TypeError: this.torrents[hash] is undefined
.
Do you have any idea what could be causing this problem?
Thank you
Trying to get this docker image to work, but getting error 500 when reaching RuTorrent interface.
Attaching both my docker run command and logs
docker run --name rutorrent -dt \
--privileged \
-e UID=1000 \
-e GID=1001 \
-e DHT_RTORRENT=on \
-e PORT_RTORRENT=6881 \
-e FILEBOT_LICENSE=/config/filebot/FileBot_License_xxxxxxxxxx.psm \
-e FILEBOT_RENAME_METHOD=move \
-e FILEBOT_LANG=en \
-p 8080:8080 \
-p 6881:6881 \
-p 6881:6881/udp \
-v /mnt/docker/rutorrent/config:/config \
-v /mnt/docker/rutorrent/data:/data \
mondedie/rutorrent:filebot
logs
[2020/02/02-16:02:28] Create user torrent ...
[2020/02/02-16:02:28] Create user torrent done
[2020/02/02-16:02:28] Generate configuration ...
rm: can't remove '/rutorrent/app/conf/users': Directory not empty
rm: can't remove '/rutorrent/app/share/settings': Directory not empty
rm: can't remove '/rutorrent/app/share/torrents': Directory not empty
rm: can't remove '/rutorrent/app/share/users': Directory not empty
[2020/02/02-16:02:28] Generate configuration done
[2020/02/02-16:02:28] HTTP authentication configuration ...
[2020/02/02-16:02:28] HTTP authentication configuration done
[2020/02/02-16:02:28] Configuration of filebot ...
[2020/02/02-16:02:28] Configuration of filebot done
[2020/02/02-16:02:28] Update old configurations ...
[2020/02/02-16:02:28] Update old configurations done
[2020/02/02-16:02:28] Apply system permissions ...
find: ‘/rutorrent/app/conf/.htaccess’: No such file or directory
chown: /rutorrent/app/conf/.htaccess: No such file or directory
find: ‘/rutorrent/app/conf/access-swap.sh’: No such file or directory
chown: /rutorrent/app/conf/access-swap.sh: No such file or directory
find: ‘/rutorrent/app/conf/access.ini’: No such file or directory
chown: /rutorrent/app/conf/access.ini: No such file or directory
find: ‘/rutorrent/app/conf/access_no’: No such file or directory
chown: /rutorrent/app/conf/access_no: No such file or directory
find: ‘/rutorrent/app/conf/access_yes’: No such file or directory
chown: /rutorrent/app/conf/access_yes: No such file or directory
find: ‘/rutorrent/app/conf/config.php’: No such file or directory
chown: /rutorrent/app/conf/config.php: No such file or directory
find: ‘/rutorrent/app/conf/plugins.ini’: No such file or directory
chown: /rutorrent/app/conf/plugins.ini: No such file or directory
find: ‘/rutorrent/app/conf/users/.gitignore’: No such file or directory
chown: /rutorrent/app/conf/users/.gitignore: No such file or directory
find: ‘/rutorrent/app/share/.htaccess’: No such file or directory
chown: /rutorrent/app/share/.htaccess: No such file or directory
find: ‘/rutorrent/app/share/settings/.gitignore’: No such file or directory
chown: /rutorrent/app/share/settings/.gitignore: No such file or directory
find: ‘/rutorrent/app/share/torrents/.gitignore’: No such file or directory
chown: /rutorrent/app/share/torrents/.gitignore: No such file or directory
find: ‘/rutorrent/app/share/users/.gitignore’: No such file or directory
chown: /rutorrent/app/share/users/.gitignore: No such file or directory
[2020/02/02-16:02:28] Apply system permissions done
[2020/02/02-16:02:28] Apply data permissions ...
[2020/02/02-16:02:28] Apply data permissions done
[2020/02/02-16:02:28] Start all services ...
[02-Feb-2020 16:02:28] NOTICE: fpm is running, pid 106
[02-Feb-2020 16:02:28] NOTICE: ready to handle connections
Sur une nouvelle installation, avec la version latest de ton image, il m'est impossible de supprimer un fichier depuis le filemanager en faisant clique droit supprimer. L'action est dite réalisée, alors que le fichier reste présent.
PS : Je peux supprimer un fichier depuis l'interface clique droit supprimer avec données, mais pas depuis le filemanager...
Il n'a pas un problème d'incompatibilité par hasard ?
Cette version semble être l'actuelle à utiliser : https://github.com/nelu/rutorrent-filemanager
[club quickbox] is really beautiful, but I don't know how to install it~~
https://github.com/c4pt000/ruTorrent-Themed-install
Lors de la sélection du thème et de la recréation du conteneur, le thème est perdu
Un changement a eut lieu cote rutorrent, à voir ce qu'il faut corriger
Bonjour,
Tout d'abord merci pour votre travail !
Je souhaite mettre en place des seedbox sur mon serveur kimsufi pour ma famille.
J'installe mes containers docker derrière Traefik.
Voilà à quoi ressemble mon docker-compose
version: "3.1"
networks:
proxy-network:
external: true
services:
lulu-rutorrent:
image: mondedie/rutorrent:latest
container_name: lulu-rutorrent
environment:
- HTTP_AUTH=true
volumes:
- ./lulu-config:/config
- ./lulu-data:/data
networks:
- proxy-network
labels:
- "traefik.enable=true"
- "traefik.http.services.lulu-rutorrent.loadbalancer.server.port=8080"
- "traefik.http.routers.lulu-rutorrent.rule=Host(lulu.rutorrent.xxx.ovh
)"
- "traefik.http.routers.lulu-rutorrent.entrypoints=websecure"
- "traefik.http.routers.lulu-rutorrent.tls=true"
- "traefik.http.routers.lulu-rutorrent.tls.certresolver=leresolver"
restart: unless-stopped
francois-rutorrent:
image: mondedie/rutorrent:latest
container_name: francois-rutorrent
environment:
- HTTP_AUTH=true
volumes:
- ./francois-config:/config
- ./francois-data:/data
networks:
- proxy-network
labels:
- "traefik.enable=true"
- "traefik.http.services.francois-rutorrent.loadbalancer.server.port=8080"
- "traefik.http.routers.francois-rutorrent.rule=Host(francois.rutorrent.xxx.ovh
)"
- "traefik.http.routers.francois-rutorrent.entrypoints=websecure"
- "traefik.http.routers.francois-rutorrent.tls=true"
- "traefik.http.routers.francois-rutorrent.tls.certresolver=leresolver"
restart: unless-stopped
J'arrive à me connecter à chaque seedbox en https après avoir créé les comptes sur le container (docker exec -it rutorrent gen-http-passwd) et à y ajouter des torrents.
Voici mes questions :
1: Est-ce que ma configuration avec Traefik est bonne ? (Est-ce la bonne façon de faire)
2: Suis-je obligé de mettre cette ligne "traefik.http.services.lulu-rutorrent.loadbalancer.server.port=8080" pour que traefik prennent en compte rutorrent ?
3: Est-ce la bonne façon de faire pour faire du multi-users ? (de créer 1 container par user)
4: Comment me connecter en ftp à mes containers pour avoir accès aux fichiers
5: Est-ce possible d'ajouter Cakebox ou quelque chose du genre ? Si oui, comment ? Plugins ?
6: Est-ce possible de définir des quotas de stockage par container ?
Merci énormément, je vous avoue que c'est un peu compliqué pour moi...
Bonne fin de week-end à tous !
Got your container up and running for a few weeks now.
Watchtower updated to the latest image a few days ago.
No ports are being published, and I investigated further.
Logs have the following error:
standard_init_linux.go:178: exec user process caused "exec format error"
Migrate from xataz image, and i have this result.
The port is open btw, tested with netcat.
How the status port is calculating ?
Hello @Rathorian,
Possibilité de rajouter le plugin ratiocolor au moment du build ?
https://github.com/Micdu70/rutorrent-ratiocolor.git
Thanks
Whenever a new image is pushed on dockerhub rutorrent:filebot, and watchtower (or manually) the container is being (re)created, my .rtorrent.rc is being overwritten.
Also, .rtorrent.rc.old is not what my .rtorrent.rc file used to be somehow.
I have created a copy of my .rtorrent.rc file elsewhere and copy it over everytime I detect a new image is being pushed.
My edited .rtorrent.rc file consists of the same file as the default being created, with just a few more options. It is working and functional.
Finally, on the default configuration (.rtorrent.rc), on the filebot tag, rutorrent displays an error message about the throttle plugin when accessing the page
Bonjour avez vous prévu de mettre en place un docker compose ?
Pourquoi l'image chnage t-elle les droits ?
J'ai mis cette option : CHECK_PERM_DATA=false et malgré tout, elle modifie les droits..
Avant le démarrage le dossier data est en whisper:www-data
et après le démarrage du conteneur avec cette image, le conteneur passe en whisper:whisper..
Ayant besoin d'utiliser le dossier data avec nextcloud aussi, j'ai besoin de pouvoir garder whisper:www-data..
After building the image from given .dockerfile, ruTorrent WebUI is broken.
Log section displays: Bad response from server: (0 [error,getplugins])
Can it be that the plugins are directly downloaded from ruTorrent github master branch?
Issue: Novik/ruTorrent#2267
As I understand they are too new for 3.10, it requires to use:
https://github.com/Novik/ruTorrent/releases/tag/v3.10
Originally quoted from the rutorrent author's statement when the v4.2.2hotfix version was released. Very much looking forward to your version update.
“It's highly recommended to upgrade for the latest stability improvements. Support for ruTorrent v4.1 will be dropped in the near future. ruTorrent v4.2 has been tested for a few weeks by a large userbase. All known regressions are resolved. It's now more stable and high performing than it's predecessor. ruTorrent v4.1 is inferior at this point time.”
Depuis le dernier pull, plus de traffic en historique.
Pourtant les données sont bien présentes dans config/rutorrent/share/settings/trafic
Hi, just noticed this project and i see it runs all app processes (webserver, php-fpm, bot, etc) in a single container.
Ideally it would be nice to run only one process per container (a general guideline) - see this https://www.tutorialworks.com/containers-single-or-multiple-processes/
This can be achieved by using a different command to start each container process (see this docker compose project: https://github.com/nelu/rutorrent-dock/blob/5a66d022a1789515390162c222ad0a0631b7bb30/docker-compose.yml#L50 )
Also using nginx+fpm seems overkill for the task at hand
Bonjour,
Depuis la dernière version, j'ai une erreur récurrente sur l'image docker (version avec FileBot).
Dans le journal de ruTorrent, j'ai cette erreur là :
JS error: [https://rutorrent.domaine.fr/js/jquery.js line 2 > eval : 3717] TypeError: table is null
Je dois très régulièrement redémarrer le container pour ne plus avoir l'erreur.
Aucune erreur particulière pour cette erreur dans les logs du container.
J'ai parfois même plus du tout accès au GUI mais pour le coup, j'ai pas pensé à regarder les logs.
Si ça revient, je posterais les logs.
Merci
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.