Crimsonland
AciD Aug 25, 2015 @ 4:18am
libSDL2-2.0.so.0: cannot open shared object file: No such file or directory
Today Crimsonland refuses to launch (on Linux - Kubuntu).

I tried to launch it from the terminal and got this error :
~/.steam/steam/steamapps/common/Crimsonland|» lh total 83M -rwx------ 1 acid acid 4,1M août 18 23:12 crimsonland -rwx------ 1 acid acid 37M août 18 23:37 data-1080p.pak -rwx------ 1 acid acid 14M août 18 23:38 data-music-OGG_44100.pak -rwx------ 1 acid acid 28M août 18 23:38 data.pak -rwx------ 1 acid acid 1,5M août 18 23:38 data-sfx-OGG_44100.pak -rwx------ 1 acid acid 78K août 18 23:37 libsteam_api.so -rwx------ 1 acid acid 278K août 18 23:38 manifest-data.xml -rwx------ 1 acid acid 5,3K août 18 23:37 prog.xml -rwx------ 1 acid acid 6 août 18 23:38 steam_appid.txt ~/.steam/steam/steamapps/common/Crimsonland|» ./crimsonland ./crimsonland: error while loading shared libraries: libSDL2-2.0.so.0: cannot open shared object file: No such file or directory ~/.steam/steam/steamapps/common/Crimsonland|» mlocate libSDL2-2.0.so /home/acid/.steam/steam/steamapps/common/Braid/lib/libSDL2-2.0.so.0 /home/acid/.steam/steam/steamapps/common/BrutalLegend/lib/libSDL2-2.0.so.0 /home/acid/.steam/steam/steamapps/common/Capsized/lib/libSDL2-2.0.so.0 /home/acid/.steam/steam/steamapps/common/Capsized/lib64/libSDL2-2.0.so.0 /home/acid/.steam/steam/steamapps/common/Don't Starve Together/bin/lib32/libSDL2-2.0.so.0 /home/acid/.steam/steam/steamapps/common/Don't Starve Together/bin/lib32/libSDL2-2.0.so.0.0.0 /home/acid/.steam/steam/steamapps/common/Dungeon Defenders/UDKGame/Binaries/libSDL2-2.0.so.0 /home/acid/.steam/steam/steamapps/common/Dust An Elysian Tail/lib/libSDL2-2.0.so.0 /home/acid/.steam/steam/steamapps/common/Dust An Elysian Tail/lib64/libSDL2-2.0.so.0 /home/acid/.steam/steam/steamapps/common/Dustforce/lib/libSDL2-2.0.so.0 /home/acid/.steam/steam/steamapps/common/Dustforce/lib64/libSDL2-2.0.so.0 /home/acid/.steam/steam/steamapps/common/FEZ/lib/libSDL2-2.0.so.0 /home/acid/.steam/steam/steamapps/common/FEZ/lib64/libSDL2-2.0.so.0 /home/acid/.steam/steam/steamapps/common/Freedom Planet/bin32/libSDL2-2.0.so.0 /home/acid/.steam/steam/steamapps/common/Freedom Planet/bin64/libSDL2-2.0.so.0 /home/acid/.steam/steam/steamapps/common/Gateways/lib/libSDL2-2.0.so.0 /home/acid/.steam/steam/steamapps/common/Half-Life 2/bin/libSDL2-2.0.so.0 /home/acid/.steam/steam/steamapps/common/Half-Life 2 Update/bin/libSDL2-2.0.so.0 /home/acid/.steam/steam/steamapps/common/Insanely Twisted Shadow Planet/lib32/libSDL2-2.0.so.0 /home/acid/.steam/steam/steamapps/common/La-Mulana/lib/libSDL2-2.0.so.0 /home/acid/.steam/steam/steamapps/common/Luftrausers/i686/libSDL2-2.0.so.0 /home/acid/.steam/steam/steamapps/common/Luftrausers/x86-64/libSDL2-2.0.so.0 /home/acid/.steam/steam/steamapps/common/Machine for Pigs/lib/libSDL2-2.0.so.0 /home/acid/.steam/steam/steamapps/common/Machine for Pigs/lib64/libSDL2-2.0.so.0 /home/acid/.steam/steam/steamapps/common/Monaco/lib/libSDL2-2.0.so.0 /home/acid/.steam/steam/steamapps/common/Outland/lib/libSDL2-2.0.so.0 /home/acid/.steam/steam/steamapps/common/Penumbra Overture/lib/libSDL2-2.0.so.0 /home/acid/.steam/steam/steamapps/common/Portal Stories Mel/bin/libSDL2-2.0.so.0 /home/acid/.steam/steam/steamapps/common/Prison Architect/lib/libSDL2-2.0.so.0 /home/acid/.steam/steam/steamapps/common/Prison Architect/lib64/libSDL2-2.0.so.0 /home/acid/.steam/steam/steamapps/common/Reus/lib/libSDL2-2.0.so.0 /home/acid/.steam/steam/steamapps/common/Reus/lib64/libSDL2-2.0.so.0 /home/acid/.steam/steam/steamapps/common/Rogue Legacy/lib/libSDL2-2.0.so.0 /home/acid/.steam/steam/steamapps/common/Rogue Legacy/lib64/libSDL2-2.0.so.0 /home/acid/.steam/steam/steamapps/common/Roommates/lib/linux-i686/libSDL2-2.0.so.0 /home/acid/.steam/steam/steamapps/common/Roommates/lib/linux-x86_64/libSDL2-2.0.so.0 /home/acid/.steam/steam/steamapps/common/Shatter/lib/libSDL2-2.0.so.0 /home/acid/.steam/steam/steamapps/common/SteamVR/bin/linux32/libSDL2-2.0.so.0 /home/acid/.steam/steam/steamapps/common/SuperSplatters/lib/libSDL2-2.0.so.0 /home/acid/.steam/steam/steamapps/common/Tales from Space Mutant Blobs Attack/lib32/libSDL2-2.0.so.0 /home/acid/.steam/steam/steamapps/common/Terraria/lib/libSDL2-2.0.so.0 /home/acid/.steam/steam/steamapps/common/Terraria/lib64/libSDL2-2.0.so.0 /home/acid/.steam/steam/steamapps/common/Unepic/lib32/libSDL2-2.0.so.0 /home/acid/.steam/steam/steamapps/common/Unepic/lib64/libSDL2-2.0.so.0 /home/acid/.steam/steam/steamapps/common/chivalrymedievalwarfare/Binaries/Linux/lib/libSDL2-2.0.so.0 /home/acid/.steam/steam/steamapps/common/chivalrymedievalwarfare/CDW/Binaries/Linux/lib/libSDL2-2.0.so.0 /home/acid/.steam/steam/steamapps/common/dont_starve/bin/lib32/libSDL2-2.0.so.0 /home/acid/.steam/steam/steamapps/common/dont_starve/bin/lib32/libSDL2-2.0.so.0.0.0 /home/acid/.steam/steam/steamapps/common/mercenary_kings/lib/libSDL2-2.0.so.0 /home/acid/.steam/steam/steamapps/common/mercenary_kings/lib64/libSDL2-2.0.so.0 /home/acid/.steam/steam/steamapps/common/rocketbirds_hardboiled/lib/libSDL2-2.0.so.0 /home/acid/.steam/ubuntu12_32/libSDL2-2.0.so.0 /home/acid/.steam/ubuntu12_32/steam-runtime/amd64/usr/lib/x86_64-linux-gnu/libSDL2-2.0.so.0 /home/acid/.steam/ubuntu12_32/steam-runtime/amd64/usr/lib/x86_64-linux-gnu/libSDL2-2.0.so.0.2.1 /home/acid/.steam/ubuntu12_32/steam-runtime/i386/usr/lib/i386-linux-gnu/libSDL2-2.0.so.0 /home/acid/.steam/ubuntu12_32/steam-runtime/i386/usr/lib/i386-linux-gnu/libSDL2-2.0.so.0.2.1 /usr/lib/x86_64-linux-gnu/libSDL2-2.0.so.0 /usr/lib/x86_64-linux-gnu/libSDL2-2.0.so.0.2.0 ~/.steam/steam/steamapps/common/Crimsonland|» dpkg -l|grep libsdl rc libsdl-gfx1.2-4:amd64 2.0.23-3 amd64 drawing and graphical effects extension for SDL ii libsdl-gfx1.2-5:amd64 2.0.25-4 amd64 drawing and graphical effects extension for SDL ii libsdl-image1.2:amd64 1.2.12-5build2 amd64 Image loading library for Simple DirectMedia Layer 1.2, libraries ii libsdl-image1.2:i386 1.2.12-5build2 i386 Image loading library for Simple DirectMedia Layer 1.2, libraries ii libsdl-mixer1.2:amd64 1.2.12-11build1 amd64 Mixer library for Simple DirectMedia Layer 1.2, libraries ii libsdl-mixer1.2:i386 1.2.12-11build1 i386 Mixer library for Simple DirectMedia Layer 1.2, libraries ii libsdl-net1.2:amd64 1.2.8-4 amd64 Network library for Simple DirectMedia Layer 1.2, libraries ii libsdl-net1.2:i386 1.2.8-4 i386 Network library for Simple DirectMedia Layer 1.2, libraries ii libsdl-pango1:amd64 0.1.2-6 amd64 text rendering with Pango in SDL applications (shared library) ii libsdl-perl 2.542-1build2 amd64 SDL bindings for the Perl language ii libsdl-sound1.2:amd64 1.0.3-7build1 amd64 Sound library for Simple DirectMedia Layer 1.2, libraries ii libsdl-ttf2.0-0:amd64 2.0.11-3 amd64 TrueType Font library for Simple DirectMedia Layer 1.2, libraries ii libsdl-ttf2.0-0:i386 2.0.11-3 i386 TrueType Font library for Simple DirectMedia Layer 1.2, libraries ii libsdl1.2debian:amd64 1.2.15-10ubuntu1 amd64 Simple DirectMedia Layer ii libsdl1.2debian:i386 1.2.15-10ubuntu1 i386 Simple DirectMedia Layer ii libsdl2-2.0-0:amd64 2.0.2+dfsg1-3ubuntu2 amd64 Simple DirectMedia Layer ii libsdl2-image-2.0-0:amd64 2.0.0+dfsg-3build2 amd64 Image loading library for Simple DirectMedia Layer 2, libraries ii libsdl2-ttf-2.0-0:amd64 2.0.12+dfsg1-2 amd64 TrueType Font library for Simple DirectMedia Layer 2, libraries ~/.steam/steam/steamapps/common/Crimsonland|» dpkg -L libsdl2-2.0-0:amd64 /. /usr /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/libSDL2-2.0.so.0.2.0 /usr/share /usr/share/doc /usr/share/doc/libsdl2-2.0-0 /usr/share/doc/libsdl2-2.0-0/copyright /usr/share/doc/libsdl2-2.0-0/README-SDL.txt /usr/share/doc/libsdl2-2.0-0/BUGS.txt /usr/share/doc/libsdl2-2.0-0/CREDITS.txt /usr/share/doc/libsdl2-2.0-0/changelog.Debian.gz /usr/share/doc/libsdl2-2.0-0/README.txt /usr/lib/x86_64-linux-gnu/libSDL2-2.0.so.0

