FireFly Media Server › Firefly Media Server Forums › Firefly Media Server › Nightlies Feedback › svn-1523 feedback
- This topic has 17 replies, 5 voices, and was last updated 17 years ago by rpedde.
-
AuthorPosts
-
09/04/2007 at 12:20 AM #9875MikeyPParticipant
When using Avahi, should I use “–disable-mdns –enable-avahi” in ./configure? When I use those parameters, build mt-daapd, and fire up the avahi deamon, neither iTunes nor Roku can see mt-daapd. However, if I use “–enable-mdns”, omit “–enable-avahi”, and shut down the avahi deamon, iTunes and Roku can see mt-daapd for a while before it eventually “disappears”. And to further complicate things, if I use “–enable-avahi”, omit “–enable-mdns”, and run the avahi-deamon, the Roku sees mt-daapd, but iTunes does not. 😯 (mt-daapd does appear in the “avahi-browser -a” list)
Here’s a d9 startup log with params “–disable-mdns –enable-avahi” and the avahi-deamon running:
2007-04-08 17:17:00 (b74fc6b0): Firefly Version svn-1523: Starting with debuglevel 9
2007-04-08 17:17:00 (b74fc6b0): Attempting to load plugin /usr/local/share/mt-daapd/plugins/out-daap.so
2007-04-08 17:17:00 (b74fc6b0): Loaded plugin /usr/local/share/mt-daapd/plugins/out-daap.so (daap/svn-1523)
2007-04-08 17:17:00 (b74fc6b0): New transcode codec list:
2007-04-08 17:17:00 (b74fc6b0): Attempting to load plugin /usr/local/share/mt-daapd/plugins/rsp.so
2007-04-08 17:17:00 (b74fc6b0): Loaded plugin /usr/local/share/mt-daapd/plugins/rsp.so (rsp/svn-1523)
2007-04-08 17:17:00 (b74fc6b0): New transcode codec list:
2007-04-08 17:17:00 (b74fc6b0): Attempting to load plugin /usr/local/share/mt-daapd/plugins/ssc-ffmpeg.so
2007-04-08 17:17:00 (b74fc6b0): Loaded plugin /usr/local/share/mt-daapd/plugins/ssc-ffmpeg.so (ssc-ffmpeg/svn-1523)
2007-04-08 17:17:00 (b74fc6b0): New transcode codec list: flac,alac,ogg,wma
2007-04-08 17:17:00 (b74fc6b0): Attempting to load plugin /usr/local/share/mt-daapd/plugins/ssc-script.so
2007-04-08 17:17:00 (b74fc6b0): Loaded plugin /usr/local/share/mt-daapd/plugins/ssc-script.so (ssc-script/svn-1523)
2007-04-08 17:17:00 (b74fc6b0): New transcode codec list: wma,wmal,ogg,flac,flac,alac,ogg,wma
2007-04-08 17:17:00 (b74fc6b0): Plugin loaded: ssc-script/svn-1523
2007-04-08 17:17:00 (b74fc6b0): Plugin loaded: ssc-ffmpeg/svn-1523
2007-04-08 17:17:00 (b74fc6b0): Plugin loaded: rsp/svn-1523
2007-04-08 17:17:00 (b74fc6b0): Plugin loaded: daap/svn-1523
2007-04-08 17:17:00 (b74fc6b0): Starting signal handler
2007-04-08 17:17:00 (b74fc6b0): Opening database
2007-04-08 17:17:00 (b74fc6b0): Executing: select value from config where term='version'
2007-04-08 17:17:00 (b74fc6b0): Results: 0
2007-04-08 17:17:00 (b74fc6b0): Initializing database
2007-04-08 17:17:00 (b74fc6b0): Executing: select count(*) FROM songs
2007-04-08 17:17:00 (b74fc6b0): Executing: select value from config where term='rescan'
2007-04-08 17:17:01 (b74fc6b0): Executing: vacuum
2007-04-08 17:17:01 (b74fc6b0): Rows: 0
2007-04-08 17:17:01 (b74fc6b0): Executing: create index idx_path on songs(path,idx)
2007-04-08 17:17:01 (b74fc6b0): Query: create index idx_path on songs(path,idx)
2007-04-08 17:17:01 (b74fc6b0): Error: index idx_path already exists
2007-04-08 17:17:01 (b74fc6b0): Executing: create index idx_songid on playlistitems(songid)
2007-04-08 17:17:01 (b74fc6b0): Query: create index idx_songid on playlistitems(songid)
2007-04-08 17:17:01 (b74fc6b0): Error: index idx_songid already exists
2007-04-08 17:17:01 (b74fc6b0): Executing: create index idx_playlistid on playlistitems(playlistid,songid)
2007-04-08 17:17:01 (b74fc6b0): Query: create index idx_playlistid on playlistitems(playlistid,songid)
2007-04-08 17:17:01 (b74fc6b0): Error: index idx_playlistid already exists
2007-04-08 17:17:01 (b74fc6b0): Starting web server from /usr/local/share/mt-daapd/admin-root on port 3689
2007-04-08 17:17:01 (b74fc6b0): Listening on port 3689
2007-04-08 17:17:01 (b74fc6b0): Starting server thread
2007-04-08 17:17:01 (b74fc6b0): Executing: select count(*) FROM songs
2007-04-08 17:17:01 (b74fc6b0): Serving 1328 songs. Startup complete in 2 seconds
2007-04-08 17:17:05 (b6cb1bb0): Thread 0: Entering ws_dispatcher (Connection from 127.0.0.1)
2007-04-08 17:17:05 (b6cb1bb0): Thread 0: got request
2007-04-08 17:17:05 (b6cb1bb0): Request: GET /xml-rpc?method=stats HTTP/1.1
2007-04-08 17:17:05 (b6cb1bb0): Thread 0: Read: X-Requested-With: XMLHttpRequest
2007-04-08 17:17:05 (b6cb1bb0): Thread 0: Adding header *X-Requested-With=XMLHttpRequest*
2007-04-08 17:17:05 (b6cb1bb0): Added *X-Requested-With=XMLHttpRequest*
2007-04-08 17:17:05 (b6cb1bb0): Thread 0: Read: X-Prototype-Version: 1.4.0
2007-04-08 17:17:05 (b6cb1bb0): Thread 0: Adding header *X-Prototype-Version=1.4.0*
2007-04-08 17:17:05 (b6cb1bb0): Added *X-Prototype-Version=1.4.0*
2007-04-08 17:17:05 (b6cb1bb0): Thread 0: Read: User-Agent: Opera/9.10 (X11; Linux i686; U; en)
2007-04-08 17:17:05 (b6cb1bb0): Thread 0: Adding header *User-Agent=Opera/9.10 (X11; Linux i686; U; en)*
2007-04-08 17:17:05 (b6cb1bb0): Added *User-Agent=Opera/9.10 (X11; Linux i686; U; en)*
2007-04-08 17:17:05 (b6cb1bb0): Thread 0: Read: Host: localhost:3689
2007-04-08 17:17:05 (b6cb1bb0): Thread 0: Adding header *Host=localhost:3689*
2007-04-08 17:17:05 (b6cb1bb0): Added *Host=localhost:3689*
2007-04-08 17:17:05 (b6cb1bb0): Thread 0: Read: Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1
2007-04-08 17:17:05 (b6cb1bb0): Thread 0: Adding header *Accept=text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1*
2007-04-08 17:17:05 (b6cb1bb0): Added *Accept=text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1*
2007-04-08 17:17:05 (b6cb1bb0): Thread 0: Read: Accept-Language: en-US,en;q=0.9
2007-04-08 17:17:05 (b6cb1bb0): Thread 0: Adding header *Accept-Language=en-US,en;q=0.9*
2007-04-08 17:17:05 (b6cb1bb0): Added *Accept-Language=en-US,en;q=0.9*
2007-04-08 17:17:05 (b6cb1bb0): Thread 0: Read: Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1
2007-04-08 17:17:05 (b6cb1bb0): Thread 0: Adding header *Accept-Charset=iso-8859-1, utf-8, utf-16, *;q=0.1*
2007-04-08 17:17:05 (b6cb1bb0): Added *Accept-Charset=iso-8859-1, utf-8, utf-16, *;q=0.1*
2007-04-08 17:17:05 (b6cb1bb0): Thread 0: Read: Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0
2007-04-08 17:17:05 (b6cb1bb0): Thread 0: Adding header *Accept-Encoding=deflate, gzip, x-gzip, identity, *;q=0*
2007-04-08 17:17:05 (b6cb1bb0): Added *Accept-Encoding=deflate, gzip, x-gzip, identity, *;q=0*
2007-04-08 17:17:05 (b6cb1bb0): Thread 0: Read: Referer: http://localhost:3689/index.html
2007-04-08 17:17:05 (b6cb1bb0): Thread 0: Adding header *Referer=http://localhost:3689/index.html*
2007-04-08 17:17:05 (b6cb1bb0): Added *Referer=http://localhost:3689/index.html*
2007-04-08 17:17:05 (b6cb1bb0): Thread 0: Read: Cookie: SlimServer-player=00%3A0d%3A4b%3A03%3Aaa%3Acf
2007-04-08 17:17:05 (b6cb1bb0): Thread 0: Adding header *Cookie=SlimServer-player=00%3A0d%3A4b%3A03%3Aaa%3Acf*
2007-04-08 17:17:05 (b6cb1bb0): Added *Cookie=SlimServer-player=00%3A0d%3A4b%3A03%3Aaa%3Acf*
2007-04-08 17:17:05 (b6cb1bb0): Thread 0: Read: Cookie2: $Version=1
2007-04-08 17:17:05 (b6cb1bb0): Thread 0: Adding header *Cookie2=$Version=1*
2007-04-08 17:17:05 (b6cb1bb0): Added *Cookie2=$Version=1*
2007-04-08 17:17:06 (b6cb1bb0): Thread 0: Read: Connection: Keep-Alive, TE
2007-04-08 17:17:06 (b6cb1bb0): Thread 0: Adding header *Connection=Keep-Alive, TE*
2007-04-08 17:17:06 (b6cb1bb0): Added *Connection=Keep-Alive, TE*
2007-04-08 17:17:06 (b6cb1bb0): Thread 0: Read: TE: deflate, gzip, chunked, identity, trailers
2007-04-08 17:17:06 (b6cb1bb0): Thread 0: Adding header *TE=deflate, gzip, chunked, identity, trailers*
2007-04-08 17:17:06 (b6cb1bb0): Added *TE=deflate, gzip, chunked, identity, trailers*
2007-04-08 17:17:06 (b6cb1bb0): Thread 0: Read:
2007-04-08 17:17:06 (b6cb1bb0): Thread 0: Headers parsed!
2007-04-08 17:17:06 (b6cb1bb0): Checking to see if connection matches close
2007-04-08 17:17:06 (b6cb1bb0): And it does NOT
2007-04-08 17:17:06 (b6cb1bb0): Thread 0: Connection type HTTP/1.1
: Connection: persist
2007-04-08 17:17:06 (b6cb1bb0): Thread 0: parsing GET args
2007-04-08 17:17:06 (b6cb1bb0): Thread 0: Entering ws_getgetvars (method=stats)
2007-04-08 17:17:06 (b6cb1bb0): Thread 0: Adding arg method = stats
2007-04-08 17:17:06 (b6cb1bb0): Added *method=stats*
2007-04-08 17:17:06 (b6cb1bb0): Thread 0: Done parsing GET/POST args!
2007-04-08 17:17:06 (b6cb1bb0): Thread 0: Original URI: /xml-rpc
2007-04-08 17:17:06 (b6cb1bb0): Thread 0: Translated URI: /xml-rpc
2007-04-08 17:17:06 (b6cb1bb0): Thread 0: Preparing to find handler
2007-04-08 17:17:06 (b6cb1bb0): Thread 0: URI Match!
2007-04-08 17:17:06 (b6cb1bb0): Thread 0: Time is 1176077826 seconds after epoch
2007-04-08 17:17:06 (b6cb1bb0): Thread 0: Setting time header
2007-04-08 17:17:06 (b6cb1bb0): Added *Date=Mon, 9 Apr 2007 00:17:06 GMT*
2007-04-08 17:17:06 (b6cb1bb0): Added *Connection=keep-alive*
2007-04-08 17:17:06 (b6cb1bb0): Added *Server=mt-daapd/svn-1523*
2007-04-08 17:17:06 (b6cb1bb0): Added *Content-Type=text/html*
2007-04-08 17:17:06 (b6cb1bb0): Added *Content-Language=en_us*
2007-04-08 17:17:06 (b6cb1bb0): Thread 0: Using non-default handler
2007-04-08 17:17:06 (b6cb1bb0): in main_auth
2007-04-08 17:17:06 (b6cb1bb0): Checking url /xml-rpc
2007-04-08 17:17:06 (b6cb1bb0): Checking url /xml-rpc
2007-04-08 17:17:06 (b6cb1bb0): Dispatching auth for /xml-rpc to config auth
2007-04-08 17:17:06 (b6cb1bb0): in main_handler
2007-04-08 17:17:06 (b6cb1bb0): Checking url /xml-rpc
2007-04-08 17:17:06 (b6cb1bb0): Checking url /xml-rpc
2007-04-08 17:17:06 (b6cb1bb0): Dispatching /xml-rpc to config handler
2007-04-08 17:17:06 (b6cb1bb0): Entering config_handler
2007-04-08 17:17:06 (b6cb1bb0): Entering config_set_status
2007-04-08 17:17:06 (b6cb1bb0): Exiting config_set_status
2007-04-08 17:17:06 (b6cb1bb0): Updating Connection from keep-alive to close
2007-04-08 17:17:06 (b6cb1bb0): Entering config_set_status
2007-04-08 17:17:06 (b6cb1bb0): Exiting config_set_status
2007-04-08 17:17:06 (b6cb1bb0): Added *Cache-Control=no-cache*
2007-04-08 17:17:06 (b6cb1bb0): Added *Expires=-1*
2007-04-08 17:17:06 (b6cb1bb0): Updating Content-Type from text/html to text/xml; charset=utf-8
2007-04-08 17:17:06 (b6cb1bb0): Emitting reponse header Expires: -1
2007-04-08 17:17:06 (b6cb1bb0): Emitting reponse header Cache-Control: no-cache
2007-04-08 17:17:06 (b6cb1bb0): Emitting reponse header Content-Language: en_us
2007-04-08 17:17:06 (b6cb1bb0): Emitting reponse header Content-Type: text/xml; charset=utf-8
2007-04-08 17:17:06 (b6cb1bb0): Emitting reponse header Server: mt-daapd/svn-1523
2007-04-08 17:17:06 (b6cb1bb0): Emitting reponse header Connection: close
2007-04-08 17:17:07 (b6cb1bb0): Emitting reponse header Date: Mon, 9 Apr 2007 00:17:06 GMT
2007-04-08 17:17:07 (b6cb1bb0): Executing: select count(*) FROM songs
2007-04-08 17:17:07 (b6cb1bb0): Thread 0: xml-rpc served
2007-04-08 17:17:07 (b6cb1bb0): Entering config_set_status
2007-04-08 17:17:07 (b6cb1bb0): Exiting config_set_status
2007-04-08 17:17:07 (b6cb1bb0): Thread 0: Terminating
2007-04-08 17:17:07 (b6cb1bb0): Thread 0: Freeing request headers
2007-04-08 17:17:07 (b6cb1bb0): Thread 0: Freeing response headers
2007-04-08 17:17:07 (b6cb1bb0): Thread 0: Freeing request vars
2007-04-08 17:17:07 (b6cb1bb0): Thread 0: Closing fd
2007-04-08 17:17:07 (b6cb1bb0): With thread 0 exiting, 0 are still running
09/04/2007 at 3:03 AM #9876rpeddeParticipant@MikeyP wrote:
When using Avahi, should I use “–disable-mdns –enable-avahi” in ./configure? When I use those parameters, build mt-daapd, and fire up the avahi deamon, neither iTunes nor Roku can see mt-daapd. However, if I use “–enable-mdns”, omit “–enable-avahi”, and shut down the avahi deamon, iTunes and Roku can see mt-daapd for a while before it eventually “disappears”. And to further complicate things, if I use “–enable-avahi”, omit “–enable-mdns”, and run the avahi-deamon, the Roku sees mt-daapd, but iTunes does not. 😯 (mt-daapd does appear in the “avahi-browser -a” list)
–disable-mdns disables all mdns, including avahi. You want just “–enable-avahi”.
If it shows up for a while, then disappears, it’s because your server is firewalling incoming multicast. Allow traffic to and from 224.0.0.251 on udp port 5353.
Try that and see where it gets you.
09/04/2007 at 11:59 AM #9877lunaticalldayParticipantthe error occurs with the tarball
here is my d9-output (–disable-mdns, –enable-avahi, –enable-sqlite):
Got general/web_root, convert to general/web_root (/usr/local/share/mt-daapd/admin-root)
Found existing section
Got general/port, convert to general/port (3689)
Found existing section
Got general/admin_pw, convert to general/admin_pw (mt-daapd)
Found existing section
Got general/db_type, convert to general/db_type (sqlite)
Found existing section
Got general/db_parms, convert to general/db_parms (/usr/local/var/cache/mt-daapd)
Found existing section
Got general/mp3_dir, convert to general/mp3_dir (/mnt/mp3test)
Found existing section
Found 1 tokens in /mnt/mp3test
Token 1: /mnt/mp3test
Got general/servername, convert to general/servername (Firefly %v on %h)
Found existing section
Got general/runas, convert to general/runas (nobody)
Found existing section
Got general/playlist, convert to general/playlist (/usr/local/etc/mt-daapd.playlist)
Found existing section
Got general/extensions, convert to general/extensions (.mp3,.m4a,.m4p)
Found existing section
Got general/ssc_codectypes, convert to general/ssc_codectypes (ogg,flac,alac)
Found existing section
Got general/ssc_prog, convert to general/ssc_prog (/usr/local/bin/mt-daapd-ssc.sh)
Found existing section
Expanding precomments to 2048
Expanding precomments to 4096
Got general/scan_type, convert to general/scan_type (2)
Found existing section
Got plugins/plugin_dir, convert to plugins/plugin_dir (/usr/local/share/mt-daapd/plugins)
Found existing section
Checking existence of /usr/local/share/mt-daapd/admin-root
Checking existence of /usr/local/share/mt-daapd/admin-root
Checking existence of /usr/local/var/cache/mt-daapd
Checking existence of /usr/local/var/cache/mt-daapd
Checking existence of /usr/local/share/mt-daapd/plugins
Checking existence of /usr/local/share/mt-daapd/plugins
Loading new config file.
Firefly Version svn-1523: Starting with debuglevel 9
Attempting to load plugin /usr/local/share/mt-daapd/plugins/out-daap.so
Loaded plugin /usr/local/share/mt-daapd/plugins/out-daap.so (daap/svn-1523)
New transcode codec list:
Attempting to load plugin /usr/local/share/mt-daapd/plugins/rsp.so
Loaded plugin /usr/local/share/mt-daapd/plugins/rsp.so (rsp/svn-1523)
New transcode codec list:
Attempting to load plugin /usr/local/share/mt-daapd/plugins/ssc-script.so
Loaded plugin /usr/local/share/mt-daapd/plugins/ssc-script.so (ssc-script/svn-1523)
New transcode codec list: ogg,flac,alac
Plugin loaded: ssc-script/svn-1523
Plugin loaded: rsp/svn-1523
Plugin loaded: daap/svn-1523
Starting signal handler
Opening database
Executing: select value from config where term='version'
Results: 0
Initializing database
Executing: select count(*) FROM songs
Executing: select value from config where term='rescan'
Executing: vacuum
Rows: 0
Executing: create index idx_path on songs(path,idx)
Query: create index idx_path on songs(path,idx)
Error: index idx_path already exists
Executing: create index idx_songid on playlistitems(songid)
Query: create index idx_songid on playlistitems(songid)
Error: index idx_songid already exists
Executing: create index idx_playlistid on playlistitems(playlistid,songid)
Query: create index idx_playlistid on playlistitems(playlistid,songid)
Error: index idx_playlistid already exists
Starting web server from /usr/local/share/mt-daapd/admin-root on port 3689
Listening on port 3689
Starting server thread
Executing: select count(*) FROM songs
Serving 4 songs. Startup complete in 0 seconds
10/04/2007 at 2:35 AM #9878rpeddeParticipant@lunaticallday wrote:
the error occurs with the tarball
here is my d9-output (–disable-mdns, –enable-avahi, –enable-sqlite):
Right. That’s what I’m saying. You want “–enable-avahi –enable-sqlite”. That’s it. Full stop. Ix-nay on the isable-day dns-may.
That should make it visible to sb, now what that does for the web admin is another story, but at least part of the problem is no mdns.
— Ron
11/04/2007 at 4:13 AM #9879MikeyPParticipant@rpedde wrote:
Right. That’s what I’m saying. You want “–enable-avahi –enable-sqlite”. That’s it. Full stop. Ix-nay on the isable-day dns-may.
So is “–enable-mdns” active by default, or does it become active when you use “–enable-avahi”. Usually, when I see “-enable-whatever” in “./configure –help” I assume it is not enabled (and vice-versa when I see “–disable-whatever”). I may be misunderstanding convention here.
Back to the disappearing FireFly, thanks for the tip about the firewall. Alas, I’m not running any firewall on the box. Netfilter is installed, but not running.
Connections seem to get lost after a “write failed” appears in the log. Whenever I disconnect any client while a song is playing (like power down a Roku or close iTunes), I’ll get a “write failed” in the log. After that, If I click on anything listed by mt-daapd in iTunes, mt-daapd will immediately disappear (from iTunes), and I’ll see “Thread 6: could not read: broken pipe” in the mt-daapd log.
Still sound like a possible net config issue on my end?
thanks again
-MikeyP11/04/2007 at 6:58 PM #9880rpeddeParticipant@MikeyP wrote:
@rpedde wrote:
Right. That’s what I’m saying. You want “–enable-avahi –enable-sqlite”. That’s it. Full stop. Ix-nay on the isable-day dns-may.
So is “–enable-mdns” active by default, or does it become active when you use “–enable-avahi”. Usually, when I see “-enable-whatever” in “./configure –help” I assume it is not enabled (and vice-versa when I see “–disable-whatever”). I may be misunderstanding convention here.
Back to the disappearing FireFly, thanks for the tip about the firewall. Alas, I’m not running any firewall on the box. Netfilter is installed, but not running.
Connections seem to get lost after a “write failed” appears in the log. Whenever I disconnect any client while a song is playing (like power down a Roku or close iTunes), I’ll get a “write failed” in the log. After that, If I click on anything listed by mt-daapd in iTunes, mt-daapd will immediately disappear (from iTunes), and I’ll see “Thread 6: could not read: broken pipe” in the mt-daapd log.
Still sound like a possible net config issue on my end?
thanks again
-MikeyPThat sounds like multicast problems. When you start or stop iTunes, it pushes mdns discovery pre-caching stuff on the network. If you notice that:
1. You can run the server for a while, but after a half hour or so it disappears
or
2. Starting iTunes or stopping iTunes anywhere on the network tends to make the server disappear
Then it’s a multicast problem. Either the mt-daapd server isn’t seeing the mdns requests, or it isn’t sending responses (unlikely, or it wouldn’t populate the iTunes browse list to begin with).
Another possibility is that you are running more than one mdns responder on that box — for example avahi or howl + the built-in one from firefly.
That’s an issue, too.
12/04/2007 at 4:10 AM #9881MikeyPParticipantAhhhh… sheesh. Welp, this just in from the “I’m an idiot” department: I was testing SlimServer last week, hated it, and deleted it. However, unbeknownst to me, it seems to have fired up its very own mDNSResponder, which I just noticed was still running. 😳 Beware of SlimServer.
Its dead now. And mt-daapd seems to be running just fine. Glad this was an error on my side. Ron, you must be sick of answering multicast questions…
12/04/2007 at 1:08 PM #9882rpeddeParticipant@MikeyP wrote:
Ron, you must be sick of answering multicast questions…
It sure seems to be more problematic than other discovery methods. I think once mdns is more widespread, and becomes a service integrated in operating systems, then it will become more stable. Plus, devices will support it better (I’m thinking waps, routers, etc).
But yeah, it sure is problematic.
Oh well. 🙂
— Ron
-
AuthorPosts
- The forum ‘Nightlies Feedback’ is closed to new topics and replies.