FireFly Media Server › Firefly Media Server Forums › Firefly Media Server › Nightlies Feedback › Connection loss and reboot issue reloaded
- This topic has 42 replies, 5 voices, and was last updated 18 years, 6 months ago by Ted Harper.
-
AuthorPosts
-
27/05/2006 at 3:30 AM #4479rpeddeParticipant
@schiers wrote:
Nevertheless, as howl includes are in /usr/include/howl, I have to configure with –with-howl-includes=/usr/include/howl. I will then get some errors. I will try to look at the code and fix them. Is that possible or is something wrong with my howl?
I think there were major api changes from 0.9.5 to 0.9.6.
— Ron
27/05/2006 at 7:31 AM #4480schiersParticipantHi,
I managed so far to download, compile, and install howl 1.0.0 but get:
2006-05-27 09:28:05: Starting rendezvous daemon
2006-05-27 09:28:05: Starting rendezvous services
2006-05-27 09:28:05: Error initializing howlduring startup. I would like to try with your version, but I neither know which one you actually use nor where to get them. It you read that before I am able to work further on the issue, it would be nice to know.
BR,
Carsten.27/05/2006 at 7:35 AM #4481rpeddeParticipant@schiers wrote:
Hi,
I managed so far to download, compile, and install howl 1.0.0 but get:
2006-05-27 09:28:05: Starting rendezvous daemon
2006-05-27 09:28:05: Starting rendezvous services
2006-05-27 09:28:05: Error initializing howlduring startup. I would like to try with your version, but I neither know which one you actually use nor where to get them. It you read that before I am able to work further on the issue, it would be nice to know.
BR,
Carsten.That probably means that the howl responder isn’t running. You should have a mDNSResponder running in your process lists — that’s the howl daemon. mt-daapd talks to the mDNSReponder to tell it to advertise mt-daapd. If it’s not running, then mt-daapd sends that error.
— Ron
27/05/2006 at 7:47 AM #4482schiersParticipantHi Ron,
Good Morning 8),sorry for all these dump questions, but do I have to start manually that mDNS Responder of howl?
Also, I just found 0.9.2 of howl and just try to compile it. Is that the version you used? I also found 0.9.5 and 0.9.6…
BR,
Carsten.27/05/2006 at 7:51 AM #4483rpeddeParticipant@schiers wrote:
Hi Ron,
sorry for all these dump questions, but do I have to start manually that mDNS Responder of howl?If you installed it by hand, then yes. You could of course make an rc script for it, or use an existing one. If you had an old .deb, you could have used the rc script for that.
Alternately, I would guess that the howl distribution has an example rc script.
Also, I just found 0.9.2 of howl and just try to compile it. Is that the version you used? I also found 0.9.5 and 0.9.6…
Anything > 0.9.5 should work. (including 0.9.6)
— Ron
27/05/2006 at 7:58 AM #4484schiersParticipantOK, I slowly understand what this is all about. Too much management and subcontracted software development over the last years. I a bit rusty.
So I will go with 1.0, which seems to be the last version, evantually going backwards if there are issues. But as I said, it compiles. So I guess it’s that the daemon is not running.
Thanks and have a good night, I will now take a bit care of my younger son. He is a bit anoyed of daddy’s computer problems…
BR,
Carsten.27/05/2006 at 7:59 AM #4485schiersParticipantAAAHHHH! iTunes is seeing mt-daapd again. So now downstairs in the living room and let’s try the Soundbridge…
EDIT: yes, Soundbridge works. Now I just have to wait for 10 minutes to see whether it still connects without issue.
If so, the result is that there is some issue in your mDNS code, right? It seems that I am the only one though…well as long as it works with howl, I don’t care.
BR,
Carsten.27/05/2006 at 8:14 AM #4486rpeddeParticipant@schiers wrote:
If so, the result is that there is some issue in your mDNS code, right? It seems that I am the only one though…well as long as it works with howl, I don’t care.
Yes. The code in question is actually apple’s code — it’s the posix mDNS code supplied by apple.
And no, I haven’t seen this before. Maybe it’s something specific to the new soundbridge firmware, or heck… maybe a number of things.
But if this works, then yeah, it’s definitely the built-in mdns responder.
— Ron
27/05/2006 at 8:37 AM #4487schiersParticipant@rpedde wrote:
But if this works, then yeah, it’s definitely the built-in mdns responder.
Sure, but it isn’t 👿
I switched the Soundbridge off for 20 minutes. When switching it back on, it needed 10 seconds to fail, I had to press ok on the reconnect, then it reboots. After that it works.
Conclusion: it’s more probable that there is an issue with the Soundbridge code, isn’t it? It looses connection after 5-10 minutes when
a) I switch off
b) I stream
c) I leave it on and do nothingI think will post something in their forum as well. Or PM. Who was your contact?
EDIT: I posted here: http://www.rokulabs.com/forums/viewtopic.php?p=48454#48454
BR,
Carsten.[/url]27/05/2006 at 11:03 AM #4488schiersParticipantHi Ron,
just managed to log -d10 the issue. Just in case it helps…
2006-05-27 12:53:03: Entering ws_lock_unsafe
2006-05-27 12:53:03: Exiting ws_lock_unsafe with retval of 0
2006-05-27 12:53:03: Entering ws_add_dispatch_thread
2006-05-27 12:53:03: Exiting ws_add_dispatch_thread
2006-05-27 12:53:03: Entering ws_unlock_unsafe
2006-05-27 12:53:03: Exiting ws_unlock_unsafe with a retval of 0
2006-05-27 12:53:03: Thread 0: Entering ws_dispatcher (Connection from 192.168.9.8)
2006-05-27 12:53:03: Entering ws_lock_unsafe
2006-05-27 12:53:03: Exiting ws_lock_unsafe with retval of 0
2006-05-27 12:53:03: Entering ws_unlock_unsafe
2006-05-27 12:53:03: Exiting ws_unlock_unsafe with a retval of 0
2006-05-27 12:53:03: Thread 0: got request
2006-05-27 12:53:03: Request: GET /rsp/info HTTP/1.0
2006-05-27 12:53:03: Entering ws_getheaders
2006-05-27 12:53:03: Thread 0: Read: User-Agent: Roku SoundBridge/2.5
2006-05-27 12:53:03: Thread 0: Adding header *User-Agent=Roku SoundBridge/2.5*
2006-05-27 12:53:03: Added *User-Agent=Roku SoundBridge/2.5*
2006-05-27 12:53:03: Thread 0: Read: Host: 192.168.9.9:3689
2006-05-27 12:53:03: Thread 0: Adding header *Host=192.168.9.9:3689*
2006-05-27 12:53:03: Added *Host=192.168.9.9:3689*
2006-05-27 12:53:03: Thread 0: Read: Accept: */*
2006-05-27 12:53:03: Thread 0: Adding header *Accept=*/**
2006-05-27 12:53:03: Added *Accept=*/**
2006-05-27 12:53:03: Thread 0: Read: Authorization: Basic cm9rdTpyb2t1
2006-05-27 12:53:03: Thread 0: Adding header *Authorization=Basic cm9rdTpyb2t1*
2006-05-27 12:53:03: Added *Authorization=Basic cm9rdTpyb2t1*
2006-05-27 12:53:03: Thread 0: Read: Pragma: no-cache
2006-05-27 12:53:03: Thread 0: Adding header *Pragma=no-cache*
2006-05-27 12:53:03: Added *Pragma=no-cache*
2006-05-27 12:53:03: Thread 0: Read: accept-encoding: gzip
2006-05-27 12:53:03: Thread 0: Adding header *accept-encoding=gzip*
2006-05-27 12:53:03: Added *accept-encoding=gzip*
2006-05-27 12:53:03: Thread 0: Read: accept-codecs: wma,mpeg,wav,mp4a
2006-05-27 12:53:03: Thread 0: Adding header *accept-codecs=wma,mpeg,wav,mp4a*
2006-05-27 12:53:03: Added *accept-codecs=wma,mpeg,wav,mp4a*
2006-05-27 12:53:03: Thread 0: Read: rsp-version: 0.1
2006-05-27 12:53:03: Thread 0: Adding header *rsp-version=0.1*
2006-05-27 12:53:03: Added *rsp-version=0.1*
2006-05-27 12:53:03: Thread 0: Read: transcode-codecs: wav,mp3
2006-05-27 12:53:03: Thread 0: Adding header *transcode-codecs=wav,mp3*
2006-05-27 12:53:03: Added *transcode-codecs=wav,mp3*
2006-05-27 12:53:03: Thread 0: Read:
2006-05-27 12:53:03: Thread 0: Headers parsed!
2006-05-27 12:53:03: Exiting ws_getheaders
2006-05-27 12:53:03: Checking to see if connection matches keep-alive
2006-05-27 12:53:03: Nope!
2006-05-27 12:53:03: Thread 0: Connection type HTTP/1.0
: Connection: non-persist
2006-05-27 12:53:03: Thread 0: Original URI: /rsp/info
2006-05-27 12:53:03: Thread 0: Translated URI: /rsp/info
2006-05-27 12:53:03: Entering ws_lock_unsafe
2006-05-27 12:53:03: Exiting ws_lock_unsafe with retval of 0
2006-05-27 12:53:03: Thread 0: Preparing to find handler
2006-05-27 12:53:03: Thread 0: URI Match!
2006-05-27 12:53:03: Entering ws_unlock_unsafe
2006-05-27 12:53:03: Exiting ws_unlock_unsafe with a retval of 0
2006-05-27 12:53:03: Thread 0: Time is 1148727183 seconds after epoch
2006-05-27 12:53:03: Thread 0: Setting time header
2006-05-27 12:53:03: Added *Date=Sat, 27 May 2006 10:53:03 GMT*
2006-05-27 12:53:03: Added *Connection=close*
2006-05-27 12:53:03: Added *Server=mt-daapd/svn-1082*
2006-05-27 12:53:03: Added *Content-Type=text/html*
2006-05-27 12:53:03: Added *Content-Language=en_us*
2006-05-27 12:53:03: Thread 0: Using non-default handler
2006-05-27 12:53:03: in main_auth
2006-05-27 12:53:03: Entering candispatch
2006-05-27 12:53:03: Current lock level: 0
2006-05-27 12:53:03: Dispatching auth for /rsp/info to plugin
2006-05-27 12:53:03: Current lock level: 0
2006-05-27 12:53:03: Dispatching /rsp/info to rsp/1.0
2006-05-27 12:53:03: in main_handler
2006-05-27 12:53:03: Entering candispatch
2006-05-27 12:53:03: Current lock level: 0
2006-05-27 12:53:03: Dispatching /rsp/info to plugin
2006-05-27 12:53:03: Current lock level: 0
2006-05-27 12:53:03: Dispatching /rsp/info to rsp/1.0
2006-05-27 12:53:03: Tokenizing url
2006-05-27 12:53:03: Found 5 elements
2006-05-27 12:53:03: Checking reponse 0
2006-05-27 12:53:03: Found it! Index: 0
2006-05-27 12:53:03: Starting rsp_info
2006-05-27 12:53:03: Gzipping output
2006-05-27 12:53:03: Added *Content-Encoding=gzip*
2006-05-27 12:53:03: Added *Vary=Accept-Encoding*
2006-05-27 12:53:03: Updating Connection from close to Close
2006-05-27 12:53:03: Added *Cache-Control=no-cache*
2006-05-27 12:53:03: Added *Expires=-1*
2006-05-27 12:53:03: Updating Content-Type from text/html to text/xml; charset=utf-8
2006-05-27 12:53:03: Entering ws_writefd
2006-05-27 12:53:03: Exiting ws_writefd
2006-05-27 12:53:03: Entering ws_emitheaders
2006-05-27 12:53:03: Emitting reponse header Expires: -1
2006-05-27 12:53:03: Entering ws_writefd
2006-05-27 12:53:03: Exiting ws_writefd
2006-05-27 12:53:03: Emitting reponse header Cache-Control: no-cache
2006-05-27 12:53:03: Entering ws_writefd
2006-05-27 12:53:03: Exiting ws_writefd
2006-05-27 12:53:03: Emitting reponse header Vary: Accept-Encoding
2006-05-27 12:53:03: Entering ws_writefd
2006-05-27 12:53:03: Exiting ws_writefd
2006-05-27 12:53:03: Emitting reponse header Content-Encoding: gzip
2006-05-27 12:53:03: Entering ws_writefd
2006-05-27 12:53:03: Exiting ws_writefd
2006-05-27 12:53:03: Emitting reponse header Content-Language: en_us
2006-05-27 12:53:03: Entering ws_writefd
2006-05-27 12:53:03: Exiting ws_writefd
2006-05-27 12:53:03: Emitting reponse header Content-Type: text/xml; charset=utf-8
2006-05-27 12:53:03: Entering ws_writefd
2006-05-27 12:53:03: Exiting ws_writefd
2006-05-27 12:53:03: Emitting reponse header Server: mt-daapd/svn-1082
2006-05-27 12:53:03: Entering ws_writefd
2006-05-27 12:53:03: Exiting ws_writefd
2006-05-27 12:53:03: Emitting reponse header Connection: Close
2006-05-27 12:53:03: Entering ws_writefd
2006-05-27 12:53:03: Exiting ws_writefd
2006-05-27 12:53:03: Emitting reponse header Date: Sat, 27 May 2006 10:53:03 GMT
2006-05-27 12:53:03: Entering ws_writefd
2006-05-27 12:53:03: Exiting ws_writefd
2006-05-27 12:53:03: Entering ws_writefd
2006-05-27 12:53:03: Exiting ws_writefd
2006-05-27 12:53:03: Exitin ws_emitheaders
2006-05-27 12:53:03: Executing: select count(*) FROM songs
2006-05-27 12:53:20: Done sending xml stream
2006-05-27 12:53:20: Entering ws_close
2006-05-27 12:53:20: Thread 0: Terminating
2006-05-27 12:53:20: Thread 0: Freeing request headers
2006-05-27 12:53:20: Entering ws_freearglist
2006-05-27 12:53:20: Exiting ws_freearglist
2006-05-27 12:53:20: Thread 0: Freeing response headers
2006-05-27 12:53:20: Entering ws_freearglist
2006-05-27 12:53:20: Exiting ws_freearglist
2006-05-27 12:53:20: Thread 0: Freeing request vars
2006-05-27 12:53:20: Entering ws_freearglist
2006-05-27 12:53:20: Exiting ws_freearglist
2006-05-27 12:53:20: Thread 0: Closing fd
2006-05-27 12:53:20: Entering ws_remove_dispatch_thread
2006-05-27 12:53:20: With thread 0 exiting, 0 are still running
2006-05-27 12:53:20: Exiting ws_remote_dispatch_thread
2006-05-27 12:53:20: Exiting ws_close (thread terminating)
2006-05-27 12:53:24: Entering ws_lock_unsafe
2006-05-27 12:53:24: Exiting ws_lock_unsafe with retval of 0
2006-05-27 12:53:24: Entering ws_add_dispatch_thread
2006-05-27 12:53:24: Exiting ws_add_dispatch_thread
2006-05-27 12:53:24: Entering ws_unlock_unsafe
2006-05-27 12:53:24: Exiting ws_unlock_unsafe with a retval of 0
2006-05-27 12:53:24: Thread 1: Entering ws_dispatcher (Connection from 192.168.9.8)
2006-05-27 12:53:24: Entering ws_lock_unsafe
2006-05-27 12:53:24: Exiting ws_lock_unsafe with retval of 0
2006-05-27 12:53:24: Entering ws_unlock_unsafe
2006-05-27 12:53:24: Exiting ws_unlock_unsafe with a retval of 0
2006-05-27 12:53:24: Thread 1: got request
2006-05-27 12:53:24: Request: GET /rsp/info HTTP/1.0
2006-05-27 12:53:24: Entering ws_getheaders
2006-05-27 12:53:24: Thread 1: Read: User-Agent: Roku SoundBridge/2.5
2006-05-27 12:53:24: Thread 1: Adding header *User-Agent=Roku SoundBridge/2.5*
2006-05-27 12:53:24: Added *User-Agent=Roku SoundBridge/2.5*
2006-05-27 12:53:24: Thread 1: Read: Host: 192.168.9.9:3689
2006-05-27 12:53:24: Thread 1: Adding header *Host=192.168.9.9:3689*
2006-05-27 12:53:24: Added *Host=192.168.9.9:3689*
2006-05-27 12:53:24: Thread 1: Read: Accept: */*
2006-05-27 12:53:24: Thread 1: Adding header *Accept=*/**
2006-05-27 12:53:24: Added *Accept=*/**
2006-05-27 12:53:24: Thread 1: Read: Authorization: Basic cm9rdTpyb2t1
2006-05-27 12:53:24: Thread 1: Adding header *Authorization=Basic cm9rdTpyb2t1*
2006-05-27 12:53:24: Added *Authorization=Basic cm9rdTpyb2t1*
2006-05-27 12:53:24: Thread 1: Read: Pragma: no-cache
2006-05-27 12:53:24: Thread 1: Adding header *Pragma=no-cache*
2006-05-27 12:53:24: Added *Pragma=no-cache*
2006-05-27 12:53:24: Thread 1: Read: accept-encoding: gzip
2006-05-27 12:53:24: Thread 1: Adding header *accept-encoding=gzip*
2006-05-27 12:53:24: Added *accept-encoding=gzip*
2006-05-27 12:53:24: Thread 1: Read: accept-codecs: wma,mpeg,wav,mp4a
2006-05-27 12:53:24: Thread 1: Adding header *accept-codecs=wma,mpeg,wav,mp4a*
2006-05-27 12:53:24: Added *accept-codecs=wma,mpeg,wav,mp4a*
2006-05-27 12:53:24: Thread 1: Read: rsp-version: 0.1
2006-05-27 12:53:24: Thread 1: Adding header *rsp-version=0.1*
2006-05-27 12:53:24: Added *rsp-version=0.1*
2006-05-27 12:53:24: Thread 1: Read: transcode-codecs: wav,mp3
2006-05-27 12:53:24: Thread 1: Adding header *transcode-codecs=wav,mp3*
2006-05-27 12:53:24: Added *transcode-codecs=wav,mp3*
2006-05-27 12:53:24: Thread 1: Read:
2006-05-27 12:53:24: Thread 1: Headers parsed!
2006-05-27 12:53:24: Exiting ws_getheaders
2006-05-27 12:53:24: Checking to see if connection matches keep-alive
2006-05-27 12:53:24: Nope!
2006-05-27 12:53:24: Thread 1: Connection type HTTP/1.0
: Connection: non-persist
2006-05-27 12:53:24: Thread 1: Original URI: /rsp/info
2006-05-27 12:53:24: Thread 1: Translated URI: /rsp/info
2006-05-27 12:53:24: Entering ws_lock_unsafe
2006-05-27 12:53:24: Exiting ws_lock_unsafe with retval of 0
2006-05-27 12:53:24: Thread 1: Preparing to find handler
2006-05-27 12:53:24: Thread 1: URI Match!
2006-05-27 12:53:24: Entering ws_unlock_unsafe
2006-05-27 12:53:24: Exiting ws_unlock_unsafe with a retval of 0
2006-05-27 12:53:24: Thread 1: Time is 1148727204 seconds after epoch
2006-05-27 12:53:24: Thread 1: Setting time header
2006-05-27 12:53:24: Added *Date=Sat, 27 May 2006 10:53:24 GMT*
2006-05-27 12:53:24: Added *Connection=close*
2006-05-27 12:53:24: Added *Server=mt-daapd/svn-1082*
2006-05-27 12:53:24: Added *Content-Type=text/html*
2006-05-27 12:53:24: Added *Content-Language=en_us*
2006-05-27 12:53:24: Thread 1: Using non-default handler
2006-05-27 12:53:24: in main_auth
2006-05-27 12:53:24: Entering candispatch
2006-05-27 12:53:24: Current lock level: 0
2006-05-27 12:53:24: Dispatching auth for /rsp/info to plugin
2006-05-27 12:53:24: Current lock level: 0
2006-05-27 12:53:24: Dispatching /rsp/info to rsp/1.0
2006-05-27 12:53:24: in main_handler
2006-05-27 12:53:24: Entering candispatch
2006-05-27 12:53:24: Current lock level: 0
2006-05-27 12:53:24: Dispatching /rsp/info to plugin
2006-05-27 12:53:24: Current lock level: 0
2006-05-27 12:53:24: Dispatching /rsp/info to rsp/1.0
2006-05-27 12:53:24: Tokenizing url
2006-05-27 12:53:24: Found 5 elements
2006-05-27 12:53:24: Checking reponse 0
2006-05-27 12:53:24: Found it! Index: 0
2006-05-27 12:53:24: Starting rsp_info
2006-05-27 12:53:24: Gzipping output
2006-05-27 12:53:24: Added *Content-Encoding=gzip*
2006-05-27 12:53:24: Added *Vary=Accept-Encoding*
2006-05-27 12:53:24: Updating Connection from close to Close
2006-05-27 12:53:24: Added *Cache-Control=no-cache*
2006-05-27 12:53:24: Added *Expires=-1*
2006-05-27 12:53:24: Updating Content-Type from text/html to text/xml; charset=utf-8
2006-05-27 12:53:24: Entering ws_writefd
2006-05-27 12:53:24: Exiting ws_writefd
2006-05-27 12:53:24: Entering ws_emitheaders
2006-05-27 12:53:24: Emitting reponse header Expires: -1
2006-05-27 12:53:24: Entering ws_writefd
2006-05-27 12:53:24: Exiting ws_writefd
2006-05-27 12:53:24: Emitting reponse header Cache-Control: no-cache
2006-05-27 12:53:24: Entering ws_writefd
2006-05-27 12:53:24: Exiting ws_writefd
2006-05-27 12:53:24: Emitting reponse header Vary: Accept-Encoding
2006-05-27 12:53:24: Entering ws_writefd
2006-05-27 12:53:24: Exiting ws_writefd
2006-05-27 12:53:24: Emitting reponse header Content-Encoding: gzip
2006-05-27 12:53:24: Entering ws_writefd
2006-05-27 12:53:24: Exiting ws_writefd
2006-05-27 12:53:24: Emitting reponse header Content-Language: en_us
2006-05-27 12:53:24: Entering ws_writefd
2006-05-27 12:53:24: Exiting ws_writefd
2006-05-27 12:53:24: Emitting reponse header Content-Type: text/xml; charset=utf-8
2006-05-27 12:53:24: Entering ws_writefd
2006-05-27 12:53:24: Exiting ws_writefd
2006-05-27 12:53:24: Emitting reponse header Server: mt-daapd/svn-1082
2006-05-27 12:53:24: Entering ws_writefd
2006-05-27 12:53:24: Exiting ws_writefd
2006-05-27 12:53:24: Emitting reponse header Connection: Close
2006-05-27 12:53:24: Entering ws_writefd
2006-05-27 12:53:24: Exiting ws_writefd
2006-05-27 12:53:24: Emitting reponse header Date: Sat, 27 May 2006 10:53:24 GMT
2006-05-27 12:53:24: Entering ws_writefd
2006-05-27 12:53:24: Exiting ws_writefd
2006-05-27 12:53:24: Entering ws_writefd
2006-05-27 12:53:24: Exiting ws_writefd
2006-05-27 12:53:24: Exitin ws_emitheaders
2006-05-27 12:53:24: Executing: select count(*) FROM songs
2006-05-27 12:53:24: Done sending xml stream
2006-05-27 12:53:24: Entering ws_close
2006-05-27 12:53:24: Thread 1: Terminating
2006-05-27 12:53:24: Thread 1: Freeing request headers
2006-05-27 12:53:24: Entering ws_freearglist
2006-05-27 12:53:24: Exiting ws_freearglist
2006-05-27 12:53:24: Thread 1: Freeing response headers
2006-05-27 12:53:24: Entering ws_freearglist
2006-05-27 12:53:24: Exiting ws_freearglist
2006-05-27 12:53:24: Thread 1: Freeing request vars
2006-05-27 12:53:24: Entering ws_freearglist
2006-05-27 12:53:24: Exiting ws_freearglist
2006-05-27 12:53:24: Thread 1: Closing fd
2006-05-27 12:53:24: Entering ws_remove_dispatch_thread
2006-05-27 12:53:24: With thread 1 exiting, 0 are still running
2006-05-27 12:53:24: Exiting ws_remote_dispatch_thread
2006-05-27 12:53:24: Exiting ws_close (thread terminating)
2006-05-27 12:53:57: Skipped bground scan... no users
2006-05-27 12:54:29: Got INT signal. Notifying daap server.
2006-05-27 12:54:29: Stopping gracefully
2006-05-27 12:54:29: Stopping rendezvous daemon
2006-05-27 12:54:29: Received a message from daap server
2006-05-27 12:54:29: Stopping mDNS
2006-05-27 12:54:29: Closing database
2006-05-27 12:54:29: Done!
BR,
Carsten. -
AuthorPosts
- The forum ‘Nightlies Feedback’ is closed to new topics and replies.