2 things I get out of this :
1) It seems quite a lot of other Linux games provides their own version of libSDL2-2.0.so.0
2) The best practice on Linux is to use rwx permissions only on the executable files (ie ./crimsonland), not on every single files ;)
< >
Showing 1-10 of 10 comments
obamafish Aug 25, 2015 @ 10:59am 
Don't want to claim there is no problem with the game on all configurations, but I'm using the official Valve Steam package that I downloaded from the Steam website, and it's working fine for me.
Are you using the Steam package from the official Ubuntu repo? The Steam directory name that you have suggets you do. If so, perhaps there's something wrong with the package? I had some bad luck getting it to work with some games and reverted to the official Valve package.

Also, here is the relevant ldd line for me:
libSDL2-2.0.so.0 => /home/xxx/.local/share/Steam/ubuntu12_32/libSDL2-2.0.so.0
Not sure why that's not happening on your machine.

Regardless of the possible causes and culprits, a possible workaround should be running the game as
$ LD_LIBRARY_PATH=~/.steam/ubuntu12_32:. ./crimsonland
from its directory.
Last edited by obamafish; Aug 25, 2015 @ 12:44pm
AciD Aug 25, 2015 @ 2:49pm 
Well, Crimsonland worked kinda well until today (when the only thing I changed in my system was though `sysctl vm.swappiness=0`).

I switched to the official Ubuntu Steam app (version 1:1.0.0.48-1ubuntu1) few months ago, without any problem so far.


`ldd crimsonland` does return : "libSDL2-2.0.so.0 => not found", and :
» echo $LD_LIBRARY_PATH /usr/lib32 » lh /usr/lib32 total 61M drwxr-xr-x 3 root root 4.0K May 1 11:37 fglrx drwxr-xr-x 2 root root 36K Feb 27 10:12 gconv lrwxrwxrwx 1 root root 17 Feb 9 2015 libAMDXvBA.so.1 -> libAMDXvBA.so.1.0 -rw-r--r-- 1 root root 8.7M Apr 17 15:16 libAMDXvBA.so.1.0 -rw-r--r-- 1 root root 22K Apr 17 15:16 libOpenCL.so.1 -rw-r--r-- 1 root root 39M Apr 17 15:16 libamdocl32.so -rw-r--r-- 1 root root 647K Apr 17 15:16 libatiadlxx.so -rw-r--r-- 1 root root 45K Apr 17 15:16 libaticalcl.so -rw-r--r-- 1 root root 12M Apr 17 15:16 libaticaldd.so -rw-r--r-- 1 root root 52K Apr 17 15:16 libaticalrt.so lrwxrwxrwx 1 root root 16 Apr 17 15:15 libatiuki.so.1 -> libatiuki.so.1.0 -rw-r--r-- 1 root root 109K Apr 17 15:16 libatiuki.so.1.0 -rw-r--r-- 1 root root 114K Oct 11 2014 libgcc_s.so.1 lrwxrwxrwx 1 root root 19 Oct 11 2014 libstdc++.so.6 -> libstdc++.so.6.0.20 -rw-r--r-- 1 root root 953K Oct 11 2014 libstdc++.so.6.0.20

Using `LD_LIBRARY_PATH=~/.steam/ubuntu12_32:. ./crimsonland` is a working workaround, but I'm pretty sure most users do not know how (or even want) to type this kind of commands to fix a game, so perhaps there is a more user-friendly way to fix this?
obamafish Aug 25, 2015 @ 7:40pm 
Originally posted by AciD:
Well, Crimsonland worked kinda well until today (when the only thing I changed in my system was though `sysctl vm.swappiness=0`).
You can see that Crimsonland has not been updated for the past 7 months[steamdb.info], though. Which means that if the problem is related to Steam in any way, then it must be some recent change in the Steam client itself that has caused it. However, that's not the case for me, and I'm running the latest version from the official package.

I switched to the official Ubuntu Steam app (version 1:1.0.0.48-1ubuntu1) few months ago, without any problem so far.
What I was getting at was that maybe, since the directory layout is different on your system with that Ubuntu Steam package of yours (note that the shared Steam libraries on your system are at ~/.steam/ubuntu12_32, while mine are at ~/.local/share/Steam/ubuntu12_32), your Steam version cannot pass the library paths to the game properly, or something along those lines. (which is a problem of course, but likely that of the Ubuntu Steam package, and not the game's).
I think you should try the official Valve package that I linked, I highly suspect that it will get rid of the problem.

Originally posted by AciD:
`ldd crimsonland` does return : "libSDL2-2.0.so.0 => not found", and :
» echo $LD_LIBRARY_PATH
/usr/lib32
That's not how that works. LD_LIBRARY_PATH specifies additional library paths for the program IN ADDITION to the standard paths, so it should normally be empty. (see http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html, paragraph 3.3.1) Somewhat surprised yours isn't. The standard way to add a library path to Ubuntu should be adding it to /etc/ld.so.conf.d/ or /etc/ld.so.conf, and then re-running ldconfig. Can't tell if that's part of the problem for you.

The Steam client does set LD_LIBRARY_PATH to point to additional library directories when running games (hence if you run ldd from within Steam, it is supposed to "find" that SDL library), but you'll be able to see the change only from within the client. Try changing the launch options to
echo "$LD_LIBRARY_PATH" > library_path.txt # %command%
for instance, and inspecting the contents of the file to see what additional directories are checked for libsdl when launching the game.

Originally posted by AciD:
Using `LD_LIBRARY_PATH=~/.steam/ubuntu12_32:. ./crimsonland` is a working workaround, but I'm pretty sure most users do not know how (or even want) to type this kind of commands to fix a game, so perhaps there is a more user-friendly way to fix this?
Well, you could create a symlink to the library in the game directory.
Or Right click the game in the Steam client, pick "Properties", then "Set options", type
LD_LIBRARY_PATH=~/.steam/ubuntu12_32:. %command%
and click "OK".
Last edited by obamafish; Aug 26, 2015 @ 12:30am
AciD Aug 26, 2015 @ 2:08am 
The $LD_LIBRARY_PATH from within Steam (when launching 'Braid' in this case) is indeed populated on the fly :
/home/acid/.steam/ubuntu12_32:/home/acid/.steam/ubuntu12_32/panorama:/home/acid/.steam/ubuntu12_32/steam-runtime/i386/lib/i386-linux-gnu:/home/acid/.steam/ubuntu12_32/steam-runtime/i386/lib:/home/acid/.steam/ubuntu12_32/steam-runtime/i386/usr/lib/i386-linux-gnu:/home/acid/.steam/ubuntu12_32/steam-runtime/i386/usr/lib:/home/acid/.steam/ubuntu12_32/steam-runtime/amd64/lib/x86_64-linux-gnu:/home/acid/.steam/ubuntu12_32/steam-runtime/amd64/lib:/home/acid/.steam/ubuntu12_32/steam-runtime/amd64/usr/lib/x86_64-linux-gnu:/home/acid/.steam/ubuntu12_32/steam-runtime/amd64/usr/lib:/usr/lib32:/usr/lib32:/home/acid/.steam/ubuntu12_32:/home/acid/.steam/ubuntu12_64:/home/acid/.steam/steam/steamapps/common/Braid:/home/acid/.steam/steam/steamapps/common/Braid/bin

I already added that specific command line in order to be able to launch Crimsonland, but I was more thinking about a general fix (install -> play -> this works out of the box-style) :)

I'd prefer not changing (again) of Steam installation source, since when you switch from the ubuntu version to the valve one (and vice versa), you have to reconfigure quite a lot of stuff manually (ie. family sharing stuff, etc.) in order to keep your settings unchanged and not having to reinstall all your games.

Note : both steam installation auto-updates themselves with Valve so I'm surprised there are different paths to the config/game files.
obamafish Aug 26, 2015 @ 2:20am 
Originally posted by AciD:
The $LD_LIBRARY_PATH from within Steam (when launching 'Braid' in this case) is indeed populated on the fly :
/home/acid/.steam/ubuntu12_32:/home/acid/.steam/ubuntu12_32/panorama:/home/acid/.steam/ubuntu12_32/steam-runtime/i386/lib/i386-linux-gnu:/home/acid/.steam/ubuntu12_32/steam-runtime/i386/lib:/home/acid/.steam/ubuntu12_32/steam-runtime/i386/usr/lib/i386-linux-gnu:/home/acid/.steam/ubuntu12_32/steam-runtime/i386/usr/lib:/home/acid/.steam/ubuntu12_32/steam-runtime/amd64/lib/x86_64-linux-gnu:/home/acid/.steam/ubuntu12_32/steam-runtime/amd64/lib:/home/acid/.steam/ubuntu12_32/steam-runtime/amd64/usr/lib/x86_64-linux-gnu:/home/acid/.steam/ubuntu12_32/steam-runtime/amd64/usr/lib:/usr/lib32:/usr/lib32:/home/acid/.steam/ubuntu12_32:/home/acid/.steam/ubuntu12_64:/home/acid/.steam/steam/steamapps/common/Braid:/home/acid/.steam/steam/steamapps/common/Braid/bin

What's your LD_LIBRARY_PATH when running Crimsonland from Steam? Can you set the launch options to those that I gave you earlier:
echo "$LD_LIBRARY_PATH" > library_path.txt # %command%
and post the result?

The result should be no different, except for the last two Braid-specific directories. What surprises me is that you've got the path where libSDL is at (/home/acid/.steam/ubuntu12_32), which means the library path SHOULD be passed to Crimsonland and detected without any problems.

Also, just to make sure, are you running Crimsonland from Steam directly? Running games from their directory while circumventing the Steam client is not the standard way to launch Steam games.
Last edited by obamafish; Aug 26, 2015 @ 3:15am
AciD Aug 26, 2015 @ 6:22am 
Here is the output of the `echo "$LD_LIBRARY_PATH" > /tmp/library_path.txt # %command%` command when used from within Steam :
/home/acid/.steam/ubuntu12_32:/home/acid/.steam/ubuntu12_32/panorama:/home/acid/.steam/ubuntu12_32/steam-runtime/i386/lib/i386-linux-gnu:/home/acid/.steam/ubuntu12_32/steam-runtime/i386/lib:/home/acid/.steam/ubuntu12_32/steam-runtime/i386/usr/lib/i386-linux-gnu:/home/acid/.steam/ubuntu12_32/steam-runtime/i386/usr/lib:/home/acid/.steam/ubuntu12_32/steam-runtime/amd64/lib/x86_64-linux-gnu:/home/acid/.steam/ubuntu12_32/steam-runtime/amd64/lib:/home/acid/.steam/ubuntu12_32/steam-runtime/amd64/usr/lib/x86_64-linux-gnu:/home/acid/.steam/ubuntu12_32/steam-runtime/amd64/usr/lib:/usr/lib32:/usr/lib32:/home/acid/.steam/ubuntu12_32:/home/acid/.steam/ubuntu12_64:/home/acid/.steam/steam/steamapps/common/Crimsonland:/home/acid/.steam/steam/steamapps/common/Crimsonland/bin
obamafish Aug 26, 2015 @ 6:38am 
You did not answer a very important question:
Originally posted by undercat:
are you running Crimsonland from Steam directly?

Originally posted by AciD:
/home/acid/.steam/ubuntu12_32 (...)
I can see no problem with the line, since the libSDL directory is already included in it at the game startup. Since you've already confirmed that passing LD_LIBRARY_PATH manually fixes the problem, the game should start fine if you remove all the command line arguments and click that "Play" button in the Steam client. If it doesn't start if you click "play", what exactly happens? I'm starting to sense some miscommunication problem with this whole thing.
Last edited by obamafish; Aug 26, 2015 @ 6:49am
AciD Aug 26, 2015 @ 7:09am 
I think I did when I wrote : "command when used _from within_ Steam" ;)

Ok now, I removed `LD_LIBRARY_PATH=~/.steam/ubuntu12_32:. ` from the crimsonland steam command line properties, clicked play and....today, Crimsonland launches well!
Very, very weird that it did not yesterday!!

Yesterday, when I did the exact same thing, just saw a glitch on my screen where you could see the application was launching, but instead of showing the game logo, it showed a 'screenshot' of my whole screen (and this was offset a bit toward the upper side, by about the size of my window decoration), then had to kill the 'unresponsive app' with ctrl+alt+esc, then click.

Any idea why?

If that happens again, I'll be a bit confused about what broke/made it to work again...

obamafish Aug 26, 2015 @ 7:32am 
Originally posted by AciD:
Crimsonland launches well!
Then the problem is solved, I suppose.

Originally posted by AciD:
I think I did when I wrote : "command when used _from within_ Steam" ;)
... and yet you only did the debug run that I asked to perform. It was not supposed to launch the game itself, its only purpose was to show what directories are being searched for dynamic libraries at startup. You did not say the game was actually working until I explicitly requested to try and run it.

Originally posted by AciD:
just saw a glitch on my screen where you could see the application was launching, but instead of showing the game logo, it showed a 'screenshot' of my whole screen
If the game fails to run due to a missing library (which was your original accusation in the topic), it doesn't do or show anything aside from a text message in the console that some library is missing. You did include such message in the original post, but overlooked the fact that LD_PRELOAD_PATH needed to be set up appropriately in order to launch the game from outside the client.

Originally posted by AciD:
Any idea why?
Beats me, might be because some graphical drivers on Linux are not very stable, and need a restart once in a while, especially when the user is screwing around with some kernel parameters. :s
Last edited by obamafish; Aug 26, 2015 @ 7:36am
AciD Aug 26, 2015 @ 7:38am 
Well, I'll post back here if that happens again, hopefully to narrow down the real cause.

Thanks for your help!
< >
Showing 1-10 of 10 comments
Per page: 1530 50

Date Posted: Aug 25, 2015 @ 4:18am
Posts: 10