pax_global_header00006660000000000000000000000064137714201430014514gustar00rootroot0000000000000052 comment=5bcdf940ad04dc382c9185eb1cd366c797f703f4 sonata-1.7.0/000077500000000000000000000000001377142014300130065ustar00rootroot00000000000000sonata-1.7.0/.gitignore000066400000000000000000000002011377142014300147670ustar00rootroot00000000000000*.py[co] *.swp *~ mmkeys.so sonata/sonata sonata/share/locale/* tags TAGS cscope* RECORD *.egg-info/ build/ sonata/genversion.py sonata-1.7.0/.tx/000077500000000000000000000000001377142014300135175ustar00rootroot00000000000000sonata-1.7.0/.tx/config000066400000000000000000000001771377142014300147140ustar00rootroot00000000000000[main] host = https://www.transifex.com [sonata.all] file_filter = po/.po source_file = po/Sonata.pot source_lang = en sonata-1.7.0/CHANGELOG000066400000000000000000000653471377142014300142370ustar00rootroot000000000000001.7.0 (2020-12-25) ------------------ It's has been a beta since a long time, let's make it official :) Sonata now requires [python-mpd](https://github.com/Mic92/python-mpd2) >= 2.0. New features '''''''''''' * Rewind to the begin of track when pressing the "Previous" button, if the song has been read for more than 5 seconds (@supergln) https://github.com/multani/sonata/pull/102 * add "Shuffle by album" https://github.com/multani/sonata/pull/59 * repeat single song (Corentin Néau) https://github.com/multani/sonata/pull/95 Bug Fixes ''''''''' * fix refreshing profiles upon connections add/delete (Corentin Néau) https://github.com/multani/sonata/pull/92 * fix update of cover and text in fullscreen mode (Corentin Néau) https://github.com/multani/sonata/pull/93 * removed Gtk CSS warnings (Benjamin Debeerst) https://github.com/multani/sonata/pull/97 * mpd does not report volume when state is stopped https://github.com/multani/sonata/pull/105 * Compatibility fix with newer Python, GObject, python-mpd (Simon McVittie) https://github.com/multani/sonata/pull/107 https://github.com/multani/sonata/pull/108 https://github.com/multani/sonata/pull/109 https://github.com/multani/sonata/pull/110 https://github.com/multani/sonata/pull/112 * Add keywords to the .desktop file (Javi Merino) https://github.com/multani/sonata/pull/111 * Improve downloading lyrics from LyricsWiki https://github.com/multani/sonata/pull/115 1.7b1 (2016-01-31) ------------------ New features '''''''''''' * redirect to the localized Wikipedia according to the user's local, instead of redirecting to the English one. https://github.com/multani/sonata/issues/61 Bug fixes ''''''''' * fix crashs on Gtk.TextView when updating the lyrics of a song * Fix streams parsing: https://github.com/multani/sonata/issues/41 https://github.com/multani/sonata/issues/38 * fix withdrawn mode by fixing incorrect usage of threads and Gtk eco-system * choosing a local artwork wasn't working anymore * fix artwork caching * keep the selected tab when hiding/showing Sonata using the tray icon * correctly handle tracks without a definitely reasonable track or disc value (Peter Helbing) https://github.com/multani/sonata/pull/74 * fix translation of of Glade dialogs (Peter Helbing) https://github.com/multani/sonata/pull/75 * fix opening the About dialog (based on Rocus van Oosten report). Internal changes '''''''''''''''' * slightly better performance when updating the library * threading improvements: - use GIO instead of a thread to download drag-and-droped covers - remove the MPD from a dedicated thread. It works as good (if not better) as before since the threaded code was poorly written anyway and rendered the additionnal basically useless. This move is not definitive but something better will probably come up some day. * Looking for covers isn't as filesystem expensive as before, but it doesn't check for multiple possible cases in the cover name anymore. 1.7a2 (2013-11-26) ------------------ New features '''''''''''' * Download bigger covers from Last.fm * Centering the current song using Ctrl+i now also selects the current song * Use Transifex as a translation plateform. See https://www.transifex.com/projects/p/sonata/ * Update translations: - Russian (thanks Stas!) - Ukrainian (thanks Stas!) - French (thanks Jon!) Bug fixes ''''''''' * Fix search in library (using a specific filter or the 'everything' filter) * Fix scrobbling to Last.fm * Scrolling with the mouse wheel on the tray icon correctly changes the volume * Some lyrics from LyricsWiki redirects to another page. The plugin now follows those redirect to find the actual lyrics. * Fix multiple issues related to drag-and-drop of songs in the current playlist * Fix error while using Sonata's command line interface * Fix filtering songs in the current playlist * Fix DND of custom artwork images in the main window * Fix breadcrumb icon in the library while browsing an album while in Artist view * Fix saving the visibility flag of tabs: https://github.com/multani/sonata/issues/45 * Fix hiding/showing the main window even if it's not the active widget: https://github.com/multani/sonata/issues/43 * Deleting a track doesn't toggle the filter bar anymore in the current playlist. * Better support for MPD 0.18 Internal changes '''''''''''''''' * Simplified the `current` module. It should also now use less memory than before. * Provide a new GObject signal to notify on artwork change and artwork reset. 1.7a1 (2013-02-08) ------------------ New features '''''''''''' * Fetch covers from Last.fm instead of Rhapsody.com * Custom plugins are now stored along the configuration file in ~/.config/sonata/plugins/ * Switch to Python 3 and Gtk 3 (Jörg Thalheim & Adam Dane) * More items in the tray menu (Kirill Lashuk) * Better fullscreen support (Kirill Lashuk) * Toggle fullscreen from the command line (Daniel) * Support MPD's "consume" mode (Anton Lashkov) * Use more default icons in the context menus (Anton Lashkov) * Load only the most recent of plugins with the same names Bug fixes ''''''''' * Fix population of the "Save to playlist" menu (Zhihao Yuan) * Prevent multiple entries and improve art search with multi-CD albums (Kirill Lashuk) * Fixes weird show up if Sonata is not on the current workspace (Kirill Lashuk) * Scrobble after seeking to the beginning (Kirill Lashuk) * The lyricswiki plugin should now work again (Jonathan Ballet) * Fix UI status after reconnection to MPD (Jonathan Ballet) * Fix crash when searching the library (Kirill Lashuk) Internal changes '''''''''''''''' * Simpler API for cover fetching plugins * Lot of code cleanup and internal changes * Removed Sugar UI support * Use Glade files to describe the interface and GtkBuilder to build the interface * More systematic configuration file management * High-level access to MPD's command results Previous releases ----------------- v1.6.2.1 - September 21, 2009 + Library artwork caching/displaying improvements + Lyricwiki screen scraping workaround + Replace Amazon.com cover art fetching with Rhapsody.com + Bug: Fix library sorting when adding, e.g., albums to playlist + Bug: Fix window positioning weirdness when unwithdrawing from systray + Bug: Fix album being labeled various artists when a duplicate exists + Bug: Fix album tracks in the info tab being out of order sometimes + Bug: Show songs with a missing date in info album listing + Bug: Library icons change after adding stream to playlist + Bug: Cpu spike, tooltips missing in library search results with gtk 2.16.2 v1.6.2 - April 13, 2009 + Bug: Fix cli options (e.g. 'sonata play') v1.6.1 - April 11, 2009 + Reduce library's filesystem view row height + More auto-applying of preferences (e.g. format tab) + Bug: Fix python version check for Ubuntu Jaunty + Bug: Traceback if track has multiple date tags + Bug: Fix infinite loop when format strings end in '{' + Bug: Fix music directory chooser selecting the wrong folder sometimes + Bug: Catch OSErrors from os.listdir, e.g. flac files with cue sheets + Bug: Fix --profile option v1.6 - March 29, 2009 + Album browsing mode, additional details in library views + Real-time searching of library (search as you type) + Fullscreen album art mode (via right-click on artwork) (mips) + Improve library searching across meta tags + Sort library search results + Show file path in tooltip for library search results + Improved support for updating less than entire library + Drag-and-drop to copy files from Sonata to a file manager (Kamil) + Ability to show file paths in tag editing window + Use plchanges for faster performance (e.g. add to playlist) + Allow manually fetching remote art when using local art pref (Erik) + Swap mousewheel behavior for progressbar + Only minimize to trayicon on click if focused; raise if not focused + Use new 'listplaylists' command for retrieving playlists + Allow hiding the application's titlebar in preferences + Better error trapping + Make process name 'sonata' for linux (himdel) + Look for - .txt lyrics files by other clients + Add Traditional Chinese translation (b4283) + Add Japanese translation (Masato) + Add Slovenian translation (Alan) + Code modernisation, modularisation, overall cleanup, documentation + A prototype of a plug-in system + Unicode fixes + Some helpful error messages if startup fails + Useless code removed, various code cleanups and refactorings (Stephen) + Bug: Bad profiles prevent Sonata from starting + Bug: Error for CLI arguments when Sonata can't connect to MPD (Juan) + Bug: Files may not update in interface after tag editing + Bug: Traceback with Turkish locale + Bug: Lyrics don't work with python-zsi 2.0 on Ubuntu + Bug: Bell sound when going to parent folder using backspace v1.5.3 - September 13, 2008 + Quick link to edit lyrics through LyricWiki + Unicode lyrics and better searching with LyricWiki (orivej) + Store audioscrobbler password as md5 hash + Add Greek translation (Lazaros) + Bug: Fix lost connection when hard drive is spun down + Bug: Fix non-ascii characters when scrobbling with non-utf8 locale + Bug: Selected item changed on double-click + Bug: Use consistent behavior for titlebar + Bug: Prevent bad cover image files from causing problems + Bug: Don't sort library search results + Bug: Ensure image filenames are escaped in search routine v1.5.2 - June 5, 2008 + Improved artwork/lyrics caching through case-insenstive searching + Add Turkish translation (Gökmen) + Bug: Fix artwork for files with unicode characters + Bug: Fix crash if mpd library is empty + Bug: Fix regression where dbus-python became required + Bug: Bold titles lose sync if song changes with visible filterbar + Bug: Doesn't scrobble when same song is repeated + Bug: Python conflict when installed with sugar (OLPC) + Bug: Fix artwork display in song notification window for RTL languages + Bug: Fix progressbar seeking for RTL languages + Bug: No play/pause indicator in egg tray icon if started while mpd is active v1.5.1 - May 3, 2008 + Swap 'shuffle' and 'random' to be consistent with MPD + "Save list to">"foo" can now either replace playlist or append songs + Add Catalan translation (Franc) + Add Arabic translation (Ahmad) + Bug: Fix play/pause with multimedia keys (Vinay) + Bug: Prevent possible traceback from gobject.filename_from_utf8 + Bug: 'play after replace' when in shuffle mode plays 1st song, not random + Bug: Fix random, repeat, and toggle commands from console + Bug: Songs not tagged with the album name don't show up + Bug: Cannot disconnect when MPD_HOST and MPD_PORT are set + Bug: Fix %D and %N formats within brackets v1.5 - April 3, 2008 + Replace album view with genre view for library + Display covers for albums in artist/genre views + Add menu items and shortcuts for playing library items after add/replace + Allow setting artwork for streams + Optional stylized album art with cases (Aidan) + New, faster python mpd interface (jat) + --popup argument to popup song notification (requires D-Bus) (Oleg) + Show 'Untagged' artists/genres in their respective library views + Allow DND of cover art from a web browser (Артем) + Allow DND of music from a file manager into playlist (requires mpd 0.14) + Preserve column percentages for current tab across window resizing + Speed up mpd-related commandline arguments + Switch back to last tab on second cover art click + Retain selection in lists after removing items + Hidden config option to expand notebook tabs (tabs_expanded) + Set ServiceProxy cachedir for lyrics to work around ZSI bug + Add Estonian translation (Mihkel) + Bug: Fix multimedia keys for gnome 2.22 + Bug: Fix artwork for artists/albums with "/" in them (e.g. AC/DC) + Bug: Fix egg trayicon with vertical system tray + Bug: Weird bug in library-view + Bug: Prevent failure to load if tab positions are saved as None + Bug: Fix non-ascii characters in files for non-utf8 filesystems (zap) + Bug: Prevent crash with certain locales like turkish (jat) + Bug: Using filter causes playlist to jump to the top + Bug: Fix AudioScrobblerQuery (kigurai) v1.4.2 - February 9, 2008 + Add %D for disc tag in display formatting options + Better handling if no read permission (e.g. no/bad mpd password supplied) + Bug: Fix seeking in progress bar + Bug: Fix blank album info when there is an ampersand + Bug: Missing color in notification window + Bug: Notebook arrow clicks are ignored due to gtk bug + Bug: Potential ordering bug when sorting via column heading click + Bug: Make desktop file compliant + Bug: Column widths can collapse when exiting while minimized to the tray v1.4.1 - February 2, 2008 + Remove queue support (it was removed from mpd-svn, complain to them) + Improved re-ordering of playlist songs (including multiple selected songs) + Add album info into info tab + Use hand2 instead of hand1 for song info links + Bug: Traceback can occur after enabling audioscrobbler + Bug: Text background color on tabs (ecik) + Bug: Visible background of eventboxes for info tab links, etc. + Bug: Can't click (more) link in non-English locales + Bug: Crash when using libegg with system tray icon disabled + Bug: Disable tag editing link in info tab for streams/remote files + Bug: Unescape common html codes from lyrics fetching, enable formatting + Bug: The main notebook should be scrollable v1.4 - January 15, 2008 + Integrate info window into main player + Update to audioscrobbler protocol 1.2 and scrobbling bug fixes (mveers) + Implemented caching of scrobbles across client restarts + Vertically center currently playing song + Updated artwork (Adrian Chromenko) + IPv6 support for the mpd connection (Shane Kerr) + Allow screen center for notification popup + Preference for saving lyrics to music file's directory (like artwork) + Allow hiding and reordering notebook tabs (e.g. playlists, streams, info) + Retain library path when re-opening Sonata + Remove confusing 'remote only' and 'remote, then local' artwork options + Ability to hide progress bar (can create very minimal player) + Skip fallback artwork search of just album name if primary searches fail + Make system tray icon scalable + Shortcuts to search library (ctrl-h), randomize current playlist (alt-r) + Use gtk theme's link-color if available (only for gtk 2.12 and above) + Bug: Right-click menu can cause accidental actions with some gtk themes + Bug: Prevent crash on negative disc/track numbers + Bug: Filter + Edit Tags edits a different song than selected + Bug: Prevent possible exception regarding cover art on first load + Bug: Fix retrieving some non-English lyrics (ecik) + Bug: Allow MPD_HOST to override GUI + Bug: {} displays in the Current column title + Bug: Fix manpage path to be FHS compliant + Bug: Ensure that the version of ZSI is compatible with sonata v1.3 - October 29, 2007 + Playlist queue support (requires mpd 0.14 - currently mpd-svn) + Use-configurable columns in playlist by using "|" in prefs > format (xsdnyd) + Switch from SOAPpy to newer ZSI library for lyrics fetching + Use xmms-like search filter by default when user types (no more ctrl-j) + Ctrl-i shortcut to center currently playing song + Use case insensitive sorting for library (holy_robot) + Ignore "the" when sorting library in artist/album views (holy_robot) + Better logic when sorting playlists and new "dir+file" sort option (sed) + Allow saving/overwriting existing playlists and streams + Hidden config options to set browser, hide column headers + Update license to GNU GPLv3 + Added Brazilian translation (Alex Tercete Matos) + Added Danish translation (Martin Dybdal) + Bug: Fix nl.po translation causing crash + Bug: Remember playlist position when adding from library + Bug: Fixed tracebacks with certain encodings + Bug: MPD_HOST with password doesn't work on first install + Bug: Fix desktop file to match current XDG standard (nigel) + Bug: Search Amazon artwork using latin1 since it no longer supports utf8 + Bug: Possible tag editing issues w/non-latin encoding (requires tagpy 0.93) + Bug: Fix czech translation to use cs.po v1.2.3 - August 23, 2007 + Incorporate disc tag in album sorting (Emmanuel Viaud) + Significantly reduced wakeups/sec according to powertop + Add stream name as a formatting option + Added Italian translation (Gianni Vialetto) + Added Swedish translation (Daniel Nylander) + Added Dutch translation (Olivier) + Bug: Stupid parsing of amazon URLs, reduced success of cover art fetching + Bug: Default cover remains after refetching when not using ~/.covers + Bug: Czech translation incorrectly labeled Swedish + Bug: Song played after a replace is first in list, even in shuffle mode + Bug: Collapsed view doesn't work properly in some WMs (e.g. Fluxbox) + Bug: Display 'update library' menu item even when library is empty v1.2.2 - July 22, 2007 + Bug: Fix artwork fetching (Amazon gzip'ed xml returns garbage) + Bug: Prevent connection error if the interface hasn't yet been run + Bug: Prevent possibility of deleting image file when choosing local art file + Bug: Don't load gnome-settings-daemon if it's not running (kinote) v1.2.1 - July 16, 2007 + Bug: Using MPD with a password causes error v1.2 - July 15, 2007 + Audioscrobbler support (requires python 2.5 or python-elementtree) (Owen) + Support for multiple profiles (and, e.g., "sonata --profile=2") + Ability to set search terms for lyrics + Ability to rename playlists (requires mpd >= 0.13) + Prevent continually searching for artwork/lyrics if not found the first time + Search for additional artwork filenames + Allows resetting artwork to the default image + 'Save All' button for tag editing window + Display MPD status in systray icon + Prevent GUI blocking when connecting to MPD, where possible + Added Finnish translation (Ilkka Tuohela) + Bug: Multimedia keys no longer work in Gnome 2.18 (Florian) + Bug: Hide statusbar in collapse mode when showing from systray + Bug: Cover artwork filename doesn't use system's locale charset + Bug: MPD_HOST variable doesn't work when it includes password v1.1.1 - May 18, 2007 + Add Czech translation (Jakub Adler) + Bug: Incorrect artist can sometimes be set for album art/info (vEX) + Bug: Artwork isn't set when there is a single image in the song's dir + Bug: Improve handling under tiling WMs like ion3 + Bug: A 2nd instance isn't prevented with dbus/python 2.4 (Sebastian) v1.1 - May 7, 2007 + Ctrl-J for xmms-like search filter (vEX/Eduard) + Implemented logic for Various Artists albums + Cover art pref: save to ~/.covers or file's respective dir + Support for GNOME session management + Allow searching through ALL metadata in library + Link artist and album name in song info window to wikipedia entry + Add shuffle, repeat, --visible, and --hidden commandline arguments + Show if mpd is updating in statusbar + Save last used option in library search + Update code for dbus-python 0.80 API (Jordan) + Ellipsize text in treeviews, current playing song (Jordan) + Add button for listing of shortcuts to About dialog + Resize cover art to fit song info window + Added Simplified Chinese translation (Desmond Chang) + Bug: Prevent tracebacks between withdrawing app & gtk.StatusIcon + Bug: Fix error if mpd is not running and sonata starts hidden + Bug: Can't manually set artwork across filesystems + Bug: Can't use find-as-you-type in the current playlist + Bug: Right-click menu closes right away for some users v1.0.1 - February 13, 2007 + Make lyrics fetching optional + Allow editing of stream name/url + Hide the notification window when it is clicked + Small usability improvements to gtk.StatusIcon + Improvements to reordering the current playlist with drag-n-drop + Bug: Info window freezes when editing currently playing song's tags + Bug: Tag editing doesn't work with older version (0.90.1) of tagpy + Bug: Prevent strange potential freeze with gc.collect() + Bug: Cover art doesn't update correctly if Local Only artwork set + Bug: Lyrics occassionally don't stay synced with current playing song v1.0 - January 21, 2007 + Multiple views for library: filesystem, artists, albums + Editing of song tags (requires optional taglib & tagpy) + Auto-fetching of song lyrics (requires optional soappy) + Improved song info window and access to it + Allow pls/m3u/extm3u's as stream inputs + Sort current playlist (by metadata, random, reverse) + Optional statusbar (playlist length, time) + Revert to gtk's StatusIcon if gnome-python-extras isn't installed + Make system tray icon optional + Pref to write xmms-info like status file to use with IM, IRC.. (Tim) + Allow drag-n-drop of images to set album art + If there is only one image in the song's dir, set as art (Ivan) + Album art priority preference (local vs remove) + Formatting options (genre, song length, elapsed time, year) (Ivan) + Pref to play enqueued items on activate (i.e. enter/double-click) + Play friendler with other clients for shuffle/repeat/crossfade + Reduced startup time/memory usage + Use curly brackets {} to have formatting appear only if all enclosed tags are available + Ability to run on OLPC's Sugar user environment (Owen) + Added Ukranian translation (Господарисько Тарас) + Bug: No more freezes due to threading! Finally! Seriously! + Bug: Cannot set album art for album/artist with "/" in name + Bug: Prevent interface jumping because of progress bar font + Bug: Notification window isn't positioned correctly for dual-head v0.9 - November 19, 2006 + Added stream support + Use local artwork (cover.jpg, folder.jpg) first, if it exists (requires music_directory to be specified in preferences) + Allow crossfading (mixing) between songs + Fetch higher-resolution cover art + Allow specifying search terms for remote album art + Improved song info viewer + Make remote images window non-blocking + Popup song notification on un-pause + Pick up tooltip album background color from gtk theme + Store cover art in ~/.covers for consistency with gmpc + Add German translation (Paul Johnson) + Bug: Prevent infrequent crash when fetching album art + Bug: Intermittent interface freezes due to threading + Bug: Unable to delete playlists with ampersand, etc. + Bug: Player can become the wrong height on expand + Bug: Ensure local art is correctly applied on song changes + Bug: Searching library doesn't work for non-english locale v0.8.1 - October 19, 2006 + Add Polish translation (Tomasz Dominikowski) + Bug: Correctly send mpd password when using manual connect + Bug: Prevent certain keys from causing events + Bug: Prevent potential crash if not able to obtain mpd status v0.8 - October 7, 2006 + Allow user formatting of current playlist, library, and title + Pref for song notification location + Allow song notification for users without gnome-python-extras + Pref to hide playback buttons + Pref to update MPD library on start + --info, --status displays current song info or MPD status + Pref to autoconnect on start, connect/disconnect buttons + Fetch album art in background (non-blocking) + Correctly retain previous library state when ending search + Add russian translation [Andrew Lukoshko] + Bug: Display path when filename is empty or http/ftp prefixes + Bug: Fix crash if changing connection w/o gnome-python-extras + Bug: Prevent --help, --toggle, etc. from happening twice if dbus is installed + Bug: Some shortcuts don't work with numslock enabled v0.7.1 - September 27, 2006 + Bug: Fix crash if dbus is not installed + Bug: Fix crash if song does not have some id3 info specified v0.7 - September 27, 2006 + Ability to search library by type (can be disabled in prefs) + Optional notification popup on song changes + Show larger image on left-click of cover art + Reduce (pygmy's) default polling time + Retain selection of browsed directories in library + Retain selection after drag-n-drop + Keep width of tooltip fixed + Show previous instance of app if user tries to open a second instance [Mike Massonnet patch] + Add --version, --help; print usage + --toggle argument to minimize to tray or show (requires D-Bus) + Add french translation [Floréal M] + Additional shortcuts (see docs) + Bug: repeat/shuffle isn't updated if mpd is restarted + Bug: Unable to delete multiple playlists at once + Bug: Crash when playing ogg streams [patch] v0.6 - September 18, 2006 + Add support for playlists (save, load, queue, delete) + Ability to use local image for album cover + Support for multimedia keys + Fetch cover art if an artist, but not album, is specified + Add Ctrl-U and Ctrl-Shift-U for updating library (see docs) + (Re-)display systray icon if tray is (re-)opened + Fix mpdclient3.py to return all playlist objects + Bug: Delete key doesn't remove songs from playlist v0.5.2 - September 15, 2006 + Correctly update interface after updating MPD library + Interface prefs: show album art, show volume, sticky, above + Behavior prefs: minimize to systray, stop playback on exit + Increase iter time if connection timesout (to make gui responsive) + Use gtk.STOCK_JUSTIFY_FILL instead of custom playlist icon + Try gnome-open/exo-open first for opening help, then fallback + Ability to set translations (see TRANSLATIONS file) + Use dbus to prevent multiple instances + More shortcuts (see documentation) + Minor bugfixes v0.5.1 - September 13, 2006 + Increment to mpdclient3 to prevent incompatibility issues + Bug: Running Sonata without systray causes crash v0.5 - September 12, 2006 + Added album art (and ability to choose from alternatives if the one automatically selected is incorrect, via right-click) + Integrate playlist and library into one app + Change song progress with mousewheel over progressbar + Change volume with mousewheel over volume button, systray icon + Change volume icon based on volume level + Added playback, etc, shortcuts + Added Replace menu and dir/file icons to library browser + Removed toolbar, cleaned up interface + Removed horizontal scrollbar + Don't update systray icon based on playback status + Moved config to freedesktop.org standard + Keep app width constant when (un)expanding + Keep currently playing song visible in list + Removed python-empy, glade + Bug: mpdclient2/app doesn't accept passwords (crash) + Bug: mdpclient2 - lsinfo skips the first file found after dirs + Bug: Cannot remove multiple rows from right-click + Bug: Crash if user has MPD connection but no read access + Bug: GTK+ treeview search does not work + Bug: Right-Click checkbox doesnt set value on start + Bug: Doesn't properly retain view when browsing playlist + Added documentation + Other bugfixes, tweaks # vim:ft=rst �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/CONTRIBUTING.rst�����������������������������������������������������������������������0000664�0000000�0000000�00000003671�13771420143�0015456�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Contributing ============ If you are interested to hack on Sonata, please consider the following: #. Clone the repository or fork it on Github; #. **For each** feature, bug fix, refactor, anything, you want to submit, create a branch with a name which reflects what you want to do; #. Commit your changes related to *this* thing in this branch; #. Signal your changes with one of the following: * open a pull request on Github; * send a mail to jon@multani.info with the URL of your repository, the name of the branch you want to be merged, and a meaningful description of your work; * or send me your patch(es) to jon@multani.info using ``git send-email``. I hate, hate, *hate* having to review commits touching lot of unrelated things, this is the easiest way for your changes not to be merged. Try to stay focus on one clearly defined thing and it should be much easier to merge. Translations ------------ .. note:: See the `TRANSLATORS` file for more information! You can translate Sonata using the `dedicated Transifex project page <https://www.transifex.com/projects/p/sonata/>`_. Sonata's translation can be done via the `Transifex`_ plateform. You need to subscribe to `Transifex`_ first, then to add yourself as a member of the `Transifex Sonata`_ project under the language your are interested to translate into. Once a translation is done, *be sure to contact the maintainer of Sonata* to announce there's a new translation to include! Website ------- The website content is hosted in the `website directory in Git <https://github.com/multani/sonata/tree/master/website>`. You can provide an update by submitting a pull request or sending a patch, as explained above, on this repository. .. note: Sonata's website is now hosted on Savannah, which requires the website's content to be uploaded through CVS. This is not really optimal, but have a look at http://savannah.gnu.org/maintenance/HomepageUpload/ for reference. �����������������������������������������������������������������������sonata-1.7.0/COPYING��������������������������������������������������������������������������������0000664�0000000�0000000�00000104513�13771420143�0014045�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. <one line to give the program's name and a brief idea of what it does.> Copyright (C) <year> <name of author> This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: <program> Copyright (C) <year> <name of author> This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see <http://www.gnu.org/licenses/>. The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read <http://www.gnu.org/philosophy/why-not-lgpl.html>. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/PLUGINS.rst����������������������������������������������������������������������������0000664�0000000�0000000�00000005050�13771420143�0014661�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������================================ Plugins documentation for Sonata ================================ This document explains how to write plugins for Sonata, a Gtk client for the `Music Player Daemon`_. Plugin metadata =============== TODO Plugin entr-points ================== This is the list of entry-points that plugins can hook into Sonata ``cover_fetching(artist, album, on_save_callback, on_error_callback)`` ---------------------------------------------------------------------- * ``on_save_callback(fp)``: takes a file-like object as argument, and will save its content in a place known by Sonata. However successful the saving was, it returns ``True`` if the plugin should *continue* to download more covers, or ``False`` if the plugin should *stop* to download covers. * ``on_error_callback(reason=None)``: takes an optionnal `reason` as argument. This must be call if something wrong happens while fetching a cover. This returns ``True`` to indicate that the plugin shoud *stop* fetching new covers, or ``False`` if the plugin should *continue* fetching new covers. This entry-point is called when Sonata is requesting a plugin to get a cover for the specified ``album`` played by the ``artist``. On finding new covers, the plugin has to call the ``on_save_callback`` callback, passing the content of the cover as a file-like object. If finding a specific cover fails, the plugin should call ``on_error_callback``, passing a possible `reason` why it fails. Depending on the return value of the callbacks, the plugin should continue or stop fetching new covers. .. note:: The reasoning behind both callbacks are as follow: * the plugin doesn't have to be responsible of saving the content of the cover on the file system, Sonata will do it. * the plugin should be told when there are enough covers fetched. This can be a hard limit, ranging from 1 (get me the first cover) to (currently) 50 (get me all the covers that you can find and the user will choose the right one). This can also be a way to tell the plugin that the user has enough covers and there's no need to download more (the user already picked up the right cover). * the plugin should not stop in an "infinite", un-stoppable loop. Hence, even if fetching a cover fails, the plugin should notify Sonata it tried to get one, so it can either be stopped, or get a chance to find more. ``lyrics_fetching`` ------------------- TODO ``playing_song_observers`` -------------------------- TODO .. _Music Player Daemon: http://musicpd.org ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/README.rst�����������������������������������������������������������������������������0000664�0000000�0000000�00000011065�13771420143�0014500�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Sonata is looking for new maintainers! ====================================== I (`@multani <https://github.com/multani/>`_) don't use Sonata much anymore and as a consequence, I've been very slow to answer even to the few bugs reported and pull requests from external contributors. If you are still interested in Sonata and would like to see it alive again, please contact me by email to see what we can do! Sonata, an elegant GTK 3 client for the `Music Player Daemon`_ ============================================================== Sonata is a client for the `Music Player Daemon`_ featuring: + Expanded and collapsed views, fullscreen album art mode + Automatic remote and local album art + Library browsing by folders, or by genre/artist/album + User-configurable columns + Automatic fetching of lyrics and covers + Playlist and stream support + Support for editing song tags + Drag-and-drop to copy files + Popup notification + Library and playlist searching, filter as you type + Audioscrobbler (Last.fm) 1.2 support + Multiple MPD profiles + Keyboard friendly + Support for multimedia keys + Commandline control + Available in 24 languages Sonata is written using the `Python programming language`_ and uses the GTK 3 toolkit. Sonata started as a fork of the Pygmy project and is licensed under the GPLv3 or later. Thanks to Andrew Conkling et al, for all their hard work on Pygmy! Using Sonata ============ Requirements ------------ In order to run Sonata, you will need the following dependencies: * Python >= 3.2 * `PyGObject`_ (aka Python GObject Introspection) (3.7.4 or more recommended, earlier versions may also work) * GTK >= 3.4 * `python-mpd2` >= 2.0 * MPD >= 0.15 (possibly on another computer) * tagpy >= 2013.1 for editing metadata (Optional) * dbus-python for multimedia keys (Optional) .. warning: Sonata depends on `PyGObject`_ which is still quite new and gets regular fixes. Although versions 3.4.x shipped in most distributions at the time of writing are OK most of the time, unexpected bugs may occur which are fixed by more recent versions. Sonata can currently be downloaded from the Git repository using:: $ git clone git://github.com/multani/sonata.git $ cd sonata To run Sonata, you can either install it in a dedicated directory (as root):: # python setup.py install Or you can run it straight from the directory (without prior installation):: $ ./run-sonata Sonata in Linux distributions ----------------------------- You can find on the website `official releases of Sonata packaged in various distributions <http://www.nongnu.org/download.html>`_. Development version ''''''''''''''''''' This development version of Sonata is also available in several distributions: .. note:: For distribution-specific comments, please contact the packagers at the specified URLs! * Archlinux: available in `AUR as sonata-git <https://aur.archlinux.org/packages/sonata-git/>`_ * Gentoo: available in the `stuff overlay`_:: sudo layman -a stuff sudo emerge -av =sonata-9999 Website, documentation, help, etc. ================================== You can find the official documentation on `Sonata's website <http://www.nongnu.org/sonata/documentation.html>`. You can ask for feature requests or report bugs on Github at `<https://github.com/multani/sonata/issues>`. There's a (somewhat alive) mailing list available at `<https://lists.nongnu.org/mailman/listinfo/sonata-users>`. See also ======== You can also find Sonata in other places on the Internet: * http://sonata.berlios.de/ : this was the original Sonata website but Berlios shut down this hosting facility somewhere in March 2014 along with the mailing list. * http://codingteam.net/project/sonata/ : this is another fork with a different team and different perspectives. Our code bases diverge quite a bit now. Copyright ========= * Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> * Copyright 2009-2020 Jonathan Ballet <jon@multani.info> Sonata is currently developed by Jonathan Ballet <jon@multani.info> and other contributors. Many thanks to the past developers: * Scott Horowitz <stonecrest@gmail.com> * Tuukka Hastrup <Tuukka.Hastrup@iki.fi> * Stephen Boyd <bebarino@gmail.com> .. _Music Player Daemon: http://musicpd.org .. _PyGObject: https://live.gnome.org/PyGObject .. _python-mpd2: http://pypi.python.org/pypi/python-mpd2/ .. _python programming language: http://www.python.org/ .. _transifex: https://www.transifex.com .. _transifex sonata: https://www.transifex.com/projects/p/sonata/ .. _stuff overlay: https://github.com/megabaks/stuff/tree/master/media-sound/sonata ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/TODO�����������������������������������������������������������������������������������0000664�0000000�0000000�00000015301�13771420143�0013476�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Cleanup: -------- * remove useless self. (start in Stream, Playlist) so that we really know the locality of things * extract constants (path for config and directories) so they can be reused (no more magic values) * try: play more with Gtk signals: don't overtest self.conn but disconnect signals when not connected to MPD, and reconnect signals when connected to MPD again? * improve perf * must start faster (as fast as py2/gtk2 at least) * improve *PyGObject* perfs first? * rework artwork cache (broken since 12df68). Is it really useful? * lyrics: * check why at startup unkown lyrics are fetched 2 or 3 times, and fix it Plugins: -------- * instead of:: lyrics_fetchers = pluginsystem.get('lyrics_fetching') if lyrics_fetchers: for plugin, get_lyrics in lyrics_fetchers: have something like:: pluginsystem.execute('lyrics_fetching', callback_one_plugin, *args, **kwargs) * work on plugin repositories (see https://github.com/multani/sonata/pull/17) * load/reload new plugins without restart * find an API to limit global states in plugin (no need to have globals as such) * make plugins easier to write: * limit the work to be done in the plugin (if it needs to be done in each plugin, then there's a problem): * see stuff like https://github.com/multani/sonata/commit/e5a966de350daa19a5adbb9ec78c29334bab74fa * provide more API to access Sonata's content/features: * save/restore config values * fix cover plugin: it always download the first cover, even if another one has been selected * fix cover plugin: doesn't download any cover when several cover plugins are enabled UI: --- * remote artwork dialog: * on no result, display the message in the middle, disable "can be selected" state, disable 'OK' button * library: * browse an album with a cover -> the cover appears in the breadcrumb. Close Sonata, reopen, go to Libraryy again -> the album is already browsed, but the cover doesn't appear in the breadcrumd (need to go to the Album view again, load all the covers, then it works) * lyrics: * when no lyrics, improve the rendering (writing "No lyric" or "Fetching lyrics failed" instead of the lyrics is not very nice/pretty...) * general: * remove the hard-coded shortcuts in the About a window and try to regenerate them from Gtk.AccelMap.get(): they are obsolete, they are a pain in the ass to gather by hand, and they are probably all set up in this map anyway. * current: * consume mode slow when changing song (rebuild of the model after each songs?) Gtk 3: ------ * in Info tab, more/less should hide boxes containing both labels, instead of hiding each labels separately * remove other deprecated calls: * GtkBox -> GtkGrid ? * size_request() -> get_preferrred_width/height CLI: ---- * delete class Args (useless) * use argparse instead * remove local imports + globals to modules (W. T. F. ?!) * simplify the best we can (do we need all those _execute_() methods?) Threads: -------- * log with thread-id enable, and see what's going on * do we have to access MPD from different threads (Mic92 from python-mpd says the module is not thread-safe, but Sonata steps clearly on this). * codingteam has a number of thread-related issues reported. Fix those, look for similar pattern to see if they can be fixed as well * **ultimately: remove as much threading code as possible** MPD: ---- * implements missing MPD features: * stickers (need to found a common database for stickers' values, cf. http://sourceforge.net/mailarchive/forum.php?thread_name=50E7F811.50607%40beatradar.no&forum_name=musicpd-dev-team) * idle-mode * what else? * if playlists change while Sonata is running, the playlists' list desn't get refreshed * bug when creating a playlist with a "/" (forbidden by MPD, but Sonata should konw how to react) * bug when renaming playlist (see mpd log from Sonata, can't rename same playlist twice) * if was connected and MPD is shutdown, it sometimes log "Already connected" -> what's happening? Old TODO file ============= :: v1.6.3 sonata freezes with gail/accessibility enabled during new library searching translations - bold, commas for arabic (ahmad farghal email) #3992: enabling/disabling outputs #4370: number in playlist contextual statusbar depending on tab opened? (michael email) save to playlist.. default to selected files? pref? tag editing - support for composer, disc song queue (mpd-git will be bringing it back) search results - show albums, artists, genres that match right-click on tab bar (michael email) 0.15 has input support for last.fm radio v1.7 albumartist tag for, e.g., VA albums; composer for classical plugin support - single instance, mmkeys (could remove dbus; faster on startup, less memory) - artwork - lyrics - system tray - audioscrobbler - popup notification - tag editing - #2419 dynamic playlist (patch) - #2454 Add as Next Track (patch) - #4007 stop after track ('single' command in 0.15) - #Zeroconf/avahi (patch) Future: support for new idle command (waiting on python-mpd) work with mpd's new "allow authenticated local users to add any local file to the playlist" - waiting on python-mpd to implement unix socket paths - dnd from a file manager (implemented and untested because of above) - new library browsing mode to open any file? remember: no tags and implications for remote mpd users. crop songs in current playlist? mpd statistics better playlist support (mpd 0.13+ only): ability to view songs, reorder songs, remove songs, etc lazy loading of the treeview http://log.emmanuelebassi.net/documentation/lazy-loading/ http://blogs.gnome.org/jamesh/2006/03/31/re-lazy-loading/ clean-up extract duplicate code into functions, classes etc. document interfaces and implementation modularity: - limit module size to 1000 lines - limit dependencies between modules style: - rewrite unpythonic or complicated parts - fix reasonable pychecker/pylint warnings tests: - write automated tests - refactor code into parts that can be tested exceptions: - add class restrictions to most "except:" clauses - add debug logging to most except clauses threading: - design, document, and implement a bug-free use of threads ``` # vim:ft=rst tw=80 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/TRANSLATORS����������������������������������������������������������������������������0000664�0000000�0000000�00000006133�13771420143�0014550�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Sonata provides a quick and easy way of creating a translation for your language. If you find this software useful and are capable of adding a language that has not yet been translated, it would be greatly appreciated. Sonata uses the `Transifex plateform <https://www.transifex.com/projects/p/sonata/>`_ as a translation helping plateform, although you can probably also use any `gettext` compatible translation editor. In order to add a new translation or update a new translation, you can subscribe to the `Transifex <https://www.transifex.com>`_ project and add yourself to the team of translators according to your preferred language on the `Sonata project page <https://www.transifex.com/projects/p/sonata/>`_. Once you have a new translation ready, feel free to contact the Sonat's mailing list at sonata@lists.berlis.de (registration required at https://lists.nongnu.org/mailman/listinfo/sonata beforehand) or to contact the author by email so your translation will be included in the next release! Instrutions (mostly for developers) =================================== Using Transifex --------------- You need the `Transifex client <http://help.transifex.com/features/client/>`_ and to configure your Transifex configuration file (probably ``~/.transifexrc``) according to `the official documentation <http://help.transifex.com/features/client/#transifexrc>`_:: [https://www.transifex.com] hostname = https://www.transifex.com token = username = YOUR TRANSIFEX USERNAME password = YOUR TRANSIFEX PASSWORD You can use then the ``tx`` command line tool to get or send the translation files from/to Transifex: To refresh the translation strings on Transifex (so that new translation strings are available to translators):: $ tx push -s To get/update translations from/to Transifex:: $ tx pull -l fr # Get the latest French translation from transifex.com ... $ tx push -t fr # Send the latest French translation to transifex.com You can read the `officiel Transifex documentation <http://help.transifex.com/features/client/>`_ for more information about using the Transifex client. Managing the translation without Transifex ------------------------------------------ You can use the script in ``script/update-po`` which wraps ``intltool``, or directly ``intltool`` if you want, to manage the translation directly from the Sonata repository. .. warning:: Note that Transifex is the preferred plateform to manage translations, and that it should be keep up-to-date with respect to the content of the source tree. Adding a new translation '''''''''''''''''''''''' 1. Download the latest sources with git $ git clone git://github.com/multani/sonata 2. Generate a template $ cd po $ intltool-update -p $ mv untiled.pot <LANGCODE>.po 3. Translate the strings Updating an existing translation '''''''''''''''''''''''''''''''' 1. Download the latest sources with git $ git clone git://github.com/multani/sonata 2. Update the po file for the language you're updating $ intltool-update <LANGCODE> 3. Translate any strings that are new or fuzzy .. vim:ft=rst �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/po/������������������������������������������������������������������������������������0000775�0000000�0000000�00000000000�13771420143�0013424�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/po/POTFILES.in�������������������������������������������������������������������������0000664�0000000�0000000�00000000733�13771420143�0015204�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata/about.py sonata/cli.py sonata/dbus_plugin.py sonata/formatting.py sonata/info.py sonata/library.py sonata/main.py sonata/playlists.py sonata/plugins/localmpd.py sonata/plugins/ui/localmpd.glade sonata/preferences.py sonata/streams.py sonata/tagedit.py sonata/ui/about.glade sonata/ui/current.glade sonata/ui/info.glade sonata/ui/library.glade sonata/ui/playlists.glade sonata/ui/preferences.glade sonata/ui/sonata.glade sonata/ui/streams.glade sonata/ui/tagedit.glade �������������������������������������sonata-1.7.0/po/POTFILES.skip�����������������������������������������������������������������������0000664�0000000�0000000�00000000034�13771420143�0015536�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������build/ sonata/genversion.py ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/po/Sonata.pot��������������������������������������������������������������������������0000664�0000000�0000000�00000070036�13771420143�0015403�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-07-08 19:07+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #. define the shortcuts and their descriptions #. these are all gettextable #. Keep them here (not as XML) as they're more convenient this way #: ../sonata/about.py:41 msgid "About Sonata" msgstr "" #: ../sonata/about.py:42 ../sonata/ui/preferences.glade.h:5 msgid "Preferences" msgstr "" #: ../sonata/about.py:43 msgid "Fullscreen Artwork Mode" msgstr "" #: ../sonata/about.py:44 msgid "Switch to [1st-5th] tab" msgstr "" #: ../sonata/about.py:45 msgid "Connect to MPD" msgstr "" #: ../sonata/about.py:46 msgid "Disconnect from MPD" msgstr "" #: ../sonata/about.py:47 msgid "Randomize current playlist" msgstr "" #: ../sonata/about.py:48 msgid "Expand player" msgstr "" #: ../sonata/about.py:49 msgid "Switch to previous tab" msgstr "" #: ../sonata/about.py:50 msgid "Switch to next tab" msgstr "" #: ../sonata/about.py:51 msgid "Collapse player" msgstr "" #: ../sonata/about.py:52 ../sonata/ui/library.glade.h:2 msgid "Search library" msgstr "" #: ../sonata/about.py:53 msgid "Quit" msgstr "" #: ../sonata/about.py:54 msgid "Update entire library" msgstr "" #: ../sonata/about.py:55 msgid "Display popup menu" msgstr "" #: ../sonata/about.py:56 msgid "Minimize to system tray (if enabled)" msgstr "" #: ../sonata/about.py:58 msgid "Previous track" msgstr "" #: ../sonata/about.py:59 msgid "Next track" msgstr "" #: ../sonata/about.py:60 msgid "Play/Pause" msgstr "" #: ../sonata/about.py:61 msgid "Stop" msgstr "" #: ../sonata/about.py:62 msgid "Lower the volume" msgstr "" #: ../sonata/about.py:63 msgid "Raise the volume" msgstr "" #: ../sonata/about.py:65 msgid "Play selected song" msgstr "" #: ../sonata/about.py:66 msgid "Remove selected song(s)" msgstr "" #: ../sonata/about.py:67 msgid "Center currently playing song" msgstr "" #: ../sonata/about.py:68 ../sonata/about.py:77 msgid "Edit selected song's tags" msgstr "" #: ../sonata/about.py:69 msgid "Save to new playlist" msgstr "" #: ../sonata/about.py:70 msgid "Clear list" msgstr "" #: ../sonata/about.py:71 msgid "Randomize list" msgstr "" #: ../sonata/about.py:73 msgid "Add selected song(s) or enter directory" msgstr "" #: ../sonata/about.py:74 msgid "Go to parent directory" msgstr "" #: ../sonata/about.py:75 msgid "Add selected item(s)" msgstr "" #: ../sonata/about.py:76 msgid "Replace with selected item(s)" msgstr "" #: ../sonata/about.py:78 msgid "Add selected item(s) and play" msgstr "" #: ../sonata/about.py:79 msgid "Replace with selected item(s) and play" msgstr "" #: ../sonata/about.py:80 msgid "Update selected item(s)/path(s)" msgstr "" #: ../sonata/about.py:82 ../sonata/about.py:84 msgid "Add selected playlist(s)" msgstr "" #: ../sonata/about.py:83 msgid "Remove selected playlist(s)" msgstr "" #: ../sonata/about.py:85 msgid "Replace with selected playlist(s)" msgstr "" #: ../sonata/about.py:86 msgid "Add selected playlist(s) and play" msgstr "" #: ../sonata/about.py:90 ../sonata/about.py:92 msgid "Add selected stream(s)" msgstr "" #: ../sonata/about.py:91 msgid "Remove selected stream(s)" msgstr "" #: ../sonata/about.py:93 msgid "Replace with selected stream(s)" msgstr "" #: ../sonata/about.py:94 msgid "Add selected stream(s) and play" msgstr "" #: ../sonata/about.py:98 msgid "Edit playing song's tags" msgstr "" #. define the main array- this adds headings to each section of #. shortcuts that will be displayed #: ../sonata/about.py:101 msgid "Main Shortcuts" msgstr "" #: ../sonata/about.py:102 msgid "Playback Shortcuts" msgstr "" #: ../sonata/about.py:103 msgid "Current Shortcuts" msgstr "" #: ../sonata/about.py:104 msgid "Library Shortcuts" msgstr "" #: ../sonata/about.py:105 msgid "Playlist Shortcuts" msgstr "" #: ../sonata/about.py:106 msgid "Stream Shortcuts" msgstr "" #: ../sonata/about.py:107 msgid "Info Shortcuts" msgstr "" #: ../sonata/about.py:144 msgid "{count} song." msgid_plural "{count} songs." msgstr[0] "" msgstr[1] "" #: ../sonata/about.py:147 msgid "{count} album." msgid_plural "{count} albums." msgstr[0] "" msgstr[1] "" #: ../sonata/about.py:150 msgid "{count} artist." msgid_plural "{count} artists." msgstr[0] "" msgstr[1] "" #: ../sonata/about.py:160 msgid "{count} day of bliss." msgid_plural "{count} days of bliss." msgstr[0] "" msgstr[1] "" #: ../sonata/about.py:164 msgid "{count} hour of bliss." msgid_plural "{count} hours of bliss." msgstr[0] "" msgstr[1] "" #. toggle and popup and fullscreen need d-bus and don't always need gui #. version and help don't need anything and exit without gui #. hidden and visible are only applicable when gui is launched #. profile and no-start don't need anything #: ../sonata/cli.py:35 msgid "%prog [OPTION]... [COMMAND]..." msgstr "" #: ../sonata/cli.py:36 msgid "Commands:" msgstr "" #: ../sonata/cli.py:37 msgid "play song in playlist" msgstr "" #: ../sonata/cli.py:38 msgid "pause currently playing song" msgstr "" #: ../sonata/cli.py:39 msgid "stop currently playing song" msgstr "" #: ../sonata/cli.py:40 msgid "play next song in playlist" msgstr "" #: ../sonata/cli.py:41 msgid "play previous song in playlist" msgstr "" #: ../sonata/cli.py:42 msgid "toggle play/pause; plays if stopped" msgstr "" #: ../sonata/cli.py:43 msgid "toggle repeat mode" msgstr "" #: ../sonata/cli.py:44 msgid "toggle random mode" msgstr "" #: ../sonata/cli.py:45 msgid "display current song info" msgstr "" #: ../sonata/cli.py:46 msgid "display MPD status" msgstr "" #: ../sonata/cli.py:53 msgid "popup song notification (requires D-Bus)" msgstr "" #: ../sonata/cli.py:56 msgid "" "toggles whether the app is minimized to the tray or visible (requires D-Bus)" msgstr "" #: ../sonata/cli.py:59 msgid "go fullscreen (requires D-Bus)" msgstr "" #: ../sonata/cli.py:62 msgid "don't start app if D-Bus commands fail" msgstr "" #: ../sonata/cli.py:65 msgid "start app hidden (requires systray)" msgstr "" #: ../sonata/cli.py:68 msgid "start app visible (requires systray)" msgstr "" #: ../sonata/cli.py:70 msgid "start with profile NUM" msgstr "" #: ../sonata/cli.py:73 msgid "start app with a interactive (ipython) shell" msgstr "" #: ../sonata/cli.py:76 msgid "Increase log verbosity" msgstr "" #: ../sonata/cli.py:79 msgid "Decrease log verbosity" msgstr "" #: ../sonata/cli.py:99 #, python-format msgid "unknown command %s" msgstr "" #: ../sonata/cli.py:105 msgid "toggle and popup options require D-Bus. Aborting." msgstr "" #: ../sonata/cli.py:127 #, python-format msgid "Starting Sonata with profile %s..." msgstr "" #: ../sonata/cli.py:131 #, python-format msgid "%d is not an available profile number." msgstr "" #: ../sonata/cli.py:133 #, python-format msgid "Profile numbers must be between 1 and %d." msgstr "" #: ../sonata/cli.py:153 ../sonata/main.py:171 msgid "Default Profile" msgstr "" #: ../sonata/cli.py:154 msgid "by" msgstr "" #: ../sonata/cli.py:154 msgid "from" msgstr "" #: ../sonata/cli.py:177 msgid "" "Unable to connect to MPD.\n" "Please check your Sonata preferences or MPD_HOST/MPD_PORT environment " "variables." msgstr "" #: ../sonata/cli.py:216 ../sonata/library.py:60 ../sonata/ui/library.glade.h:5 msgid "Title" msgstr "" #: ../sonata/cli.py:217 ../sonata/formatting.py:102 ../sonata/library.py:60 #: ../sonata/ui/library.glade.h:4 msgid "Artist" msgstr "" #: ../sonata/cli.py:218 ../sonata/formatting.py:103 ../sonata/library.py:60 #: ../sonata/ui/library.glade.h:6 msgid "Album" msgstr "" #: ../sonata/cli.py:219 msgid "Date" msgstr "" #: ../sonata/cli.py:220 ../sonata/formatting.py:104 msgid "Track" msgstr "" #: ../sonata/cli.py:221 ../sonata/formatting.py:108 ../sonata/library.py:60 #: ../sonata/ui/library.glade.h:7 msgid "Genre" msgstr "" #: ../sonata/cli.py:222 ../sonata/formatting.py:111 msgid "File" msgstr "" #: ../sonata/cli.py:236 ../sonata/cli.py:238 msgid "Time" msgstr "" #: ../sonata/cli.py:239 msgid "Bitrate" msgstr "" #: ../sonata/cli.py:242 msgid "MPD stopped" msgstr "" #: ../sonata/cli.py:246 msgid "Playing" msgstr "" #: ../sonata/cli.py:247 msgid "Paused" msgstr "" #: ../sonata/cli.py:248 ../sonata/main.py:630 ../sonata/main.py:1640 #: ../sonata/main.py:1654 msgid "Stopped" msgstr "" #: ../sonata/cli.py:249 msgid "State" msgstr "" #: ../sonata/cli.py:251 msgid "Repeat:" msgstr "" #: ../sonata/cli.py:251 ../sonata/cli.py:253 msgid "On" msgstr "" #: ../sonata/cli.py:252 ../sonata/cli.py:254 msgid "Off" msgstr "" #: ../sonata/cli.py:253 msgid "Random:" msgstr "" #: ../sonata/cli.py:255 msgid "Volume" msgstr "" #: ../sonata/cli.py:256 msgid "Crossfade" msgstr "" #: ../sonata/cli.py:257 ../sonata/preferences.py:194 msgid "second" msgid_plural "seconds" msgstr[0] "" msgstr[1] "" #: ../sonata/dbus_plugin.py:101 msgid "" "Sonata failed to connect to the D-BUS session bus: Unable to determine the " "address of the message bus (try 'man dbus-launch' and 'man dbus-daemon' for " "help)\")" msgstr "" #: ../sonata/dbus_plugin.py:121 msgid "Failed to execute remote commands." msgstr "" #: ../sonata/dbus_plugin.py:123 msgid "Starting Sonata instead..." msgstr "" #. TODO: should we log the exception here? #: ../sonata/dbus_plugin.py:126 msgid "Maybe Sonata is not running?" msgstr "" #: ../sonata/formatting.py:28 msgid "Unknown" msgstr "" #: ../sonata/formatting.py:102 msgid "Artist name" msgstr "" #: ../sonata/formatting.py:103 msgid "Album name" msgstr "" #: ../sonata/formatting.py:104 msgid "Track name" msgstr "" #: ../sonata/formatting.py:105 msgid "Track number" msgstr "" #: ../sonata/formatting.py:105 ../sonata/formatting.py:106 msgid "#" msgstr "" #: ../sonata/formatting.py:106 msgid "Disc number" msgstr "" #: ../sonata/formatting.py:107 msgid "Year" msgstr "" #: ../sonata/formatting.py:109 msgid "File path" msgstr "" #: ../sonata/formatting.py:109 ../sonata/library.py:1028 msgid "Path" msgstr "" #: ../sonata/formatting.py:111 msgid "File name" msgstr "" #: ../sonata/formatting.py:113 msgid "Stream name" msgstr "" #: ../sonata/formatting.py:113 msgid "Stream" msgstr "" #: ../sonata/formatting.py:114 msgid "Song length" msgstr "" #: ../sonata/formatting.py:114 msgid "Len" msgstr "" #: ../sonata/formatting.py:115 msgid "Elapsed time (title only)" msgstr "" #: ../sonata/info.py:155 msgid "hide" msgstr "" #: ../sonata/info.py:158 msgid "more" msgstr "" #: ../sonata/info.py:243 msgid "Album name not set." msgstr "" #: ../sonata/info.py:247 msgid "Album info not found." msgstr "" #: ../sonata/info.py:309 msgid "Lyrics not found" msgstr "" #: ../sonata/info.py:351 msgid "Fetching lyrics..." msgstr "" #: ../sonata/info.py:372 msgid "Lyrics not found." msgstr "" #: ../sonata/info.py:375 msgid "No lyrics plug-in enabled." msgstr "" #: ../sonata/library.py:14 msgid "Various Artists" msgstr "" #: ../sonata/library.py:59 msgid "Untagged" msgstr "" #: ../sonata/library.py:61 ../sonata/ui/library.glade.h:8 msgid "Filename" msgstr "" #: ../sonata/library.py:61 ../sonata/ui/library.glade.h:9 msgid "Everything" msgstr "" #: ../sonata/library.py:137 msgid "Filesystem" msgstr "" #: ../sonata/library.py:139 msgid "Albums" msgstr "" #: ../sonata/library.py:141 msgid "Artists" msgstr "" #: ../sonata/library.py:143 msgid "Genres" msgstr "" #: ../sonata/library.py:922 ../sonata/main.py:1561 msgid "{count} song" msgid_plural "{count} songs" msgstr[0] "" msgstr[1] "" #: ../sonata/library.py:924 msgid "{count} second" msgid_plural "{count} seconds" msgstr[0] "" msgstr[1] "" #: ../sonata/library.py:926 ../sonata/main.py:1576 msgid "{count} minute" msgid_plural "{count} minutes" msgstr[0] "" msgstr[1] "" #: ../sonata/library.py:928 ../sonata/main.py:1572 msgid "{count} hour" msgid_plural "{count} hours" msgstr[0] "" msgstr[1] "" #: ../sonata/library.py:1028 msgid "Song" msgstr "" #. Constants #: ../sonata/main.py:93 msgid "Current" msgstr "" #: ../sonata/main.py:94 msgid "Library" msgstr "" #: ../sonata/main.py:95 msgid "Playlists" msgstr "" #: ../sonata/main.py:96 msgid "Streams" msgstr "" #: ../sonata/main.py:97 msgid "Info" msgstr "" #: ../sonata/main.py:129 ../sonata/preferences.py:195 #: ../sonata/ui/preferences.glade.h:59 msgid "Entire song" msgstr "" #: ../sonata/main.py:171 msgid "by %A from %B" msgstr "" #: ../sonata/main.py:227 msgid "_Sort List" msgstr "" #: ../sonata/main.py:228 msgid "Sa_ve Selected to" msgstr "" #: ../sonata/main.py:229 msgid "_Connection" msgstr "" #: ../sonata/main.py:230 msgid "P_lay after" msgstr "" #: ../sonata/main.py:231 msgid "Play _Mode" msgstr "" #: ../sonata/main.py:232 msgid "_Update" msgstr "" #: ../sonata/main.py:233 msgid "Use _Remote Image..." msgstr "" #: ../sonata/main.py:235 msgid "Use _Local Image..." msgstr "" #: ../sonata/main.py:238 msgid "_Fullscreen Mode" msgstr "" #: ../sonata/main.py:239 msgid "Reset Image" msgstr "" #: ../sonata/main.py:241 msgid "_Play" msgstr "" #: ../sonata/main.py:243 msgid "Pa_use" msgstr "" #: ../sonata/main.py:245 msgid "_Stop" msgstr "" #: ../sonata/main.py:247 msgid "Pre_vious" msgstr "" #: ../sonata/main.py:249 msgid "_Next" msgstr "" #: ../sonata/main.py:251 msgid "_Quit" msgstr "" #: ../sonata/main.py:253 msgid "_Remove" msgstr "" #: ../sonata/main.py:255 msgid "_Clear" msgstr "" #: ../sonata/main.py:257 msgid "_Entire Library" msgstr "" #: ../sonata/main.py:259 msgid "_Selected Items" msgstr "" #: ../sonata/main.py:261 msgid "_Preferences..." msgstr "" #: ../sonata/main.py:263 msgid "_About..." msgstr "" #: ../sonata/main.py:264 msgid "_Edit Tags..." msgstr "" #: ../sonata/main.py:266 msgid "_Add" msgstr "" #: ../sonata/main.py:268 msgid "_Replace" msgstr "" #: ../sonata/main.py:270 msgid "Add" msgstr "" #: ../sonata/main.py:272 msgid "Replace" msgstr "" #: ../sonata/main.py:274 msgid "_Delete..." msgstr "" #: ../sonata/main.py:275 msgid "Shuffle" msgstr "" #: ../sonata/main.py:315 msgid "S_how Sonata" msgstr "" #: ../sonata/main.py:317 msgid "_Repeat" msgstr "" #: ../sonata/main.py:319 msgid "Rando_m" msgstr "" #: ../sonata/main.py:321 msgid "Consume" msgstr "" #: ../sonata/main.py:468 msgid "By Artist" msgstr "" #: ../sonata/main.py:470 msgid "By Album" msgstr "" #: ../sonata/main.py:472 msgid "By Song Title" msgstr "" #: ../sonata/main.py:474 msgid "By File Name" msgstr "" #: ../sonata/main.py:476 msgid "By Dir & File Name" msgstr "" #: ../sonata/main.py:478 msgid "Reverse List" msgstr "" #: ../sonata/main.py:519 msgid "_New..." msgstr "" #: ../sonata/main.py:521 msgid "_Edit..." msgstr "" #: ../sonata/main.py:541 msgid "_New Playlist..." msgstr "" #: ../sonata/main.py:543 msgid "_Rename..." msgstr "" #: ../sonata/main.py:586 #, python-format msgid "Enabling new plug-in %s..." msgstr "" #: ../sonata/main.py:589 #, python-format msgid "Found new plug-in %s." msgstr "" #: ../sonata/main.py:634 ../sonata/main.py:1645 ../sonata/main.py:1862 msgid "Click to expand" msgstr "" #: ../sonata/main.py:637 ../sonata/main.py:1643 ../sonata/main.py:1860 msgid "Click to collapse" msgstr "" #: ../sonata/main.py:644 ../sonata/main.py:1549 ../sonata/main.py:1650 msgid "Not Connected" msgstr "" #: ../sonata/main.py:646 ../sonata/main.py:1547 ../sonata/main.py:1652 msgid "No Read Permission" msgstr "" #: ../sonata/main.py:856 msgid "MPD_HOST/PORT" msgstr "" #: ../sonata/main.py:870 msgid "Disconnect" msgstr "" #: ../sonata/main.py:1568 msgid "{count} day" msgid_plural "{count} days" msgstr[0] "" msgstr[1] "" #: ../sonata/main.py:1585 msgid "(updating mpd)" msgstr "" #: ../sonata/main.py:2248 msgid "Images" msgstr "" #: ../sonata/main.py:2252 msgid "All files" msgstr "" #: ../sonata/main.py:2372 msgid "No artist or album name found." msgstr "" #: ../sonata/main.py:2375 msgid "No cover art found." msgstr "" #: ../sonata/main.py:2609 msgid "Delete the selected playlist?" msgid_plural "Delete the selected playlists?" msgstr[0] "" msgstr[1] "" #: ../sonata/main.py:2612 msgid "Delete Playlist" msgid_plural "Delete Playlists" msgstr[0] "" msgstr[1] "" #: ../sonata/main.py:2626 msgid "Delete the selected stream?" msgid_plural "Delete the selected streams?" msgstr[0] "" msgstr[1] "" #: ../sonata/main.py:2629 msgid "Delete Stream" msgid_plural "Delete Streams" msgstr[0] "" msgstr[1] "" #: ../sonata/main.py:2892 msgid "Unable to launch a suitable browser." msgstr "" #: ../sonata/main.py:2893 msgid "Launch Browser" msgstr "" #: ../sonata/playlists.py:114 ../sonata/playlists.py:117 msgid "Save Playlist" msgstr "" #: ../sonata/playlists.py:139 msgid "Existing Playlist" msgstr "" #: ../sonata/playlists.py:140 msgid "Replace playlist" msgstr "" #: ../sonata/playlists.py:141 msgid "Append songs" msgstr "" #: ../sonata/playlists.py:215 ../sonata/playlists.py:218 msgid "Rename Playlist" msgstr "" #: ../sonata/plugins/localmpd.py:98 msgid "Processes" msgstr "" #: ../sonata/plugins/localmpd.py:99 msgid "Files" msgstr "" #: ../sonata/plugins/localmpd.py:108 msgid "Networking" msgstr "" #: ../sonata/plugins/ui/localmpd.glade.h:1 msgid "Local MPD" msgstr "" #: ../sonata/plugins/ui/localmpd.glade.h:2 msgid "Edit /etc/mpd.conf" msgstr "" #: ../sonata/plugins/ui/localmpd.glade.h:3 msgid "Restart the mpd service" msgstr "" #: ../sonata/preferences.py:152 msgid "Using MPD_HOST/PORT" msgstr "" #: ../sonata/preferences.py:248 ../sonata/ui/preferences.glade.h:22 msgid "SONG_DIR" msgstr "" #: ../sonata/preferences.py:250 ../sonata/preferences.py:556 msgid "custom" msgstr "" #: ../sonata/preferences.py:371 msgid "Info displayed only if all enclosed tags are defined" msgstr "" #: ../sonata/preferences.py:376 msgid "Creates columns in the current playlist" msgstr "" #: ../sonata/preferences.py:421 msgid "" "To save lyrics to the music file's directory, you must specify a valid music " "directory." msgstr "" #: ../sonata/preferences.py:421 ../sonata/preferences.py:428 msgid "Music Dir Verification" msgstr "" #: ../sonata/preferences.py:428 msgid "" "To save artwork to the music file's directory, you must specify a valid " "music directory." msgstr "" #: ../sonata/preferences.py:494 msgid "New Profile" msgstr "" #: ../sonata/streams.py:105 msgid "Edit Stream" msgstr "" #: ../sonata/streams.py:107 ../sonata/streams.py:150 msgid "New Stream" msgstr "" #: ../sonata/streams.py:149 msgid "A stream with this name already exists. Would you like to replace it?" msgstr "" #: ../sonata/tagedit.py:98 msgid "Taglib and/or tagpy not found, tag editing support disabled." msgstr "" #: ../sonata/tagedit.py:98 ../sonata/tagedit.py:107 ../sonata/tagedit.py:112 #: ../sonata/tagedit.py:137 ../sonata/tagedit.py:141 ../sonata/tagedit.py:276 msgid "Edit Tags" msgstr "" #: ../sonata/tagedit.py:107 msgid "" "Tagpy version < 0.91. Please upgrade to a newer version, tag editing support " "disabled." msgstr "" #: ../sonata/tagedit.py:112 #, python-format msgid "" "The path %s does not exist. Please specify a valid music directory in " "preferences." msgstr "" #: ../sonata/tagedit.py:137 #, python-format msgid "" "File '%s' not found. Please specify a valid music directory in preferences." msgstr "" #: ../sonata/tagedit.py:141 msgid "No music files with editable tags found." msgstr "" #: ../sonata/tagedit.py:254 #, python-format msgid "Edit Tags - %s of %s" msgstr "" #: ../sonata/tagedit.py:275 msgid "Unable to save tag to music file." msgstr "" #: ../sonata/tagedit.py:332 msgid "Hide file path" msgstr "" #: ../sonata/tagedit.py:335 msgid "Show file path" msgstr "" #: ../sonata/ui/about.glade.h:1 msgid "" "Sonata, an elegant GTK+ client for the Music Player Daemon\n" "Copyright 2006-2008 Scott Horowitz <stonecrest@gmail.com>" msgstr "" #: ../sonata/ui/about.glade.h:3 msgid "An elegant music client for MPD." msgstr "" #: ../sonata/ui/about.glade.h:4 msgid "_Shortcuts" msgstr "" #: ../sonata/ui/about.glade.h:5 msgid "Shortcuts" msgstr "" #: ../sonata/ui/current.glade.h:1 msgid "Filter:" msgstr "" #: ../sonata/ui/info.glade.h:1 ../sonata/ui/tagedit.glade.h:2 msgid "Title:" msgstr "" #: ../sonata/ui/info.glade.h:2 ../sonata/ui/sonata.glade.h:2 #: ../sonata/ui/tagedit.glade.h:3 msgid "Artist:" msgstr "" #: ../sonata/ui/info.glade.h:3 ../sonata/ui/sonata.glade.h:3 #: ../sonata/ui/tagedit.glade.h:4 msgid "Album:" msgstr "" #: ../sonata/ui/info.glade.h:4 msgid "Date:" msgstr "" #: ../sonata/ui/info.glade.h:5 ../sonata/ui/tagedit.glade.h:8 msgid "Track:" msgstr "" #: ../sonata/ui/info.glade.h:6 ../sonata/ui/tagedit.glade.h:6 msgid "Genre:" msgstr "" #: ../sonata/ui/info.glade.h:7 msgid "File:" msgstr "" #: ../sonata/ui/info.glade.h:8 msgid "Bitrate:" msgstr "" #: ../sonata/ui/info.glade.h:9 msgid "Launch artist in Wikipedia" msgstr "" #: ../sonata/ui/info.glade.h:10 msgid "Launch album in Wikipedia" msgstr "" #: ../sonata/ui/info.glade.h:11 msgid "Toggle extra tags" msgstr "" #: ../sonata/ui/info.glade.h:12 msgid "Edit song tags" msgstr "" #: ../sonata/ui/info.glade.h:13 msgid "(edit tags)" msgstr "" #: ../sonata/ui/info.glade.h:14 msgid "Song Info" msgstr "" #: ../sonata/ui/info.glade.h:15 msgid "Search Lyricwiki.org for lyrics" msgstr "" #: ../sonata/ui/info.glade.h:16 msgid "(search)" msgstr "" #: ../sonata/ui/info.glade.h:17 msgid "Lyrics" msgstr "" #: ../sonata/ui/info.glade.h:18 msgid "Album Info" msgstr "" #: ../sonata/ui/library.glade.h:1 msgid "Search:" msgstr "" #: ../sonata/ui/library.glade.h:3 msgid "Search terms" msgstr "" #: ../sonata/ui/library.glade.h:10 msgid "End Search" msgstr "" #: ../sonata/ui/playlists.glade.h:1 msgid "Playlist name:" msgstr "" #: ../sonata/ui/preferences.glade.h:1 msgid "Custom Artwork" msgstr "" #: ../sonata/ui/preferences.glade.h:2 msgid "Artwork filename:" msgstr "" #: ../sonata/ui/preferences.glade.h:3 msgid "_About" msgstr "" #: ../sonata/ui/preferences.glade.h:4 msgid "_Configure..." msgstr "" #: ../sonata/ui/preferences.glade.h:6 msgid "_Name:" msgstr "" #: ../sonata/ui/preferences.glade.h:7 msgid "_Host:" msgstr "" #: ../sonata/ui/preferences.glade.h:8 msgid "_Port:" msgstr "" #: ../sonata/ui/preferences.glade.h:9 msgid "Leave blank if no password is required." msgstr "" #: ../sonata/ui/preferences.glade.h:10 msgid "Pa_ssword:" msgstr "" #: ../sonata/ui/preferences.glade.h:11 msgid "Select a Music Directory" msgstr "" #: ../sonata/ui/preferences.glade.h:12 msgid "_Music dir:" msgstr "" #: ../sonata/ui/preferences.glade.h:13 msgid "_Autoconnect on start" msgstr "" #: ../sonata/ui/preferences.glade.h:14 msgid "MPD Connection" msgstr "" #: ../sonata/ui/preferences.glade.h:15 msgid "MPD" msgstr "" #: ../sonata/ui/preferences.glade.h:16 msgid "_Playback/volume buttons" msgstr "" #: ../sonata/ui/preferences.glade.h:17 msgid "Pr_ogressbar" msgstr "" #: ../sonata/ui/preferences.glade.h:18 msgid "_Statusbar" msgstr "" #: ../sonata/ui/preferences.glade.h:19 msgid "System _tray icon" msgstr "" #: ../sonata/ui/preferences.glade.h:20 msgid "Song Ly_rics" msgstr "" #: ../sonata/ui/preferences.glade.h:21 msgid "Save lyrics to:" msgstr "" #: ../sonata/ui/preferences.glade.h:23 msgid "_Album art" msgstr "" #: ../sonata/ui/preferences.glade.h:24 msgid "Artwork style:" msgstr "" #: ../sonata/ui/preferences.glade.h:25 msgid "Standard" msgstr "" #: ../sonata/ui/preferences.glade.h:26 msgid "Stylized" msgstr "" #: ../sonata/ui/preferences.glade.h:27 msgid "Search locations:" msgstr "" #: ../sonata/ui/preferences.glade.h:28 msgid "Local only" msgstr "" #: ../sonata/ui/preferences.glade.h:29 msgid "Local and remote" msgstr "" #: ../sonata/ui/preferences.glade.h:30 msgid "Save art to:" msgstr "" #: ../sonata/ui/preferences.glade.h:31 msgid "Display" msgstr "" #: ../sonata/ui/preferences.glade.h:32 msgid "_Show window on all workspaces" msgstr "" #: ../sonata/ui/preferences.glade.h:33 msgid "_Keep window above other windows" msgstr "" #: ../sonata/ui/preferences.glade.h:34 msgid "_Hide window titlebar" msgstr "" #: ../sonata/ui/preferences.glade.h:35 msgid "_Minimize to system tray on close/escape" msgstr "" #: ../sonata/ui/preferences.glade.h:36 msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, " "so only check this if you have one." msgstr "" #: ../sonata/ui/preferences.glade.h:37 msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, so " "only check this if you have one." msgstr "" #: ../sonata/ui/preferences.glade.h:38 msgid "Window Behavior" msgstr "" #: ../sonata/ui/preferences.glade.h:39 msgid "_Update MPD library on start" msgstr "" #: ../sonata/ui/preferences.glade.h:40 msgid "" "If enabled, Sonata will automatically update your MPD library when it starts " "up." msgstr "" #: ../sonata/ui/preferences.glade.h:41 msgid "S_top playback on exit" msgstr "" #: ../sonata/ui/preferences.glade.h:42 msgid "" "MPD allows playback even when the client is not open. If enabled, Sonata " "will behave like a more conventional music player and, instead, stop " "playback upon exit." msgstr "" #: ../sonata/ui/preferences.glade.h:43 msgid "_Write status file:" msgstr "" #: ../sonata/ui/preferences.glade.h:44 msgid "" "If enabled, Sonata will create a xmms-infopipe like file containing " "information about the current song. Many applications support the xmms-info " "file (Instant Messengers, IRC Clients...)" msgstr "" #: ../sonata/ui/preferences.glade.h:45 msgid "Miscellaneous" msgstr "" #: ../sonata/ui/preferences.glade.h:46 msgid "Behavior" msgstr "" #: ../sonata/ui/preferences.glade.h:47 msgid "C_urrent playlist:" msgstr "" #: ../sonata/ui/preferences.glade.h:48 msgid "_Library:" msgstr "" #: ../sonata/ui/preferences.glade.h:49 msgid "_Window title:" msgstr "" #: ../sonata/ui/preferences.glade.h:50 msgid "Current _song line 1:" msgstr "" #: ../sonata/ui/preferences.glade.h:51 msgid "Current s_ong line 2:" msgstr "" #: ../sonata/ui/preferences.glade.h:52 msgid "<small>Available options:</small>" msgstr "" #: ../sonata/ui/preferences.glade.h:53 msgid "Song Formatting" msgstr "" #: ../sonata/ui/preferences.glade.h:54 msgid "Format" msgstr "" #: ../sonata/ui/preferences.glade.h:55 msgid "_Audioscrobbling (Last.fm)" msgstr "" #: ../sonata/ui/preferences.glade.h:56 msgid "_Username:" msgstr "" #: ../sonata/ui/preferences.glade.h:57 msgid "_Password:" msgstr "" #: ../sonata/ui/preferences.glade.h:58 msgid "Popup _notification on song changes" msgstr "" #: ../sonata/ui/preferences.glade.h:60 msgid "System tray" msgstr "" #: ../sonata/ui/preferences.glade.h:61 msgid "Top Left" msgstr "" #: ../sonata/ui/preferences.glade.h:62 msgid "Top Right" msgstr "" #: ../sonata/ui/preferences.glade.h:63 msgid "Bottom Left" msgstr "" #: ../sonata/ui/preferences.glade.h:64 msgid "Bottom Right" msgstr "" #: ../sonata/ui/preferences.glade.h:65 msgid "Screen Center" msgstr "" #: ../sonata/ui/preferences.glade.h:66 msgid "C_rossfade" msgstr "" #: ../sonata/ui/preferences.glade.h:67 msgid "_Fade length:" msgstr "" #: ../sonata/ui/preferences.glade.h:68 msgid "sec" msgstr "" #: ../sonata/ui/preferences.glade.h:69 msgid "Extras" msgstr "" #: ../sonata/ui/preferences.glade.h:70 msgid "Enabled" msgstr "" #: ../sonata/ui/preferences.glade.h:71 msgid "Description" msgstr "" #: ../sonata/ui/preferences.glade.h:72 msgid "Plugins" msgstr "" #: ../sonata/ui/sonata.glade.h:1 msgid "Choose Cover Art" msgstr "" #: ../sonata/ui/sonata.glade.h:4 msgid "Edit search terms" msgstr "" #: ../sonata/ui/sonata.glade.h:5 msgid "Cover Art" msgstr "" #: ../sonata/ui/sonata.glade.h:6 msgid "Open Image" msgstr "" #: ../sonata/ui/sonata.glade.h:7 msgid "Lyrics Search" msgstr "" #: ../sonata/ui/sonata.glade.h:8 msgid "Artist Name:" msgstr "" #: ../sonata/ui/sonata.glade.h:9 msgid "Song Title:" msgstr "" #: ../sonata/ui/sonata.glade.h:10 msgid "Playlist" msgstr "" #: ../sonata/ui/streams.glade.h:1 msgid "Stream name:" msgstr "" #: ../sonata/ui/streams.glade.h:2 msgid "Stream URL:" msgstr "" #: ../sonata/ui/tagedit.glade.h:1 msgid "Save _All" msgstr "" #: ../sonata/ui/tagedit.glade.h:5 msgid "Year:" msgstr "" #: ../sonata/ui/tagedit.glade.h:7 msgid "Comment:" msgstr "" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/po/ar.po�������������������������������������������������������������������������������0000664�0000000�0000000�00000127606�13771420143�0014402�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # msgid "" msgstr "" "Project-Id-Version: sonata\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-03-22 22:00-0600\n" "PO-Revision-Date: 2009-03-23 07:09+0200\n" "Last-Translator: Ahmad Farghal <ahmad.farghal@gmail.com>\n" "Language-Team: Arabic <ar@arabic.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=n==1 ? 0 : n==2 ? 1 : n>=3 && n<=10 ? 2 : 3\n" #. define the shortcuts and their descriptions #. these are all gettextable #: .././sonata/about.py:52 msgid "About Sonata" msgstr "حول سوناتا" #: .././sonata/about.py:53 #: .././sonata/preferences.py:60 msgid "Preferences" msgstr "تفضيلات" #: .././sonata/about.py:54 msgid "Fullscreen Artwork Mode" msgstr "وضع غلاف الألبوم بكامل الشاشة" #: .././sonata/about.py:55 msgid "Switch to [1st-5th] tab" msgstr "انتقل للسان من 1 لـ5" #: .././sonata/about.py:56 msgid "Connect to MPD" msgstr "اتصل بـMPD" #: .././sonata/about.py:57 msgid "Disconnect from MPD" msgstr "افصل من MPD" #: .././sonata/about.py:58 msgid "Randomize current playlist" msgstr "رتّب قائمة التشغيل الحالية عشوائيّا" #: .././sonata/about.py:59 msgid "Expand player" msgstr "وسّع المشغّل" #: .././sonata/about.py:60 msgid "Switch to previous tab" msgstr "ارجع للسان السابق" #: .././sonata/about.py:61 msgid "Switch to next tab" msgstr "انتقل للسان التالي" #: .././sonata/about.py:62 msgid "Collapse player" msgstr "إطوِ المشّغل" #: .././sonata/about.py:63 #: .././sonata/library.py:86 msgid "Search library" msgstr "ابحث في المكتبة" #: .././sonata/about.py:64 msgid "Quit" msgstr "أنهِ" #: .././sonata/about.py:65 msgid "Update entire library" msgstr "حدّث المكتبة بأكملها" #: .././sonata/about.py:66 msgid "Display popup menu" msgstr "أظهر قائمة منبثقة" #: .././sonata/about.py:67 msgid "Minimize to system tray (if enabled)" msgstr "قلّص إلى مساحة التبليغ (إذا كان ممكنا)" #: .././sonata/about.py:69 msgid "Previous track" msgstr "المقطوعة السابقة" #: .././sonata/about.py:70 msgid "Next track" msgstr "المقطوعة التالية" #: .././sonata/about.py:71 msgid "Play/Pause" msgstr "شغّل/أوقف مؤقتا" #: .././sonata/about.py:72 msgid "Stop" msgstr "أوقف" #: .././sonata/about.py:73 msgid "Lower the volume" msgstr "أخفض الصوت" #: .././sonata/about.py:74 msgid "Raise the volume" msgstr "زد الصوت" #: .././sonata/about.py:76 msgid "Play selected song" msgstr "شغّل الأغنية المنتقاة" #: .././sonata/about.py:77 msgid "Remove selected song(s)" msgstr "أزِل الأغاني المنتقاة" #: .././sonata/about.py:78 msgid "Center currently playing song" msgstr "ركّز على الأغنية التي يتم تشغيلها" #: .././sonata/about.py:79 #: .././sonata/about.py:88 msgid "Edit selected song's tags" msgstr "حرّر وسوم الاغنية المنتقاة" #: .././sonata/about.py:80 msgid "Save to new playlist" msgstr "احفظ إلى قائمة تشغيل جديدة" #: .././sonata/about.py:81 msgid "Clear list" msgstr "امسح القائمة" #: .././sonata/about.py:82 msgid "Randomize list" msgstr "رتّب القائمة عشوائيّا" #: .././sonata/about.py:84 msgid "Add selected song(s) or enter directory" msgstr "أضِف الأغاني المنتقاة أو أدخل دليلا" #: .././sonata/about.py:85 msgid "Go to parent directory" msgstr "اذهب إلى الدليل الأب" #: .././sonata/about.py:86 msgid "Add selected item(s)" msgstr "أضِف العناصر المنتقاة" #: .././sonata/about.py:87 msgid "Replace with selected item(s)" msgstr "استبدِل بالعناصر المنتقاة" #: .././sonata/about.py:89 msgid "Add selected item(s) and play" msgstr "أضِف العناصر المنتقاة وشغّلها" #: .././sonata/about.py:90 msgid "Replace with selected item(s) and play" msgstr "استبدِل بالعناصر المنتقاة وشغّلها" #: .././sonata/about.py:91 msgid "Update selected item(s)/path(s)" msgstr "حدّث العناصر أو المسارات المنتقاة" #: .././sonata/about.py:93 #: .././sonata/about.py:95 msgid "Add selected playlist(s)" msgstr "أضِف قوائم التشغيل المنتقاة" #: .././sonata/about.py:94 msgid "Remove selected playlist(s)" msgstr "أزِل قوائم التشغيل المنتقاة" #: .././sonata/about.py:96 msgid "Replace with selected playlist(s)" msgstr "استبدِل بقوائم التشغيل المنتقاة" #: .././sonata/about.py:97 msgid "Add selected playlist(s) and play" msgstr "أضِف قوائم التشغيل المنتقاة وشغّلها" #: .././sonata/about.py:98 msgid "Replace with selected playlist(s) and play" msgstr "استبدِل بقوائم التشغيل المنتقاة وشغلها" #: .././sonata/about.py:100 #: .././sonata/about.py:102 msgid "Add selected stream(s)" msgstr "أضِف الدفوق المنتقاة" #: .././sonata/about.py:101 msgid "Remove selected stream(s)" msgstr "أزِل الدفوق المنتقاة" #: .././sonata/about.py:103 msgid "Replace with selected stream(s)" msgstr "استبدِل بالدفوق المنتقاة" #: .././sonata/about.py:104 msgid "Add selected stream(s) and play" msgstr "أضِف الدفوق المنتقاة وشغّلها" #: .././sonata/about.py:105 msgid "Replace with selected stream(s) and play" msgstr "استبدل بالدفوق المنتقاة وشغّلها" #: .././sonata/about.py:107 msgid "Edit playing song's tags" msgstr "حرّر وسوم الأغنية المُشَغّلة" #. define the main array- this adds headings to each section of #. shortcuts that will be displayed #: .././sonata/about.py:110 msgid "Main Shortcuts" msgstr "الاختصارات العامة" #: .././sonata/about.py:111 msgid "Playback Shortcuts" msgstr "اختصارات التشغيل" #: .././sonata/about.py:112 msgid "Current Shortcuts" msgstr "اختصارات التشغيل الآن" #: .././sonata/about.py:113 msgid "Library Shortcuts" msgstr "اختصارات المكتبة" #: .././sonata/about.py:114 msgid "Playlist Shortcuts" msgstr "اختصارات قوائم التشغيل" #: .././sonata/about.py:115 msgid "Stream Shortcuts" msgstr "اختصارات الدفوق" #: .././sonata/about.py:116 msgid "Info Shortcuts" msgstr "اختصارات المعلومات" #: .././sonata/about.py:117 msgid "Shortcuts" msgstr "الاختصارات" #: .././sonata/about.py:153 msgid "An elegant music client for MPD." msgstr "عميل موسيقى أنيق لـMPD." #. Add button to show keybindings: #: .././sonata/about.py:166 msgid "_Shortcuts" msgstr "الا_ختصارات" #: .././sonata/about.py:177 #: .././sonata/main.py:3088 #: .././sonata/preferences.py:738 msgid "Unable to launch a suitable browser." msgstr "غير قادر على إطلاق متصفح مناسب." #: .././sonata/about.py:177 #: .././sonata/main.py:3088 #: .././sonata/preferences.py:738 msgid "Launch Browser" msgstr "أطلق المتصفح" #: .././sonata/cli.py:81 msgid "The toggle and popup arguments require D-Bus. Aborting." msgstr "خياري الإبدال والانبثاق يتطلبان D-Bus. تم الإجهاض." #: .././sonata/cli.py:97 msgid "Version" msgstr "الإصدار" #: .././sonata/cli.py:98 msgid "Website" msgstr "موقع وب" #: .././sonata/cli.py:103 msgid "Usage: sonata [OPTION]... [COMMAND]..." msgstr "الاستخدام: sonata [الخيار]... [الأمر]..." #: .././sonata/cli.py:105 msgid "Options" msgstr "خيارات" #: .././sonata/cli.py:106 msgid "Show this help and exit" msgstr "يظهر شاشة المساعدة هذه ويخرج" #: .././sonata/cli.py:107 msgid "Popup song notification (requires D-Bus)" msgstr "يظهر نافذة منبثقة بالأغنية (يتطلب D-Bus)" #: .././sonata/cli.py:108 msgid "Toggles whether the app is minimized" msgstr "يظهر أو يخفي التطبيق" #: .././sonata/cli.py:109 msgid "to tray or visible (requires D-Bus)" msgstr "في مساحة التبليغ (يتطلب D-Bus)" #: .././sonata/cli.py:110 msgid "Don't start app if D-Bus commands fail" msgstr "لا تفتح التطبيق إذا فشلت أوامر D-Bus" #: .././sonata/cli.py:111 msgid "Show version information and exit" msgstr "يظهر معلومات الإصدار ويخرج" #: .././sonata/cli.py:112 msgid "Start app hidden (requires systray)" msgstr "يبدأ التطبيق مخفيّا (يتطلب وجود مساحة تبليغ للنظام)" #: .././sonata/cli.py:113 msgid "Start app visible (requires systray)" msgstr "يبدأ التطبيق ظاهرا (يتطلب وجود مساحة تبليغ للنظام)" #: .././sonata/cli.py:114 msgid "Start with profile [NUM]" msgstr "يبدأ بضبط [رقم]" #: .././sonata/cli.py:116 msgid "Commands" msgstr "الأوامر" #: .././sonata/cli.py:117 msgid "Play song in playlist" msgstr "يشغّل أغنية في قائمة التشغيل" #: .././sonata/cli.py:118 msgid "Pause currently playing song" msgstr "يوقف تشغيل الاغنية الحالية مؤقتا" #: .././sonata/cli.py:119 msgid "Stop currently playing song" msgstr "يوقف تشغيل الاغنية الحالية" #: .././sonata/cli.py:120 msgid "Play next song in playlist" msgstr "يشغّل الأغنية التالية في قائمة التشغيل" #: .././sonata/cli.py:121 msgid "Play previous song in playlist" msgstr "يشغّل الأغنية السابقة في قائمة التشغيل" #: .././sonata/cli.py:122 msgid "Toggle play/pause; plays if stopped" msgstr "يشغّل أو يوقف التشغيل مؤقتا؛ يبدأ التشغيل إذا كان متوقفا" #: .././sonata/cli.py:123 msgid "Toggle repeat mode" msgstr "مكّن أو عطّل وضع التكرار" #: .././sonata/cli.py:124 msgid "Toggle random mode" msgstr "مكّن أو عطّل الوضع العشوائي" #: .././sonata/cli.py:125 msgid "Display current song info" msgstr "يظهر معلومات الأغنية الحالية" #: .././sonata/cli.py:126 msgid "Display MPD status" msgstr "يظهر حالة MPD" #: .././sonata/cli.py:134 #, python-format msgid "Starting Sonata with profile %s..." msgstr "بدء سوناتا بالضبط %s..." #: .././sonata/cli.py:136 #, python-format msgid "%d is not an available profile number." msgstr "%d ليس رقم ضبط متوفر." #: .././sonata/cli.py:137 #: .././sonata/cli.py:141 #, python-format msgid "Profile numbers must be between 1 and %d." msgstr "يجب أن يكون رقم الضبط بين 1 و %d." #: .././sonata/cli.py:140 #, python-format msgid "Python is unable to interpret %s as a number." msgstr "بايثون غير قادر على قراءة %s كرقم." #: .././sonata/cli.py:154 #: .././sonata/main.py:179 msgid "Default Profile" msgstr "الضبط المبدئي" #: .././sonata/cli.py:154 #: .././sonata/main.py:179 msgid "by" msgstr "أداء" #: .././sonata/cli.py:154 #: .././sonata/main.py:179 msgid "from" msgstr "من" #: .././sonata/cli.py:176 msgid "" "Unable to connect to MPD.\n" "Please check your Sonata preferences or MPD_HOST/MPD_PORT environment variables." msgstr "" "غير قادر على الاتصال بـMPD.\n" "رجاءً تأكد من تفضيلات سوناتا أو متغيري النظام MPD_HOST و MPD_PORT." #: .././sonata/cli.py:208 #: .././sonata/info.py:91 #: .././sonata/info.py:245 #: .././sonata/library.py:49 #: .././sonata/tagedit.py:125 msgid "Title" msgstr "الاسم" #: .././sonata/cli.py:209 #: .././sonata/info.py:91 #: .././sonata/info.py:246 #: .././sonata/library.py:49 #: .././sonata/main.py:1184 #: .././sonata/tagedit.py:126 msgid "Artist" msgstr "الفنان" #: .././sonata/cli.py:210 #: .././sonata/info.py:91 #: .././sonata/info.py:247 #: .././sonata/library.py:49 #: .././sonata/main.py:1185 #: .././sonata/main.py:2439 #: .././sonata/tagedit.py:127 msgid "Album" msgstr "الألبوم" #: .././sonata/cli.py:211 #: .././sonata/info.py:91 #: .././sonata/info.py:248 msgid "Date" msgstr "السنة" #: .././sonata/cli.py:212 #: .././sonata/info.py:91 #: .././sonata/info.py:250 #: .././sonata/main.py:1186 #: .././sonata/tagedit.py:130 msgid "Track" msgstr "المقطوعة" #: .././sonata/cli.py:213 #: .././sonata/info.py:91 #: .././sonata/info.py:249 #: .././sonata/library.py:49 #: .././sonata/main.py:1189 #: .././sonata/preferences.py:432 #: .././sonata/tagedit.py:139 msgid "Genre" msgstr "النوع" #: .././sonata/cli.py:214 #: .././sonata/info.py:91 #: .././sonata/info.py:251 #: .././sonata/main.py:1191 msgid "File" msgstr "الملف" #: .././sonata/cli.py:219 #: .././sonata/cli.py:221 msgid "Time" msgstr "الوقت" #: .././sonata/cli.py:222 #: .././sonata/info.py:91 #: .././sonata/info.py:244 msgid "Bitrate" msgstr "معدّل البتّات" #: .././sonata/cli.py:224 msgid "MPD stopped" msgstr "MPD متوقف" #: .././sonata/cli.py:228 #: .././sonata/cli.py:230 #: .././sonata/cli.py:232 msgid "State" msgstr "الحالة" #: .././sonata/cli.py:228 msgid "Playing" msgstr "يشغل" #: .././sonata/cli.py:230 msgid "Paused" msgstr "متوقف مؤقتا" #: .././sonata/cli.py:232 #: .././sonata/main.py:559 #: .././sonata/main.py:564 #: .././sonata/main.py:1836 #: .././sonata/main.py:1847 msgid "Stopped" msgstr "متوقف" #: .././sonata/cli.py:234 #: .././sonata/cli.py:236 msgid "Repeat" msgstr "التكرار" #: .././sonata/cli.py:234 #: .././sonata/cli.py:238 msgid "Off" msgstr "مُمَكّن" #: .././sonata/cli.py:236 #: .././sonata/cli.py:240 msgid "On" msgstr "مُعَطّل" #: .././sonata/cli.py:238 #: .././sonata/cli.py:240 msgid "Random" msgstr "عشوائيًا" #: .././sonata/cli.py:241 msgid "Volume" msgstr "شدّة الصوت" #: .././sonata/cli.py:242 msgid "Crossfade" msgstr "الإبهات المتداخل" #: .././sonata/cli.py:242 #: .././sonata/preferences.py:192 msgid "second" msgid_plural "seconds" msgstr[0] "ثانية واحدة" msgstr[1] "ثانيتان" msgstr[2] "ثوان" msgstr[3] "ثانية" #: .././sonata/current.py:64 msgid "Filter" msgstr "رشّح" #: .././sonata/dbus_plugin.py:83 msgid "Sonata failed to connect to the D-BUS session bus: Unable to determine the address of the message bus (try 'man dbus-launch' and 'man dbus-daemon' for help)" msgstr "فشل سوناتا في الاتصال بناقل جلسة D-Bus: غير قادر على تحديد عنوان ناقل الرسائل (للمساعدة، جرّب 'man dbus-launch' و 'man dbus-daemon')" #: .././sonata/dbus_plugin.py:96 msgid "Failed to execute remote commands." msgstr "فشل تنفيذ الأوامر البعيدة." #: .././sonata/dbus_plugin.py:98 msgid "Starting Sonata instead..." msgstr "سيتم بدء سوناتا..." #: .././sonata/dbus_plugin.py:100 msgid "Maybe Sonata is not running?" msgstr "هل أنت متأكد أن سوناتا يعمل؟" #: .././sonata/dbus_plugin.py:114 msgid "An instance of Sonata is already running. Showing it..." msgstr "سوناتا يعمل مسبقا، سيتم إظهارها..." #: .././sonata/dbus_plugin.py:120 msgid "Failed to execute remote command." msgstr "فشل تنفيذ الأمر البعيد." #. Song info #: .././sonata/info.py:78 msgid "Song Info" msgstr "معلومات عن الأغنية" #: .././sonata/info.py:93 msgid "Launch artist in Wikipedia" msgstr "افتح صفحة الفنان في ويكيبيديا" #: .././sonata/info.py:93 msgid "Launch album in Wikipedia" msgstr "افتح صفحة الألبوم في ويكيبيديا" #: .././sonata/info.py:127 msgid "Toggle extra tags" msgstr "أظهر أو أخفِ الوسوم الإضافية" #: .././sonata/info.py:130 msgid "Edit song tags" msgstr "حرّر وسوم الأغنية" #. Lyrics #: .././sonata/info.py:140 msgid "Lyrics" msgstr "الكلمات" #: .././sonata/info.py:152 msgid "Search Lyricwiki.org for lyrics" msgstr "ابحث في Lyricwiki.org عن الكلمات" #: .././sonata/info.py:153 msgid "Edit lyrics at Lyricwiki.org" msgstr "حرّر الكلمات على Lyricwiki.org" #. Album info #: .././sonata/info.py:161 msgid "Album Info" msgstr "معلومات عن الألبوم" #: .././sonata/info.py:213 #: .././sonata/info.py:218 msgid "more" msgstr "المزيد" #: .././sonata/info.py:215 msgid "hide" msgstr "أخفِ" #: .././sonata/info.py:281 msgid "edit tags" msgstr "حرّر الوسوم" #: .././sonata/info.py:308 msgid "Album info not found." msgstr "معلومات الألبوم غير موجودة" #: .././sonata/info.py:311 msgid "Album name not set." msgstr "لم يتم تعيين اسم للألبوم" #: .././sonata/info.py:324 msgid "ZSI not found, fetching lyrics support disabled." msgstr "ZSI غير موجود، سيتم تعطيل جلب الكلمات." #: .././sonata/info.py:329 msgid "Artist or song title not set." msgstr "لم يتم تعيين اسم الفنان أو الأغنية." #: .././sonata/info.py:371 msgid "search" msgstr "ابحث" #: .././sonata/info.py:372 msgid "edit" msgstr "حرّر" #: .././sonata/info.py:381 #: .././sonata/info.py:436 msgid "Lyrics not found" msgstr "الكلمات غير موجودة" #. Fetch lyrics from lyricwiki.org #: .././sonata/info.py:401 msgid "Fetching lyrics..." msgstr "يجلب الكلمات..." #: .././sonata/info.py:411 msgid "Couldn't connect to LyricWiki" msgstr "عاجز عن الاتصال بـLyricWiki" #: .././sonata/info.py:439 msgid "Fetching lyrics failed" msgstr "فشل جلب الكلمات" #: .././sonata/library.py:47 msgid "Untagged" msgstr "غير موسوم" #: .././sonata/library.py:48 msgid "Various Artists" msgstr "فنانون متعددون" #: .././sonata/library.py:49 msgid "Filename" msgstr "اسم الملف" #: .././sonata/library.py:49 msgid "Everything" msgstr "الكل" #: .././sonata/library.py:52 msgid "Filesystem" msgstr "نظام الملفات" #: .././sonata/library.py:53 msgid "Artists" msgstr "الفنانون" #: .././sonata/library.py:54 msgid "Albums" msgstr "الألبومات" #: .././sonata/library.py:55 msgid "Genres" msgstr "الأنواع" #: .././sonata/library.py:84 msgid "Search terms" msgstr "مفردات البحث" #: .././sonata/library.py:90 msgid "End Search" msgstr "أنهِ البحث" #: .././sonata/library.py:92 msgid "Library browsing view" msgstr "مشهد تصفح المكتبة" #: .././sonata/library.py:96 msgid "Search" msgstr "ابحث" #. Show text: #: .././sonata/library.py:761 #: .././sonata/main.py:1763 #: .././sonata/main.py:3331 msgid "song" msgid_plural "songs" msgstr[0] "أغنية واحدة" msgstr[1] "أغنيتان" msgstr[2] "أغاني" msgstr[3] "أغنية" #: .././sonata/library.py:761 #: .././sonata/main.py:1757 msgid "minute" msgid_plural "minutes" msgstr[0] "دقيقة واحدة" msgstr[1] "دقيقتان" msgstr[2] "دقائق" msgstr[3] "دقيقة" #: .././sonata/library.py:849 msgid "Song" msgstr "أغنية" #: .././sonata/library.py:849 #: .././sonata/main.py:1190 msgid "Path" msgstr "المسار" #. Constants #: .././sonata/main.py:102 msgid "Current" msgstr "التشغيل الآن" #: .././sonata/main.py:103 msgid "Library" msgstr "مكتبة" #: .././sonata/main.py:104 msgid "Playlists" msgstr "قوائم تشغيل" #: .././sonata/main.py:105 msgid "Streams" msgstr "دفوق" #: .././sonata/main.py:106 msgid "Info" msgstr "معلومات" #: .././sonata/main.py:137 #: .././sonata/preferences.py:193 #: .././sonata/preferences.py:194 msgid "Entire song" msgstr "طول مدة الأغنية" #: .././sonata/main.py:234 msgid "_Sort List" msgstr "_رتّب القائمة" #: .././sonata/main.py:235 msgid "Sa_ve List to" msgstr "احف_ظ القائمة إلى" #: .././sonata/main.py:236 msgid "_Connection" msgstr "الات_صال" #: .././sonata/main.py:237 msgid "P_lay after" msgstr "ش_غّل بعد" #: .././sonata/main.py:238 #: .././sonata/main.py:2454 msgid "_Update" msgstr "_حدّث" #: .././sonata/main.py:239 msgid "Use _Remote Image..." msgstr "استخدم صورة _بعيدة..." #: .././sonata/main.py:240 msgid "Use _Local Image..." msgstr "استخدم صورة م_حلية..." #: .././sonata/main.py:241 msgid "_Fullscreen Mode" msgstr "وضع _كامل الشاشة" #: .././sonata/main.py:242 msgid "Reset Image" msgstr "استَعِدْ الصورة الأصلية" #: .././sonata/main.py:243 msgid "_Play" msgstr "_شغّل" #: .././sonata/main.py:244 msgid "Pa_use" msgstr "أو_قِف مؤقتًا" #: .././sonata/main.py:245 msgid "_Stop" msgstr "أو_قِف" #: .././sonata/main.py:246 msgid "Pre_vious" msgstr "ال_سابقة" #: .././sonata/main.py:247 msgid "_Next" msgstr "ال_تالية" #: .././sonata/main.py:248 msgid "_Quit" msgstr "أ_نهِ" #: .././sonata/main.py:249 msgid "_Remove" msgstr "أ_زِل" #: .././sonata/main.py:250 msgid "_Clear" msgstr "ام_سح" #: .././sonata/main.py:251 msgid "_Entire Library" msgstr "المكتبة بأ_كملها" #: .././sonata/main.py:252 msgid "_Selected Items" msgstr "العناصر المنت_قاة" #: .././sonata/main.py:253 msgid "_Preferences..." msgstr "تف_ضيلات..." #: .././sonata/main.py:254 msgid "_About..." msgstr "ح_ول..." #: .././sonata/main.py:255 msgid "_Edit Tags..." msgstr "_حرّر الوسوم..." #: .././sonata/main.py:256 msgid "_Add" msgstr "أ_ضف" #: .././sonata/main.py:257 msgid "_Replace" msgstr "استب_دل" #: .././sonata/main.py:258 msgid "Add" msgstr "أضف" #: .././sonata/main.py:259 msgid "Replace" msgstr "استبدل" #: .././sonata/main.py:260 msgid "_Delete..." msgstr "ا_حذف..." #: .././sonata/main.py:261 msgid "Shuffle" msgstr "اخلط" #: .././sonata/main.py:286 msgid "S_how Sonata" msgstr "أ_ظهر سوناتا" #: .././sonata/main.py:287 msgid "_Repeat" msgstr "_كرّر" #: .././sonata/main.py:288 msgid "Rando_m" msgstr "عشوا_ئي" #: .././sonata/main.py:428 msgid "By Artist" msgstr "حسب الفنان" #: .././sonata/main.py:429 msgid "By Album" msgstr "حسب الألبوم" #: .././sonata/main.py:430 msgid "By Song Title" msgstr "حسب اسم الأغنية" #: .././sonata/main.py:431 msgid "By File Name" msgstr "حسب اسم الملف" #: .././sonata/main.py:432 msgid "By Dir & File Name" msgstr "حسب الدليل واسم الملف" #: .././sonata/main.py:433 msgid "Reverse List" msgstr "اعكس ترتيب القائمة" #: .././sonata/main.py:456 #: .././sonata/main.py:467 msgid "_New..." msgstr "_جديد..." #: .././sonata/main.py:457 msgid "_Edit..." msgstr "_حرّر..." #: .././sonata/main.py:468 msgid "_Rename..." msgstr "_غيّر الاسم..." #: .././sonata/main.py:530 #: .././sonata/main.py:597 #: .././sonata/main.py:598 msgid "Playlist" msgstr "قائمة تشغيل" #: .././sonata/main.py:560 #: .././sonata/main.py:1840 #: .././sonata/main.py:2049 msgid "Click to expand" msgstr "أنقر للتوسعة" #: .././sonata/main.py:565 #: .././sonata/main.py:1838 #: .././sonata/main.py:2047 msgid "Click to collapse" msgstr "أنقر للطي" #: .././sonata/main.py:570 #: .././sonata/main.py:1732 #: .././sonata/main.py:1843 msgid "Not Connected" msgstr "غير متّصل" #: .././sonata/main.py:572 #: .././sonata/main.py:1730 #: .././sonata/main.py:1845 msgid "No Read Permission" msgstr "غير مصرّح بالقراءة" #: .././sonata/main.py:645 msgid "Cover Art" msgstr "صورة الغلاف" #: .././sonata/main.py:850 #: .././sonata/main.py:863 #: .././sonata/main.py:884 msgid "Profile" msgstr "الضبط" #: .././sonata/main.py:863 #: .././sonata/main.py:864 #: .././sonata/main.py:884 msgid "MPD_HOST/PORT" msgstr "مضيف MPD / كلمة السّر" #: .././sonata/main.py:865 #: .././sonata/main.py:871 msgid "Disconnect" msgstr "افصل" #: .././sonata/main.py:1187 #: .././sonata/main.py:1194 msgid "#" msgstr "الرقم" #: .././sonata/main.py:1188 #: .././sonata/preferences.py:431 #: .././sonata/tagedit.py:128 msgid "Year" msgstr "السنة" #: .././sonata/main.py:1192 msgid "Stream" msgstr "دفق" #: .././sonata/main.py:1193 msgid "Len" msgstr "Len" #: .././sonata/main.py:1214 #: .././sonata/main.py:1221 #: .././sonata/main.py:1262 #: .././sonata/main.py:1269 msgid "Unknown" msgstr "مجهول" #: .././sonata/main.py:1753 msgid "day" msgid_plural "days" msgstr[0] "يوم واحد" msgstr[1] "يومان" msgstr[2] "أيام" msgstr[3] "يوما" #: .././sonata/main.py:1761 msgid "hour" msgid_plural "hours" msgstr[0] "ساعة واحدة" msgstr[1] "ساعتان" msgstr[2] "ساعات" msgstr[3] "ساعة" #: .././sonata/main.py:1766 #: .././sonata/main.py:1768 msgid "and" msgstr "و" #: .././sonata/main.py:1776 msgid "(updating mpd)" msgstr "(تحديث mpd)" #: .././sonata/main.py:2116 msgid "Lyrics Search" msgstr "بحث عن الكلمات" #: .././sonata/main.py:2117 msgid "_Search" msgstr "اب_حث" #: .././sonata/main.py:2120 msgid "Artist Name" msgstr "اسم الفنان" #: .././sonata/main.py:2125 msgid "Song Title" msgstr "اسم الأغنية" #: .././sonata/main.py:2377 msgid "Open Image" msgstr "افتح صورة" #: .././sonata/main.py:2379 msgid "Images" msgstr "الصور" #: .././sonata/main.py:2383 msgid "All files" msgstr "كل الملفّات" #: .././sonata/main.py:2425 msgid "Choose Cover Art" msgstr "اختر صورة الغلاف" #: .././sonata/main.py:2426 msgid "C_hoose" msgstr "ا_ختر" #: .././sonata/main.py:2459 msgid "Edit search terms" msgstr "حرّر مفردات البحث" #: .././sonata/main.py:2516 msgid "No artist or album name found." msgstr "لم يتم إيجاد اسم الفنان أو الأغنية." #: .././sonata/main.py:2519 msgid "No cover art found." msgstr "لم يتم إيجاد صورة غلاف." #: .././sonata/main.py:2843 msgid "Delete the selected playlist?" msgid_plural "Delete the selected playlists?" msgstr[0] "حذف قائمة التشغيل المنتقاة؟" msgstr[1] "حذف قائمتي التشغيل المنتقاتان؟" msgstr[2] "حذف قوائم التشغيل المنتقاة؟" msgstr[3] "حذف قوائم التشغيل المنتقاة؟" #: .././sonata/main.py:2843 msgid "Delete Playlist" msgid_plural "Delete Playlists" msgstr[0] "احذف قائمة التشغيل" msgstr[1] "احذف قائمتي التشغيل" msgstr[2] "احذف قوائم التشغيل" msgstr[3] "احذف قوائم التشغيل" #: .././sonata/main.py:2851 msgid "Delete the selected stream?" msgid_plural "Delete the selected streams?" msgstr[0] "حذف الدفق المنتقى؟" msgstr[1] "حذف الدفقين المنتقيين؟" msgstr[2] "حذف الدفوق المنتقاة؟" msgstr[3] "حذف الدفوق المنتقاة؟" #: .././sonata/main.py:2851 msgid "Delete Stream" msgid_plural "Delete Streams" msgstr[0] "احذف الدفق" msgstr[1] "احذف الدفقين" msgstr[2] "احذف الدفوق" msgstr[3] "احذف الدفوق" #: .././sonata/main.py:2909 msgid "To save lyrics to the music file's directory, you must specify a valid music directory." msgstr "يجب أن تحدد دليل موسيقى صالح حتى تتمكن من حفظ الكلمات للدليل الموجود فيه ملف الموسيقى." #: .././sonata/main.py:2909 #: .././sonata/main.py:2916 msgid "Music Dir Verification" msgstr "التحقق من دليل الموسيقى" #: .././sonata/main.py:2916 msgid "To save artwork to the music file's directory, you must specify a valid music directory." msgstr "يجب أن تحدد دليل موسيقى صالح حتى تتمكن من حفظ غلاف الألبوم للدليل الموجود فيه ملف الموسيقى." #: .././sonata/main.py:3332 msgid "album" msgid_plural "albums" msgstr[0] "ألبوم واحد" msgstr[1] "ألبومان" msgstr[2] "ألبومات" msgstr[3] "ألبوما" #: .././sonata/main.py:3333 msgid "artist" msgid_plural "artists" msgstr[0] "فنان واحد" msgstr[1] "فنانان" msgstr[2] "فنانين" msgstr[3] "فنانا" #: .././sonata/main.py:3340 msgid "day of bliss" msgid_plural "days of bliss" msgstr[0] "يوم واحد من النعيم" msgstr[1] "يومان من النعيم" msgstr[2] "أيام من النعيم" msgstr[3] "يوما من النعيم" #: .././sonata/main.py:3342 msgid "hour of bliss" msgid_plural "hours of bliss" msgstr[0] "ساعة واحدة من النعيم" msgstr[1] "ساعتان من النعيم" msgstr[2] "ساعات من النعيم" msgstr[3] "ساعة من النعيم" #: .././sonata/playlists.py:103 #: .././sonata/playlists.py:105 msgid "Save Playlist" msgstr "احفظ قائمة التشغيل" #: .././sonata/playlists.py:120 msgid "Would you like to replace the existing playlist or append these songs?" msgstr "هل ترغب في استبدال قائمة التشغيل الموجودة أم إلحاق هذه الأغاني بها؟" #: .././sonata/playlists.py:120 msgid "Existing Playlist" msgstr "قائمة تشغيل موجودة" #: .././sonata/playlists.py:120 msgid "Replace playlist" msgstr "استبدل قائمة التشغيل" #: .././sonata/playlists.py:120 msgid "Append songs" msgstr "ألحق الأغاني" #: .././sonata/playlists.py:141 msgid "A playlist with this name already exists. Would you like to replace it?" msgstr "توجد قائمة تشغيل بهذا الاسم مسبقا. هل ترغب في استبدالها؟" #: .././sonata/playlists.py:153 msgid "Playlist name" msgstr "اسم قائمة التشغيل" #: .././sonata/playlists.py:182 #: .././sonata/playlists.py:186 msgid "Rename Playlist" msgstr "غيّر اسم قائمة التشغيل" #. Constants: #: .././sonata/preferences.py:35 msgid "System tray" msgstr "مساحة تبليغ النظام" #: .././sonata/preferences.py:35 msgid "Top Left" msgstr "أعلى اليسار" #: .././sonata/preferences.py:35 msgid "Top Right" msgstr "أعلي اليمين" #: .././sonata/preferences.py:35 msgid "Bottom Left" msgstr "أدنى اليسار" #: .././sonata/preferences.py:35 msgid "Bottom Right" msgstr "أدنى اليمين" #: .././sonata/preferences.py:35 msgid "Screen Center" msgstr "مركز الشاشة" #. MPD tab #: .././sonata/preferences.py:64 msgid "MPD Connection" msgstr "الاتصال بـMPD" #: .././sonata/preferences.py:76 msgid "_Name" msgstr "الا_سم" #: .././sonata/preferences.py:79 msgid "_Host" msgstr "الم_ضيف" #: .././sonata/preferences.py:82 msgid "_Port" msgstr "المنف_ذ" #: .././sonata/preferences.py:86 msgid "_Music dir" msgstr "_دليل الموسيقى" #: .././sonata/preferences.py:87 msgid "Select a Music Directory" msgstr "انتق دليل موسيقى" #: .././sonata/preferences.py:91 msgid "Pa_ssword" msgstr "كلمة ال_سّر" #: .././sonata/preferences.py:94 msgid "Leave blank if no password is required." msgstr "أترك هذا الحقل فارغًا إذا لم تكن هناك كلمة سر" #: .././sonata/preferences.py:95 msgid "_Autoconnect on start" msgstr "اتّ_صل آليّا عند البدء" #: .././sonata/preferences.py:113 msgid "Using MPD_HOST/PORT" msgstr "باستخدام MPD_HOST/PORT" #: .././sonata/preferences.py:163 #: .././sonata/preferences.py:536 msgid "Extras" msgstr "خيارات إضافية" #: .././sonata/preferences.py:168 msgid "_Audioscrobbling (Last.fm)" msgstr "أبل_غ عن الموسيقى (لاست . إف إم)" #: .././sonata/preferences.py:170 msgid "_Username:" msgstr "اسم المست_خدم:" #: .././sonata/preferences.py:171 msgid "_Password:" msgstr "كلمة ال_سّر:" #: .././sonata/preferences.py:188 msgid "Popup _notification on song changes" msgstr "أظهر _تنبيها عند تغير الأغنية" #: .././sonata/preferences.py:210 msgid "Fade length" msgstr "مدة الإبهات" #: .././sonata/preferences.py:211 msgid "_Fade length" msgstr "مدة الإب_هات" #: .././sonata/preferences.py:213 msgid "sec" msgstr "ث" #: .././sonata/preferences.py:218 msgid "C_rossfade" msgstr "الإبهات المتدا_خل" #. Display tab #: .././sonata/preferences.py:246 #: .././sonata/preferences.py:533 msgid "Display" msgstr "العرض" #: .././sonata/preferences.py:251 msgid "_Album art" msgstr "_غلاف الألبوم" #: .././sonata/preferences.py:253 msgid "Standard" msgstr "قياسي" #: .././sonata/preferences.py:253 msgid "Stylized" msgstr "مزخرف" #: .././sonata/preferences.py:256 msgid "Artwork style:" msgstr "شكل الغلاف:" #: .././sonata/preferences.py:258 msgid "Local only" msgstr "محليا فقط" #: .././sonata/preferences.py:258 msgid "Local and remote" msgstr "محليا وعبر إنترنت" #: .././sonata/preferences.py:260 msgid "Search locations:" msgstr "أماكن البحث:" #: .././sonata/preferences.py:267 #: .././sonata/preferences.py:289 msgid "SONG_DIR" msgstr "مسار_الأغنية" #: .././sonata/preferences.py:269 msgid "custom" msgstr "مخصص" #: .././sonata/preferences.py:274 msgid "Save art to:" msgstr "احفظ الغلاف في:" #: .././sonata/preferences.py:277 msgid "_Playback/volume buttons" msgstr "أ_زرار التشغيل والصوت" #: .././sonata/preferences.py:280 msgid "Pr_ogressbar" msgstr "شريط التق_دم" #: .././sonata/preferences.py:283 msgid "_Statusbar" msgstr "شريط ال_حالة" #: .././sonata/preferences.py:286 msgid "Song Ly_rics" msgstr "_كلمات الأغنية" #: .././sonata/preferences.py:288 msgid "Save lyrics to:" msgstr "احفظ الكلمات في:" #: .././sonata/preferences.py:297 msgid "System _tray icon" msgstr "أيقونة مساحة تبلي_غ النظام" #. Behavior tab #: .././sonata/preferences.py:319 msgid "Window Behavior" msgstr "سلوك النوافذ" #: .././sonata/preferences.py:323 msgid "_Show window on all workspaces" msgstr "أ_ظهر النافذة في كل مساحات العمل" #: .././sonata/preferences.py:326 msgid "_Keep window above other windows" msgstr "أ_بقِ النافذة فوق النوافذ الأخرى" #: .././sonata/preferences.py:329 msgid "_Hide window titlebar" msgstr "أ_خف عنوان النافذة" #: .././sonata/preferences.py:334 msgid "_Minimize to system tray on close/escape" msgstr "_قلّص لمساحة تبليغ النظام عند الإغلاق" #: .././sonata/preferences.py:336 msgid "If enabled, closing Sonata will minimize it to the system tray. Note that it's currently impossible to detect if there actually is a system tray, so only check this if you have one." msgstr "إذا تم تمكين هذا الخيار، فسيقوم سوناتا بتقليص نفسه إلى مساحة تبليغ النظام عند إغلاقه. لاحظ أنه من المستحيل حاليا التعرف على ما إن كان نظامك به مساحة تبليغ أم لا، قلا تمكّن هذا الخيار إلا إذا كان نظامك فيه مساحة تبليغ." #: .././sonata/preferences.py:350 msgid "Miscellaneous" msgstr "خيارات متنوعة" #: .././sonata/preferences.py:354 msgid "_Update MPD library on start" msgstr "_حدّث مكتبة MPD عند البدء" #: .././sonata/preferences.py:356 msgid "If enabled, Sonata will automatically update your MPD library when it starts up." msgstr "إذا تم تمكين هذا الخيار، فسيقوم سوناتا بتحديث مكتبة MPD عند بدء تشغيله." #: .././sonata/preferences.py:358 msgid "S_top playback on exit" msgstr "أو_قف التشغيل عند الخروج" #: .././sonata/preferences.py:360 msgid "MPD allows playback even when the client is not open. If enabled, Sonata will behave like a more conventional music player and, instead, stop playback upon exit." msgstr "يستطيع MPD تشغيل الموسيقى حتى لو لم يكن هناك عميل متصل به. إذا تم تمكين هذا الخيار، فسيسلك سوناتا مسلك مشغلات الموسيقى التقليدية بأن يقوم بإيقاف تشغيل الأغاني عن الخروج." #: .././sonata/preferences.py:362 msgid "_Write status file:" msgstr "أكتب ملف _حالة:" #: .././sonata/preferences.py:364 #: .././sonata/preferences.py:366 msgid "If enabled, Sonata will create a xmms-infopipe like file containing information about the current song. Many applications support the xmms-info file (Instant Messengers, IRC Clients...)" msgstr "إذا تم تمكين هذا الخيار، فسينشئ سوناتا ملفّا مشابه لـxmms-infopipe يحتوي على معلومات عن الأغنية الحالية. تدعم الثير من التطبيقات ملف xmms-infopipe (مثل عملاء IRC وبرامج المراسلة الفورية...)" #. Format tab #: .././sonata/preferences.py:392 msgid "Song Formatting" msgstr "تهيئة اسم الاغنية" #: .././sonata/preferences.py:397 msgid "C_urrent playlist:" msgstr "قائمة التش_غيل الحالية:" #: .././sonata/preferences.py:398 msgid "_Library:" msgstr "ال_مكتبة:" #: .././sonata/preferences.py:399 msgid "_Window title:" msgstr "عنوان ال_نافذة:" #: .././sonata/preferences.py:400 msgid "Current _song line 1:" msgstr "_سطر الأغنية الحالية الأول:" #: .././sonata/preferences.py:402 msgid "Current s_ong line 2:" msgstr "س_طر الأغنية الحالية الثاني:" #: .././sonata/preferences.py:422 msgid "Available options" msgstr "الخيارات المتوفرة" #. XXX get these directly from the formatting function: #: .././sonata/preferences.py:426 msgid "Artist name" msgstr "اسم الفنان" #: .././sonata/preferences.py:427 msgid "Album name" msgstr "اسم الألبوم" #: .././sonata/preferences.py:428 msgid "Track name" msgstr "اسم المقطوعة" #: .././sonata/preferences.py:429 msgid "Track number" msgstr "رقم المقطوعة" #: .././sonata/preferences.py:430 msgid "Disc number" msgstr "رقم القرص" #: .././sonata/preferences.py:433 msgid "File path" msgstr "مسار الملف" #: .././sonata/preferences.py:434 msgid "File name" msgstr "اسم الملف" #: .././sonata/preferences.py:435 #: .././sonata/streams.py:109 msgid "Stream name" msgstr "اسم الدفق" #: .././sonata/preferences.py:436 msgid "Song length" msgstr "مدة الأغنية" #: .././sonata/preferences.py:437 msgid "Elapsed time (title only)" msgstr "الوقت المنقضي (عنوان النافذة فقط)" #: .././sonata/preferences.py:448 msgid "Info displayed only if all enclosed tags are defined" msgstr "لن يتم عرض المعلومات إلا عندما تكون كل الوسوم بين القوسين مستوفاة" #: .././sonata/preferences.py:448 msgid "Creates columns in the current playlist" msgstr "ينشئ عواميد في قائمة التشغيل الحالية" #: .././sonata/preferences.py:473 msgid "_About" msgstr "ح_ول" #: .././sonata/preferences.py:474 msgid "_Configure..." msgstr "ا_ضبط..." #: .././sonata/preferences.py:513 msgid "Loaded" msgstr "مُحَمَّل" #: .././sonata/preferences.py:521 msgid "Description" msgstr "الوصف" #. Set up table #: .././sonata/preferences.py:532 msgid "MPD" msgstr "MPD" #: .././sonata/preferences.py:534 msgid "Behavior" msgstr "السلوك" #: .././sonata/preferences.py:535 msgid "Format" msgstr "التهيئة" #: .././sonata/preferences.py:605 msgid "New Profile" msgstr "ضبط جديد" #. Prompt user for playlist name: #: .././sonata/preferences.py:659 msgid "Custom Artwork" msgstr "غلاف ألبوم مخصّص" #: .././sonata/preferences.py:661 msgid "Artwork filename" msgstr "اسم ملف الغلاف" #: .././sonata/streams.py:105 msgid "Edit Stream" msgstr "حرّر الدفق" #: .././sonata/streams.py:107 #: .././sonata/streams.py:138 msgid "New Stream" msgstr "دفق جديد" #: .././sonata/streams.py:116 msgid "Stream URL" msgstr "عنوان الدفق" #: .././sonata/streams.py:138 msgid "A stream with this name already exists. Would you like to replace it?" msgstr "يوجد دفق بهذا الاسم مسبقا. هل ترغب في استبداله؟" #: .././sonata/tagedit.py:61 msgid "Taglib and/or tagpy not found, tag editing support disabled." msgstr "Taglib و/أو tagpy غير موجودان، سيتم تعطيل دعم تحرير الوسوم." #: .././sonata/tagedit.py:61 #: .././sonata/tagedit.py:70 #: .././sonata/tagedit.py:75 #: .././sonata/tagedit.py:99 #: .././sonata/tagedit.py:103 #: .././sonata/tagedit.py:260 #: .././sonata/tagedit.py:299 msgid "Edit Tags" msgstr "حرّر الوسوم" #: .././sonata/tagedit.py:70 msgid "Tagpy version < 0.91. Please upgrade to a newer version, tag editing support disabled." msgstr "نسخة Tagpy الموجودة أقدم من 0.91. رجاءً حدّث نسختك حتى تستطيع تحرير الوسوم." #: .././sonata/tagedit.py:75 msgid "The path" msgstr "المسار" #: .././sonata/tagedit.py:75 msgid "does not exist. Please specify a valid music directory in preferences." msgstr "غير موجود. رجاءً حدد دليل موسيقى صالح في التفضيلات." #: .././sonata/tagedit.py:99 msgid "File " msgstr "الملف" #: .././sonata/tagedit.py:99 msgid " not found. Please specify a valid music directory in preferences." msgstr " غير موجود. رجاءً حدّد دليل موسيقى صالح في التفضيلات." #: .././sonata/tagedit.py:103 msgid "No music files with editable tags found." msgstr "لا توجد ملفات موسيقى يمكن تحرير وسومها." #: .././sonata/tagedit.py:150 msgid "Comment" msgstr "التعليق" #. Only show save all button if more than one song being edited. #: .././sonata/tagedit.py:161 msgid "Save _All" msgstr "احفظ ال_كل" #: .././sonata/tagedit.py:207 msgid "Increment each selected music file, starting at track 1 for this file." msgstr "زيادة الرقم بدءا من 1 لكل ملف يعقب هذا الملف." #: .././sonata/tagedit.py:209 msgid "Apply to all selected music files." msgstr "طبّق على كل ملفات الموسيقى المنتقاة." #: .././sonata/tagedit.py:260 msgid "of" msgstr "من" #. FIXME: was (save_success and self.conn and self.status): #: .././sonata/tagedit.py:299 msgid "Unable to save tag to music file." msgstr "غير قادر على حفظ الوسم لملف الموسيقى." #: .././sonata/tagedit.py:366 msgid "Hide file path" msgstr "أخف مسار الملف" #: .././sonata/tagedit.py:369 msgid "Show file path" msgstr "أظهر مسار الملف" #~ msgid "The popup argument requires D-Bus. Aborting." #~ msgstr "خيار الانبثاق يتطلب D-Bus. تم الإجهاض." #, fuzzy #~ msgid "_Update Path" #~ msgstr "_حدّث" #~ msgid "Website: http://www.nongnu.org/sonata/" #~ msgstr "موقع وِب: http://www.nongnu.org/sonata/" #~ msgid "Enable Audioscrobbler" #~ msgstr "مكّن أوديوسكروبلر" #~ msgid "Enable Crossfade" #~ msgstr "مكّن الإبهات المتداخل" #~ msgid "Enable album art" #~ msgstr "أظهر غلاف الألبوم" #~ msgid "Enable lyrics" #~ msgstr "مكّن الكلمات" #~ msgid "Enable system tray icon" #~ msgstr "مكّن أيقونة مساحة التبليغ" #~ msgid "_Display" #~ msgstr "ال_عرض" #~ msgid "_Extras" #~ msgstr "خيارات إ_ضافية" #~ msgid "" #~ "PyGTK+ 2.10 or gnome-python-extras not found, system tray support " #~ "disabled." #~ msgstr "" #~ "غير قادر على إيجاد PyGTK+ 2.10 أو gnome-python-extras. تم تعطيل دعم مساحة " #~ "تبليغ النظام." #~ msgid "Reset to Default" #~ msgstr "صفّر إلى المبدئي" #~ msgid "_New Playlist..." #~ msgstr "قائمة تشغيل _جديدة..." #~ msgid "Notification" #~ msgstr "التنبيه" #~ msgid "" #~ "Python 2.5 or python-elementtree not found, audioscrobbler support " #~ "disabled." #~ msgstr "" #~ "Python 2.5 أو python-elementtree غير موجودان، سيتم تعطيل دعم أوديوسكروبلر." #~ msgid "Audioscrobbler Verification" #~ msgstr "التحقق من أوديوسكروبلر" #~ msgid "Update library for selected item(s)" #~ msgstr "حدّث المكتبة بالنسبة للعناصر المنتقاة" #~ msgid "_Shuffle" #~ msgstr "ا_خلِط" #~ msgid "Toggle shuffle mode" #~ msgstr "مكّن أو عطّل وضع الخلط" ��������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/po/be.po�������������������������������������������������������������������������������0000664�0000000�0000000�00000121146�13771420143�0014357�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Biełaruski pierakład Sonata. # Copyright (C) 2007 Ihar Hrachyshka # This file is distributed under the same license as the sonata package. # Ihar Hrachyshka <ihar.hrachyshka@gmail.com>, 2007, 2008. # msgid "" msgstr "" "Project-Id-Version: sonata 1.3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-03-22 22:00-0600\n" "PO-Revision-Date: 2008-03-22 11:38+0200\n" "Last-Translator: Ihar Hrachyshka <ihar.hrachyshka@gmail.com>\n" "Language-Team: Belarusian (Latin script) <translation-team-be-latin@lists." "sourceforge.net>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" "10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #. define the shortcuts and their descriptions #. these are all gettextable #: .././sonata/about.py:52 msgid "About Sonata" msgstr "Ab Sonacie" #: .././sonata/about.py:53 .././sonata/preferences.py:60 msgid "Preferences" msgstr "Nałady" #: .././sonata/about.py:54 msgid "Fullscreen Artwork Mode" msgstr "" #: .././sonata/about.py:55 msgid "Switch to [1st-5th] tab" msgstr "Pieraklučysia na 1-5. kartku" #: .././sonata/about.py:56 msgid "Connect to MPD" msgstr "Spałučy z MPD" #: .././sonata/about.py:57 msgid "Disconnect from MPD" msgstr "Adłučy ad MPD" #: .././sonata/about.py:58 msgid "Randomize current playlist" msgstr "Pieratasuj dziejny śpis" #: .././sonata/about.py:59 msgid "Expand player" msgstr "Razharni player" #: .././sonata/about.py:60 msgid "Switch to previous tab" msgstr "Na papiaredniuju kartku" #: .././sonata/about.py:61 msgid "Switch to next tab" msgstr "Na nastupnuju kartku" #: .././sonata/about.py:62 msgid "Collapse player" msgstr "Zharni player" #: .././sonata/about.py:63 .././sonata/library.py:86 msgid "Search library" msgstr "Šukaj u biblijatecy" #: .././sonata/about.py:64 msgid "Quit" msgstr "Vyjdzi" #: .././sonata/about.py:65 msgid "Update entire library" msgstr "Aktualizuj usiu biblijateku" #: .././sonata/about.py:66 msgid "Display popup menu" msgstr "Pakažy vypłyŭnaje menu" #: .././sonata/about.py:67 msgid "Minimize to system tray (if enabled)" msgstr "Minimalizuj u systemny tray (kali ŭklučana)" #: .././sonata/about.py:69 msgid "Previous track" msgstr "Papiaredniaja pieśnia" #: .././sonata/about.py:70 msgid "Next track" msgstr "Nastupnaja pieśnia" #: .././sonata/about.py:71 msgid "Play/Pause" msgstr "Hraj/Paŭza" #: .././sonata/about.py:72 msgid "Stop" msgstr "Spyni" #: .././sonata/about.py:73 msgid "Lower the volume" msgstr "Pamienš hučnaść" #: .././sonata/about.py:74 msgid "Raise the volume" msgstr "Pavialič hučnaść" #: .././sonata/about.py:76 msgid "Play selected song" msgstr "Hraj zaznačanuju pieśniu" #: .././sonata/about.py:77 msgid "Remove selected song(s)" msgstr "Vydal zaznačanyja pieśni" #: .././sonata/about.py:78 msgid "Center currently playing song" msgstr "Adcentruj pieśniu, jakaja ciapier hrajecca" #: .././sonata/about.py:79 .././sonata/about.py:88 msgid "Edit selected song's tags" msgstr "Redahuj tagi dla zaznačanaj pieśni" #: .././sonata/about.py:80 msgid "Save to new playlist" msgstr "Zapišy ŭ novy śpis" #: .././sonata/about.py:81 msgid "Clear list" msgstr "Ačyść śpis" #: .././sonata/about.py:82 msgid "Randomize list" msgstr "Pieratasuj śpis" #: .././sonata/about.py:84 msgid "Add selected song(s) or enter directory" msgstr "Dadaj zaznačanyja pieśni ci ŭvajdzi ŭ kataloh" #: .././sonata/about.py:85 msgid "Go to parent directory" msgstr "Pierajdzi ŭ baćkoŭski kataloh" #: .././sonata/about.py:86 msgid "Add selected item(s)" msgstr "Dadaj zaznačanyja pieśni" #: .././sonata/about.py:87 msgid "Replace with selected item(s)" msgstr "Zamiani zaznačanymi pieśniami" #: .././sonata/about.py:89 msgid "Add selected item(s) and play" msgstr "Dadaj zaznačanyja pieśni j pačni hrać" #: .././sonata/about.py:90 msgid "Replace with selected item(s) and play" msgstr "Zamiani zaznačanymi pieśniami j pačni hrać" #: .././sonata/about.py:91 #, fuzzy msgid "Update selected item(s)/path(s)" msgstr "Dadaj zaznačanyja pieśni" #: .././sonata/about.py:93 .././sonata/about.py:95 msgid "Add selected playlist(s)" msgstr "Dadaj zaznačanyja śpisy" #: .././sonata/about.py:94 msgid "Remove selected playlist(s)" msgstr "Vydal zaznačanyja śpisy" #: .././sonata/about.py:96 msgid "Replace with selected playlist(s)" msgstr "Zamiani zaznačanymi śpisami" #: .././sonata/about.py:97 msgid "Add selected playlist(s) and play" msgstr "Dadaj zaznačanyja śpisy j pačni hrać" #: .././sonata/about.py:98 msgid "Replace with selected playlist(s) and play" msgstr "Zamiani zaznačanymi śpisami j pačni hrać" #: .././sonata/about.py:100 .././sonata/about.py:102 msgid "Add selected stream(s)" msgstr "Dadaj zaznačanyja płyni" #: .././sonata/about.py:101 msgid "Remove selected stream(s)" msgstr "Vydal zaznačanyja płyni" #: .././sonata/about.py:103 msgid "Replace with selected stream(s)" msgstr "Zamiani zaznačanymi albomami" #: .././sonata/about.py:104 msgid "Add selected stream(s) and play" msgstr "Dadaj zaznačanyja płyni j pačni hrać" #: .././sonata/about.py:105 msgid "Replace with selected stream(s) and play" msgstr "Zamiani zaznačanymi płyniami j pačni hrać" #: .././sonata/about.py:107 msgid "Edit playing song's tags" msgstr "Redahuj tagi dla pieśni, jakaja ciapier hraje" #. define the main array- this adds headings to each section of #. shortcuts that will be displayed #: .././sonata/about.py:110 msgid "Main Shortcuts" msgstr "Asnoŭnyja skaroty" #: .././sonata/about.py:111 msgid "Playback Shortcuts" msgstr "Skaroty hrańnia" #: .././sonata/about.py:112 msgid "Current Shortcuts" msgstr "Dziejnyja skaroty" #: .././sonata/about.py:113 msgid "Library Shortcuts" msgstr "Skaroty biblijateki" #: .././sonata/about.py:114 msgid "Playlist Shortcuts" msgstr "Skaroty śpisu" #: .././sonata/about.py:115 msgid "Stream Shortcuts" msgstr "Skaroty płyni" #: .././sonata/about.py:116 msgid "Info Shortcuts" msgstr "Daviednik skarotaŭ" #: .././sonata/about.py:117 msgid "Shortcuts" msgstr "Skaroty" #: .././sonata/about.py:153 msgid "An elegant music client for MPD." msgstr "Elehantny muzyčny klijent dla MPD." #. Add button to show keybindings: #: .././sonata/about.py:166 msgid "_Shortcuts" msgstr "_Skaroty" #: .././sonata/about.py:177 .././sonata/main.py:3088 #: .././sonata/preferences.py:738 msgid "Unable to launch a suitable browser." msgstr "Niemahčyma ŭklučyć prydatnaha hartača." #: .././sonata/about.py:177 .././sonata/main.py:3088 #: .././sonata/preferences.py:738 msgid "Launch Browser" msgstr "Uklučy hartača" #: .././sonata/cli.py:81 #, fuzzy msgid "The toggle and popup arguments require D-Bus. Aborting." msgstr "Arhument pieraklučeńnia vymahaje D-Bus. Abryŭ." #: .././sonata/cli.py:97 #, fuzzy msgid "Version" msgstr "Versija: Sonata" #: .././sonata/cli.py:98 msgid "Website" msgstr "" #: .././sonata/cli.py:103 #, fuzzy msgid "Usage: sonata [OPTION]... [COMMAND]..." msgstr "Užyćcio: sonata [OPCYJA]" #: .././sonata/cli.py:105 msgid "Options" msgstr "Opcyi" #: .././sonata/cli.py:106 msgid "Show this help and exit" msgstr "Pakažy hetuju daviedku i vyjdzi" #: .././sonata/cli.py:107 #, fuzzy msgid "Popup song notification (requires D-Bus)" msgstr "Vypłyŭnoje infarmavańnie ab piśni, jakaja hraje (vymahaje DBus)" #: .././sonata/cli.py:108 msgid "Toggles whether the app is minimized" msgstr "Źmianiaje minimalizavanaść aplikacyi" #: .././sonata/cli.py:109 msgid "to tray or visible (requires D-Bus)" msgstr "u tray i bačnaść (vymahaje D-Bus)" #: .././sonata/cli.py:110 msgid "Don't start app if D-Bus commands fail" msgstr "" #: .././sonata/cli.py:111 msgid "Show version information and exit" msgstr "Pakažy źviestki ab versii dy vyjdzi" #: .././sonata/cli.py:112 msgid "Start app hidden (requires systray)" msgstr "Uklučy aplikacyju schavanaj (vymahaje systray)" #: .././sonata/cli.py:113 msgid "Start app visible (requires systray)" msgstr "Uklučy aplikacyju bačnaj (vymahaje systray)" #: .././sonata/cli.py:114 msgid "Start with profile [NUM]" msgstr "Uklučy dla profilu [NUM]" #: .././sonata/cli.py:116 #, fuzzy msgid "Commands" msgstr "Kamentar" #: .././sonata/cli.py:117 msgid "Play song in playlist" msgstr "Hraj pieśniu sa śpisu" #: .././sonata/cli.py:118 msgid "Pause currently playing song" msgstr "Prypyni pieśniu, jakaja ciapier hrajecca" #: .././sonata/cli.py:119 msgid "Stop currently playing song" msgstr "Spyni pieśniu, jakaja ciapier hrajecca" #: .././sonata/cli.py:120 msgid "Play next song in playlist" msgstr "Hraj nastupnuju pieśniu sa śpisu" #: .././sonata/cli.py:121 msgid "Play previous song in playlist" msgstr "Hraj papiaredniuju pieśniu sa śpisu" #: .././sonata/cli.py:122 msgid "Toggle play/pause; plays if stopped" msgstr "Hraj, kali prypynieny; prypyni, kali hraješ" #: .././sonata/cli.py:123 msgid "Toggle repeat mode" msgstr "Źmiani režym paŭtoru" #: .././sonata/cli.py:124 msgid "Toggle random mode" msgstr "Źmiani režym vypadkovaści" #: .././sonata/cli.py:125 msgid "Display current song info" msgstr "Pakažy źviestki ab pieśni, jakaja ciapier hrajecca" #: .././sonata/cli.py:126 msgid "Display MPD status" msgstr "Pakažy status MPD" #: .././sonata/cli.py:134 #, fuzzy, python-format msgid "Starting Sonata with profile %s..." msgstr "Uklučeńnie Sonaty dla profilu" #: .././sonata/cli.py:136 #, python-format msgid "%d is not an available profile number." msgstr "" #: .././sonata/cli.py:137 .././sonata/cli.py:141 #, fuzzy, python-format msgid "Profile numbers must be between 1 and %d." msgstr "Niapravilny numar profilu. Numar profilu musić być ad 1 da" #: .././sonata/cli.py:140 #, python-format msgid "Python is unable to interpret %s as a number." msgstr "" #: .././sonata/cli.py:154 .././sonata/main.py:179 msgid "Default Profile" msgstr "Zmoŭčany profil" #: .././sonata/cli.py:154 .././sonata/main.py:179 msgid "by" msgstr "ad" #: .././sonata/cli.py:154 .././sonata/main.py:179 msgid "from" msgstr "z" #: .././sonata/cli.py:176 msgid "" "Unable to connect to MPD.\n" "Please check your Sonata preferences or MPD_HOST/MPD_PORT environment " "variables." msgstr "" "Niemahčyma spałučycca z MPD.\n" "Pravier nałady Sonaty ci źmiennyja asiarodździa MPD_HOST/MPD_PORT." #: .././sonata/cli.py:208 .././sonata/info.py:91 .././sonata/info.py:245 #: .././sonata/library.py:49 .././sonata/tagedit.py:125 msgid "Title" msgstr "Nazva" #: .././sonata/cli.py:209 .././sonata/info.py:91 .././sonata/info.py:246 #: .././sonata/library.py:49 .././sonata/main.py:1184 #: .././sonata/tagedit.py:126 msgid "Artist" msgstr "Vykanaŭca" #: .././sonata/cli.py:210 .././sonata/info.py:91 .././sonata/info.py:247 #: .././sonata/library.py:49 .././sonata/main.py:1185 .././sonata/main.py:2439 #: .././sonata/tagedit.py:127 msgid "Album" msgstr "Albom" #: .././sonata/cli.py:211 .././sonata/info.py:91 .././sonata/info.py:248 msgid "Date" msgstr "Data" #: .././sonata/cli.py:212 .././sonata/info.py:91 .././sonata/info.py:250 #: .././sonata/main.py:1186 .././sonata/tagedit.py:130 msgid "Track" msgstr "Pieśnia" #: .././sonata/cli.py:213 .././sonata/info.py:91 .././sonata/info.py:249 #: .././sonata/library.py:49 .././sonata/main.py:1189 #: .././sonata/preferences.py:432 .././sonata/tagedit.py:139 msgid "Genre" msgstr "Styl" #: .././sonata/cli.py:214 .././sonata/info.py:91 .././sonata/info.py:251 #: .././sonata/main.py:1191 msgid "File" msgstr "Fajł" #: .././sonata/cli.py:219 .././sonata/cli.py:221 msgid "Time" msgstr "Čas" #: .././sonata/cli.py:222 .././sonata/info.py:91 .././sonata/info.py:244 msgid "Bitrate" msgstr "Častata bitaŭ" #: .././sonata/cli.py:224 msgid "MPD stopped" msgstr "MPD spynieny" #: .././sonata/cli.py:228 .././sonata/cli.py:230 .././sonata/cli.py:232 msgid "State" msgstr "Stan" #: .././sonata/cli.py:228 msgid "Playing" msgstr "Hraje" #: .././sonata/cli.py:230 msgid "Paused" msgstr "Prypyniena" #: .././sonata/cli.py:232 .././sonata/main.py:559 .././sonata/main.py:564 #: .././sonata/main.py:1836 .././sonata/main.py:1847 msgid "Stopped" msgstr "Spyniena" #: .././sonata/cli.py:234 .././sonata/cli.py:236 msgid "Repeat" msgstr "Paŭtary" #: .././sonata/cli.py:234 .././sonata/cli.py:238 msgid "Off" msgstr "Vyklučana" #: .././sonata/cli.py:236 .././sonata/cli.py:240 msgid "On" msgstr "Uklučana" #: .././sonata/cli.py:238 .././sonata/cli.py:240 msgid "Random" msgstr "Vypadkova" #: .././sonata/cli.py:241 msgid "Volume" msgstr "Hučnaść" #: .././sonata/cli.py:242 msgid "Crossfade" msgstr "Crossfade" #: .././sonata/cli.py:242 .././sonata/preferences.py:192 msgid "second" msgid_plural "seconds" msgstr[0] "sekunda" msgstr[1] "sekundy" msgstr[2] "sekundaŭ" #: .././sonata/current.py:64 msgid "Filter" msgstr "Filter" #: .././sonata/dbus_plugin.py:83 msgid "" "Sonata failed to connect to the D-BUS session bus: Unable to determine the " "address of the message bus (try 'man dbus-launch' and 'man dbus-daemon' for " "help)" msgstr "" "Sonata nie zmahła spałučycca z sesijnym busam D-BUS: Niemahčyma vyznačyć " "adras busa paviedamleńniaŭ (ka atrymać dapamohu, pasprabuj \"man dbus-launch" "\" i \"man dbus-daemon\")" #: .././sonata/dbus_plugin.py:96 msgid "Failed to execute remote commands." msgstr "" #: .././sonata/dbus_plugin.py:98 #, fuzzy msgid "Starting Sonata instead..." msgstr "Uklučeńnie Sonaty dla profilu" #: .././sonata/dbus_plugin.py:100 #, fuzzy msgid "Maybe Sonata is not running?" msgstr "Sonata ŭžo pracuje." #: .././sonata/dbus_plugin.py:114 #, fuzzy msgid "An instance of Sonata is already running. Showing it..." msgstr "Sonata ŭžo pracuje." #: .././sonata/dbus_plugin.py:120 msgid "Failed to execute remote command." msgstr "" #. Song info #: .././sonata/info.py:78 msgid "Song Info" msgstr "Źviestki ab pieśni" #: .././sonata/info.py:93 msgid "Launch artist in Wikipedia" msgstr "Adčyni artykuł pra vykanaŭca ź Wikipedyi" #: .././sonata/info.py:93 msgid "Launch album in Wikipedia" msgstr "Adčyni artykuł pra albom ź Wikipedyi" #: .././sonata/info.py:127 msgid "Toggle extra tags" msgstr "Pieraklučy dadatkovyja tagi" #: .././sonata/info.py:130 msgid "Edit song tags" msgstr "Redahuj tagi dla pieśni" #. Lyrics #: .././sonata/info.py:140 msgid "Lyrics" msgstr "Słovy" #: .././sonata/info.py:152 msgid "Search Lyricwiki.org for lyrics" msgstr "Šukaj słovy na Lyricwiki.org" #: .././sonata/info.py:153 msgid "Edit lyrics at Lyricwiki.org" msgstr "" #. Album info #: .././sonata/info.py:161 msgid "Album Info" msgstr "Źviestki ab albomie" #: .././sonata/info.py:213 .././sonata/info.py:218 msgid "more" msgstr "bolej" #: .././sonata/info.py:215 msgid "hide" msgstr "schavaj" #: .././sonata/info.py:281 msgid "edit tags" msgstr "redahuj tagi" #: .././sonata/info.py:308 msgid "Album info not found." msgstr "Źviestki pra albom nia znojdzienyja." #: .././sonata/info.py:311 msgid "Album name not set." msgstr "Nazva albomu nie akreślenaja." #: .././sonata/info.py:324 msgid "ZSI not found, fetching lyrics support disabled." msgstr "ZSI nia znojdziena, zahruzka słovaŭ vyklučanaja." #: .././sonata/info.py:329 msgid "Artist or song title not set." msgstr "Nazva vykanaŭcy ci pieśni nie akreślenaja." #: .././sonata/info.py:371 msgid "search" msgstr "šukaj" #: .././sonata/info.py:372 #, fuzzy msgid "edit" msgstr "redahuj tagi" #: .././sonata/info.py:381 .././sonata/info.py:436 msgid "Lyrics not found" msgstr "Słovaŭ nia znojdziena" #. Fetch lyrics from lyricwiki.org #: .././sonata/info.py:401 msgid "Fetching lyrics..." msgstr "Zahruzka słovaŭ..." #: .././sonata/info.py:411 msgid "Couldn't connect to LyricWiki" msgstr "Niemahčyma spałučycca z LyricWiki" #: .././sonata/info.py:439 msgid "Fetching lyrics failed" msgstr "Niaŭdałaja zahruzka słovaŭ" #: .././sonata/library.py:47 msgid "Untagged" msgstr "Biaź źviestak" #: .././sonata/library.py:48 msgid "Various Artists" msgstr "Roznyja vykanaŭcy" #: .././sonata/library.py:49 msgid "Filename" msgstr "Nazva fajłu" #: .././sonata/library.py:49 msgid "Everything" msgstr "Usio" #: .././sonata/library.py:52 msgid "Filesystem" msgstr "Fajłavaja systema" #: .././sonata/library.py:53 #, fuzzy msgid "Artists" msgstr "Vykanaŭca" #: .././sonata/library.py:54 #, fuzzy msgid "Albums" msgstr "Albom" #: .././sonata/library.py:55 #, fuzzy msgid "Genres" msgstr "Styl" #: .././sonata/library.py:84 #, fuzzy msgid "Search terms" msgstr "Redahuj krytery pošuku" #: .././sonata/library.py:90 #, fuzzy msgid "End Search" msgstr "_Skončy pošuk" #: .././sonata/library.py:92 msgid "Library browsing view" msgstr "Ahlad biblijateki" #: .././sonata/library.py:96 #, fuzzy msgid "Search" msgstr "_Šukaj" #. Show text: #: .././sonata/library.py:761 .././sonata/main.py:1763 #: .././sonata/main.py:3331 msgid "song" msgid_plural "songs" msgstr[0] "pieśnia" msgstr[1] "pieśni" msgstr[2] "pieśniaŭ" #: .././sonata/library.py:761 .././sonata/main.py:1757 msgid "minute" msgid_plural "minutes" msgstr[0] "chvilina" msgstr[1] "chviliny" msgstr[2] "chvilin" #: .././sonata/library.py:849 #, fuzzy msgid "Song" msgstr "pieśnia" #: .././sonata/library.py:849 .././sonata/main.py:1190 msgid "Path" msgstr "Ściežka" #. Constants #: .././sonata/main.py:102 msgid "Current" msgstr "Dziejny" #: .././sonata/main.py:103 msgid "Library" msgstr "Biblijateka" #: .././sonata/main.py:104 msgid "Playlists" msgstr "Śpisy" #: .././sonata/main.py:105 msgid "Streams" msgstr "Płyni" #: .././sonata/main.py:106 msgid "Info" msgstr "Źviestki" #: .././sonata/main.py:137 .././sonata/preferences.py:193 #: .././sonata/preferences.py:194 msgid "Entire song" msgstr "Usia pieśnia" #: .././sonata/main.py:234 msgid "_Sort List" msgstr "_Uparadkuj śpis" #: .././sonata/main.py:235 msgid "Sa_ve List to" msgstr "_Zapišy śpis u" #: .././sonata/main.py:236 msgid "_Connection" msgstr "_Spałučeńnie" #: .././sonata/main.py:237 msgid "P_lay after" msgstr "_Hraj paśla" #: .././sonata/main.py:238 .././sonata/main.py:2454 msgid "_Update" msgstr "_Aktualizuj" #: .././sonata/main.py:239 msgid "Use _Remote Image..." msgstr "Užyj _addalenuju vyjavu..." #: .././sonata/main.py:240 msgid "Use _Local Image..." msgstr "Užyj _lakalnuju vyjavu..." #: .././sonata/main.py:241 msgid "_Fullscreen Mode" msgstr "" #: .././sonata/main.py:242 #, fuzzy msgid "Reset Image" msgstr "Adčyni vyjavu" #: .././sonata/main.py:243 msgid "_Play" msgstr "_Hraj" #: .././sonata/main.py:244 #, fuzzy msgid "Pa_use" msgstr "_Paŭza" #: .././sonata/main.py:245 msgid "_Stop" msgstr "_Spyni" #: .././sonata/main.py:246 #, fuzzy msgid "Pre_vious" msgstr "_Papiaredniaja" #: .././sonata/main.py:247 msgid "_Next" msgstr "_Nastupnaja" #: .././sonata/main.py:248 msgid "_Quit" msgstr "_Vyjdzi" #: .././sonata/main.py:249 msgid "_Remove" msgstr "_Vydal" #: .././sonata/main.py:250 msgid "_Clear" msgstr "_Ačyść" #: .././sonata/main.py:251 #, fuzzy msgid "_Entire Library" msgstr "_Aktualizuj biblijateku" #: .././sonata/main.py:252 #, fuzzy msgid "_Selected Items" msgstr "Dadaj zaznačanyja pieśni" #: .././sonata/main.py:253 msgid "_Preferences..." msgstr "_Nałady..." #: .././sonata/main.py:254 msgid "_About..." msgstr "_Ab prahramie..." #: .././sonata/main.py:255 msgid "_Edit Tags..." msgstr "_Redahuj tagi..." #: .././sonata/main.py:256 msgid "_Add" msgstr "_Dadaj" #: .././sonata/main.py:257 msgid "_Replace" msgstr "_Zamiani" #: .././sonata/main.py:258 msgid "Add" msgstr "Dadaj" #: .././sonata/main.py:259 msgid "Replace" msgstr "Zamiani" #: .././sonata/main.py:260 msgid "_Delete..." msgstr "_Vydal..." #: .././sonata/main.py:261 msgid "Shuffle" msgstr "Tasuj" #: .././sonata/main.py:286 #, fuzzy msgid "S_how Sonata" msgstr "_Pakažy Sonatu" #: .././sonata/main.py:287 msgid "_Repeat" msgstr "_Paŭtaraj" #: .././sonata/main.py:288 msgid "Rando_m" msgstr "_Vypadkova" #: .././sonata/main.py:428 msgid "By Artist" msgstr "Pavodle vykanaŭcaŭ" #: .././sonata/main.py:429 msgid "By Album" msgstr "Pavodle albomaŭ" #: .././sonata/main.py:430 msgid "By Song Title" msgstr "Pavodle nazvaŭ piesień" #: .././sonata/main.py:431 msgid "By File Name" msgstr "Pavodle nazvaŭ fajłaŭ" #: .././sonata/main.py:432 msgid "By Dir & File Name" msgstr "Pavodle katalohaŭ dy nazvaŭ fajłaŭ" #: .././sonata/main.py:433 msgid "Reverse List" msgstr "Pieraviarni śpis" #: .././sonata/main.py:456 .././sonata/main.py:467 msgid "_New..." msgstr "_Novy..." #: .././sonata/main.py:457 msgid "_Edit..." msgstr "_Redahuj..." #: .././sonata/main.py:468 msgid "_Rename..." msgstr "_Źmiani nazvu..." #: .././sonata/main.py:530 .././sonata/main.py:597 .././sonata/main.py:598 msgid "Playlist" msgstr "Śpis" #: .././sonata/main.py:560 .././sonata/main.py:1840 .././sonata/main.py:2049 msgid "Click to expand" msgstr "Klikni, kab razharnuć" #: .././sonata/main.py:565 .././sonata/main.py:1838 .././sonata/main.py:2047 msgid "Click to collapse" msgstr "Klikni, kab zharnuć" #: .././sonata/main.py:570 .././sonata/main.py:1732 .././sonata/main.py:1843 msgid "Not Connected" msgstr "Nie spałučany" #: .././sonata/main.py:572 .././sonata/main.py:1730 .././sonata/main.py:1845 msgid "No Read Permission" msgstr "Nie staje pravoŭ dziela zapisu" #: .././sonata/main.py:645 #, fuzzy msgid "Cover Art" msgstr "_Vokładka" #: .././sonata/main.py:850 .././sonata/main.py:863 .././sonata/main.py:884 msgid "Profile" msgstr "Profil" #: .././sonata/main.py:863 .././sonata/main.py:864 .././sonata/main.py:884 msgid "MPD_HOST/PORT" msgstr "MPD_HOST/PORT" #: .././sonata/main.py:865 .././sonata/main.py:871 msgid "Disconnect" msgstr "Adłučy" #: .././sonata/main.py:1187 .././sonata/main.py:1194 msgid "#" msgstr "#" #: .././sonata/main.py:1188 .././sonata/preferences.py:431 #: .././sonata/tagedit.py:128 msgid "Year" msgstr "Hod" #: .././sonata/main.py:1192 msgid "Stream" msgstr "Płyń" #: .././sonata/main.py:1193 msgid "Len" msgstr "Praciahłaść" #: .././sonata/main.py:1214 .././sonata/main.py:1221 .././sonata/main.py:1262 #: .././sonata/main.py:1269 msgid "Unknown" msgstr "Nieviadoma" #: .././sonata/main.py:1753 msgid "day" msgid_plural "days" msgstr[0] "dzień" msgstr[1] "dni" msgstr[2] "dzion" #: .././sonata/main.py:1761 msgid "hour" msgid_plural "hours" msgstr[0] "hadzina" msgstr[1] "hadziny" msgstr[2] "hadzin" #: .././sonata/main.py:1766 .././sonata/main.py:1768 msgid "and" msgstr "i" #: .././sonata/main.py:1776 msgid "(updating mpd)" msgstr "(aktualizacyja mpd)" #: .././sonata/main.py:2116 msgid "Lyrics Search" msgstr "Pošuk słovaŭ" #: .././sonata/main.py:2117 msgid "_Search" msgstr "_Šukaj" #: .././sonata/main.py:2120 msgid "Artist Name" msgstr "Nazva vykanaŭcy" #: .././sonata/main.py:2125 msgid "Song Title" msgstr "Nazva pieśni" #: .././sonata/main.py:2377 msgid "Open Image" msgstr "Adčyni vyjavu" #: .././sonata/main.py:2379 msgid "Images" msgstr "Vyjavy" #: .././sonata/main.py:2383 msgid "All files" msgstr "Usie fajły" #: .././sonata/main.py:2425 msgid "Choose Cover Art" msgstr "Abiary vokładku" #: .././sonata/main.py:2426 msgid "C_hoose" msgstr "_Abiary" #: .././sonata/main.py:2459 msgid "Edit search terms" msgstr "Redahuj krytery pošuku" #: .././sonata/main.py:2516 msgid "No artist or album name found." msgstr "Nazvaŭ vykanaŭcaŭ ci albomaŭ nia znojdziena." #: .././sonata/main.py:2519 msgid "No cover art found." msgstr "Vokładak nia znojdziena." #: .././sonata/main.py:2843 msgid "Delete the selected playlist?" msgid_plural "Delete the selected playlists?" msgstr[0] "Vydalić zaznačany śpis?" msgstr[1] "Vydalić zaznačanyja śpisy?" msgstr[2] "Vydalić zaznačanyja śpisy?" #: .././sonata/main.py:2843 msgid "Delete Playlist" msgid_plural "Delete Playlists" msgstr[0] "Vydal śpis" msgstr[1] "Vydal śpisy" msgstr[2] "Vydal śpisy" #: .././sonata/main.py:2851 msgid "Delete the selected stream?" msgid_plural "Delete the selected streams?" msgstr[0] "Vydalić zaznačanuju płyń?" msgstr[1] "Vydalić zaznačanyja płyni?" msgstr[2] "Vydalić zaznačanyja płyni?" #: .././sonata/main.py:2851 msgid "Delete Stream" msgid_plural "Delete Streams" msgstr[0] "Vydal płyń" msgstr[1] "Vydal płyni" msgstr[2] "Vydal płyni" #: .././sonata/main.py:2909 msgid "" "To save lyrics to the music file's directory, you must specify a valid music " "directory." msgstr "" "Kab zachoŭvać słovy ŭ katalohu muzyčnaha fajłu, treba akreślić sapraŭdny " "kataloh z muzykaj." #: .././sonata/main.py:2909 .././sonata/main.py:2916 msgid "Music Dir Verification" msgstr "Pravierka katalohu z muzykaj" #: .././sonata/main.py:2916 msgid "" "To save artwork to the music file's directory, you must specify a valid " "music directory." msgstr "" "Kab zachoŭvać vokładki ŭ katalohu muzyčnaha fajłu, treba akreślić sapraŭdny " "kataloh z muzykaj." #: .././sonata/main.py:3332 msgid "album" msgid_plural "albums" msgstr[0] "albom" msgstr[1] "albomy" msgstr[2] "albomaŭ" #: .././sonata/main.py:3333 msgid "artist" msgid_plural "artists" msgstr[0] "vykanaŭca" msgstr[1] "vykanaŭcy" msgstr[2] "vykanaŭcaŭ" #: .././sonata/main.py:3340 msgid "day of bliss" msgid_plural "days of bliss" msgstr[0] "dzień ščaścia" msgstr[1] "dni ščaścia" msgstr[2] "dzion ščaścia" #: .././sonata/main.py:3342 msgid "hour of bliss" msgid_plural "hours of bliss" msgstr[0] "hadzina ščaścia" msgstr[1] "hadziny ščaścia" msgstr[2] "hadzin ščaścia" #: .././sonata/playlists.py:103 .././sonata/playlists.py:105 msgid "Save Playlist" msgstr "Zapišy śpis" #: .././sonata/playlists.py:120 msgid "Would you like to replace the existing playlist or append these songs?" msgstr "" "Što ty chočaš zrabić: zamianić dziejny śpis albo dadać da jaho hetyja pieśni?" #: .././sonata/playlists.py:120 #, fuzzy msgid "Existing Playlist" msgstr "Śpis" #: .././sonata/playlists.py:120 msgid "Replace playlist" msgstr "Zamiani dziejny śpis" #: .././sonata/playlists.py:120 msgid "Append songs" msgstr "Dadaj pieśni" #: .././sonata/playlists.py:141 msgid "A playlist with this name already exists. Would you like to replace it?" msgstr "Śpis z takoj nazvaj užo isnuje. Chočaš zamianić jaho?" #: .././sonata/playlists.py:153 msgid "Playlist name" msgstr "Nazva śpisu" #: .././sonata/playlists.py:182 .././sonata/playlists.py:186 msgid "Rename Playlist" msgstr "Źmiani nazvu śpisu" #. Constants: #: .././sonata/preferences.py:35 msgid "System tray" msgstr "Systemny tray" #: .././sonata/preferences.py:35 msgid "Top Left" msgstr "Uviersie źleva" #: .././sonata/preferences.py:35 msgid "Top Right" msgstr "Uviersie sprava" #: .././sonata/preferences.py:35 msgid "Bottom Left" msgstr "Unizie źleva" #: .././sonata/preferences.py:35 msgid "Bottom Right" msgstr "Unizie sprava" #: .././sonata/preferences.py:35 msgid "Screen Center" msgstr "Pasiaredzinie ekranu" #. MPD tab #: .././sonata/preferences.py:64 msgid "MPD Connection" msgstr "Spałučeńnie z MPD" #: .././sonata/preferences.py:76 #, fuzzy msgid "_Name" msgstr "Nazva" #: .././sonata/preferences.py:79 #, fuzzy msgid "_Host" msgstr "Host" #: .././sonata/preferences.py:82 #, fuzzy msgid "_Port" msgstr "Port" #: .././sonata/preferences.py:86 #, fuzzy msgid "_Music dir" msgstr "Kataloh z muzykaj" #: .././sonata/preferences.py:87 msgid "Select a Music Directory" msgstr "" #: .././sonata/preferences.py:91 #, fuzzy msgid "Pa_ssword" msgstr "Parol" #: .././sonata/preferences.py:94 msgid "Leave blank if no password is required." msgstr "Pakiń pustym, kali parol nie vymahajecca." #: .././sonata/preferences.py:95 #, fuzzy msgid "_Autoconnect on start" msgstr "Aŭtamatyčna spałučajsia pry ŭklučeńni" #: .././sonata/preferences.py:113 msgid "Using MPD_HOST/PORT" msgstr "Užyta MPD_HOST/PORT" #: .././sonata/preferences.py:163 .././sonata/preferences.py:536 msgid "Extras" msgstr "Dadatki" #: .././sonata/preferences.py:168 msgid "_Audioscrobbling (Last.fm)" msgstr "" #: .././sonata/preferences.py:170 #, fuzzy msgid "_Username:" msgstr "Nazva karystalnika:" #: .././sonata/preferences.py:171 #, fuzzy msgid "_Password:" msgstr "Parol:" #: .././sonata/preferences.py:188 #, fuzzy msgid "Popup _notification on song changes" msgstr "Pakazvaj infarmavańni pry źmienie pieśni" #: .././sonata/preferences.py:210 msgid "Fade length" msgstr "Praciahłaść pierachodu" #: .././sonata/preferences.py:211 #, fuzzy msgid "_Fade length" msgstr "Praciahłaść pierachodu" #: .././sonata/preferences.py:213 msgid "sec" msgstr "sek" #: .././sonata/preferences.py:218 #, fuzzy msgid "C_rossfade" msgstr "Crossfade" #. Display tab #: .././sonata/preferences.py:246 .././sonata/preferences.py:533 msgid "Display" msgstr "Pakažy" #: .././sonata/preferences.py:251 #, fuzzy msgid "_Album art" msgstr "Nazva albomu" #: .././sonata/preferences.py:253 msgid "Standard" msgstr "Standartna" #: .././sonata/preferences.py:253 msgid "Stylized" msgstr "Stylizavana" #: .././sonata/preferences.py:256 msgid "Artwork style:" msgstr "Styl vokładki:" #: .././sonata/preferences.py:258 msgid "Local only" msgstr "Tolki lakalna" #: .././sonata/preferences.py:258 #, fuzzy msgid "Local and remote" msgstr "Lakalna, paśla addalena" #: .././sonata/preferences.py:260 #, fuzzy msgid "Search locations:" msgstr "Paradak pošuku:" #: .././sonata/preferences.py:267 .././sonata/preferences.py:289 msgid "SONG_DIR" msgstr "" #: .././sonata/preferences.py:269 msgid "custom" msgstr "asabliva" #: .././sonata/preferences.py:274 msgid "Save art to:" msgstr "Zachoŭvaj vokładki ŭ:" #: .././sonata/preferences.py:277 #, fuzzy msgid "_Playback/volume buttons" msgstr "Uklučy knopki hrańnia/kiravańnia hučnaściu" #: .././sonata/preferences.py:280 #, fuzzy msgid "Pr_ogressbar" msgstr "Uklučy panel prahresu" #: .././sonata/preferences.py:283 #, fuzzy msgid "_Statusbar" msgstr "Uklučy panel statusu" #: .././sonata/preferences.py:286 #, fuzzy msgid "Song Ly_rics" msgstr "Słovy" #: .././sonata/preferences.py:288 msgid "Save lyrics to:" msgstr "Zachoŭvaj słovy ŭ:" #: .././sonata/preferences.py:297 #, fuzzy msgid "System _tray icon" msgstr "Systemny tray" #. Behavior tab #: .././sonata/preferences.py:319 msgid "Window Behavior" msgstr "Pavodziny vakna" #: .././sonata/preferences.py:323 #, fuzzy msgid "_Show window on all workspaces" msgstr "Pakazvaj vakno na ŭsich rabočych abšaraŭ" #: .././sonata/preferences.py:326 #, fuzzy msgid "_Keep window above other windows" msgstr "Trymaj vakno pa-nad inšymi" #: .././sonata/preferences.py:329 #, fuzzy msgid "_Hide window titlebar" msgstr "Nazva vakna:" #: .././sonata/preferences.py:334 #, fuzzy msgid "_Minimize to system tray on close/escape" msgstr "Minimalizuj u systemny tray pry začynieńni/nacisku Escape" #: .././sonata/preferences.py:336 msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, so " "only check this if you have one." msgstr "" "Kali ŭklučana, začynienaja Sonata budzie minimalizavacca ŭ systemny tray. " "Pakul što niemahčyma vyznačyć, ci jość systemny tray, tamu ŭklučaj heta, " "tolki kali maješ jaho." #: .././sonata/preferences.py:350 msgid "Miscellaneous" msgstr "Roznaje" #: .././sonata/preferences.py:354 #, fuzzy msgid "_Update MPD library on start" msgstr "Aktualizuj biblijateku MPD pry ŭklučeńni" #: .././sonata/preferences.py:356 msgid "" "If enabled, Sonata will automatically update your MPD library when it starts " "up." msgstr "" "Kali ŭklučana, Sonata budzie aŭtamatyčna aktualizoŭvać tvaju biblijateku MPD " "pry ŭklučeńni." #: .././sonata/preferences.py:358 #, fuzzy msgid "S_top playback on exit" msgstr "Pierastań hrać pry vychadzie" #: .././sonata/preferences.py:360 msgid "" "MPD allows playback even when the client is not open. If enabled, Sonata " "will behave like a more conventional music player and, instead, stop " "playback upon exit." msgstr "" "MPD moža hrać, navat kali klijent začynieny. Kali ŭklučana, Sonata budzie " "bolš padobnaj da zvykłaha muzyčnaha playera, jaki spyniaje vykanańnie pry " "vychadzie." #: .././sonata/preferences.py:362 #, fuzzy msgid "_Write status file:" msgstr "Zapisvaj statusny fajł:" #: .././sonata/preferences.py:364 .././sonata/preferences.py:366 msgid "" "If enabled, Sonata will create a xmms-infopipe like file containing " "information about the current song. Many applications support the xmms-info " "file (Instant Messengers, IRC Clients...)" msgstr "" "Kali ŭklučana, Sonata stvoryć fajł typu xmms-infopipe, sa źviestkami ab " "pieśni, jakaja ciapier hrajecca. Šmat aplikacyj pracujuć z takim fajłam " "(kamunikatary, klijenty IRC...)" #. Format tab #: .././sonata/preferences.py:392 msgid "Song Formatting" msgstr "Farmat pieśniaŭ" #: .././sonata/preferences.py:397 #, fuzzy msgid "C_urrent playlist:" msgstr "Dziejny śpis:" #: .././sonata/preferences.py:398 #, fuzzy msgid "_Library:" msgstr "Biblijateka:" #: .././sonata/preferences.py:399 #, fuzzy msgid "_Window title:" msgstr "Nazva vakna:" #: .././sonata/preferences.py:400 #, fuzzy msgid "Current _song line 1:" msgstr "Radok 1 dziejnaj pieśni:" #: .././sonata/preferences.py:402 #, fuzzy msgid "Current s_ong line 2:" msgstr "Radok 2 dziejnaj pieśni:" #: .././sonata/preferences.py:422 msgid "Available options" msgstr "Najaŭnyja opcyi" #. XXX get these directly from the formatting function: #: .././sonata/preferences.py:426 msgid "Artist name" msgstr "Nazva vykanaŭcy" #: .././sonata/preferences.py:427 msgid "Album name" msgstr "Nazva albomu" #: .././sonata/preferences.py:428 msgid "Track name" msgstr "Nazva pieśni" #: .././sonata/preferences.py:429 msgid "Track number" msgstr "Numar pieśni" #: .././sonata/preferences.py:430 #, fuzzy msgid "Disc number" msgstr "Numar dysku" #: .././sonata/preferences.py:433 #, fuzzy msgid "File path" msgstr "ściežka_fajłu" #: .././sonata/preferences.py:434 msgid "File name" msgstr "Nazva fajłu" #: .././sonata/preferences.py:435 .././sonata/streams.py:109 msgid "Stream name" msgstr "Nazva płyni" #: .././sonata/preferences.py:436 msgid "Song length" msgstr "Praciahłaść pieśni" #: .././sonata/preferences.py:437 msgid "Elapsed time (title only)" msgstr "Adbyŭšy čas (tolki nazva)" #: .././sonata/preferences.py:448 msgid "Info displayed only if all enclosed tags are defined" msgstr "Źviestki, jakija pakazvajucca, tolki kali ŭsie tagi akreślenyja" #: .././sonata/preferences.py:448 msgid "Creates columns in the current playlist" msgstr "Stvaraje kalony ŭ dziejnym śpisie" #: .././sonata/preferences.py:473 #, fuzzy msgid "_About" msgstr "_Ab prahramie..." #: .././sonata/preferences.py:474 msgid "_Configure..." msgstr "" #: .././sonata/preferences.py:513 msgid "Loaded" msgstr "" #: .././sonata/preferences.py:521 msgid "Description" msgstr "" #. Set up table #: .././sonata/preferences.py:532 #, fuzzy msgid "MPD" msgstr "_MPD" #: .././sonata/preferences.py:534 #, fuzzy msgid "Behavior" msgstr "_Pavodziny" #: .././sonata/preferences.py:535 #, fuzzy msgid "Format" msgstr "_Farmat" #: .././sonata/preferences.py:605 msgid "New Profile" msgstr "Novy profil" #. Prompt user for playlist name: #: .././sonata/preferences.py:659 msgid "Custom Artwork" msgstr "Asablivaja vokładka" #: .././sonata/preferences.py:661 msgid "Artwork filename" msgstr "Nazva fajłu z vokładkaj" #: .././sonata/streams.py:105 msgid "Edit Stream" msgstr "Redahuj płyń" #: .././sonata/streams.py:107 .././sonata/streams.py:138 msgid "New Stream" msgstr "Novaja płyń" #: .././sonata/streams.py:116 msgid "Stream URL" msgstr "URL płyni" #: .././sonata/streams.py:138 msgid "A stream with this name already exists. Would you like to replace it?" msgstr "Płyń z takoj nazvaj užo isnuje. Chočaš zamianić jaje?" #: .././sonata/tagedit.py:61 msgid "Taglib and/or tagpy not found, tag editing support disabled." msgstr "Taglib i/ci tagpy nia znojdzienyja, redahavańnie tagaŭ vyklučanaje." #: .././sonata/tagedit.py:61 .././sonata/tagedit.py:70 #: .././sonata/tagedit.py:75 .././sonata/tagedit.py:99 #: .././sonata/tagedit.py:103 .././sonata/tagedit.py:260 #: .././sonata/tagedit.py:299 msgid "Edit Tags" msgstr "Redahuj tagi" #: .././sonata/tagedit.py:70 #, fuzzy msgid "" "Tagpy version < 0.91. Please upgrade to a newer version, tag editing support " "disabled." msgstr "Taglib i/ci tagpy nia znojdzienyja, redahavańnie tagaŭ vyklučanaje." #: .././sonata/tagedit.py:75 msgid "The path" msgstr "Ściežka" #: .././sonata/tagedit.py:75 msgid "does not exist. Please specify a valid music directory in preferences." msgstr "nie isnuje. Akreśl u naładach kataloh z muzykaj." #: .././sonata/tagedit.py:99 msgid "File " msgstr "Fajł " #: .././sonata/tagedit.py:99 msgid " not found. Please specify a valid music directory in preferences." msgstr " nia znojdzieny. Akreśl u naładach kataloh z muzykaj." #: .././sonata/tagedit.py:103 msgid "No music files with editable tags found." msgstr "Muzyčnych fajłaŭ sa źmiennymi tagami nia znojdziena." #: .././sonata/tagedit.py:150 msgid "Comment" msgstr "Kamentar" #. Only show save all button if more than one song being edited. #: .././sonata/tagedit.py:161 msgid "Save _All" msgstr "Zapišy _ŭsio" #: .././sonata/tagedit.py:207 msgid "Increment each selected music file, starting at track 1 for this file." msgstr "" "Pavialičyć kožny vybrany muzyčny fajł, pačaŭšy ad pieršaj pieśni dla hetaha " "fajłu." #: .././sonata/tagedit.py:209 msgid "Apply to all selected music files." msgstr "Prymiani dla ŭsich zaznačanych muzyčnych fajłaŭ." #: .././sonata/tagedit.py:260 msgid "of" msgstr "vyklučana" #. FIXME: was (save_success and self.conn and self.status): #: .././sonata/tagedit.py:299 msgid "Unable to save tag to music file." msgstr "Niemahčyma zapisać tag u muzyčnym fajle." #: .././sonata/tagedit.py:366 #, fuzzy msgid "Hide file path" msgstr "ściežka_fajłu" #: .././sonata/tagedit.py:369 #, fuzzy msgid "Show file path" msgstr "ściežka_fajłu" #~ msgid "The popup argument requires D-Bus. Aborting." #~ msgstr "Arhument vypłyŭnoha akna vymahaje D-Bus. Abryŭ." #, fuzzy #~ msgid "_Update Path" #~ msgstr "_Aktualizuj" #~ msgid "Website: http://www.nongnu.org/sonata/" #~ msgstr "Sajt: http://www.nongnu.org/sonata/" #~ msgid "Enable Audioscrobbler" #~ msgstr "Uklučy Audioscrobbler" #~ msgid "Enable Crossfade" #~ msgstr "Uklučy Crossfade" #~ msgid "Enable album art" #~ msgstr "Uklučy vokładki" #~ msgid "Enable lyrics" #~ msgstr "Uklučy słovy" #~ msgid "Enable system tray icon" #~ msgstr "Uklučy ikonu ŭ systemnym trai" #~ msgid "_Display" #~ msgstr "_Pakažy" #~ msgid "_Extras" #~ msgstr "_Dadatki" #~ msgid "" #~ "PyGTK+ 2.10 or gnome-python-extras not found, system tray support " #~ "disabled." #~ msgstr "" #~ "PyGTK+ 2.10 ci gnome-python-extras nia znojdzienyja, systemny tray " #~ "vyklučany." #~ msgid "Reset to Default" #~ msgstr "Viarni zmoŭčanaje" #~ msgid "_New Playlist..." #~ msgstr "_Novy śpis..." #~ msgid "Notification" #~ msgstr "Nahadvańnie" #~ msgid "" #~ "Python 2.5 or python-elementtree not found, audioscrobbler support " #~ "disabled." #~ msgstr "" #~ "Python 2.5 ci python-elementtree nia znojdzienyja, audioscrobbler " #~ "vyklučany." #~ msgid "Audioscrobbler Verification" #~ msgstr "Pravierka Audioscrobblera" #~ msgid "Update library for selected item(s)" #~ msgstr "Aktualizuj biblijateku zaznačanymi pieśniami" #~ msgid "_Shuffle" #~ msgstr "_Tasuj" #~ msgid "Toggle shuffle mode" #~ msgstr "Źmiani režym tasavańnia" #~ msgid "Not connected" #~ msgstr "Nie spałučany" #~ msgid "Press enter to search for these terms." #~ msgstr "Naciśni Enter, kab šukać zhodna z hetymi kryterami." #~ msgid "Add new profile" #~ msgstr "Dadaj novy profil" #~ msgid "Remove current profile" #~ msgstr "Vydal dziejny profil" #~ msgid "Play enqueued files on activate" #~ msgstr "Hraj fajły z čarhi pry aktyvizacyi" #~ msgid "" #~ "Automatically play enqueued items when activated via double-click or " #~ "enter." #~ msgstr "" #~ "Aŭtamatyčna hraj pieśni ŭ čarzie pry aktyvizacyi dvuklikam albo Enteram." #~ msgid "Add selected song(s) or directory(s)" #~ msgstr "Dadaj zaznačanyja pieśni ci katalohi" #~ msgid "Replace with selected song(s) or directory(s)" #~ msgstr "Zamiani zaznačanyja pieśni ci katalohi" #~ msgid "Add to _Queue" #~ msgstr "Dadaj u _čarhu" #~ msgid "Remove from _Queue" #~ msgstr "Vydal z _čarhi" #~ msgid "Add selected song(s) to playlist queue" #~ msgstr "Dadaj zaznačanyja pieśni ŭ čarhu śpisu" #~ msgid "Remove selected song(s) from playlist queue" #~ msgstr "Vydal zaznačanyja pieśni z čarhi śpisu" #~ msgid "seconds" #~ msgstr "sekundaŭ" #~ msgid "Song Info..." #~ msgstr "Źviestki pieśni..." #~ msgid "Click to collapse the player" #~ msgstr "Klikni, kab zharnuć player" #~ msgid "Click to expand the player" #~ msgstr "Klikni, kab razharnuć player" #~ msgid "_Song Info" #~ msgstr "_Źviestki ab pieśni" #~ msgid "_Search..." #~ msgstr "_Šukaj..." #~ msgid "Remote only" #~ msgstr "Tolki addalena" #~ msgid "Remote, then local" #~ msgstr "Addalena, paśla lakalna" #~ msgid "To save artwork as" #~ msgstr "Zachoŭvać vokładki jak" #~ msgid "Artwork Verification" #~ msgstr "Pravierka vokładki" #~ msgid "Switch to current playlist" #~ msgstr "Pieraklučysia na dziejny śpis" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/po/ca.po�������������������������������������������������������������������������������0000664�0000000�0000000�00000113772�13771420143�0014362�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Catalan translation of Sonata # Copyright (C) 2007 Scott Horowitz # This file is distributed under the same license as the Sonata package. # Scott Horowitz <stonecrest@gmail.com> 2007. # Franc Rodriguez <franc.rodriguez@tecob.com> # # msgid "" msgstr "" "Project-Id-Version: Sonata 1.6.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-03-22 22:00-0600\n" "PO-Revision-Date: 2009-03-23 14:30+0200\n" "Last-Translator: Franc Rodriguez <franc.rodriguez@tecob.com>\n" "Language-Team: Catalan\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. define the shortcuts and their descriptions #. these are all gettextable #: .././sonata/about.py:52 msgid "About Sonata" msgstr "En quan a Sonata" #: .././sonata/about.py:53 .././sonata/preferences.py:60 msgid "Preferences" msgstr "Preferències" #: .././sonata/about.py:54 msgid "Fullscreen Artwork Mode" msgstr "Mode Art a pantalla completa" #: .././sonata/about.py:55 msgid "Switch to [1st-5th] tab" msgstr "Recórrer la [1ª-5ª] pestanya" #: .././sonata/about.py:56 msgid "Connect to MPD" msgstr "Conectar al servidor MPD" #: .././sonata/about.py:57 msgid "Disconnect from MPD" msgstr "Desconectar del servidor MPD" #: .././sonata/about.py:58 msgid "Randomize current playlist" msgstr "Desordenar la llista de reproducció actual" #: .././sonata/about.py:59 msgid "Expand player" msgstr "Expandir reproductor" #: .././sonata/about.py:60 msgid "Switch to previous tab" msgstr "Canviar a la pestanya anterior" #: .././sonata/about.py:61 msgid "Switch to next tab" msgstr "Canviar a la pestanya següent" #: .././sonata/about.py:62 msgid "Collapse player" msgstr "Recollir reproductor" #: .././sonata/about.py:63 .././sonata/library.py:86 msgid "Search library" msgstr "Buscar a la biblioteca" #: .././sonata/about.py:64 msgid "Quit" msgstr "Sortir" #: .././sonata/about.py:65 msgid "Update entire library" msgstr "Actualitzar la biblioteca sencera" #: .././sonata/about.py:66 msgid "Display popup menu" msgstr "Mostrar el menú contextual" #: .././sonata/about.py:67 msgid "Minimize to system tray (if enabled)" msgstr "Minimitzar a l'àrea de notificació (si està actiu)" #: .././sonata/about.py:69 msgid "Previous track" msgstr "Cançó anterior" #: .././sonata/about.py:70 msgid "Next track" msgstr "Següent cançó" #: .././sonata/about.py:71 msgid "Play/Pause" msgstr "Reproduïr/Pausar" #: .././sonata/about.py:72 msgid "Stop" msgstr "Aturar" #: .././sonata/about.py:73 msgid "Lower the volume" msgstr "Baixar el volúm" #: .././sonata/about.py:74 msgid "Raise the volume" msgstr "Pujar el volúm" #: .././sonata/about.py:76 msgid "Play selected song" msgstr "Reproduïr la cançó seleccionada " #: .././sonata/about.py:77 msgid "Remove selected song(s)" msgstr "Esborrar les cançons seleccionades" #: .././sonata/about.py:78 msgid "Center currently playing song" msgstr "Centrar la cançó en reproducció" #: .././sonata/about.py:79 .././sonata/about.py:88 msgid "Edit selected song's tags" msgstr "Editar les etiquetes de las cançons seleccionades" #: .././sonata/about.py:80 msgid "Save to new playlist" msgstr "Guardar en una llista de reproducció nova" #: .././sonata/about.py:81 msgid "Clear list" msgstr "Buidar la llista de reproducció" #: .././sonata/about.py:82 msgid "Randomize list" msgstr "Desordenar la llista de reproducció" #: .././sonata/about.py:84 msgid "Add selected song(s) or enter directory" msgstr "Afegir la/les canço/cançons seleccionada/es o entrar al directori" #: .././sonata/about.py:85 msgid "Go to parent directory" msgstr "Anar al directori superior" #: .././sonata/about.py:86 msgid "Add selected item(s)" msgstr "Afegir el/els element/s seleccionat/s" #: .././sonata/about.py:87 msgid "Replace with selected item(s)" msgstr "Reemplaçar amb el/els element/s seleccionat/s" #: .././sonata/about.py:89 msgid "Add selected item(s) and play" msgstr "Afegir el/els element/s seleccionat/s i reproduir-los" #: .././sonata/about.py:90 msgid "Replace with selected item(s) and play" msgstr "Reemplaçar amb el/els element/s seleccionat/s i reproduïr-lo/s" #: .././sonata/about.py:91 msgid "Update selected item(s)/path(s)" msgstr "Afegir el/els element/s seleccionat/s" #: .././sonata/about.py:93 .././sonata/about.py:95 msgid "Add selected playlist(s)" msgstr "Afegir la/les llista/es de reproducció seleccionada/es" #: .././sonata/about.py:94 msgid "Remove selected playlist(s)" msgstr "Eliminar le/s lliste/s de reproducció seleccionat/s" #: .././sonata/about.py:96 msgid "Replace with selected playlist(s)" msgstr "Reemplaçar amb la/les llista/es de reproduccin seleccionada/es" #: .././sonata/about.py:97 msgid "Add selected playlist(s) and play" msgstr "Afegir la/es llista/es de reproducció seleccionada/es i reproducïr-la/es" #: .././sonata/about.py:98 msgid "Replace with selected playlist(s) and play" msgstr "Reemplaçar amb la/les llista/es de reproducció seleccionada/es i reproduïr-la/les" #: .././sonata/about.py:100 .././sonata/about.py:102 msgid "Add selected stream(s)" msgstr "Afegir el/els flux/es seleccionat/s" #: .././sonata/about.py:101 msgid "Remove selected stream(s)" msgstr "Esborrar el/els flux/es seleccionat/s" #: .././sonata/about.py:103 msgid "Replace with selected stream(s)" msgstr "Reemplaçar amb el/els flux/es seleccionat/s" #: .././sonata/about.py:104 msgid "Add selected stream(s) and play" msgstr "Afegir el/els flux/es seleccionat/s i reproduïr-lo/los" #: .././sonata/about.py:105 msgid "Replace with selected stream(s) and play" msgstr "Reemplaçar amb el/els flux/es seleccionat/s i reproduïr-lo/los" #: .././sonata/about.py:107 msgid "Edit playing song's tags" msgstr "Editar les etiquetes de la cançó en reproducció" #. define the main array- this adds headings to each section of #. shortcuts that will be displayed #: .././sonata/about.py:110 msgid "Main Shortcuts" msgstr "Principals" #: .././sonata/about.py:111 msgid "Playback Shortcuts" msgstr "Reproducció" #: .././sonata/about.py:112 msgid "Current Shortcuts" msgstr "Llista de reproducció actual" #: .././sonata/about.py:113 msgid "Library Shortcuts" msgstr "Biblioteca" #: .././sonata/about.py:114 msgid "Playlist Shortcuts" msgstr "Llistes de reproducció" #: .././sonata/about.py:115 msgid "Stream Shortcuts" msgstr "Fluxes" #: .././sonata/about.py:116 msgid "Info Shortcuts" msgstr "Informació de la cançó" #: .././sonata/about.py:117 msgid "Shortcuts" msgstr "Dreceres del teclat" #: .././sonata/about.py:153 msgid "An elegant music client for MPD." msgstr "Un client elegant de música per MPD." #. Add button to show keybindings: #: .././sonata/about.py:166 msgid "_Shortcuts" msgstr "_Dreceres del teclat" #: .././sonata/about.py:177 .././sonata/main.py:3088 #: .././sonata/preferences.py:738 msgid "Unable to launch a suitable browser." msgstr "No es pot arrencar el navegador" #: .././sonata/about.py:177 .././sonata/main.py:3088 #: .././sonata/preferences.py:738 msgid "Launch Browser" msgstr "Arrenca el navegador" #: .././sonata/cli.py:81 msgid "The toggle and popup arguments require D-Bus. Aborting." msgstr "L'argument -t, --toggle i popup requereix D-Bus. Abortant." #: .././sonata/cli.py:97 msgid "Version" msgstr "Versió" #: .././sonata/cli.py:98 msgid "Website" msgstr "" #: .././sonata/cli.py:103 msgid "Usage: sonata [OPTION]... [COMMAND]..." msgstr "Ús: sonata [OPCIÓ]... [COMANDA]..." #: .././sonata/cli.py:105 msgid "Options" msgstr "Opcions" #: .././sonata/cli.py:106 msgid "Show this help and exit" msgstr "Mostra aquest missatge d'ajuda i surt" #: .././sonata/cli.py:107 msgid "Popup song notification (requires D-Bus)" msgstr "Mostra una notificació de cançó ( Requereix D-Bus)" #: .././sonata/cli.py:108 msgid "Toggles whether the app is minimized" msgstr "Mostra/Amaga l'aplicació en" #: .././sonata/cli.py:109 msgid "to tray or visible (requires D-Bus)" msgstr "a l'àrea de notificació (requereix D-Bus)" #: .././sonata/cli.py:110 msgid "Don't start app if D-Bus commands fail" msgstr "No iniciar l'aplicació si les comandes D-Bus fallen" #: .././sonata/cli.py:111 msgid "Show version information and exit" msgstr "Mostra informació sobre la versió i surt" #: .././sonata/cli.py:112 msgid "Start app hidden (requires systray)" msgstr "Inicia l'aplicació amagada (requereix una área de notificació)" #: .././sonata/cli.py:113 msgid "Start app visible (requires systray)" msgstr "Inicia l' aplicació visible (requereix una área de notificació)" #: .././sonata/cli.py:114 msgid "Start with profile [NUM]" msgstr "Iniciar amb el perfil [NUM]" #: .././sonata/cli.py:116 msgid "Commands" msgstr "Comandes" #: .././sonata/cli.py:117 msgid "Play song in playlist" msgstr "Reprodueix la cançó en la llista de reproducció" #: .././sonata/cli.py:118 msgid "Pause currently playing song" msgstr "Pausa la cançó actual en reproducció" #: .././sonata/cli.py:119 msgid "Stop currently playing song" msgstr "Atura la cançó actual en reproducció" #: .././sonata/cli.py:120 msgid "Play next song in playlist" msgstr "Reprodueix la següent cançó en la llista de reproducció" #: .././sonata/cli.py:121 msgid "Play previous song in playlist" msgstr "Reprodueix la cançó anterior en la llista de reproducció" #: .././sonata/cli.py:122 msgid "Toggle play/pause; plays if stopped" msgstr "Activa/Desactiva la reproducció/pausa; reprodueix si està aturat" #: .././sonata/cli.py:123 msgid "Toggle repeat mode" msgstr "Activa/Desactiva el mode de repetició" #: .././sonata/cli.py:124 msgid "Toggle random mode" msgstr "Activa/Desactiva el mode aleatori" #: .././sonata/cli.py:125 msgid "Display current song info" msgstr "Motra l' informació de la cançó actual" #: .././sonata/cli.py:126 msgid "Display MPD status" msgstr "Mostra l' estat del servidor MPD" #: .././sonata/cli.py:134 #, python-format msgid "Starting Sonata with profile %s..." msgstr "Iniciar Sonata amb el perfil %s..." #: .././sonata/cli.py:136 #, python-format msgid "%d is not an available profile number." msgstr "%d no és un número de perfil disponible" #: .././sonata/cli.py:137 .././sonata/cli.py:141 #, python-format msgid "Profile numbers must be between 1 and %d." msgstr "El número del perfil ha de ser entre 1 i %d" #: .././sonata/cli.py:140 #, python-format msgid "Python is unable to interpret %s as a number." msgstr "Python no pot interpretar %s com un número" #: .././sonata/cli.py:154 .././sonata/main.py:179 msgid "Default Profile" msgstr "Perfil predeterminat" #: .././sonata/cli.py:154 .././sonata/main.py:179 msgid "by" msgstr "per" #: .././sonata/cli.py:154 .././sonata/main.py:179 msgid "from" msgstr "de" #: .././sonata/cli.py:176 msgid "" "Unable to connect to MPD.\n" "Please check your Sonata preferences or MPD_HOST/MPD_PORT environment " "variables." msgstr "" "No ha estat possible conectar al servidor MPD.\n" "Si us plau, revisi les preferències de Sonata o les variables d'entorn " "MPD_HOST/MPD_PORT." #: .././sonata/cli.py:208 .././sonata/info.py:91 .././sonata/info.py:245 #: .././sonata/library.py:49 .././sonata/tagedit.py:125 msgid "Title" msgstr "Títol" #: .././sonata/cli.py:209 .././sonata/info.py:91 .././sonata/info.py:246 #: .././sonata/library.py:49 .././sonata/main.py:1184 #: .././sonata/tagedit.py:126 msgid "Artist" msgstr "Artista" #: .././sonata/cli.py:210 .././sonata/info.py:91 .././sonata/info.py:247 #: .././sonata/library.py:49 .././sonata/main.py:1185 .././sonata/main.py:2439 #: .././sonata/tagedit.py:127 msgid "Album" msgstr "Àlbum" #: .././sonata/cli.py:211 .././sonata/info.py:91 .././sonata/info.py:248 msgid "Date" msgstr "Data" #: .././sonata/cli.py:212 .././sonata/info.py:91 .././sonata/info.py:250 #: .././sonata/main.py:1186 .././sonata/tagedit.py:130 msgid "Track" msgstr "Pista" #: .././sonata/cli.py:213 .././sonata/info.py:91 .././sonata/info.py:249 #: .././sonata/library.py:49 .././sonata/main.py:1189 #: .././sonata/preferences.py:432 .././sonata/tagedit.py:139 msgid "Genre" msgstr "Estil" #: .././sonata/cli.py:214 .././sonata/info.py:91 .././sonata/info.py:251 #: .././sonata/main.py:1191 msgid "File" msgstr "Fitxer" #: .././sonata/cli.py:219 .././sonata/cli.py:221 msgid "Time" msgstr "Temps" #: .././sonata/cli.py:222 .././sonata/info.py:91 .././sonata/info.py:244 msgid "Bitrate" msgstr "Tasa de bits" #: .././sonata/cli.py:224 msgid "MPD stopped" msgstr "MPD aturat" #: .././sonata/cli.py:228 .././sonata/cli.py:230 .././sonata/cli.py:232 msgid "State" msgstr "Estat" #: .././sonata/cli.py:228 msgid "Playing" msgstr "Reproduint" #: .././sonata/cli.py:230 msgid "Paused" msgstr "Aturat" #: .././sonata/cli.py:232 .././sonata/main.py:559 .././sonata/main.py:564 #: .././sonata/main.py:1836 .././sonata/main.py:1847 msgid "Stopped" msgstr "Aturat" #: .././sonata/cli.py:234 .././sonata/cli.py:236 msgid "Repeat" msgstr "Repetir" #: .././sonata/cli.py:234 .././sonata/cli.py:238 msgid "Off" msgstr "Desactivat" #: .././sonata/cli.py:236 .././sonata/cli.py:240 msgid "On" msgstr "Activat" #: .././sonata/cli.py:238 .././sonata/cli.py:240 msgid "Random" msgstr "Desordenar" #: .././sonata/cli.py:241 msgid "Volume" msgstr "Volúm" #: .././sonata/cli.py:242 msgid "Crossfade" msgstr "Esvair" #: .././sonata/cli.py:242 .././sonata/preferences.py:192 msgid "second" msgid_plural "seconds" msgstr[0] "segon" msgstr[1] "segons" #: .././sonata/current.py:64 msgid "Filter" msgstr "Filtre" #: .././sonata/dbus_plugin.py:83 msgid "" "Sonata failed to connect to the D-BUS session bus: Unable to determine the " "address of the message bus (try 'man dbus-launch' and 'man dbus-daemon' for " "help)" msgstr "" "S'ha produit un error al connectar amb el transport de la sessió D-Bus:No " "s'ha pogut determinar l'adreça del missatge de transport (consulti el manual " "de 'dbus-launch'i de 'dbus-daemon' per obtenir ajuda)." #: .././sonata/dbus_plugin.py:96 msgid "Failed to execute remote commands." msgstr "" #: .././sonata/dbus_plugin.py:98 msgid "Starting Sonata instead..." msgstr "Iniciant Sonata en lloc de ..." #: .././sonata/dbus_plugin.py:100 msgid "Maybe Sonata is not running?" msgstr "Potser sonata no està en marxa?" #: .././sonata/dbus_plugin.py:114 msgid "An instance of Sonata is already running. Showing it..." msgstr "Ja s'està executant una instància de Sonata." #: .././sonata/dbus_plugin.py:120 msgid "Failed to execute remote command." msgstr "L'execució remota de la comanda ha fallat." #. Song info #: .././sonata/info.py:78 msgid "Song Info" msgstr "Informació de la cançó" #: .././sonata/info.py:93 msgid "Launch artist in Wikipedia" msgstr "Informació sobre l' artista en Wikipedia" #: .././sonata/info.py:93 msgid "Launch album in Wikipedia" msgstr "Informació sobre l' álbum en Wikipedia" #: .././sonata/info.py:127 msgid "Toggle extra tags" msgstr "Mostra/Amaga informació extra" #: .././sonata/info.py:130 msgid "Edit song tags" msgstr "Editar les etiquetes de la cançó" #. Lyrics #: .././sonata/info.py:140 msgid "Lyrics" msgstr "Lletres" #: .././sonata/info.py:152 msgid "Search Lyricwiki.org for lyrics" msgstr "Cerca les lletres de la cançó a Lyricwiki.org" #: .././sonata/info.py:153 msgid "Edit lyrics at Lyricwiki.org" msgstr "Editar lletres a Lyricwiki.org" #. Album info #: .././sonata/info.py:161 msgid "Album Info" msgstr "Informació de l' àlbum" #: .././sonata/info.py:213 .././sonata/info.py:218 msgid "more" msgstr "meś" #: .././sonata/info.py:215 msgid "hide" msgstr "amagar" #: .././sonata/info.py:281 msgid "edit tags" msgstr "editar etiquetes" #: .././sonata/info.py:308 msgid "Album info not found." msgstr "No s'ha trobat informació de l'àlbum" #: .././sonata/info.py:311 msgid "Album name not set." msgstr "No s'ha especificat un nom d'àlbum" #: .././sonata/info.py:324 msgid "ZSI not found, fetching lyrics support disabled." msgstr "" "No s'ha trobat ZSI, s' ha desactivat el suport per la descàrrega de lletres." #: .././sonata/info.py:329 msgid "Artist or song title not set." msgstr "No s'ha especificat cap artista o títol de la cançó" #: .././sonata/info.py:371 msgid "search" msgstr "Cerca" #: .././sonata/info.py:372 msgid "edit" msgstr "editar" #: .././sonata/info.py:381 .././sonata/info.py:436 msgid "Lyrics not found" msgstr "No s'han trobat lletres" #. Fetch lyrics from lyricwiki.org #: .././sonata/info.py:401 msgid "Fetching lyrics..." msgstr "Obtenint lletres" #: .././sonata/info.py:411 msgid "Couldn't connect to LyricWiki" msgstr "No s'ha pogut connectar a LyricWiki" #: .././sonata/info.py:439 msgid "Fetching lyrics failed" msgstr "Ha fallat la descàrrega de lletres" #: .././sonata/library.py:47 msgid "Untagged" msgstr "Sense etiquetar" #: .././sonata/library.py:48 msgid "Various Artists" msgstr "Varis artistes" #: .././sonata/library.py:49 msgid "Filename" msgstr "Nom del fitxer" #: .././sonata/library.py:49 msgid "Everything" msgstr "Tot" #: .././sonata/library.py:52 msgid "Filesystem" msgstr "Sistema de fitxers" #: .././sonata/library.py:53 msgid "Artists" msgstr "Artistes" #: .././sonata/library.py:54 msgid "Albums" msgstr "Àlbums" #: .././sonata/library.py:55 msgid "Genres" msgstr "Estils" #: .././sonata/library.py:84 msgid "Search terms" msgstr "Cercar termes" #: .././sonata/library.py:90 msgid "End Search" msgstr "Finalitzar recerca" #: .././sonata/library.py:92 msgid "Library browsing view" msgstr "Vista de la biblioteca" #: .././sonata/library.py:96 msgid "Search" msgstr "Cercar" #. Show text: #: .././sonata/library.py:761 .././sonata/main.py:1763 #: .././sonata/main.py:3331 msgid "song" msgid_plural "songs" msgstr[0] "cançó" msgstr[1] "cançons" #: .././sonata/library.py:761 .././sonata/main.py:1757 msgid "minute" msgid_plural "minutes" msgstr[0] "minut" msgstr[1] "minuts" #: .././sonata/library.py:849 msgid "Song" msgstr "cançó" #: .././sonata/library.py:849 .././sonata/main.py:1190 msgid "Path" msgstr "Camí" #. Constants #: .././sonata/main.py:102 msgid "Current" msgstr "Actual" #: .././sonata/main.py:103 msgid "Library" msgstr "Biblioteca" #: .././sonata/main.py:104 msgid "Playlists" msgstr "Llistes de reproducció" #: .././sonata/main.py:105 msgid "Streams" msgstr "Fluxes" #: .././sonata/main.py:106 msgid "Info" msgstr "Informació de la cançó" #: .././sonata/main.py:137 .././sonata/preferences.py:193 #: .././sonata/preferences.py:194 msgid "Entire song" msgstr "Tota la cançó" #: .././sonata/main.py:234 msgid "_Sort List" msgstr "_Ordenar llista de reproducció" #: .././sonata/main.py:235 msgid "Sa_ve List to" msgstr "Gua_rdar llista de reproducció a" #: .././sonata/main.py:236 msgid "_Connection" msgstr "Connexió" #: .././sonata/main.py:237 msgid "P_lay after" msgstr "Rep_roduïr després" #: .././sonata/main.py:238 .././sonata/main.py:2454 msgid "_Update" msgstr "_Actualitzar" #: .././sonata/main.py:239 msgid "Use _Remote Image..." msgstr "Usar imatge _remota..." #: .././sonata/main.py:240 msgid "Use _Local Image..." msgstr "Usar Imatge _Local..." #: .././sonata/main.py:241 msgid "_Fullscreen Mode" msgstr "" #: .././sonata/main.py:242 msgid "Reset Image" msgstr "Reiniciar imatge" #: .././sonata/main.py:243 msgid "_Play" msgstr "_Reproduïr" #: .././sonata/main.py:244 msgid "Pa_use" msgstr "Pa_usar" #: .././sonata/main.py:245 msgid "_Stop" msgstr "_Aturar" #: .././sonata/main.py:246 msgid "Pre_vious" msgstr "_Anterior" #: .././sonata/main.py:247 msgid "_Next" msgstr "_Següent" #: .././sonata/main.py:248 msgid "_Quit" msgstr "_Sortir" #: .././sonata/main.py:249 msgid "_Remove" msgstr "_Treure" #: .././sonata/main.py:250 msgid "_Clear" msgstr "_Netejar" #: .././sonata/main.py:251 msgid "_Entire Library" msgstr "_Biblioteca sencera" #: .././sonata/main.py:252 msgid "_Selected Items" msgstr "_Elements seleccionats" #: .././sonata/main.py:253 msgid "_Preferences..." msgstr "_Preferències..." #: .././sonata/main.py:254 msgid "_About..." msgstr "_En quant a..." #: .././sonata/main.py:255 msgid "_Edit Tags..." msgstr "_Editar etiquetes..." #: .././sonata/main.py:256 msgid "_Add" msgstr "_Afegir" #: .././sonata/main.py:257 msgid "_Replace" msgstr "_Reemplaçar" #: .././sonata/main.py:258 msgid "Add" msgstr "Afegir" #: .././sonata/main.py:259 msgid "Replace" msgstr "Reemplaçar" #: .././sonata/main.py:260 msgid "_Delete..." msgstr "_Esborrar..." #: .././sonata/main.py:261 msgid "Shuffle" msgstr "Mesclar" #: .././sonata/main.py:286 msgid "S_how Sonata" msgstr "_Mostrar Sonata" #: .././sonata/main.py:287 msgid "_Repeat" msgstr "_Repetir" #: .././sonata/main.py:288 msgid "Rando_m" msgstr "Alea_tori" #: .././sonata/main.py:428 msgid "By Artist" msgstr "Per artista" #: .././sonata/main.py:429 msgid "By Album" msgstr "Per álbum" #: .././sonata/main.py:430 msgid "By Song Title" msgstr "Per títol" #: .././sonata/main.py:431 msgid "By File Name" msgstr "Per nom de fitxer" #: .././sonata/main.py:432 msgid "By Dir & File Name" msgstr "Per directori i nom de fitxer" #: .././sonata/main.py:433 msgid "Reverse List" msgstr "Invertir llista" #: .././sonata/main.py:456 .././sonata/main.py:467 msgid "_New..." msgstr "_Nou..." #: .././sonata/main.py:457 msgid "_Edit..." msgstr "_Editar..." #: .././sonata/main.py:468 msgid "_Rename..." msgstr "_Reanomenar..." #: .././sonata/main.py:530 .././sonata/main.py:597 .././sonata/main.py:598 msgid "Playlist" msgstr "Llista de reproducció" #: .././sonata/main.py:560 .././sonata/main.py:1840 .././sonata/main.py:2049 msgid "Click to expand" msgstr "Prémer per expandir" #: .././sonata/main.py:565 .././sonata/main.py:1838 .././sonata/main.py:2047 msgid "Click to collapse" msgstr "Prémer per recollir" #: .././sonata/main.py:570 .././sonata/main.py:1732 .././sonata/main.py:1843 msgid "Not Connected" msgstr "No connectat" #: .././sonata/main.py:572 .././sonata/main.py:1730 .././sonata/main.py:1845 msgid "No Read Permission" msgstr "Sense permissos de lectura" #: .././sonata/main.py:645 msgid "Cover Art" msgstr "Portada" #: .././sonata/main.py:850 .././sonata/main.py:863 .././sonata/main.py:884 msgid "Profile" msgstr "Perfil" #: .././sonata/main.py:863 .././sonata/main.py:864 .././sonata/main.py:884 msgid "MPD_HOST/PORT" msgstr "MPD_HOST/PORT" #: .././sonata/main.py:865 .././sonata/main.py:871 msgid "Disconnect" msgstr "Desconnectar" #: .././sonata/main.py:1187 .././sonata/main.py:1194 msgid "#" msgstr "#" #: .././sonata/main.py:1188 .././sonata/preferences.py:431 #: .././sonata/tagedit.py:128 msgid "Year" msgstr "Any" #: .././sonata/main.py:1192 msgid "Stream" msgstr "Fluxe" #: .././sonata/main.py:1193 msgid "Len" msgstr "Durada" #: .././sonata/main.py:1214 .././sonata/main.py:1221 .././sonata/main.py:1262 #: .././sonata/main.py:1269 msgid "Unknown" msgstr "Desconegut" #: .././sonata/main.py:1753 msgid "day" msgid_plural "days" msgstr[0] "dia" msgstr[1] "dies" #: .././sonata/main.py:1761 msgid "hour" msgid_plural "hours" msgstr[0] "hora" msgstr[1] "hores" #: .././sonata/main.py:1766 .././sonata/main.py:1768 msgid "and" msgstr "i" #: .././sonata/main.py:1776 msgid "(updating mpd)" msgstr "(actualitzant biblioteca)" #: .././sonata/main.py:2116 msgid "Lyrics Search" msgstr "Recerca de lletres" #: .././sonata/main.py:2117 msgid "_Search" msgstr "_Cercar" #: .././sonata/main.py:2120 msgid "Artist Name" msgstr "Nom de l' artista" #: .././sonata/main.py:2125 msgid "Song Title" msgstr "Títol de la cançó" #: .././sonata/main.py:2377 msgid "Open Image" msgstr "Obrir imatge" #: .././sonata/main.py:2379 msgid "Images" msgstr "Imatges" #: .././sonata/main.py:2383 msgid "All files" msgstr "Tots els fitxers" #: .././sonata/main.py:2425 msgid "Choose Cover Art" msgstr "Seleccionar portada" #: .././sonata/main.py:2426 msgid "C_hoose" msgstr "S_eleccioni" #: .././sonata/main.py:2459 msgid "Edit search terms" msgstr "Editar termes de la recerca" #: .././sonata/main.py:2516 msgid "No artist or album name found." msgstr "No s'ha trobat l'artista o el nom de l'àlbum" #: .././sonata/main.py:2519 msgid "No cover art found." msgstr "No s'ha trobat la portada" #: .././sonata/main.py:2843 msgid "Delete the selected playlist?" msgid_plural "Delete the selected playlists?" msgstr[0] "Esborrar la llista de reproducció seleccionada?" msgstr[1] "Esborrar les llistes de reproducció seleccionades?" #: .././sonata/main.py:2843 msgid "Delete Playlist" msgid_plural "Delete Playlists" msgstr[0] "Esborrar llista de reproducció" msgstr[1] "Esborrar llistes de reproducció" #: .././sonata/main.py:2851 msgid "Delete the selected stream?" msgid_plural "Delete the selected streams?" msgstr[0] "Esborrar el fluxe seleccionat?" msgstr[1] "Esborrar els fluxes seleccionats?" #: .././sonata/main.py:2851 msgid "Delete Stream" msgid_plural "Delete Streams" msgstr[0] "Esborrar fluxe" msgstr[1] "Esborrar fluxes" #: .././sonata/main.py:2909 msgid "" "To save lyrics to the music file's directory, you must specify a valid music " "directory." msgstr "" "Per a guardar les lletres en el directori de fitxers de música, ha de " "especificar un directori de música vàlid" #: .././sonata/main.py:2909 .././sonata/main.py:2916 msgid "Music Dir Verification" msgstr "Verificació del directori de música" #: .././sonata/main.py:2916 msgid "" "To save artwork to the music file's directory, you must specify a valid " "music directory." msgstr "" "Per a guardar els fitxers de portades en el directori de música, ha " "d'especificar un directori de música vàlid." #: .././sonata/main.py:3332 msgid "album" msgid_plural "albums" msgstr[0] "àlbum" msgstr[1] "àlbums" #: .././sonata/main.py:3333 msgid "artist" msgid_plural "artists" msgstr[0] "artista" msgstr[1] "artistes" #: .././sonata/main.py:3340 msgid "day of bliss" msgid_plural "days of bliss" msgstr[0] "dia de música" msgstr[1] "dies de música" #: .././sonata/main.py:3342 msgid "hour of bliss" msgid_plural "hours of bliss" msgstr[0] "hora de música." msgstr[1] "hores de música." #: .././sonata/playlists.py:103 .././sonata/playlists.py:105 msgid "Save Playlist" msgstr "Guardar llista de reproducció" #: .././sonata/playlists.py:120 msgid "Would you like to replace the existing playlist or append these songs?" msgstr "Vol reemplaçar la llista existent o afegir aquestes cançons?" #: .././sonata/playlists.py:120 msgid "Existing Playlist" msgstr "Llistes de reproducció existents" #: .././sonata/playlists.py:120 msgid "Replace playlist" msgstr "Substiuir la llista de reproducció" #: .././sonata/playlists.py:120 msgid "Append songs" msgstr "Afegir cançons" #: .././sonata/playlists.py:141 msgid "A playlist with this name already exists. Would you like to replace it?" msgstr "Existeix una llista de reproducció amb aquest nom. El vol reemplaçar?" #: .././sonata/playlists.py:153 msgid "Playlist name" msgstr "Nom de la llista de reproducció" #: .././sonata/playlists.py:182 .././sonata/playlists.py:186 msgid "Rename Playlist" msgstr "Reanomenar la llista de reproducció" #. Constants: #: .././sonata/preferences.py:35 msgid "System tray" msgstr "En l' àrea de notificació" #: .././sonata/preferences.py:35 msgid "Top Left" msgstr "A dalt a l'esquerra" #: .././sonata/preferences.py:35 msgid "Top Right" msgstr "A dalt a la dreta" #: .././sonata/preferences.py:35 msgid "Bottom Left" msgstr "Abaix a l'esquerra" #: .././sonata/preferences.py:35 msgid "Bottom Right" msgstr "Abaix a la dreta" #: .././sonata/preferences.py:35 msgid "Screen Center" msgstr "Al centre de la pantalla" #. MPD tab #: .././sonata/preferences.py:64 msgid "MPD Connection" msgstr "Connexió" #: .././sonata/preferences.py:76 msgid "_Name" msgstr "_Nom" #: .././sonata/preferences.py:79 msgid "_Host" msgstr "_Servidor" #: .././sonata/preferences.py:82 msgid "_Port" msgstr "_Port" #: .././sonata/preferences.py:86 msgid "_Music dir" msgstr "_Directori de música" #: .././sonata/preferences.py:87 msgid "Select a Music Directory" msgstr "Seleccioni un directori" #: .././sonata/preferences.py:91 msgid "Pa_ssword" msgstr "Contra_senya" #: .././sonata/preferences.py:94 msgid "Leave blank if no password is required." msgstr "Deixi en blanc si no es necessària la contrasenya" #: .././sonata/preferences.py:95 msgid "_Autoconnect on start" msgstr "_Connectar automàticament a l'inici" #: .././sonata/preferences.py:113 msgid "Using MPD_HOST/PORT" msgstr "Utilitzant el servidor/port de MPD" #: .././sonata/preferences.py:163 .././sonata/preferences.py:536 msgid "Extras" msgstr "Extres" #: .././sonata/preferences.py:168 msgid "_Audioscrobbling (Last.fm)" msgstr "_Audioscrobbling (Last.fm)" #: .././sonata/preferences.py:170 msgid "_Username:" msgstr "_Nom d'usuari" #: .././sonata/preferences.py:171 msgid "_Password:" msgstr "_Contrasenya:" #: .././sonata/preferences.py:188 msgid "Popup _notification on song changes" msgstr "M_ostrar una notificació al canviar de cançó" #: .././sonata/preferences.py:210 msgid "Fade length" msgstr "Durada del esvaïment" #: .././sonata/preferences.py:211 msgid "_Fade length" msgstr "_Durada del esvaïment" #: .././sonata/preferences.py:213 msgid "sec" msgstr "s" #: .././sonata/preferences.py:218 msgid "C_rossfade" msgstr "Es_vair" #. Display tab #: .././sonata/preferences.py:246 .././sonata/preferences.py:533 msgid "Display" msgstr "Mostrar" #: .././sonata/preferences.py:251 msgid "_Album art" msgstr "_Nom de l'àlbum" #: .././sonata/preferences.py:253 msgid "Standard" msgstr "Normal" #: .././sonata/preferences.py:253 msgid "Stylized" msgstr "Estilitzat" #: .././sonata/preferences.py:256 msgid "Artwork style:" msgstr "Estil de la portada" #: .././sonata/preferences.py:258 msgid "Local only" msgstr "Només local" #: .././sonata/preferences.py:258 msgid "Local and remote" msgstr "Local i remota" #: .././sonata/preferences.py:260 msgid "Search locations:" msgstr "llocs de recerca:" #: .././sonata/preferences.py:267 .././sonata/preferences.py:289 msgid "SONG_DIR" msgstr "SONG_DIR" #: .././sonata/preferences.py:269 msgid "custom" msgstr "personalitzat" #: .././sonata/preferences.py:274 msgid "Save art to:" msgstr "Guardar portada a:" #: .././sonata/preferences.py:277 msgid "_Playback/volume buttons" msgstr "_Mostrar botons de reproducció/volum" #: .././sonata/preferences.py:280 msgid "Pr_ogressbar" msgstr "Mos_trar barra de progrés" #: .././sonata/preferences.py:283 msgid "_Statusbar" msgstr "_Mostrar barra d'estat" #: .././sonata/preferences.py:286 msgid "Song Ly_rics" msgstr "Lletr_es" #: .././sonata/preferences.py:288 msgid "Save lyrics to:" msgstr "Guardar lletres a:" #: .././sonata/preferences.py:297 msgid "System _tray icon" msgstr "Icona de l' àrea de _notificació" #. Behavior tab #: .././sonata/preferences.py:319 msgid "Window Behavior" msgstr "Comportament de la finestra" #: .././sonata/preferences.py:323 msgid "_Show window on all workspaces" msgstr "_Mostrar la finestra en totes les àrees de treball" #: .././sonata/preferences.py:326 msgid "_Keep window above other windows" msgstr "M_antenir la finestra per sobre de la resta de finestres" #: .././sonata/preferences.py:329 msgid "_Hide window titlebar" msgstr "_Amagar el títol de la finestra" #: .././sonata/preferences.py:334 msgid "_Minimize to system tray on close/escape" msgstr "_Minimitzar a l' àrea de notificació quan es tanqui la finestra" #: .././sonata/preferences.py:336 msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, so " "only check this if you have one." msgstr "" "Si està activat, Sonata es minimitzarà a l'àrea de notificació quan es " "tanqui lafinestra. Actualment és impossible detectar si hi ha o no una àrea " "de notificació, per tant, comprovi que almenys en té una." #: .././sonata/preferences.py:350 msgid "Miscellaneous" msgstr "Miscel·lànea" #: .././sonata/preferences.py:354 msgid "_Update MPD library on start" msgstr "A_ctualitzar la biblioteca a l'inici" #: .././sonata/preferences.py:356 msgid "" "If enabled, Sonata will automatically update your MPD library when it starts " "up." msgstr "" "Si està activat, Sonata actualitzarà automaticament la biblioeca a l'inici " #: .././sonata/preferences.py:358 msgid "S_top playback on exit" msgstr "A_turar la reproducció al sortir" #: .././sonata/preferences.py:360 msgid "" "MPD allows playback even when the client is not open. If enabled, Sonata " "will behave like a more conventional music player and, instead, stop " "playback upon exit." msgstr "" "MPD permet continuar la reproducció encara que cap client estigui obert.Si " "està activat, Sonata es comportarà com un reproductor de música convencional " "y aturarà la reproducció al sortir" #: .././sonata/preferences.py:362 msgid "_Write status file:" msgstr "_Escriure fitxer d'estat" #: .././sonata/preferences.py:364 .././sonata/preferences.py:366 msgid "" "If enabled, Sonata will create a xmms-infopipe like file containing " "information about the current song. Many applications support the xmms-info " "file (Instant Messengers, IRC Clients...)" msgstr "" "Si està activat, Sonata crearà un fitxer del tipus xmms-infopipe que tindrà " "informació sobre la cançó en reproducció. Moltes aplicacionstenen suport pel " "fitxer xmms-info (client de missatgeria instantània, clients de IRC, ...)." #. Format tab #: .././sonata/preferences.py:392 msgid "Song Formatting" msgstr "Format de la cançó" #: .././sonata/preferences.py:397 msgid "C_urrent playlist:" msgstr "Ll_ista de reproducció actual" #: .././sonata/preferences.py:398 msgid "_Library:" msgstr "Biblioteca" #: .././sonata/preferences.py:399 msgid "_Window title:" msgstr "_Títol de la finestra" #: .././sonata/preferences.py:400 msgid "Current _song line 1:" msgstr "Linia 1 de la cançó actual" #: .././sonata/preferences.py:402 msgid "Current s_ong line 2:" msgstr "Línia 2 de la cançó actual" #: .././sonata/preferences.py:422 msgid "Available options" msgstr "Opcions disponibles" #. XXX get these directly from the formatting function: #: .././sonata/preferences.py:426 msgid "Artist name" msgstr "Nom de l'artista" #: .././sonata/preferences.py:427 msgid "Album name" msgstr "Nom de l'àlbum" #: .././sonata/preferences.py:428 msgid "Track name" msgstr "Nom de la pista" #: .././sonata/preferences.py:429 msgid "Track number" msgstr "Número de la pista" #: .././sonata/preferences.py:430 msgid "Disc number" msgstr "Número de disc" #: .././sonata/preferences.py:433 msgid "File path" msgstr "Camí del fitxer" #: .././sonata/preferences.py:434 msgid "File name" msgstr "Nom del fitxer" #: .././sonata/preferences.py:435 .././sonata/streams.py:109 msgid "Stream name" msgstr "Nom del fluxe" #: .././sonata/preferences.py:436 msgid "Song length" msgstr "Durada" #: .././sonata/preferences.py:437 msgid "Elapsed time (title only)" msgstr "Temps restant (només pel títol de la finestra)" #: .././sonata/preferences.py:448 msgid "Info displayed only if all enclosed tags are defined" msgstr "" "Informació mostrada només si totes les etiquetes tancades estan definides" #: .././sonata/preferences.py:448 msgid "Creates columns in the current playlist" msgstr "Crear columnes en la llista de reproducció actual" #: .././sonata/preferences.py:473 msgid "_About" msgstr "_En quant a..." #: .././sonata/preferences.py:474 msgid "_Configure..." msgstr "Configurar..." #: .././sonata/preferences.py:513 msgid "Loaded" msgstr "Carregat" #: .././sonata/preferences.py:521 msgid "Description" msgstr "Descripció" #. Set up table #: .././sonata/preferences.py:532 msgid "MPD" msgstr "MPD" #: .././sonata/preferences.py:534 msgid "Behavior" msgstr "Comportament" #: .././sonata/preferences.py:535 msgid "Format" msgstr "Format" #: .././sonata/preferences.py:605 msgid "New Profile" msgstr "Perfil nou" #. Prompt user for playlist name: #: .././sonata/preferences.py:659 msgid "Custom Artwork" msgstr "Portada personalitzada" #: .././sonata/preferences.py:661 msgid "Artwork filename" msgstr "Nom del fitxer de la portada" #: .././sonata/streams.py:105 msgid "Edit Stream" msgstr "Editar fluxe" #: .././sonata/streams.py:107 .././sonata/streams.py:138 msgid "New Stream" msgstr "Nou fluxe" #: .././sonata/streams.py:116 msgid "Stream URL" msgstr "URL del fluxe" #: .././sonata/streams.py:138 msgid "A stream with this name already exists. Would you like to replace it?" msgstr "Existeix un fluxe amb aquest nom. El vol reemplaçar?" #: .././sonata/tagedit.py:61 msgid "Taglib and/or tagpy not found, tag editing support disabled." msgstr "" "No s'ha trobat taglib i/o tagpy, s'ha desactivat el suport per l'edició " "d'etiquetes." #: .././sonata/tagedit.py:61 .././sonata/tagedit.py:70 #: .././sonata/tagedit.py:75 .././sonata/tagedit.py:99 #: .././sonata/tagedit.py:103 .././sonata/tagedit.py:260 #: .././sonata/tagedit.py:299 msgid "Edit Tags" msgstr "Editar etiquetes" #: .././sonata/tagedit.py:70 msgid "" "Tagpy version < 0.91. Please upgrade to a newer version, tag editing support " "disabled." msgstr "Versió de Tagpy < 0.91, Si us plau actualitzi a una versió més nova, Suport per l'ediciió de tags desactivada" #: .././sonata/tagedit.py:75 msgid "The path" msgstr "El camí" #: .././sonata/tagedit.py:75 msgid "does not exist. Please specify a valid music directory in preferences." msgstr "" "No existeix. Si us plau especifiqui un directori de música vàlid en les " "preferències" #: .././sonata/tagedit.py:99 msgid "File " msgstr "Fitxer" #: .././sonata/tagedit.py:99 msgid " not found. Please specify a valid music directory in preferences." msgstr "" "no trobat. Si us plau, especifiqui un directori de música vàlid les " "preferències" #: .././sonata/tagedit.py:103 msgid "No music files with editable tags found." msgstr "No s'han trobat fitxers amb les etiquetes editables." #: .././sonata/tagedit.py:150 msgid "Comment" msgstr "Comentari" #. Only show save all button if more than one song being edited. #: .././sonata/tagedit.py:161 msgid "Save _All" msgstr "Gu_ardar tot" #: .././sonata/tagedit.py:207 msgid "Increment each selected music file, starting at track 1 for this file." msgstr "" "Incrementar en cada fitxer de música seleccionat, començant la pista 1 " "d'aquest fitxer" #: .././sonata/tagedit.py:209 msgid "Apply to all selected music files." msgstr "Aplicar a tots els fitxers de música seleccionats." #: .././sonata/tagedit.py:260 msgid "of" msgstr "de" #: .././sonata/tagedit.py:299 msgid "Unable to save tag to music file." msgstr "No s'ha pogut escriure l'etiqueta en el fitxer de música." #: .././sonata/tagedit.py:366 msgid "Hide file path" msgstr "Amagar camí del fitxer" #: .././sonata/tagedit.py:369 msgid "Show file path" msgstr "Mostrar camí del fitxer" ������sonata-1.7.0/po/cs.po�������������������������������������������������������������������������������0000664�0000000�0000000�00000120706�13771420143�0014377�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Czech translation of sonata. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the Sonata package. # Jakub Adler <jakubadler@gmail.com>, 2007. # msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-03-22 22:00-0600\n" "PO-Revision-Date: 2009-03-25 21:15+0100\n" "Last-Translator: Jakub Adler <jakubadler@gmail.com>\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : n>=2 && n<=4 ? 1 : 2;\n" #. define the shortcuts and their descriptions #. these are all gettextable #: .././sonata/about.py:52 msgid "About Sonata" msgstr "O programu Sonata" #: .././sonata/about.py:53 #: .././sonata/preferences.py:60 msgid "Preferences" msgstr "Nastavení" #: .././sonata/about.py:54 msgid "Fullscreen Artwork Mode" msgstr "Obrázek na celou obrazovku" #: .././sonata/about.py:55 msgid "Switch to [1st-5th] tab" msgstr "Přepnout na tab [1-5]" #: .././sonata/about.py:56 msgid "Connect to MPD" msgstr "Spojit s MPD" #: .././sonata/about.py:57 msgid "Disconnect from MPD" msgstr "Odpojit od MPD" #: .././sonata/about.py:58 msgid "Randomize current playlist" msgstr "Náhodně seřadit aktuální seznam" #: .././sonata/about.py:59 msgid "Expand player" msgstr "Zvětšit přehrávač" #: .././sonata/about.py:60 msgid "Switch to previous tab" msgstr "Přejít na předchozí kartu" #: .././sonata/about.py:61 msgid "Switch to next tab" msgstr "Přejít na následující kartu" #: .././sonata/about.py:62 msgid "Collapse player" msgstr "Zmenšit přehrávač" #: .././sonata/about.py:63 #: .././sonata/library.py:86 msgid "Search library" msgstr "Prohledat knihovnu" #: .././sonata/about.py:64 msgid "Quit" msgstr "Konec" #: .././sonata/about.py:65 msgid "Update entire library" msgstr "Aktualizovat celou knihovnu" #: .././sonata/about.py:66 msgid "Display popup menu" msgstr "Zobrazit vyskakovací menu" #: .././sonata/about.py:67 msgid "Minimize to system tray (if enabled)" msgstr "Skrýt do systémové oblasti (pokud je zapnuto)" #: .././sonata/about.py:69 msgid "Previous track" msgstr "Předchozí stopa" #: .././sonata/about.py:70 msgid "Next track" msgstr "Další stopa" #: .././sonata/about.py:71 msgid "Play/Pause" msgstr "Play/Pause" #: .././sonata/about.py:72 msgid "Stop" msgstr "Stop" #: .././sonata/about.py:73 msgid "Lower the volume" msgstr "Snížit hlasitost" #: .././sonata/about.py:74 msgid "Raise the volume" msgstr "Zvýšit hlasitost" #: .././sonata/about.py:76 msgid "Play selected song" msgstr "Přehrát vybranou skladbu" #: .././sonata/about.py:77 msgid "Remove selected song(s)" msgstr "Smazat vybrané skladby" #: .././sonata/about.py:78 msgid "Center currently playing song" msgstr "Umístit přehrávanou skladbu na střed" #: .././sonata/about.py:79 #: .././sonata/about.py:88 msgid "Edit selected song's tags" msgstr "Upravit tagy vybrané skladby" #: .././sonata/about.py:80 msgid "Save to new playlist" msgstr "Uložit do nového playlistu" #: .././sonata/about.py:81 msgid "Clear list" msgstr "Vymazat seznam" #: .././sonata/about.py:82 msgid "Randomize list" msgstr "Náhodně seřadit seznam" #: .././sonata/about.py:84 msgid "Add selected song(s) or enter directory" msgstr "Přidat vybranou skladbu nebo vstoupit do adresáře" #: .././sonata/about.py:85 msgid "Go to parent directory" msgstr "Jít do nadřazeného adresáře" #: .././sonata/about.py:86 msgid "Add selected item(s)" msgstr "Přidat vybrané položky" #: .././sonata/about.py:87 msgid "Replace with selected item(s)" msgstr "Přepsat vybranými položkami" #: .././sonata/about.py:89 msgid "Add selected item(s) and play" msgstr "Přidat vybrané položky a přehrát" #: .././sonata/about.py:90 msgid "Replace with selected item(s) and play" msgstr "Přepsat vybranými položkami a přehrát" #: .././sonata/about.py:91 msgid "Update selected item(s)/path(s)" msgstr "Aktualizovat vybrané položky/cesty" #: .././sonata/about.py:93 #: .././sonata/about.py:95 msgid "Add selected playlist(s)" msgstr "Přidat vybrané playlisty" #: .././sonata/about.py:94 msgid "Remove selected playlist(s)" msgstr "Smazat vybrané playlisty" #: .././sonata/about.py:96 msgid "Replace with selected playlist(s)" msgstr "Přepsat vybranými playlisty" #: .././sonata/about.py:97 msgid "Add selected playlist(s) and play" msgstr "Přidat vybrané playlisty a přehrát" #: .././sonata/about.py:98 msgid "Replace with selected playlist(s) and play" msgstr "Přepsat vybranými playlisty a přehrát" #: .././sonata/about.py:100 #: .././sonata/about.py:102 msgid "Add selected stream(s)" msgstr "Přidat vybrané streamy" #: .././sonata/about.py:101 msgid "Remove selected stream(s)" msgstr "Smazat vybrané streamy" #: .././sonata/about.py:103 msgid "Replace with selected stream(s)" msgstr "Přepsat vybranými streamy" #: .././sonata/about.py:104 msgid "Add selected stream(s) and play" msgstr "Přidat vybrané streamy a přehrát" #: .././sonata/about.py:105 msgid "Replace with selected stream(s) and play" msgstr "Přepsat vybranými streamy a přehrát" #: .././sonata/about.py:107 msgid "Edit playing song's tags" msgstr "Upravit tagy přehrávané skladby" #. define the main array- this adds headings to each section of #. shortcuts that will be displayed #: .././sonata/about.py:110 msgid "Main Shortcuts" msgstr "Hlavní zkratky" #: .././sonata/about.py:111 msgid "Playback Shortcuts" msgstr "Zkratky pro přehrávání" #: .././sonata/about.py:112 msgid "Current Shortcuts" msgstr "Zkratky pro aktuální playlist" #: .././sonata/about.py:113 msgid "Library Shortcuts" msgstr "Zkratky pro knihovnu" #: .././sonata/about.py:114 msgid "Playlist Shortcuts" msgstr "Zkratky pro playlist" #: .././sonata/about.py:115 msgid "Stream Shortcuts" msgstr "Zkratky pro stream" #: .././sonata/about.py:116 msgid "Info Shortcuts" msgstr "Zkratky pro informace" #: .././sonata/about.py:117 msgid "Shortcuts" msgstr "Zkratky" #: .././sonata/about.py:153 msgid "An elegant music client for MPD." msgstr "Elegantní klient pro MPD" #. Add button to show keybindings: #: .././sonata/about.py:166 msgid "_Shortcuts" msgstr "_Zkratky" #: .././sonata/about.py:177 #: .././sonata/main.py:3088 #: .././sonata/preferences.py:738 msgid "Unable to launch a suitable browser." msgstr "Nelze spustit vhodný prohlížeč." #: .././sonata/about.py:177 #: .././sonata/main.py:3088 #: .././sonata/preferences.py:738 msgid "Launch Browser" msgstr "Spustit prohlížeč" #: .././sonata/cli.py:81 msgid "The toggle and popup arguments require D-Bus. Aborting." msgstr "Parametr toggle a popup vyžadují D-Bus. Ruší se." #: .././sonata/cli.py:97 msgid "Version" msgstr "Verze" #: .././sonata/cli.py:98 msgid "Website" msgstr "Webová stránka" #: .././sonata/cli.py:103 msgid "Usage: sonata [OPTION]... [COMMAND]..." msgstr "Použití: sonata [VOLBA]... [PŘÍKAZ]" #: .././sonata/cli.py:105 msgid "Options" msgstr "Volby" #: .././sonata/cli.py:106 msgid "Show this help and exit" msgstr "Zobrazit tuto nápovědu a skončit" #: .././sonata/cli.py:107 msgid "Popup song notification (requires D-Bus)" msgstr "Vyskakovací oznámení (potřebuje DBus)" #: .././sonata/cli.py:108 msgid "Toggles whether the app is minimized" msgstr "Přepíná, jestli je aplikace minimalizovaná" #: .././sonata/cli.py:109 msgid "to tray or visible (requires D-Bus)" msgstr "v systémové oblasti, nebo viditelná (potřebný D-Bus)" #: .././sonata/cli.py:110 msgid "Don't start app if D-Bus commands fail" msgstr "Nespouštět aplikaci, pokud D-Bus příkaz selže" #: .././sonata/cli.py:111 msgid "Show version information and exit" msgstr "Zobrazí informace o verzi a skončí" #: .././sonata/cli.py:112 msgid "Start app hidden (requires systray)" msgstr "Spustit aplikaci skrytou (potřebný systray)" #: .././sonata/cli.py:113 msgid "Start app visible (requires systray)" msgstr "Spustit aplikaci viditelnou (potřebný systray)" #: .././sonata/cli.py:114 msgid "Start with profile [NUM]" msgstr "Spustit s profilem [NUM]" #: .././sonata/cli.py:116 msgid "Commands" msgstr "Příkazy" #: .././sonata/cli.py:117 msgid "Play song in playlist" msgstr "Přehrát skladbu v playlistu" #: .././sonata/cli.py:118 msgid "Pause currently playing song" msgstr "Pozastavit přehrávanou skladbu" #: .././sonata/cli.py:119 msgid "Stop currently playing song" msgstr "Zastavit přehrávanou skladbu" #: .././sonata/cli.py:120 msgid "Play next song in playlist" msgstr "Přehrát další skladbu v playlistu" #: .././sonata/cli.py:121 msgid "Play previous song in playlist" msgstr "Přehrát předchozí skladbu v playlistu" #: .././sonata/cli.py:122 msgid "Toggle play/pause; plays if stopped" msgstr "Změnit přehrávání/pauza; hraje když je zastaveno" #: .././sonata/cli.py:123 msgid "Toggle repeat mode" msgstr "Přepnout do módu opakování" #: .././sonata/cli.py:124 msgid "Toggle random mode" msgstr "Přepnout do náhodného módu" #: .././sonata/cli.py:125 msgid "Display current song info" msgstr "Zobrazit informace o aktuální skladbě" #: .././sonata/cli.py:126 msgid "Display MPD status" msgstr "Zobrazit stav MPD" #: .././sonata/cli.py:134 #, python-format msgid "Starting Sonata with profile %s..." msgstr "Spustit Sonatu s profilem %s" #: .././sonata/cli.py:136 #, python-format msgid "%d is not an available profile number." msgstr "%d není dostupné číslo profilu." #: .././sonata/cli.py:137 #: .././sonata/cli.py:141 #, python-format msgid "Profile numbers must be between 1 and %d." msgstr "Číslo profilu musí být mezi 1 a %d." #: .././sonata/cli.py:140 #, python-format msgid "Python is unable to interpret %s as a number." msgstr "Python nemůže interpretovat %s jako číslo." #: .././sonata/cli.py:154 #: .././sonata/main.py:179 msgid "Default Profile" msgstr "Výchozí profil" #: .././sonata/cli.py:154 #: .././sonata/main.py:179 msgid "by" msgstr "od" #: .././sonata/cli.py:154 #: .././sonata/main.py:179 msgid "from" msgstr "z" #: .././sonata/cli.py:176 msgid "" "Unable to connect to MPD.\n" "Please check your Sonata preferences or MPD_HOST/MPD_PORT environment variables." msgstr "" "Nelze se spojit s MPD.\n" "Prosím zkontrolujte nastavení Sonaty, nebo proměnné prostředí MPD_HOST/MPD_PORT." #: .././sonata/cli.py:208 #: .././sonata/info.py:91 #: .././sonata/info.py:245 #: .././sonata/library.py:49 #: .././sonata/tagedit.py:125 msgid "Title" msgstr "Název" #: .././sonata/cli.py:209 #: .././sonata/info.py:91 #: .././sonata/info.py:246 #: .././sonata/library.py:49 #: .././sonata/main.py:1184 #: .././sonata/tagedit.py:126 msgid "Artist" msgstr "Umělec" #: .././sonata/cli.py:210 #: .././sonata/info.py:91 #: .././sonata/info.py:247 #: .././sonata/library.py:49 #: .././sonata/main.py:1185 #: .././sonata/main.py:2439 #: .././sonata/tagedit.py:127 msgid "Album" msgstr "Album" #: .././sonata/cli.py:211 #: .././sonata/info.py:91 #: .././sonata/info.py:248 msgid "Date" msgstr "Datum" #: .././sonata/cli.py:212 #: .././sonata/info.py:91 #: .././sonata/info.py:250 #: .././sonata/main.py:1186 #: .././sonata/tagedit.py:130 msgid "Track" msgstr "Stopa" #: .././sonata/cli.py:213 #: .././sonata/info.py:91 #: .././sonata/info.py:249 #: .././sonata/library.py:49 #: .././sonata/main.py:1189 #: .././sonata/preferences.py:432 #: .././sonata/tagedit.py:139 msgid "Genre" msgstr "Žánr" #: .././sonata/cli.py:214 #: .././sonata/info.py:91 #: .././sonata/info.py:251 #: .././sonata/main.py:1191 msgid "File" msgstr "Soubor" #: .././sonata/cli.py:219 #: .././sonata/cli.py:221 msgid "Time" msgstr "Čas" #: .././sonata/cli.py:222 #: .././sonata/info.py:91 #: .././sonata/info.py:244 msgid "Bitrate" msgstr "Datový tok" #: .././sonata/cli.py:224 msgid "MPD stopped" msgstr "MPD zastaveno" #: .././sonata/cli.py:228 #: .././sonata/cli.py:230 #: .././sonata/cli.py:232 msgid "State" msgstr "Stav" #: .././sonata/cli.py:228 msgid "Playing" msgstr "Přehrávání" #: .././sonata/cli.py:230 msgid "Paused" msgstr "Pozastaveno" #: .././sonata/cli.py:232 #: .././sonata/main.py:559 #: .././sonata/main.py:564 #: .././sonata/main.py:1836 #: .././sonata/main.py:1847 msgid "Stopped" msgstr "Zastaveno" #: .././sonata/cli.py:234 #: .././sonata/cli.py:236 msgid "Repeat" msgstr "Opakovat" #: .././sonata/cli.py:234 #: .././sonata/cli.py:238 msgid "Off" msgstr "Off" #: .././sonata/cli.py:236 #: .././sonata/cli.py:240 msgid "On" msgstr "On" #: .././sonata/cli.py:238 #: .././sonata/cli.py:240 msgid "Random" msgstr "Náhodně" #: .././sonata/cli.py:241 msgid "Volume" msgstr "Hlasitost" #: .././sonata/cli.py:242 msgid "Crossfade" msgstr "Prolínání" #: .././sonata/cli.py:242 #: .././sonata/preferences.py:192 msgid "second" msgid_plural "seconds" msgstr[0] "sekunda" msgstr[1] "sekundy" msgstr[2] "sekund" #: .././sonata/current.py:64 msgid "Filter" msgstr "Filtr" #: .././sonata/dbus_plugin.py:83 msgid "Sonata failed to connect to the D-BUS session bus: Unable to determine the address of the message bus (try 'man dbus-launch' and 'man dbus-daemon' for help)" msgstr "Sonata selhala při spojování s D-BUS session bus: Nelze určit adresu zprávy bus (zkuste 'man dbus-launch a 'man dbus-daemon' pro nápovědu)" #: .././sonata/dbus_plugin.py:96 msgid "Failed to execute remote commands." msgstr "Selhalo spuštění vzdálených příkazů." #: .././sonata/dbus_plugin.py:98 #, fuzzy msgid "Starting Sonata instead..." msgstr "Spustit Sonatu namísto..." #: .././sonata/dbus_plugin.py:100 msgid "Maybe Sonata is not running?" msgstr "Možná je už Sonata spuštěna" #: .././sonata/dbus_plugin.py:114 msgid "An instance of Sonata is already running. Showing it..." msgstr "Jedna instance Sonaty je již spuštěna. " #: .././sonata/dbus_plugin.py:120 msgid "Failed to execute remote command." msgstr "Selhalo spuštění vzdáleného příkazu." #. Song info #: .././sonata/info.py:78 msgid "Song Info" msgstr "Informace o skladbě" #: .././sonata/info.py:93 msgid "Launch artist in Wikipedia" msgstr "Přejít na umělce ve Wikipedii" #: .././sonata/info.py:93 msgid "Launch album in Wikipedia" msgstr "Přejít na album ve Wikipedii" #: .././sonata/info.py:127 msgid "Toggle extra tags" msgstr "Přepnout dodatečné tagy" #: .././sonata/info.py:130 msgid "Edit song tags" msgstr "Uložit playlist do" #. Lyrics #: .././sonata/info.py:140 msgid "Lyrics" msgstr "Text skladby" #: .././sonata/info.py:152 msgid "Search Lyricwiki.org for lyrics" msgstr "Hledat text na Lyricwiki.org" #: .././sonata/info.py:153 msgid "Edit lyrics at Lyricwiki.org" msgstr "Upravit text na Lyricwiki.org" #. Album info #: .././sonata/info.py:161 msgid "Album Info" msgstr "Informace o albu" #: .././sonata/info.py:213 #: .././sonata/info.py:218 msgid "more" msgstr "více" #: .././sonata/info.py:215 msgid "hide" msgstr "skrýt" #: .././sonata/info.py:281 msgid "edit tags" msgstr "upravit tagy" #: .././sonata/info.py:308 msgid "Album info not found." msgstr "Informace o albu nejsou dostupné." #: .././sonata/info.py:311 msgid "Album name not set." msgstr "Jméno alba není nastaveno" #: .././sonata/info.py:324 msgid "ZSI not found, fetching lyrics support disabled." msgstr "ZSI není dostupný, získávání textů bude vypnuto." #: .././sonata/info.py:329 msgid "Artist or song title not set." msgstr "Umělec nebo jméno skladby není nastaveno" #: .././sonata/info.py:371 msgid "search" msgstr "hledat" #: .././sonata/info.py:372 msgid "edit" msgstr "upravit" #: .././sonata/info.py:381 #: .././sonata/info.py:436 msgid "Lyrics not found" msgstr "Text není dostupný" #. Fetch lyrics from lyricwiki.org #: .././sonata/info.py:401 msgid "Fetching lyrics..." msgstr "Získávám text..." #: .././sonata/info.py:411 msgid "Couldn't connect to LyricWiki" msgstr "Nelze se připojit k LyricWiki" #: .././sonata/info.py:439 msgid "Fetching lyrics failed" msgstr "Získávání textu selhalo" #: .././sonata/library.py:47 msgid "Untagged" msgstr "Bez tagů" #: .././sonata/library.py:48 msgid "Various Artists" msgstr "Různí umělci" #: .././sonata/library.py:49 msgid "Filename" msgstr "Jméno souboru" #: .././sonata/library.py:49 msgid "Everything" msgstr "Vše" #: .././sonata/library.py:52 msgid "Filesystem" msgstr "Systém souborů" #: .././sonata/library.py:53 msgid "Artists" msgstr "Umělci" #: .././sonata/library.py:54 msgid "Albums" msgstr "Alba" #: .././sonata/library.py:55 msgid "Genres" msgstr "Žánry" #: .././sonata/library.py:84 msgid "Search terms" msgstr "Hledat výraz" #: .././sonata/library.py:90 msgid "End Search" msgstr "Ukončit hledání" #: .././sonata/library.py:92 msgid "Library browsing view" msgstr "Prohlížení knihovny" #: .././sonata/library.py:96 msgid "Search" msgstr "Hledat" #. Show text: #: .././sonata/library.py:761 #: .././sonata/main.py:1763 #: .././sonata/main.py:3331 msgid "song" msgid_plural "songs" msgstr[0] "skladba" msgstr[1] "skladby" msgstr[2] "skladeb" #: .././sonata/library.py:761 #: .././sonata/main.py:1757 msgid "minute" msgid_plural "minutes" msgstr[0] "minuta" msgstr[1] "minuty" msgstr[2] "minut" #: .././sonata/library.py:849 msgid "Song" msgstr "Skladba" #: .././sonata/library.py:849 #: .././sonata/main.py:1190 msgid "Path" msgstr "Cesta" #. Constants #: .././sonata/main.py:102 msgid "Current" msgstr "Aktuální" #: .././sonata/main.py:103 msgid "Library" msgstr "Knihovna" #: .././sonata/main.py:104 msgid "Playlists" msgstr "Playlisty" #: .././sonata/main.py:105 msgid "Streams" msgstr "Streamy" #: .././sonata/main.py:106 msgid "Info" msgstr "Informace" #: .././sonata/main.py:137 #: .././sonata/preferences.py:193 #: .././sonata/preferences.py:194 msgid "Entire song" msgstr "Celá skladba" #: .././sonata/main.py:234 msgid "_Sort List" msgstr "Seřa_dit seznam" #: .././sonata/main.py:235 msgid "Sa_ve List to" msgstr "Uložit playlist do" #: .././sonata/main.py:236 msgid "_Connection" msgstr "_Spojení" #: .././sonata/main.py:237 msgid "P_lay after" msgstr "Př_ehrát po" #: .././sonata/main.py:238 #: .././sonata/main.py:2454 msgid "_Update" msgstr "_Aktualizovat" #: .././sonata/main.py:239 msgid "Use _Remote Image..." msgstr "Použít _vzdálený obrázek..." #: .././sonata/main.py:240 msgid "Use _Local Image..." msgstr "Použít _lokální obrázek..." #: .././sonata/main.py:241 msgid "_Fullscreen Mode" msgstr "_Celá obrazovka" #: .././sonata/main.py:242 msgid "Reset Image" msgstr "Vynulovat obrázek" #: .././sonata/main.py:243 msgid "_Play" msgstr "_Play" #: .././sonata/main.py:244 msgid "Pa_use" msgstr "Pau_za" #: .././sonata/main.py:245 msgid "_Stop" msgstr "_Stop" #: .././sonata/main.py:246 msgid "Pre_vious" msgstr "_Předchozí" #: .././sonata/main.py:247 msgid "_Next" msgstr "_Další" #: .././sonata/main.py:248 msgid "_Quit" msgstr "_Ukončit" #: .././sonata/main.py:249 msgid "_Remove" msgstr "S_mazat" #: .././sonata/main.py:250 msgid "_Clear" msgstr "Smazat _vše" #: .././sonata/main.py:251 msgid "_Entire Library" msgstr "_Celou knihovnu" #: .././sonata/main.py:252 msgid "_Selected Items" msgstr "_Vybrané položky" #: .././sonata/main.py:253 msgid "_Preferences..." msgstr "_Nastavení" #: .././sonata/main.py:254 msgid "_About..." msgstr "_O Sonatě" #: .././sonata/main.py:255 msgid "_Edit Tags..." msgstr "Upravit _tagy" #: .././sonata/main.py:256 msgid "_Add" msgstr "Př_idat" #: .././sonata/main.py:257 msgid "_Replace" msgstr "_Přepsat" #: .././sonata/main.py:258 msgid "Add" msgstr "Přidat" #: .././sonata/main.py:259 msgid "Replace" msgstr "Přepsat" #: .././sonata/main.py:260 msgid "_Delete..." msgstr "S_mazat..." #: .././sonata/main.py:261 msgid "Shuffle" msgstr "Zamíchat" #: .././sonata/main.py:286 msgid "S_how Sonata" msgstr "Zobrazit _Sonatu" #: .././sonata/main.py:287 msgid "_Repeat" msgstr "Opa_kovat" #: .././sonata/main.py:288 msgid "Rando_m" msgstr "Ná_hodně" #: .././sonata/main.py:428 msgid "By Artist" msgstr "Podle umělce" #: .././sonata/main.py:429 msgid "By Album" msgstr "Podle alba" #: .././sonata/main.py:430 msgid "By Song Title" msgstr "Podle názvu skladby" #: .././sonata/main.py:431 msgid "By File Name" msgstr "Podle jména souboru" #: .././sonata/main.py:432 msgid "By Dir & File Name" msgstr "Podle jména souboru a adresáře" #: .././sonata/main.py:433 msgid "Reverse List" msgstr "Obrátit seznam" #: .././sonata/main.py:456 #: .././sonata/main.py:467 msgid "_New..." msgstr "No_vý..." #: .././sonata/main.py:457 msgid "_Edit..." msgstr "Up_ravit..." #: .././sonata/main.py:468 msgid "_Rename..." msgstr "Pře_jmenovat..." #: .././sonata/main.py:530 #: .././sonata/main.py:597 #: .././sonata/main.py:598 msgid "Playlist" msgstr "Playlist" #: .././sonata/main.py:560 #: .././sonata/main.py:1840 #: .././sonata/main.py:2049 msgid "Click to expand" msgstr "Klikni pro rozšířené zobrazení" #: .././sonata/main.py:565 #: .././sonata/main.py:1838 #: .././sonata/main.py:2047 msgid "Click to collapse" msgstr "Klikni pro kompaktní zobrazení" #: .././sonata/main.py:570 #: .././sonata/main.py:1732 #: .././sonata/main.py:1843 msgid "Not Connected" msgstr "Nepřipojeno" #: .././sonata/main.py:572 #: .././sonata/main.py:1730 #: .././sonata/main.py:1845 msgid "No Read Permission" msgstr "Chybí právo ke čtení" #: .././sonata/main.py:645 msgid "Cover Art" msgstr "Obrázek alba" #: .././sonata/main.py:850 #: .././sonata/main.py:863 #: .././sonata/main.py:884 msgid "Profile" msgstr "Profil" #: .././sonata/main.py:863 #: .././sonata/main.py:864 #: .././sonata/main.py:884 msgid "MPD_HOST/PORT" msgstr "MPD_HOST/PORT" #: .././sonata/main.py:865 #: .././sonata/main.py:871 msgid "Disconnect" msgstr "Odpojit" #: .././sonata/main.py:1187 #: .././sonata/main.py:1194 msgid "#" msgstr "#" #: .././sonata/main.py:1188 #: .././sonata/preferences.py:431 #: .././sonata/tagedit.py:128 msgid "Year" msgstr "Rok" #: .././sonata/main.py:1192 msgid "Stream" msgstr "Stream" #: .././sonata/main.py:1193 msgid "Len" msgstr "Délka" #: .././sonata/main.py:1214 #: .././sonata/main.py:1221 #: .././sonata/main.py:1262 #: .././sonata/main.py:1269 msgid "Unknown" msgstr "Neznámý" #: .././sonata/main.py:1753 msgid "day" msgid_plural "days" msgstr[0] "den" msgstr[1] "dny" msgstr[2] "dní" #: .././sonata/main.py:1761 msgid "hour" msgid_plural "hours" msgstr[0] "hodina" msgstr[1] "hodiny" msgstr[2] "hodin" #: .././sonata/main.py:1766 #: .././sonata/main.py:1768 msgid "and" msgstr "a" #: .././sonata/main.py:1776 msgid "(updating mpd)" msgstr "(aktualizuje se mpd)" #: .././sonata/main.py:2116 msgid "Lyrics Search" msgstr "Hledání textu" #: .././sonata/main.py:2117 msgid "_Search" msgstr "_Hledat" #: .././sonata/main.py:2120 msgid "Artist Name" msgstr "Jméno umělce" #: .././sonata/main.py:2125 msgid "Song Title" msgstr "Název skladby" #: .././sonata/main.py:2377 msgid "Open Image" msgstr "Otevřít obrázek" #: .././sonata/main.py:2379 msgid "Images" msgstr "Obrázky" #: .././sonata/main.py:2383 msgid "All files" msgstr "Všechny soubory" #: .././sonata/main.py:2425 msgid "Choose Cover Art" msgstr "Vybrat obrázek alba" #: .././sonata/main.py:2426 msgid "C_hoose" msgstr "_Vybrat" #: .././sonata/main.py:2459 msgid "Edit search terms" msgstr "Upravit hledaný výraz" #: .././sonata/main.py:2516 msgid "No artist or album name found." msgstr "Jméno umělce nebo alba není dostupné" #: .././sonata/main.py:2519 msgid "No cover art found." msgstr "Obrázek alba není dostupný" #: .././sonata/main.py:2843 msgid "Delete the selected playlist?" msgid_plural "Delete the selected playlists?" msgstr[0] "Smazat vybraný playlist?" msgstr[1] "Smazat vybrané playlisty?" msgstr[2] "Smazat vybrané playlisty?" #: .././sonata/main.py:2843 msgid "Delete Playlist" msgid_plural "Delete Playlists" msgstr[0] "Smazat playlist" msgstr[1] "Smazat playlisty" msgstr[2] "Smazat playlisty" #: .././sonata/main.py:2851 msgid "Delete the selected stream?" msgid_plural "Delete the selected streams?" msgstr[0] "Smazat vybraný stream?" msgstr[1] "Smazat vybrané streamy?" msgstr[2] "Smazat vybrané streamy?" #: .././sonata/main.py:2851 msgid "Delete Stream" msgid_plural "Delete Streams" msgstr[0] "Smazat stream" msgstr[1] "Smazat streamy" msgstr[2] "Smazat streamy" #: .././sonata/main.py:2909 msgid "To save lyrics to the music file's directory, you must specify a valid music directory." msgstr "Pro uložení textu do adresáře s hudbou musíte jeho platný název." #: .././sonata/main.py:2909 #: .././sonata/main.py:2916 msgid "Music Dir Verification" msgstr "Ověření adresáře s hudbou" #: .././sonata/main.py:2916 msgid "To save artwork to the music file's directory, you must specify a valid music directory." msgstr "Pro uložení obrázku do adresáře s hudbou musíte uvést platný adresář s hudbou" #: .././sonata/main.py:3332 msgid "album" msgid_plural "albums" msgstr[0] "album" msgstr[1] "alba" msgstr[2] "alb" #: .././sonata/main.py:3333 msgid "artist" msgid_plural "artists" msgstr[0] "umělec" msgstr[1] "umělci" msgstr[2] "umělců" #: .././sonata/main.py:3340 msgid "day of bliss" msgid_plural "days of bliss" msgstr[0] "den blaha" msgstr[1] "dny blaha" msgstr[2] "dní blaha" #: .././sonata/main.py:3342 msgid "hour of bliss" msgid_plural "hours of bliss" msgstr[0] "hodina blaha" msgstr[1] "hodiny blaha" msgstr[2] "hodin blaha" #: .././sonata/playlists.py:103 #: .././sonata/playlists.py:105 msgid "Save Playlist" msgstr "Uložit playlist" #: .././sonata/playlists.py:120 msgid "Would you like to replace the existing playlist or append these songs?" msgstr "Chcete přepsat existující playlist nebo přidat tyto skladby?" #: .././sonata/playlists.py:120 msgid "Existing Playlist" msgstr "Existující playlist" #: .././sonata/playlists.py:120 msgid "Replace playlist" msgstr "Přepsat playlist" #: .././sonata/playlists.py:120 msgid "Append songs" msgstr "Přidat skladby" #: .././sonata/playlists.py:141 msgid "A playlist with this name already exists. Would you like to replace it?" msgstr "Playlist s tímto jménem už existuje. Chcete jej přepsat" #: .././sonata/playlists.py:153 msgid "Playlist name" msgstr "Jméno playlistu" #: .././sonata/playlists.py:182 #: .././sonata/playlists.py:186 msgid "Rename Playlist" msgstr "Přejmenovat playlist" #. Constants: #: .././sonata/preferences.py:35 msgid "System tray" msgstr "Systémová oblast" #: .././sonata/preferences.py:35 msgid "Top Left" msgstr "Vlevo nahoře" #: .././sonata/preferences.py:35 msgid "Top Right" msgstr "Vpravo nahoře" #: .././sonata/preferences.py:35 msgid "Bottom Left" msgstr "Vlevo dole" #: .././sonata/preferences.py:35 msgid "Bottom Right" msgstr "Vpravo dole" #: .././sonata/preferences.py:35 msgid "Screen Center" msgstr "Střed obrazovky" #. MPD tab #: .././sonata/preferences.py:64 msgid "MPD Connection" msgstr "Připojení k MPD" #: .././sonata/preferences.py:76 msgid "_Name" msgstr "_Jméno" #: .././sonata/preferences.py:79 msgid "_Host" msgstr "_Host" #: .././sonata/preferences.py:82 msgid "_Port" msgstr "_Port" #: .././sonata/preferences.py:86 msgid "_Music dir" msgstr "Adresář _s hudbou" #: .././sonata/preferences.py:87 msgid "Select a Music Directory" msgstr "Vybrat adresář s hudbou" #: .././sonata/preferences.py:91 msgid "Pa_ssword" msgstr "H_eslo" #: .././sonata/preferences.py:94 msgid "Leave blank if no password is required." msgstr "Nechat prázdné, pokud heslo není potřeba." #: .././sonata/preferences.py:95 msgid "_Autoconnect on start" msgstr "_Automaticky připojit při spuštění" #: .././sonata/preferences.py:113 msgid "Using MPD_HOST/PORT" msgstr "Používám MPD_HOST/PORT" #: .././sonata/preferences.py:163 #: .././sonata/preferences.py:536 msgid "Extras" msgstr "Navíc" #: .././sonata/preferences.py:168 msgid "_Audioscrobbling (Last.fm)" msgstr "_Audioscrobbling (Last.fm)" #: .././sonata/preferences.py:170 msgid "_Username:" msgstr "_Uživatelské jméno:" #: .././sonata/preferences.py:171 msgid "_Password:" msgstr "He_slo:" #: .././sonata/preferences.py:188 msgid "Popup _notification on song changes" msgstr "_Vyskakovací oznámení při změně skladby" #: .././sonata/preferences.py:210 msgid "Fade length" msgstr "Délka přechodu" #: .././sonata/preferences.py:211 msgid "_Fade length" msgstr "_Délka přechodu" #: .././sonata/preferences.py:213 msgid "sec" msgstr "sec" #: .././sonata/preferences.py:218 msgid "C_rossfade" msgstr "P_rolínání" #. Display tab #: .././sonata/preferences.py:246 #: .././sonata/preferences.py:533 msgid "Display" msgstr "Zobrazení" #: .././sonata/preferences.py:251 msgid "_Album art" msgstr "Obrázek _alba" #: .././sonata/preferences.py:253 msgid "Standard" msgstr "Standardní" #: .././sonata/preferences.py:253 msgid "Stylized" msgstr "Stylizovaný" #: .././sonata/preferences.py:256 msgid "Artwork style:" msgstr "Styl obrázku alba:" #: .././sonata/preferences.py:258 msgid "Local only" msgstr "Pouze lokální" #: .././sonata/preferences.py:258 msgid "Local and remote" msgstr "Lokální a vzdálený" #: .././sonata/preferences.py:260 msgid "Search locations:" msgstr "Pořadí hledání:" #: .././sonata/preferences.py:267 #: .././sonata/preferences.py:289 msgid "SONG_DIR" msgstr "ADRESÁŘ_SE_SKLADBOU" #: .././sonata/preferences.py:269 msgid "custom" msgstr "vlastní" #: .././sonata/preferences.py:274 msgid "Save art to:" msgstr "Uložit obrázek alba jako:" #: .././sonata/preferences.py:277 msgid "_Playback/volume buttons" msgstr "_Tlačítka přehrávání a hlasitosti" #: .././sonata/preferences.py:280 msgid "Pr_ogressbar" msgstr "_Lišta průběhu" #: .././sonata/preferences.py:283 msgid "_Statusbar" msgstr "_Stavový řádek" #: .././sonata/preferences.py:286 msgid "Song Ly_rics" msgstr "T_ext skladby" #: .././sonata/preferences.py:288 msgid "Save lyrics to:" msgstr "Uložit text do" #: .././sonata/preferences.py:297 msgid "System _tray icon" msgstr "_Ikona v systémové oblasti" #. Behavior tab #: .././sonata/preferences.py:319 msgid "Window Behavior" msgstr "Chování okna" #: .././sonata/preferences.py:323 msgid "_Show window on all workspaces" msgstr "_Zobrazit okno na všech plochách" #: .././sonata/preferences.py:326 msgid "_Keep window above other windows" msgstr "_Podržet okno nad ostatními okny" #: .././sonata/preferences.py:329 msgid "_Hide window titlebar" msgstr "_Skrýt titulek okna" #: .././sonata/preferences.py:334 msgid "_Minimize to system tray on close/escape" msgstr "S_krýt do systémové oblasti při zavření" #: .././sonata/preferences.py:336 msgid "If enabled, closing Sonata will minimize it to the system tray. Note that it's currently impossible to detect if there actually is a system tray, so only check this if you have one." msgstr "Pokud je zapnuto, při zavření bude Sonata pouze minimalizována do systémové oblasti. Nyní nejde zjistit, jestli je k dispozici systémová oblast, proto se ujistěte, že je možné systémovou oblast použít." #: .././sonata/preferences.py:350 msgid "Miscellaneous" msgstr "Různé" #: .././sonata/preferences.py:354 msgid "_Update MPD library on start" msgstr "_Aktualizovat knihovnu MPD při spuštění" #: .././sonata/preferences.py:356 msgid "If enabled, Sonata will automatically update your MPD library when it starts up." msgstr "Pokud je zapnuto, Sonata bude automaticky aktualizovat knihovnu MPD při spuštění." #: .././sonata/preferences.py:358 msgid "S_top playback on exit" msgstr "Zas_tavit přehrávání při vypnutí" #: .././sonata/preferences.py:360 msgid "MPD allows playback even when the client is not open. If enabled, Sonata will behave like a more conventional music player and, instead, stop playback upon exit." msgstr "MPD umožňuje přehrávání i když klient není spuštěn. Pokud je tato volba zapnuta, Sonata se může chovat jako běžné přehrávače a zastavit přehrávání při ukončení." #: .././sonata/preferences.py:362 msgid "_Write status file:" msgstr "Zapsat stav _do souboru:" #: .././sonata/preferences.py:364 #: .././sonata/preferences.py:366 msgid "If enabled, Sonata will create a xmms-infopipe like file containing information about the current song. Many applications support the xmms-info file (Instant Messengers, IRC Clients...)" msgstr "Pokud je zapnuto, Sonata vytvoří xmms-infopipe jako soubor obsahující informace o aktuální skladbě. Mnoho aplikací soubor xmms-info podporuje (Instant messenger, IRC klienty...)" #. Format tab #: .././sonata/preferences.py:392 msgid "Song Formatting" msgstr "Formát skladby" #: .././sonata/preferences.py:397 msgid "C_urrent playlist:" msgstr "_Aktuální playlist" #: .././sonata/preferences.py:398 msgid "_Library:" msgstr "_Knihovna:" #: .././sonata/preferences.py:399 msgid "_Window title:" msgstr "_Titulek okna:" #: .././sonata/preferences.py:400 msgid "Current _song line 1:" msgstr "Aktuální skla_dba, řádek 1:" #: .././sonata/preferences.py:402 msgid "Current s_ong line 2:" msgstr "Aktuální sklad_ba, řádek 2:" #: .././sonata/preferences.py:422 msgid "Available options" msgstr "Dostupné volby" #. XXX get these directly from the formatting function: #: .././sonata/preferences.py:426 msgid "Artist name" msgstr "Jméno umělce" #: .././sonata/preferences.py:427 msgid "Album name" msgstr "Jméno alba" #: .././sonata/preferences.py:428 msgid "Track name" msgstr "Jméno stopy" #: .././sonata/preferences.py:429 msgid "Track number" msgstr "Číslo stopy" #: .././sonata/preferences.py:430 msgid "Disc number" msgstr "Číslo disku" #: .././sonata/preferences.py:433 msgid "File path" msgstr "Cesta k souboru" #: .././sonata/preferences.py:434 msgid "File name" msgstr "Jméno souboru" #: .././sonata/preferences.py:435 #: .././sonata/streams.py:109 msgid "Stream name" msgstr "Jméno streamu" #: .././sonata/preferences.py:436 msgid "Song length" msgstr "Délka skladby" #: .././sonata/preferences.py:437 msgid "Elapsed time (title only)" msgstr "Uplynulý čas (pouze v názvu)" #: .././sonata/preferences.py:448 msgid "Info displayed only if all enclosed tags are defined" msgstr "Informace zobrazeny pouze když jsou všechny přiložené tagy definovány" #: .././sonata/preferences.py:448 msgid "Creates columns in the current playlist" msgstr "Vytvoří sloupce v aktuálním playlistu" #: .././sonata/preferences.py:473 msgid "_About" msgstr "_O Sonatě" #: .././sonata/preferences.py:474 msgid "_Configure..." msgstr "_Nastavit" #: .././sonata/preferences.py:513 msgid "Loaded" msgstr "Nahráno" #: .././sonata/preferences.py:521 msgid "Description" msgstr "Popis" #. Set up table #: .././sonata/preferences.py:532 msgid "MPD" msgstr "MPD" #: .././sonata/preferences.py:534 msgid "Behavior" msgstr "Chování" #: .././sonata/preferences.py:535 msgid "Format" msgstr "Formát" #: .././sonata/preferences.py:605 msgid "New Profile" msgstr "Nový profil" #. Prompt user for playlist name: #: .././sonata/preferences.py:659 msgid "Custom Artwork" msgstr "Vlastní obrázek alba" #: .././sonata/preferences.py:661 msgid "Artwork filename" msgstr "Jméno obrázku alba" #: .././sonata/streams.py:105 msgid "Edit Stream" msgstr "Upravit stream" #: .././sonata/streams.py:107 #: .././sonata/streams.py:138 msgid "New Stream" msgstr "Nový stream" #: .././sonata/streams.py:116 msgid "Stream URL" msgstr "URL streamu" #: .././sonata/streams.py:138 msgid "A stream with this name already exists. Would you like to replace it?" msgstr "Stream s tímto jménem už existuje. Chcete jej přepsat?" #: .././sonata/tagedit.py:61 msgid "Taglib and/or tagpy not found, tag editing support disabled." msgstr "Knihovna taglib nebo tagpy není dostupná, podpora editace tagů vypnuta." #: .././sonata/tagedit.py:61 #: .././sonata/tagedit.py:70 #: .././sonata/tagedit.py:75 #: .././sonata/tagedit.py:99 #: .././sonata/tagedit.py:103 #: .././sonata/tagedit.py:260 #: .././sonata/tagedit.py:299 msgid "Edit Tags" msgstr "Upravit tagy" #: .././sonata/tagedit.py:70 msgid "Tagpy version < 0.91. Please upgrade to a newer version, tag editing support disabled." msgstr "Verze knihovny tagpy je nižší než 0.91, podpora editace tagů vypnuta. Prosím aktualizujte na novou verzi." #: .././sonata/tagedit.py:75 msgid "The path" msgstr "Cesta" #: .././sonata/tagedit.py:75 msgid "does not exist. Please specify a valid music directory in preferences." msgstr "neexistuje. Prosím zadejte platný adresář s hudbou v nastavení." #: .././sonata/tagedit.py:99 msgid "File " msgstr "Soubor" #: .././sonata/tagedit.py:99 msgid " not found. Please specify a valid music directory in preferences." msgstr "neexistuje. Prosím zadejte platný adresář s hudbou v nastavení." #: .././sonata/tagedit.py:103 msgid "No music files with editable tags found." msgstr "Nejsou dostupné soubory s editovatelnými tagy." #: .././sonata/tagedit.py:150 msgid "Comment" msgstr "Komentář" #. Only show save all button if more than one song being edited. #: .././sonata/tagedit.py:161 msgid "Save _All" msgstr "Uložit _Vše" #: .././sonata/tagedit.py:207 msgid "Increment each selected music file, starting at track 1 for this file." msgstr "Přidat každý vybraný hudební soubor, začátek od stopy 1 pro tento soubor." #: .././sonata/tagedit.py:209 msgid "Apply to all selected music files." msgstr "Použít na všechny vybrané hudební soubory" #: .././sonata/tagedit.py:260 msgid "of" msgstr "z" #. FIXME: was (save_success and self.conn and self.status): #: .././sonata/tagedit.py:299 msgid "Unable to save tag to music file." msgstr "Nelze uložit tag do hudebního souboru" #: .././sonata/tagedit.py:366 msgid "Hide file path" msgstr "Skrýt cestu k souboru" #: .././sonata/tagedit.py:369 msgid "Show file path" msgstr "Zobrazit cestu k souboru" #~ msgid "The popup argument requires D-Bus. Aborting." #~ msgstr "Parametr potřebuje D-Bus. Ruší se.+" #, fuzzy #~ msgid "_Update Path" #~ msgstr "_Aktualizovat" #~ msgid "Website: http://www.nongnu.org/sonata/" #~ msgstr "Webová stránka: http://www.nongnu.org/sonata/" #~ msgid "Enable Audioscrobbler" #~ msgstr "Povolit Audioscrobbler" #~ msgid "Enable Crossfade" #~ msgstr "Zapnout prolínání" #~ msgid "Enable album art" #~ msgstr "Povolit obrázek alba" #~ msgid "Enable lyrics" #~ msgstr "Povolit text skladeb" #~ msgid "Enable system tray icon" #~ msgstr "Povolit ikonu v systémové oblasti" #~ msgid "_Display" #~ msgstr "_Zobrazení" #~ msgid "_Extras" #~ msgstr "_Navíc" #~ msgid "" #~ "PyGTK+ 2.10 or gnome-python-extras not found, system tray support " #~ "disabled." #~ msgstr "" #~ "PyGTK+ 2.10 nebo gnome-python-extras nebyly nalezeny, podpora systémové " #~ "oblasti vypnuta." #~ msgid "Reset to Default" #~ msgstr "Nastavit na původní" #~ msgid "_New Playlist..." #~ msgstr "_Nový playlist" #~ msgid "Notification" #~ msgstr "Oznamování" #~ msgid "" #~ "Python 2.5 or python-elementtree not found, audioscrobbler support " #~ "disabled." #~ msgstr "" #~ "Python 2.5 nebo python-elementtree nebyl nalezen, podpora pro " #~ "audioscrobbler vypnuta." #~ msgid "Audioscrobbler Verification" #~ msgstr "Ověření Audioscrobbleru" #~ msgid "Update library for selected item(s)" #~ msgstr "Aktualizovat knihovnu pro vybrané položky" #~ msgid "_Shuffle" #~ msgstr "_Zamíchat" #~ msgid "Toggle shuffle mode" #~ msgstr "Přepnout mód míchání" #, fuzzy #~ msgid "not found. Exiting..." #~ msgstr "Slova nejsou dostupná" #~ msgid "Add to _Queue" #~ msgstr "Přidat do _fronty" #~ msgid "Remove from _Queue" #~ msgstr "Odstranit z _fronty" #~ msgid "seconds" #~ msgstr "sekund" #~ msgid "Not connected" #~ msgstr "Odpojeno" #~ msgid "Press enter to search for these terms." #~ msgstr "Stiskněte enter pro hledání tohoto výrazu." #~ msgid "Add new profile" #~ msgstr "Přidat nový profil" #~ msgid "Remove current profile" #~ msgstr "Smazat aktuální profil" #~ msgid "Play enqueued files on activate" #~ msgstr "Přehrát zařazené soubory při aktivaci" #~ msgid "" #~ "Automatically play enqueued items when activated via double-click or " #~ "enter." #~ msgstr "" #~ "Automaticky přehrát zařazené položky pokud jsou aktivovány dvojitým " #~ "kliknutím nebo entrem." #~ msgid "Add selected song(s) to playlist queue" #~ msgstr "Přidat vybrané skladby do playlistu" #~ msgid "Remove selected song(s) from playlist queue" #~ msgstr "Smazat vybrané skladby z playlistu" #~ msgid "Add selected song(s) or directory(s)" #~ msgstr "Přidat vybrané skladby nebo adresáře" #~ msgid "Replace with selected song(s) or directory(s)" #~ msgstr "Přepsat vybranými skladbami nebo adresáři" #~ msgid "Song Info..." #~ msgstr "Informace o skladbě..." #~ msgid "Click to collapse the player" #~ msgstr "Klikni pro kompaktní zobrazení" #~ msgid "Click to expand the player" #~ msgstr "Klikni pro rozšířené zobrazení" #~ msgid "_Song Info" #~ msgstr "Informace o _skladbě" #~ msgid "_Search..." #~ msgstr "_Hledat..." #~ msgid "Remote only" #~ msgstr "Pouze vzdálený" #~ msgid "Remote, then local" #~ msgstr "Vzdálený, poté lokální" #~ msgid "To save artwork as" #~ msgstr "Pro uložení obrázku alba jako" #~ msgid "Artwork Verification" #~ msgstr "Ověření obrázku alba" #~ msgid "Switch to current playlist" #~ msgstr "Přepnout na aktuální playlist" ����������������������������������������������������������sonata-1.7.0/po/da.po�������������������������������������������������������������������������������0000664�0000000�0000000�00000117265�13771420143�0014364�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Danish translation for Sonata. # Copyright (C) 2007 Free Software Foundation, Inc. # This file is distributed under the same license as the sonata package. # Martin Dybdal <dybber@dybber.dk>, 2007. # msgid "" msgstr "" "Project-Id-Version: sonata\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-03-22 22:00-0600\n" "PO-Revision-Date: 2009-03-23 10:52+0100\n" "Last-Translator: Martin Dybdal <dybber@dybber.dk>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. define the shortcuts and their descriptions #. these are all gettextable #: .././sonata/about.py:52 msgid "About Sonata" msgstr "Om Sonata" #: .././sonata/about.py:53 #: .././sonata/preferences.py:60 msgid "Preferences" msgstr "Indstillinger" #: .././sonata/about.py:54 msgid "Fullscreen Artwork Mode" msgstr "Pladeomslag i fuld skærm" #: .././sonata/about.py:55 msgid "Switch to [1st-5th] tab" msgstr "Skift til 1.-5. tab" #: .././sonata/about.py:56 msgid "Connect to MPD" msgstr "Forbind til MPD" #: .././sonata/about.py:57 msgid "Disconnect from MPD" msgstr "Luk forbindelse til MPD." #: .././sonata/about.py:58 msgid "Randomize current playlist" msgstr "Bland nuværende afspilningsliste" #: .././sonata/about.py:59 msgid "Expand player" msgstr "Udvid afspiller" #: .././sonata/about.py:60 msgid "Switch to previous tab" msgstr "Skift til foregående faneblad" #: .././sonata/about.py:61 msgid "Switch to next tab" msgstr "Skift til næste faneblad" #: .././sonata/about.py:62 msgid "Collapse player" msgstr "Sammenfold afspiller" #: .././sonata/about.py:63 #: .././sonata/library.py:86 msgid "Search library" msgstr "Søg i biblioteket" #: .././sonata/about.py:64 msgid "Quit" msgstr "Luk" #: .././sonata/about.py:65 msgid "Update entire library" msgstr "Opdater hele biblioteket" #: .././sonata/about.py:66 msgid "Display popup menu" msgstr "Vis popup menu" #: .././sonata/about.py:67 msgid "Minimize to system tray (if enabled)" msgstr "Minimer til statusfelt (hvis muligt)" #: .././sonata/about.py:69 msgid "Previous track" msgstr "Forrige sang" #: .././sonata/about.py:70 msgid "Next track" msgstr "Næste sang" #: .././sonata/about.py:71 msgid "Play/Pause" msgstr "Afspil/Pause" #: .././sonata/about.py:72 msgid "Stop" msgstr "Stop" #: .././sonata/about.py:73 msgid "Lower the volume" msgstr "Sænk lydstyrken" #: .././sonata/about.py:74 msgid "Raise the volume" msgstr "Hæv lydstyrken" #: .././sonata/about.py:76 msgid "Play selected song" msgstr "Afspil den valgte sang" #: .././sonata/about.py:77 msgid "Remove selected song(s)" msgstr "Fjern de valgte sange" #: .././sonata/about.py:78 msgid "Center currently playing song" msgstr "Centrer nuværende sang" #: .././sonata/about.py:79 #: .././sonata/about.py:88 msgid "Edit selected song's tags" msgstr "Rediger valgte sanges tags" #: .././sonata/about.py:80 msgid "Save to new playlist" msgstr "Gem som ny afspilningsliste" #: .././sonata/about.py:81 msgid "Clear list" msgstr "Ryd liste" #: .././sonata/about.py:82 msgid "Randomize list" msgstr "Bland afspilningsliste" #: .././sonata/about.py:84 msgid "Add selected song(s) or enter directory" msgstr "Tilføj valgte sange eller gå ind i mappe" #: .././sonata/about.py:85 msgid "Go to parent directory" msgstr "Gå et mappeniveau op" #: .././sonata/about.py:86 msgid "Add selected item(s)" msgstr "Tilføj det valgte" #: .././sonata/about.py:87 msgid "Replace with selected item(s)" msgstr "Erstat med det valgte" #: .././sonata/about.py:89 msgid "Add selected item(s) and play" msgstr "Tilføj det valgte og afspil" #: .././sonata/about.py:90 msgid "Replace with selected item(s) and play" msgstr "Erstat med det valgte og afspil" #: .././sonata/about.py:91 msgid "Update selected item(s)/path(s)" msgstr "Opdater valgte elementer/stier" #: .././sonata/about.py:93 #: .././sonata/about.py:95 msgid "Add selected playlist(s)" msgstr "Tilføj valgte afspilningslister" #: .././sonata/about.py:94 msgid "Remove selected playlist(s)" msgstr "Fjern valgte afspilningslister" #: .././sonata/about.py:96 msgid "Replace with selected playlist(s)" msgstr "Erstat med valgte afspilningslister" #: .././sonata/about.py:97 msgid "Add selected playlist(s) and play" msgstr "Tilføj de valgte afspilningslister og afspil" #: .././sonata/about.py:98 msgid "Replace with selected playlist(s) and play" msgstr "Erstat med de valgte afspilningslister og afspil" #: .././sonata/about.py:100 #: .././sonata/about.py:102 msgid "Add selected stream(s)" msgstr "Tilføj valgte streams" #: .././sonata/about.py:101 msgid "Remove selected stream(s)" msgstr "Fjern valgte streams" #: .././sonata/about.py:103 msgid "Replace with selected stream(s)" msgstr "Erstat med valgte streams" #: .././sonata/about.py:104 msgid "Add selected stream(s) and play" msgstr "Tilføj de valgte streams og afspil" #: .././sonata/about.py:105 msgid "Replace with selected stream(s) and play" msgstr "Erstat med de valgte streams og afspil" #: .././sonata/about.py:107 msgid "Edit playing song's tags" msgstr "Rediger den nuværende sangs tags" #. define the main array- this adds headings to each section of #. shortcuts that will be displayed #: .././sonata/about.py:110 msgid "Main Shortcuts" msgstr "Overordnede genveje" #: .././sonata/about.py:111 msgid "Playback Shortcuts" msgstr "Afspilningsgenveje" #: .././sonata/about.py:112 msgid "Current Shortcuts" msgstr "Genveje i afspilningskø" #: .././sonata/about.py:113 msgid "Library Shortcuts" msgstr "Genveje i bibliotek" #: .././sonata/about.py:114 msgid "Playlist Shortcuts" msgstr "Genveje i afspilningslister" #: .././sonata/about.py:115 msgid "Stream Shortcuts" msgstr "Genveje i streams" #: .././sonata/about.py:116 msgid "Info Shortcuts" msgstr "Info genveje" #: .././sonata/about.py:117 msgid "Shortcuts" msgstr "Genveje" #: .././sonata/about.py:153 msgid "An elegant music client for MPD." msgstr "En elegant musikklient til MPD." #. Add button to show keybindings: #: .././sonata/about.py:166 msgid "_Shortcuts" msgstr "Genveje" #: .././sonata/about.py:177 #: .././sonata/main.py:3088 #: .././sonata/preferences.py:738 msgid "Unable to launch a suitable browser." msgstr "Ikke muligt at starte en browser" #: .././sonata/about.py:177 #: .././sonata/main.py:3088 #: .././sonata/preferences.py:738 msgid "Launch Browser" msgstr "Start browser" #: .././sonata/cli.py:81 msgid "The toggle and popup arguments require D-Bus. Aborting." msgstr "\"--toggle\" og \"--popup\" argumenterne kræver D-Bus. Afbryder." #: .././sonata/cli.py:97 msgid "Version" msgstr "Version" #: .././sonata/cli.py:98 msgid "Website" msgstr "Hjemmeside" #: .././sonata/cli.py:103 msgid "Usage: sonata [OPTION]... [COMMAND]..." msgstr "Brug: sonata [FLAG]... [KOMMANDO]..." #: .././sonata/cli.py:105 msgid "Options" msgstr "Flag" #: .././sonata/cli.py:106 msgid "Show this help and exit" msgstr "Vis denne hjælp" #: .././sonata/cli.py:107 msgid "Popup song notification (requires D-Bus)" msgstr "Vis sangnotifikation (kræver DBUS)" #: .././sonata/cli.py:108 msgid "Toggles whether the app is minimized" msgstr "Skifter om programmet er minimeret" #: .././sonata/cli.py:109 msgid "to tray or visible (requires D-Bus)" msgstr "til statusfelt eller er synligt (kræver D-BUS)" #: .././sonata/cli.py:110 msgid "Don't start app if D-Bus commands fail" msgstr "Start ikke sonata hvis D-Bus kommandoer fejler" #: .././sonata/cli.py:111 msgid "Show version information and exit" msgstr "Vis versions-information" #: .././sonata/cli.py:112 msgid "Start app hidden (requires systray)" msgstr "Start program minimeret til statusfelt" #: .././sonata/cli.py:113 msgid "Start app visible (requires systray)" msgstr "Start program synligt" #: .././sonata/cli.py:114 msgid "Start with profile [NUM]" msgstr "Start med profil nummer [NUM]" #: .././sonata/cli.py:116 msgid "Commands" msgstr "Kommandoer" #: .././sonata/cli.py:117 msgid "Play song in playlist" msgstr "Afspil sang i afspilningsliste" #: .././sonata/cli.py:118 msgid "Pause currently playing song" msgstr "Pause nuværende sang" #: .././sonata/cli.py:119 msgid "Stop currently playing song" msgstr "Stop nuværende sang" #: .././sonata/cli.py:120 msgid "Play next song in playlist" msgstr "Afspil næste sang i afspilningslisten" #: .././sonata/cli.py:121 msgid "Play previous song in playlist" msgstr "Afspil forrige sang i afspilningslisten" #: .././sonata/cli.py:122 msgid "Toggle play/pause; plays if stopped" msgstr "Afspil/Pause; starter afspilning hvis stoppet" #: .././sonata/cli.py:123 msgid "Toggle repeat mode" msgstr "Slå gentaget afspilning til eller fra" #: .././sonata/cli.py:124 msgid "Toggle random mode" msgstr "Slå tilfældig afspilningsrækkefølge til eller fra" #: .././sonata/cli.py:125 msgid "Display current song info" msgstr "Vis info om nuværende sang" #: .././sonata/cli.py:126 msgid "Display MPD status" msgstr "Vis MPD status" #: .././sonata/cli.py:134 #, python-format msgid "Starting Sonata with profile %s..." msgstr "Starter Sonata med profil %s..." #: .././sonata/cli.py:136 #, python-format msgid "%d is not an available profile number." msgstr "%d er ikke et tilgængeligt profilnummer." #: .././sonata/cli.py:137 #: .././sonata/cli.py:141 #, python-format msgid "Profile numbers must be between 1 and %d." msgstr "Ikke et gyldigt profilnummer. Profilnumre skal være imellem 1 og %d." #: .././sonata/cli.py:140 #, python-format msgid "Python is unable to interpret %s as a number." msgstr "Python kan ikke fortolke %s som et nummer." #: .././sonata/cli.py:154 #: .././sonata/main.py:179 msgid "Default Profile" msgstr "Standard profil" #: .././sonata/cli.py:154 #: .././sonata/main.py:179 msgid "by" msgstr "af" #: .././sonata/cli.py:154 #: .././sonata/main.py:179 msgid "from" msgstr "fra" #: .././sonata/cli.py:176 msgid "" "Unable to connect to MPD.\n" "Please check your Sonata preferences or MPD_HOST/MPD_PORT environment variables." msgstr "" "Kunne ikke forbinde til MPD.\n" "Tjek dine Sonata indstillinger og MPD_HOST/MPD_PORT variabler." #: .././sonata/cli.py:208 #: .././sonata/info.py:91 #: .././sonata/info.py:245 #: .././sonata/library.py:49 #: .././sonata/tagedit.py:125 msgid "Title" msgstr "Titel" #: .././sonata/cli.py:209 #: .././sonata/info.py:91 #: .././sonata/info.py:246 #: .././sonata/library.py:49 #: .././sonata/main.py:1184 #: .././sonata/tagedit.py:126 msgid "Artist" msgstr "Kunstner" #: .././sonata/cli.py:210 #: .././sonata/info.py:91 #: .././sonata/info.py:247 #: .././sonata/library.py:49 #: .././sonata/main.py:1185 #: .././sonata/main.py:2439 #: .././sonata/tagedit.py:127 msgid "Album" msgstr "Album" #: .././sonata/cli.py:211 #: .././sonata/info.py:91 #: .././sonata/info.py:248 msgid "Date" msgstr "Dato" #: .././sonata/cli.py:212 #: .././sonata/info.py:91 #: .././sonata/info.py:250 #: .././sonata/main.py:1186 #: .././sonata/tagedit.py:130 msgid "Track" msgstr "Nummer" #: .././sonata/cli.py:213 #: .././sonata/info.py:91 #: .././sonata/info.py:249 #: .././sonata/library.py:49 #: .././sonata/main.py:1189 #: .././sonata/preferences.py:432 #: .././sonata/tagedit.py:139 msgid "Genre" msgstr "Genre" #: .././sonata/cli.py:214 #: .././sonata/info.py:91 #: .././sonata/info.py:251 #: .././sonata/main.py:1191 msgid "File" msgstr "Fil" #: .././sonata/cli.py:219 #: .././sonata/cli.py:221 msgid "Time" msgstr "Tid" #: .././sonata/cli.py:222 #: .././sonata/info.py:91 #: .././sonata/info.py:244 msgid "Bitrate" msgstr "Bitrate" #: .././sonata/cli.py:224 msgid "MPD stopped" msgstr "MPD stoppet" #: .././sonata/cli.py:228 #: .././sonata/cli.py:230 #: .././sonata/cli.py:232 msgid "State" msgstr "Status" #: .././sonata/cli.py:228 msgid "Playing" msgstr "Afspiller" #: .././sonata/cli.py:230 msgid "Paused" msgstr "Pause" #: .././sonata/cli.py:232 #: .././sonata/main.py:559 #: .././sonata/main.py:564 #: .././sonata/main.py:1836 #: .././sonata/main.py:1847 msgid "Stopped" msgstr "Stoppet" #: .././sonata/cli.py:234 #: .././sonata/cli.py:236 msgid "Repeat" msgstr "Gentag" #: .././sonata/cli.py:234 #: .././sonata/cli.py:238 msgid "Off" msgstr "Nej" #: .././sonata/cli.py:236 #: .././sonata/cli.py:240 msgid "On" msgstr "Ja" #: .././sonata/cli.py:238 #: .././sonata/cli.py:240 msgid "Random" msgstr "Bland liste" #: .././sonata/cli.py:241 msgid "Volume" msgstr "Lydstyrke" #: .././sonata/cli.py:242 msgid "Crossfade" msgstr "Crossfade" #: .././sonata/cli.py:242 #: .././sonata/preferences.py:192 msgid "second" msgid_plural "seconds" msgstr[0] "sekund" msgstr[1] "sekunder" #: .././sonata/current.py:64 msgid "Filter" msgstr "Filter" #: .././sonata/dbus_plugin.py:83 msgid "Sonata failed to connect to the D-BUS session bus: Unable to determine the address of the message bus (try 'man dbus-launch' and 'man dbus-daemon' for help)" msgstr "" #: .././sonata/dbus_plugin.py:96 msgid "Failed to execute remote commands." msgstr "Afvikling af fjernkommandoer fejlede." #: .././sonata/dbus_plugin.py:98 msgid "Starting Sonata instead..." msgstr "Starter Sonata i stedet..." #: .././sonata/dbus_plugin.py:100 msgid "Maybe Sonata is not running?" msgstr "Der er allerede startet en instans af Sonata" #: .././sonata/dbus_plugin.py:114 msgid "An instance of Sonata is already running. Showing it..." msgstr "Der er allerede startet en instans af Sonata. Viser den..." #: .././sonata/dbus_plugin.py:120 msgid "Failed to execute remote command." msgstr "Afvikling af fjernkommando fejlede." #. Song info #: .././sonata/info.py:78 msgid "Song Info" msgstr "Sanginformationer" #: .././sonata/info.py:93 msgid "Launch artist in Wikipedia" msgstr "Vis kunsterne på Wikipedia" #: .././sonata/info.py:93 msgid "Launch album in Wikipedia" msgstr "Vis album på Wikipedia" #: .././sonata/info.py:127 msgid "Toggle extra tags" msgstr "Vis/skjul ekstra tags" #: .././sonata/info.py:130 msgid "Edit song tags" msgstr "Rediger tags" #. Lyrics #: .././sonata/info.py:140 msgid "Lyrics" msgstr "Sangtekst" #: .././sonata/info.py:152 msgid "Search Lyricwiki.org for lyrics" msgstr "Find sangtekster på Lyricwiki.org" #: .././sonata/info.py:153 msgid "Edit lyrics at Lyricwiki.org" msgstr "Ret sangtekst på Lyricwiki.org" #. Album info #: .././sonata/info.py:161 msgid "Album Info" msgstr "Albuminformationer" #: .././sonata/info.py:213 #: .././sonata/info.py:218 msgid "more" msgstr "mere" #: .././sonata/info.py:215 msgid "hide" msgstr "skjul" #: .././sonata/info.py:281 msgid "edit tags" msgstr "rediger tags" #: .././sonata/info.py:308 msgid "Album info not found." msgstr "Ingen albuminformationer blev fundet." #: .././sonata/info.py:311 msgid "Album name not set." msgstr "Album navn ikke angivet" #: .././sonata/info.py:324 msgid "ZSI not found, fetching lyrics support disabled." msgstr "ZSI (Zolera Soap Infrastructure) blev ikke fundet, sangtekster vil ikke blive hentet." #: .././sonata/info.py:329 msgid "Artist or song title not set." msgstr "Kunstner eller titel ikke angivet" #: .././sonata/info.py:371 msgid "search" msgstr "søg" #: .././sonata/info.py:372 msgid "edit" msgstr "rediger" #: .././sonata/info.py:381 #: .././sonata/info.py:436 msgid "Lyrics not found" msgstr "Der blev ikke fundet nogen sangtekst." #. Fetch lyrics from lyricwiki.org #: .././sonata/info.py:401 msgid "Fetching lyrics..." msgstr "Henter sangtekst.." #: .././sonata/info.py:411 msgid "Couldn't connect to LyricWiki" msgstr "Kunne ikke forbinde til LyricWiki" #: .././sonata/info.py:439 msgid "Fetching lyrics failed" msgstr "Kunne ikke hente sangtekst" #: .././sonata/library.py:47 msgid "Untagged" msgstr "Tags mangler" #: .././sonata/library.py:48 msgid "Various Artists" msgstr "Diverse kunstnere" #: .././sonata/library.py:49 msgid "Filename" msgstr "Filnavn" #: .././sonata/library.py:49 msgid "Everything" msgstr "Alt" #: .././sonata/library.py:52 msgid "Filesystem" msgstr "Filsystem" #: .././sonata/library.py:53 msgid "Artists" msgstr "Kunstnere" #: .././sonata/library.py:54 msgid "Albums" msgstr "Albums" #: .././sonata/library.py:55 msgid "Genres" msgstr "Genrer" #: .././sonata/library.py:84 msgid "Search terms" msgstr "Søgeord" #: .././sonata/library.py:90 msgid "End Search" msgstr "Afslut søgning" #: .././sonata/library.py:92 msgid "Library browsing view" msgstr "Bibliotek visningsmåde" #: .././sonata/library.py:96 msgid "Search" msgstr "Søg" #. Show text: #: .././sonata/library.py:761 #: .././sonata/main.py:1763 #: .././sonata/main.py:3331 msgid "song" msgid_plural "songs" msgstr[0] "sang" msgstr[1] "sange" #: .././sonata/library.py:761 #: .././sonata/main.py:1757 msgid "minute" msgid_plural "minutes" msgstr[0] "minut" msgstr[1] "minutter" #: .././sonata/library.py:849 msgid "Song" msgstr "Sang" #: .././sonata/library.py:849 #: .././sonata/main.py:1190 msgid "Path" msgstr "Sti" #. Constants #: .././sonata/main.py:102 msgid "Current" msgstr "Afspilningskø" #: .././sonata/main.py:103 msgid "Library" msgstr "Bibliotek" #: .././sonata/main.py:104 msgid "Playlists" msgstr "Afspilningslister" #: .././sonata/main.py:105 msgid "Streams" msgstr "Streams" #: .././sonata/main.py:106 msgid "Info" msgstr "Info" #: .././sonata/main.py:137 #: .././sonata/preferences.py:193 #: .././sonata/preferences.py:194 msgid "Entire song" msgstr "Hele sangen" #: .././sonata/main.py:234 msgid "_Sort List" msgstr "_Sorter liste" #: .././sonata/main.py:235 msgid "Sa_ve List to" msgstr "Ge_m liste som" #: .././sonata/main.py:236 msgid "_Connection" msgstr "_Forbindelse" #: .././sonata/main.py:237 msgid "P_lay after" msgstr "Afspi_l efter" #: .././sonata/main.py:238 #: .././sonata/main.py:2454 msgid "_Update" msgstr "_Opdater" #: .././sonata/main.py:239 msgid "Use _Remote Image..." msgstr "Brug _online billede" #: .././sonata/main.py:240 msgid "Use _Local Image..." msgstr "Brug _lokalt billede" #: .././sonata/main.py:241 msgid "_Fullscreen Mode" msgstr "Vis i _fuld skærm" #: .././sonata/main.py:242 msgid "Reset Image" msgstr "Nulstil billede" #: .././sonata/main.py:243 msgid "_Play" msgstr "_Afspil" #: .././sonata/main.py:244 msgid "Pa_use" msgstr "_Pause" #: .././sonata/main.py:245 msgid "_Stop" msgstr "_Stop" #: .././sonata/main.py:246 msgid "Pre_vious" msgstr "_Forrige" #: .././sonata/main.py:247 msgid "_Next" msgstr "_Næste" #: .././sonata/main.py:248 msgid "_Quit" msgstr "_Luk" #: .././sonata/main.py:249 msgid "_Remove" msgstr "_Fjern" #: .././sonata/main.py:250 msgid "_Clear" msgstr "R_yd" #: .././sonata/main.py:251 msgid "_Entire Library" msgstr "_Hele biblioteket" #: .././sonata/main.py:252 msgid "_Selected Items" msgstr "Valgte elementer" #: .././sonata/main.py:253 msgid "_Preferences..." msgstr "_Indstillinger" #: .././sonata/main.py:254 msgid "_About..." msgstr "_Om" #: .././sonata/main.py:255 msgid "_Edit Tags..." msgstr "_Rediger tags" #: .././sonata/main.py:256 msgid "_Add" msgstr "_Tilføj" #: .././sonata/main.py:257 msgid "_Replace" msgstr "_Erstat" #: .././sonata/main.py:258 msgid "Add" msgstr "Tilføj" #: .././sonata/main.py:259 msgid "Replace" msgstr "Erstat" #: .././sonata/main.py:260 msgid "_Delete..." msgstr "_Slet" #: .././sonata/main.py:261 msgid "Shuffle" msgstr "Bland" #: .././sonata/main.py:286 msgid "S_how Sonata" msgstr "_Vis Sonata-vinduet" #: .././sonata/main.py:287 msgid "_Repeat" msgstr "_Gentag" #: .././sonata/main.py:288 msgid "Rando_m" msgstr "Tilfældig _rækkefølge" #: .././sonata/main.py:428 msgid "By Artist" msgstr "Efter _kunstner" #: .././sonata/main.py:429 msgid "By Album" msgstr "Efter _album" #: .././sonata/main.py:430 msgid "By Song Title" msgstr "Efter _titel" #: .././sonata/main.py:431 msgid "By File Name" msgstr "Efter _filnavn" #: .././sonata/main.py:432 msgid "By Dir & File Name" msgstr "Efter mappe og filnavn" #: .././sonata/main.py:433 msgid "Reverse List" msgstr "Omvendt rækkefølge" #: .././sonata/main.py:456 #: .././sonata/main.py:467 msgid "_New..." msgstr "_Ny..." #: .././sonata/main.py:457 msgid "_Edit..." msgstr "_Rediger" #: .././sonata/main.py:468 msgid "_Rename..." msgstr "_Omdøb" #: .././sonata/main.py:530 #: .././sonata/main.py:597 #: .././sonata/main.py:598 msgid "Playlist" msgstr "Afspilningsliste" #: .././sonata/main.py:560 #: .././sonata/main.py:1840 #: .././sonata/main.py:2049 msgid "Click to expand" msgstr "Klik for at folde ud" #: .././sonata/main.py:565 #: .././sonata/main.py:1838 #: .././sonata/main.py:2047 msgid "Click to collapse" msgstr "Klik for at folde sammen" #: .././sonata/main.py:570 #: .././sonata/main.py:1732 #: .././sonata/main.py:1843 msgid "Not Connected" msgstr "Ikke forbundet" #: .././sonata/main.py:572 #: .././sonata/main.py:1730 #: .././sonata/main.py:1845 msgid "No Read Permission" msgstr "Ingen læserettigheder" #: .././sonata/main.py:645 msgid "Cover Art" msgstr "Pladeomslag" #: .././sonata/main.py:850 #: .././sonata/main.py:863 #: .././sonata/main.py:884 msgid "Profile" msgstr "Profil" #: .././sonata/main.py:863 #: .././sonata/main.py:864 #: .././sonata/main.py:884 msgid "MPD_HOST/PORT" msgstr "MPD_HOST/PORT" #: .././sonata/main.py:865 #: .././sonata/main.py:871 msgid "Disconnect" msgstr "Ingen forbindelse" #: .././sonata/main.py:1187 #: .././sonata/main.py:1194 msgid "#" msgstr "Nr." #: .././sonata/main.py:1188 #: .././sonata/preferences.py:431 #: .././sonata/tagedit.py:128 msgid "Year" msgstr "År" #: .././sonata/main.py:1192 msgid "Stream" msgstr "Stream" #: .././sonata/main.py:1193 msgid "Len" msgstr "Længde" #: .././sonata/main.py:1214 #: .././sonata/main.py:1221 #: .././sonata/main.py:1262 #: .././sonata/main.py:1269 msgid "Unknown" msgstr "Ukendt" #: .././sonata/main.py:1753 msgid "day" msgid_plural "days" msgstr[0] "dag" msgstr[1] "dage" #: .././sonata/main.py:1761 msgid "hour" msgid_plural "hours" msgstr[0] "time" msgstr[1] "timer" #: .././sonata/main.py:1766 #: .././sonata/main.py:1768 msgid "and" msgstr "og" #: .././sonata/main.py:1776 msgid "(updating mpd)" msgstr "(opdaterer MPD database)" #: .././sonata/main.py:2116 msgid "Lyrics Search" msgstr "Sangtekst søgning" #: .././sonata/main.py:2117 msgid "_Search" msgstr "_Søg" #: .././sonata/main.py:2120 msgid "Artist Name" msgstr "Kunstner navn" #: .././sonata/main.py:2125 msgid "Song Title" msgstr "Sangtitel" #: .././sonata/main.py:2377 msgid "Open Image" msgstr "Åben billede" #: .././sonata/main.py:2379 msgid "Images" msgstr "Billeder" #: .././sonata/main.py:2383 msgid "All files" msgstr "Alle filer" #: .././sonata/main.py:2425 msgid "Choose Cover Art" msgstr "Vælg pladeomslag" #: .././sonata/main.py:2426 msgid "C_hoose" msgstr "Væl_g" #: .././sonata/main.py:2459 msgid "Edit search terms" msgstr "Rediger søgeord" #: .././sonata/main.py:2516 msgid "No artist or album name found." msgstr "Ingen kunstner eller album fundet." #: .././sonata/main.py:2519 msgid "No cover art found." msgstr "Intet pladeomslag" #: .././sonata/main.py:2843 msgid "Delete the selected playlist?" msgid_plural "Delete the selected playlists?" msgstr[0] "Slet den valgte afspilningsliste?" msgstr[1] "Slet de valgte afspilningslister?" #: .././sonata/main.py:2843 msgid "Delete Playlist" msgid_plural "Delete Playlists" msgstr[0] "Slet afspilningsliste" msgstr[1] "Slet afspilningslister" #: .././sonata/main.py:2851 msgid "Delete the selected stream?" msgid_plural "Delete the selected streams?" msgstr[0] "Slet den valgte stream?" msgstr[1] "Slet de valgte streams?" #: .././sonata/main.py:2851 msgid "Delete Stream" msgid_plural "Delete Streams" msgstr[0] "Slet stream" msgstr[1] "Slet Streams" #: .././sonata/main.py:2909 msgid "To save lyrics to the music file's directory, you must specify a valid music directory." msgstr "For at gemme sangtekster til musikfilens mappe, skal du angive en gyldig musikmappe." #: .././sonata/main.py:2909 #: .././sonata/main.py:2916 msgid "Music Dir Verification" msgstr "Musikmappe verifikation" #: .././sonata/main.py:2916 msgid "To save artwork to the music file's directory, you must specify a valid music directory." msgstr "For at gemme albumcovers til musikfilens mappe, skal du angive en gyldig musikmappe." #: .././sonata/main.py:3332 msgid "album" msgid_plural "albums" msgstr[0] "album" msgstr[1] "albums" #: .././sonata/main.py:3333 msgid "artist" msgid_plural "artists" msgstr[0] "kunstner" msgstr[1] "kunstner" #: .././sonata/main.py:3340 msgid "day of bliss" msgid_plural "days of bliss" msgstr[0] "lyksalig dag" msgstr[1] "lyksalige dage" #: .././sonata/main.py:3342 msgid "hour of bliss" msgid_plural "hours of bliss" msgstr[0] "lyksalig time" msgstr[1] "lyksalige timer" #: .././sonata/playlists.py:103 #: .././sonata/playlists.py:105 msgid "Save Playlist" msgstr "Gem afspilningsliste" #: .././sonata/playlists.py:120 msgid "Would you like to replace the existing playlist or append these songs?" msgstr "Vil du tilføje disse sange til den nuværende afspilningskø eller erstatte den?" #: .././sonata/playlists.py:120 msgid "Existing Playlist" msgstr "Eksisterende afspilningsliste" #: .././sonata/playlists.py:120 msgid "Replace playlist" msgstr "Erstat afspilningsliste" #: .././sonata/playlists.py:120 msgid "Append songs" msgstr "Tilføj sange" #: .././sonata/playlists.py:141 msgid "A playlist with this name already exists. Would you like to replace it?" msgstr "En afspilningsliste med dette navn eksisterer allerede. Vil du erstatte den? " #: .././sonata/playlists.py:153 msgid "Playlist name" msgstr "Listenavn" #: .././sonata/playlists.py:182 #: .././sonata/playlists.py:186 msgid "Rename Playlist" msgstr "Omdøb afspilningsliste" #. Constants: #: .././sonata/preferences.py:35 msgid "System tray" msgstr "Statusfelt" #: .././sonata/preferences.py:35 msgid "Top Left" msgstr "Øverst til venstre" #: .././sonata/preferences.py:35 msgid "Top Right" msgstr "Øverst til højre" #: .././sonata/preferences.py:35 msgid "Bottom Left" msgstr "Nederst til venstre" #: .././sonata/preferences.py:35 msgid "Bottom Right" msgstr "Nederst til højre" #: .././sonata/preferences.py:35 msgid "Screen Center" msgstr "Midt på skærmen" #. MPD tab #: .././sonata/preferences.py:64 msgid "MPD Connection" msgstr "MPD forbindelse" #: .././sonata/preferences.py:76 msgid "_Name" msgstr "_Navn" #: .././sonata/preferences.py:79 msgid "_Host" msgstr "_Server" #: .././sonata/preferences.py:82 msgid "_Port" msgstr "_Port" #: .././sonata/preferences.py:86 msgid "_Music dir" msgstr "_Musikmappe" #: .././sonata/preferences.py:87 msgid "Select a Music Directory" msgstr "Vælg en musikmappe" #: .././sonata/preferences.py:91 msgid "Pa_ssword" msgstr "Pass_word" #: .././sonata/preferences.py:94 msgid "Leave blank if no password is required." msgstr "Efterlad tom hvis serveren ikke er beskyttet med password." #: .././sonata/preferences.py:95 msgid "_Autoconnect on start" msgstr "Forbind _automatisk ved programstart" #: .././sonata/preferences.py:113 msgid "Using MPD_HOST/PORT" msgstr "Bruger MPD_HOST/PORT" #: .././sonata/preferences.py:163 #: .././sonata/preferences.py:536 msgid "Extras" msgstr "Ekstra" #: .././sonata/preferences.py:168 msgid "_Audioscrobbling (Last.fm)" msgstr "_Audioscrobbling (Last.fm)" #: .././sonata/preferences.py:170 msgid "_Username:" msgstr "_Brugernavn:" #: .././sonata/preferences.py:171 msgid "_Password:" msgstr "_Password:" #: .././sonata/preferences.py:188 msgid "Popup _notification on song changes" msgstr "Vis _notifikationer ved sangskift" #: .././sonata/preferences.py:210 msgid "Fade length" msgstr "Fadelængde" #: .././sonata/preferences.py:211 msgid "_Fade length" msgstr "_Fadelængde" #: .././sonata/preferences.py:213 msgid "sec" msgstr "sek" #: .././sonata/preferences.py:218 msgid "C_rossfade" msgstr "C_rossfade" #. Display tab #: .././sonata/preferences.py:246 #: .././sonata/preferences.py:533 msgid "Display" msgstr "Visning" #: .././sonata/preferences.py:251 msgid "_Album art" msgstr "Plade_omslag" #: .././sonata/preferences.py:253 msgid "Standard" msgstr "Standard" #: .././sonata/preferences.py:253 msgid "Stylized" msgstr "Med CD-kant" #: .././sonata/preferences.py:256 msgid "Artwork style:" msgstr "Omslags udseende:" #: .././sonata/preferences.py:258 msgid "Local only" msgstr "Kun lokalt" #: .././sonata/preferences.py:258 msgid "Local and remote" msgstr "Lokalt og online" #: .././sonata/preferences.py:260 msgid "Search locations:" msgstr "Søge placeringer:" #: .././sonata/preferences.py:267 #: .././sonata/preferences.py:289 msgid "SONG_DIR" msgstr "SANGENS_MAPPE" #: .././sonata/preferences.py:269 msgid "custom" msgstr "selvvalgt" #: .././sonata/preferences.py:274 msgid "Save art to:" msgstr "Gem omslag som:" #: .././sonata/preferences.py:277 msgid "_Playback/volume buttons" msgstr "_Afspilnings- og lydstyrkeknapper" #: .././sonata/preferences.py:280 msgid "Pr_ogressbar" msgstr "_Progressbar" #: .././sonata/preferences.py:283 msgid "_Statusbar" msgstr "_Statusbar" #: .././sonata/preferences.py:286 msgid "Song Ly_rics" msgstr "Sang_tekst" #: .././sonata/preferences.py:288 msgid "Save lyrics to:" msgstr "Gem tekster som:" #: .././sonata/preferences.py:297 msgid "System _tray icon" msgstr "_Ikon i statusfeltet" #. Behavior tab #: .././sonata/preferences.py:319 msgid "Window Behavior" msgstr "Vindues opførsel" #: .././sonata/preferences.py:323 msgid "_Show window on all workspaces" msgstr "Vis vindue på alle _arbejdsområder" #: .././sonata/preferences.py:326 msgid "_Keep window above other windows" msgstr "_Hæv vindue over andre vinduer" #: .././sonata/preferences.py:329 msgid "_Hide window titlebar" msgstr "Skjul vinduets _titellinje" #: .././sonata/preferences.py:334 msgid "_Minimize to system tray on close/escape" msgstr "_Minimer til statusfeltet ved lukning eller ved tryk på escape" #: .././sonata/preferences.py:336 msgid "If enabled, closing Sonata will minimize it to the system tray. Note that it's currently impossible to detect if there actually is a system tray, so only check this if you have one." msgstr "Hvis dette er slået til vil Sonata blive minimeret til statusfeltet ved lukning og tryk på escape tasten.Det er på nuværende tidspunkt ikke muligt at kontrollere om der er et statusfelt, så slå kun dette til hvis du har et." #: .././sonata/preferences.py:350 msgid "Miscellaneous" msgstr "Diverse" #: .././sonata/preferences.py:354 msgid "_Update MPD library on start" msgstr "_Opdater MPD biblioteket ved programstart" #: .././sonata/preferences.py:356 msgid "If enabled, Sonata will automatically update your MPD library when it starts up." msgstr "Hvis dette er slået til vil Sonata automatisk opdatere dit MPD bibliotek ved programstart." #: .././sonata/preferences.py:358 msgid "S_top playback on exit" msgstr "_Stop afspilning ved lukning" #: .././sonata/preferences.py:360 msgid "MPD allows playback even when the client is not open. If enabled, Sonata will behave like a more conventional music player and, instead, stop playback upon exit." msgstr "MPD tillader afspilning selv når klienten ikke er åben. Sonata vil opføre sig mere som en konventionel musikafspiller vis dette slås til og stoppe afspilningen når Sonata lukkes." #: .././sonata/preferences.py:362 msgid "_Write status file:" msgstr "Lav status_fil:" #: .././sonata/preferences.py:364 #: .././sonata/preferences.py:366 msgid "If enabled, Sonata will create a xmms-infopipe like file containing information about the current song. Many applications support the xmms-info file (Instant Messengers, IRC Clients...)" msgstr "Lader Sonata lave en xmms-infopipe lignende fil der indeholder informationer om den nuværende sang. Mange programmer understøtter xmms-info filer (Instant Messengers, IRC Klienter...)" #. Format tab #: .././sonata/preferences.py:392 msgid "Song Formatting" msgstr "Sangformattering" #: .././sonata/preferences.py:397 msgid "C_urrent playlist:" msgstr "_Afspilningskøen:" #: .././sonata/preferences.py:398 msgid "_Library:" msgstr "I _biblioteket:" #: .././sonata/preferences.py:399 msgid "_Window title:" msgstr "_Vindues titel:" #: .././sonata/preferences.py:400 msgid "Current _song line 1:" msgstr "_Nuværende sang, linje 1:" #: .././sonata/preferences.py:402 msgid "Current s_ong line 2:" msgstr "N_uværende sang, linje 2:" #: .././sonata/preferences.py:422 msgid "Available options" msgstr "Tilgængelige erstatninger" #. XXX get these directly from the formatting function: #: .././sonata/preferences.py:426 msgid "Artist name" msgstr "Kunstner navn" #: .././sonata/preferences.py:427 msgid "Album name" msgstr "Album titel" #: .././sonata/preferences.py:428 msgid "Track name" msgstr "Sangens navn" #: .././sonata/preferences.py:429 msgid "Track number" msgstr "Sangens nummer" #: .././sonata/preferences.py:430 msgid "Disc number" msgstr "Disk nummer" #: .././sonata/preferences.py:433 msgid "File path" msgstr "Filsti" #: .././sonata/preferences.py:434 msgid "File name" msgstr "Filnavn" #: .././sonata/preferences.py:435 #: .././sonata/streams.py:109 msgid "Stream name" msgstr "Stream navn" #: .././sonata/preferences.py:436 msgid "Song length" msgstr "Sanglængde" #: .././sonata/preferences.py:437 msgid "Elapsed time (title only)" msgstr "Forløbet tid (kun i vinduestitel)" #: .././sonata/preferences.py:448 msgid "Info displayed only if all enclosed tags are defined" msgstr "Bliver kun vist hvis all tags imellem paranteserne er defineret." #: .././sonata/preferences.py:448 msgid "Creates columns in the current playlist" msgstr "Opdeler den nuværende afspilningsliste i kolonner." #: .././sonata/preferences.py:473 msgid "_About" msgstr "_Om" #: .././sonata/preferences.py:474 msgid "_Configure..." msgstr "_Konfigurer..." #: .././sonata/preferences.py:513 msgid "Loaded" msgstr "Indlæst" #: .././sonata/preferences.py:521 msgid "Description" msgstr "Forklaring" #. Set up table #: .././sonata/preferences.py:532 msgid "MPD" msgstr "MPD" #: .././sonata/preferences.py:534 msgid "Behavior" msgstr "Opførsel" #: .././sonata/preferences.py:535 msgid "Format" msgstr "Format" #: .././sonata/preferences.py:605 msgid "New Profile" msgstr "Ny profil" #. Prompt user for playlist name: #: .././sonata/preferences.py:659 msgid "Custom Artwork" msgstr "Vælg placering/filnavn for pladeomslag" #: .././sonata/preferences.py:661 msgid "Artwork filename" msgstr "Omslags filnavn" #: .././sonata/streams.py:105 msgid "Edit Stream" msgstr "Rediger stream" #: .././sonata/streams.py:107 #: .././sonata/streams.py:138 msgid "New Stream" msgstr "Ny stream" #: .././sonata/streams.py:116 msgid "Stream URL" msgstr "Stream URL" #: .././sonata/streams.py:138 msgid "A stream with this name already exists. Would you like to replace it?" msgstr "En stream med dette navn eksisterer allerede. Vil du erstatte den?" #: .././sonata/tagedit.py:61 msgid "Taglib and/or tagpy not found, tag editing support disabled." msgstr "Hverken Taglib og/eller tagpy blev fundet, tagredigering deaktiveret." #: .././sonata/tagedit.py:61 #: .././sonata/tagedit.py:70 #: .././sonata/tagedit.py:75 #: .././sonata/tagedit.py:99 #: .././sonata/tagedit.py:103 #: .././sonata/tagedit.py:260 #: .././sonata/tagedit.py:299 msgid "Edit Tags" msgstr "Rediger tags" #: .././sonata/tagedit.py:70 msgid "Tagpy version < 0.91. Please upgrade to a newer version, tag editing support disabled." msgstr "Den installerede tagpy version er < 0.91. Opgrader venligst til en nyere version for at få mulighed for redigering af tags." #: .././sonata/tagedit.py:75 msgid "The path" msgstr "Stien" #: .././sonata/tagedit.py:75 msgid "does not exist. Please specify a valid music directory in preferences." msgstr "eksisterer ikke. Vælg venligst en gyldig musikmappe under indstillinger." #: .././sonata/tagedit.py:99 msgid "File " msgstr "Filen" #: .././sonata/tagedit.py:99 msgid " not found. Please specify a valid music directory in preferences." msgstr " blev ikke fundet. Vælg venligst en gyldig musikmappe under indstillinger." #: .././sonata/tagedit.py:103 msgid "No music files with editable tags found." msgstr "Ingen musikfiler med redigerbare tags fundet." #: .././sonata/tagedit.py:150 msgid "Comment" msgstr "Kommentar" #. Only show save all button if more than one song being edited. #: .././sonata/tagedit.py:161 msgid "Save _All" msgstr "Gem _Alle" #: .././sonata/tagedit.py:207 msgid "Increment each selected music file, starting at track 1 for this file." msgstr "Giv alle de valgte sange et fortløbende nummer startende med denne, som får nummer 1." #: .././sonata/tagedit.py:209 msgid "Apply to all selected music files." msgstr "Anvend på alle de valgte musikfiler." #: .././sonata/tagedit.py:260 msgid "of" msgstr "af" #. FIXME: was (save_success and self.conn and self.status): #: .././sonata/tagedit.py:299 msgid "Unable to save tag to music file." msgstr "Umuligt at skrive tag til musikfil." #: .././sonata/tagedit.py:366 msgid "Hide file path" msgstr "Skjul filsti" #: .././sonata/tagedit.py:369 msgid "Show file path" msgstr "Vis filsti" #~ msgid "The popup argument requires D-Bus. Aborting." #~ msgstr "\"--popup\"-argumentet kræver D-Bus. Afbryder." #, fuzzy #~ msgid "_Update Path" #~ msgstr "_Opdater" #~ msgid "Website: http://www.nongnu.org/sonata/" #~ msgstr "Hjemmeside: http://www.nongnu.org/sonata/" #~ msgid "Enable Audioscrobbler" #~ msgstr "Brug Audioscrobbler" #~ msgid "Enable Crossfade" #~ msgstr "Brug crossfade" #~ msgid "Enable album art" #~ msgstr "Hent og vis pladeomslag" #~ msgid "Enable lyrics" #~ msgstr "Hent sangtekster" #~ msgid "Enable system tray icon" #~ msgstr "Vis ikon i statusfelt" #~ msgid "_Display" #~ msgstr "_Visning" #~ msgid "_Extras" #~ msgstr "_Ekstra" #~ msgid "" #~ "PyGTK+ 2.10 or gnome-python-extras not found, system tray support " #~ "disabled." #~ msgstr "" #~ "Hverken PyGTK+ 2.10 eller gnome-python-extras blev fundet, mulighed for " #~ "ikon i statusfeltet deaktiveret." #~ msgid "Reset to Default" #~ msgstr "Sæt tilbage til standard" #~ msgid "_New Playlist..." #~ msgstr "Ny afspilnings_liste" #~ msgid "Notification" #~ msgstr "Notifikation" #~ msgid "" #~ "Python 2.5 or python-elementtree not found, audioscrobbler support " #~ "disabled." #~ msgstr "" #~ "Hverken Python 2.5 eller python-elementtree blev fundet, audioscrobbler " #~ "understøttelse deaktiveret." #~ msgid "Audioscrobbler Verification" #~ msgstr "Audioscrobbler verifikation" #~ msgid "Update library for selected item(s)" #~ msgstr "Opdater bibliotek for de valgte mapper" #~ msgid "_Shuffle" #~ msgstr "Tilfæl_dig rækkefølge" #~ msgid "Toggle shuffle mode" #~ msgstr "Slå tilfældig rækkefølge til eller fra" #~ msgid "Not connected" #~ msgstr "Ikke forbundet" #~ msgid "Press enter to search for these terms." #~ msgstr "Tryk enter for at søge efter disse ord." #~ msgid "Add new profile" #~ msgstr "Tilføj ny profil" #~ msgid "Remove current profile" #~ msgstr "Slet nuværende profil" #~ msgid "Play enqueued files on activate" #~ msgstr "Afspil filer når de bliver indsat i afspilningskøen." #~ msgid "" #~ "Automatically play enqueued items when activated via double-click or " #~ "enter." #~ msgstr "Afspil automatisk sange når de bliver indsat i afspilningskøen." #~ msgid "Add selected song(s) or directory(s)" #~ msgstr "Tilføj valgte sange eller mapper" #~ msgid "Replace with selected song(s) or directory(s)" #~ msgstr "Erstat med valgte sange eller mapper" #~ msgid "Add to _Queue" #~ msgstr "Tilføj til _afspilningskø" #~ msgid "Remove from _Queue" #~ msgstr "Fjern fra _afspilningskø" #~ msgid "Add selected song(s) to playlist queue" #~ msgstr "Tilføj valgte sange til afspilningskøen" #~ msgid "Remove selected song(s) from playlist queue" #~ msgstr "Fjern de valgte sange fra afspilningskøen" #~ msgid "seconds" #~ msgstr "sekunder" #~ msgid "Song Info..." #~ msgstr "_Sanginformationer" #~ msgid "Click to collapse the player" #~ msgstr "Klik for at folde afspilleren sammen" #~ msgid "Click to expand the player" #~ msgstr "Klik for at folde afspilleren ud" #~ msgid "_Song Info" #~ msgstr "_Sanginformationer" #~ msgid "_Search..." #~ msgstr "Sø_g" #~ msgid "Remote only" #~ msgstr "Kun online" #~ msgid "Remote, then local" #~ msgstr "Online, derefter lokalt" #~ msgid "To save artwork as" #~ msgstr "For at gemme pladeomslag som" #~ msgid "Artwork Verification" #~ msgstr "Pladeomslags verifikation" #~ msgid "Switch to current playlist" #~ msgstr "Gå til nuværende afspilningsliste" #~ msgid "Toggle filter bar for jumping straight to track" #~ msgstr "" #~ "Vis eller skjul filterbar, beregnet på at kunne hoppe direkte til en sang." �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/po/de.po�������������������������������������������������������������������������������0000664�0000000�0000000�00000114711�13771420143�0014361�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# translation of sonata.po to # German translations for Sonata package. # Copyright (C) 2008 THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as Sonata package. # # Paul Johnson <thrillerator@googlemail.com>, 2007. # Sebastian Kemper <sebastian_ml@gmx.net>, 2007. # Sebastian Wicki <gandro@gmx.net>, 2008, 2009. msgid "" msgstr "" "Project-Id-Version: sonata\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2012-10-31 12:36+0100\n" "PO-Revision-Date: 2012-10-31 21:16+0100\n" "Last-Translator: Peter Helbing <peter@abulafia.org>\n" "Language-Team: <de@li.org>\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. define the shortcuts and their descriptions #. these are all gettextable #: ../sonata/about.py:58 msgid "About Sonata" msgstr "Über Sonata" #: ../sonata/about.py:59 ../sonata/preferences.py:96 msgid "Preferences" msgstr "Einstellungen" #: ../sonata/about.py:60 msgid "Fullscreen Artwork Mode" msgstr "Albumcover-Vollbildmodus" #: ../sonata/about.py:61 msgid "Switch to [1st-5th] tab" msgstr "Zum [1.-5.] Tab wechseln" #: ../sonata/about.py:62 msgid "Connect to MPD" msgstr "Mit MPD verbinden" #: ../sonata/about.py:63 msgid "Disconnect from MPD" msgstr "Von MPD trennen" #: ../sonata/about.py:64 msgid "Randomize current playlist" msgstr "Aktuelle Wiedergabeliste zufällig anordnen" #: ../sonata/about.py:65 msgid "Expand player" msgstr "Ansicht erweitern" #: ../sonata/about.py:66 msgid "Switch to previous tab" msgstr "Zum vorherigen Tab wechseln" #: ../sonata/about.py:67 msgid "Switch to next tab" msgstr "Zum nächsten Tab wechseln" #: ../sonata/about.py:68 msgid "Collapse player" msgstr "Ansicht reduzieren" #: ../sonata/about.py:69 ../sonata/library.py:105 msgid "Search library" msgstr "Bibliothek durchsuchen" #: ../sonata/about.py:70 msgid "Quit" msgstr "Beenden" #: ../sonata/about.py:71 msgid "Update entire library" msgstr "Gesamte Bibliothek aktualisieren" #: ../sonata/about.py:72 msgid "Display popup menu" msgstr "Kontextmenü anzeigen" #: ../sonata/about.py:73 msgid "Minimize to system tray (if enabled)" msgstr "Ins Benachrichtigungsfeld minimieren (falls aktiviert)" #: ../sonata/about.py:75 msgid "Previous track" msgstr "Vorheriger Titel" #: ../sonata/about.py:76 msgid "Next track" msgstr "Nächster Titel" #: ../sonata/about.py:77 msgid "Play/Pause" msgstr "Abspielen/Anhalten" #: ../sonata/about.py:78 msgid "Stop" msgstr "Stopp" #: ../sonata/about.py:79 msgid "Lower the volume" msgstr "Lautstärke verringern" #: ../sonata/about.py:80 msgid "Raise the volume" msgstr "Lautstärke erhöhen" #: ../sonata/about.py:82 msgid "Play selected song" msgstr "Markiertes Lied abspielen" #: ../sonata/about.py:83 msgid "Remove selected song(s)" msgstr "Markierte(s) Lied(er) entfernen" #: ../sonata/about.py:84 msgid "Center currently playing song" msgstr "Zum aktuellen Lied springen" #: ../sonata/about.py:85 ../sonata/about.py:94 msgid "Edit selected song's tags" msgstr "Metadaten der ausgewählten Lieder bearbeiten" #: ../sonata/about.py:86 msgid "Save to new playlist" msgstr "Als neue Wiedergabeliste speichern" #: ../sonata/about.py:87 msgid "Clear list" msgstr "Wiedergabeliste leeren" #: ../sonata/about.py:88 msgid "Randomize list" msgstr "Wiedergabeliste zufällig anordnen" #: ../sonata/about.py:90 msgid "Add selected song(s) or enter directory" msgstr "Markierte(s) Lied(er) hinzufügen oder Verzeichnis öffnen" #: ../sonata/about.py:91 msgid "Go to parent directory" msgstr "Ins übergeordnete Verzeichnis gehen" #: ../sonata/about.py:92 msgid "Add selected item(s)" msgstr "Markierte(s) Element(e) entfernen" #: ../sonata/about.py:93 msgid "Replace with selected item(s)" msgstr "Mit markierten Element(en) ersetzten" #: ../sonata/about.py:95 msgid "Add selected item(s) and play" msgstr "Markierte(s) Element(e) hinzufügen und abspielen" #: ../sonata/about.py:96 msgid "Replace with selected item(s) and play" msgstr "Mit markierten Element(en) ersetzen und abspielen" #: ../sonata/about.py:97 msgid "Update selected item(s)/path(s)" msgstr "Markierte Element(e)/Pfad(e) aktualisieren" #: ../sonata/about.py:99 ../sonata/about.py:101 msgid "Add selected playlist(s)" msgstr "Markierte Wiedergabeliste(n) hinzufügen" #: ../sonata/about.py:100 msgid "Remove selected playlist(s)" msgstr "Markierte Wiedergabeliste(n) entfernen" #: ../sonata/about.py:102 msgid "Replace with selected playlist(s)" msgstr "Mit markierten Wiedergabeliste(n) ersetzen" #: ../sonata/about.py:103 msgid "Add selected playlist(s) and play" msgstr "Markierte Wiedergabeliste(n) hinzufügen und abspielen" #: ../sonata/about.py:107 ../sonata/about.py:109 msgid "Add selected stream(s)" msgstr "Markierte(r) Audio-Stream(s) hinzufügen" #: ../sonata/about.py:108 msgid "Remove selected stream(s)" msgstr "Markierte(r) Audio-Stream(s) entfernen" #: ../sonata/about.py:110 msgid "Replace with selected stream(s)" msgstr "Mit markierten Audio-Stream(s) ersetzen" #: ../sonata/about.py:111 msgid "Add selected stream(s) and play" msgstr "Markierte(r) Audio-Stream(s) hinzufügen und abspielen" #: ../sonata/about.py:115 msgid "Edit playing song's tags" msgstr "Metadaten des aktuellen Liedes bearbeiten" #. define the main array- this adds headings to each section of #. shortcuts that will be displayed #: ../sonata/about.py:118 msgid "Main Shortcuts" msgstr "Wichtigste Tastenkürzel" #: ../sonata/about.py:119 msgid "Playback Shortcuts" msgstr "Tastenkürzel für die Wiedergabe" #: ../sonata/about.py:120 msgid "Current Shortcuts" msgstr "Tastenkürzel für die aktuelle Wiedergabeliste" #: ../sonata/about.py:121 msgid "Library Shortcuts" msgstr "Tastenkürzel für die Bibliothek" #: ../sonata/about.py:122 msgid "Playlist Shortcuts" msgstr "Tastenkürzel für Wiedergabelisten" #: ../sonata/about.py:123 msgid "Stream Shortcuts" msgstr "Tastenkürzel für Audio-Streams" #: ../sonata/about.py:124 msgid "Info Shortcuts" msgstr "Tastenkürzel für die Titelinfo" #: ../sonata/about.py:125 msgid "Shortcuts" msgstr "Tastenkürzel" #: ../sonata/about.py:158 ../sonata/library.py:1049 ../sonata/main.py:1821 msgid "song" msgid_plural "songs" msgstr[0] "Lied" msgstr[1] "Lieder" #: ../sonata/about.py:161 msgid "album" msgid_plural "albums" msgstr[0] "Album" msgstr[1] "Alben" #: ../sonata/about.py:164 ../sonata/preferences.py:364 #: ../sonata/preferences.py:366 ../sonata/preferences.py:368 #: ../sonata/preferences.py:370 msgid "artist" msgid_plural "artists" msgstr[0] "Interpret" msgstr[1] "Interpreten" #: ../sonata/about.py:174 msgid "day of bliss" msgid_plural "days of bliss" msgstr[0] "Tag Glückseligkeit" msgstr[1] "Tage Glückseligkeit" #: ../sonata/about.py:179 msgid "hour of bliss" msgid_plural "hours of bliss" msgstr[0] "Stunde Glückseligkeit" msgstr[1] "Stunden Glückseligkeit" #: ../sonata/about.py:195 msgid "An elegant music client for MPD." msgstr "Ein eleganter MPD-Client." #. Add button to show keybindings: #: ../sonata/about.py:212 msgid "_Shortcuts" msgstr "_Tastenkürzel" #: ../sonata/about.py:227 ../sonata/main.py:3265 ../sonata/preferences.py:830 msgid "Launch Browser" msgstr "Browser starten" #. toggle and popup and fullscreen need d-bus and don't always need gui #. version and help don't need anything and exit without gui #. hidden and visible are only applicable when gui is launched #. profile and no-start don't need anything #: ../sonata/cli.py:32 msgid "%prog [OPTION]... [COMMAND]..." msgstr "%prog [OPTION]... [BEFEHL]..." #: ../sonata/cli.py:33 msgid "Commands:" msgstr "Befehle:" #: ../sonata/cli.py:34 msgid "play song in playlist" msgstr "Titel in der Wiedergabeliste abspielen" #: ../sonata/cli.py:35 msgid "pause currently playing song" msgstr "Aktuellen Titel pausieren" #: ../sonata/cli.py:36 msgid "stop currently playing song" msgstr "Wiedergabe stoppen" #: ../sonata/cli.py:37 msgid "play next song in playlist" msgstr "Nächsten Titel der Wiedergabeliste abspielen" #: ../sonata/cli.py:38 msgid "play previous song in playlist" msgstr "Vorherigen Titel der Wiedergabeliste abspielen" #: ../sonata/cli.py:39 msgid "toggle play/pause; plays if stopped" msgstr "" "Zwischen Wiedergabe und Pause umschalten; startet Wiedergabe falls gestoppt" #: ../sonata/cli.py:40 msgid "toggle repeat mode" msgstr "Wiederholen ein-/ausschalten" #: ../sonata/cli.py:41 msgid "toggle random mode" msgstr "Zufällige Wiedergabe ein-/ausschalten" #: ../sonata/cli.py:42 msgid "display current song info" msgstr "Informationen über aktuellen Titel anzeigen" #: ../sonata/cli.py:43 msgid "display MPD status" msgstr "MPD-Status anzeigen" #: ../sonata/cli.py:50 msgid "popup song notification (requires D-Bus)" msgstr "Benachrichtigung bei Liedwechsel (benötigt D-Bus)" #: ../sonata/cli.py:53 msgid "" "toggles whether the app is minimized to the tray or visible (requires D-Bus)" msgstr "" "Zwischen sichtbarem und versteckten Start der Anwendung umschalten (benötigt " "D-Bus)" #: ../sonata/cli.py:56 msgid "go fullscreen (requires D-Bus)" msgstr "Im Vollbild starten (benötigt D-Bus)" #: ../sonata/cli.py:59 msgid "don't start app if D-Bus commands fail" msgstr "Nicht starten, wenn D-Bus-Befehle fehlschlagen" #: ../sonata/cli.py:62 msgid "start app hidden (requires systray)" msgstr "Anwendung versteckt starten (benötigt Benachrichtigungsfeld)" #: ../sonata/cli.py:65 msgid "start app visible (requires systray)" msgstr "Anwendung sichtbar starten (benötigt Benachrichtigungsfeld)" #: ../sonata/cli.py:67 msgid "start with profile NUM" msgstr "Starte mit Profil NUM" #: ../sonata/cli.py:70 msgid "Increase log verbosity" msgstr "Detailstufe des Logs erhöhen" #: ../sonata/cli.py:73 msgid "Decrease log verbosity" msgstr "Detailstufe des Logs verringern" #: ../sonata/cli.py:92 #, python-format msgid "unknown command %s" msgstr "unbekannter Befehl %s" #: ../sonata/cli.py:98 msgid "toggle and popup options require D-Bus. Aborting." msgstr "Die Optionen toggle und popup benötigen D-Bus. Abbruch." #: ../sonata/cli.py:120 #, python-format msgid "Starting Sonata with profile %s..." msgstr "Starte Sonata mit Profil %s..." #: ../sonata/cli.py:124 #, python-format msgid "%d is not an available profile number." msgstr "%d ist keine verfügbare Profilnummer" #: ../sonata/cli.py:126 #, python-format msgid "Profile numbers must be between 1 and %d." msgstr "Profilnummern müssen zwischen 1 und %d liegen." #: ../sonata/cli.py:143 ../sonata/main.py:198 msgid "Default Profile" msgstr "Standard-Profil" #: ../sonata/cli.py:143 ../sonata/main.py:198 msgid "by" msgstr "von" #: ../sonata/cli.py:144 ../sonata/main.py:199 msgid "from" msgstr "aus" #: ../sonata/cli.py:170 msgid "" "Unable to connect to MPD.\n" "Please check your Sonata preferences or MPD_HOST/MPD_PORT environment " "variables." msgstr "" "Keine Verbindung zu MPD möglich.\n" "Bitte überprüfen Sie ihre Einstellungen oder die MPD_HOST/MPD_PORT " "Umgebungsvariablen." #: ../sonata/cli.py:210 ../sonata/info.py:95 ../sonata/library.py:69 msgid "Title" msgstr "Titel" #: ../sonata/cli.py:211 ../sonata/formatting.py:105 ../sonata/info.py:96 #: ../sonata/library.py:69 msgid "Artist" msgstr "Interpret" #: ../sonata/cli.py:212 ../sonata/formatting.py:106 ../sonata/info.py:98 #: ../sonata/library.py:69 ../sonata/main.py:2615 msgid "Album" msgstr "Album" #: ../sonata/cli.py:213 ../sonata/info.py:100 msgid "Date" msgstr "Jahr" #: ../sonata/cli.py:214 ../sonata/formatting.py:107 ../sonata/info.py:101 msgid "Track" msgstr "Titel" #: ../sonata/cli.py:215 ../sonata/formatting.py:111 ../sonata/info.py:102 #: ../sonata/library.py:69 msgid "Genre" msgstr "Genre" #: ../sonata/cli.py:216 ../sonata/formatting.py:114 ../sonata/info.py:103 msgid "File" msgstr "Datei" #: ../sonata/cli.py:227 ../sonata/cli.py:229 msgid "Time" msgstr "Dauer" #: ../sonata/cli.py:230 ../sonata/info.py:104 msgid "Bitrate" msgstr "Bitrate" #: ../sonata/cli.py:233 msgid "MPD stopped" msgstr "MPD gestoppt" #: ../sonata/cli.py:237 msgid "Playing" msgstr "Wiedergabe" #: ../sonata/cli.py:238 msgid "Paused" msgstr "Pause" #: ../sonata/cli.py:239 ../sonata/main.py:727 ../sonata/main.py:734 #: ../sonata/main.py:1912 ../sonata/main.py:1925 msgid "Stopped" msgstr "Angehalten" #: ../sonata/cli.py:240 msgid "State" msgstr "Status" #: ../sonata/cli.py:243 msgid "Repeat:" msgstr "Wiederholen:" #: ../sonata/cli.py:243 ../sonata/cli.py:245 msgid "On" msgstr "An" #: ../sonata/cli.py:244 ../sonata/cli.py:246 msgid "Off" msgstr "Aus" #: ../sonata/cli.py:245 msgid "Random:" msgstr "Zufällige Wiedergabe:" #: ../sonata/cli.py:247 msgid "Volume" msgstr "Lautstärke" #: ../sonata/cli.py:248 msgid "Crossfade" msgstr "Crossfade" #: ../sonata/cli.py:249 ../sonata/preferences.py:254 msgid "second" msgid_plural "seconds" msgstr[0] "Sekunde" msgstr[1] "Sekunden" #: ../sonata/current.py:78 msgid "Filter:" msgstr "Filter:" #: ../sonata/dbus_plugin.py:107 msgid "" "Sonata failed to connect to the D-BUS session bus: Unable to determine the " "address of the message bus (try 'man dbus-launch' and 'man dbus-daemon' for " "help)\")" msgstr "" "Sonata konnte sich nicht mit D-Bus verbinden: Die Adresse des D-Bus wurde " "nicht gefunden. Hilfe finden Sie in den Handbüchern zu \"dbus-launch\" und " "\"dbus-daemon\"" #: ../sonata/dbus_plugin.py:127 msgid "Failed to execute remote commands." msgstr "Konnte entfernten Befehl nicht ausführen." #: ../sonata/dbus_plugin.py:129 msgid "Starting Sonata instead..." msgstr "Starte Sonata stattdessen..." #. TODO: should we log the exception here? #: ../sonata/dbus_plugin.py:132 msgid "Maybe Sonata is not running?" msgstr "Möglicherweise läuft Sonata nicht?" #: ../sonata/dbus_plugin.py:153 msgid "An instance of Sonata is already running. Showing it..." msgstr "Eine Instanz von Sonata läuft bereits. Zeige sie..." #. TODO: should we log the exception here? #: ../sonata/dbus_plugin.py:161 msgid "Failed to execute remote command." msgstr "Konnte entfernte Befehle nicht ausführen." #: ../sonata/formatting.py:29 msgid "Unknown" msgstr "Unbekannt" #: ../sonata/formatting.py:105 msgid "Artist name" msgstr "Interpret" #: ../sonata/formatting.py:106 msgid "Album name" msgstr "Album" #: ../sonata/formatting.py:107 msgid "Track name" msgstr "Titel" #: ../sonata/formatting.py:108 msgid "Track number" msgstr "Titel-Nr." #: ../sonata/formatting.py:108 ../sonata/formatting.py:109 msgid "#" msgstr "#" #: ../sonata/formatting.py:109 msgid "Disc number" msgstr "CD Nr." #: ../sonata/formatting.py:110 msgid "Year" msgstr "Jahr" #: ../sonata/formatting.py:112 msgid "File path" msgstr "Dateipfad" #: ../sonata/formatting.py:112 ../sonata/library.py:1146 msgid "Path" msgstr "Pfad" #: ../sonata/formatting.py:114 msgid "File name" msgstr "Dateiname" #: ../sonata/formatting.py:116 msgid "Stream name" msgstr "Stream-Name" #: ../sonata/formatting.py:116 msgid "Stream" msgstr "Audio-Streams" #: ../sonata/formatting.py:117 msgid "Song length" msgstr "Dauer" #: ../sonata/formatting.py:117 msgid "Len" msgstr "Länge" #: ../sonata/formatting.py:118 msgid "Elapsed time (title only)" msgstr "Abgelaufene Zeit (nur Fenstertitel)" #: ../sonata/info.py:88 msgid "Song Info" msgstr "Liedinfo" #: ../sonata/info.py:97 msgid "Launch artist in Wikipedia" msgstr "Öffne Interpret in Wikipedia" #: ../sonata/info.py:99 msgid "Launch album in Wikipedia" msgstr "Öffne Album in Wikipedia" #: ../sonata/info.py:131 msgid "Toggle extra tags" msgstr "Zusätzliche Metadaten umschalten" #: ../sonata/info.py:134 msgid "Edit song tags" msgstr "Metadaten bearbeiten" #: ../sonata/info.py:149 msgid "Lyrics" msgstr "Liedtext" #: ../sonata/info.py:166 msgid "Search Lyricwiki.org for lyrics" msgstr "Lyricwiki.org nach Liextexten durchsuchen" #: ../sonata/info.py:168 msgid "Edit lyrics at Lyricwiki.org" msgstr "Liedtexte auf Lyricwiki.org bearbeiten" #: ../sonata/info.py:177 msgid "Album Info" msgstr "Albuminfo" #: ../sonata/info.py:212 msgid "hide" msgstr "verstecken" #: ../sonata/info.py:212 msgid "more" msgstr "mehr" #: ../sonata/info.py:285 msgid "edit tags" msgstr "Metadaten bearbeiten" #: ../sonata/info.py:293 msgid "Album name not set." msgstr "Albumname nicht gesetzt." #: ../sonata/info.py:297 msgid "Album info not found." msgstr "Albumname fehlt." #: ../sonata/info.py:365 msgid "Lyrics not found" msgstr "Liedtext nicht gefunden" #: ../sonata/info.py:401 msgid "Fetching lyrics..." msgstr "Lade Liedtext ..." #: ../sonata/info.py:405 msgid "Lyrics for '" msgstr "Der Liedtext für '" #: ../sonata/info.py:406 msgid "' fetched by " msgstr "' wurde vom Plugin " #: ../sonata/info.py:407 msgid " plugin." msgstr " heruntergeladen." #: ../sonata/info.py:411 msgid "Lyrics not found." msgstr "Liedtext nicht gefunden." #: ../sonata/info.py:413 msgid "No lyrics plug-in enabled." msgstr "Kein Liedtext-Plugin aktiviert." #: ../sonata/info.py:457 msgid "search" msgstr "suchen" #: ../sonata/info.py:459 msgid "edit" msgstr "bearbeiten" #: ../sonata/library.py:67 msgid "Untagged" msgstr "Unmarkiert" #: ../sonata/library.py:68 msgid "Various Artists" msgstr "Verschiedene Interpreten" #: ../sonata/library.py:70 msgid "Filename" msgstr "Dateiname" #: ../sonata/library.py:70 msgid "Everything" msgstr "Alles" #: ../sonata/library.py:103 msgid "Search terms" msgstr "Suchkriterien" #: ../sonata/library.py:110 msgid "End Search" msgstr "Suche beenden" #: ../sonata/library.py:112 msgid "Library browsing view" msgstr "Ansicht der Bibliothek" #. disabled as breadcrumbs replace this: #. self.searchbox.pack_start(self.libraryview, False, False, 1) #. self.searchbox.pack_start(gtk.VSeparator(), False, False, 2) #: ../sonata/library.py:116 msgid "Search:" msgstr "Suchen:" #: ../sonata/library.py:147 msgid "Filesystem" msgstr "Dateisystem" #: ../sonata/library.py:149 msgid "Albums" msgstr "Alben" #: ../sonata/library.py:151 msgid "Artists" msgstr "Interpreten" #: ../sonata/library.py:153 msgid "Genres" msgstr "Genres" #. add the views button first #: ../sonata/library.py:443 msgid " v " msgstr " v " #: ../sonata/library.py:1050 ../sonata/main.py:1812 msgid "minute" msgid_plural "minutes" msgstr[0] "Minute" msgstr[1] "Minuten" #: ../sonata/library.py:1146 msgid "Song" msgstr "Lied" #. Constants #: ../sonata/main.py:117 msgid "Current" msgstr "Aktuell" #: ../sonata/main.py:118 msgid "Library" msgstr "Bibliothek" #: ../sonata/main.py:119 msgid "Playlists" msgstr "Wiedergabelisten" #: ../sonata/main.py:120 msgid "Streams" msgstr "Audio-Streams" #: ../sonata/main.py:121 msgid "Info" msgstr "Info" #: ../sonata/main.py:156 ../sonata/preferences.py:255 #: ../sonata/preferences.py:256 msgid "Entire song" msgstr "Gesamtes Lied" #: ../sonata/main.py:274 msgid "_Sort List" msgstr "_Liste sortieren" #: ../sonata/main.py:275 msgid "Sa_ve Selected to" msgstr "_Markierte Elemente speichern als" #: ../sonata/main.py:276 msgid "_Connection" msgstr "_Verbindung" #: ../sonata/main.py:277 msgid "P_lay after" msgstr "Abspielen _nach" #: ../sonata/main.py:278 msgid "Play _Mode" msgstr "Wiedergabe_modus" #: ../sonata/main.py:279 ../sonata/main.py:2629 msgid "_Update" msgstr "Akt_ualisieren" #: ../sonata/main.py:280 msgid "Use _Remote Image..." msgstr "_Entferntes Cover verwenden..." #: ../sonata/main.py:282 msgid "Use _Local Image..." msgstr "_Lokales Cover verwenden..." #: ../sonata/main.py:285 msgid "_Fullscreen Mode" msgstr "_Vollbild-Modus" #: ../sonata/main.py:286 msgid "Reset Image" msgstr "Bild zurücksetzen" #: ../sonata/main.py:288 msgid "_Play" msgstr "_Wiedergabe" #: ../sonata/main.py:290 msgid "Pa_use" msgstr "Pa_use" #: ../sonata/main.py:292 msgid "_Stop" msgstr "_Stopp" #: ../sonata/main.py:294 msgid "Pre_vious" msgstr "_Vorheriges" #: ../sonata/main.py:296 msgid "_Next" msgstr "_Nächster" #: ../sonata/main.py:298 msgid "_Quit" msgstr "_Beenden" #: ../sonata/main.py:300 msgid "_Remove" msgstr "Ent_fernen" #: ../sonata/main.py:302 msgid "_Clear" msgstr "_Alle entfernen" #: ../sonata/main.py:304 msgid "_Entire Library" msgstr "_Gesamte Bibliothek" #: ../sonata/main.py:306 msgid "_Selected Items" msgstr "_Markierte Elemente" #: ../sonata/main.py:308 msgid "_Preferences..." msgstr "_Einstellungen..." #: ../sonata/main.py:310 msgid "_About..." msgstr "_Über..." #: ../sonata/main.py:311 msgid "_Edit Tags..." msgstr "_Metadaten bearbeiten..." #: ../sonata/main.py:313 msgid "_Add" msgstr "_Hinzufügen" #: ../sonata/main.py:315 msgid "_Replace" msgstr "Er_setzen" #: ../sonata/main.py:317 msgid "Add" msgstr "_Hinzufügen" #: ../sonata/main.py:319 msgid "Replace" msgstr "Ersetzen" #: ../sonata/main.py:321 msgid "_Delete..." msgstr "Ent_fernen..." #: ../sonata/main.py:322 msgid "Shuffle" msgstr "Zufällig" #: ../sonata/main.py:362 msgid "S_how Sonata" msgstr "Sonata _anzeigen" #: ../sonata/main.py:364 msgid "_Repeat" msgstr "_Wiederholen" #: ../sonata/main.py:366 msgid "Rando_m" msgstr "_Zufällige Wiedergabe" #: ../sonata/main.py:368 msgid "Consume" msgstr "Nach Wiedergabe entfernen" #: ../sonata/main.py:512 msgid "By Artist" msgstr "Nach Interpret" #: ../sonata/main.py:514 msgid "By Album" msgstr "Nach Album" #: ../sonata/main.py:516 msgid "By Song Title" msgstr "Nach Titel" #: ../sonata/main.py:518 msgid "By File Name" msgstr "Nach Dateiname" #: ../sonata/main.py:520 msgid "By Dir & File Name" msgstr "Nach Ordner- & Dateiname" #: ../sonata/main.py:522 msgid "Reverse List" msgstr "Invers" #: ../sonata/main.py:564 msgid "_New..." msgstr "_Neu..." #: ../sonata/main.py:566 msgid "_Edit..." msgstr "Be_arbeiten..." #: ../sonata/main.py:587 msgid "_New Playlist..." msgstr "_Neue Wiedergabeliste..." #: ../sonata/main.py:589 msgid "_Rename..." msgstr "_Umbenennen..." # Neues Plugin %s wird aktiviert... #: ../sonata/main.py:633 #, python-format msgid "Enabling new plug-in %s..." msgstr "Neues Plugin %s wurde gefunden..." #: ../sonata/main.py:636 #, python-format msgid "Found new plug-in %s." msgstr "Neues Plugin %s wurde gefunden." #: ../sonata/main.py:695 ../sonata/main.py:776 ../sonata/main.py:777 msgid "Playlist" msgstr "Wiedergabeliste" #: ../sonata/main.py:743 ../sonata/main.py:1787 ../sonata/main.py:1921 msgid "Not Connected" msgstr "Nicht verbunden" #: ../sonata/main.py:745 ../sonata/main.py:1785 ../sonata/main.py:1923 msgid "No Read Permission" msgstr "Keine Lese-Berechtigung" #: ../sonata/main.py:800 msgid "Cover Art" msgstr "Album-Cover" #: ../sonata/main.py:1052 msgid "MPD_HOST/PORT" msgstr "MPD_HOST/PORT" #: ../sonata/main.py:1058 msgid "Disconnect" msgstr "Verbindung trennen" #: ../sonata/main.py:1808 msgid "day" msgid_plural "days" msgstr[0] "Tag" msgstr[1] "Tage" #: ../sonata/main.py:1817 msgid "hour" msgid_plural "hours" msgstr[0] "Stunde" msgstr[1] "Stunden" #: ../sonata/main.py:1827 ../sonata/main.py:1831 msgid "and" msgstr "und" #: ../sonata/main.py:1915 ../sonata/main.py:2129 msgid "Click to collapse" msgstr "Mausklick für reduzierte Ansicht" #: ../sonata/main.py:1918 ../sonata/main.py:2132 msgid "Click to expand" msgstr "Mausklick für erweiterte Ansicht" #: ../sonata/main.py:2201 msgid "Lyrics Search" msgstr "Nach Liedtext suchen" #: ../sonata/main.py:2206 msgid "_Search" msgstr "_Suchen" #: ../sonata/main.py:2210 msgid "Artist Name:" msgstr "Interpret:" #: ../sonata/main.py:2215 msgid "Song Title:" msgstr "Titel:" #: ../sonata/main.py:2534 msgid "Open Image" msgstr "Bild öffnen" #: ../sonata/main.py:2539 msgid "Images" msgstr "Bilder" #: ../sonata/main.py:2543 msgid "All files" msgstr "Alle Dateien" #: ../sonata/main.py:2589 msgid "Choose Cover Art" msgstr "Cover auswählen" #: ../sonata/main.py:2597 msgid "C_hoose" msgstr "Aus_wählen" #: ../sonata/main.py:2636 msgid "Edit search terms" msgstr "Suchkriterien ändern" #: ../sonata/main.py:2702 msgid "No artist or album name found." msgstr "Kein Interpreten- oder Albumname gefunden." #: ../sonata/main.py:2705 msgid "No cover art found." msgstr "Kein Cover gefunden." #: ../sonata/main.py:2971 msgid "Delete the selected playlist?" msgid_plural "Delete the selected playlists?" msgstr[0] "Markierte Wiedergabeliste entfernen?" msgstr[1] "Markierte Wiedergabelisten entfernen?" #: ../sonata/main.py:2974 msgid "Delete Playlist" msgid_plural "Delete Playlists" msgstr[0] "Wiedergabeliste entfernen" msgstr[1] "Wiedergabelisten entfernen" #: ../sonata/main.py:2988 msgid "Delete the selected stream?" msgid_plural "Delete the selected streams?" msgstr[0] "Markierter Audio-Stream entfernen?" msgstr[1] "Markierte Audio-Streams entfernen?" #: ../sonata/main.py:2991 msgid "Delete Stream" msgid_plural "Delete Streams" msgstr[0] "Audio-Stream entfernen" msgstr[1] "Audio-Streams entfernen" #: ../sonata/main.py:3264 ../sonata/preferences.py:830 msgid "Unable to launch a suitable browser." msgstr "Es konnte keinen passender Browser gestartet werden." #: ../sonata/playlists.py:115 ../sonata/playlists.py:118 msgid "Save Playlist" msgstr "Wiedergabeliste speichern" #: ../sonata/playlists.py:140 msgid "Existing Playlist" msgstr "Existierende Wiedergabeliste" #: ../sonata/playlists.py:141 msgid "Replace playlist" msgstr "Wiedergabeliste ersetzen" #: ../sonata/playlists.py:142 msgid "Append songs" msgstr "Lieder hinzufügen" #: ../sonata/playlists.py:185 msgid "Playlist name:" msgstr "Name der Wiedergabeliste:" #: ../sonata/playlists.py:218 ../sonata/playlists.py:224 msgid "Rename Playlist" msgstr "Wiedergabeliste umbenennen" #: ../sonata/preferences.py:27 msgid "System tray" msgstr "Benachrichtigungsfeld" #: ../sonata/preferences.py:27 msgid "Top Left" msgstr "Oben links" #: ../sonata/preferences.py:27 msgid "Top Right" msgstr "Oben rechts" #: ../sonata/preferences.py:28 msgid "Bottom Left" msgstr "Unten links" #: ../sonata/preferences.py:28 msgid "Bottom Right" msgstr "Unten rechts" #: ../sonata/preferences.py:29 msgid "Screen Center" msgstr "Bildschirmmitte" #: ../sonata/preferences.py:99 msgid "MPD" msgstr "MPD" #: ../sonata/preferences.py:100 ../sonata/preferences.py:312 msgid "Display" msgstr "Anzeige" #: ../sonata/preferences.py:101 msgid "Behavior" msgstr "Verhalten" #: ../sonata/preferences.py:102 msgid "Format" msgstr "Format" #: ../sonata/preferences.py:103 ../sonata/preferences.py:244 msgid "Extras" msgstr "Extras" #: ../sonata/preferences.py:104 msgid "Plugins" msgstr "Plugins" #: ../sonata/preferences.py:129 msgid "MPD Connection" msgstr "MPD-Verbindung" #: ../sonata/preferences.py:142 msgid "_Name:" msgstr "_Name:" #: ../sonata/preferences.py:145 msgid "_Host:" msgstr "_Host:" #: ../sonata/preferences.py:148 msgid "_Port:" msgstr "_Port:" #: ../sonata/preferences.py:152 msgid "_Music dir:" msgstr "_Musikverzeichnis:" #: ../sonata/preferences.py:153 msgid "Select a Music Directory" msgstr "Musikverzeichnis auswählen" #: ../sonata/preferences.py:159 msgid "Pa_ssword:" msgstr "Pa_sswort:" #: ../sonata/preferences.py:162 msgid "Leave blank if no password is required." msgstr "Nur ausfüllen, falls ein Kennwort benötigt wird." #: ../sonata/preferences.py:163 msgid "_Autoconnect on start" msgstr "_Automatisch beim Start verbinden" #: ../sonata/preferences.py:183 msgid "Using MPD_HOST/PORT" msgstr "MPD_HOST/PORT verwenden" #: ../sonata/preferences.py:250 msgid "Popup notification on song changes" msgstr "_Benachrichtigung bei Liedwechsel:" #: ../sonata/preferences.py:276 msgid "_Fade length:" msgstr "Übergangs_dauer:" #: ../sonata/preferences.py:278 msgid "sec" msgstr "s" #: ../sonata/preferences.py:283 msgid "C_rossfade" msgstr "C_rossfade" #: ../sonata/preferences.py:317 msgid "_Album art" msgstr "_Album-Cover" #: ../sonata/preferences.py:319 msgid "Standard" msgstr "Standard" #: ../sonata/preferences.py:320 msgid "Stylized" msgstr "Dekoriert" #: ../sonata/preferences.py:325 msgid "Artwork style:" msgstr "Cover-Stil:" #: ../sonata/preferences.py:327 msgid "Local only" msgstr "Nur lokal" #: ../sonata/preferences.py:328 msgid "Local and remote" msgstr "Lokal und entfernt" #: ../sonata/preferences.py:331 msgid "Search locations:" msgstr "Suchorte:" #: ../sonata/preferences.py:338 ../sonata/preferences.py:366 #: ../sonata/preferences.py:370 msgid "SONG_DIR" msgstr "LIED_VERZ" #: ../sonata/preferences.py:340 ../sonata/preferences.py:752 msgid "custom" msgstr "benutzerdefiniert" #: ../sonata/preferences.py:347 msgid "Save art to:" msgstr "Cover speichern in:" #: ../sonata/preferences.py:352 msgid "_Playback/volume buttons" msgstr "_Wiedergabe-/Lautstärkeknöpfe" #: ../sonata/preferences.py:355 msgid "Pr_ogressbar" msgstr "F_ortschrittsbalken" #: ../sonata/preferences.py:358 msgid "_Statusbar" msgstr "_Statusleiste" #: ../sonata/preferences.py:361 msgid "Song Ly_rics" msgstr "_Liedtexte" #: ../sonata/preferences.py:363 msgid "Save lyrics to:" msgstr "Liedtexte speichern in:" #: ../sonata/preferences.py:365 ../sonata/preferences.py:367 #: ../sonata/preferences.py:369 ../sonata/preferences.py:371 msgid "title" msgstr "titel" #: ../sonata/preferences.py:380 msgid "System _tray icon" msgstr "_Benachrichtigungsfeld-Symbol" #: ../sonata/preferences.py:404 msgid "Window Behavior" msgstr "Fensterverhalten" #: ../sonata/preferences.py:408 msgid "_Show window on all workspaces" msgstr "Fenster auf a_llen Arbeitsflächen anzeigen" #: ../sonata/preferences.py:411 msgid "_Keep window above other windows" msgstr "Fenster immer im _Vordergrund behalten" #: ../sonata/preferences.py:414 msgid "_Hide window titlebar" msgstr "Fenstertitel ve_rstecken" #: ../sonata/preferences.py:417 msgid "_Minimize to system tray on close/escape" msgstr "Bei Schließen/Escape ins Benachrichtigungsfeld _minimieren" #: ../sonata/preferences.py:419 msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, so " "only check this if you have one." msgstr "" "Falls aktiviert, wird Sonata beim Schließen des Fensters ins " "Benachrichtigungsfeld minimiert. Leider hat Sonata derzeit keine " "Möglichkeit, um herauszufinden, ob ein Benachrichtigungsfeld existiert. " "Aktivieren Sie diese Einstellung deshalb nur dann, wenn Ihre Arbeitsfläche " "ein solches besitzt." #: ../sonata/preferences.py:435 msgid "Miscellaneous" msgstr "Verschiedenes" #: ../sonata/preferences.py:439 msgid "_Update MPD library on start" msgstr "_Bibliothek beim Start aktualisieren" #: ../sonata/preferences.py:441 msgid "" "If enabled, Sonata will automatically update your MPD library when it starts " "up." msgstr "" "Falls aktiviert, wird Sonata die Bibliothek automatisch nach jedem Start " "aktualisieren" #: ../sonata/preferences.py:444 msgid "S_top playback on exit" msgstr "Wiedergabe beim Beenden s_toppen" #: ../sonata/preferences.py:446 msgid "" "MPD allows playback even when the client is not open. If enabled, Sonata " "will behave like a more conventional music player and, instead, stop " "playback upon exit." msgstr "" "MPD erlaubt die Wiedergabe auch dann, wenn kein Client verbunden ist. Falls " "Sie diese Option aktivieren, verhält sich Sonata wie eine normale Audio-" "Anwendung, d.h. die Wiedergabe wird zeitgleich mit Sonata beendet." #: ../sonata/preferences.py:449 msgid "_Write status file:" msgstr "Status_datei schreiben:" #: ../sonata/preferences.py:451 ../sonata/preferences.py:453 msgid "" "If enabled, Sonata will create a xmms-infopipe like file containing " "information about the current song. Many applications support the xmms-info " "file (Instant Messengers, IRC Clients...)" msgstr "" "Falls aktiviert, wird Sonata eine XMMS-Infopipe-ähnliche Datei erstellen, " "welche Informationen über den aktuellen Titel beinhaltet. Viele Anwendungen " "unterstützen dieses Format (Instant Messenger, IRC-Clients, ...)" #: ../sonata/preferences.py:487 msgid "Song Formatting" msgstr "Formatierung der Titel" #: ../sonata/preferences.py:492 msgid "C_urrent playlist:" msgstr "A_ktuelle Wiedergabeliste:" #: ../sonata/preferences.py:493 msgid "_Library:" msgstr "_Bibliothek:" #: ../sonata/preferences.py:494 msgid "_Window title:" msgstr "_Fenstertitel:" #: ../sonata/preferences.py:495 msgid "Current _song line 1:" msgstr "Aktueller _Titel Zeile 1:" #: ../sonata/preferences.py:497 msgid "Current s_ong line 2:" msgstr "Aktueller T_itel Zeile 2:" #: ../sonata/preferences.py:522 msgid "Available options" msgstr "Verfügbare Platzhalter" #: ../sonata/preferences.py:536 msgid "Info displayed only if all enclosed tags are defined" msgstr "Nur anzeigen, wenn alle eingeschlossenen Daten vorhanden" #: ../sonata/preferences.py:536 msgid "Creates columns in the current playlist" msgstr "Erzeugt Spalten in der Wiedergabeliste" #: ../sonata/preferences.py:562 msgid "_About" msgstr "_Über..." #: ../sonata/preferences.py:565 msgid "_Configure..." msgstr "_Konfigurieren..." #: ../sonata/preferences.py:605 msgid "Enabled" msgstr "Aktiviert" #: ../sonata/preferences.py:617 msgid "Description" msgstr "Beschreibung" #: ../sonata/preferences.py:634 msgid "" "To save lyrics to the music file's directory, you must specify a valid music " "directory." msgstr "" "Um die Liedtexte im Musikordner zu speichern, müssen Sie einen gültigen " "Musikordner angeben." #: ../sonata/preferences.py:634 ../sonata/preferences.py:641 msgid "Music Dir Verification" msgstr "Musikordner-Überprüfung" #: ../sonata/preferences.py:641 msgid "" "To save artwork to the music file's directory, you must specify a valid " "music directory." msgstr "" "Um die Cover im Musikordner zu speichern, müssen Sie einen gültigen " "Musikordner angeben." #: ../sonata/preferences.py:685 msgid "New Profile" msgstr "Neues Profil" #. Prompt user for playlist name: #: ../sonata/preferences.py:739 msgid "Custom Artwork" msgstr "Eigenes Cover" #: ../sonata/preferences.py:741 msgid "Artwork filename:" msgstr "Cover-Dateiname:" #: ../sonata/preferences.py:838 msgid "Nothing yet implemented." msgstr "Noch nicht implementiert." #: ../sonata/preferences.py:838 msgid "Configure" msgstr "Konfigurieren" #: ../sonata/streams.py:103 msgid "Edit Stream" msgstr "Stream bearbeiten" #: ../sonata/streams.py:105 ../sonata/streams.py:136 msgid "New Stream" msgstr "Neuer Stream" #: ../sonata/streams.py:107 msgid "Stream name:" msgstr "Stream-Name:" #: ../sonata/streams.py:114 msgid "Stream URL:" msgstr "Stream-URL:" #: ../sonata/streams.py:136 msgid "A stream with this name already exists. Would you like to replace it?" msgstr "" "Ein Stream mit diesem Namen existiert bereits. Möchten Sie ihn ersetzen?" #: ../sonata/tagedit.py:62 msgid "Taglib and/or tagpy not found, tag editing support disabled." msgstr "" "Taglib und/oder tagpy nicht gefunden. Bearbeiten der Metadaten deaktiviert." #: ../sonata/tagedit.py:62 ../sonata/tagedit.py:71 ../sonata/tagedit.py:76 #: ../sonata/tagedit.py:100 ../sonata/tagedit.py:104 ../sonata/tagedit.py:301 msgid "Edit Tags" msgstr "Metadaten bearbeiten" #: ../sonata/tagedit.py:71 msgid "" "Tagpy version < 0.91. Please upgrade to a newer version, tag editing support " "disabled." msgstr "" "Taglib Version < 0.91. Bitte auf neuere Version aktualisieren, Metadaten-" "Bearbeitung deaktiviert." #: ../sonata/tagedit.py:76 #, python-format msgid "" "The path %s does not exist. Please specify a valid music directory in " "preferences." msgstr "" "Der Pfad %s existiert nicht. Bitte in den Einstellungen einen gültigen " "Musikordner eintragen." #: ../sonata/tagedit.py:100 #, python-format msgid "" "File '%s' not found. Please specify a valid music directory in preferences." msgstr "" "Die Datei '%s' existiert nicht. Bitte in den Einstellungen einen gültigen " "Musikordner eintragen." #: ../sonata/tagedit.py:104 msgid "No music files with editable tags found." msgstr "Keine Musikdateien mit editierbaren Metadaten gefunden." #: ../sonata/tagedit.py:126 msgid "Title:" msgstr "Titel:" #: ../sonata/tagedit.py:127 msgid "Artist:" msgstr "Interpret:" #: ../sonata/tagedit.py:128 msgid "Album:" msgstr "Album:" #: ../sonata/tagedit.py:129 msgid "Year:" msgstr "Jahr:" #: ../sonata/tagedit.py:131 msgid "Track:" msgstr "Titel-Nr.:" #: ../sonata/tagedit.py:140 msgid "Genre:" msgstr "Genre:" #: ../sonata/tagedit.py:151 msgid "Comment:" msgstr "Kommentar:" #. Only show save all button if more than one song being edited. #: ../sonata/tagedit.py:162 msgid "Save _All" msgstr "_Alle speichern" #: ../sonata/tagedit.py:208 msgid "Increment each selected music file, starting at track 1 for this file." msgstr "" "Alle ausgewählten Dateien, beginnend mit dieser Datei, inkrementell " "nummerieren." #: ../sonata/tagedit.py:210 msgid "Apply to all selected music files." msgstr "Auf alle ausgewählten Dateien anwenden." #: ../sonata/tagedit.py:261 #, python-format msgid "Edit Tags - %s of %s" msgstr "Metadaten bearbeiten - %s von %s" #. FIXME: was (save_success and self.conn and self.status): #: ../sonata/tagedit.py:301 msgid "Unable to save tag to music file." msgstr "Konnte Metadaten nicht speichern." #: ../sonata/tagedit.py:368 msgid "Hide file path" msgstr "Dateipfad verstecken" #: ../sonata/tagedit.py:371 msgid "Show file path" msgstr "Dateipfad anzeigen" #~ msgid "Replace with selected playlist(s) and play" #~ msgstr "Mit markierten Wiedergabeliste(n) ersetzen und abspielen" #~ msgid "Replace with selected stream(s) and play" #~ msgstr "Mit markierten Audio-Stream(s) ersetzen und abspielen" #~ msgid "Version" #~ msgstr "Version" #~ msgid "Website" #~ msgstr "Webseite" #~ msgid "Options" #~ msgstr "Optionen" #~ msgid "Show this help and exit" #~ msgstr "Diese Meldung anzeigen und beenden" #~ msgid "Toggles whether the app is minimized" #~ msgstr "Wechselt zwischen Minimierung ins Benachrichtigungsfeld" #~ msgid "Show version information and exit" #~ msgstr "Versionsnummer anzeigen und beenden" #~ msgid "Python is unable to interpret %s as a number." #~ msgstr "Python ist nicht in der Lage %s als Nummer zu interpretieren." #~ msgid "ZSI not found, fetching lyrics support disabled." #~ msgstr "ZSI nicht gefunden, das Laden der Liedtexte ist deaktiviert." #~ msgid "Artist or song title not set." #~ msgstr "Künstler- oder Titelname fehlt." #~ msgid "Couldn't connect to LyricWiki" #~ msgstr "Keine Verbindung zu LyricWiki" #~ msgid "Fetching lyrics failed" #~ msgstr "Laden des Liedtextes fehlgeschlagen" #~ msgid "Sa_ve List to" #~ msgstr "Wiedergabeliste _speichern" #~ msgid "Profile" #~ msgstr "Profil" #~ msgid "(updating mpd)" #~ msgstr "(aktualisiere Datenbank)" #~ msgid "" #~ "Would you like to replace the existing playlist or append these songs?" #~ msgstr "" #~ "Möchten Sie die bestehende Wiedergabeliste ersetzen oder diese Lieder " #~ "hinzufügen?" #~ msgid "" #~ "A playlist with this name already exists. Would you like to replace it?" #~ msgstr "" #~ "Eine Wiedergabeliste mit diesem Namen existiert bereits. Möchten Sie " #~ "diese ersetzen?" #~ msgid "_Audioscrobbling (Last.fm)" #~ msgstr "_Audioscrobbling (Last.fm)" #~ msgid "_Username:" #~ msgstr "Ben_utzername:" #~ msgid "_Password:" #~ msgstr "_Passwort:" #~ msgid "Fade length" #~ msgstr "Übergangsdauer" #~ msgid "Loaded" #~ msgstr "Geladen" #~ msgid "The path" #~ msgstr "Der Pfad" #~ msgid "File " #~ msgstr "Datei " #~ msgid "of" #~ msgstr "von" �������������������������������������������������������sonata-1.7.0/po/el_GR.po����������������������������������������������������������������������������0000664�0000000�0000000�00000136300�13771420143�0014757�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Greek translation of sonata music client for musicpd. # Copyright (C) 2008 Lazaros Koromilas. # This file is distributed under the same license as the sonata package. # Lazaros Koromilas <koromilaz@gmail.com>, 2008. # msgid "" msgstr "" "Project-Id-Version: sonata-1.6\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-04-06 17:42+0300\n" "PO-Revision-Date: 2009-04-06 17:35+0200\n" "Last-Translator: Lazaros Koromilas <koromilaz@gmail.com>\n" "Language-Team: noteam\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Poedit-Language: Greek\n" "X-Poedit-Country: Greece\n" #. define the shortcuts and their descriptions #. these are all gettextable #: .././sonata/about.py:54 msgid "About Sonata" msgstr "Σχετικά με το Sonata" #: .././sonata/about.py:55 .././sonata/preferences.py:96 msgid "Preferences" msgstr "Προτιμίσεις" #: .././sonata/about.py:56 msgid "Fullscreen Artwork Mode" msgstr "Λειτουργία Πλήρους Οθόνης Εξωφύλλου" #: .././sonata/about.py:57 msgid "Switch to [1st-5th] tab" msgstr "Αλλαγή στην [1η-5η] καρτέλα" #: .././sonata/about.py:58 msgid "Connect to MPD" msgstr "Σύνδεση με το MPD" #: .././sonata/about.py:59 msgid "Disconnect from MPD" msgstr "Αποσύνδεση από το MPD" #: .././sonata/about.py:60 msgid "Randomize current playlist" msgstr "Ανακάτεμα τρέχουσας λίστας κομματιών" #: .././sonata/about.py:61 msgid "Expand player" msgstr "Επέκταση προγράμματος αναπαραγωγής" #: .././sonata/about.py:62 msgid "Switch to previous tab" msgstr "Εναλλαγή στην προηγούμενη καρτέλα" #: .././sonata/about.py:63 msgid "Switch to next tab" msgstr "Εναλλαγή στην επόμενη καρτέλα" #: .././sonata/about.py:64 msgid "Collapse player" msgstr "Αναδίπλωση προγράμματος αναπαραγωγής" #: .././sonata/about.py:65 .././sonata/library.py:79 msgid "Search library" msgstr "Αναζήτηση στη βιβλιοθήκη" #: .././sonata/about.py:66 msgid "Quit" msgstr "Κλείσιμο" #: .././sonata/about.py:67 msgid "Update entire library" msgstr "Ανανέωση ολόκληρης της βιβλιοθήκης" #: .././sonata/about.py:68 msgid "Display popup menu" msgstr "Εμφάνιση αναδυώμενων μενού" #: .././sonata/about.py:69 msgid "Minimize to system tray (if enabled)" msgstr "Ελαχιστοποίηση στην μπάρα εργασιών (εάν είναι ενεργοποιημένη)" #: .././sonata/about.py:71 msgid "Previous track" msgstr "Προηγούμενο κομμάτι" #: .././sonata/about.py:72 msgid "Next track" msgstr "Επόμενο κομμάτι" #: .././sonata/about.py:73 msgid "Play/Pause" msgstr "Αναπαραγωγή/Παύση" #: .././sonata/about.py:74 msgid "Stop" msgstr "Διακοπή" #: .././sonata/about.py:75 msgid "Lower the volume" msgstr "Μείωση της έντασης" #: .././sonata/about.py:76 msgid "Raise the volume" msgstr "Αύξηση της έντασης" #: .././sonata/about.py:78 msgid "Play selected song" msgstr "Αναπαραγωγή επιλεγμένου τραγουδιού" # translating to plural only because conditional singular is optically ugly: # `Αφαίρεση επιλεγμέν-ου/-ων κοματι-ού/-ών' #: .././sonata/about.py:79 msgid "Remove selected song(s)" msgstr "Αφαίρεση επιλεγμένων κοματιών" #: .././sonata/about.py:80 msgid "Center currently playing song" msgstr "Τοποθέτηση τρέχοντος τραγουδιού στο κέντρο" #: .././sonata/about.py:81 .././sonata/about.py:90 msgid "Edit selected song's tags" msgstr "Επεξεργασία ετικετών των επιλεγμένων κομματιών" #: .././sonata/about.py:82 msgid "Save to new playlist" msgstr "Αποθήκευση σε νέα λίστα κομματιών" #: .././sonata/about.py:83 msgid "Clear list" msgstr "Καθαρισμός λίστας" #: .././sonata/about.py:84 msgid "Randomize list" msgstr "Ανακάτεμα λίστας" #: .././sonata/about.py:86 msgid "Add selected song(s) or enter directory" msgstr "Προσθήκη επιλεγμένων τραγουδιών ή είσοδος στον κοτάλογο" # free interpretation, translated as `up one dir' #: .././sonata/about.py:87 msgid "Go to parent directory" msgstr "Επάνω κατα έναν κατάλογο" #: .././sonata/about.py:88 msgid "Add selected item(s)" msgstr "Προσθήκη επιλεγμένων αντικειμένων" #: .././sonata/about.py:89 msgid "Replace with selected item(s)" msgstr "Αντικατάσταση με τα επιλεγμένα αντικείμενα" #: .././sonata/about.py:91 msgid "Add selected item(s) and play" msgstr "Προσθήκη επιλεγμένων αντικειμένων και αναπαραγωγή" #: .././sonata/about.py:92 msgid "Replace with selected item(s) and play" msgstr "Αντικατάσταση με τα επιλεγμένα αντικείμενα και αναπαραγωγή" #: .././sonata/about.py:93 msgid "Update selected item(s)/path(s)" msgstr "Ανανέωση επιλεγμένων αντικειμένων/μονοπατιών" #: .././sonata/about.py:95 .././sonata/about.py:97 msgid "Add selected playlist(s)" msgstr "Προσθήκη επιλεγμένων λιστών κομματιών" #: .././sonata/about.py:96 msgid "Remove selected playlist(s)" msgstr "Αφαίρεση επιλεγμένων λιστών κομματιών" #: .././sonata/about.py:98 msgid "Replace with selected playlist(s)" msgstr "Αντικατάσταση με τις επιλεγμένες λίστες κομματιών«" #: .././sonata/about.py:99 msgid "Add selected playlist(s) and play" msgstr "Προσθήκη επιλεγμένων λιστών κομματιών και αναπαραγωγή" #: .././sonata/about.py:100 msgid "Replace with selected playlist(s) and play" msgstr "Αντικατάσταση με τις επιλεγμένες λίστες κομματιών και αναπαραγωγή" #: .././sonata/about.py:102 .././sonata/about.py:104 msgid "Add selected stream(s)" msgstr "Προσθήκη επιλεγμένων μεταδόσεων" #: .././sonata/about.py:103 msgid "Remove selected stream(s)" msgstr "Αφαίρεση επιλεγμένων μεταδόσεων" #: .././sonata/about.py:105 msgid "Replace with selected stream(s)" msgstr "Αντικατάσταση με τις επιλεγμένες μεταδόσεις" #: .././sonata/about.py:106 msgid "Add selected stream(s) and play" msgstr "Προσθήκη επιλεγμένων μεταδόσεων και αναπαραγωγή" #: .././sonata/about.py:107 msgid "Replace with selected stream(s) and play" msgstr "Αντικατάσταση με τις επιλεγμένες μεταδόσεις και αναπαραγωγή" #: .././sonata/about.py:109 msgid "Edit playing song's tags" msgstr "Επεξεργασία ετικετών αναπαραγώμενων τραγουδιών" #. define the main array- this adds headings to each section of #. shortcuts that will be displayed #: .././sonata/about.py:112 msgid "Main Shortcuts" msgstr "Κύριες Συντομεύσεις" #: .././sonata/about.py:113 msgid "Playback Shortcuts" msgstr "Συντομεύσεις Αναπαραγωγής" #: .././sonata/about.py:114 msgid "Current Shortcuts" msgstr "Συντομεύσεις Τρέχουσας Λίστας" #: .././sonata/about.py:115 msgid "Library Shortcuts" msgstr "Συντομεύσεις Βιβλιοθήκης" #: .././sonata/about.py:116 msgid "Playlist Shortcuts" msgstr "Συντομεύσεις Λιστών Κομματιών" #: .././sonata/about.py:117 msgid "Stream Shortcuts" msgstr "Συντομεύσεις Μεταδόσεων" #: .././sonata/about.py:118 msgid "Info Shortcuts" msgstr "Συντομεύσεις Πληροφοριών" #: .././sonata/about.py:119 msgid "Shortcuts" msgstr "Συντομεύσεις" #. XXX translate expressions, not words #. Show text: #: .././sonata/about.py:147 .././sonata/library.py:859 #: .././sonata/main.py:1744 msgid "song" msgid_plural "songs" msgstr[0] "τραγούδι" msgstr[1] "τραγούδια" # decided to use the foreign word, so no plural in greek #: .././sonata/about.py:148 msgid "album" msgid_plural "albums" msgstr[0] "άλμπουμ" msgstr[1] "άλμπουμ" #: .././sonata/about.py:149 msgid "artist" msgid_plural "artists" msgstr[0] "καλλιτέχνης" msgstr[1] "καλλιτέχνες" #: .././sonata/about.py:156 msgid "day of bliss" msgid_plural "days of bliss" msgstr[0] "μέρα ευτυχίας" msgstr[1] "μέρες ευτυχίας" #: .././sonata/about.py:158 msgid "hour of bliss" msgid_plural "hours of bliss" msgstr[0] "ώρα ευτυχίας" msgstr[1] "ώρες ευτυχίας" #: .././sonata/about.py:172 msgid "An elegant music client for MPD." msgstr "Ένα κομψό πρόγραμμα/πελάτης μουσικής για το MPD." #. Add button to show keybindings: #: .././sonata/about.py:185 msgid "_Shortcuts" msgstr "_Συντομεύσεις" #: .././sonata/about.py:196 .././sonata/main.py:3091 #: .././sonata/preferences.py:871 msgid "Unable to launch a suitable browser." msgstr "Δεν ήταν δυνατή η εκκίνηση ενός κατάλληλου περιηγητή." #: .././sonata/about.py:196 .././sonata/main.py:3091 #: .././sonata/preferences.py:871 msgid "Launch Browser" msgstr "Εκκίνηση Περιηγητή" #: .././sonata/cli.py:81 msgid "The toggle and popup arguments require D-Bus. Aborting." msgstr "" "Οι παράμετροι εναλλαγής και ανάδυσης προϋποθέτουν την ύπαρξη του D-Bus. " "Αποτυχία." #: .././sonata/cli.py:97 msgid "Version" msgstr "Έκδοση" #: .././sonata/cli.py:98 msgid "Website" msgstr "Ιστοσελίδα" #: .././sonata/cli.py:103 msgid "Usage: sonata [OPTION]... [COMMAND]..." msgstr "Χρήση: sonata [ΕΠΙΛΟΓΗ]... [ΕΝΤΟΛΗ]..." #: .././sonata/cli.py:105 msgid "Options" msgstr "Επιλογές" #: .././sonata/cli.py:106 msgid "Show this help and exit" msgstr "Εμφάνιση της βοήθειας και έξοδος" #: .././sonata/cli.py:107 msgid "Popup song notification (requires D-Bus)" msgstr "Ανάδυση ειδοποίησης τραγουδιού (προϋποθέτει το D-Bus)" #: .././sonata/cli.py:108 msgid "Toggles whether the app is minimized" msgstr "Εναλλαγή της εφαρμογής σε ελαχιστοποιημένη" #: .././sonata/cli.py:109 msgid "to tray or visible (requires D-Bus)" msgstr "στην μπάρα εργασών ή ορατή (προϋποθέτει το DBus)" #: .././sonata/cli.py:110 msgid "Don't start app if D-Bus commands fail" msgstr "Μη εκκίνηση της εφαρμογής αν οι D-Bus εντολές αποτυγχάνουν" #: .././sonata/cli.py:111 msgid "Show version information and exit" msgstr "Εμφάνιση πληροφοριών έκδοσης και έξοδος" #: .././sonata/cli.py:112 msgid "Start app hidden (requires systray)" msgstr "Εκκίνηση σε απόκρυψη (προϋποθέτει μπάρα εργασιών)" #: .././sonata/cli.py:113 msgid "Start app visible (requires systray)" msgstr "Εκκίνηση ορατό (προϋποθέτει μπάρα εργασιών)" #: .././sonata/cli.py:114 msgid "Start with profile [NUM]" msgstr "Εκκίνηση με προφίλ [ΑΡΙΘΜΟΣ]" #: .././sonata/cli.py:116 msgid "Commands" msgstr "Εντολές" #: .././sonata/cli.py:117 msgid "Play song in playlist" msgstr "Αναπαραγωγή τραγουδιού στην λίστα κομματιών" #: .././sonata/cli.py:118 msgid "Pause currently playing song" msgstr "Παύση τρέχοντος αναπαραγώμενου τραγουδιού" #: .././sonata/cli.py:119 msgid "Stop currently playing song" msgstr "Διακοπή τρέχοντος αναπαραγώμενου τραγουδιού" #: .././sonata/cli.py:120 msgid "Play next song in playlist" msgstr "Αναπαραγωγή του επόμενου τραγουδιού στην λίστα κομματιών" #: .././sonata/cli.py:121 msgid "Play previous song in playlist" msgstr "Αναπαραγωγή του προηγούμενου τραγουδιού στην λίστα κομματιών" #: .././sonata/cli.py:122 msgid "Toggle play/pause; plays if stopped" msgstr "Εναλλαγή αναπαραγωγής/παύσης. Αναπαραγωγή από στάσιμο" #: .././sonata/cli.py:123 msgid "Toggle repeat mode" msgstr "Εναλλαγή λειτουργίας επανάληψης" #: .././sonata/cli.py:124 msgid "Toggle random mode" msgstr "Εναλλαγή λειτουργίας επανάληψης" #: .././sonata/cli.py:125 msgid "Display current song info" msgstr "Εμφάνιση πληροφοριών τρέχοντος τραγουδιού" # status tretated as `state' #: .././sonata/cli.py:126 msgid "Display MPD status" msgstr "Εμφάνιση κατάστασης του MPD" #: .././sonata/cli.py:134 #, python-format msgid "Starting Sonata with profile %s..." msgstr "Εκκίνηση του Sonata με το προφίλ %s..." #: .././sonata/cli.py:136 #, python-format msgid "%d is not an available profile number." msgstr "Το %d δεν είναι διαθέσιμος αριθμός προφίλ." #: .././sonata/cli.py:137 .././sonata/cli.py:141 #, python-format msgid "Profile numbers must be between 1 and %d." msgstr "Οι αριθμοί προφίλ πρέπει να είναι μεταξύ του 1 και %d." #: .././sonata/cli.py:140 #, python-format msgid "Python is unable to interpret %s as a number." msgstr "Ήταν αδύνατη η μεταγλώτιση του %s ως αριθμού." #: .././sonata/cli.py:154 .././sonata/main.py:177 msgid "Default Profile" msgstr "Προεπιλεγμένο Προφίλ" #: .././sonata/cli.py:154 .././sonata/main.py:177 msgid "by" msgstr "από" #: .././sonata/cli.py:154 .././sonata/main.py:177 msgid "from" msgstr "στο" #: .././sonata/cli.py:176 msgid "" "Unable to connect to MPD.\n" "Please check your Sonata preferences or MPD_HOST/MPD_PORT environment " "variables." msgstr "" "Αδύνατη η σύνδεση στο MPD.\n" "Παρακαλώ ελέγξτε τις ρυθμίσεις του Sonata ή τις μεταβλητές περιβάλλοντος " "MPD_HOST/MPD_PORT." #: .././sonata/cli.py:208 .././sonata/info.py:90 .././sonata/library.py:45 #: .././sonata/tagedit.py:125 msgid "Title" msgstr "Τίτλος" #: .././sonata/cli.py:209 .././sonata/info.py:91 .././sonata/library.py:45 #: .././sonata/main.py:1168 .././sonata/tagedit.py:126 msgid "Artist" msgstr "Καλλιτέχνης" #: .././sonata/cli.py:210 .././sonata/info.py:93 .././sonata/library.py:45 #: .././sonata/main.py:1169 .././sonata/main.py:2420 #: .././sonata/tagedit.py:127 msgid "Album" msgstr "Άλμπουμ" #: .././sonata/cli.py:211 .././sonata/info.py:95 msgid "Date" msgstr "Ημερομηνία" #: .././sonata/cli.py:212 .././sonata/info.py:96 .././sonata/main.py:1170 #: .././sonata/tagedit.py:130 msgid "Track" msgstr "Κομμάτι" #: .././sonata/cli.py:213 .././sonata/info.py:97 .././sonata/library.py:45 #: .././sonata/main.py:1173 .././sonata/preferences.py:557 #: .././sonata/tagedit.py:139 msgid "Genre" msgstr "Είδος" #: .././sonata/cli.py:214 .././sonata/info.py:98 .././sonata/main.py:1175 msgid "File" msgstr "Αρχείο" # meaning length #: .././sonata/cli.py:219 .././sonata/cli.py:221 msgid "Time" msgstr "Διάρκεια" #: .././sonata/cli.py:222 .././sonata/info.py:99 msgid "Bitrate" msgstr "Ρυθμός Δεδομένων" #: .././sonata/cli.py:224 msgid "MPD stopped" msgstr "MPD στάσιμο" #: .././sonata/cli.py:228 .././sonata/cli.py:230 .././sonata/cli.py:232 msgid "State" msgstr "Κατάσταση" # like `in play' #: .././sonata/cli.py:228 msgid "Playing" msgstr "Σε αναπαραγωγή" # like `in pause' #: .././sonata/cli.py:230 msgid "Paused" msgstr "Σε παύση" #: .././sonata/cli.py:232 .././sonata/main.py:561 .././sonata/main.py:566 #: .././sonata/main.py:1817 .././sonata/main.py:1828 msgid "Stopped" msgstr "Στάσιμο" #: .././sonata/cli.py:234 .././sonata/cli.py:236 msgid "Repeat" msgstr "Επανάληψη" #: .././sonata/cli.py:234 .././sonata/cli.py:238 msgid "Off" msgstr "Ανενεργό" #: .././sonata/cli.py:236 .././sonata/cli.py:240 msgid "On" msgstr "Ενεργό" #: .././sonata/cli.py:238 .././sonata/cli.py:240 msgid "Random" msgstr "Τυχαία" #: .././sonata/cli.py:241 msgid "Volume" msgstr "Ένταση" # descriptive translation #: .././sonata/cli.py:242 msgid "Crossfade" msgstr "Ομαλή μετάβαση κομματιών" #: .././sonata/cli.py:242 .././sonata/preferences.py:277 msgid "second" msgid_plural "seconds" msgstr[0] "δευτερόλεπτο" msgstr[1] "δευτερόλεπτα" #: .././sonata/current.py:64 msgid "Filter" msgstr "Φίλτρο" #: .././sonata/dbus_plugin.py:83 msgid "" "Sonata failed to connect to the D-BUS session bus: Unable to determine the " "address of the message bus (try 'man dbus-launch' and 'man dbus-daemon' for " "help)" msgstr "" "Το Sonata απέτυχε να συνδεθεί με τη λεωφόρο του D-BUS: Δεν ήταν δυνατός ο " "προσδιορισμός της διεύθυνσης της λεωφόρου μηνυμάτων (δοκιμάστε 'man dbus-" "launch' και 'man dbus-daemon' για βοήθεια)" #: .././sonata/dbus_plugin.py:96 msgid "Failed to execute remote commands." msgstr "Αποτυχία εκτέλεσης απομακρυσμένων εντολής." #: .././sonata/dbus_plugin.py:98 #, fuzzy msgid "Starting Sonata instead..." msgstr "Εκκίνηση του Sonata στη θέση του..." #: .././sonata/dbus_plugin.py:100 msgid "Maybe Sonata is not running?" msgstr "Ίσως ένα στιγμιότυπο του Sonata τρέχει ήδη?" #: .././sonata/dbus_plugin.py:114 msgid "An instance of Sonata is already running. Showing it..." msgstr "Ίσως ένα στιγμιότυπο του Sonata τρέχει ήδη." #: .././sonata/dbus_plugin.py:120 msgid "Failed to execute remote command." msgstr "Αποτυχία εκτέλεσης απομακρυσμένων εντολών." #. Song info #: .././sonata/info.py:78 msgid "Song Info" msgstr "Πληροφορίες Τραγουδιού" #: .././sonata/info.py:92 msgid "Launch artist in Wikipedia" msgstr "Άνοιγμα καλλιτέχνη στην Wikipedia" #: .././sonata/info.py:94 msgid "Launch album in Wikipedia" msgstr "Άνοιγμα άλμπουμ στην Wikipedia" #: .././sonata/info.py:128 msgid "Toggle extra tags" msgstr "Εναλλαγή επιπλέον ετικετών" #: .././sonata/info.py:131 msgid "Edit song tags" msgstr "Επεξεργασία ετικετών τραγουδιού" #. Lyrics #: .././sonata/info.py:141 msgid "Lyrics" msgstr "Στίχοι" #: .././sonata/info.py:153 msgid "Search Lyricwiki.org for lyrics" msgstr "Αναζήτηση στο Lyricwiki.org για στίχους" #: .././sonata/info.py:154 msgid "Edit lyrics at Lyricwiki.org" msgstr "Επεξεργασία στίχων στο Lyricwiki.org" #. Album info #: .././sonata/info.py:162 msgid "Album Info" msgstr "Πληροφορίες Άλμπουμ" #: .././sonata/info.py:214 .././sonata/info.py:219 msgid "more" msgstr "περισσότερα" #: .././sonata/info.py:216 msgid "hide" msgstr "απόκρυψη" #: .././sonata/info.py:282 msgid "edit tags" msgstr "επεξεργασία ετικετών" #: .././sonata/info.py:309 msgid "Album info not found." msgstr "Δεν βρέθηκαν πληροφορίες άλμπουμ." #: .././sonata/info.py:312 msgid "Album name not set." msgstr "Δεν αποδόθηκε όνομα άλμπουμ." #: .././sonata/info.py:326 msgid "ZSI not found, fetching lyrics support disabled." msgstr "Δεν βρέθηκε το ZSI, η προσκόμιση στίχων απενεργοποιήθηκε." #: .././sonata/info.py:331 msgid "Artist or song title not set." msgstr "Δεν αποδόθηκε καλλιτέχνης ή τίτλος τραγουδιού." #: .././sonata/info.py:373 msgid "search" msgstr "αναζήτηση" #: .././sonata/info.py:374 msgid "edit" msgstr "επεξεργασία" #: .././sonata/info.py:383 .././sonata/info.py:438 msgid "Lyrics not found" msgstr "Δεν βρέθηκαν στίχοι" #. Fetch lyrics from lyricwiki.org #: .././sonata/info.py:403 msgid "Fetching lyrics..." msgstr "Προσκόμιση στίχων..." #: .././sonata/info.py:413 msgid "Couldn't connect to LyricWiki" msgstr "Αδύνατη η σύνδεση με το LyricWiki" #: .././sonata/info.py:441 msgid "Fetching lyrics failed" msgstr "Προσκόμιση στίχων απέτυχε" #: .././sonata/library.py:43 msgid "Untagged" msgstr "Χωρίς Ετικέτες" #: .././sonata/library.py:44 msgid "Various Artists" msgstr "Διάφοροι Καλλιτέχνες" #: .././sonata/library.py:45 msgid "Filename" msgstr "Όνομα αρχείου" #: .././sonata/library.py:45 msgid "Everything" msgstr "Όλα" #: .././sonata/library.py:77 msgid "Search terms" msgstr "Όροι αναζήτησης" #: .././sonata/library.py:83 msgid "End Search" msgstr "Τέλος Αναζήτησης" #: .././sonata/library.py:85 msgid "Library browsing view" msgstr "Όψη περιήγησης βιβλιοθήκης" #. disabled as breadcrumbs replace this: #. self.searchbox.pack_start(self.libraryview, False, False, 1) #. self.searchbox.pack_start(gtk.VSeparator(), False, False, 2) #: .././sonata/library.py:89 msgid "Search" msgstr "Αναζήτηση" #: .././sonata/library.py:110 msgid "Filesystem" msgstr "Σύστημα Αρχείων" #: .././sonata/library.py:112 msgid "Albums" msgstr "Άλμπουμ" #: .././sonata/library.py:114 msgid "Artists" msgstr "Καλλιτέχνες" #: .././sonata/library.py:116 msgid "Genres" msgstr "Είδη" #. add the views button first #: .././sonata/library.py:376 msgid " v " msgstr " v " #: .././sonata/library.py:859 .././sonata/main.py:1738 msgid "minute" msgid_plural "minutes" msgstr[0] "λεπτό" msgstr[1] "λεπτά" #: .././sonata/library.py:947 msgid "Song" msgstr "Τραγούδι" #: .././sonata/library.py:947 .././sonata/main.py:1174 msgid "Path" msgstr "Μονοπάτι" #. Constants #: .././sonata/main.py:102 msgid "Current" msgstr "Τρέχουσα Λίστα" #: .././sonata/main.py:103 msgid "Library" msgstr "Βιβλιοθήκη" #: .././sonata/main.py:104 msgid "Playlists" msgstr "Λίστες Κομματιών" #: .././sonata/main.py:105 msgid "Streams" msgstr "Μεταδώσεις" #: .././sonata/main.py:106 msgid "Info" msgstr "Πληροφορίες" #: .././sonata/main.py:137 .././sonata/preferences.py:278 #: .././sonata/preferences.py:279 msgid "Entire song" msgstr "Ολόκληρο τραγούδι" #: .././sonata/main.py:235 msgid "_Sort List" msgstr "_Ταξινόμηση Λίστας" #: .././sonata/main.py:236 msgid "Sa_ve List to" msgstr "Α_ποθήκευση Λίστας σε" #: .././sonata/main.py:237 msgid "_Connection" msgstr "_Σύνδεση" #: .././sonata/main.py:238 msgid "P_lay after" msgstr "Αναπαραγωγή _μετά" #: .././sonata/main.py:239 .././sonata/main.py:2434 msgid "_Update" msgstr "Α_νανέωση" #: .././sonata/main.py:240 msgid "Use _Remote Image..." msgstr "Χρήση _Απομακρυσμένης Εικόνας..." #: .././sonata/main.py:241 msgid "Use _Local Image..." msgstr "Χρήση _Τοπικής Εικόνας..." #: .././sonata/main.py:242 msgid "_Fullscreen Mode" msgstr "Λειτουργία _Πλήρους Οθόνης" #: .././sonata/main.py:243 msgid "Reset Image" msgstr "Επαναφορά Εικόνας" #: .././sonata/main.py:244 msgid "_Play" msgstr "_Αναπαραγωγή" #: .././sonata/main.py:245 msgid "Pa_use" msgstr "Παύση" #: .././sonata/main.py:246 msgid "_Stop" msgstr "_Διακοπή" #: .././sonata/main.py:247 msgid "Pre_vious" msgstr "Προηγούμενο" #: .././sonata/main.py:248 msgid "_Next" msgstr "_Επόμενο" #: .././sonata/main.py:249 msgid "_Quit" msgstr "Έξο_δος" #: .././sonata/main.py:250 msgid "_Remove" msgstr "_Αφαίρεση" #: .././sonata/main.py:251 msgid "_Clear" msgstr "Κα_θαρισμός" #: .././sonata/main.py:252 msgid "_Entire Library" msgstr "_Ολόκληρη Βιβλιοθήκης" #: .././sonata/main.py:253 msgid "_Selected Items" msgstr "Ε_πιλεγμένα Αντικείμενα" #: .././sonata/main.py:254 msgid "_Preferences..." msgstr "_Επιλογές..." #: .././sonata/main.py:255 msgid "_About..." msgstr "_Περί..." #: .././sonata/main.py:256 msgid "_Edit Tags..." msgstr "_Επεξεργασία Ετικετών..." #: .././sonata/main.py:257 msgid "_Add" msgstr "_Προσθήκη" #: .././sonata/main.py:258 msgid "_Replace" msgstr "_Αντικατάσταση" #: .././sonata/main.py:259 msgid "Add" msgstr "Προσθήκη" #: .././sonata/main.py:260 msgid "Replace" msgstr "Αντικατάσταση" #: .././sonata/main.py:261 msgid "_Delete..." msgstr "_Διαγραφή..." #: .././sonata/main.py:262 msgid "Shuffle" msgstr "Ανακάτεμα" #: .././sonata/main.py:287 msgid "S_how Sonata" msgstr "_Εμφάνιση του Sonata" #: .././sonata/main.py:288 msgid "_Repeat" msgstr "Επανά_ληψη" #: .././sonata/main.py:289 msgid "Rando_m" msgstr "Τ_υχαία" #: .././sonata/main.py:430 msgid "By Artist" msgstr "Ανά Καλλιτέχνη" #: .././sonata/main.py:431 msgid "By Album" msgstr "Ανά Δίσκο" #: .././sonata/main.py:432 msgid "By Song Title" msgstr "Ανά Τίτλο Τραγουδιού" #: .././sonata/main.py:433 msgid "By File Name" msgstr "Ανά Όνομα Αρχείου" #: .././sonata/main.py:434 msgid "By Dir & File Name" msgstr "Ανά Όνομα Καταλόγου & Αρχείου" #: .././sonata/main.py:435 msgid "Reverse List" msgstr "Αντιστροφή Λίστας" #: .././sonata/main.py:458 .././sonata/main.py:469 msgid "_New..." msgstr "_Νέο..." #: .././sonata/main.py:459 msgid "_Edit..." msgstr "_Επεξεργασία..." #: .././sonata/main.py:470 msgid "_Rename..." msgstr "_Μετονομασία..." #: .././sonata/main.py:532 .././sonata/main.py:599 .././sonata/main.py:600 msgid "Playlist" msgstr "Λίστα Κομματιών" #: .././sonata/main.py:562 .././sonata/main.py:1821 .././sonata/main.py:2030 msgid "Click to expand" msgstr "Κλικ για επέκταση" # using a word similar to unfold #: .././sonata/main.py:567 .././sonata/main.py:1819 .././sonata/main.py:2028 msgid "Click to collapse" msgstr "Κλικ για αναδίπλωση" #: .././sonata/main.py:572 .././sonata/main.py:1713 .././sonata/main.py:1824 msgid "Not Connected" msgstr "Μη Συνδεδεμένο" #: .././sonata/main.py:574 .././sonata/main.py:1711 .././sonata/main.py:1826 msgid "No Read Permission" msgstr "Χωρίς Δικαίωμα Ανάγνωσης" #: .././sonata/main.py:647 msgid "Cover Art" msgstr "Εξώφυλλο" #: .././sonata/main.py:860 msgid "MPD_HOST/PORT" msgstr "MPD_HOST/PORT" #: .././sonata/main.py:865 msgid "Disconnect" msgstr "Αποσύνδεση" #: .././sonata/main.py:1171 .././sonata/main.py:1178 msgid "#" msgstr "Α/Α" #: .././sonata/main.py:1172 .././sonata/preferences.py:556 #: .././sonata/tagedit.py:128 msgid "Year" msgstr "Έτος" #: .././sonata/main.py:1176 msgid "Stream" msgstr "Μετάδωση" # length #: .././sonata/main.py:1177 msgid "Len" msgstr "Διάρκεια" #: .././sonata/main.py:1198 .././sonata/main.py:1205 .././sonata/main.py:1246 #: .././sonata/main.py:1253 msgid "Unknown" msgstr "Άγνωστο" #: .././sonata/main.py:1734 msgid "day" msgid_plural "days" msgstr[0] "μέρα" msgstr[1] "μέρες" #: .././sonata/main.py:1742 msgid "hour" msgid_plural "hours" msgstr[0] "ώρα" msgstr[1] "ώρες" #: .././sonata/main.py:1747 .././sonata/main.py:1749 msgid "and" msgstr "και" #: .././sonata/main.py:1757 msgid "(updating mpd)" msgstr "(ανανέωση του mpd)" #: .././sonata/main.py:2097 msgid "Lyrics Search" msgstr "Αναζήτηση Στίχων" #: .././sonata/main.py:2098 msgid "_Search" msgstr "Ανα_ζήτηση" #: .././sonata/main.py:2101 msgid "Artist Name" msgstr "Όνομα Καλλιτέχνη" #: .././sonata/main.py:2106 msgid "Song Title" msgstr "Τίτλος Τραγουδιού" #: .././sonata/main.py:2358 msgid "Open Image" msgstr "Άνοιγμα Εικόνας" #: .././sonata/main.py:2360 msgid "Images" msgstr "Εικόνες" #: .././sonata/main.py:2364 msgid "All files" msgstr "Όλα τα αρχεία" #: .././sonata/main.py:2406 msgid "Choose Cover Art" msgstr "Επιλογή Εξωφύλλου" #: .././sonata/main.py:2407 msgid "C_hoose" msgstr "Ε_πιλογή" #: .././sonata/main.py:2439 msgid "Edit search terms" msgstr "Επεξεργασία όρων αναζήτησης" #: .././sonata/main.py:2496 msgid "No artist or album name found." msgstr "Δεν βρέθηκε όνομα καλλιτέχνη ή άλμπουμ." #: .././sonata/main.py:2499 msgid "No cover art found." msgstr "Δεν βρέθηκε εξώφυλλο." #: .././sonata/main.py:2823 msgid "Delete the selected playlist?" msgid_plural "Delete the selected playlists?" msgstr[0] "Διαγραφή της επιλεγμένης λίστας κομματιών;" msgstr[1] "Διαγραφή των επιλεγμένων λιστών κομματιών;" #: .././sonata/main.py:2823 msgid "Delete Playlist" msgid_plural "Delete Playlists" msgstr[0] "Διαγραφή λίστας κομματιών" msgstr[1] "Διαγραφή λιστών κομματιών" #: .././sonata/main.py:2831 msgid "Delete the selected stream?" msgid_plural "Delete the selected streams?" msgstr[0] "Διαγραφή της επιλεγμένης μετάδοσης;" msgstr[1] "Διαγραφή των επιλεγμένων μεταδόσεων;" #: .././sonata/main.py:2831 msgid "Delete Stream" msgid_plural "Delete Streams" msgstr[0] "Διαγραφή μετάδοσης" msgstr[1] "Διαγραφή μεταδόσεων" #: .././sonata/playlists.py:103 .././sonata/playlists.py:105 msgid "Save Playlist" msgstr "Αποθήκευση Λίστας Κομματιών" #: .././sonata/playlists.py:120 msgid "Would you like to replace the existing playlist or append these songs?" msgstr "" "Θα θέλατε να αντικαταστήσετε τιν υπάρχουσα λίστα κομματιών ή να προσθέσετε " "αυτά τα κομμάτια;" #: .././sonata/playlists.py:120 msgid "Existing Playlist" msgstr "Υπάρχουσα Λίστα Κομματιών" #: .././sonata/playlists.py:120 msgid "Replace playlist" msgstr "Αντικατάσταση Λίστας Κομματιών" #: .././sonata/playlists.py:120 msgid "Append songs" msgstr "Προσθήκη κομματιών" #: .././sonata/playlists.py:141 msgid "A playlist with this name already exists. Would you like to replace it?" msgstr "" "Μια λίστα κομματιών με αυτό το όνομα υπάρχει ήδη. Θέλετε να την " "αντικαταστήσετε;" #: .././sonata/playlists.py:153 msgid "Playlist name" msgstr "Όνομα λίστας κομματιών" #: .././sonata/playlists.py:182 .././sonata/playlists.py:186 msgid "Rename Playlist" msgstr "Μετονομασία Λίστας Κομματιών" #: .././sonata/preferences.py:27 msgid "System tray" msgstr "Μπάρα εργασιών" #: .././sonata/preferences.py:27 msgid "Top Left" msgstr "Πάνω Αριστερά" #: .././sonata/preferences.py:27 msgid "Top Right" msgstr "Πάνω Δεξιά" #: .././sonata/preferences.py:28 msgid "Bottom Left" msgstr "Κάτω Αριστερά" #: .././sonata/preferences.py:28 msgid "Bottom Right" msgstr "Κάτω Δεξιά" #: .././sonata/preferences.py:29 msgid "Screen Center" msgstr "Κέντρο Οθόνης" #: .././sonata/preferences.py:99 msgid "MPD" msgstr "MPD" #: .././sonata/preferences.py:100 .././sonata/preferences.py:343 msgid "Display" msgstr "Εμφάνιση" #: .././sonata/preferences.py:101 msgid "Behavior" msgstr "Συμπεριφορά" #: .././sonata/preferences.py:102 msgid "Format" msgstr "Μορφοποίηση" #: .././sonata/preferences.py:103 .././sonata/preferences.py:245 msgid "Extras" msgstr "Πρόσθετα" #: .././sonata/preferences.py:128 msgid "MPD Connection" msgstr "Σύνδεση με το MPD" #: .././sonata/preferences.py:141 msgid "_Name" msgstr "Ό_νομα" #: .././sonata/preferences.py:144 msgid "_Host" msgstr "_Διακομιστής" #: .././sonata/preferences.py:147 msgid "_Port" msgstr "_Θύρα" #: .././sonata/preferences.py:151 msgid "_Music dir" msgstr "_Κατάλογος μουσικής" #: .././sonata/preferences.py:152 msgid "Select a Music Directory" msgstr "Επιλογή Καταλόγου Μουσικής" #: .././sonata/preferences.py:158 msgid "Pa_ssword" msgstr "Κω_δικός" # `required' translated as `needed' #: .././sonata/preferences.py:161 msgid "Leave blank if no password is required." msgstr "Κενό εάν ο κωδικός δεν είναι αναγκαίος." #: .././sonata/preferences.py:162 msgid "_Autoconnect on start" msgstr "_Αυτόματη σύνδεση κατα την εκκίνηση" #: .././sonata/preferences.py:182 msgid "Using MPD_HOST/PORT" msgstr "Χρήση " #: .././sonata/preferences.py:250 msgid "_Audioscrobbling (Last.fm)" msgstr "_Ανέβασμα επιλογών (Last.fm)" #: .././sonata/preferences.py:252 msgid "_Username:" msgstr "Όνομα _χρήστη:" #: .././sonata/preferences.py:253 msgid "_Password:" msgstr "Κω_δικός:" #: .././sonata/preferences.py:273 msgid "Popup _notification on song changes" msgstr "Ανάδυση ειδο_ποίησης σε αλλαγές τραγουδιού" #: .././sonata/preferences.py:299 msgid "Fade length" msgstr "Διάρκεια μετάβασης" #: .././sonata/preferences.py:300 msgid "_Fade length" msgstr "Διά_ρκεια μετάβασης" # abbreviation #: .././sonata/preferences.py:302 msgid "sec" msgstr "δευτ" # descriptive translation #: .././sonata/preferences.py:307 msgid "C_rossfade" msgstr "Ο_μαλή μετάβαση κομματιών" #: .././sonata/preferences.py:348 msgid "_Album art" msgstr "Ε_ξώφυλλο άλμπουμ" #: .././sonata/preferences.py:350 msgid "Standard" msgstr "Βασική" #: .././sonata/preferences.py:351 msgid "Stylized" msgstr "Μορφοποιημένη" #: .././sonata/preferences.py:356 msgid "Artwork style:" msgstr "Μορφή εξωφύλλων:" #: .././sonata/preferences.py:358 msgid "Local only" msgstr "Μόνο τοπικά" #: .././sonata/preferences.py:359 msgid "Local and remote" msgstr "Τοπικά και απομακρυσμένα" #: .././sonata/preferences.py:362 msgid "Search locations:" msgstr "Αναζήτηση τοποθεσιών:" #: .././sonata/preferences.py:369 .././sonata/preferences.py:396 msgid "SONG_DIR" msgstr "ΚΑΤΑΛΟΓΟΣ_ΤΡΑΓΟΥΔΙΩΝ" #: .././sonata/preferences.py:371 msgid "custom" msgstr "παραμετροποίηση" #: .././sonata/preferences.py:378 msgid "Save art to:" msgstr "Αποθήκευση εξωφύλλων σε:" #: .././sonata/preferences.py:383 msgid "_Playback/volume buttons" msgstr "_Κουμπιά αναπαραγωγής/έντασης" #: .././sonata/preferences.py:386 msgid "Pr_ogressbar" msgstr "Μπάρα _προόδου" #: .././sonata/preferences.py:389 msgid "_Statusbar" msgstr "Μπάρα _κατάστασης" #: .././sonata/preferences.py:392 msgid "Song Ly_rics" msgstr "Στί_χοι Τραγουδιού" #: .././sonata/preferences.py:394 msgid "Save lyrics to:" msgstr "Αποθήκευση στίχων σε:" #: .././sonata/preferences.py:405 msgid "System _tray icon" msgstr "Εικο_νίδιο μπάρας εργασιών" #: .././sonata/preferences.py:429 msgid "Window Behavior" msgstr "Συμπεριφορά Παραθύρου" #: .././sonata/preferences.py:433 msgid "_Show window on all workspaces" msgstr "Εμφάνιση παραθύρου σε όλες τις επιφάνειες εργασίας" #: .././sonata/preferences.py:436 msgid "_Keep window above other windows" msgstr "Παραμονή παραθύρου πάνω από τα άλλα παράθυρα" #: .././sonata/preferences.py:439 msgid "_Hide window titlebar" msgstr "Α_πόκρυψη τίτλου παραθύρου" # `escape' translated as `pressing Escape' #: .././sonata/preferences.py:442 msgid "_Minimize to system tray on close/escape" msgstr "" "Ε_λαχιστοπίηση στην μπάρα εργασιών κατά το κλείσιμο ή πάτημα του escape" #: .././sonata/preferences.py:444 msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, so " "only check this if you have one." msgstr "" "Εάν είναι ενεργοποιημένο, το κλείσιμο του Sonata θα το ελαχιστοποιεί στην " "μπάρα εργασιών. Σημειώστε ότι αυτή την στιγμή είναι αδύνατο να εντοπιστεί η " "ύπαρξη μπάρας εργασιών, οπότε επιλέξτε το άν έχετε μία." #: .././sonata/preferences.py:460 msgid "Miscellaneous" msgstr "Λοιπά" #: .././sonata/preferences.py:464 msgid "_Update MPD library on start" msgstr "_Ανανέωση της βιβλιοθήκης του MPD κατά την εκκίνηση" #: .././sonata/preferences.py:466 msgid "" "If enabled, Sonata will automatically update your MPD library when it starts " "up." msgstr "" "Εάν είναι ενεργοποιημένο, το Sonata θα ανανεώνει την βιβλιοθήκη του MPD όταν " "ξεκινά." #: .././sonata/preferences.py:469 msgid "S_top playback on exit" msgstr "_Διακοπή αναπαραγωγής κατά την έξοδο" #: .././sonata/preferences.py:471 msgid "" "MPD allows playback even when the client is not open. If enabled, Sonata " "will behave like a more conventional music player and, instead, stop " "playback upon exit." msgstr "" "Το MPD επιτρέπει την αναπαραγωγή ακόμη κι αν το πρόγραμμα-πελάτης δεν είναι " "ανοιχτό. Εάν είναι ενεργοποιημένο, το Sonata θα συμπεριφέρεται σαν ένα " "περισσότερο συμβατικό πρόγραμμα αναπαραγωγής μουσικής και, αντιθέτως, θα " "σταματά την αναπαραγωγή με το που κλείνει." #: .././sonata/preferences.py:474 msgid "_Write status file:" msgstr "Εγγραφή αρχείου κατάστασης:" #: .././sonata/preferences.py:476 .././sonata/preferences.py:478 msgid "" "If enabled, Sonata will create a xmms-infopipe like file containing " "information about the current song. Many applications support the xmms-info " "file (Instant Messengers, IRC Clients...)" msgstr "" "Εάν είναι ενεργό, το Sonata θα δημιουργήσει ένα αρχείο xmms-infopipe το " "οποίο θα περιέχει πληροφορίες σχετικά με το τρέχον κομμάτι. Πολλές εφαρμογές " "υποστηρίζουν το αρχείο xmms-info (Προγράμματα Άμεσης Συνομιλίας, Προγράμματα-" "πελάτες IRC...)" #: .././sonata/preferences.py:512 msgid "Song Formatting" msgstr "Μορφοποίηση Τραγουδιού" #: .././sonata/preferences.py:517 msgid "C_urrent playlist:" msgstr "Τ_ρέχουσα λίστα κομματιών:" #: .././sonata/preferences.py:518 msgid "_Library:" msgstr "_Βιβλιοθήκη:" #: .././sonata/preferences.py:519 msgid "_Window title:" msgstr "_Τίτλος παραθύρου:" #: .././sonata/preferences.py:520 msgid "Current _song line 1:" msgstr "Γραμμή _τρέχοντος τραγουδιού 1:" #: .././sonata/preferences.py:522 msgid "Current s_ong line 2:" msgstr "Γραμμή τ_ρέχοντος τραγουδιού 2:" #: .././sonata/preferences.py:547 msgid "Available options" msgstr "Διαθέσιμες επιλογές" #. XXX get these directly from the formatting function: #: .././sonata/preferences.py:551 msgid "Artist name" msgstr "Όνομα καλλιτέχνη" #: .././sonata/preferences.py:552 msgid "Album name" msgstr "Όνομα άλμπουμ" #: .././sonata/preferences.py:553 msgid "Track name" msgstr "Όνομα κομματιού" #: .././sonata/preferences.py:554 msgid "Track number" msgstr "Αριθμός κομματιού" #: .././sonata/preferences.py:555 msgid "Disc number" msgstr "Αριθμός Δίσκου" #: .././sonata/preferences.py:558 msgid "File path" msgstr "Mονοπάτι αρχείου" #: .././sonata/preferences.py:559 msgid "File name" msgstr "Όνομα αρχείου" #: .././sonata/preferences.py:560 .././sonata/streams.py:107 msgid "Stream name" msgstr "Όνομα μετάδωσης" # translated as `duration' #: .././sonata/preferences.py:561 msgid "Song length" msgstr "Διάρκεια τραγουδιού" # descriptive translation #: .././sonata/preferences.py:562 msgid "Elapsed time (title only)" msgstr "Χρόνος που έχει αναπαραχθεί (μόνο στον τίτλο)" #: .././sonata/preferences.py:572 msgid "Info displayed only if all enclosed tags are defined" msgstr "" "Πληροφορίες που εμφανίζονται μόνο εάν όλες οι εσωκλειώμενες ετικέτες έχουν " "οριστεί" #: .././sonata/preferences.py:572 msgid "Creates columns in the current playlist" msgstr "Δημιουργεί στήλες στην τρέχουσα λίστα κομματιών" #: .././sonata/preferences.py:598 msgid "_About" msgstr "_Περί" #: .././sonata/preferences.py:601 msgid "_Configure..." msgstr "_Ρυθμίσεις..." #: .././sonata/preferences.py:641 msgid "Loaded" msgstr "Φορτώθηκε" #: .././sonata/preferences.py:649 msgid "Description" msgstr "Περιγραφή" #: .././sonata/preferences.py:666 msgid "" "To save lyrics to the music file's directory, you must specify a valid music " "directory." msgstr "" "Για αποθήκευση στίχων στον κατάλογο του μουσικού αρχείου, πρέπει να " "προσδιοριστεί ένας νόμιμος μουσικός κοτάλογος." #: .././sonata/preferences.py:666 .././sonata/preferences.py:673 msgid "Music Dir Verification" msgstr "Επιβεβαίωση Μουσικού Καταλόγου" #: .././sonata/preferences.py:673 msgid "" "To save artwork to the music file's directory, you must specify a valid " "music directory." msgstr "" "Για αποθήκευση εξωφύλλων στον κατάλογο του μουσικού αρχείου, πρέπει να " "προσδιοριστεί ένας νόμιμος μουσικός κοτάλογος." #: .././sonata/preferences.py:738 msgid "New Profile" msgstr "Νέο Προφίλ" #. Prompt user for playlist name: #: .././sonata/preferences.py:792 msgid "Custom Artwork" msgstr "Παραμετροποιημένο Εξώφυλλο" #: .././sonata/preferences.py:794 msgid "Artwork filename" msgstr "Όνομα αρχείου εξωφύλλου" #: .././sonata/streams.py:103 msgid "Edit Stream" msgstr "Επεξεργασία" #: .././sonata/streams.py:105 .././sonata/streams.py:136 msgid "New Stream" msgstr "Νέα Μετάδωση" #: .././sonata/streams.py:114 msgid "Stream URL" msgstr "URL Μετάδωσης" #: .././sonata/streams.py:136 msgid "A stream with this name already exists. Would you like to replace it?" msgstr "" "Μια μετάδωση με αυτό το όνομα υπάρχει ήδη. Θέλετε να την αντικαταστήσετε;" #: .././sonata/tagedit.py:61 msgid "Taglib and/or tagpy not found, tag editing support disabled." msgstr "" "Το Taglib και/ή το tagpy δεν βρέθηκαν, η υποστήριξη επεξεργασίας ετικετών " "απενεργοποιήθηκε." #: .././sonata/tagedit.py:61 .././sonata/tagedit.py:70 #: .././sonata/tagedit.py:75 .././sonata/tagedit.py:99 #: .././sonata/tagedit.py:103 .././sonata/tagedit.py:260 #: .././sonata/tagedit.py:299 msgid "Edit Tags" msgstr "Επεξεργασία Ετικετών" #: .././sonata/tagedit.py:70 msgid "" "Tagpy version < 0.91. Please upgrade to a newer version, tag editing support " "disabled." msgstr "" "Η έκδοση του Tagpy είναι < 0.91. Παρακαλώ αναβαθμίστε σε νεότερη, η " "υποστήριξη επεξεργασίας ετικετών απενεργοποιήθηκε." #: .././sonata/tagedit.py:75 msgid "The path" msgstr "Το μονοπάτι" #: .././sonata/tagedit.py:75 msgid "does not exist. Please specify a valid music directory in preferences." msgstr "" "δεν υπάρχει. Παρακαλώ, προσδιορίστε έναν νόμιμο μουσικό κατάλογο στις " "προτιμήσεις." #: .././sonata/tagedit.py:99 msgid "File " msgstr "Το αρχείο " #: .././sonata/tagedit.py:99 msgid " not found. Please specify a valid music directory in preferences." msgstr "" " δεν βρέθηκε. Παρακαλώ, προσδιορίστε έναν νόμιμο μουσικό κατάλογο στις " "προτιμήσεις." #: .././sonata/tagedit.py:103 msgid "No music files with editable tags found." msgstr "Δεν βρέθηκαν μουσικά αρχεία με επεξεργάσιμες ετικέτες." #: .././sonata/tagedit.py:150 msgid "Comment" msgstr "Σχόλιο" #. Only show save all button if more than one song being edited. #: .././sonata/tagedit.py:161 msgid "Save _All" msgstr "Αποθήκευση Ό_λων" #: .././sonata/tagedit.py:207 msgid "Increment each selected music file, starting at track 1 for this file." msgstr "" "Επαύξηση κάθε επιλεγμένου μουσικού αρχείου, ξεκινώντας από το κομμάτι 1 για " "αυτό το αρχείο." #: .././sonata/tagedit.py:209 msgid "Apply to all selected music files." msgstr "Εφαρμογή σε όλα τα επιλεγμένα μουσικά αρχεία." #: .././sonata/tagedit.py:260 msgid "of" msgstr "από" #. FIXME: was (save_success and self.conn and self.status): #: .././sonata/tagedit.py:299 msgid "Unable to save tag to music file." msgstr "Αδύνατη η αποθήκευση ετικέτας στο μουσικό αρχείο." #: .././sonata/tagedit.py:366 msgid "Hide file path" msgstr "Απόκρυψη μονοπατιού αρχείου" #: .././sonata/tagedit.py:369 msgid "Show file path" msgstr "Εμφάνιση μονοπατιού αρχείου" #~ msgid "Profile" #~ msgstr "Προφίλ" #~ msgid "The popup argument requires D-Bus. Aborting." #~ msgstr "Η επιλογή ανάδυσης προϋποθέτει την ύπαρξη του D-Bus. Αποτυχία." #~ msgid "_Update Path" #~ msgstr "Α_νανέωση Μονοπατιού" #~ msgid "Website: http://www.nongnu.org/sonata/" #~ msgstr "Ιστοσελίδα: http://www.nongnu.org/sonata/" #~ msgid "Enable Audioscrobbler" #~ msgstr "Ενεργοποίηση του Audioscrobbler" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/po/es.po�������������������������������������������������������������������������������0000664�0000000�0000000�00000125246�13771420143�0014405�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Spanish translation of Sonata # Copyright (C) 2007 Scott Horowitz # This file is distributed under the same license as the Sonata package. # Scott Horowitz <stonecrest@gmail.com> 2007. # Xoan Sampaiño <xoansampainho@gmail.com> # # msgid "" msgstr "" "Project-Id-Version: Sonata 1.6\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-03-22 22:01-0600\n" "PO-Revision-Date: 2009-03-24 10:01+0100\n" "Last-Translator: Xoan Sampaiño <xoansampainho@gmail.com>\n" "Language-Team: Spanish <es@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. define the shortcuts and their descriptions #. these are all gettextable #: .././sonata/about.py:52 msgid "About Sonata" msgstr "A_cerca de Sonata" #: .././sonata/about.py:53 .././sonata/preferences.py:60 msgid "Preferences" msgstr "Preferencias" #: .././sonata/about.py:54 msgid "Fullscreen Artwork Mode" msgstr "Modo pantalla completa con arte de portada" #: .././sonata/about.py:55 msgid "Switch to [1st-5th] tab" msgstr "Recorrer la [1ª-5ª] pestaña" #: .././sonata/about.py:56 msgid "Connect to MPD" msgstr "Conectar al servidor MPD" #: .././sonata/about.py:57 msgid "Disconnect from MPD" msgstr "Desconectar del servidor MPD" #: .././sonata/about.py:58 msgid "Randomize current playlist" msgstr "Desordenar la lista de reproducción actual" #: .././sonata/about.py:59 msgid "Expand player" msgstr "Expandir reproductor" #: .././sonata/about.py:60 msgid "Switch to previous tab" msgstr "Cambiar a la pestaña anterior" #: .././sonata/about.py:61 msgid "Switch to next tab" msgstr "Cambiar a la pestaña siguiente" #: .././sonata/about.py:62 msgid "Collapse player" msgstr "Colapsar reproductor" #: .././sonata/about.py:63 .././sonata/library.py:86 msgid "Search library" msgstr "Buscar en la biblioteca" #: .././sonata/about.py:64 msgid "Quit" msgstr "Salir" #: .././sonata/about.py:65 msgid "Update entire library" msgstr "Actualizar la biblioteca completa" #: .././sonata/about.py:66 msgid "Display popup menu" msgstr "Mostrar el menú contextual" #: .././sonata/about.py:67 msgid "Minimize to system tray (if enabled)" msgstr "Minimizar al área de notificación (si está activado)" #: .././sonata/about.py:69 msgid "Previous track" msgstr "Canción anterior" #: .././sonata/about.py:70 msgid "Next track" msgstr "Siguiente canción" #: .././sonata/about.py:71 msgid "Play/Pause" msgstr "Reproducir/Pausar" #: .././sonata/about.py:72 msgid "Stop" msgstr "Detener" #: .././sonata/about.py:73 msgid "Lower the volume" msgstr "Bajar el volúmen" #: .././sonata/about.py:74 msgid "Raise the volume" msgstr "Subir el volúmen" #: .././sonata/about.py:76 msgid "Play selected song" msgstr "Reproducir la canción seleccionada " #: .././sonata/about.py:77 msgid "Remove selected song(s)" msgstr "Borrar las canciones seleccionadas" #: .././sonata/about.py:78 msgid "Center currently playing song" msgstr "Centrar la canción en reproducción" #: .././sonata/about.py:79 .././sonata/about.py:88 msgid "Edit selected song's tags" msgstr "Editar las etiquetas de las canciones seleccionadas" #: .././sonata/about.py:80 msgid "Save to new playlist" msgstr "Guardar en una lista de reproducción nueva" #: .././sonata/about.py:81 msgid "Clear list" msgstr "Vaciar la lista de reproducción" #: .././sonata/about.py:82 msgid "Randomize list" msgstr "Desordenar la lista de reproducción" #: .././sonata/about.py:84 msgid "Add selected song(s) or enter directory" msgstr "Añadir la/s canción/es seleccionada/s o entrar al directorio" #: .././sonata/about.py:85 msgid "Go to parent directory" msgstr "Ir al directorio superior" #: .././sonata/about.py:86 msgid "Add selected item(s)" msgstr "Añadir el/los elemento/s seleccionado/s" #: .././sonata/about.py:87 msgid "Replace with selected item(s)" msgstr "Reemplazar con el/los elemento/s seleccionado/s" #: .././sonata/about.py:89 msgid "Add selected item(s) and play" msgstr "Añadir el/los elemento/s seleccionado/s y reproducirlo/s" #: .././sonata/about.py:90 msgid "Replace with selected item(s) and play" msgstr "Reemplazar con el/los elemento/s seleccionado/s y reproducirlo/s" #: .././sonata/about.py:91 msgid "Update selected item(s)/path(s)" msgstr "Actualizar el/los elemento/s seleccionado/s" #: .././sonata/about.py:93 .././sonata/about.py:95 msgid "Add selected playlist(s)" msgstr "Añadir la/s lista/s de reproducción seleccionada/s" #: .././sonata/about.py:94 msgid "Remove selected playlist(s)" msgstr "Eliminar la/s lista/s de reproducción seleccionada/s" #: .././sonata/about.py:96 msgid "Replace with selected playlist(s)" msgstr "Reemplazar con la/s lista/s de reproducción seleccionada/s" #: .././sonata/about.py:97 msgid "Add selected playlist(s) and play" msgstr "Añadir la/s lista/s de reproducción seleccionada/s y reproducirla/s" #: .././sonata/about.py:98 msgid "Replace with selected playlist(s) and play" msgstr "" "Reemplazar con la/s lista/s de reproducción seleccionada/s y reproducirla/s" #: .././sonata/about.py:100 .././sonata/about.py:102 msgid "Add selected stream(s)" msgstr "Añadir el/los flujo/s seleccionado/s" #: .././sonata/about.py:101 msgid "Remove selected stream(s)" msgstr "Borrar el/los flujo/s seleccionado/s" #: .././sonata/about.py:103 msgid "Replace with selected stream(s)" msgstr "Reemplazar con el/los flujo/s seleccionado/s" #: .././sonata/about.py:104 msgid "Add selected stream(s) and play" msgstr "Añadir el/los flujo/s seleccionado/s y reproducirlo/s" #: .././sonata/about.py:105 msgid "Replace with selected stream(s) and play" msgstr "Reemplazar con el/los flujo/s seleccionado/s y reproducirlo/s" #: .././sonata/about.py:107 msgid "Edit playing song's tags" msgstr "Editar las etiquetas de la canción en reproducción" #. define the main array- this adds headings to each section of #. shortcuts that will be displayed #: .././sonata/about.py:110 msgid "Main Shortcuts" msgstr "Principales" #: .././sonata/about.py:111 msgid "Playback Shortcuts" msgstr "Reproducción" #: .././sonata/about.py:112 msgid "Current Shortcuts" msgstr "Lista de reproducción actual" #: .././sonata/about.py:113 msgid "Library Shortcuts" msgstr "Biblioteca" #: .././sonata/about.py:114 msgid "Playlist Shortcuts" msgstr "Listas de reproducción" #: .././sonata/about.py:115 msgid "Stream Shortcuts" msgstr "Flujos" #: .././sonata/about.py:116 msgid "Info Shortcuts" msgstr "Información de la canción" #: .././sonata/about.py:117 msgid "Shortcuts" msgstr "Atajos del teclado" #: .././sonata/about.py:153 msgid "An elegant music client for MPD." msgstr "Un cliente elegante de música para MPD." #. Add button to show keybindings: #: .././sonata/about.py:166 msgid "_Shortcuts" msgstr "_Atajos del teclado" #: .././sonata/about.py:177 .././sonata/main.py:3088 #: .././sonata/preferences.py:738 msgid "Unable to launch a suitable browser." msgstr "No se ha podido ejecutar ningún navegador." #: .././sonata/about.py:177 .././sonata/main.py:3088 #: .././sonata/preferences.py:738 msgid "Launch Browser" msgstr "Abrir navegador" #: .././sonata/cli.py:81 msgid "The toggle and popup arguments require D-Bus. Aborting." msgstr "Los argumentos «toogle» y «popup» requieren «D-Bus». " "Abortando." #: .././sonata/cli.py:97 msgid "Version" msgstr "Versión" #: .././sonata/cli.py:98 msgid "Website" msgstr "Sitio web" #: .././sonata/cli.py:103 msgid "Usage: sonata [OPTION]... [COMMAND]..." msgstr "Uso: sonata [OPCIÓN]... [ORDEN]..." #: .././sonata/cli.py:105 msgid "Options" msgstr "Opciones" #: .././sonata/cli.py:106 msgid "Show this help and exit" msgstr "Muestra este mensaje de ayuda y sale" #: .././sonata/cli.py:107 msgid "Popup song notification (requires D-Bus)" msgstr "Mostrar una notificación con la canción (requiere D-Bus)" #: .././sonata/cli.py:108 msgid "Toggles whether the app is minimized" msgstr "Muestra/Oculta la aplicación en" #: .././sonata/cli.py:109 msgid "to tray or visible (requires D-Bus)" msgstr "el área de notificación (requiere D-Bus)" #: .././sonata/cli.py:110 msgid "Don't start app if D-Bus commands fail" msgstr "No iniciar la aplicación si fallan las órdenes de D-Bus" #: .././sonata/cli.py:111 msgid "Show version information and exit" msgstr "Mustra información sobre la versión y sale" #: .././sonata/cli.py:112 msgid "Start app hidden (requires systray)" msgstr "Inicia la aplicación oculta (requiere un área de notificación)" #: .././sonata/cli.py:113 msgid "Start app visible (requires systray)" msgstr "Inicia la aplicación visible (requiere un área de notificación)" #: .././sonata/cli.py:114 msgid "Start with profile [NUM]" msgstr "Iniciar con el perfil [NUM]" #: .././sonata/cli.py:116 msgid "Commands" msgstr "Órdenes" #: .././sonata/cli.py:117 msgid "Play song in playlist" msgstr "Reproduce la canción en la lista de reproducción" #: .././sonata/cli.py:118 msgid "Pause currently playing song" msgstr "Pausa la canción actual en reproducción" #: .././sonata/cli.py:119 msgid "Stop currently playing song" msgstr "Detiene la canción actual en reproducción" #: .././sonata/cli.py:120 msgid "Play next song in playlist" msgstr "Reproduce la siguiente canción en la lista de reproducción" #: .././sonata/cli.py:121 msgid "Play previous song in playlist" msgstr "Reproduce la canción anterior en la lista de reproducción" #: .././sonata/cli.py:122 msgid "Toggle play/pause; plays if stopped" msgstr "Activa/Desactiva la reproducción/pausa; reproduce si está detenido" #: .././sonata/cli.py:123 msgid "Toggle repeat mode" msgstr "Activa/Desactiva el modo de repetición" #: .././sonata/cli.py:124 msgid "Toggle random mode" msgstr "Activa/Desactiva el modo aleatorio" #: .././sonata/cli.py:125 msgid "Display current song info" msgstr "Muestra la información de la canción actual" #: .././sonata/cli.py:126 msgid "Display MPD status" msgstr "Muestra el estado del servidor MPD" #: .././sonata/cli.py:134 #, python-format msgid "Starting Sonata with profile %s..." msgstr "Iniciar Sonata usando el perfil %s..." #: .././sonata/cli.py:136 #, python-format msgid "%d is not an available profile number." msgstr "No hay un perfil disponible con el número %d." #: .././sonata/cli.py:137 .././sonata/cli.py:141 #, python-format msgid "Profile numbers must be between 1 and %d." msgstr "Los números de perfil deben estar comprendidos entre 1 y %d." #: .././sonata/cli.py:140 #, python-format msgid "Python is unable to interpret %s as a number." msgstr "Python no es capaz de interpretar %s como un número." #: .././sonata/cli.py:154 .././sonata/main.py:179 msgid "Default Profile" msgstr "Perfil predeterminado" #: .././sonata/cli.py:154 .././sonata/main.py:179 msgid "by" msgstr "por" #: .././sonata/cli.py:154 .././sonata/main.py:179 msgid "from" msgstr "de" #: .././sonata/cli.py:176 msgid "" "Unable to connect to MPD.\n" "Please check your Sonata preferences or MPD_HOST/MPD_PORT environment " "variables." msgstr "" "No ha sido posible conectar con el servidor MPD.\n" "Por favor, revise las preferencias de Sonata o las variables de entorno " "MPD_HOST y MPD_PORT." #: .././sonata/cli.py:208 .././sonata/info.py:91 .././sonata/info.py:245 #: .././sonata/library.py:49 .././sonata/tagedit.py:125 msgid "Title" msgstr "Título" #: .././sonata/cli.py:209 .././sonata/info.py:91 .././sonata/info.py:246 #: .././sonata/library.py:49 .././sonata/main.py:1184 #: .././sonata/tagedit.py:126 msgid "Artist" msgstr "Artista" #: .././sonata/cli.py:210 .././sonata/info.py:91 .././sonata/info.py:247 #: .././sonata/library.py:49 .././sonata/main.py:1185 .././sonata/main.py:2439 #: .././sonata/tagedit.py:127 msgid "Album" msgstr "Álbum" #: .././sonata/cli.py:211 .././sonata/info.py:91 .././sonata/info.py:248 msgid "Date" msgstr "Fecha" #: .././sonata/cli.py:212 .././sonata/info.py:91 .././sonata/info.py:250 #: .././sonata/main.py:1186 .././sonata/tagedit.py:130 msgid "Track" msgstr "Pista" #: .././sonata/cli.py:213 .././sonata/info.py:91 .././sonata/info.py:249 #: .././sonata/library.py:49 .././sonata/main.py:1189 #: .././sonata/preferences.py:432 .././sonata/tagedit.py:139 msgid "Genre" msgstr "Estilo" #: .././sonata/cli.py:214 .././sonata/info.py:91 .././sonata/info.py:251 #: .././sonata/main.py:1191 msgid "File" msgstr "Fichero" #: .././sonata/cli.py:219 .././sonata/cli.py:221 msgid "Time" msgstr "Tiempo" #: .././sonata/cli.py:222 .././sonata/info.py:91 .././sonata/info.py:244 msgid "Bitrate" msgstr "Tasa de bits" #: .././sonata/cli.py:224 msgid "MPD stopped" msgstr "MPD parado" #: .././sonata/cli.py:228 .././sonata/cli.py:230 .././sonata/cli.py:232 msgid "State" msgstr "Estado" #: .././sonata/cli.py:228 msgid "Playing" msgstr "Reproduciendo" #: .././sonata/cli.py:230 msgid "Paused" msgstr "Pausado" #: .././sonata/cli.py:232 .././sonata/main.py:559 .././sonata/main.py:564 #: .././sonata/main.py:1836 .././sonata/main.py:1847 msgid "Stopped" msgstr "Detenido" #: .././sonata/cli.py:234 .././sonata/cli.py:236 msgid "Repeat" msgstr "Repetir" #: .././sonata/cli.py:234 .././sonata/cli.py:238 msgid "Off" msgstr "Desactivado" #: .././sonata/cli.py:236 .././sonata/cli.py:240 msgid "On" msgstr "Activado" #: .././sonata/cli.py:238 .././sonata/cli.py:240 msgid "Random" msgstr "Aleatorio" #: .././sonata/cli.py:241 msgid "Volume" msgstr "Volúmen" #: .././sonata/cli.py:242 msgid "Crossfade" msgstr "Desvanecimiento" #: .././sonata/cli.py:242 .././sonata/preferences.py:192 msgid "second" msgid_plural "seconds" msgstr[0] "segundo" msgstr[1] "segundos" #: .././sonata/current.py:64 msgid "Filter" msgstr "Filtro" #: .././sonata/dbus_plugin.py:83 msgid "" "Sonata failed to connect to the D-BUS session bus: Unable to determine the " "address of the message bus (try 'man dbus-launch' and 'man dbus-daemon' for " "help)" msgstr "" "Se ha producido un error al conectar con el transporte de la sesión D-Bus: " "No se ha podido determinar la dirección del mensaje de transporte (intente " "'man dbus-launch' y 'man dbus-daemon' para obtener ayuda)." #: .././sonata/dbus_plugin.py:96 msgid "Failed to execute remote commands." msgstr "Ha fallado la ejecución de las órdenes remotas." #: .././sonata/dbus_plugin.py:98 msgid "Starting Sonata instead..." msgstr "Iniciar Sonata en vez de..." #: .././sonata/dbus_plugin.py:100 msgid "Maybe Sonata is not running?" msgstr "Es posible que Sonata no se esté ejecutando." #: .././sonata/dbus_plugin.py:114 msgid "An instance of Sonata is already running. Showing it..." msgstr "Ya se está ejecutando una instancia de Sonata. Mostrar..." #: .././sonata/dbus_plugin.py:120 msgid "Failed to execute remote command." msgstr "Ha fallado la ejecución de la orden remota." #. Song info #: .././sonata/info.py:78 msgid "Song Info" msgstr "Información de la canción" #: .././sonata/info.py:93 msgid "Launch artist in Wikipedia" msgstr "Información sobre el artista en Wikipedia" #: .././sonata/info.py:93 msgid "Launch album in Wikipedia" msgstr "Información sobre el álbum en Wikipedia" #: .././sonata/info.py:127 msgid "Toggle extra tags" msgstr "Muestra/Oculta información extra" #: .././sonata/info.py:130 msgid "Edit song tags" msgstr "Editar las etiquetas de la canción" #. Lyrics #: .././sonata/info.py:140 msgid "Lyrics" msgstr "Letras" #: .././sonata/info.py:152 msgid "Search Lyricwiki.org for lyrics" msgstr "Buscar letras de la canción en Lyricwiki.org" #: .././sonata/info.py:153 msgid "Edit lyrics at Lyricwiki.org" msgstr "Editar la letra de la canción en Lyricwiki.org" #. Album info #: .././sonata/info.py:161 msgid "Album Info" msgstr "Información del álbum" #: .././sonata/info.py:213 .././sonata/info.py:218 msgid "more" msgstr "más" #: .././sonata/info.py:215 msgid "hide" msgstr "menos" #: .././sonata/info.py:281 msgid "edit tags" msgstr "editar etiquetas" #: .././sonata/info.py:308 msgid "Album info not found." msgstr "No se ha encontrado información del álbum." #: .././sonata/info.py:311 msgid "Album name not set." msgstr "No se ha especificado un nombre del álbum." #: .././sonata/info.py:324 msgid "ZSI not found, fetching lyrics support disabled." msgstr "" "No se ha encontrado ZSI, se ha desactivado el soporte para la descarga de " "letras." #: .././sonata/info.py:329 msgid "Artist or song title not set." msgstr "No se han especificado ningún artista o título de la canción." #: .././sonata/info.py:371 msgid "search" msgstr "buscar" #: .././sonata/info.py:372 msgid "edit" msgstr "editar" #: .././sonata/info.py:381 .././sonata/info.py:436 msgid "Lyrics not found" msgstr "No se han encontrado letras" #. Fetch lyrics from lyricwiki.org #: .././sonata/info.py:401 msgid "Fetching lyrics..." msgstr "Obteniendo letras..." #: .././sonata/info.py:411 msgid "Couldn't connect to LyricWiki" msgstr "No se ha podido conectar a LyricWiki" #: .././sonata/info.py:439 msgid "Fetching lyrics failed" msgstr "Ha fallado la obtención de letras" #: .././sonata/library.py:47 msgid "Untagged" msgstr "Sin etiquetar" #: .././sonata/library.py:48 msgid "Various Artists" msgstr "Varios artistas" #: .././sonata/library.py:49 msgid "Filename" msgstr "Nombre del fichero" #: .././sonata/library.py:49 msgid "Everything" msgstr "Todo" #: .././sonata/library.py:52 msgid "Filesystem" msgstr "Sistema de ficheros" #: .././sonata/library.py:53 msgid "Artists" msgstr "Artistas" #: .././sonata/library.py:54 msgid "Albums" msgstr "Álbumes" #: .././sonata/library.py:55 msgid "Genres" msgstr "Estilos" #: .././sonata/library.py:84 msgid "Search terms" msgstr "Términos de búsqueda" #: .././sonata/library.py:90 msgid "End Search" msgstr "Finalizar búsqueda" #: .././sonata/library.py:92 msgid "Library browsing view" msgstr "Vista de la biblioteca" #: .././sonata/library.py:96 msgid "Search" msgstr "Buscar" #. Show text: #: .././sonata/library.py:761 .././sonata/main.py:1763 #: .././sonata/main.py:3331 msgid "song" msgid_plural "songs" msgstr[0] "canción" msgstr[1] "canciones" #: .././sonata/library.py:761 .././sonata/main.py:1757 msgid "minute" msgid_plural "minutes" msgstr[0] "minuto" msgstr[1] "minutos" #: .././sonata/library.py:849 msgid "Song" msgstr "canción" #: .././sonata/library.py:849 .././sonata/main.py:1190 msgid "Path" msgstr "Ruta" #. Constants #: .././sonata/main.py:102 msgid "Current" msgstr "Actual" #: .././sonata/main.py:103 msgid "Library" msgstr "Biblioteca" #: .././sonata/main.py:104 msgid "Playlists" msgstr "Listas de reproducción" #: .././sonata/main.py:105 msgid "Streams" msgstr "Flujos" #: .././sonata/main.py:106 msgid "Info" msgstr "Información de la canción" #: .././sonata/main.py:137 .././sonata/preferences.py:193 #: .././sonata/preferences.py:194 msgid "Entire song" msgstr "Toda la canción" #: .././sonata/main.py:234 msgid "_Sort List" msgstr "_Ordenar lista de reproducción" #: .././sonata/main.py:235 msgid "Sa_ve List to" msgstr "Guardar lista de reproducción en" #: .././sonata/main.py:236 msgid "_Connection" msgstr "Conexión" #: .././sonata/main.py:237 msgid "P_lay after" msgstr "Reproducir después" #: .././sonata/main.py:238 .././sonata/main.py:2454 msgid "_Update" msgstr "_Actualizar" #: .././sonata/main.py:239 msgid "Use _Remote Image..." msgstr "Usar imagen _remota..." #: .././sonata/main.py:240 msgid "Use _Local Image..." msgstr "Usar imagen _local..." #: .././sonata/main.py:241 msgid "_Fullscreen Mode" msgstr "_Pantalla completa" #: .././sonata/main.py:242 msgid "Reset Image" msgstr "Revertir imagen" #: .././sonata/main.py:243 msgid "_Play" msgstr "_Reproducir" #: .././sonata/main.py:244 msgid "Pa_use" msgstr "Pa_usar" #: .././sonata/main.py:245 msgid "_Stop" msgstr "_Detener" #: .././sonata/main.py:246 msgid "Pre_vious" msgstr "_Anterior" #: .././sonata/main.py:247 msgid "_Next" msgstr "Si_guiente" #: .././sonata/main.py:248 msgid "_Quit" msgstr "_Salir" #: .././sonata/main.py:249 msgid "_Remove" msgstr "_Quitar" #: .././sonata/main.py:250 msgid "_Clear" msgstr "_Limpiar" #: .././sonata/main.py:251 msgid "_Entire Library" msgstr "Toda la bibliot_eca" #: .././sonata/main.py:252 msgid "_Selected Items" msgstr "Elementos _seleccionados" #: .././sonata/main.py:253 msgid "_Preferences..." msgstr "_Preferencias..." #: .././sonata/main.py:254 msgid "_About..." msgstr "A_cerca de..." #: .././sonata/main.py:255 msgid "_Edit Tags..." msgstr "_Editar etiquetas..." #: .././sonata/main.py:256 msgid "_Add" msgstr "_Añadir" #: .././sonata/main.py:257 msgid "_Replace" msgstr "_Reemplazar" #: .././sonata/main.py:258 msgid "Add" msgstr "Añadir" #: .././sonata/main.py:259 msgid "Replace" msgstr "Reemplazar" #: .././sonata/main.py:260 msgid "_Delete..." msgstr "_Borrar..." #: .././sonata/main.py:261 msgid "Shuffle" msgstr "Mezclar" #: .././sonata/main.py:286 msgid "S_how Sonata" msgstr "_Mostrar Sonata" #: .././sonata/main.py:287 msgid "_Repeat" msgstr "_Repetir" #: .././sonata/main.py:288 msgid "Rando_m" msgstr "Alea_torio" #: .././sonata/main.py:428 msgid "By Artist" msgstr "Por artista" #: .././sonata/main.py:429 msgid "By Album" msgstr "Por álbum" #: .././sonata/main.py:430 msgid "By Song Title" msgstr "Por título" #: .././sonata/main.py:431 msgid "By File Name" msgstr "Por nombre del fichero" #: .././sonata/main.py:432 msgid "By Dir & File Name" msgstr "Por directorio y nombre del fichero" #: .././sonata/main.py:433 msgid "Reverse List" msgstr "Invertir" #: .././sonata/main.py:456 .././sonata/main.py:467 msgid "_New..." msgstr "_Nuevo..." #: .././sonata/main.py:457 msgid "_Edit..." msgstr "_Editar..." #: .././sonata/main.py:468 msgid "_Rename..." msgstr "_Renombrar..." #: .././sonata/main.py:530 .././sonata/main.py:597 .././sonata/main.py:598 msgid "Playlist" msgstr "Lista de reproducción" #: .././sonata/main.py:560 .././sonata/main.py:1840 .././sonata/main.py:2049 msgid "Click to expand" msgstr "Pulsar para expandir" #: .././sonata/main.py:565 .././sonata/main.py:1838 .././sonata/main.py:2047 msgid "Click to collapse" msgstr "Pulsar para colapsar" #: .././sonata/main.py:570 .././sonata/main.py:1732 .././sonata/main.py:1843 msgid "Not Connected" msgstr "No conectado" #: .././sonata/main.py:572 .././sonata/main.py:1730 .././sonata/main.py:1845 msgid "No Read Permission" msgstr "Sin permisos de lectura" #: .././sonata/main.py:645 msgid "Cover Art" msgstr "Arte de _portada" #: .././sonata/main.py:850 .././sonata/main.py:863 .././sonata/main.py:884 msgid "Profile" msgstr "Perfil" #: .././sonata/main.py:863 .././sonata/main.py:864 .././sonata/main.py:884 msgid "MPD_HOST/PORT" msgstr "Servidor y puerto de MPD" #: .././sonata/main.py:865 .././sonata/main.py:871 msgid "Disconnect" msgstr "Desconectar" #: .././sonata/main.py:1187 .././sonata/main.py:1194 msgid "#" msgstr "#" #: .././sonata/main.py:1188 .././sonata/preferences.py:431 #: .././sonata/tagedit.py:128 msgid "Year" msgstr "Año" #: .././sonata/main.py:1192 msgid "Stream" msgstr "Flujo" #: .././sonata/main.py:1193 msgid "Len" msgstr "Duración" #: .././sonata/main.py:1214 .././sonata/main.py:1221 .././sonata/main.py:1262 #: .././sonata/main.py:1269 msgid "Unknown" msgstr "Desconocido" #: .././sonata/main.py:1753 msgid "day" msgid_plural "days" msgstr[0] "día" msgstr[1] "días" #: .././sonata/main.py:1761 msgid "hour" msgid_plural "hours" msgstr[0] "hora" msgstr[1] "horas" #: .././sonata/main.py:1766 .././sonata/main.py:1768 msgid "and" msgstr "y" #: .././sonata/main.py:1776 msgid "(updating mpd)" msgstr "(actualizando biblioteca)" #: .././sonata/main.py:2116 msgid "Lyrics Search" msgstr "Búsqueda de letras" #: .././sonata/main.py:2117 msgid "_Search" msgstr "_Buscar" #: .././sonata/main.py:2120 msgid "Artist Name" msgstr "Nombre del artista" #: .././sonata/main.py:2125 msgid "Song Title" msgstr "Título de la canción" #: .././sonata/main.py:2377 msgid "Open Image" msgstr "Abrir imagen" #: .././sonata/main.py:2379 msgid "Images" msgstr "Imágenes" #: .././sonata/main.py:2383 msgid "All files" msgstr "Todos los ficheros" #: .././sonata/main.py:2425 msgid "Choose Cover Art" msgstr "Seleccione arte de portada" #: .././sonata/main.py:2426 msgid "C_hoose" msgstr "S_eleccione" #: .././sonata/main.py:2459 msgid "Edit search terms" msgstr "Editar términos de búsqueda" #: .././sonata/main.py:2516 msgid "No artist or album name found." msgstr "No se han encontrado artista o nombre del álbum." #: .././sonata/main.py:2519 msgid "No cover art found." msgstr "No se ha encontrado arte de portada." #: .././sonata/main.py:2843 msgid "Delete the selected playlist?" msgid_plural "Delete the selected playlists?" msgstr[0] "¿Borrar la lista de reproducción seleccionada?" msgstr[1] "¿Borrar las listas de reproducción seleccionadas?" #: .././sonata/main.py:2843 msgid "Delete Playlist" msgid_plural "Delete Playlists" msgstr[0] "Borrar lista de reproducción" msgstr[1] "Borrar listas de reproducción" #: .././sonata/main.py:2851 msgid "Delete the selected stream?" msgid_plural "Delete the selected streams?" msgstr[0] "¿Borrar el flujo seleccionado?" msgstr[1] "¿Borrar los flujos seleccionados?" #: .././sonata/main.py:2851 msgid "Delete Stream" msgid_plural "Delete Streams" msgstr[0] "Borrar flujo" msgstr[1] "Borrar flujos" #: .././sonata/main.py:2909 msgid "" "To save lyrics to the music file's directory, you must specify a valid music " "directory." msgstr "" "Para guardar las letras en el directorio de los ficheros de música, debe " "especificar un directorio de música válido." #: .././sonata/main.py:2909 .././sonata/main.py:2916 msgid "Music Dir Verification" msgstr "Verificación del directorio de música" #: .././sonata/main.py:2916 msgid "" "To save artwork to the music file's directory, you must specify a valid " "music directory." msgstr "" "Para guardar los ficheros de arte de portada en el directorio de los " "ficheros de música, debe especificar un directorio de música válido." #: .././sonata/main.py:3332 msgid "album" msgid_plural "albums" msgstr[0] "álbum" msgstr[1] "álbumes" #: .././sonata/main.py:3333 msgid "artist" msgid_plural "artists" msgstr[0] "artista" msgstr[1] "artistas" #: .././sonata/main.py:3340 msgid "day of bliss" msgid_plural "days of bliss" msgstr[0] "día de música" msgstr[1] "días de música" #: .././sonata/main.py:3342 msgid "hour of bliss" msgid_plural "hours of bliss" msgstr[0] "hora de música." msgstr[1] "horas de música." #: .././sonata/playlists.py:103 .././sonata/playlists.py:105 msgid "Save Playlist" msgstr "Guardar lista de reproducción" #: .././sonata/playlists.py:120 msgid "Would you like to replace the existing playlist or append these songs?" msgstr "" "¿Desea reempleazar la lista de reproducción existente o añadirle estas " "canciones?" #: .././sonata/playlists.py:120 msgid "Existing Playlist" msgstr "Lista de reproducción existente" #: .././sonata/playlists.py:120 msgid "Replace playlist" msgstr "Reemplazar lista de reproducción" #: .././sonata/playlists.py:120 msgid "Append songs" msgstr "Añadir canciones" #: .././sonata/playlists.py:141 msgid "A playlist with this name already exists. Would you like to replace it?" msgstr "" "Ya existe una lista de reproducción con ese nombre. ¿Desea reemplazarla?" #: .././sonata/playlists.py:153 msgid "Playlist name" msgstr "Nombre de la lista de reproducción" #: .././sonata/playlists.py:182 .././sonata/playlists.py:186 msgid "Rename Playlist" msgstr "Renombrar lista de reproducción" #. Constants: #: .././sonata/preferences.py:35 msgid "System tray" msgstr "En el área de notificación" #: .././sonata/preferences.py:35 msgid "Top Left" msgstr "Arriba a la izquierda" #: .././sonata/preferences.py:35 msgid "Top Right" msgstr "Arriba a la derecha" #: .././sonata/preferences.py:35 msgid "Bottom Left" msgstr "Abajo a la izquierda" #: .././sonata/preferences.py:35 msgid "Bottom Right" msgstr "Abajo a la derecha" #: .././sonata/preferences.py:35 msgid "Screen Center" msgstr "En el centro de la pantalla" #. MPD tab #: .././sonata/preferences.py:64 msgid "MPD Connection" msgstr "Conexión" #: .././sonata/preferences.py:76 msgid "_Name" msgstr "_Nombre" #: .././sonata/preferences.py:79 msgid "_Host" msgstr "Ser_vidor" #: .././sonata/preferences.py:82 msgid "_Port" msgstr "_Puerto" #: .././sonata/preferences.py:86 msgid "_Music dir" msgstr "Directorio de _música" #: .././sonata/preferences.py:87 msgid "Select a Music Directory" msgstr "Seleccione un directorio de música" #: .././sonata/preferences.py:91 msgid "Pa_ssword" msgstr "Contra_seña" #: .././sonata/preferences.py:94 msgid "Leave blank if no password is required." msgstr "Deje en blanco si no se requiere contraseña." #: .././sonata/preferences.py:95 msgid "_Autoconnect on start" msgstr "Conectar _automáticamente al iniciar" #: .././sonata/preferences.py:113 msgid "Using MPD_HOST/PORT" msgstr "Usando el servidor/puerto de MPD" #: .././sonata/preferences.py:163 .././sonata/preferences.py:536 msgid "Extras" msgstr "Extras" #: .././sonata/preferences.py:168 msgid "_Audioscrobbling (Last.fm)" msgstr "_Informe de canción en Last.fm" #: .././sonata/preferences.py:170 msgid "_Username:" msgstr "Nombre de _usuario:" #: .././sonata/preferences.py:171 msgid "_Password:" msgstr "_Contraseña:" #: .././sonata/preferences.py:188 msgid "Popup _notification on song changes" msgstr "Mostrar una _notificación al cambiar de canción" #: .././sonata/preferences.py:210 msgid "Fade length" msgstr "Duración del desvanecimiento" #: .././sonata/preferences.py:211 msgid "_Fade length" msgstr "Duración del _desvanecimiento" #: .././sonata/preferences.py:213 msgid "sec" msgstr "segundos" #: .././sonata/preferences.py:218 msgid "C_rossfade" msgstr "D_esvanecimiento" #. Display tab #: .././sonata/preferences.py:246 .././sonata/preferences.py:533 msgid "Display" msgstr "Mostrar" #: .././sonata/preferences.py:251 msgid "_Album art" msgstr "_Arte de portada" #: .././sonata/preferences.py:253 msgid "Standard" msgstr "Normal" #: .././sonata/preferences.py:253 msgid "Stylized" msgstr "Estilizado" #: .././sonata/preferences.py:256 msgid "Artwork style:" msgstr "Estilo del arte de portada" #: .././sonata/preferences.py:258 msgid "Local only" msgstr "Sólo local" #: .././sonata/preferences.py:258 msgid "Local and remote" msgstr "Local y remota" #: .././sonata/preferences.py:260 msgid "Search locations:" msgstr "Lugares de búsqueda:" #: .././sonata/preferences.py:267 .././sonata/preferences.py:289 msgid "SONG_DIR" msgstr "SONG_DIR" #: .././sonata/preferences.py:269 msgid "custom" msgstr "personalizado" #: .././sonata/preferences.py:274 msgid "Save art to:" msgstr "Guardar arte de portada en:" #: .././sonata/preferences.py:277 msgid "_Playback/volume buttons" msgstr "Botones de re_producción/volúmen" #: .././sonata/preferences.py:280 msgid "Pr_ogressbar" msgstr "Barra de pr_ogreso" #: .././sonata/preferences.py:283 msgid "_Statusbar" msgstr "Barra de e_stado" #: .././sonata/preferences.py:286 msgid "Song Ly_rics" msgstr "Let_ras de la canción" #: .././sonata/preferences.py:288 msgid "Save lyrics to:" msgstr "Guardar letras en:" #: .././sonata/preferences.py:297 msgid "System _tray icon" msgstr "Icono del área de no_tificación" #. Behavior tab #: .././sonata/preferences.py:319 msgid "Window Behavior" msgstr "Comportamiento de la ventana" #: .././sonata/preferences.py:323 msgid "_Show window on all workspaces" msgstr "Mo_strar la ventana en todas las áreas de trabajo" #: .././sonata/preferences.py:326 msgid "_Keep window above other windows" msgstr "_Mantener la ventana por encima del resto de ventanas" #: .././sonata/preferences.py:329 msgid "_Hide window titlebar" msgstr "_Ocultar la barra de título de la ventana" #: .././sonata/preferences.py:334 msgid "_Minimize to system tray on close/escape" msgstr "_Minimizar al área de notificación al cerrar la ventana" #: .././sonata/preferences.py:336 msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, so " "only check this if you have one." msgstr "" "Si está activado, Sonata se minimizará al área de notificación al cerrar la " "ventana. Actualmente es imposible detectar si hay o no un área de " "notificación, por lo tanto, compruebe que al menos tiene una." #: .././sonata/preferences.py:350 msgid "Miscellaneous" msgstr "Miscelánea" #: .././sonata/preferences.py:354 msgid "_Update MPD library on start" msgstr "Act_ualizar la biblioteca al iniciar" #: .././sonata/preferences.py:356 msgid "" "If enabled, Sonata will automatically update your MPD library when it starts " "up." msgstr "" "Si está activado, Sonata actualizará automáticamente su biblioteca cuando se " "inicie." #: .././sonata/preferences.py:358 msgid "S_top playback on exit" msgstr "De_tener la reproducción al salir" #: .././sonata/preferences.py:360 msgid "" "MPD allows playback even when the client is not open. If enabled, Sonata " "will behave like a more conventional music player and, instead, stop " "playback upon exit." msgstr "" "MPD permite que continúe la reproducción aunque ningún cliente esté abierto. " "Si está activado, Sonata se comportará como un reproductor de música " "convencional y detendrá la reproducción al salir." #: .././sonata/preferences.py:362 msgid "_Write status file:" msgstr "_Escribir fichero de estado:" #: .././sonata/preferences.py:364 .././sonata/preferences.py:366 msgid "" "If enabled, Sonata will create a xmms-infopipe like file containing " "information about the current song. Many applications support the xmms-info " "file (Instant Messengers, IRC Clients...)" msgstr "" "Si está activado, Sonata creará un fichero del tipo xmms-infopipe que " "contendrá información sobre la canción en reproducción. Muchas aplicaciones " "tienen soporte para el fichero xmms-info (cliente de mensajería instantánea, " "clientes de IRC, ...)." #. Format tab #: .././sonata/preferences.py:392 msgid "Song Formatting" msgstr "Formato de la canción" #: .././sonata/preferences.py:397 msgid "C_urrent playlist:" msgstr "Lista de reproducción act_ual" #: .././sonata/preferences.py:398 msgid "_Library:" msgstr "Bib_lioteca" #: .././sonata/preferences.py:399 msgid "_Window title:" msgstr "Título de la _ventana:" #: .././sonata/preferences.py:400 msgid "Current _song line 1:" msgstr "Primera línea de la _canción actual:" #: .././sonata/preferences.py:402 msgid "Current s_ong line 2:" msgstr "Segunda línea de la c_anción actual:" #: .././sonata/preferences.py:422 msgid "Available options" msgstr "Opciones disponibles" #. XXX get these directly from the formatting function: #: .././sonata/preferences.py:426 msgid "Artist name" msgstr "Nombre del artista" #: .././sonata/preferences.py:427 msgid "Album name" msgstr "Nombre del álbum" #: .././sonata/preferences.py:428 msgid "Track name" msgstr "Nombre de pista" #: .././sonata/preferences.py:429 msgid "Track number" msgstr "Número de pista" #: .././sonata/preferences.py:430 msgid "Disc number" msgstr "Número de disco" #: .././sonata/preferences.py:433 msgid "File path" msgstr "Ruta del fichero" #: .././sonata/preferences.py:434 msgid "File name" msgstr "Nombre del fichero" #: .././sonata/preferences.py:435 .././sonata/streams.py:109 msgid "Stream name" msgstr "Nombre del flujo" #: .././sonata/preferences.py:436 msgid "Song length" msgstr "Duración" #: .././sonata/preferences.py:437 msgid "Elapsed time (title only)" msgstr "Tiempo restante (sólo para el título de la ventana)" #: .././sonata/preferences.py:448 msgid "Info displayed only if all enclosed tags are defined" msgstr "" "Información mostrada sólo si todas las etiquetas encerradas están definidas" #: .././sonata/preferences.py:448 msgid "Creates columns in the current playlist" msgstr "Crear columnas en la lista de reproducción actual" #: .././sonata/preferences.py:473 msgid "_About" msgstr "A_cerca de..." #: .././sonata/preferences.py:474 msgid "_Configure..." msgstr "_Configurar..." #: .././sonata/preferences.py:513 msgid "Loaded" msgstr "Cargado" #: .././sonata/preferences.py:521 msgid "Description" msgstr "Descripción" #. Set up table #: .././sonata/preferences.py:532 msgid "_MPD" msgstr "_MPD" #: .././sonata/preferences.py:534 msgid "Behavior" msgstr "Comportamiento" #: .././sonata/preferences.py:535 msgid "Format" msgstr "Formato" #: .././sonata/preferences.py:605 msgid "New Profile" msgstr "Perfil nuevo" #. Prompt user for playlist name: #: .././sonata/preferences.py:659 msgid "Custom Artwork" msgstr "Arte de portada personalizado" #: .././sonata/preferences.py:661 msgid "Artwork filename" msgstr "Nombre del fichero del arte de portada" #: .././sonata/streams.py:105 msgid "Edit Stream" msgstr "Editar flujo" #: .././sonata/streams.py:107 .././sonata/streams.py:138 msgid "New Stream" msgstr "Nuevo flujo" #: .././sonata/streams.py:116 msgid "Stream URL" msgstr "URL del flujo" #: .././sonata/streams.py:138 msgid "A stream with this name already exists. Would you like to replace it?" msgstr "Ya existe un flujo con ese nombre. ¿Desea reemplazarlo?" #: .././sonata/tagedit.py:61 msgid "Taglib and/or tagpy not found, tag editing support disabled." msgstr "" "No se han encontrado taglib y/o tagpy, se ha desactivado el soporte para la " "edición de etiquetas." #: .././sonata/tagedit.py:61 .././sonata/tagedit.py:70 #: .././sonata/tagedit.py:75 .././sonata/tagedit.py:99 #: .././sonata/tagedit.py:103 .././sonata/tagedit.py:260 #: .././sonata/tagedit.py:299 msgid "Edit Tags" msgstr "Editar etiquetas" #: .././sonata/tagedit.py:70 msgid "" "Tagpy version < 0.91. Please upgrade to a newer version, tag editing support " "disabled." msgstr "" "Versión de Tagpy < 0.91. Por favor, actualice a una versión superior. " "El soporte para la edición de etiquetas ha sido desactivado." #: .././sonata/tagedit.py:75 msgid "The path" msgstr "La ruta" #: .././sonata/tagedit.py:75 msgid "does not exist. Please specify a valid music directory in preferences." msgstr "" "no existe. Por favor, especifique un directorio de música válido en las " "preferencias." #: .././sonata/tagedit.py:99 msgid "File " msgstr "Fichero" #: .././sonata/tagedit.py:99 msgid " not found. Please specify a valid music directory in preferences." msgstr "" " no encontrado. Por favor, especifique un directorio de música válido en las " "preferencias." #: .././sonata/tagedit.py:103 msgid "No music files with editable tags found." msgstr "No se han encontrado ficheros con etiquetas editables." #: .././sonata/tagedit.py:150 msgid "Comment" msgstr "Comentario" #. Only show save all button if more than one song being edited. #: .././sonata/tagedit.py:161 msgid "Save _All" msgstr "Gu_ardar todo" #: .././sonata/tagedit.py:207 msgid "Increment each selected music file, starting at track 1 for this file." msgstr "" "Incrementar en cada fichero de música seleccionado, comenzando con la pista " "1 para este fichero." #: .././sonata/tagedit.py:209 msgid "Apply to all selected music files." msgstr "Aplicar a todos los ficheros de música seleccionados." #: .././sonata/tagedit.py:260 msgid "of" msgstr "de" #. FIXME: was (save_success and self.conn and self.status): #: .././sonata/tagedit.py:299 msgid "Unable to save tag to music file." msgstr "No se ha podido escribir la etiqueta en el fichero de música." #: .././sonata/tagedit.py:366 msgid "Hide file path" msgstr "Ocultar la ruta al fichero" #: .././sonata/tagedit.py:369 msgid "Show file path" msgstr "Mostrar la ruta al fichero" #~ msgid "The popup argument requires D-Bus. Aborting." #~ msgstr "El argumento -p, --popup requiere D-Bus. Abortando." #, fuzzy #~ msgid "_Update Path" #~ msgstr "_Actualizar" #~ msgid "Website: http://www.nongnu.org/sonata/" #~ msgstr "Sitio web: http://www.nongnu.org/sonata/" #~ msgid "Enable Audioscrobbler" #~ msgstr "Habilitar informe de canción" #~ msgid "Enable Crossfade" #~ msgstr "Habilitar desvanecimiento" #~ msgid "Enable album art" #~ msgstr "Mostrar arte de portada" #~ msgid "Enable lyrics" #~ msgstr "Mostrar letras" #~ msgid "Enable system tray icon" #~ msgstr "Mostrar icono en el área de notificación" #~ msgid "_Display" #~ msgstr "_Mostrar" #~ msgid "_Extras" #~ msgstr "_Extras" #~ msgid "" #~ "PyGTK+ 2.10 or gnome-python-extras not found, system tray support " #~ "disabled." #~ msgstr "" #~ "No se ha encontrado PyGTK+2.10 o gnome-python-extras, se ha desactivado " #~ "el soporte para el icono del área de notificación." #~ msgid "Reset to Default" #~ msgstr "Restaurar imagen original" #~ msgid "_New Playlist..." #~ msgstr "Lista de reproducción _nueva..." #~ msgid "Notification" #~ msgstr "Notificación" #~ msgid "" #~ "Python 2.5 or python-elementtree not found, audioscrobbler support " #~ "disabled." #~ msgstr "" #~ "No se ha encontrado Python 2.5 o python-elementree, se ha desactivado el " #~ "soporte para el informe de canción." #~ msgid "Audioscrobbler Verification" #~ msgstr "Verificación del informe de canción" #~ msgid "Update library for selected item(s)" #~ msgstr "Actualizar la biblioteca para el/los elemento/s seleccionado/s" #~ msgid "_Shuffle" #~ msgstr "_Mezclar" #~ msgid "Toggle shuffle mode" #~ msgstr "Activa/Desactiva el modo de mezclado" #~ msgid "Not connected" #~ msgstr "No conectado" #~ msgid "Press enter to search for these terms." #~ msgstr "Pulse Intro para buscar por estos términos." #~ msgid "Add new profile" #~ msgstr "Añadir un perfil nuevo" #~ msgid "Remove current profile" #~ msgstr "Eliminar el perfil actual" #~ msgid "Play enqueued files on activate" #~ msgstr "Reproducir los ficheros añadidos al activar" #~ msgid "" #~ "Automatically play enqueued items when activated via double-click or " #~ "enter." #~ msgstr "" #~ "Reproducir automáticamente los ficheros de música añadidos al hacer doble " #~ "click o pulsar Intro." #~ msgid "Add selected song(s) or directory(s)" #~ msgstr "Añadir la/s canción/es o directorio/s seleccionada/do/s" #~ msgid "Replace with selected song(s) or directory(s)" #~ msgstr "Reemplazar con la/s canción/es o directorio/s seleccionada/do/s" #, fuzzy #~ msgid "Add selected song(s) to playlist queue" #~ msgstr "Añadir la/s lista/s de reproducción seleccionada/s" #, fuzzy #~ msgid "Remove selected song(s) from playlist queue" #~ msgstr "Borrar las canciones seleccionadas" #~ msgid "seconds" #~ msgstr "segundos" #~ msgid "Song Info..." #~ msgstr "Información de la canción..." #~ msgid "Click to collapse the player" #~ msgstr "Pulsar para colapsar el reproductor" #~ msgid "Click to expand the player" #~ msgstr "Pulsar para expandir el reproductor" #~ msgid "_Song Info" #~ msgstr "_Información de la canción" #, fuzzy #~ msgid "_Search..." #~ msgstr "_Finalizar búsqueda" #~ msgid "Remote only" #~ msgstr "Sólo remota" #~ msgid "Remote, then local" #~ msgstr "Remota, y luego local" #~ msgid "To save artwork as" #~ msgstr "Para guardar el arte de portada como" #~ msgid "Artwork Verification" #~ msgstr "Verificación del arte de portada" #~ msgid "Switch to current playlist" #~ msgstr "Cambiar vista a la lista de reproducción actual" #~ msgid "Toggle filter bar for jumping straight to track" #~ msgstr "Mostrar/Ocultar la barra de filtro" #~ msgid "Song name" #~ msgstr "Nombre de la canción" #~ msgid "songs." #~ msgstr "canciones." #~ msgid "Enable" #~ msgstr "Habilitar" #~ msgid "C_onnect" #~ msgstr "C_onectar" #~ msgid "last.fm" #~ msgstr "Last.fm" #~ msgid "Dis_play" #~ msgstr "Mo_strar" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/po/et.po�������������������������������������������������������������������������������0000664�0000000�0000000�00000110532�13771420143�0014376�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Song - lugu # Track - rada # # Estonian translation of Sonata. # Copyright (C) 2008 THE Sonata'S COPYRIGHT HOLDER # This file is distributed under the same license as the Sonata package. # mihkel <turakas@gmail.com>, 2008. msgid "" msgstr "" "Project-Id-Version: Sonata 1.6\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-03-22 22:01-0600\n" "PO-Revision-Date: 2009-03-23 12:33+0200\n" "Last-Translator: mihkel <turakas@gmail.com>\n" "Language-Team: Estonian <et@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. define the shortcuts and their descriptions #. these are all gettextable #: .././sonata/about.py:52 msgid "About Sonata" msgstr "Sonatast" #: .././sonata/about.py:53 .././sonata/preferences.py:60 msgid "Preferences" msgstr "Seaded" #: .././sonata/about.py:54 msgid "Fullscreen Artwork Mode" msgstr "Täisekraan kaanepiltidega" #: .././sonata/about.py:55 msgid "Switch to [1st-5th] tab" msgstr "Vaheta kaarte [1-5]" #: .././sonata/about.py:56 msgid "Connect to MPD" msgstr "Ühenda MPD-ga" #: .././sonata/about.py:57 msgid "Disconnect from MPD" msgstr "Ühenda MPD-st lahti" #: .././sonata/about.py:58 msgid "Randomize current playlist" msgstr "Aktiivne esitusloend juhuslikuks" #: .././sonata/about.py:59 msgid "Expand player" msgstr "Laienda mängija akent" #: .././sonata/about.py:60 msgid "Switch to previous tab" msgstr "Mine eelmisele kaardile" #: .././sonata/about.py:61 msgid "Switch to next tab" msgstr "Mine järgmisele kaardile" #: .././sonata/about.py:62 msgid "Collapse player" msgstr "Ahenda mängija akent" #: .././sonata/about.py:63 .././sonata/library.py:86 msgid "Search library" msgstr "Otsi muusikakogust" #: .././sonata/about.py:64 msgid "Quit" msgstr "Sulge" #: .././sonata/about.py:65 msgid "Update entire library" msgstr "Värskenda muusikakogu" #: .././sonata/about.py:66 msgid "Display popup menu" msgstr "Kuva hüpikmenüüd" #: .././sonata/about.py:67 msgid "Minimize to system tray (if enabled)" msgstr "Minimeeri salve (kui lubatud)" #: .././sonata/about.py:69 msgid "Previous track" msgstr "Eelmine rada" #: .././sonata/about.py:70 msgid "Next track" msgstr "Järgmine rada" #: .././sonata/about.py:71 msgid "Play/Pause" msgstr "Esita/Paus" #: .././sonata/about.py:72 msgid "Stop" msgstr "Stop" #: .././sonata/about.py:73 msgid "Lower the volume" msgstr "Helitase madalamaks" #: .././sonata/about.py:74 msgid "Raise the volume" msgstr "Helitase valjemaks" #: .././sonata/about.py:76 msgid "Play selected song" msgstr "Esita valitud lugu" #: .././sonata/about.py:77 msgid "Remove selected song(s)" msgstr "Eemalda valitud lugu/lood" #: .././sonata/about.py:78 msgid "Center currently playing song" msgstr "Hetkel mängiv lugu alati keskele" #: .././sonata/about.py:79 .././sonata/about.py:88 msgid "Edit selected song's tags" msgstr "Muuda valitud lugude silte" #: .././sonata/about.py:80 msgid "Save to new playlist" msgstr "Salvesta uude esitusloendisse" #: .././sonata/about.py:81 msgid "Clear list" msgstr "Puhasta nimekiri" #: .././sonata/about.py:82 msgid "Randomize list" msgstr "Juhuslik esitusloend" #: .././sonata/about.py:84 msgid "Add selected song(s) or enter directory" msgstr "Lisa valitud lood või sisesta kataloog" #: .././sonata/about.py:85 msgid "Go to parent directory" msgstr "Mine ülemisse kataloogi" #: .././sonata/about.py:86 msgid "Add selected item(s)" msgstr "Lisa valitud vood" #: .././sonata/about.py:87 msgid "Replace with selected item(s)" msgstr "Asenda valitud voogudega" #: .././sonata/about.py:89 msgid "Add selected item(s) and play" msgstr "Lisa valitud vood ja esita" #: .././sonata/about.py:90 msgid "Replace with selected item(s) and play" msgstr "Asenda valitud voogudega ja esita" #: .././sonata/about.py:91 msgid "Update selected item(s)/path(s)" msgstr "Uuenda valitud elementide radu" #: .././sonata/about.py:93 .././sonata/about.py:95 msgid "Add selected playlist(s)" msgstr "Lisa valitud esitusloendid" #: .././sonata/about.py:94 msgid "Remove selected playlist(s)" msgstr "Eemalda valitud esitusnimekirjad" #: .././sonata/about.py:96 msgid "Replace with selected playlist(s)" msgstr "Asenda valitud esitusnimekirjadega" #: .././sonata/about.py:97 msgid "Add selected playlist(s) and play" msgstr "Lisa valitud esitusloendid ja esita" #: .././sonata/about.py:98 msgid "Replace with selected playlist(s) and play" msgstr "Asenda valitud esitusloenditega ja esita" #: .././sonata/about.py:100 .././sonata/about.py:102 msgid "Add selected stream(s)" msgstr "Lisa valitud vood" #: .././sonata/about.py:101 msgid "Remove selected stream(s)" msgstr "Eemalda valitud vood" #: .././sonata/about.py:103 msgid "Replace with selected stream(s)" msgstr "Asenda valitud voogudega" #: .././sonata/about.py:104 msgid "Add selected stream(s) and play" msgstr "Lisa valitud vood ja esita" #: .././sonata/about.py:105 msgid "Replace with selected stream(s) and play" msgstr "Asenda valitud voogudega ja esita" #: .././sonata/about.py:107 msgid "Edit playing song's tags" msgstr "Muuda esitatavate lugude silte" #. define the main array- this adds headings to each section of #. shortcuts that will be displayed #: .././sonata/about.py:110 msgid "Main Shortcuts" msgstr "Üldised kiirklahvid" #: .././sonata/about.py:111 msgid "Playback Shortcuts" msgstr "Taasesituse kiirklahvid" #: .././sonata/about.py:112 msgid "Current Shortcuts" msgstr "Aktiivsed kiirklahvid" #: .././sonata/about.py:113 msgid "Library Shortcuts" msgstr "Muusikakogu kiirklahvid" #: .././sonata/about.py:114 msgid "Playlist Shortcuts" msgstr "Esitussloendi kiirklahvid" #: .././sonata/about.py:115 msgid "Stream Shortcuts" msgstr "Voo kiirklahvid" #: .././sonata/about.py:116 msgid "Info Shortcuts" msgstr "Kiirklahvide info" #: .././sonata/about.py:117 msgid "Shortcuts" msgstr "Kiirklahvid" #: .././sonata/about.py:153 msgid "An elegant music client for MPD." msgstr "Elegantne klient MPD-le." #. Add button to show keybindings: #: .././sonata/about.py:166 msgid "_Shortcuts" msgstr "_Kiirklahvid" #: .././sonata/about.py:177 .././sonata/main.py:3088 #: .././sonata/preferences.py:738 msgid "Unable to launch a suitable browser." msgstr "Sobiva sirvija käivitamine nurjus." #: .././sonata/about.py:177 .././sonata/main.py:3088 #: .././sonata/preferences.py:738 msgid "Launch Browser" msgstr "Käivita sirvija" #: .././sonata/cli.py:81 msgid "The toggle and popup arguments require D-Bus. Aborting." msgstr "Antud lüliti argument nõuab D-Bus-i. Katkestan." #: .././sonata/cli.py:97 msgid "Version" msgstr "Versioon" #: .././sonata/cli.py:98 msgid "Website" msgstr "Veebileht" #: .././sonata/cli.py:103 msgid "Usage: sonata [OPTION]... [COMMAND]..." msgstr "Kasutamine: sonata [VALIK]... [KÄSK]..." #: .././sonata/cli.py:105 msgid "Options" msgstr "Valikud" #: .././sonata/cli.py:106 msgid "Show this help and exit" msgstr "Näita abiteksti ja välju" #: .././sonata/cli.py:107 msgid "Popup song notification (requires D-Bus)" msgstr "Loo info teavitus hüpikuna (vajalik D-Bus)" #: .././sonata/cli.py:108 msgid "Toggles whether the app is minimized" msgstr "Rakenduse minimeerimise lüliti" #: .././sonata/cli.py:109 msgid "to tray or visible (requires D-Bus)" msgstr "süsteemsesse salve või nähtavale (D-Bus vajalik)" #: .././sonata/cli.py:110 msgid "Don't start app if D-Bus commands fail" msgstr "Ära käivita programmi, kui D-Bus käsud nurjuvad" #: .././sonata/cli.py:111 msgid "Show version information and exit" msgstr "Näita versiooni infot ja välju" #: .././sonata/cli.py:112 msgid "Start app hidden (requires systray)" msgstr "Käivita rakendus peidetult (vajalik süsteemne salv)" #: .././sonata/cli.py:113 msgid "Start app visible (requires systray)" msgstr "Käivita rakendus nähtavana (vajalik süsteemne salv)" #: .././sonata/cli.py:114 msgid "Start with profile [NUM]" msgstr "Käivita, kasutades profiili [NUM]" #: .././sonata/cli.py:116 msgid "Commands" msgstr "Käsud" #: .././sonata/cli.py:117 msgid "Play song in playlist" msgstr "Esita lugu esitusloendis" #: .././sonata/cli.py:118 msgid "Pause currently playing song" msgstr "Seiska hetkel mängiv lugu" #: .././sonata/cli.py:119 msgid "Stop currently playing song" msgstr "Katkest hetkel mängiv lugu" #: .././sonata/cli.py:120 msgid "Play next song in playlist" msgstr "Esita järgmine lugu esitusloendist" #: .././sonata/cli.py:121 msgid "Play previous song in playlist" msgstr "Esita eelmine lugu esitusloendist" #: .././sonata/cli.py:122 msgid "Toggle play/pause; plays if stopped" msgstr "Lülita esita/paus; esitab kui on peatatud" #: .././sonata/cli.py:123 msgid "Toggle repeat mode" msgstr "Lülita kordusrežiim" #: .././sonata/cli.py:124 msgid "Toggle random mode" msgstr "Lülita juhuslik režiim" #: .././sonata/cli.py:125 msgid "Display current song info" msgstr "Näita esitatava loo infot" #: .././sonata/cli.py:126 msgid "Display MPD status" msgstr "Näita MPD staatust" #: .././sonata/cli.py:134 #, python-format msgid "Starting Sonata with profile %s..." msgstr "Käivitan Sonata profiiliga %s..." #: .././sonata/cli.py:136 #, python-format msgid "%d is not an available profile number." msgstr "%d ei ole ühegi profiili number." #: .././sonata/cli.py:137 .././sonata/cli.py:141 #, python-format msgid "Profile numbers must be between 1 and %d." msgstr "Profiili number peab jääma vahemikku 1 ja %d." #: .././sonata/cli.py:140 #, python-format msgid "Python is unable to interpret %s as a number." msgstr "Python ei suutnud tõlgendada %s kui numbrit." #: .././sonata/cli.py:154 .././sonata/main.py:179 msgid "Default Profile" msgstr "Vaikimisi profiil" #: .././sonata/cli.py:154 .././sonata/main.py:179 msgid "by" msgstr "esitaja" #: .././sonata/cli.py:154 .././sonata/main.py:179 msgid "from" msgstr "albumilt" #: .././sonata/cli.py:176 msgid "" "Unable to connect to MPD.\n" "Please check your Sonata preferences or MPD_HOST/MPD_PORT environment " "variables." msgstr "" "Ei saa MPD-ga ühendust.\n" "Kontrolli Sonata seadeid või MPD_HOST/MPD_PORT keskonnamuutujaid." #: .././sonata/cli.py:208 .././sonata/info.py:91 .././sonata/info.py:245 #: .././sonata/library.py:49 .././sonata/tagedit.py:125 msgid "Title" msgstr "Pealkiri" #: .././sonata/cli.py:209 .././sonata/info.py:91 .././sonata/info.py:246 #: .././sonata/library.py:49 .././sonata/main.py:1184 #: .././sonata/tagedit.py:126 msgid "Artist" msgstr "Esitaja" #: .././sonata/cli.py:210 .././sonata/info.py:91 .././sonata/info.py:247 #: .././sonata/library.py:49 .././sonata/main.py:1185 .././sonata/main.py:2439 #: .././sonata/tagedit.py:127 msgid "Album" msgstr "Album" #: .././sonata/cli.py:211 .././sonata/info.py:91 .././sonata/info.py:248 msgid "Date" msgstr "Kuupäev" #: .././sonata/cli.py:212 .././sonata/info.py:91 .././sonata/info.py:250 #: .././sonata/main.py:1186 .././sonata/tagedit.py:130 msgid "Track" msgstr "Rada" #: .././sonata/cli.py:213 .././sonata/info.py:91 .././sonata/info.py:249 #: .././sonata/library.py:49 .././sonata/main.py:1189 #: .././sonata/preferences.py:432 .././sonata/tagedit.py:139 msgid "Genre" msgstr "Stiil" #: .././sonata/cli.py:214 .././sonata/info.py:91 .././sonata/info.py:251 #: .././sonata/main.py:1191 msgid "File" msgstr "Fail" #: .././sonata/cli.py:219 .././sonata/cli.py:221 msgid "Time" msgstr "Aeg" #: .././sonata/cli.py:222 .././sonata/info.py:91 .././sonata/info.py:244 msgid "Bitrate" msgstr "Bitikiirus" #: .././sonata/cli.py:224 msgid "MPD stopped" msgstr "MPD peatatud" #: .././sonata/cli.py:228 .././sonata/cli.py:230 .././sonata/cli.py:232 msgid "State" msgstr "Olek" #: .././sonata/cli.py:228 msgid "Playing" msgstr "Esitan" #: .././sonata/cli.py:230 msgid "Paused" msgstr "Paus" #: .././sonata/cli.py:232 .././sonata/main.py:559 .././sonata/main.py:564 #: .././sonata/main.py:1836 .././sonata/main.py:1847 msgid "Stopped" msgstr "Peatatud" #: .././sonata/cli.py:234 .././sonata/cli.py:236 msgid "Repeat" msgstr "Korda" #: .././sonata/cli.py:234 .././sonata/cli.py:238 msgid "Off" msgstr "Väljas" #: .././sonata/cli.py:236 .././sonata/cli.py:240 msgid "On" msgstr "Sees" #: .././sonata/cli.py:238 .././sonata/cli.py:240 msgid "Random" msgstr "Juhuslik" #: .././sonata/cli.py:241 msgid "Volume" msgstr "Helitase" #: .././sonata/cli.py:242 msgid "Crossfade" msgstr "Siire" #: .././sonata/cli.py:242 .././sonata/preferences.py:192 msgid "second" msgid_plural "seconds" msgstr[0] "sekund" msgstr[1] "sekundit" #: .././sonata/current.py:64 msgid "Filter" msgstr "Filter" #: .././sonata/dbus_plugin.py:83 msgid "" "Sonata failed to connect to the D-BUS session bus: Unable to determine the " "address of the message bus (try 'man dbus-launch' and 'man dbus-daemon' for " "help)" msgstr "" "Sonatal ei õnnestunud D-Bus-ga ühendust saada: Ei suudetud määrata sõnumite " "siini aadressi (ehk ütleb 'man dbus-launch' või 'man-daemon' midagi tarka)" #: .././sonata/dbus_plugin.py:96 msgid "Failed to execute remote commands." msgstr "Käskude käivitamine ebaõnnestus." #: .././sonata/dbus_plugin.py:98 msgid "Starting Sonata instead..." msgstr "Käivitan Sonata..." #: .././sonata/dbus_plugin.py:100 msgid "Maybe Sonata is not running?" msgstr "Võib-olla Sonata ei ole käivitatud?" #: .././sonata/dbus_plugin.py:114 msgid "An instance of Sonata is already running. Showing it..." msgstr "Sonata on juba kävitatud. Näitan..." #: .././sonata/dbus_plugin.py:120 msgid "Failed to execute remote command." msgstr "Käsku käivitamine ebaõnnestus." #. Song info #: .././sonata/info.py:78 msgid "Song Info" msgstr "Loo info" #: .././sonata/info.py:93 msgid "Launch artist in Wikipedia" msgstr "Esitaja info Wikipediast" #: .././sonata/info.py:93 msgid "Launch album in Wikipedia" msgstr "Albumi info Wikipediast" #: .././sonata/info.py:127 msgid "Toggle extra tags" msgstr "Lülita ekstra sildid" #: .././sonata/info.py:130 msgid "Edit song tags" msgstr "Muuda loo silte" #. Lyrics #: .././sonata/info.py:140 msgid "Lyrics" msgstr "Sõnad" #: .././sonata/info.py:152 msgid "Search Lyricwiki.org for lyrics" msgstr "Otsi sõnu Lyricwiki.org-st" #: .././sonata/info.py:153 msgid "Edit lyrics at Lyricwiki.org" msgstr "Muuda laulusõnu Lyricwiki.org-s" #. Album info #: .././sonata/info.py:161 msgid "Album Info" msgstr "Albumi info" #: .././sonata/info.py:213 .././sonata/info.py:218 msgid "more" msgstr "veel" #: .././sonata/info.py:215 msgid "hide" msgstr "peida" #: .././sonata/info.py:281 msgid "edit tags" msgstr "muuda silte" #: .././sonata/info.py:308 msgid "Album info not found." msgstr "Albumi infot ei leitud." #: .././sonata/info.py:311 msgid "Album name not set." msgstr "Albumi nimi seadistamata." #: .././sonata/info.py:324 msgid "ZSI not found, fetching lyrics support disabled." msgstr "Ei leitud ZSI-d, sõnade alla laadimine välja lülitatud." #: .././sonata/info.py:329 msgid "Artist or song title not set." msgstr "Esitaja või loo nimi seadistamata" #: .././sonata/info.py:371 msgid "search" msgstr "otsi" #: .././sonata/info.py:372 msgid "edit" msgstr "muuda" #: .././sonata/info.py:381 .././sonata/info.py:436 msgid "Lyrics not found" msgstr "Sõnu ei leitud" #. Fetch lyrics from lyricwiki.org #: .././sonata/info.py:401 msgid "Fetching lyrics..." msgstr "Otsin sõnu..." #: .././sonata/info.py:411 msgid "Couldn't connect to LyricWiki" msgstr "Ei saanud ühendust LyricWiki-ga" #: .././sonata/info.py:439 msgid "Fetching lyrics failed" msgstr "Sõndade laadimine nurjus" #: .././sonata/library.py:47 msgid "Untagged" msgstr "Siltideta" #: .././sonata/library.py:48 msgid "Various Artists" msgstr "Erinevad esitajad" #: .././sonata/library.py:49 msgid "Filename" msgstr "Faili nimi" #: .././sonata/library.py:49 msgid "Everything" msgstr "Kõik" #: .././sonata/library.py:52 msgid "Filesystem" msgstr "Failisüsteem" #: .././sonata/library.py:53 msgid "Artists" msgstr "Esitajad" #: .././sonata/library.py:54 msgid "Albums" msgstr "Albumid" #: .././sonata/library.py:55 msgid "Genres" msgstr "Stiilid" #: .././sonata/library.py:84 msgid "Search terms" msgstr "Otsingu termineid" #: .././sonata/library.py:90 msgid "End Search" msgstr "Lõpeta otsing" #: .././sonata/library.py:92 msgid "Library browsing view" msgstr "Muusikakogu lehitsemise vaade" #: .././sonata/library.py:96 msgid "Search" msgstr "Otsi" #. Show text: #: .././sonata/library.py:761 .././sonata/main.py:1763 #: .././sonata/main.py:3331 msgid "song" msgid_plural "songs" msgstr[0] "lugu" msgstr[1] "lugu" #: .././sonata/library.py:761 .././sonata/main.py:1757 msgid "minute" msgid_plural "minutes" msgstr[0] "minut" msgstr[1] "minutit" #: .././sonata/library.py:849 msgid "Song" msgstr "Lugu" #: .././sonata/library.py:849 .././sonata/main.py:1190 msgid "Path" msgstr "Asukoht" #. Constants #: .././sonata/main.py:102 msgid "Current" msgstr "Aktiivne" #: .././sonata/main.py:103 msgid "Library" msgstr "Muusikakogu" #: .././sonata/main.py:104 msgid "Playlists" msgstr "Esitusloend" #: .././sonata/main.py:105 msgid "Streams" msgstr "Vood" #: .././sonata/main.py:106 msgid "Info" msgstr "Info" #: .././sonata/main.py:137 .././sonata/preferences.py:193 #: .././sonata/preferences.py:194 msgid "Entire song" msgstr "Terve lugu" #: .././sonata/main.py:234 msgid "_Sort List" msgstr "_Sorteeri nimekirja" #: .././sonata/main.py:235 msgid "Sa_ve List to" msgstr "Sa_lvesta nimekiri" #: .././sonata/main.py:236 msgid "_Connection" msgstr "_Ühendus" #: .././sonata/main.py:237 msgid "P_lay after" msgstr "E_sita hiljem" #: .././sonata/main.py:238 .././sonata/main.py:2454 msgid "_Update" msgstr "_Värskenda" #: .././sonata/main.py:239 msgid "Use _Remote Image..." msgstr "Kasuta _pilti võrgust..." #: .././sonata/main.py:240 msgid "Use _Local Image..." msgstr "Kasuta _kohalikku pilti..." #: .././sonata/main.py:241 msgid "_Fullscreen Mode" msgstr "_Täisekraan" #: .././sonata/main.py:242 msgid "Reset Image" msgstr "Tühista pilt" #: .././sonata/main.py:243 msgid "_Play" msgstr "_Esita" #: .././sonata/main.py:244 msgid "Pa_use" msgstr "Pa_us" #: .././sonata/main.py:245 msgid "_Stop" msgstr "_Stop" #: .././sonata/main.py:246 msgid "Pre_vious" msgstr "_Eelmine" #: .././sonata/main.py:247 msgid "_Next" msgstr "_Järgmine" #: .././sonata/main.py:248 msgid "_Quit" msgstr "_Lõpeta" #: .././sonata/main.py:249 msgid "_Remove" msgstr "_Eemalda" #: .././sonata/main.py:250 msgid "_Clear" msgstr "_Puhasta" #: .././sonata/main.py:251 msgid "_Entire Library" msgstr "_Terve muusikakogu" #: .././sonata/main.py:252 msgid "_Selected Items" msgstr "_Valitud vood" #: .././sonata/main.py:253 msgid "_Preferences..." msgstr "_Eelistused..." #: .././sonata/main.py:254 msgid "_About..." msgstr "_Programmist..." #: .././sonata/main.py:255 msgid "_Edit Tags..." msgstr "_Muuda silte..." #: .././sonata/main.py:256 msgid "_Add" msgstr "_Lisa" #: .././sonata/main.py:257 msgid "_Replace" msgstr "_Asenda" #: .././sonata/main.py:258 msgid "Add" msgstr "Lisa" #: .././sonata/main.py:259 msgid "Replace" msgstr "Asenda" #: .././sonata/main.py:260 msgid "_Delete..." msgstr "_Kustuta..." #: .././sonata/main.py:261 msgid "Shuffle" msgstr "Sega" #: .././sonata/main.py:286 msgid "S_how Sonata" msgstr "_Näita Sonatat" #: .././sonata/main.py:287 msgid "_Repeat" msgstr "_Korda" #: .././sonata/main.py:288 msgid "Rando_m" msgstr "_Juhuslik" #: .././sonata/main.py:428 msgid "By Artist" msgstr "Esitaja järgi" #: .././sonata/main.py:429 msgid "By Album" msgstr "Albumi järgi" #: .././sonata/main.py:430 msgid "By Song Title" msgstr "Loo nime järgi" #: .././sonata/main.py:431 msgid "By File Name" msgstr "Faili nime järgi" #: .././sonata/main.py:432 msgid "By Dir & File Name" msgstr "Kausta ja faili nime järgi" #: .././sonata/main.py:433 msgid "Reverse List" msgstr "Tagurpidi nimekiri" #: .././sonata/main.py:456 .././sonata/main.py:467 msgid "_New..." msgstr "_Uus..." #: .././sonata/main.py:457 msgid "_Edit..." msgstr "_Muuda..." #: .././sonata/main.py:468 msgid "_Rename..." msgstr "_Nimeta ümber..." #: .././sonata/main.py:530 .././sonata/main.py:597 .././sonata/main.py:598 msgid "Playlist" msgstr "Esitusloend" #: .././sonata/main.py:560 .././sonata/main.py:1840 .././sonata/main.py:2049 msgid "Click to expand" msgstr "Klõpsa, et laiendada" #: .././sonata/main.py:565 .././sonata/main.py:1838 .././sonata/main.py:2047 msgid "Click to collapse" msgstr "Klõpsa, et sulgeda" #: .././sonata/main.py:570 .././sonata/main.py:1732 .././sonata/main.py:1843 msgid "Not Connected" msgstr "Ei ole ühendatud" #: .././sonata/main.py:572 .././sonata/main.py:1730 .././sonata/main.py:1845 msgid "No Read Permission" msgstr "Lugemisõigus puudub" #: .././sonata/main.py:645 msgid "Cover Art" msgstr "Kaanepilt" #: .././sonata/main.py:850 .././sonata/main.py:863 .././sonata/main.py:884 msgid "Profile" msgstr "Profiil" #: .././sonata/main.py:863 .././sonata/main.py:864 .././sonata/main.py:884 msgid "MPD_HOST/PORT" msgstr "MPD_HOST/PORT" #: .././sonata/main.py:865 .././sonata/main.py:871 msgid "Disconnect" msgstr "Ühenda lahti" #: .././sonata/main.py:1187 .././sonata/main.py:1194 msgid "#" msgstr "#" #: .././sonata/main.py:1188 .././sonata/preferences.py:431 #: .././sonata/tagedit.py:128 msgid "Year" msgstr "Aasta" #: .././sonata/main.py:1192 msgid "Stream" msgstr "Voog" #: .././sonata/main.py:1193 msgid "Len" msgstr "Aeg" #: .././sonata/main.py:1214 .././sonata/main.py:1221 .././sonata/main.py:1262 #: .././sonata/main.py:1269 msgid "Unknown" msgstr "Tundmatu" #: .././sonata/main.py:1753 msgid "day" msgid_plural "days" msgstr[0] "päev" msgstr[1] "päeva" #: .././sonata/main.py:1761 msgid "hour" msgid_plural "hours" msgstr[0] "tund" msgstr[1] "tundi" #: .././sonata/main.py:1766 .././sonata/main.py:1768 msgid "and" msgstr "ja" #: .././sonata/main.py:1776 msgid "(updating mpd)" msgstr "(värskendan mpd-d)" #: .././sonata/main.py:2116 msgid "Lyrics Search" msgstr "Sõnade otsing" #: .././sonata/main.py:2117 msgid "_Search" msgstr "_Otsi" #: .././sonata/main.py:2120 msgid "Artist Name" msgstr "Esitaja nimi" #: .././sonata/main.py:2125 msgid "Song Title" msgstr "Loo pealkiri" #: .././sonata/main.py:2377 msgid "Open Image" msgstr "Ava pilt" #: .././sonata/main.py:2379 msgid "Images" msgstr "Pildid" #: .././sonata/main.py:2383 msgid "All files" msgstr "Kõik failid" #: .././sonata/main.py:2425 msgid "Choose Cover Art" msgstr "Vali kaanepilt" #: .././sonata/main.py:2426 msgid "C_hoose" msgstr "V_ali" #: .././sonata/main.py:2459 msgid "Edit search terms" msgstr "Muuda otsingu termineid" #: .././sonata/main.py:2516 msgid "No artist or album name found." msgstr "Esitajat ega albumi nime ei leitud." #: .././sonata/main.py:2519 msgid "No cover art found." msgstr "Kaanepilti ei leitud." #: .././sonata/main.py:2843 msgid "Delete the selected playlist?" msgid_plural "Delete the selected playlists?" msgstr[0] "Kustuta valitud esitusnimekiri?" msgstr[1] "Kustuta valitud esitusnimekirjad?" #: .././sonata/main.py:2843 msgid "Delete Playlist" msgid_plural "Delete Playlists" msgstr[0] "Kustuta esitusnimekiri" msgstr[1] "Kustuta esitusnimekirjad" #: .././sonata/main.py:2851 msgid "Delete the selected stream?" msgid_plural "Delete the selected streams?" msgstr[0] "Kustuta valitud voog?" msgstr[1] "Kustuta valitud vood?" #: .././sonata/main.py:2851 msgid "Delete Stream" msgid_plural "Delete Streams" msgstr[0] "Kustuta voog" msgstr[1] "Kustuta vood" #: .././sonata/main.py:2909 msgid "" "To save lyrics to the music file's directory, you must specify a valid music " "directory." msgstr "" "Salvestamaks sõnad oma muusika kataloogi, pead määrama kehtiva " "muusikakataloogi" #: .././sonata/main.py:2909 .././sonata/main.py:2916 msgid "Music Dir Verification" msgstr "Muusika kataloogi kontrollimine" #: .././sonata/main.py:2916 msgid "" "To save artwork to the music file's directory, you must specify a valid " "music directory." msgstr "" "Salvestamaks kaanepilte muusika kataloogi, pead määrama kehtiva " "muusikakataloogi" #: .././sonata/main.py:3332 msgid "album" msgid_plural "albums" msgstr[0] "album" msgstr[1] "albumit" #: .././sonata/main.py:3333 msgid "artist" msgid_plural "artists" msgstr[0] "esitaja" msgstr[1] "esitajat" #: .././sonata/main.py:3340 msgid "day of bliss" msgid_plural "days of bliss" msgstr[0] "päev õnnistust" msgstr[1] "päeva õnnistust" #: .././sonata/main.py:3342 msgid "hour of bliss" msgid_plural "hours of bliss" msgstr[0] "tund õnnistust" msgstr[1] "tundi õnnistust" #: .././sonata/playlists.py:103 .././sonata/playlists.py:105 msgid "Save Playlist" msgstr "Salvesta esitusloend" #: .././sonata/playlists.py:120 msgid "Would you like to replace the existing playlist or append these songs?" msgstr "Kas soovid asendada olemasolevat esitusloendit või lisada need lood?" #: .././sonata/playlists.py:120 msgid "Existing Playlist" msgstr "Olemasolev esitusloend" #: .././sonata/playlists.py:120 msgid "Replace playlist" msgstr "Asenda esitusloend" #: .././sonata/playlists.py:120 msgid "Append songs" msgstr "Lisa lood" #: .././sonata/playlists.py:141 msgid "A playlist with this name already exists. Would you like to replace it?" msgstr "Sellenimeline esitusloend on juba olemas. Kas soovid seda asendada?" #: .././sonata/playlists.py:153 msgid "Playlist name" msgstr "Esitusloendi nimi" #: .././sonata/playlists.py:182 .././sonata/playlists.py:186 msgid "Rename Playlist" msgstr "Nimeta esitusloend ümber" #. Constants: #: .././sonata/preferences.py:35 msgid "System tray" msgstr "Süsteemne salv" #: .././sonata/preferences.py:35 msgid "Top Left" msgstr "Üleval vasakul" #: .././sonata/preferences.py:35 msgid "Top Right" msgstr "Üleval paremal" #: .././sonata/preferences.py:35 msgid "Bottom Left" msgstr "All vasakul" #: .././sonata/preferences.py:35 msgid "Bottom Right" msgstr "All paremal" #: .././sonata/preferences.py:35 msgid "Screen Center" msgstr "Ekraani keskel" #. MPD tab #: .././sonata/preferences.py:64 msgid "MPD Connection" msgstr "MPD ühendus" #: .././sonata/preferences.py:76 msgid "_Name" msgstr "_Nimi" #: .././sonata/preferences.py:79 msgid "_Host" msgstr "_Server" #: .././sonata/preferences.py:82 msgid "_Port" msgstr "_Port" #: .././sonata/preferences.py:86 msgid "_Music dir" msgstr "_Muusika kataloog" #: .././sonata/preferences.py:87 msgid "Select a Music Directory" msgstr "Vali muusika kataloog" #: .././sonata/preferences.py:91 msgid "Pa_ssword" msgstr "Sala_sõna" #: .././sonata/preferences.py:94 msgid "Leave blank if no password is required." msgstr "Jäta tühjaks, kui salasõna pole vajalik." #: .././sonata/preferences.py:95 msgid "_Autoconnect on start" msgstr "Käivit_amisel ühenda automaatselt" #: .././sonata/preferences.py:113 msgid "Using MPD_HOST/PORT" msgstr "Kasutan MPD_HOST/PORT" #: .././sonata/preferences.py:163 .././sonata/preferences.py:536 msgid "Extras" msgstr "Lisad" #: .././sonata/preferences.py:168 msgid "_Audioscrobbling (Last.fm)" msgstr "_Audioscrobbling (Last.fm)" #: .././sonata/preferences.py:170 msgid "_Username:" msgstr "Kas_utajanimi:" #: .././sonata/preferences.py:171 msgid "_Password:" msgstr "_Salasõna:" #: .././sonata/preferences.py:188 msgid "Popup _notification on song changes" msgstr "_Teavita, kui lugu muutub" #: .././sonata/preferences.py:210 msgid "Fade length" msgstr "Siirde pikkus" #: .././sonata/preferences.py:211 msgid "_Fade length" msgstr "S_iirde pikkus" #: .././sonata/preferences.py:213 msgid "sec" msgstr "s" #: .././sonata/preferences.py:218 msgid "C_rossfade" msgstr "S_iire" #. Display tab #: .././sonata/preferences.py:246 .././sonata/preferences.py:533 msgid "Display" msgstr "Kuva" #: .././sonata/preferences.py:251 msgid "_Album art" msgstr "_Albumi nimi" #: .././sonata/preferences.py:253 msgid "Standard" msgstr "Standard" #: .././sonata/preferences.py:253 msgid "Stylized" msgstr "Stiliseeritud" #: .././sonata/preferences.py:256 msgid "Artwork style:" msgstr "Kaanepildi stiil:" #: .././sonata/preferences.py:258 msgid "Local only" msgstr "Ainult kohalikud" #: .././sonata/preferences.py:258 msgid "Local and remote" msgstr "Kohalik ja võrgust" #: .././sonata/preferences.py:260 msgid "Search locations:" msgstr "Otsimise asukohad:" #: .././sonata/preferences.py:267 .././sonata/preferences.py:289 msgid "SONG_DIR" msgstr "LOO_KAUST" #: .././sonata/preferences.py:269 msgid "custom" msgstr "kohandatud" #: .././sonata/preferences.py:274 msgid "Save art to:" msgstr "Salvesta pildid:" #: .././sonata/preferences.py:277 msgid "_Playback/volume buttons" msgstr "_Esita/helitaseme nupud" #: .././sonata/preferences.py:280 msgid "Pr_ogressbar" msgstr "_Edenemisriba" #: .././sonata/preferences.py:283 msgid "_Statusbar" msgstr "_Olekuriba" #: .././sonata/preferences.py:286 msgid "Song Ly_rics" msgstr "Loo s_õnad" #: .././sonata/preferences.py:288 msgid "Save lyrics to:" msgstr "Salvesta sõnad:" #: .././sonata/preferences.py:297 msgid "System _tray icon" msgstr "Süsteemse salve _ikoon" #. Behavior tab #: .././sonata/preferences.py:319 msgid "Window Behavior" msgstr "Akna käitumine" #: .././sonata/preferences.py:323 msgid "_Show window on all workspaces" msgstr "_Näita akent kõikidel tööaladel" #: .././sonata/preferences.py:326 msgid "_Keep window above other windows" msgstr "_Hoia aken teiste kohal" #: .././sonata/preferences.py:329 msgid "_Hide window titlebar" msgstr "_Peaida akna tiitliriba" #: .././sonata/preferences.py:334 msgid "_Minimize to system tray on close/escape" msgstr "_Minimeeri salve sulgemisel või Esc vajutamisel" #: .././sonata/preferences.py:336 msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, so " "only check this if you have one." msgstr "" "Kui lubatud, Sonata minimeerib end süsteemsesse salve. Kahjuks hetkel on " "võimatu tuvastada, kas süsteemne salv on ka olemas, niiet luba ainult siis," "kui tead, et su töölaual on salv." #: .././sonata/preferences.py:350 msgid "Miscellaneous" msgstr "Mitmesugust" #: .././sonata/preferences.py:354 msgid "_Update MPD library on start" msgstr "_Värskenda MPD teek käivitamisel" #: .././sonata/preferences.py:356 msgid "" "If enabled, Sonata will automatically update your MPD library when it starts " "up." msgstr "Kui lubatud, siis Sonata uuendab käivitamisel automaatselt MPD teeke." #: .././sonata/preferences.py:358 msgid "S_top playback on exit" msgstr "Väljumisel lõpe_ta mängimine" #: .././sonata/preferences.py:360 msgid "" "MPD allows playback even when the client is not open. If enabled, Sonata " "will behave like a more conventional music player and, instead, stop " "playback upon exit." msgstr "" "MPD võimaldab taasesitamist ka siis, kui klient tööta. Kui lubatud, siis " "Sonata käitub rohkem nagu tavaline muusikamängija ja muusika mängimine " "peatatakse rakendusest väljumisel." #: .././sonata/preferences.py:362 msgid "_Write status file:" msgstr "_Kirjuta olekufail:" #: .././sonata/preferences.py:364 .././sonata/preferences.py:366 msgid "" "If enabled, Sonata will create a xmms-infopipe like file containing " "information about the current song. Many applications support the xmms-info " "file (Instant Messengers, IRC Clients...)" msgstr "" "Kui lubatud, Sonata loob xmms-infopipe-i sarnase faili, mis sisaldab infot " "hetke loo kohta. Paljud rakendused toetavad xmms-info faili (Kiirsuhtlus, " "IRC kliendid...)" #. Format tab #: .././sonata/preferences.py:392 msgid "Song Formatting" msgstr "Loo vormindamine" #: .././sonata/preferences.py:397 msgid "C_urrent playlist:" msgstr "A_ktiivses esitusloendis:" #: .././sonata/preferences.py:398 msgid "_Library:" msgstr "_Muusikakogu:" #: .././sonata/preferences.py:399 msgid "_Window title:" msgstr "_Akna pealkiri:" #: .././sonata/preferences.py:400 msgid "Current _song line 1:" msgstr "Aktiivse _loo rida 1:" #: .././sonata/preferences.py:402 msgid "Current s_ong line 2:" msgstr "Aktiivse l_oo rida 2:" #: .././sonata/preferences.py:422 msgid "Available options" msgstr "Võimalikud valikud" #. XXX get these directly from the formatting function: #: .././sonata/preferences.py:426 msgid "Artist name" msgstr "Esitaja nimi" #: .././sonata/preferences.py:427 msgid "Album name" msgstr "Albumi nimi" #: .././sonata/preferences.py:428 msgid "Track name" msgstr "Raja nimi" #: .././sonata/preferences.py:429 msgid "Track number" msgstr "Raja number" #: .././sonata/preferences.py:430 msgid "Disc number" msgstr "Plaadid number" #: .././sonata/preferences.py:433 msgid "File path" msgstr "Faili asukoht" #: .././sonata/preferences.py:434 msgid "File name" msgstr "Faili nimi" #: .././sonata/preferences.py:435 .././sonata/streams.py:109 msgid "Stream name" msgstr "Voo nimi" #: .././sonata/preferences.py:436 msgid "Song length" msgstr "Loo pikkus" #: .././sonata/preferences.py:437 msgid "Elapsed time (title only)" msgstr "Järelejäänud aeg (ainult pealkirjas)" #: .././sonata/preferences.py:448 msgid "Info displayed only if all enclosed tags are defined" msgstr "Infot näidatakse ainult siis, kui kõik sildid on määratud" #: .././sonata/preferences.py:448 msgid "Creates columns in the current playlist" msgstr "Loob veerge aktiivsesse esitusloendisse" #: .././sonata/preferences.py:473 msgid "_About" msgstr "_Programmist" #: .././sonata/preferences.py:474 msgid "_Configure..." msgstr "_Seadista..." #: .././sonata/preferences.py:513 msgid "Loaded" msgstr "Laetud" #: .././sonata/preferences.py:521 msgid "Description" msgstr "Kirjeldus" #. Set up table #: .././sonata/preferences.py:532 msgid "MPD" msgstr "MPD" #: .././sonata/preferences.py:534 msgid "Behavior" msgstr "Käitumine" #: .././sonata/preferences.py:535 msgid "Format" msgstr "Vorming" #: .././sonata/preferences.py:605 msgid "New Profile" msgstr "Uus profiil" #. Prompt user for playlist name: #: .././sonata/preferences.py:659 msgid "Custom Artwork" msgstr "Kohandatud kaanepilt" #: .././sonata/preferences.py:661 msgid "Artwork filename" msgstr "Kaanepildi faili nimi" #: .././sonata/streams.py:105 msgid "Edit Stream" msgstr "Muuda voogu" #: .././sonata/streams.py:107 .././sonata/streams.py:138 msgid "New Stream" msgstr "Uus voog" #: .././sonata/streams.py:116 msgid "Stream URL" msgstr "Voo URL" #: .././sonata/streams.py:138 msgid "A stream with this name already exists. Would you like to replace it?" msgstr "Sellenimeline voog on juba olemas. Kas soovid seda asendada?" #: .././sonata/tagedit.py:61 msgid "Taglib and/or tagpy not found, tag editing support disabled." msgstr "Ei leitud taglib-i ja/või tagpy-d, siltide muutmine välja lülitatud." #: .././sonata/tagedit.py:61 .././sonata/tagedit.py:70 #: .././sonata/tagedit.py:75 .././sonata/tagedit.py:99 #: .././sonata/tagedit.py:103 .././sonata/tagedit.py:260 #: .././sonata/tagedit.py:299 msgid "Edit Tags" msgstr "Muuda silte" #: .././sonata/tagedit.py:70 msgid "" "Tagpy version < 0.91. Please upgrade to a newer version, tag editing support " "disabled." msgstr "Tagpy versioon < 0.91. Palun paigalda värskem versioon, siltide muutmine välja lülitatud." #: .././sonata/tagedit.py:75 msgid "The path" msgstr "Asukoht" #: .././sonata/tagedit.py:75 msgid "does not exist. Please specify a valid music directory in preferences." msgstr "pole olemas. Palun määra eelistuste alt õige muusika kataloog." #: .././sonata/tagedit.py:99 msgid "File " msgstr "Fail " #: .././sonata/tagedit.py:99 msgid " not found. Please specify a valid music directory in preferences." msgstr " ei leitud. Palun määra eelistuste alt õige muusika kataloog." #: .././sonata/tagedit.py:103 msgid "No music files with editable tags found." msgstr "Ei leitud ühtegi muudetavate siltidega muusika faili." #: .././sonata/tagedit.py:150 msgid "Comment" msgstr "Kommentaar" #. Only show save all button if more than one song being edited. #: .././sonata/tagedit.py:161 msgid "Save _All" msgstr "Salvesta _kõik" #: .././sonata/tagedit.py:207 msgid "Increment each selected music file, starting at track 1 for this file." msgstr "Suurenda väärtust iga valitud muusika faili puhul." #: .././sonata/tagedit.py:209 msgid "Apply to all selected music files." msgstr "Rakenda kõikide valitud failide puhul." #: .././sonata/tagedit.py:260 msgid "of" msgstr "/" #. FIXME: was (save_success and self.conn and self.status): #: .././sonata/tagedit.py:299 msgid "Unable to save tag to music file." msgstr "Siltide salvestamine faili nurjus." #: .././sonata/tagedit.py:366 msgid "Hide file path" msgstr "Peida faili rada" #: .././sonata/tagedit.py:369 msgid "Show file path" msgstr "Näita faili rada" #~ msgid "_Update Path" #~ msgstr "_Värskenda" #~ msgid "Enable Audioscrobbler" #~ msgstr "Kasuta Audioscrobbler-it" #~ msgid "Enable Crossfade" #~ msgstr "Kasuta siiret" #~ msgid "Enable album art" #~ msgstr "Kasuta kaanepilte" #~ msgid "file_path" #~ msgstr "faili_asukoht" #~ msgid "Enable lyrics" #~ msgstr "Kasuta laulusõnu" #~ msgid "Enable system tray icon" #~ msgstr "Kasuta süsteemse salve ikooni" #~ msgid "_Display" #~ msgstr "_Kuva" #~ msgid "_Extras" #~ msgstr "_Lisad" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/po/fi.po�������������������������������������������������������������������������������0000664�0000000�0000000�00000114613�13771420143�0014370�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Finnish translation of sonata. # Copyright (C) 2007-2009 Ilkka Tuohela. # This file is distributed under the same license as the sonata package. # Ilkka Tuohela <hile@iki.fi>, 2007-2009. # msgid "" msgstr "" "Project-Id-Version: sonata\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-03-23 07:25+0300\n" "PO-Revision-Date: 2009-03-23 08:35+0300\n" "Last-Translator: Ilkka Tuohela <hile@iki.fi>\n" "Language-Team: Finnish <gnome-fi-laatu@lists.sourceforge.net>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. define the shortcuts and their descriptions #. these are all gettextable #: .././sonata/about.py:52 msgid "About Sonata" msgstr "Tietoja _sonatasta" #: .././sonata/about.py:53 .././sonata/preferences.py:60 msgid "Preferences" msgstr "Asetukset" #: .././sonata/about.py:54 msgid "Fullscreen Artwork Mode" msgstr "Kansikuvien näyttö kokoruututilassa" #: .././sonata/about.py:55 msgid "Switch to [1st-5th] tab" msgstr "Siirry [1.-5.] välilehteen" #: .././sonata/about.py:56 msgid "Connect to MPD" msgstr "Yhdistä MPD-palvelimeen" #: .././sonata/about.py:57 msgid "Disconnect from MPD" msgstr "_Katkaise MPD-yhteys" #: .././sonata/about.py:58 msgid "Randomize current playlist" msgstr "Sekoita nykyinen soittolista" #: .././sonata/about.py:59 msgid "Expand player" msgstr "Laajenna soitin" #: .././sonata/about.py:60 msgid "Switch to previous tab" msgstr "Siirry edelliseen välilehteen" #: .././sonata/about.py:61 msgid "Switch to next tab" msgstr "Siirry seuraavaan välilehteen" #: .././sonata/about.py:62 msgid "Collapse player" msgstr "Pienennä soitin" #: .././sonata/about.py:63 .././sonata/library.py:86 msgid "Search library" msgstr "Etsi kirjastosta" #: .././sonata/about.py:64 msgid "Quit" msgstr "Lopeta" #: .././sonata/about.py:65 msgid "Update entire library" msgstr "Päivitä koko kirjasto" #: .././sonata/about.py:66 msgid "Display popup menu" msgstr "Näytä ponnahdusikkuna" #: .././sonata/about.py:67 msgid "Minimize to system tray (if enabled)" msgstr "Pienennä ilmoitusalueelle (jos käytössä)" #: .././sonata/about.py:69 msgid "Previous track" msgstr "Edellinen kappale" #: .././sonata/about.py:70 msgid "Next track" msgstr "Seuraava kappale" #: .././sonata/about.py:71 msgid "Play/Pause" msgstr "Soita/Keskeytä" #: .././sonata/about.py:72 msgid "Stop" msgstr "Pysäytä" #: .././sonata/about.py:73 msgid "Lower the volume" msgstr "Hiljennä äänenvoimakkuutta" #: .././sonata/about.py:74 msgid "Raise the volume" msgstr "Kasvata äänenvoimakkuutta" #: .././sonata/about.py:76 msgid "Play selected song" msgstr "Soita valittu kappale" #: .././sonata/about.py:77 msgid "Remove selected song(s)" msgstr "Poista valitut kappaleet" #: .././sonata/about.py:78 msgid "Center currently playing song" msgstr "Keskitä soiva kappale" #: .././sonata/about.py:79 .././sonata/about.py:88 msgid "Edit selected song's tags" msgstr "Muokkaa soivan kappaleen merkintöjä" #: .././sonata/about.py:80 msgid "Save to new playlist" msgstr "Tallenna uuteen soittolistaan" #: .././sonata/about.py:81 msgid "Clear list" msgstr "Tyhjennä lista" #: .././sonata/about.py:82 msgid "Randomize list" msgstr "Sekoita soittlista" #: .././sonata/about.py:84 msgid "Add selected song(s) or enter directory" msgstr "Lisää valitut kappaleet tai koko kansio" #: .././sonata/about.py:85 msgid "Go to parent directory" msgstr "Siirry yläkansioon" #: .././sonata/about.py:86 msgid "Add selected item(s)" msgstr "Lisää valitut kohdat" #: .././sonata/about.py:87 msgid "Replace with selected item(s)" msgstr "Korvaa valituilla kohdilla" #: .././sonata/about.py:89 msgid "Add selected item(s) and play" msgstr "Lisää valitut kohdat ja soita" #: .././sonata/about.py:90 msgid "Replace with selected item(s) and play" msgstr "Korvaa valituilla kohdilla ja soita" #: .././sonata/about.py:91 msgid "Update selected item(s)/path(s)" msgstr "Päivitä valitut kohdat tai polut" #: .././sonata/about.py:93 .././sonata/about.py:95 msgid "Add selected playlist(s)" msgstr "Lisää valitut soittolistat" #: .././sonata/about.py:94 msgid "Remove selected playlist(s)" msgstr "Poista valitut soittolistat" #: .././sonata/about.py:96 msgid "Replace with selected playlist(s)" msgstr "Korvaa valituilla soittolistoilla" #: .././sonata/about.py:97 msgid "Add selected playlist(s) and play" msgstr "Lisää valitut soittolistat ja soita" #: .././sonata/about.py:98 msgid "Replace with selected playlist(s) and play" msgstr "Korvaa valituilla soittolistoilla ja soita" #: .././sonata/about.py:100 .././sonata/about.py:102 msgid "Add selected stream(s)" msgstr "Lisää valitut virrat" #: .././sonata/about.py:101 msgid "Remove selected stream(s)" msgstr "Poista valitut virrat" #: .././sonata/about.py:103 msgid "Replace with selected stream(s)" msgstr "Korvaa valituilla virroilla" #: .././sonata/about.py:104 msgid "Add selected stream(s) and play" msgstr "Lisää valitut virrat ja soita" #: .././sonata/about.py:105 msgid "Replace with selected stream(s) and play" msgstr "Korvaa valituilla virroilla ja soita" #: .././sonata/about.py:107 msgid "Edit playing song's tags" msgstr "Muokkaa soivan kappaleen merkintöjä" #. define the main array- this adds headings to each section of #. shortcuts that will be displayed #: .././sonata/about.py:110 msgid "Main Shortcuts" msgstr "Yleiset pikanäppäimet" #: .././sonata/about.py:111 msgid "Playback Shortcuts" msgstr "Soiton pikanäppäimet" #: .././sonata/about.py:112 msgid "Current Shortcuts" msgstr "Nykyisen listan pikanäppäimet" #: .././sonata/about.py:113 msgid "Library Shortcuts" msgstr "Kirjaston pikanäppäimet" #: .././sonata/about.py:114 msgid "Playlist Shortcuts" msgstr "Soittolistojen pikanäppäimet" #: .././sonata/about.py:115 msgid "Stream Shortcuts" msgstr "Virtojen pikanäppäimet" #: .././sonata/about.py:116 msgid "Info Shortcuts" msgstr "Merkintöjen pikanäppäimet" #: .././sonata/about.py:117 msgid "Shortcuts" msgstr "Pikanäppäimet" #: .././sonata/about.py:153 msgid "An elegant music client for MPD." msgstr "Näppärä asiakaohjelma MPD:lle." #. Add button to show keybindings: #: .././sonata/about.py:166 msgid "_Shortcuts" msgstr "_Pikanäppäimet" #: .././sonata/about.py:177 .././sonata/main.py:3088 #: .././sonata/preferences.py:738 msgid "Unable to launch a suitable browser." msgstr "Selainta ei voitu käynnistää." #: .././sonata/about.py:177 .././sonata/main.py:3088 #: .././sonata/preferences.py:738 msgid "Launch Browser" msgstr "Käynnistä selain" #: .././sonata/cli.py:81 msgid "The toggle and popup arguments require D-Bus. Aborting." msgstr "Toggle- ja ponnahdusikkuna-valitsimet vaativat D-Bus:in, keskeytetään." #: .././sonata/cli.py:97 msgid "Version" msgstr "Versio" #: .././sonata/cli.py:98 msgid "Website" msgstr "WWW-sivut" #: .././sonata/cli.py:103 msgid "Usage: sonata [OPTION]... [COMMAND]..." msgstr "Käyttö: sonata [VALITSIN]... [KOMENTO]..." #: .././sonata/cli.py:105 msgid "Options" msgstr "Valitsimet" #: .././sonata/cli.py:106 msgid "Show this help and exit" msgstr "Näytä tämä ohje ja sulje" #: .././sonata/cli.py:107 msgid "Popup song notification (requires D-Bus)" msgstr "Ponnahdusikkuna kappaleen vaihtuessa (vaatii DBus:in)" #: .././sonata/cli.py:108 msgid "Toggles whether the app is minimized" msgstr "Vaihtelee onko ohjelma pienennetty" #: .././sonata/cli.py:109 msgid "to tray or visible (requires D-Bus)" msgstr "Ilmoitusalueelle tai näkyviin (vaatii dbusin)" #: .././sonata/cli.py:110 msgid "Don't start app if D-Bus commands fail" msgstr "Älä käynnistä ohjelmaa, jos D-Bus -komennot epäonnistuvat" #: .././sonata/cli.py:111 msgid "Show version information and exit" msgstr "Näytä versiotiedot ja sulje" #: .././sonata/cli.py:112 msgid "Start app hidden (requires systray)" msgstr "Käynnistä piilotettuna (vaatii ilmoitusalueen)" #: .././sonata/cli.py:113 msgid "Start app visible (requires systray)" msgstr "Käynnistä näkyvissä (vaatii ilmoitusalueen)" #: .././sonata/cli.py:114 msgid "Start with profile [NUM]" msgstr "Käynnistä profiili [NUMERO]" #: .././sonata/cli.py:116 msgid "Commands" msgstr "Komennot" #: .././sonata/cli.py:117 msgid "Play song in playlist" msgstr "Soita kappale soittolistalta" #: .././sonata/cli.py:118 msgid "Pause currently playing song" msgstr "Pysäytä soiva kappale" #: .././sonata/cli.py:119 msgid "Stop currently playing song" msgstr "Keskeytä soiva kappale" #: .././sonata/cli.py:120 msgid "Play next song in playlist" msgstr "Soita seuraava kappale soittolistalta" #: .././sonata/cli.py:121 msgid "Play previous song in playlist" msgstr "Soita edellinen kappale soittolistalta" #: .././sonata/cli.py:122 msgid "Toggle play/pause; plays if stopped" msgstr "Vaihda toistoa/pysäytystä; toista, jos pysäytetty" #: .././sonata/cli.py:123 msgid "Toggle repeat mode" msgstr "Vaihda kertaustilaa" #: .././sonata/cli.py:124 msgid "Toggle random mode" msgstr "Vaihda satunnaistilaa" #: .././sonata/cli.py:125 msgid "Display current song info" msgstr "Näytä tietoja tämänhetkisestä kappaleesta" #: .././sonata/cli.py:126 msgid "Display MPD status" msgstr "Näytä MPD:n tila" #: .././sonata/cli.py:134 #, python-format msgid "Starting Sonata with profile %s..." msgstr "Käynnistetään sonata profiililla %s..." #: .././sonata/cli.py:136 #, python-format msgid "%d is not an available profile number." msgstr "%d ei ole saatavilla oleva profiilinumero." #: .././sonata/cli.py:137 .././sonata/cli.py:141 #, python-format msgid "Profile numbers must be between 1 and %d." msgstr "Profiilinumeron täytyy olla väliltä 1 ja %d." #: .././sonata/cli.py:140 #, python-format msgid "Python is unable to interpret %s as a number." msgstr "Python ei voi tulkita arvoa %s numeroksi." #: .././sonata/cli.py:154 .././sonata/main.py:179 msgid "Default Profile" msgstr "Oletusprofiili" #: .././sonata/cli.py:154 .././sonata/main.py:179 msgid "by" msgstr "esittäjältä" #: .././sonata/cli.py:154 .././sonata/main.py:179 msgid "from" msgstr "levyltä" #: .././sonata/cli.py:176 msgid "" "Unable to connect to MPD.\n" "Please check your Sonata preferences or MPD_HOST/MPD_PORT environment " "variables." msgstr "" "MPD-palvelimeen ei saatu yhteyttä.\n" "Tarkista sonatan asetuksesi tai MPD_HOST/MPD_PORT -ympäristömuutujat.." #: .././sonata/cli.py:208 .././sonata/info.py:91 .././sonata/info.py:245 #: .././sonata/library.py:49 .././sonata/tagedit.py:125 msgid "Title" msgstr "Kappale" #: .././sonata/cli.py:209 .././sonata/info.py:91 .././sonata/info.py:246 #: .././sonata/library.py:49 .././sonata/main.py:1184 #: .././sonata/tagedit.py:126 msgid "Artist" msgstr "Esittäjä" #: .././sonata/cli.py:210 .././sonata/info.py:91 .././sonata/info.py:247 #: .././sonata/library.py:49 .././sonata/main.py:1185 .././sonata/main.py:2439 #: .././sonata/tagedit.py:127 msgid "Album" msgstr "Levy" #: .././sonata/cli.py:211 .././sonata/info.py:91 .././sonata/info.py:248 msgid "Date" msgstr "Päiväys" #: .././sonata/cli.py:212 .././sonata/info.py:91 .././sonata/info.py:250 #: .././sonata/main.py:1186 .././sonata/tagedit.py:130 msgid "Track" msgstr "Kappale" #: .././sonata/cli.py:213 .././sonata/info.py:91 .././sonata/info.py:249 #: .././sonata/library.py:49 .././sonata/main.py:1189 #: .././sonata/preferences.py:432 .././sonata/tagedit.py:139 msgid "Genre" msgstr "Tyyli" #: .././sonata/cli.py:214 .././sonata/info.py:91 .././sonata/info.py:251 #: .././sonata/main.py:1191 msgid "File" msgstr "Tiedosto" #: .././sonata/cli.py:219 .././sonata/cli.py:221 msgid "Time" msgstr "Kesto" #: .././sonata/cli.py:222 .././sonata/info.py:91 .././sonata/info.py:244 msgid "Bitrate" msgstr "Bittinopeus" #: .././sonata/cli.py:224 msgid "MPD stopped" msgstr "MPD pysäytetty" #: .././sonata/cli.py:228 .././sonata/cli.py:230 .././sonata/cli.py:232 msgid "State" msgstr "Tila" #: .././sonata/cli.py:228 msgid "Playing" msgstr "Soittaa" #: .././sonata/cli.py:230 msgid "Paused" msgstr "Keskeytetty" #: .././sonata/cli.py:232 .././sonata/main.py:559 .././sonata/main.py:564 #: .././sonata/main.py:1836 .././sonata/main.py:1847 msgid "Stopped" msgstr "Pysäytetty" #: .././sonata/cli.py:234 .././sonata/cli.py:236 msgid "Repeat" msgstr "Kertaus" #: .././sonata/cli.py:234 .././sonata/cli.py:238 msgid "Off" msgstr "Päällä" #: .././sonata/cli.py:236 .././sonata/cli.py:240 msgid "On" msgstr "Pois" #: .././sonata/cli.py:238 .././sonata/cli.py:240 msgid "Random" msgstr "Satunnaistoisto" #: .././sonata/cli.py:241 msgid "Volume" msgstr "Äänenvoimakkuus" #: .././sonata/cli.py:242 msgid "Crossfade" msgstr "Ristiinhäivytys" #: .././sonata/cli.py:242 .././sonata/preferences.py:192 msgid "second" msgid_plural "seconds" msgstr[0] "sekunti" msgstr[1] "sekuntia" #: .././sonata/current.py:64 msgid "Filter" msgstr "Suodatin" #: .././sonata/dbus_plugin.py:83 msgid "" "Sonata failed to connect to the D-BUS session bus: Unable to determine the " "address of the message bus (try 'man dbus-launch' and 'man dbus-daemon' for " "help)" msgstr "" "Sonata ei saanut yhteyttä D-Bus -istuntoväylään: viestiväylän osoitetta ei " "voitu selvittää. Lue lisää komennoilla 'man dbus-launch' ja 'man dbus-" "daemon'." #: .././sonata/dbus_plugin.py:96 msgid "Failed to execute remote commands." msgstr "Etäkomentoja ei voitu suorittaa." #: .././sonata/dbus_plugin.py:98 msgid "Starting Sonata instead..." msgstr "Käynnistetään sonata ..." #: .././sonata/dbus_plugin.py:100 msgid "Maybe Sonata is not running?" msgstr "Ehkä sonata ei ole käynnissä?" #: .././sonata/dbus_plugin.py:114 msgid "An instance of Sonata is already running. Showing it..." msgstr "Sonata on jo käynnissä, näytetään ikkuna..." #: .././sonata/dbus_plugin.py:120 msgid "Failed to execute remote command." msgstr "Etäkomentoa ei voitu suorittaa." #. Song info #: .././sonata/info.py:78 msgid "Song Info" msgstr "Tietoja kappaleesta" #: .././sonata/info.py:93 msgid "Launch artist in Wikipedia" msgstr "Näytä esittäjä wikipediassa" #: .././sonata/info.py:93 msgid "Launch album in Wikipedia" msgstr "Näytä levy wikipediassa" #: .././sonata/info.py:127 msgid "Toggle extra tags" msgstr "Näytetäänkö lisämerkinnät" #: .././sonata/info.py:130 msgid "Edit song tags" msgstr "Muokkaa kappaleen merkintöjä" #. Lyrics #: .././sonata/info.py:140 msgid "Lyrics" msgstr "Sanoitukset" #: .././sonata/info.py:152 msgid "Search Lyricwiki.org for lyrics" msgstr "Etsi sanoituksia Lyricwiki.org-sivustolta" #: .././sonata/info.py:153 msgid "Edit lyrics at Lyricwiki.org" msgstr "Muokkaa sanoituksia lyricwiki.org-sivustolla" #. Album info #: .././sonata/info.py:161 msgid "Album Info" msgstr "Tietoja levystä" #: .././sonata/info.py:213 .././sonata/info.py:218 msgid "more" msgstr "lisää" #: .././sonata/info.py:215 msgid "hide" msgstr "piilota" #: .././sonata/info.py:281 msgid "edit tags" msgstr "muokkaa merkintöjä" #: .././sonata/info.py:308 msgid "Album info not found." msgstr "Levyn tietoja ei löytynyt." #: .././sonata/info.py:311 msgid "Album name not set." msgstr "Levyn nimeä ei ole asetettu." #: .././sonata/info.py:324 msgid "ZSI not found, fetching lyrics support disabled." msgstr "ZSI-kirjastoa ei löydy, sanoitusten haku ei ole käytössä." #: .././sonata/info.py:329 msgid "Artist or song title not set." msgstr "Esittäjää kappaleen nimeä ei ole asetettu." #: .././sonata/info.py:371 msgid "search" msgstr "etsi" #: .././sonata/info.py:372 msgid "edit" msgstr "muokkaa" #: .././sonata/info.py:381 .././sonata/info.py:436 msgid "Lyrics not found" msgstr "Sanoituksia ei löytynyt" #. Fetch lyrics from lyricwiki.org #: .././sonata/info.py:401 msgid "Fetching lyrics..." msgstr "Haetaan sanoituksia..." #: .././sonata/info.py:411 msgid "Couldn't connect to LyricWiki" msgstr "LyricWikiin ei saatu yhteyttä" #: .././sonata/info.py:439 msgid "Fetching lyrics failed" msgstr "Sanoitusten haku ei onnistunut" #: .././sonata/library.py:47 msgid "Untagged" msgstr "Merkitsemätön" #: .././sonata/library.py:48 msgid "Various Artists" msgstr "Useita esittäjiä" #: .././sonata/library.py:49 msgid "Filename" msgstr "Tiedostonimi" #: .././sonata/library.py:49 msgid "Everything" msgstr "Kaikki" #: .././sonata/library.py:52 msgid "Filesystem" msgstr "Tiedostojärjestelmä" #: .././sonata/library.py:53 msgid "Artists" msgstr "Esittäjät" #: .././sonata/library.py:54 msgid "Albums" msgstr "Levyt" #: .././sonata/library.py:55 msgid "Genres" msgstr "Tyylit" #: .././sonata/library.py:84 msgid "Search terms" msgstr "Hakuehdot" #: .././sonata/library.py:90 msgid "End Search" msgstr "Lopeta haku" #: .././sonata/library.py:92 msgid "Library browsing view" msgstr "Kirjaston selausnäkymä" #: .././sonata/library.py:96 msgid "Search" msgstr "Etsi" #. Show text: #: .././sonata/library.py:761 .././sonata/main.py:1763 #: .././sonata/main.py:3331 msgid "song" msgid_plural "songs" msgstr[0] "kappale" msgstr[1] "kappaletta" #: .././sonata/library.py:761 .././sonata/main.py:1757 msgid "minute" msgid_plural "minutes" msgstr[0] "minuutti" msgstr[1] "minuuttia" #: .././sonata/library.py:849 msgid "Song" msgstr "Kappale" #: .././sonata/library.py:849 .././sonata/main.py:1190 msgid "Path" msgstr "Polku" #. Constants #: .././sonata/main.py:102 msgid "Current" msgstr "Soiva lista" #: .././sonata/main.py:103 msgid "Library" msgstr "Kirjasto" #: .././sonata/main.py:104 msgid "Playlists" msgstr "Soittolistat" #: .././sonata/main.py:105 msgid "Streams" msgstr "Musiikkivirrat" #: .././sonata/main.py:106 msgid "Info" msgstr "Tietoja" #: .././sonata/main.py:137 .././sonata/preferences.py:193 #: .././sonata/preferences.py:194 msgid "Entire song" msgstr "Koko kappale" #: .././sonata/main.py:234 msgid "_Sort List" msgstr "_Järjestä lista" #: .././sonata/main.py:235 msgid "Sa_ve List to" msgstr "_Tallenna lista nimellä" #: .././sonata/main.py:236 msgid "_Connection" msgstr "_Yhteys" #: .././sonata/main.py:237 msgid "P_lay after" msgstr "Soita s_euraavaksi" #: .././sonata/main.py:238 .././sonata/main.py:2454 msgid "_Update" msgstr "_Päivitä" #: .././sonata/main.py:239 msgid "Use _Remote Image..." msgstr "Käytä kuvaa _verkosta..." #: .././sonata/main.py:240 msgid "Use _Local Image..." msgstr "Käytä kuvaa _levyltä..." #: .././sonata/main.py:241 msgid "_Fullscreen Mode" msgstr "_Kokoruututila" #: .././sonata/main.py:242 msgid "Reset Image" msgstr "Nollaa kuva" #: .././sonata/main.py:243 msgid "_Play" msgstr "_Soita" #: .././sonata/main.py:244 msgid "Pa_use" msgstr "_Keskeytä" #: .././sonata/main.py:245 msgid "_Stop" msgstr "_Pysäytä" #: .././sonata/main.py:246 msgid "Pre_vious" msgstr "_Edellinen" #: .././sonata/main.py:247 msgid "_Next" msgstr "_Seuraava" #: .././sonata/main.py:248 msgid "_Quit" msgstr "_Lopeta" #: .././sonata/main.py:249 msgid "_Remove" msgstr "_Poista" #: .././sonata/main.py:250 msgid "_Clear" msgstr "Ty_hjennä" #: .././sonata/main.py:251 msgid "_Entire Library" msgstr "_Koko kirjasto" #: .././sonata/main.py:252 msgid "_Selected Items" msgstr "_Valitut kohdat" #: .././sonata/main.py:253 msgid "_Preferences..." msgstr "_Asetukset..." #: .././sonata/main.py:254 msgid "_About..." msgstr "_Tietoja..." #: .././sonata/main.py:255 msgid "_Edit Tags..." msgstr "_Muokkaa merkintöjä" #: .././sonata/main.py:256 msgid "_Add" msgstr "_Lisää" #: .././sonata/main.py:257 msgid "_Replace" msgstr "_Korvaa" #: .././sonata/main.py:258 msgid "Add" msgstr "Lisää" #: .././sonata/main.py:259 msgid "Replace" msgstr "Korvaa" #: .././sonata/main.py:260 msgid "_Delete..." msgstr "_Poista..." #: .././sonata/main.py:261 msgid "Shuffle" msgstr "Sekoitustila" #: .././sonata/main.py:286 msgid "S_how Sonata" msgstr "Näytä _sonata" #: .././sonata/main.py:287 msgid "_Repeat" msgstr "_Kertaus" #: .././sonata/main.py:288 msgid "Rando_m" msgstr "Sa_tunnaistoisto" #: .././sonata/main.py:428 msgid "By Artist" msgstr "Esittäjän mukaan" #: .././sonata/main.py:429 msgid "By Album" msgstr "Levyn mukaan" #: .././sonata/main.py:430 msgid "By Song Title" msgstr "Kappaleen nimen mukaan" #: .././sonata/main.py:431 msgid "By File Name" msgstr "Tiedostonimen mukaan" #: .././sonata/main.py:432 msgid "By Dir & File Name" msgstr "Kansion ja tiedoston mukaan" #: .././sonata/main.py:433 msgid "Reverse List" msgstr "Käännä listan suunta" #: .././sonata/main.py:456 .././sonata/main.py:467 msgid "_New..." msgstr "_Uusi..." #: .././sonata/main.py:457 msgid "_Edit..." msgstr "_Muokkaa..." #: .././sonata/main.py:468 msgid "_Rename..." msgstr "_Nimeä uudestaan..." #: .././sonata/main.py:530 .././sonata/main.py:597 .././sonata/main.py:598 msgid "Playlist" msgstr "Soittolista" #: .././sonata/main.py:560 .././sonata/main.py:1840 .././sonata/main.py:2049 msgid "Click to expand" msgstr "Laajenna napsauttamalla" #: .././sonata/main.py:565 .././sonata/main.py:1838 .././sonata/main.py:2047 msgid "Click to collapse" msgstr "Pienennä napsauttamalla" #: .././sonata/main.py:570 .././sonata/main.py:1732 .././sonata/main.py:1843 msgid "Not Connected" msgstr "Ei yhteyttä" #: .././sonata/main.py:572 .././sonata/main.py:1730 .././sonata/main.py:1845 msgid "No Read Permission" msgstr "Ei lukuoikeutta" #: .././sonata/main.py:645 msgid "Cover Art" msgstr "Kansikuva" #: .././sonata/main.py:850 .././sonata/main.py:863 .././sonata/main.py:884 msgid "Profile" msgstr "Profiili" #: .././sonata/main.py:863 .././sonata/main.py:864 .././sonata/main.py:884 msgid "MPD_HOST/PORT" msgstr "MPD_HOST/PORT" #: .././sonata/main.py:865 .././sonata/main.py:871 msgid "Disconnect" msgstr "Katkaise yhteys" #: .././sonata/main.py:1187 .././sonata/main.py:1194 msgid "#" msgstr "#" #: .././sonata/main.py:1188 .././sonata/preferences.py:431 #: .././sonata/tagedit.py:128 msgid "Year" msgstr "Vuosi" #: .././sonata/main.py:1192 msgid "Stream" msgstr "Virta" #: .././sonata/main.py:1193 msgid "Len" msgstr "Pituus" #: .././sonata/main.py:1214 .././sonata/main.py:1221 .././sonata/main.py:1262 #: .././sonata/main.py:1269 msgid "Unknown" msgstr "Tuntematon" #: .././sonata/main.py:1753 msgid "day" msgid_plural "days" msgstr[0] "päivä" msgstr[1] "päivää" #: .././sonata/main.py:1761 msgid "hour" msgid_plural "hours" msgstr[0] "tunti" msgstr[1] "tuntia" #: .././sonata/main.py:1766 .././sonata/main.py:1768 msgid "and" msgstr "ja" #: .././sonata/main.py:1776 msgid "(updating mpd)" msgstr "(päivitetään mpd-tietokantaa)" #: .././sonata/main.py:2116 msgid "Lyrics Search" msgstr "Sanoitusten haku" #: .././sonata/main.py:2117 msgid "_Search" msgstr "_Etsi" #: .././sonata/main.py:2120 msgid "Artist Name" msgstr "Esittäjän nimi" #: .././sonata/main.py:2125 msgid "Song Title" msgstr "Kappaleen nimi" #: .././sonata/main.py:2377 msgid "Open Image" msgstr "Avaa kuva" #: .././sonata/main.py:2379 msgid "Images" msgstr "Kuvat" #: .././sonata/main.py:2383 msgid "All files" msgstr "Kaikki tiedostot" #: .././sonata/main.py:2425 msgid "Choose Cover Art" msgstr "Valitse kansikuva" #: .././sonata/main.py:2426 msgid "C_hoose" msgstr "_Valitse" #: .././sonata/main.py:2459 msgid "Edit search terms" msgstr "Muokkaa hakuehtoja" #: .././sonata/main.py:2516 msgid "No artist or album name found." msgstr "Esittäjää tai levyn nimeä ei löydy." #: .././sonata/main.py:2519 msgid "No cover art found." msgstr "Kansikuvaa ei löydy." #: .././sonata/main.py:2843 msgid "Delete the selected playlist?" msgid_plural "Delete the selected playlists?" msgstr[0] "Poistetaanko valittu soittolista?" msgstr[1] "Poistetaanko valitut soittolistat?" #: .././sonata/main.py:2843 msgid "Delete Playlist" msgid_plural "Delete Playlists" msgstr[0] "Poista soittolista" msgstr[1] "Poista soittolistat" #: .././sonata/main.py:2851 msgid "Delete the selected stream?" msgid_plural "Delete the selected streams?" msgstr[0] "Poistetaanko valittu virta?" msgstr[1] "Poistetaanko valitut virrat?" #: .././sonata/main.py:2851 msgid "Delete Stream" msgid_plural "Delete Streams" msgstr[0] "Poista virta" msgstr[1] "Poista virrat" #: .././sonata/main.py:2909 msgid "" "To save lyrics to the music file's directory, you must specify a valid music " "directory." msgstr "" "Jotta voit tallentaa sanoituksia musiikkikansioon, sinun täytyy antaa " "kelvollinen musiikkikansio." #: .././sonata/main.py:2909 .././sonata/main.py:2916 msgid "Music Dir Verification" msgstr "Musiikkikansion vahvistus" #: .././sonata/main.py:2916 msgid "" "To save artwork to the music file's directory, you must specify a valid " "music directory." msgstr "" "Jotta voit tallentaa kansikuvia musiikkikansioon, sinun täytyy antaa " "kelvollinen musiikkikansio." #: .././sonata/main.py:3332 msgid "album" msgid_plural "albums" msgstr[0] "levy" msgstr[1] "levyä" #: .././sonata/main.py:3333 msgid "artist" msgid_plural "artists" msgstr[0] "esittäjä" msgstr[1] "esittäjää" #: .././sonata/main.py:3340 msgid "day of bliss" msgid_plural "days of bliss" msgstr[0] "päivä poppista" msgstr[1] "päivää poppista" #: .././sonata/main.py:3342 msgid "hour of bliss" msgid_plural "hours of bliss" msgstr[0] "tunti poppista" msgstr[1] "tuntia poppista" #: .././sonata/playlists.py:103 .././sonata/playlists.py:105 msgid "Save Playlist" msgstr "Tallenna soittolista" #: .././sonata/playlists.py:120 msgid "Would you like to replace the existing playlist or append these songs?" msgstr "Haluatko korvata nykyisen soittolistan tai lisätä nämä kappaleet?" #: .././sonata/playlists.py:120 msgid "Existing Playlist" msgstr "Nykyinen soittolista" #: .././sonata/playlists.py:120 msgid "Replace playlist" msgstr "Korvaa soittolista" #: .././sonata/playlists.py:120 msgid "Append songs" msgstr "Lisää kappaleet" #: .././sonata/playlists.py:141 msgid "A playlist with this name already exists. Would you like to replace it?" msgstr "Tämänniminen soittolista on jo olemassa. Haluatko korvata sen?" #: .././sonata/playlists.py:153 msgid "Playlist name" msgstr "Soittolistan nimi" #: .././sonata/playlists.py:182 .././sonata/playlists.py:186 msgid "Rename Playlist" msgstr "Nimeä soittolista uudestaan" #. Constants: #: .././sonata/preferences.py:35 msgid "System tray" msgstr "Ilmoitusalue" #: .././sonata/preferences.py:35 msgid "Top Left" msgstr "Ylhäällä vasemmalla" #: .././sonata/preferences.py:35 msgid "Top Right" msgstr "Ylhäällä oikealla" #: .././sonata/preferences.py:35 msgid "Bottom Left" msgstr "Alhaalla vasemmalla" #: .././sonata/preferences.py:35 msgid "Bottom Right" msgstr "Alhaalla oikealla" #: .././sonata/preferences.py:35 msgid "Screen Center" msgstr "Näytön keskellä" #. MPD tab #: .././sonata/preferences.py:64 msgid "MPD Connection" msgstr "MPD-yhteys" #: .././sonata/preferences.py:76 msgid "_Name" msgstr "_Nimi" #: .././sonata/preferences.py:79 msgid "_Host" msgstr "_Palvelin" #: .././sonata/preferences.py:82 msgid "_Port" msgstr "_Portti" #: .././sonata/preferences.py:86 msgid "_Music dir" msgstr "_Musiikkikansio" #: .././sonata/preferences.py:87 msgid "Select a Music Directory" msgstr "Valitse musiikkikansio" #: .././sonata/preferences.py:91 msgid "Pa_ssword" msgstr "_Salasana" #: .././sonata/preferences.py:94 msgid "Leave blank if no password is required." msgstr "Jätä tyhjäksi, jos sanaa ei vaadita." #: .././sonata/preferences.py:95 msgid "_Autoconnect on start" msgstr "_Yhdistä käynnistettäessä" #: .././sonata/preferences.py:113 msgid "Using MPD_HOST/PORT" msgstr "Käytetään MPD_HOST/PORT-muuttujia" #: .././sonata/preferences.py:163 .././sonata/preferences.py:536 msgid "Extras" msgstr "Lisäosat" #: .././sonata/preferences.py:168 msgid "_Audioscrobbling (Last.fm)" msgstr "_Audioscrobbler (last.fm)" #: .././sonata/preferences.py:170 msgid "_Username:" msgstr "_Käyttäjätunnus:" #: .././sonata/preferences.py:171 msgid "_Password:" msgstr "_Salasana:" #: .././sonata/preferences.py:188 msgid "Popup _notification on song changes" msgstr "Po_nnahdusikkuna kappaleen vaihtuessa" #: .././sonata/preferences.py:210 msgid "Fade length" msgstr "Häivytyksen kesto" #: .././sonata/preferences.py:211 msgid "_Fade length" msgstr "_Häivytyksen kesto" #: .././sonata/preferences.py:213 msgid "sec" msgstr "s" #: .././sonata/preferences.py:218 msgid "C_rossfade" msgstr "_Ristiinhäivytys" #. Display tab #: .././sonata/preferences.py:246 .././sonata/preferences.py:533 msgid "Display" msgstr "Ulkoasu" #: .././sonata/preferences.py:251 msgid "_Album art" msgstr "K_ansikuva" #: .././sonata/preferences.py:253 msgid "Standard" msgstr "Tavallinen" #: .././sonata/preferences.py:253 msgid "Stylized" msgstr "Tyylitelty" #: .././sonata/preferences.py:256 msgid "Artwork style:" msgstr "Kansikuvan tyyli:" #: .././sonata/preferences.py:258 msgid "Local only" msgstr "Vain paikalliset kuvat" #: .././sonata/preferences.py:258 msgid "Local and remote" msgstr "Paikalliset ja verkko" #: .././sonata/preferences.py:260 msgid "Search locations:" msgstr "Etsinnän kohteet:" #: .././sonata/preferences.py:267 .././sonata/preferences.py:289 msgid "SONG_DIR" msgstr "KAPPELEEN_KANSIO" #: .././sonata/preferences.py:269 msgid "custom" msgstr "oma" #: .././sonata/preferences.py:274 msgid "Save art to:" msgstr "Tallenna kansikuvat kohteeseen:" #: .././sonata/preferences.py:277 msgid "_Playback/volume buttons" msgstr "_Toisto- ja äänenvoimakkusnapit" #: .././sonata/preferences.py:280 msgid "Pr_ogressbar" msgstr "_Edistymispalkki" #: .././sonata/preferences.py:283 msgid "_Statusbar" msgstr "_Tilarivi" #: .././sonata/preferences.py:286 msgid "Song Ly_rics" msgstr "_Sanoitukset" #: .././sonata/preferences.py:288 msgid "Save lyrics to:" msgstr "Tallenna sanoitukset kansioon:" #: .././sonata/preferences.py:297 msgid "System _tray icon" msgstr "Ilmoi_tusalueen kuvake" #. Behavior tab #: .././sonata/preferences.py:319 msgid "Window Behavior" msgstr "Ikkunan toiminta" #: .././sonata/preferences.py:323 msgid "_Show window on all workspaces" msgstr "_Näytä ikkuna kaikilla työpöydillä" #: .././sonata/preferences.py:326 msgid "_Keep window above other windows" msgstr "Pi_dä ikkuna aina päällimmäisenä" #: .././sonata/preferences.py:329 msgid "_Hide window titlebar" msgstr "P_iilota ikkunan otsikko" #: .././sonata/preferences.py:334 msgid "_Minimize to system tray on close/escape" msgstr "_Pienennä ilmoitusalueelle suljettaessa" #: .././sonata/preferences.py:336 msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, so " "only check this if you have one." msgstr "" "Jos käytössä, sonatan sulkeminen pienentää ohjelman ilmoitusalueelle. " "Huomaa, että tällä ohjelma ei voi tietää, onko ilmoitusaluetta olemassa, " "joten valitse tämä vain jos sinulla on ilmoitusalue." #: .././sonata/preferences.py:350 msgid "Miscellaneous" msgstr "Lisäasetukset" #: .././sonata/preferences.py:354 msgid "_Update MPD library on start" msgstr "Päi_vitä MPD-kirjasto käynnistettäessä" #: .././sonata/preferences.py:356 msgid "" "If enabled, Sonata will automatically update your MPD library when it starts " "up." msgstr "" "Jos käytössä, MPD-kirjaston päivitys aloitetaan automaattisesti sonatan " "käynnistyessä." #: .././sonata/preferences.py:358 msgid "S_top playback on exit" msgstr "_Pysäytä toisto suljettaessa" #: .././sonata/preferences.py:360 msgid "" "MPD allows playback even when the client is not open. If enabled, Sonata " "will behave like a more conventional music player and, instead, stop " "playback upon exit." msgstr "" "MPD voi soittaa musiikkia, vaikka asiakasta ei ole auki. Jos tämä on " "käytössä, sonata toimii kuten perinteinen musiikkisoitin ja lopettaa " "musiikin soiton sulkeutuessaan." #: .././sonata/preferences.py:362 msgid "_Write status file:" msgstr "_Kirjoita tilatiedosto:" #: .././sonata/preferences.py:364 .././sonata/preferences.py:366 msgid "" "If enabled, Sonata will create a xmms-infopipe like file containing " "information about the current song. Many applications support the xmms-info " "file (Instant Messengers, IRC Clients...)" msgstr "" "Jos käytössä, Sonata luo xmms-infopipe -tyylisen tiedoston, joka sisältää " "tietoja soivasta kappaleesta. Monet ohjelmat, esimerkiksi pikaviestimet ja " "IRC-asiakkaat, osaavat lukea xmms-info -tiedostoa." #. Format tab #: .././sonata/preferences.py:392 msgid "Song Formatting" msgstr "Kappaletietojen muotoilu" #: .././sonata/preferences.py:397 msgid "C_urrent playlist:" msgstr "_Nykyinen soittolista:" #: .././sonata/preferences.py:398 msgid "_Library:" msgstr "_Kirjasto:" #: .././sonata/preferences.py:399 msgid "_Window title:" msgstr "_Ikkunan otsikko:" #: .././sonata/preferences.py:400 msgid "Current _song line 1:" msgstr "Soiva _kappale, rivi 1:" #: .././sonata/preferences.py:402 msgid "Current s_ong line 2:" msgstr "Soiva k_appale, rivi 2:" #: .././sonata/preferences.py:422 msgid "Available options" msgstr "Mahdolliset valitsimet" #. XXX get these directly from the formatting function: #: .././sonata/preferences.py:426 msgid "Artist name" msgstr "Esittäjän nimi" #: .././sonata/preferences.py:427 msgid "Album name" msgstr "Levyn nimi" #: .././sonata/preferences.py:428 msgid "Track name" msgstr "Kappalenumero" #: .././sonata/preferences.py:429 msgid "Track number" msgstr "Kappalenumero" #: .././sonata/preferences.py:430 msgid "Disc number" msgstr "Levyn numero" #: .././sonata/preferences.py:433 msgid "File path" msgstr "Tiedoston polku" #: .././sonata/preferences.py:434 msgid "File name" msgstr "Tiedostonimi" #: .././sonata/preferences.py:435 .././sonata/streams.py:109 msgid "Stream name" msgstr "Virran nimi" #: .././sonata/preferences.py:436 msgid "Song length" msgstr "Kappaleen pituus" #: .././sonata/preferences.py:437 msgid "Elapsed time (title only)" msgstr "Kulunut aika (vain otsikko)" #: .././sonata/preferences.py:448 msgid "Info displayed only if all enclosed tags are defined" msgstr "Tiedot näytetään vain, jos kaikki merkinnät on määritelty" #: .././sonata/preferences.py:448 msgid "Creates columns in the current playlist" msgstr "Luo sarakkeita nykyiseen soittolistaan" #: .././sonata/preferences.py:473 msgid "_About" msgstr "Tietoja" #: .././sonata/preferences.py:474 msgid "_Configure..." msgstr "_Asetukset..." #: .././sonata/preferences.py:513 msgid "Loaded" msgstr "Ladattu" #: .././sonata/preferences.py:521 msgid "Description" msgstr "Kuvaus" #. Set up table #: .././sonata/preferences.py:532 msgid "MPD" msgstr "MPD" #: .././sonata/preferences.py:534 msgid "Behavior" msgstr "Toiminta" #: .././sonata/preferences.py:535 msgid "Format" msgstr "Muotoilu" #: .././sonata/preferences.py:605 msgid "New Profile" msgstr "Uusi profiili" #. Prompt user for playlist name: #: .././sonata/preferences.py:659 msgid "Custom Artwork" msgstr "Omat kansikuvat" #: .././sonata/preferences.py:661 msgid "Artwork filename" msgstr "Kansikuvan tiedostonimi" #: .././sonata/streams.py:105 msgid "Edit Stream" msgstr "muokkaa virtaa" #: .././sonata/streams.py:107 .././sonata/streams.py:138 msgid "New Stream" msgstr "Uusi virta" #: .././sonata/streams.py:116 msgid "Stream URL" msgstr "Virran URL" #: .././sonata/streams.py:138 msgid "A stream with this name already exists. Would you like to replace it?" msgstr "Tämänniminen virta on jo olemassa. Haluatko korvata sen?" #: .././sonata/tagedit.py:61 msgid "Taglib and/or tagpy not found, tag editing support disabled." msgstr "" "Taglib tai tagpy-kirjastoja ei löydy, merkintöjen muokkaus ei ole käytössä." #: .././sonata/tagedit.py:61 .././sonata/tagedit.py:70 #: .././sonata/tagedit.py:75 .././sonata/tagedit.py:99 #: .././sonata/tagedit.py:103 .././sonata/tagedit.py:260 #: .././sonata/tagedit.py:299 msgid "Edit Tags" msgstr "Muokkaa merkintöjä" #: .././sonata/tagedit.py:70 msgid "" "Tagpy version < 0.91. Please upgrade to a newer version, tag editing support " "disabled." msgstr "" "Tagpy-versio on < 0.91. Päivitä uudempaan versioon, merkintöjen muokkaus ei " "ole nyt käytössä." #: .././sonata/tagedit.py:75 msgid "The path" msgstr "Polku" #: .././sonata/tagedit.py:75 msgid "does not exist. Please specify a valid music directory in preferences." msgstr "ei ole olemassa. Anna asetuksista olemassaoleva musiikkikansio." #: .././sonata/tagedit.py:99 msgid "File " msgstr "Tiedosto" #: .././sonata/tagedit.py:99 msgid " not found. Please specify a valid music directory in preferences." msgstr "ei löytynyt. Anna olemassaoleva musiikkikansio asetuksissa." #: .././sonata/tagedit.py:103 msgid "No music files with editable tags found." msgstr "Muokattavia merkintöjä sisältäviä musiikkitiedostoja ei löytynyt." #: .././sonata/tagedit.py:150 msgid "Comment" msgstr "Kommentti" #. Only show save all button if more than one song being edited. #: .././sonata/tagedit.py:161 msgid "Save _All" msgstr "Tallenna K_aikki" #: .././sonata/tagedit.py:207 msgid "Increment each selected music file, starting at track 1 for this file." msgstr "" "Kasvata kappalenumeroa kullekin tiedostolle, alkaen numerosta yksi tämän " "tiedoston kohdalta." #: .././sonata/tagedit.py:209 msgid "Apply to all selected music files." msgstr "Toteuta kaikkiin valittuihin tiedostoihin" #: .././sonata/tagedit.py:260 msgid "of" msgstr "/" #. FIXME: was (save_success and self.conn and self.status): #: .././sonata/tagedit.py:299 msgid "Unable to save tag to music file." msgstr "Merkintää ei voitu tallentaa musiikkitiedostoon." #: .././sonata/tagedit.py:366 msgid "Hide file path" msgstr "Piilota tiedoston polku" #: .././sonata/tagedit.py:369 msgid "Show file path" msgstr "Näytä tiedoston polku" #~ msgid "_Update Path" #~ msgstr "_Päivitä polku" #~ msgid "Enable Audioscrobbler" #~ msgstr "Käytä Audioscrobbleria" #~ msgid "Enable Crossfade" #~ msgstr "Käytä ristiinhäivytystä" #~ msgid "Enable album art" #~ msgstr "Näytä kansikuvat" #~ msgid "file_path" #~ msgstr "tiedosto_polku" #~ msgid "Enable lyrics" #~ msgstr "Näytä sanat" #~ msgid "Enable system tray icon" #~ msgstr "Käytä ilmoitusaluetta" #~ msgid "_Display" #~ msgstr "_Näyttö" #~ msgid "_Extras" #~ msgstr "_Lisäosat" #~ msgid "The popup argument requires D-Bus. Aborting." #~ msgstr "Ponnahdusikkunat vaativat D-Bus:in, keskeytetään." #~ msgid "Website: http://www.nongnu.org/sonata/" #~ msgstr "Www-sivusto: http://www.nongnu.org/sonata/" #~ msgid "" #~ "PyGTK+ 2.10 or gnome-python-extras not found, system tray support " #~ "disabled." #~ msgstr "" #~ "PyGTK+ 2.10 tai gnome-python-extras -kirjastoa ei löytynyt, ilmoitusalue " #~ "ei ole käytössä." #~ msgid "Reset to Default" #~ msgstr "Käytä oletusasetuksia" #~ msgid "_New Playlist..." #~ msgstr "_Uusi soittolista..." #~ msgid "Notification" #~ msgstr "Huomautukset" #~ msgid "" #~ "Python 2.5 or python-elementtree not found, audioscrobbler support " #~ "disabled." #~ msgstr "" #~ "Python-versiota 2.5 tai python-elementtree -kirjastoa ei löytynyt, " #~ "audioscrobbler-tuki ei ole käytössä." #~ msgid "Audioscrobbler Verification" #~ msgstr "Audioscrobblerin vahvistus" #~ msgid "Update library for selected item(s)" #~ msgstr "Päivitä kirjasto valittujen kohtien osalta" ���������������������������������������������������������������������������������������������������������������������sonata-1.7.0/po/fr.po�������������������������������������������������������������������������������0000664�0000000�0000000�00000115444�13771420143�0014404�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# French translations for sonata package. # Copyright (C) 2007 THE sonata'S COPYRIGHT HOLDER # This file is distributed under the same license as the sonata package. # # Floréal M <somewhere@webend.net>, 2006-2007. # Cyril Brulebois <cyril.brulebois@enst-bretagne.fr>, 2007. # Mike Massonnet <mmassonnet@gmail.com>, 2007-2009. # msgid "" msgstr "" "Project-Id-Version: Sonata 1.6.1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-01-09 18:26+0800\n" "PO-Revision-Date: 2013-01-09 18:24+0730\n" "Last-Translator: Jonathan Ballet <jon@multani.info>\n" "Language-Team: Transifex (https://www.transifex.com/projects/p/sonata/language/fr/)\n" "Language: fr_FR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Poedit-SourceCharset: utf-8\n" "X-Generator: Poedit 1.5.4\n" #. define the shortcuts and their descriptions #. these are all gettextable #. Keep them here (not as XML) as they're more convenient this way #: ../sonata/about.py:42 msgid "About Sonata" msgstr "À propos de Sonata" #: ../sonata/about.py:43 ../sonata/ui/preferences.glade.h:5 msgid "Preferences" msgstr "Préférences" #: ../sonata/about.py:44 msgid "Fullscreen Artwork Mode" msgstr "Mode pochette plein écran" #: ../sonata/about.py:45 msgid "Switch to [1st-5th] tab" msgstr "Passer aux onglets [1-5]" #: ../sonata/about.py:46 msgid "Connect to MPD" msgstr "Connecter à MPD" #: ../sonata/about.py:47 msgid "Disconnect from MPD" msgstr "Déconnecter de MPD" #: ../sonata/about.py:48 msgid "Randomize current playlist" msgstr "Mélanger la liste courante" #: ../sonata/about.py:49 msgid "Expand player" msgstr "Étendre le client" #: ../sonata/about.py:50 msgid "Switch to previous tab" msgstr "Passer à l'onglet précédent" #: ../sonata/about.py:51 msgid "Switch to next tab" msgstr "Passer à l'onglet suivant" #: ../sonata/about.py:52 msgid "Collapse player" msgstr "Réduire le client" #: ../sonata/about.py:53 ../sonata/ui/library.glade.h:2 msgid "Search library" msgstr "Rechercher dans la bibliothèque" #: ../sonata/about.py:54 msgid "Quit" msgstr "Quitter" #: ../sonata/about.py:55 msgid "Update entire library" msgstr "Mettre à jour la bibliothèque entière" #: ../sonata/about.py:56 msgid "Display popup menu" msgstr "Afficher un menu contextuel" #: ../sonata/about.py:57 msgid "Minimize to system tray (if enabled)" msgstr "Réduire dans la zone de notification (si activé)" #: ../sonata/about.py:59 msgid "Previous track" msgstr "Morceau précédent" #: ../sonata/about.py:60 msgid "Next track" msgstr "Nouveau morceau" #: ../sonata/about.py:61 msgid "Play/Pause" msgstr "Lecture/Pause" #: ../sonata/about.py:62 msgid "Stop" msgstr "Stop" #: ../sonata/about.py:63 msgid "Lower the volume" msgstr "Baisser le volume" #: ../sonata/about.py:64 msgid "Raise the volume" msgstr "Augmenter le volume" #: ../sonata/about.py:66 msgid "Play selected song" msgstr "Jouer le morceau sélectionné" #: ../sonata/about.py:67 msgid "Remove selected song(s)" msgstr "Supprimer le(s) morceau(x) sélectionné(s) ?" #: ../sonata/about.py:68 msgid "Center currently playing song" msgstr "Centrer sur la chanson courante" #: ../sonata/about.py:69 ../sonata/about.py:78 msgid "Edit selected song's tags" msgstr "Éditer l'étiquette du (des) morceau(x) sélectionné(s)" #: ../sonata/about.py:70 msgid "Save to new playlist" msgstr "Sauvegarder dans une nouvelle liste de lecture" #: ../sonata/about.py:71 msgid "Clear list" msgstr "Nettoyer la liste de lecture" #: ../sonata/about.py:72 msgid "Randomize list" msgstr "Mélanger la liste" #: ../sonata/about.py:74 msgid "Add selected song(s) or enter directory" msgstr "Ajouter le(s) morceau(x) sélectionné(s) ou indiquer un répertoire" #: ../sonata/about.py:75 msgid "Go to parent directory" msgstr "Aller au répertoire parent" #: ../sonata/about.py:76 msgid "Add selected item(s)" msgstr "Ajouter le(s) élément(s) sélectionné(s)" #: ../sonata/about.py:77 msgid "Replace with selected item(s)" msgstr "Remplacer par le(s) élément(s) sélectionné(s)" #: ../sonata/about.py:79 msgid "Add selected item(s) and play" msgstr "Ajouter le(s) élément(s) sélectionné(s) et lire" #: ../sonata/about.py:80 msgid "Replace with selected item(s) and play" msgstr "Remplacer par le(s) élément(s) sélectionné(s) et lire" #: ../sonata/about.py:81 msgid "Update selected item(s)/path(s)" msgstr "Mettre à jour le(s) élément(s) sélectionné(s)" #: ../sonata/about.py:83 ../sonata/about.py:85 msgid "Add selected playlist(s)" msgstr "Supprimer la (les) liste(s) de lecture sélectionnée(s)" #: ../sonata/about.py:84 msgid "Remove selected playlist(s)" msgstr "Supprimer la (les) liste(s) de lecture sélectionnée(s)" #: ../sonata/about.py:86 msgid "Replace with selected playlist(s)" msgstr "Remplacer par la (les) liste(s) de lecture sélectionnée(s)" #: ../sonata/about.py:87 msgid "Add selected playlist(s) and play" msgstr "Ajouter la (les) liste(s) de lecture sélectionnée(s) et lire" #: ../sonata/about.py:91 ../sonata/about.py:93 msgid "Add selected stream(s)" msgstr "Ajouter le(s) flux sélectionné(s)" #: ../sonata/about.py:92 msgid "Remove selected stream(s)" msgstr "Supprimer le(s) flux sélectionné(s)" #: ../sonata/about.py:94 msgid "Replace with selected stream(s)" msgstr "Remplacer par le(s) flux sélectionné(s)" #: ../sonata/about.py:95 msgid "Add selected stream(s) and play" msgstr "Ajouter le(s) flux sélectionné(s) et lire" #: ../sonata/about.py:99 msgid "Edit playing song's tags" msgstr "Éditer les étiquettes du morceau courant" #. define the main array- this adds headings to each section of #. shortcuts that will be displayed #: ../sonata/about.py:102 msgid "Main Shortcuts" msgstr "Raccourcis principaux" #: ../sonata/about.py:103 msgid "Playback Shortcuts" msgstr "Raccourcis pour la lecture" #: ../sonata/about.py:104 msgid "Current Shortcuts" msgstr "Raccourcis courants" #: ../sonata/about.py:105 msgid "Library Shortcuts" msgstr "Raccourcis pour la bibliothèque" #: ../sonata/about.py:106 msgid "Playlist Shortcuts" msgstr "Raccourcis pour les listes de lecture" #: ../sonata/about.py:107 msgid "Stream Shortcuts" msgstr "Raccourcis pour les flux" #: ../sonata/about.py:108 msgid "Info Shortcuts" msgstr "Raccourcis pour les informations" #: ../sonata/about.py:145 msgid "{count} song." msgid_plural "{count} songs." msgstr[0] "{count} chanson." msgstr[1] "{count} chansons." #: ../sonata/about.py:148 msgid "{count} album." msgid_plural "{count} albums." msgstr[0] "{count} album." msgstr[1] "{count} albums." #: ../sonata/about.py:151 msgid "{count} artist." msgid_plural "{count} artists." msgstr[0] "{count} artiste." msgstr[1] "{count} artistes." #: ../sonata/about.py:161 msgid "{count} day of bliss." msgid_plural "{count} days of bliss." msgstr[0] "{count} jour de bonheur." msgstr[1] "{count} jours de bonheur" #: ../sonata/about.py:165 msgid "{count} hour of bliss." msgid_plural "{count} hours of bliss." msgstr[0] "{count} heure de bonheur." msgstr[1] "{count} heures de bonheur." #. toggle and popup and fullscreen need d-bus and don't always need gui #. version and help don't need anything and exit without gui #. hidden and visible are only applicable when gui is launched #. profile and no-start don't need anything #: ../sonata/cli.py:35 msgid "%prog [OPTION]... [COMMAND]..." msgstr "%prog [OPTION]... [COMMANDE]..." #: ../sonata/cli.py:36 msgid "Commands:" msgstr "Commandes:" #: ../sonata/cli.py:37 msgid "play song in playlist" msgstr "Lire la chanson de la liste" #: ../sonata/cli.py:38 msgid "pause currently playing song" msgstr "Mettre en pause la chanson courante" #: ../sonata/cli.py:39 msgid "stop currently playing song" msgstr "Stopper la chanson courante" #: ../sonata/cli.py:40 msgid "play next song in playlist" msgstr "Lire la chanson suivante" #: ../sonata/cli.py:41 msgid "play previous song in playlist" msgstr "Lire la chanson précédente" #: ../sonata/cli.py:42 msgid "toggle play/pause; plays if stopped" msgstr "Alterner lecture/pause ; mettre lecture si stoppé" #: ../sonata/cli.py:43 msgid "toggle repeat mode" msgstr "Alterner le mode répétition" #: ../sonata/cli.py:44 msgid "toggle random mode" msgstr "Alterner le mode aléatoire" #: ../sonata/cli.py:45 msgid "display current song info" msgstr "Afficher les informations sur la chanson courante" #: ../sonata/cli.py:46 msgid "display MPD status" msgstr "Afficher le statut de MPD" #: ../sonata/cli.py:53 msgid "popup song notification (requires D-Bus)" msgstr "Popup de notification (nécessite D-BUS)" #: ../sonata/cli.py:56 msgid "" "toggles whether the app is minimized to the tray or visible (requires D-Bus)" msgstr "" "Minimise dans la zone de notification ou rend visible l'application " "(nécessite D-BUS)" #: ../sonata/cli.py:59 msgid "go fullscreen (requires D-Bus)" msgstr "Passer en plein écran (nécessite D-BUS)" #: ../sonata/cli.py:62 msgid "don't start app if D-Bus commands fail" msgstr "Ne pas exécuter l'application si les commandes D-Bus échouent" #: ../sonata/cli.py:65 msgid "start app hidden (requires systray)" msgstr "" "Démarrer en mode invisible (nécessite la gestion de la zone de notification)" #: ../sonata/cli.py:68 msgid "start app visible (requires systray)" msgstr "" "Démarrer en mode visible (nécessite la gestion de la zone de notification)" #: ../sonata/cli.py:70 msgid "start with profile NUM" msgstr "Démarrer avec le profil [NUM]" #: ../sonata/cli.py:73 msgid "start app with a interactive (ipython) shell" msgstr "Démarrer l'application avec un shell interactif" #: ../sonata/cli.py:76 msgid "Increase log verbosity" msgstr "Augmenter la verbosité des logs" #: ../sonata/cli.py:79 msgid "Decrease log verbosity" msgstr "Diminuer la verbosité des logs" #: ../sonata/cli.py:99 #, python-format msgid "unknown command %s" msgstr "Command %s inconnue" #: ../sonata/cli.py:105 msgid "toggle and popup options require D-Bus. Aborting." msgstr "Les paramètres « toggle » et « popup » nécessitent D-Bus. Abandon." #: ../sonata/cli.py:127 #, python-format msgid "Starting Sonata with profile %s..." msgstr "Démarrage de Sonata avec le profil %s..." #: ../sonata/cli.py:131 #, python-format msgid "%d is not an available profile number." msgstr "%d n'est pas un numéro de profil disponible." #: ../sonata/cli.py:133 #, python-format msgid "Profile numbers must be between 1 and %d." msgstr "Le numéro de profil doit être entre 1 et %d." #: ../sonata/cli.py:153 ../sonata/main.py:171 msgid "Default Profile" msgstr "Profil par défaut" #: ../sonata/cli.py:154 msgid "by" msgstr "par" #: ../sonata/cli.py:154 msgid "from" msgstr "de" #: ../sonata/cli.py:178 msgid "" "Unable to connect to MPD.\n" "Please check your Sonata preferences or MPD_HOST/MPD_PORT environment " "variables." msgstr "" "Impossible de se connecter à MPD.\n" "Vérifiez vos paramètres dans les préférences de Sonata ou les variables " "d'environnement MPD_HOST/MPD_PORT." #: ../sonata/cli.py:217 ../sonata/library.py:64 ../sonata/ui/library.glade.h:5 msgid "Title" msgstr "Titre" #: ../sonata/cli.py:218 ../sonata/formatting.py:102 ../sonata/library.py:64 #: ../sonata/ui/library.glade.h:4 msgid "Artist" msgstr "Artiste" #: ../sonata/cli.py:219 ../sonata/formatting.py:103 ../sonata/library.py:64 #: ../sonata/ui/library.glade.h:6 msgid "Album" msgstr "Album" #: ../sonata/cli.py:220 msgid "Date" msgstr "Date" #: ../sonata/cli.py:221 ../sonata/formatting.py:104 msgid "Track" msgstr "Piste" #: ../sonata/cli.py:222 ../sonata/formatting.py:108 ../sonata/library.py:64 #: ../sonata/ui/library.glade.h:7 msgid "Genre" msgstr "Genre" #: ../sonata/cli.py:223 ../sonata/formatting.py:111 msgid "File" msgstr "Fichier" #: ../sonata/cli.py:237 ../sonata/cli.py:239 msgid "Time" msgstr "Temps" #: ../sonata/cli.py:240 msgid "Bitrate" msgstr "Débit" #: ../sonata/cli.py:243 msgid "MPD stopped" msgstr "MPD est stoppé" #: ../sonata/cli.py:247 msgid "Playing" msgstr "En cours de lecture" #: ../sonata/cli.py:248 msgid "Paused" msgstr "En pause" #: ../sonata/cli.py:249 ../sonata/main.py:642 ../sonata/main.py:1694 #: ../sonata/main.py:1708 msgid "Stopped" msgstr "Stoppé" #: ../sonata/cli.py:250 msgid "State" msgstr "État" #: ../sonata/cli.py:252 msgid "Repeat:" msgstr "Répéter :" #: ../sonata/cli.py:252 ../sonata/cli.py:254 msgid "On" msgstr "On" #: ../sonata/cli.py:253 ../sonata/cli.py:255 msgid "Off" msgstr "Off" #: ../sonata/cli.py:254 msgid "Random:" msgstr "Aléatoire :" #: ../sonata/cli.py:256 msgid "Volume" msgstr "Volume" #: ../sonata/cli.py:257 msgid "Crossfade" msgstr "Fondu enchaîné" #: ../sonata/cli.py:258 ../sonata/preferences.py:194 msgid "second" msgid_plural "seconds" msgstr[0] "seconde" msgstr[1] "secondes" #: ../sonata/dbus_plugin.py:101 msgid "" "Sonata failed to connect to the D-BUS session bus: Unable to determine the " "address of the message bus (try 'man dbus-launch' and 'man dbus-daemon' for " "help)\")" msgstr "" "Sonata n'a pas pu se connecter à la session D-BUS : Impossible de déterminer " "l'adresse du bus (essayez « man dbus-launch » et « man dbus-daemon » pour " "obtenir de l'aide sur son fonctionnement)" #: ../sonata/dbus_plugin.py:121 msgid "Failed to execute remote commands." msgstr "Échec de l'exécution des commandes à distance." #: ../sonata/dbus_plugin.py:123 msgid "Starting Sonata instead..." msgstr "Démarrage de Sonata à la place..." #. TODO: should we log the exception here? #: ../sonata/dbus_plugin.py:126 msgid "Maybe Sonata is not running?" msgstr "Peut-être Sonata n'est pas en cours d'exécution ?" #: ../sonata/formatting.py:28 msgid "Unknown" msgstr "Inconnu" #: ../sonata/formatting.py:102 msgid "Artist name" msgstr "Artiste" #: ../sonata/formatting.py:103 msgid "Album name" msgstr "Album" #: ../sonata/formatting.py:104 msgid "Track name" msgstr "Titre de chanson" #: ../sonata/formatting.py:105 msgid "Track number" msgstr "Numéro de piste" #: ../sonata/formatting.py:105 ../sonata/formatting.py:106 msgid "#" msgstr "#" #: ../sonata/formatting.py:106 msgid "Disc number" msgstr "Numéro du disque" #: ../sonata/formatting.py:107 msgid "Year" msgstr "Année" #: ../sonata/formatting.py:109 msgid "File path" msgstr "Chemin du fichier" #: ../sonata/formatting.py:109 ../sonata/library.py:1031 msgid "Path" msgstr "Chemin" #: ../sonata/formatting.py:111 msgid "File name" msgstr "Nom du fichier" #: ../sonata/formatting.py:113 msgid "Stream name" msgstr "Nom du flux" #: ../sonata/formatting.py:113 msgid "Stream" msgstr "Flux" #: ../sonata/formatting.py:114 msgid "Song length" msgstr "Longueur de la chanson" #: ../sonata/formatting.py:114 msgid "Len" msgstr "Durée" #: ../sonata/formatting.py:115 msgid "Elapsed time (title only)" msgstr "Temps écoulé (titre seulement)" #: ../sonata/info.py:157 msgid "hide" msgstr "cacher" #: ../sonata/info.py:160 msgid "more" msgstr "plus" #: ../sonata/info.py:245 msgid "Album name not set." msgstr "Nom de l'album non spécifié." #: ../sonata/info.py:249 msgid "Album info not found." msgstr "Informations sur l'album non trouvées." #: ../sonata/info.py:311 msgid "Lyrics not found" msgstr "Paroles non trouvées" #: ../sonata/info.py:347 msgid "Fetching lyrics..." msgstr "Récupération des paroles..." #: ../sonata/info.py:368 msgid "Lyrics not found." msgstr "Paroles non trouvées." #: ../sonata/info.py:370 msgid "No lyrics plug-in enabled." msgstr "Aucun greffon de parole activé" #: ../sonata/library.py:14 msgid "Various Artists" msgstr "Artistes divers" #: ../sonata/library.py:63 msgid "Untagged" msgstr "Aucune étiquette" #: ../sonata/library.py:65 ../sonata/ui/library.glade.h:8 msgid "Filename" msgstr "Nom du fichier" #: ../sonata/library.py:65 ../sonata/ui/library.glade.h:9 msgid "Everything" msgstr "Tout" #: ../sonata/library.py:140 msgid "Filesystem" msgstr "Système de fichiers" #: ../sonata/library.py:142 msgid "Albums" msgstr "Albums" #: ../sonata/library.py:144 msgid "Artists" msgstr "Artistes" #: ../sonata/library.py:146 msgid "Genres" msgstr "Genres" #: ../sonata/library.py:925 ../sonata/main.py:1615 msgid "{count} song" msgid_plural "{count} songs" msgstr[0] "{count} chanson" msgstr[1] "{count} chansons" #: ../sonata/library.py:927 msgid "{count} second" msgid_plural "{count} seconds" msgstr[0] "{count} seconde" msgstr[1] "{count} secondes" #: ../sonata/library.py:929 ../sonata/main.py:1630 msgid "{count} minute" msgid_plural "{count} minutes" msgstr[0] "{count} minute" msgstr[1] "{count} minutes" #: ../sonata/library.py:931 ../sonata/main.py:1626 msgid "{count} hour" msgid_plural "{count} hours" msgstr[0] "{count} heure." msgstr[1] "{count} heures." #: ../sonata/library.py:1031 msgid "Song" msgstr "Chanson" #. Constants #: ../sonata/main.py:93 msgid "Current" msgstr "En cours" #: ../sonata/main.py:94 msgid "Library" msgstr "Bibliothèque" #: ../sonata/main.py:95 msgid "Playlists" msgstr "Listes de lecture" #: ../sonata/main.py:96 msgid "Streams" msgstr "Flux" #: ../sonata/main.py:97 msgid "Info" msgstr "Infos" #: ../sonata/main.py:129 ../sonata/preferences.py:195 #: ../sonata/ui/preferences.glade.h:59 msgid "Entire song" msgstr "Chanson entière" #: ../sonata/main.py:171 msgid "by %A from %B" msgstr "par %A dans %B" #: ../sonata/main.py:233 msgid "_Sort List" msgstr "Trier la li_ste" #: ../sonata/main.py:234 msgid "Sa_ve Selected to" msgstr "_Sauvegarder les élément(s) sélectionné(s) vers" #: ../sonata/main.py:235 msgid "_Connection" msgstr "_Connexion" #: ../sonata/main.py:236 msgid "P_lay after" msgstr "L_ire après" #: ../sonata/main.py:237 msgid "Play _Mode" msgstr "_Mode de lecture" #: ../sonata/main.py:238 msgid "_Update" msgstr "Mettre à jo_ur" #: ../sonata/main.py:239 msgid "Use _Remote Image..." msgstr "Utilise_r une image distante..." #: ../sonata/main.py:241 msgid "Use _Local Image..." msgstr "Utiliser une image _locale..." #: ../sonata/main.py:244 msgid "_Fullscreen Mode" msgstr "Mode _plein écran" #: ../sonata/main.py:245 msgid "Reset Image" msgstr "Réinitialiser l'image" #: ../sonata/main.py:247 msgid "_Play" msgstr "_Lecture" #: ../sonata/main.py:249 msgid "Pa_use" msgstr "Pa_use" #: ../sonata/main.py:251 msgid "_Stop" msgstr "_Stop" #: ../sonata/main.py:253 msgid "Pre_vious" msgstr "_Précédent" #: ../sonata/main.py:255 msgid "_Next" msgstr "_Suivant" #: ../sonata/main.py:257 msgid "_Quit" msgstr "_Quitter" #: ../sonata/main.py:259 msgid "_Remove" msgstr "_Retirer" #: ../sonata/main.py:261 msgid "_Clear" msgstr "_Vider" #: ../sonata/main.py:263 msgid "_Entire Library" msgstr "Bibliothèque _entière" #: ../sonata/main.py:265 msgid "_Selected Items" msgstr "Élément(s) _sélectionné(s)" #: ../sonata/main.py:267 msgid "_Preferences..." msgstr "_Préférences..." #: ../sonata/main.py:269 msgid "_About..." msgstr "_À propos..." #: ../sonata/main.py:270 msgid "_Edit Tags..." msgstr "_Éditer les étiquettes..." #: ../sonata/main.py:272 msgid "_Add" msgstr "_Ajouter" #: ../sonata/main.py:274 msgid "_Replace" msgstr "_Remplacer" #: ../sonata/main.py:276 msgid "Add" msgstr "Ajouter" #: ../sonata/main.py:278 msgid "Replace" msgstr "Remplacer" #: ../sonata/main.py:280 msgid "_Delete..." msgstr "_Supprimer..." #: ../sonata/main.py:281 msgid "Shuffle" msgstr "Aléatoire" #: ../sonata/main.py:321 msgid "S_how Sonata" msgstr "_Montrer Sonata" #: ../sonata/main.py:323 msgid "_Repeat" msgstr "_Répéter" #: ../sonata/main.py:325 msgid "Rando_m" msgstr "_Aléatoire" #: ../sonata/main.py:327 msgid "Consume" msgstr "Consommer" #: ../sonata/main.py:475 msgid "By Artist" msgstr "Par artiste" #: ../sonata/main.py:477 msgid "By Album" msgstr "Par album" #: ../sonata/main.py:479 msgid "By Song Title" msgstr "Par titre de chanson" #: ../sonata/main.py:481 msgid "By File Name" msgstr "Par nom de fichier" #: ../sonata/main.py:483 msgid "By Dir & File Name" msgstr "Par chemin et nom de fichier" #: ../sonata/main.py:485 msgid "Reverse List" msgstr "Renverser la liste" #: ../sonata/main.py:530 msgid "_New..." msgstr "_Nouveau..." #: ../sonata/main.py:532 msgid "_Edit..." msgstr "_Éditer..." #: ../sonata/main.py:553 msgid "_New Playlist..." msgstr "_Nouvelle liste de lecture..." #: ../sonata/main.py:555 msgid "_Rename..." msgstr "_Renommer..." #: ../sonata/main.py:598 #, python-format msgid "Enabling new plug-in %s..." msgstr "Activation du nouveau greffon %s..." #: ../sonata/main.py:601 #, python-format msgid "Found new plug-in %s." msgstr "Nouveau greffon %s trouvé." #: ../sonata/main.py:646 ../sonata/main.py:1699 ../sonata/main.py:1909 msgid "Click to expand" msgstr "Cliquer pour étendre" #: ../sonata/main.py:649 ../sonata/main.py:1697 ../sonata/main.py:1907 msgid "Click to collapse" msgstr "Cliquer pour réduire" #: ../sonata/main.py:656 ../sonata/main.py:1603 ../sonata/main.py:1704 msgid "Not Connected" msgstr "Non connecté" #: ../sonata/main.py:658 ../sonata/main.py:1601 ../sonata/main.py:1706 msgid "No Read Permission" msgstr "Aucune permission en lecture" #: ../sonata/main.py:871 msgid "MPD_HOST/PORT" msgstr "MPD_HOST/PORT" #: ../sonata/main.py:885 msgid "Disconnect" msgstr "Déconnecter" #: ../sonata/main.py:1622 msgid "{count} day" msgid_plural "{count} days" msgstr[0] "{count} jour." msgstr[1] "{count} jours." #: ../sonata/main.py:1639 msgid "(updating mpd)" msgstr "(mise à jour de mpd)" #: ../sonata/main.py:2304 msgid "Images" msgstr "Images" #: ../sonata/main.py:2308 msgid "All files" msgstr "Tous les fichiers" #: ../sonata/main.py:2429 msgid "No artist or album name found." msgstr "Pas d'artiste ou de nom d'album trouvé." #: ../sonata/main.py:2432 msgid "No cover art found." msgstr "Aucune pochette n'a été trouvée." #: ../sonata/main.py:2681 msgid "Delete the selected playlist?" msgid_plural "Delete the selected playlists?" msgstr[0] "Supprimer la liste de lecture sélectionnée ?" msgstr[1] "Supprimer les listes de lecture sélectionnées ?" #: ../sonata/main.py:2684 msgid "Delete Playlist" msgid_plural "Delete Playlists" msgstr[0] "Supprimer la liste de lecture" msgstr[1] "Supprimer les listes de lecture" #: ../sonata/main.py:2698 msgid "Delete the selected stream?" msgid_plural "Delete the selected streams?" msgstr[0] "Supprimer le flux sélectionné ?" msgstr[1] "Supprimer les flux sélectionnés ?" #: ../sonata/main.py:2701 msgid "Delete Stream" msgid_plural "Delete Streams" msgstr[0] "Supprimer le flux" msgstr[1] "Supprimer les flux" #: ../sonata/main.py:2967 msgid "Unable to launch a suitable browser." msgstr "Impossible de lancer un navigateur compatible." #: ../sonata/main.py:2968 msgid "Launch Browser" msgstr "Lancer le navigateur" #: ../sonata/playlists.py:115 ../sonata/playlists.py:118 msgid "Save Playlist" msgstr "Sauvegarder la liste" #: ../sonata/playlists.py:140 msgid "Existing Playlist" msgstr "Liste de lecture existante" #: ../sonata/playlists.py:141 msgid "Replace playlist" msgstr "Remplacer la liste de lecture" #: ../sonata/playlists.py:142 msgid "Append songs" msgstr "Ajouter les chansons" #: ../sonata/playlists.py:216 ../sonata/playlists.py:219 msgid "Rename Playlist" msgstr "Renommer la liste de lecture" #: ../sonata/plugins/localmpd.py:98 msgid "Processes" msgstr "Processus" #: ../sonata/plugins/localmpd.py:99 msgid "Files" msgstr "Fichiers" #: ../sonata/plugins/localmpd.py:108 msgid "Networking" msgstr "Réseau" #: ../sonata/plugins/ui/localmpd.glade.h:1 msgid "Local MPD" msgstr "MPD locale" #: ../sonata/plugins/ui/localmpd.glade.h:2 msgid "Edit /etc/mpd.conf" msgstr "Éditer /etc/mpd.conf" #: ../sonata/plugins/ui/localmpd.glade.h:3 msgid "Restart the mpd service" msgstr "Redémarrer le service MPD" #: ../sonata/preferences.py:152 msgid "Using MPD_HOST/PORT" msgstr "Utilisation de MPD_HOST/PORT" #: ../sonata/preferences.py:248 ../sonata/ui/preferences.glade.h:22 msgid "SONG_DIR" msgstr "SONG_DIR" #: ../sonata/preferences.py:250 ../sonata/preferences.py:555 msgid "custom" msgstr "personnalisé" #: ../sonata/preferences.py:371 msgid "Info displayed only if all enclosed tags are defined" msgstr "" "Informations affichées uniquement si toutes les étiquettes sont présentes." #: ../sonata/preferences.py:376 msgid "Creates columns in the current playlist" msgstr "Crée des colonnes dans la liste courante" #: ../sonata/preferences.py:421 msgid "" "To save lyrics to the music file's directory, you must specify a valid music " "directory." msgstr "" "Pour sauver les paroles, vous devez indiquer un répertoire de musique valide " "dans les préférences." #: ../sonata/preferences.py:421 ../sonata/preferences.py:428 msgid "Music Dir Verification" msgstr "Vérification du répertoire de musique" #: ../sonata/preferences.py:428 msgid "" "To save artwork to the music file's directory, you must specify a valid " "music directory." msgstr "" "Pour sauver les pochettes, vous devez indiquer un chemin de musique valide " "dans les préférences." #: ../sonata/preferences.py:493 msgid "New Profile" msgstr "Nouveau Profil" #: ../sonata/streams.py:105 msgid "Edit Stream" msgstr "Éditer le flux" #: ../sonata/streams.py:107 ../sonata/streams.py:150 msgid "New Stream" msgstr "Nouveau flux" #: ../sonata/streams.py:149 msgid "A stream with this name already exists. Would you like to replace it?" msgstr "Un flux homonyme existe déjà. Voulez-vous le remplacer ?" #: ../sonata/tagedit.py:98 msgid "Taglib and/or tagpy not found, tag editing support disabled." msgstr "" "Taglib et/ou taggy non trouvé, l'édition des étiquettes ne sera pas possible." #: ../sonata/tagedit.py:98 ../sonata/tagedit.py:107 ../sonata/tagedit.py:112 #: ../sonata/tagedit.py:137 ../sonata/tagedit.py:141 ../sonata/tagedit.py:276 msgid "Edit Tags" msgstr "Éditer les Étiquettes" #: ../sonata/tagedit.py:107 msgid "" "Tagpy version < 0.91. Please upgrade to a newer version, tag editing support " "disabled." msgstr "" "Tagpy < 0.91. Veuillez mettre à jour vers une version plus récente, support " "des tags désactivés." #: ../sonata/tagedit.py:112 #, python-format msgid "" "The path %s does not exist. Please specify a valid music directory in " "preferences." msgstr "" "Le chemin %s n'existe pas. Merci d'indiquer un chemin de musique valable " "dans les préférences." #: ../sonata/tagedit.py:137 #, python-format msgid "" "File '%s' not found. Please specify a valid music directory in preferences." msgstr "" "Le fichier %s n'existe pas. Merci d'indiquer un chemin de musique valable " "dans les préférences." #: ../sonata/tagedit.py:141 msgid "No music files with editable tags found." msgstr "Aucun fichier audio avec des étiquettes éditables n'a été trouvé." #: ../sonata/tagedit.py:254 #, python-format msgid "Edit Tags - %s of %s" msgstr "Éditer les étiquettes - %s de %s" #: ../sonata/tagedit.py:275 msgid "Unable to save tag to music file." msgstr "Impossible de sauvegarder l'étiquette dans le fichier audio." #: ../sonata/tagedit.py:332 msgid "Hide file path" msgstr "Masquer le chemin du fichier" #: ../sonata/tagedit.py:335 msgid "Show file path" msgstr "Afficher le chemin du fichier" #: ../sonata/ui/about.glade.h:1 msgid "" "Sonata, an elegant GTK+ client for the Music Player Daemon\n" "Copyright 2006-2008 Scott Horowitz <stonecrest@gmail.com>" msgstr "" "Sonata, un client GTK+ élégant pour Music Player Daemon\n" "Copyright 2006-2008 Scott Horowitz <stonecrest@gmail.com>" #: ../sonata/ui/about.glade.h:3 msgid "An elegant music client for MPD." msgstr "Un client élégant pour MPD." #: ../sonata/ui/about.glade.h:4 msgid "_Shortcuts" msgstr "_Raccourcis" #: ../sonata/ui/about.glade.h:5 msgid "Shortcuts" msgstr "Raccourcis" #: ../sonata/ui/current.glade.h:1 msgid "Filter:" msgstr "Filtre :" #: ../sonata/ui/info.glade.h:1 ../sonata/ui/tagedit.glade.h:2 msgid "Title:" msgstr "Titre :" #: ../sonata/ui/info.glade.h:2 ../sonata/ui/sonata.glade.h:4 #: ../sonata/ui/tagedit.glade.h:3 msgid "Artist:" msgstr "Artiste :" #: ../sonata/ui/info.glade.h:3 ../sonata/ui/sonata.glade.h:5 #: ../sonata/ui/tagedit.glade.h:4 msgid "Album:" msgstr "Album :" #: ../sonata/ui/info.glade.h:4 msgid "Date:" msgstr "Date :" #: ../sonata/ui/info.glade.h:5 ../sonata/ui/tagedit.glade.h:8 msgid "Track:" msgstr "Piste :" #: ../sonata/ui/info.glade.h:6 ../sonata/ui/tagedit.glade.h:6 msgid "Genre:" msgstr "Genre :" #: ../sonata/ui/info.glade.h:7 msgid "File:" msgstr "Fichier :" #: ../sonata/ui/info.glade.h:8 msgid "Bitrate:" msgstr "Débit :" #: ../sonata/ui/info.glade.h:9 msgid "Launch artist in Wikipedia" msgstr "Voir l'artiste sur Wikipedia" #: ../sonata/ui/info.glade.h:10 msgid "Launch album in Wikipedia" msgstr "Voir l'album sur Wikipedia" #: ../sonata/ui/info.glade.h:11 msgid "Toggle extra tags" msgstr "Permuter les étiquettes supplémentaires" #: ../sonata/ui/info.glade.h:12 msgid "Edit song tags" msgstr "Éditer les étiquettes" #: ../sonata/ui/info.glade.h:13 msgid "(edit tags)" msgstr "(éditer les étiquettes)" #: ../sonata/ui/info.glade.h:14 msgid "Song Info" msgstr "Informations sur la chanson" #: ../sonata/ui/info.glade.h:15 msgid "Search Lyricwiki.org for lyrics" msgstr "Rechercher les paroles sur Lyricwiki.org" #: ../sonata/ui/info.glade.h:16 msgid "(search)" msgstr "(rechercher)" #: ../sonata/ui/info.glade.h:17 msgid "Lyrics" msgstr "Paroles" #: ../sonata/ui/info.glade.h:18 msgid "Album Info" msgstr "Informations sur l'album" #: ../sonata/ui/library.glade.h:1 msgid "Search:" msgstr "Rechercher :" #: ../sonata/ui/library.glade.h:3 msgid "Search terms" msgstr "Termes de recherche" #: ../sonata/ui/library.glade.h:10 msgid "End Search" msgstr "Fin de recherche" #: ../sonata/ui/playlists.glade.h:1 msgid "Playlist name:" msgstr "Nom de la liste de lecture :" #: ../sonata/ui/preferences.glade.h:1 msgid "Custom Artwork" msgstr "Pochette Personnalisée" #: ../sonata/ui/preferences.glade.h:2 msgid "Artwork filename:" msgstr "Fichier de la pochette :" #: ../sonata/ui/preferences.glade.h:3 msgid "_About" msgstr "_À propos" #: ../sonata/ui/preferences.glade.h:4 msgid "_Configure..." msgstr "_Configurer..." #: ../sonata/ui/preferences.glade.h:6 msgid "_Name:" msgstr "_Nom :" #: ../sonata/ui/preferences.glade.h:7 msgid "_Host:" msgstr "_Hôte :" #: ../sonata/ui/preferences.glade.h:8 msgid "_Port:" msgstr "_Port :" #: ../sonata/ui/preferences.glade.h:9 msgid "Leave blank if no password is required." msgstr "Laisser vide si le mot de passe n'est pas nécessaire." #: ../sonata/ui/preferences.glade.h:10 msgid "Pa_ssword:" msgstr "_Mot de passe :" #: ../sonata/ui/preferences.glade.h:11 msgid "Select a Music Directory" msgstr "Sélectionnez le répertoire de musique" #: ../sonata/ui/preferences.glade.h:12 msgid "_Music dir:" msgstr "_Répertoire de musique :" #: ../sonata/ui/preferences.glade.h:13 msgid "_Autoconnect on start" msgstr "_Connexion automatique au démarrage" #: ../sonata/ui/preferences.glade.h:14 msgid "MPD Connection" msgstr "Connexion à MPD" #: ../sonata/ui/preferences.glade.h:15 msgid "MPD" msgstr "MPD" #: ../sonata/ui/preferences.glade.h:16 msgid "_Playback/volume buttons" msgstr "_Afficher les boutons de lecture/volume" #: ../sonata/ui/preferences.glade.h:17 msgid "Pr_ogressbar" msgstr "Activer la _barre de progression" #: ../sonata/ui/preferences.glade.h:18 msgid "_Statusbar" msgstr "Afficher la barre de _statut" #: ../sonata/ui/preferences.glade.h:19 msgid "System _tray icon" msgstr "_Zone de notification" #: ../sonata/ui/preferences.glade.h:20 msgid "Song Ly_rics" msgstr "_Paroles" #: ../sonata/ui/preferences.glade.h:21 msgid "Save lyrics to:" msgstr "Sauver les paroles vers :" #: ../sonata/ui/preferences.glade.h:23 msgid "_Album art" msgstr "_Pochette" #: ../sonata/ui/preferences.glade.h:24 msgid "Artwork style:" msgstr "Style de la pochette :" #: ../sonata/ui/preferences.glade.h:25 msgid "Standard" msgstr "Standard" #: ../sonata/ui/preferences.glade.h:26 msgid "Stylized" msgstr "Boîtier" #: ../sonata/ui/preferences.glade.h:27 msgid "Search locations:" msgstr "Chemins de recherche :" #: ../sonata/ui/preferences.glade.h:28 msgid "Local only" msgstr "En local seulement" #: ../sonata/ui/preferences.glade.h:29 msgid "Local and remote" msgstr "Local et à distance" #: ../sonata/ui/preferences.glade.h:30 msgid "Save art to:" msgstr "Sauver la pochette vers :" #: ../sonata/ui/preferences.glade.h:31 msgid "Display" msgstr "Affichage" #: ../sonata/ui/preferences.glade.h:32 msgid "_Show window on all workspaces" msgstr "Montrer la fenêtre sur tous les _espaces de travail" #: ../sonata/ui/preferences.glade.h:33 msgid "_Keep window above other windows" msgstr "Toujours _au-dessus des autres fenêtres" #: ../sonata/ui/preferences.glade.h:34 msgid "_Hide window titlebar" msgstr "_Masquer la décoration de la fenêtre" #: ../sonata/ui/preferences.glade.h:35 msgid "_Minimize to system tray on close/escape" msgstr "_Réduire dans la zone de notification à la fermeture" #: ../sonata/ui/preferences.glade.h:36 msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, " "so only check this if you have one." msgstr "" "Si activé, à la fermeture, Sonata se minimisera dans la zone de " "notification. NB : il est impossible de détecter la présence d'une zone de " "notification. Vérifiez que vous en avez une." #: ../sonata/ui/preferences.glade.h:37 msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, so " "only check this if you have one." msgstr "" "Si activé, à la fermeture, Sonata se minimisera dans la zone de " "notification. NB : il est impossible de détecter la présence d'une zone de " "notification. Vérifiez que vous en avez une." #: ../sonata/ui/preferences.glade.h:38 msgid "Window Behavior" msgstr "Comportement de la fenêtre" #: ../sonata/ui/preferences.glade.h:39 msgid "_Update MPD library on start" msgstr "Mettre à jour la _bibliothèque de MPD au démarrage" #: ../sonata/ui/preferences.glade.h:40 msgid "" "If enabled, Sonata will automatically update your MPD library when it starts " "up." msgstr "" "Si activé, Sonata mettra à jour automatiquement votre bibliothèque MPD lors " "de son démarrage." #: ../sonata/ui/preferences.glade.h:41 msgid "S_top playback on exit" msgstr "Arrêter la lecture en _quittant" #: ../sonata/ui/preferences.glade.h:42 msgid "" "MPD allows playback even when the client is not open. If enabled, Sonata " "will behave like a more conventional music player and, instead, stop " "playback upon exit." msgstr "" "MPD permet d'écouter de la musique même quand le client n'est pas lancé. Si " "cette option est activée, Sonata se comportera comme un lecteur traditionnel " "et stoppera la lecture à sa fermeture." #: ../sonata/ui/preferences.glade.h:43 msgid "_Write status file:" msgstr "Écrire dans le _fichier d'état :" #: ../sonata/ui/preferences.glade.h:44 msgid "" "If enabled, Sonata will create a xmms-infopipe like file containing " "information about the current song. Many applications support the xmms-info " "file (Instant Messengers, IRC Clients...)" msgstr "" "Si activé, Sonata générera un fichier semblable à « xmms-infopipe », " "contenant des informations à propos de la chanson en cours. De nombreuses " "applications gère ce fichier (messageries instantanées, clients IRC, etc.)." #: ../sonata/ui/preferences.glade.h:45 msgid "Miscellaneous" msgstr "Divers" #: ../sonata/ui/preferences.glade.h:46 msgid "Behavior" msgstr "Comportement" #: ../sonata/ui/preferences.glade.h:47 msgid "C_urrent playlist:" msgstr "_Liste courante :" #: ../sonata/ui/preferences.glade.h:48 msgid "_Library:" msgstr "_Bibliothèque :" #: ../sonata/ui/preferences.glade.h:49 msgid "_Window title:" msgstr "_Titre de la fenêtre :" #: ../sonata/ui/preferences.glade.h:50 msgid "Current _song line 1:" msgstr "_Chanson courante (ligne 1) :" #: ../sonata/ui/preferences.glade.h:51 msgid "Current s_ong line 2:" msgstr "_Chanson courante (ligne 2) :" #: ../sonata/ui/preferences.glade.h:52 msgid "<small>Available options:</small>" msgstr "<small>Options disponibles :</small>" #: ../sonata/ui/preferences.glade.h:53 msgid "Song Formatting" msgstr "Format de la chanson" #: ../sonata/ui/preferences.glade.h:54 msgid "Format" msgstr "Format" #: ../sonata/ui/preferences.glade.h:55 msgid "_Audioscrobbling (Last.fm)" msgstr "_Audioscrobbling (Last.fm)" #: ../sonata/ui/preferences.glade.h:56 msgid "_Username:" msgstr "_Identifiant :" #: ../sonata/ui/preferences.glade.h:57 msgid "_Password:" msgstr "_Mot de passe :" #: ../sonata/ui/preferences.glade.h:58 msgid "Popup _notification on song changes" msgstr "Popup de _notification au changement de chanson" #: ../sonata/ui/preferences.glade.h:60 msgid "System tray" msgstr "Zone de notification" #: ../sonata/ui/preferences.glade.h:61 msgid "Top Left" msgstr "Haut gauche" #: ../sonata/ui/preferences.glade.h:62 msgid "Top Right" msgstr "Haut droit" #: ../sonata/ui/preferences.glade.h:63 msgid "Bottom Left" msgstr "Bas gauche" #: ../sonata/ui/preferences.glade.h:64 msgid "Bottom Right" msgstr "Bas droite" #: ../sonata/ui/preferences.glade.h:65 msgid "Screen Center" msgstr "Centre de l'écran" #: ../sonata/ui/preferences.glade.h:66 msgid "C_rossfade" msgstr "_Fondu enchaîné" #: ../sonata/ui/preferences.glade.h:67 msgid "_Fade length:" msgstr "_Durée du fondu enchaîné :" #: ../sonata/ui/preferences.glade.h:68 msgid "sec" msgstr "sec." #: ../sonata/ui/preferences.glade.h:69 msgid "Extras" msgstr "Extras" #: ../sonata/ui/preferences.glade.h:70 msgid "Enabled" msgstr "Activé" #: ../sonata/ui/preferences.glade.h:71 msgid "Description" msgstr "Description" #: ../sonata/ui/preferences.glade.h:72 msgid "Plugins" msgstr "Greffons" #: ../sonata/ui/sonata.glade.h:1 msgid "Playlist" msgstr "Liste de lecture" #: ../sonata/ui/sonata.glade.h:2 msgid "Cover Art" msgstr "Pochette" #: ../sonata/ui/sonata.glade.h:3 msgid "Choose Cover Art" msgstr "Choisir une pochette" #: ../sonata/ui/sonata.glade.h:6 msgid "Edit search terms" msgstr "Éditer les termes de la recherche" #: ../sonata/ui/sonata.glade.h:7 msgid "Lyrics Search" msgstr "Recherche de paroles" #: ../sonata/ui/sonata.glade.h:8 msgid "Artist Name:" msgstr "Artiste :" #: ../sonata/ui/sonata.glade.h:9 msgid "Song Title:" msgstr "Titre de la chanson :" #: ../sonata/ui/sonata.glade.h:10 msgid "Open Image" msgstr "Ouvrir image" #: ../sonata/ui/streams.glade.h:1 msgid "Stream name:" msgstr "Nom du flux :" #: ../sonata/ui/streams.glade.h:2 msgid "Stream URL:" msgstr "Adresse du flux :" #: ../sonata/ui/tagedit.glade.h:1 msgid "Save _All" msgstr "Tout sauver" #: ../sonata/ui/tagedit.glade.h:5 msgid "Year:" msgstr "Année :" #: ../sonata/ui/tagedit.glade.h:7 msgid "Comment:" msgstr "Commentaire :" #~ msgid "song" #~ msgid_plural "songs" #~ msgstr[0] "chanson" #~ msgstr[1] "chansons" #~ msgid "album" #~ msgid_plural "albums" #~ msgstr[0] "album" #~ msgstr[1] "albums" #~ msgid "artist" #~ msgid_plural "artists" #~ msgstr[0] "artiste" #~ msgstr[1] "artistes" #~ msgid "hour" #~ msgid_plural "hours" #~ msgstr[0] "heure" #~ msgstr[1] "heures" #~ msgid "Fetching lyrics failed" #~ msgstr "Impossible de récupérer les paroles" #~ msgid "day" #~ msgid_plural "days" #~ msgstr[0] "jour" #~ msgstr[1] "jours" #~ msgid "Edit lyrics at Lyricwiki.org" #~ msgstr "Editer les paroles sur Lyricwiki.org" #~ msgid "(edit)" #~ msgstr "(éditer)" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/po/it.po�������������������������������������������������������������������������������0000664�0000000�0000000�00000137247�13771420143�0014416�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is distributed under the same license as the Sonata package. # Gianni Vialetto <forgottencrow@gmail.com>, 2007. # # Translator Notes (in Italian): # # Track & Song: non è necessario distinguere questi due termini, in quanto # utilizzando mpd non c'è distinzione tra tracce audio e file mp3. # Vengono tradotti entrambi come "brano". # # Music dir: è stato lasciato come "Music dir", principalmente per motivi di # spazio. Potrebbe essere modificato in future release. # msgid "" msgstr "" "Project-Id-Version: Sonata 1.333\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-06-16 00:30+0100\n" "PO-Revision-Date: 2009-06-16 00:41+0100\n" "Last-Translator: Alin Hantig <hantigalin@gmail.com>\n" "Language-Team: Sonata-IT <nomail@nomail.it>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Poedit-Basepath: sonta\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Poedit-Language: Italian\n" "X-Poedit-Country: ITALY\n" "X-Poedit-SourceCharset: utf-8\n" "X-Poedit-SearchPath-0: .\n" #: Desktop/sonata-1.6.2/sonata/current.py:64 msgid "Filter" msgstr "Filtro" #: Desktop/sonata-1.6.2/sonata/preferences.py:27 msgid "System tray" msgstr "Area di notifica" #: Desktop/sonata-1.6.2/sonata/preferences.py:27 msgid "Top Left" msgstr "In Alto a Sinistra" #: Desktop/sonata-1.6.2/sonata/preferences.py:27 msgid "Top Right" msgstr "In Alto a Destra" #: Desktop/sonata-1.6.2/sonata/preferences.py:28 msgid "Bottom Left" msgstr "In Basso a Sinistra" #: Desktop/sonata-1.6.2/sonata/preferences.py:28 msgid "Bottom Right" msgstr "In Basso a Destra" #: Desktop/sonata-1.6.2/sonata/preferences.py:29 msgid "Screen Center" msgstr "Centro dello schermo" #: Desktop/sonata-1.6.2/sonata/preferences.py:96 #: Desktop/sonata-1.6.2/sonata/about.py:55 msgid "Preferences" msgstr "Preferenze" #: Desktop/sonata-1.6.2/sonata/preferences.py:99 msgid "MPD" msgstr "MPD" #: Desktop/sonata-1.6.2/sonata/preferences.py:100 #: Desktop/sonata-1.6.2/sonata/preferences.py:343 msgid "Display" msgstr "Display" #: Desktop/sonata-1.6.2/sonata/preferences.py:101 msgid "Behavior" msgstr "Comportamento" #: Desktop/sonata-1.6.2/sonata/preferences.py:102 msgid "Format" msgstr "Formato" #: Desktop/sonata-1.6.2/sonata/preferences.py:103 #: Desktop/sonata-1.6.2/sonata/preferences.py:245 msgid "Extras" msgstr "Extra" #: Desktop/sonata-1.6.2/sonata/preferences.py:104 msgid "Plugins" msgstr "Plugin" #: Desktop/sonata-1.6.2/sonata/preferences.py:128 msgid "MPD Connection" msgstr "Connessione ad MPD" #: Desktop/sonata-1.6.2/sonata/preferences.py:141 msgid "_Name" msgstr "_Nome" #: Desktop/sonata-1.6.2/sonata/preferences.py:144 msgid "_Host" msgstr "_Host" #: Desktop/sonata-1.6.2/sonata/preferences.py:147 msgid "_Port" msgstr "_Porta" #: Desktop/sonata-1.6.2/sonata/preferences.py:151 msgid "_Music dir" msgstr "_Music dir" #: Desktop/sonata-1.6.2/sonata/preferences.py:152 msgid "Select a Music Directory" msgstr "Seleziona una Music Dir" #: Desktop/sonata-1.6.2/sonata/preferences.py:158 msgid "Pa_ssword" msgstr "Pa_ssword" #: Desktop/sonata-1.6.2/sonata/preferences.py:161 msgid "Leave blank if no password is required." msgstr "Lasciare vuoto se non è richiesta nessuna password" #: Desktop/sonata-1.6.2/sonata/preferences.py:162 msgid "_Autoconnect on start" msgstr "_Connettiti automaticamente all'avvio" #: Desktop/sonata-1.6.2/sonata/preferences.py:182 msgid "Using MPD_HOST/PORT" msgstr "Uso MPD_HOST/PORT" #: Desktop/sonata-1.6.2/sonata/preferences.py:250 msgid "_Audioscrobbling (Last.fm)" msgstr "_Audioscrobbling (Last.fm)" #: Desktop/sonata-1.6.2/sonata/preferences.py:252 msgid "_Username:" msgstr "_Nome utente:" #: Desktop/sonata-1.6.2/sonata/preferences.py:253 msgid "_Password:" msgstr "_Password:" #: Desktop/sonata-1.6.2/sonata/preferences.py:273 msgid "Popup _notification on song changes" msgstr "Popup di _notifica al cambio del brano" #: Desktop/sonata-1.6.2/sonata/preferences.py:277 #: Desktop/sonata-1.6.2/sonata/cli.py:242 msgid "second" msgid_plural "seconds" msgstr[0] "secondo" msgstr[1] "secondi" #: Desktop/sonata-1.6.2/sonata/preferences.py:278 #: Desktop/sonata-1.6.2/sonata/preferences.py:279 #: Desktop/sonata-1.6.2/sonata/main.py:137 msgid "Entire song" msgstr "Tutta il brano" #: Desktop/sonata-1.6.2/sonata/preferences.py:299 msgid "Fade length" msgstr "Durata dell'effetto Crossfade" #: Desktop/sonata-1.6.2/sonata/preferences.py:300 msgid "_Fade length" msgstr "_Durata dell'effetto" #: Desktop/sonata-1.6.2/sonata/preferences.py:302 msgid "sec" msgstr "sec" #: Desktop/sonata-1.6.2/sonata/preferences.py:307 msgid "C_rossfade" msgstr "C_rossfade" #: Desktop/sonata-1.6.2/sonata/preferences.py:348 msgid "_Album art" msgstr "_Copertina" #: Desktop/sonata-1.6.2/sonata/preferences.py:350 msgid "Standard" msgstr "Standard" #: Desktop/sonata-1.6.2/sonata/preferences.py:351 msgid "Stylized" msgstr "Stilizzato" #: Desktop/sonata-1.6.2/sonata/preferences.py:356 msgid "Artwork style:" msgstr "Stile della Copertina" #: Desktop/sonata-1.6.2/sonata/preferences.py:358 msgid "Local only" msgstr "Solo in locale" #: Desktop/sonata-1.6.2/sonata/preferences.py:359 msgid "Local and remote" msgstr "Locale e in remoto" #: Desktop/sonata-1.6.2/sonata/preferences.py:362 msgid "Search locations:" msgstr "Cerca locazioni: " #: Desktop/sonata-1.6.2/sonata/preferences.py:369 #: Desktop/sonata-1.6.2/sonata/preferences.py:396 msgid "SONG_DIR" msgstr "SONG_DIR" #: Desktop/sonata-1.6.2/sonata/preferences.py:371 msgid "custom" msgstr "personalizzato" #: Desktop/sonata-1.6.2/sonata/preferences.py:378 msgid "Save art to:" msgstr "Salva le copertine in:" #: Desktop/sonata-1.6.2/sonata/preferences.py:383 msgid "_Playback/volume buttons" msgstr "Pulsanti _Riproduzione/Volume" #: Desktop/sonata-1.6.2/sonata/preferences.py:386 msgid "Pr_ogressbar" msgstr "Barra di _Progresso" #: Desktop/sonata-1.6.2/sonata/preferences.py:389 msgid "_Statusbar" msgstr "_Barra di stato" #: Desktop/sonata-1.6.2/sonata/preferences.py:392 msgid "Song Ly_rics" msgstr "_Testo del brano" #: Desktop/sonata-1.6.2/sonata/preferences.py:394 msgid "Save lyrics to:" msgstr "Salva il testo dei brani in:" #: Desktop/sonata-1.6.2/sonata/preferences.py:405 msgid "System _tray icon" msgstr "_Icona nell'area di notifica" #: Desktop/sonata-1.6.2/sonata/preferences.py:429 msgid "Window Behavior" msgstr "Comportamento della finestra" #: Desktop/sonata-1.6.2/sonata/preferences.py:433 msgid "_Show window on all workspaces" msgstr "Mostra finestra in _tutte le aree di lavoro" #: Desktop/sonata-1.6.2/sonata/preferences.py:436 msgid "_Keep window above other windows" msgstr "_Mantieni la finestra in primo piano" #: Desktop/sonata-1.6.2/sonata/preferences.py:439 msgid "_Hide window titlebar" msgstr "_Nascondi il titolo della finestra" #: Desktop/sonata-1.6.2/sonata/preferences.py:442 msgid "_Minimize to system tray on close/escape" msgstr "_Minimizza nell'area di notifica se chiuso" #: Desktop/sonata-1.6.2/sonata/preferences.py:444 msgid "If enabled, closing Sonata will minimize it to the system tray. Note that it's currently impossible to detect if there actually is a system tray, so only check this if you have one." msgstr "Se abilitato, chiudere Sonata lo minimizzerà semplicemente nell'area di notifica. Poichè è correntemente impossibile sapere se è disponibile o meno un'area di notifica, assicurati di utilizzarne una prima di selezionare questa opzione." #: Desktop/sonata-1.6.2/sonata/preferences.py:460 msgid "Miscellaneous" msgstr "Varie" #: Desktop/sonata-1.6.2/sonata/preferences.py:464 msgid "_Update MPD library on start" msgstr "_Aggiorna la libreria di MPD all'avvio del programma" #: Desktop/sonata-1.6.2/sonata/preferences.py:466 msgid "If enabled, Sonata will automatically update your MPD library when it starts up." msgstr "Se abilitato, Sonata rigenererà automaticamente la libreria di MPD quanto viene avviato." #: Desktop/sonata-1.6.2/sonata/preferences.py:469 msgid "S_top playback on exit" msgstr "T_ermina la riproduzione alla chiusura del programma" #: Desktop/sonata-1.6.2/sonata/preferences.py:471 msgid "MPD allows playback even when the client is not open. If enabled, Sonata will behave like a more conventional music player and, instead, stop playback upon exit." msgstr "MPD continua a riprodurre musica anche se non c'è nessun client aperto. Se questa opzione è abilitata, Sonata si comporterà come un lettore musicale convenzionale, concludendo la riproduzione del brano corrente quando il programma viene chiuso." #: Desktop/sonata-1.6.2/sonata/preferences.py:474 msgid "_Write status file:" msgstr "_Scrivi un file di stato:" #: Desktop/sonata-1.6.2/sonata/preferences.py:476 #: Desktop/sonata-1.6.2/sonata/preferences.py:478 msgid "If enabled, Sonata will create a xmms-infopipe like file containing information about the current song. Many applications support the xmms-info file (Instant Messengers, IRC Clients...)" msgstr "Se questa opzione è abilitata, Sonata creerà un file contenente informazioni sul brano corrente in maniera simile ad xmms. Molte applicazioni supportano il file xmms-info creato (Instant Messenger, Client IRC...)" #: Desktop/sonata-1.6.2/sonata/preferences.py:512 msgid "Song Formatting" msgstr "Formato del brano" #: Desktop/sonata-1.6.2/sonata/preferences.py:517 msgid "C_urrent playlist:" msgstr "P_laylist corrente:" #: Desktop/sonata-1.6.2/sonata/preferences.py:518 msgid "_Library:" msgstr "_Libreria:" #: Desktop/sonata-1.6.2/sonata/preferences.py:519 msgid "_Window title:" msgstr "_Titolo della finestra:" #: Desktop/sonata-1.6.2/sonata/preferences.py:520 msgid "Current _song line 1:" msgstr "Brano _corrente linea 1:" #: Desktop/sonata-1.6.2/sonata/preferences.py:522 msgid "Current s_ong line 2:" msgstr "Brano c_orrente linea 2:" #: Desktop/sonata-1.6.2/sonata/preferences.py:547 msgid "Available options" msgstr "Opzioni disponibili" #: Desktop/sonata-1.6.2/sonata/preferences.py:551 msgid "Artist name" msgstr "Artista" #: Desktop/sonata-1.6.2/sonata/preferences.py:552 msgid "Album name" msgstr "Album" #: Desktop/sonata-1.6.2/sonata/preferences.py:553 msgid "Track name" msgstr "Titolo della Traccia" #: Desktop/sonata-1.6.2/sonata/preferences.py:554 msgid "Track number" msgstr "Numero della Traccia" #: Desktop/sonata-1.6.2/sonata/preferences.py:555 msgid "Disc number" msgstr "Numero del disco" #: Desktop/sonata-1.6.2/sonata/preferences.py:556 #: Desktop/sonata-1.6.2/sonata/main.py:1184 #: Desktop/sonata-1.6.2/sonata/tagedit.py:128 msgid "Year" msgstr "Anno" #: Desktop/sonata-1.6.2/sonata/preferences.py:557 #: Desktop/sonata-1.6.2/sonata/main.py:1185 #: Desktop/sonata-1.6.2/sonata/tagedit.py:139 #: Desktop/sonata-1.6.2/sonata/cli.py:213 msgid "Genre" msgstr "Genere" #: Desktop/sonata-1.6.2/sonata/preferences.py:558 msgid "File path" msgstr "Percorso del file" #: Desktop/sonata-1.6.2/sonata/preferences.py:559 msgid "File name" msgstr "Nome del file" #: Desktop/sonata-1.6.2/sonata/preferences.py:560 msgid "Stream name" msgstr "Nome dello Stream" #: Desktop/sonata-1.6.2/sonata/preferences.py:561 msgid "Song length" msgstr "Lunghezza del brano" #: Desktop/sonata-1.6.2/sonata/preferences.py:562 msgid "Elapsed time (title only)" msgstr "Tempo trascorso (solo titolo della finestra)" #: Desktop/sonata-1.6.2/sonata/preferences.py:572 msgid "Info displayed only if all enclosed tags are defined" msgstr "Le informazioni sono mostrate solo se i tag ID3 sono definiti nel file." #: Desktop/sonata-1.6.2/sonata/preferences.py:572 msgid "Creates columns in the current playlist" msgstr "Crea colonne nella playlist corrente" #: Desktop/sonata-1.6.2/sonata/preferences.py:598 msgid "_About" msgstr "Inform_azioni su..." #: Desktop/sonata-1.6.2/sonata/preferences.py:601 msgid "_Configure..." msgstr "_Configura..." #: Desktop/sonata-1.6.2/sonata/preferences.py:641 msgid "Enabled" msgstr "Abilitato" #: Desktop/sonata-1.6.2/sonata/preferences.py:649 msgid "Description" msgstr "Descrizione" #: Desktop/sonata-1.6.2/sonata/preferences.py:666 msgid "To save lyrics to the music file's directory, you must specify a valid music directory." msgstr "Per salvare il testo dei brani nella cartella dei file, devi specificare una music dir valida." #: Desktop/sonata-1.6.2/sonata/preferences.py:666 #: Desktop/sonata-1.6.2/sonata/preferences.py:673 msgid "Music Dir Verification" msgstr "Verifica Music Dir" #: Desktop/sonata-1.6.2/sonata/preferences.py:673 msgid "To save artwork to the music file's directory, you must specify a valid music directory." msgstr "Per salvare le copertine nella cartella del file, devi specificare una music dir valida." #: Desktop/sonata-1.6.2/sonata/preferences.py:738 msgid "New Profile" msgstr "Nuovo Profilo" #: Desktop/sonata-1.6.2/sonata/preferences.py:792 msgid "Custom Artwork" msgstr "Copertina personalizzata" #: Desktop/sonata-1.6.2/sonata/preferences.py:794 msgid "Artwork filename" msgstr "Nome del file Copertina" #: Desktop/sonata-1.6.2/sonata/preferences.py:880 #: Desktop/sonata-1.6.2/sonata/main.py:3103 #: Desktop/sonata-1.6.2/sonata/about.py:196 msgid "Unable to launch a suitable browser." msgstr "Impossibile lanciare un browser compatibile." #: Desktop/sonata-1.6.2/sonata/preferences.py:880 #: Desktop/sonata-1.6.2/sonata/main.py:3103 #: Desktop/sonata-1.6.2/sonata/about.py:196 msgid "Launch Browser" msgstr "Avvia browser" #: Desktop/sonata-1.6.2/sonata/main.py:102 msgid "Current" msgstr "Corrente" #: Desktop/sonata-1.6.2/sonata/main.py:103 msgid "Library" msgstr "Libreria" #: Desktop/sonata-1.6.2/sonata/main.py:104 msgid "Playlists" msgstr "Playlist" #: Desktop/sonata-1.6.2/sonata/main.py:105 msgid "Streams" msgstr "Stream" #: Desktop/sonata-1.6.2/sonata/main.py:106 msgid "Info" msgstr "Informazioni" #: Desktop/sonata-1.6.2/sonata/main.py:178 #: Desktop/sonata-1.6.2/sonata/cli.py:154 msgid "Default Profile" msgstr "Profilo predefinito" #: Desktop/sonata-1.6.2/sonata/main.py:178 #: Desktop/sonata-1.6.2/sonata/cli.py:154 msgid "by" msgstr "di" #: Desktop/sonata-1.6.2/sonata/main.py:178 #: Desktop/sonata-1.6.2/sonata/cli.py:154 msgid "from" msgstr "da" #: Desktop/sonata-1.6.2/sonata/main.py:236 msgid "_Sort List" msgstr "Ordina Li_sta" #: Desktop/sonata-1.6.2/sonata/main.py:237 msgid "Sa_ve List to" msgstr "S_alva la lista in" #: Desktop/sonata-1.6.2/sonata/main.py:238 msgid "_Connection" msgstr "_Connessione" #: Desktop/sonata-1.6.2/sonata/main.py:239 msgid "P_lay after" msgstr "R_iproduci dopo" #: Desktop/sonata-1.6.2/sonata/main.py:240 #: Desktop/sonata-1.6.2/sonata/main.py:2446 msgid "_Update" msgstr "_Aggiorna" #: Desktop/sonata-1.6.2/sonata/main.py:241 msgid "Use _Remote Image..." msgstr "Utilizza Immagine _Remota" #: Desktop/sonata-1.6.2/sonata/main.py:242 msgid "Use _Local Image..." msgstr "Utilizza Immagine _Locale" #: Desktop/sonata-1.6.2/sonata/main.py:243 msgid "_Fullscreen Mode" msgstr "_Modalità Schermo Intero" #: Desktop/sonata-1.6.2/sonata/main.py:244 msgid "Reset Image" msgstr "Reset Immagine" #: Desktop/sonata-1.6.2/sonata/main.py:245 msgid "_Play" msgstr "Ri_produci" #: Desktop/sonata-1.6.2/sonata/main.py:246 msgid "Pa_use" msgstr "Pa_usa" #: Desktop/sonata-1.6.2/sonata/main.py:247 msgid "_Stop" msgstr "_Ferma" #: Desktop/sonata-1.6.2/sonata/main.py:248 msgid "Pre_vious" msgstr "Pre_cedente" #: Desktop/sonata-1.6.2/sonata/main.py:249 msgid "_Next" msgstr "_Successivo" #: Desktop/sonata-1.6.2/sonata/main.py:250 msgid "_Quit" msgstr "_Esci" #: Desktop/sonata-1.6.2/sonata/main.py:251 msgid "_Remove" msgstr "_Rimuovi" #: Desktop/sonata-1.6.2/sonata/main.py:252 msgid "_Clear" msgstr "Pulis_ci" #: Desktop/sonata-1.6.2/sonata/main.py:253 msgid "_Entire Library" msgstr "_Tutta la Libreria" #: Desktop/sonata-1.6.2/sonata/main.py:254 msgid "_Selected Items" msgstr "_Oggetti selezionati" #: Desktop/sonata-1.6.2/sonata/main.py:255 msgid "_Preferences..." msgstr "_Preferenze" #: Desktop/sonata-1.6.2/sonata/main.py:256 msgid "_About..." msgstr "Inform_azioni su..." #: Desktop/sonata-1.6.2/sonata/main.py:257 msgid "_Edit Tags..." msgstr "Modifica _Tags..." #: Desktop/sonata-1.6.2/sonata/main.py:258 msgid "_Add" msgstr "_Aggiungi" #: Desktop/sonata-1.6.2/sonata/main.py:259 msgid "_Replace" msgstr "_Sostituisci" #: Desktop/sonata-1.6.2/sonata/main.py:260 msgid "Add" msgstr "Aggiungi" #: Desktop/sonata-1.6.2/sonata/main.py:261 msgid "Replace" msgstr "Sostituisci" #: Desktop/sonata-1.6.2/sonata/main.py:262 msgid "_Delete..." msgstr "_Cancella" #: Desktop/sonata-1.6.2/sonata/main.py:263 msgid "Shuffle" msgstr "Riproduzione Casuale" #: Desktop/sonata-1.6.2/sonata/main.py:288 msgid "S_how Sonata" msgstr "M_ostra Sonata" #: Desktop/sonata-1.6.2/sonata/main.py:289 msgid "_Repeat" msgstr "_Ripeti" #: Desktop/sonata-1.6.2/sonata/main.py:290 msgid "Rando_m" msgstr "O_rdine Casuale" #: Desktop/sonata-1.6.2/sonata/main.py:431 msgid "By Artist" msgstr "Per Artista" #: Desktop/sonata-1.6.2/sonata/main.py:432 msgid "By Album" msgstr "Per Album" #: Desktop/sonata-1.6.2/sonata/main.py:433 msgid "By Song Title" msgstr "Per Titolo dei brani" #: Desktop/sonata-1.6.2/sonata/main.py:434 msgid "By File Name" msgstr "Per Nome del File" #: Desktop/sonata-1.6.2/sonata/main.py:435 msgid "By Dir & File Name" msgstr "Per Cartella e Nome del File" #: Desktop/sonata-1.6.2/sonata/main.py:436 msgid "Reverse List" msgstr "Inverti Ordine della Lista" #: Desktop/sonata-1.6.2/sonata/main.py:459 #: Desktop/sonata-1.6.2/sonata/main.py:470 msgid "_New..." msgstr "_Nuovo" #: Desktop/sonata-1.6.2/sonata/main.py:460 msgid "_Edit..." msgstr "_Modifica..." #: Desktop/sonata-1.6.2/sonata/main.py:471 msgid "_Rename..." msgstr "_Rinomina..." #: Desktop/sonata-1.6.2/sonata/main.py:533 #: Desktop/sonata-1.6.2/sonata/main.py:600 #: Desktop/sonata-1.6.2/sonata/main.py:601 msgid "Playlist" msgstr "Playlist" #: Desktop/sonata-1.6.2/sonata/main.py:562 #: Desktop/sonata-1.6.2/sonata/main.py:567 #: Desktop/sonata-1.6.2/sonata/main.py:1829 #: Desktop/sonata-1.6.2/sonata/main.py:1840 #: Desktop/sonata-1.6.2/sonata/cli.py:232 msgid "Stopped" msgstr "In Pausa" #: Desktop/sonata-1.6.2/sonata/main.py:563 #: Desktop/sonata-1.6.2/sonata/main.py:1833 #: Desktop/sonata-1.6.2/sonata/main.py:2042 msgid "Click to expand" msgstr "Fai click per passare in modalità estesa" #: Desktop/sonata-1.6.2/sonata/main.py:568 #: Desktop/sonata-1.6.2/sonata/main.py:1831 #: Desktop/sonata-1.6.2/sonata/main.py:2040 msgid "Click to collapse" msgstr "Fai click per passare in modalità compatta" #: Desktop/sonata-1.6.2/sonata/main.py:573 #: Desktop/sonata-1.6.2/sonata/main.py:1725 #: Desktop/sonata-1.6.2/sonata/main.py:1836 msgid "Not Connected" msgstr "Non Connesso" #: Desktop/sonata-1.6.2/sonata/main.py:575 #: Desktop/sonata-1.6.2/sonata/main.py:1723 #: Desktop/sonata-1.6.2/sonata/main.py:1838 msgid "No Read Permission" msgstr "Nessun permesso di lettura" #: Desktop/sonata-1.6.2/sonata/main.py:648 msgid "Cover Art" msgstr "Copertina" #: Desktop/sonata-1.6.2/sonata/main.py:872 msgid "MPD_HOST/PORT" msgstr "MPD_HOST/PORT" #: Desktop/sonata-1.6.2/sonata/main.py:877 msgid "Disconnect" msgstr "Disconnetti" #: Desktop/sonata-1.6.2/sonata/main.py:1180 #: Desktop/sonata-1.6.2/sonata/tagedit.py:126 #: Desktop/sonata-1.6.2/sonata/cli.py:209 msgid "Artist" msgstr "Artista" #: Desktop/sonata-1.6.2/sonata/main.py:1181 #: Desktop/sonata-1.6.2/sonata/main.py:2432 #: Desktop/sonata-1.6.2/sonata/tagedit.py:127 #: Desktop/sonata-1.6.2/sonata/cli.py:210 msgid "Album" msgstr "Album" #: Desktop/sonata-1.6.2/sonata/main.py:1182 #: Desktop/sonata-1.6.2/sonata/tagedit.py:130 #: Desktop/sonata-1.6.2/sonata/cli.py:212 msgid "Track" msgstr "Traccia" #: Desktop/sonata-1.6.2/sonata/main.py:1183 #: Desktop/sonata-1.6.2/sonata/main.py:1190 msgid "#" msgstr "#" #: Desktop/sonata-1.6.2/sonata/main.py:1186 msgid "Path" msgstr "Percorso" #: Desktop/sonata-1.6.2/sonata/main.py:1187 #: Desktop/sonata-1.6.2/sonata/cli.py:214 msgid "File" msgstr "File" #: Desktop/sonata-1.6.2/sonata/main.py:1188 msgid "Stream" msgstr "Stream" #: Desktop/sonata-1.6.2/sonata/main.py:1189 msgid "Len" msgstr "Lunghezza" #: Desktop/sonata-1.6.2/sonata/main.py:1210 #: Desktop/sonata-1.6.2/sonata/main.py:1217 #: Desktop/sonata-1.6.2/sonata/main.py:1258 #: Desktop/sonata-1.6.2/sonata/main.py:1265 msgid "Unknown" msgstr "Sconosciuto" #: Desktop/sonata-1.6.2/sonata/main.py:1746 msgid "day" msgid_plural "days" msgstr[0] "giorno" msgstr[1] "giorni" #: Desktop/sonata-1.6.2/sonata/main.py:1750 msgid "minute" msgid_plural "minutes" msgstr[0] "minuto" msgstr[1] "minuti" #: Desktop/sonata-1.6.2/sonata/main.py:1754 msgid "hour" msgid_plural "hours" msgstr[0] "ora" msgstr[1] "ore" #: Desktop/sonata-1.6.2/sonata/main.py:1756 #: Desktop/sonata-1.6.2/sonata/about.py:147 msgid "song" msgid_plural "songs" msgstr[0] "brano" msgstr[1] "brani" #: Desktop/sonata-1.6.2/sonata/main.py:1759 #: Desktop/sonata-1.6.2/sonata/main.py:1761 msgid "and" msgstr "e" #: Desktop/sonata-1.6.2/sonata/main.py:1769 msgid "(updating mpd)" msgstr "(aggiornando la libreria...)" #: Desktop/sonata-1.6.2/sonata/main.py:2109 msgid "Lyrics Search" msgstr "Cerca Testo Brani" #: Desktop/sonata-1.6.2/sonata/main.py:2110 msgid "_Search" msgstr "C_erca" #: Desktop/sonata-1.6.2/sonata/main.py:2113 msgid "Artist Name" msgstr "Nome dell'Artista" #: Desktop/sonata-1.6.2/sonata/main.py:2118 msgid "Song Title" msgstr "Titolo del Brano" #: Desktop/sonata-1.6.2/sonata/main.py:2370 msgid "Open Image" msgstr "Apri Immagine" #: Desktop/sonata-1.6.2/sonata/main.py:2372 msgid "Images" msgstr "Immagini" #: Desktop/sonata-1.6.2/sonata/main.py:2376 msgid "All files" msgstr "Tutti i file" #: Desktop/sonata-1.6.2/sonata/main.py:2418 msgid "Choose Cover Art" msgstr "Scegli Copertina" #: Desktop/sonata-1.6.2/sonata/main.py:2419 msgid "C_hoose" msgstr "S_cegli" #: Desktop/sonata-1.6.2/sonata/main.py:2451 msgid "Edit search terms" msgstr "Modifica chiavi di ricerca" #: Desktop/sonata-1.6.2/sonata/main.py:2508 msgid "No artist or album name found." msgstr "Nessun risultato tra i nomi degli artisti o degli album." #: Desktop/sonata-1.6.2/sonata/main.py:2511 msgid "No cover art found." msgstr "Copertina non trovata." #: Desktop/sonata-1.6.2/sonata/main.py:2835 msgid "Delete the selected playlist?" msgid_plural "Delete the selected playlists?" msgstr[0] "Cancellare la playlist selezionata?" msgstr[1] "Cancellare le playlist selezionate?" #: Desktop/sonata-1.6.2/sonata/main.py:2835 msgid "Delete Playlist" msgid_plural "Delete Playlists" msgstr[0] "Cancella la Playlist" msgstr[1] "Cancella le Playlist" #: Desktop/sonata-1.6.2/sonata/main.py:2843 msgid "Delete the selected stream?" msgid_plural "Delete the selected streams?" msgstr[0] "Cancellare lo Stream?" msgstr[1] "Cancellare gli Stream?" #: Desktop/sonata-1.6.2/sonata/main.py:2843 msgid "Delete Stream" msgid_plural "Delete Streams" msgstr[0] "Cancella Stream" msgstr[1] "Cancella Stream" #: Desktop/sonata-1.6.2/sonata/tagedit.py:61 msgid "Taglib and/or tagpy not found, tag editing support disabled." msgstr "Librerie taglib e/o tagpy non trovate, il supporto alla modifica dei tag id3 è stato disabilitato." #: Desktop/sonata-1.6.2/sonata/tagedit.py:61 #: Desktop/sonata-1.6.2/sonata/tagedit.py:70 #: Desktop/sonata-1.6.2/sonata/tagedit.py:75 #: Desktop/sonata-1.6.2/sonata/tagedit.py:99 #: Desktop/sonata-1.6.2/sonata/tagedit.py:103 #: Desktop/sonata-1.6.2/sonata/tagedit.py:260 #: Desktop/sonata-1.6.2/sonata/tagedit.py:299 msgid "Edit Tags" msgstr "Modifica Tags" #: Desktop/sonata-1.6.2/sonata/tagedit.py:70 msgid "Tagpy version < 0.91. Please upgrade to a newer version, tag editing support disabled." msgstr "Librerie tagpy <0.91. Prego aggiornare ad una versione più recente; la modifica dei tag è stato disabilitato." #: Desktop/sonata-1.6.2/sonata/tagedit.py:75 msgid "The path" msgstr "Il percorso" #: Desktop/sonata-1.6.2/sonata/tagedit.py:75 msgid "does not exist. Please specify a valid music directory in preferences." msgstr "non esiste. Specifica una music dir valida nelle preferenze." #: Desktop/sonata-1.6.2/sonata/tagedit.py:99 msgid "File " msgstr "Il File " #: Desktop/sonata-1.6.2/sonata/tagedit.py:99 msgid " not found. Please specify a valid music directory in preferences." msgstr "non esiste. Specifica una music dir valida nelle preferenze." #: Desktop/sonata-1.6.2/sonata/tagedit.py:103 msgid "No music files with editable tags found." msgstr "Nessun brano con tag editabili trovato." #: Desktop/sonata-1.6.2/sonata/tagedit.py:125 #: Desktop/sonata-1.6.2/sonata/cli.py:208 msgid "Title" msgstr "Titolo" #: Desktop/sonata-1.6.2/sonata/tagedit.py:150 msgid "Comment" msgstr "Commento" #: Desktop/sonata-1.6.2/sonata/tagedit.py:161 msgid "Save _All" msgstr "S_alva tutto." #: Desktop/sonata-1.6.2/sonata/tagedit.py:207 msgid "Increment each selected music file, starting at track 1 for this file." msgstr "Incrementa il numero di traccia per ogni brano selezionato, partendo dalla traccia 1 per questo." #: Desktop/sonata-1.6.2/sonata/tagedit.py:209 msgid "Apply to all selected music files." msgstr "Applica a tutti i file musicali selezionati." #: Desktop/sonata-1.6.2/sonata/tagedit.py:260 msgid "of" msgstr "di" #: Desktop/sonata-1.6.2/sonata/tagedit.py:299 msgid "Unable to save tag to music file." msgstr "Impossibile salvare i tag nel file." #: Desktop/sonata-1.6.2/sonata/tagedit.py:366 msgid "Hide file path" msgstr "Nascondi il percorso del file" #: Desktop/sonata-1.6.2/sonata/tagedit.py:369 msgid "Show file path" msgstr "Mostra il percorso del file" #: Desktop/sonata-1.6.2/sonata/about.py:54 msgid "About Sonata" msgstr "Informazioni su Sonata" #: Desktop/sonata-1.6.2/sonata/about.py:56 msgid "Fullscreen Artwork Mode" msgstr "Modalità Copertina a Schermo Intero" #: Desktop/sonata-1.6.2/sonata/about.py:57 msgid "Switch to [1st-5th] tab" msgstr "Spostati al [1^ - 5^] tab" #: Desktop/sonata-1.6.2/sonata/about.py:58 msgid "Connect to MPD" msgstr "Connetti a MPD" #: Desktop/sonata-1.6.2/sonata/about.py:59 msgid "Disconnect from MPD" msgstr "Disconnetti da MPD" #: Desktop/sonata-1.6.2/sonata/about.py:60 msgid "Randomize current playlist" msgstr "Randomizza la Playlist corrente" #: Desktop/sonata-1.6.2/sonata/about.py:61 msgid "Expand player" msgstr "Passa alla modalità normale/estesa" #: Desktop/sonata-1.6.2/sonata/about.py:62 msgid "Switch to previous tab" msgstr "Spostati nel precedente tab" #: Desktop/sonata-1.6.2/sonata/about.py:63 msgid "Switch to next tab" msgstr "Spostati nel prossimo tab" #: Desktop/sonata-1.6.2/sonata/about.py:64 msgid "Collapse player" msgstr "Passa alla modalità compatta" #: Desktop/sonata-1.6.2/sonata/about.py:65 msgid "Search library" msgstr "Cerca nella libreria" #: Desktop/sonata-1.6.2/sonata/about.py:66 msgid "Quit" msgstr "Esci" #: Desktop/sonata-1.6.2/sonata/about.py:67 msgid "Update entire library" msgstr "Aggiorna tutta la libreria" #: Desktop/sonata-1.6.2/sonata/about.py:68 msgid "Display popup menu" msgstr "Mostra menu popup" #: Desktop/sonata-1.6.2/sonata/about.py:69 msgid "Minimize to system tray (if enabled)" msgstr "Minimizza nell'area di notifica (se è abilitata l'opzione)" #: Desktop/sonata-1.6.2/sonata/about.py:71 msgid "Previous track" msgstr "Brano precedente" #: Desktop/sonata-1.6.2/sonata/about.py:72 msgid "Next track" msgstr "Brano successivo" #: Desktop/sonata-1.6.2/sonata/about.py:73 msgid "Play/Pause" msgstr "Riproduci/Pausa" #: Desktop/sonata-1.6.2/sonata/about.py:74 msgid "Stop" msgstr "Ferma" #: Desktop/sonata-1.6.2/sonata/about.py:75 msgid "Lower the volume" msgstr "Abbassa il volume" #: Desktop/sonata-1.6.2/sonata/about.py:76 msgid "Raise the volume" msgstr "Alza il volume" #: Desktop/sonata-1.6.2/sonata/about.py:78 msgid "Play selected song" msgstr "Riproduci il brano selezionato" #: Desktop/sonata-1.6.2/sonata/about.py:79 msgid "Remove selected song(s)" msgstr "Rimuovi il brano od i brani selezionati" #: Desktop/sonata-1.6.2/sonata/about.py:80 msgid "Center currently playing song" msgstr "Centra la playlist sul brano in riproduzione" #: Desktop/sonata-1.6.2/sonata/about.py:81 #: Desktop/sonata-1.6.2/sonata/about.py:90 msgid "Edit selected song's tags" msgstr "Modifica i tag selezionati" #: Desktop/sonata-1.6.2/sonata/about.py:82 msgid "Save to new playlist" msgstr "Salva in una nuova playlist" #: Desktop/sonata-1.6.2/sonata/about.py:83 msgid "Clear list" msgstr "Cancella la playlist" #: Desktop/sonata-1.6.2/sonata/about.py:84 msgid "Randomize list" msgstr "Randomizza Playlist" #: Desktop/sonata-1.6.2/sonata/about.py:86 msgid "Add selected song(s) or enter directory" msgstr "Aggiungi il/i brani selezionati od inserisci il nome di una cartella" #: Desktop/sonata-1.6.2/sonata/about.py:87 msgid "Go to parent directory" msgstr "Vai alla cartella di livello superiore" #: Desktop/sonata-1.6.2/sonata/about.py:88 msgid "Add selected item(s)" msgstr "Aggiungi il/gli oggetto(i) selezionato(i)" #: Desktop/sonata-1.6.2/sonata/about.py:89 msgid "Replace with selected item(s)" msgstr "Sostituisci con il/gli oggetto(i) selezionati" #: Desktop/sonata-1.6.2/sonata/about.py:91 msgid "Add selected item(s) and play" msgstr "Aggiungi il/gli oggetto(i) selezionato(i) e riproduci" #: Desktop/sonata-1.6.2/sonata/about.py:92 msgid "Replace with selected item(s) and play" msgstr "Sostituisci con il/gli oggetto(i) selezionato(i) e riproduci" #: Desktop/sonata-1.6.2/sonata/about.py:93 msgid "Update selected item(s)/path(s)" msgstr "Aggiorna il/gli oggetto(i)/percorso(i) selezionato(i)" #: Desktop/sonata-1.6.2/sonata/about.py:95 #: Desktop/sonata-1.6.2/sonata/about.py:97 msgid "Add selected playlist(s)" msgstr "Aggiungi la playlist o le playlist selezionate" #: Desktop/sonata-1.6.2/sonata/about.py:96 msgid "Remove selected playlist(s)" msgstr "Rimuovi la playlist o le playlist selezionate" #: Desktop/sonata-1.6.2/sonata/about.py:98 msgid "Replace with selected playlist(s)" msgstr "Sostituisci con la playlist o le playlist selezionate" #: Desktop/sonata-1.6.2/sonata/about.py:99 msgid "Add selected playlist(s) and play" msgstr "Aggiungi la/le playlist selezionata(e) e riproduci" #: Desktop/sonata-1.6.2/sonata/about.py:100 msgid "Replace with selected playlist(s) and play" msgstr "Sostituisci con la/le playlist selezionata(e) e riproduci" #: Desktop/sonata-1.6.2/sonata/about.py:102 #: Desktop/sonata-1.6.2/sonata/about.py:104 msgid "Add selected stream(s)" msgstr "Aggiungi lo stream o gli stream selezionati" #: Desktop/sonata-1.6.2/sonata/about.py:103 msgid "Remove selected stream(s)" msgstr "Rimuovi lo stream o gli stream selezionati" #: Desktop/sonata-1.6.2/sonata/about.py:105 msgid "Replace with selected stream(s)" msgstr "Sostituisci con lo stream o gli stream selezionati" #: Desktop/sonata-1.6.2/sonata/about.py:106 msgid "Add selected stream(s) and play" msgstr "Aggiungi lo/gli stream selezionato(i) e riproduci" #: Desktop/sonata-1.6.2/sonata/about.py:107 msgid "Replace with selected stream(s) and play" msgstr "Sostituisci con lo/gli stream selezionato(i) e riproduci" #: Desktop/sonata-1.6.2/sonata/about.py:109 msgid "Edit playing song's tags" msgstr "Modifica i tag del brano in esecuzione" #: Desktop/sonata-1.6.2/sonata/about.py:112 msgid "Main Shortcuts" msgstr "Tasti scorciatoia Principali" #: Desktop/sonata-1.6.2/sonata/about.py:113 msgid "Playback Shortcuts" msgstr "Tasti scorciatoia per la gestione della riproduzione dei brani" #: Desktop/sonata-1.6.2/sonata/about.py:114 msgid "Current Shortcuts" msgstr "Tasti scorciatoia Comuni" #: Desktop/sonata-1.6.2/sonata/about.py:115 msgid "Library Shortcuts" msgstr "Tasti scorciatoia per la gestione della Libreria" #: Desktop/sonata-1.6.2/sonata/about.py:116 msgid "Playlist Shortcuts" msgstr "Tasti scorciatoia per la gestione delle Playlist" #: Desktop/sonata-1.6.2/sonata/about.py:117 msgid "Stream Shortcuts" msgstr "Tasti scorciatoia per la gestione degli Stream" #: Desktop/sonata-1.6.2/sonata/about.py:118 msgid "Info Shortcuts" msgstr "Tasti scorciatoia Informazioni" #: Desktop/sonata-1.6.2/sonata/about.py:119 msgid "Shortcuts" msgstr "Shortcuts" #: Desktop/sonata-1.6.2/sonata/about.py:148 msgid "album" msgid_plural "albums" msgstr[0] "album" msgstr[1] "album" #: Desktop/sonata-1.6.2/sonata/about.py:149 msgid "artist" msgid_plural "artists" msgstr[0] "artista" msgstr[1] "artisti" #: Desktop/sonata-1.6.2/sonata/about.py:156 msgid "day of bliss" msgid_plural "days of bliss" msgstr[0] "giorno di gioia" msgstr[1] "giorni di gioia" #: Desktop/sonata-1.6.2/sonata/about.py:158 msgid "hour of bliss" msgid_plural "hours of bliss" msgstr[0] "ora di gioia" msgstr[1] "ore di gioia" #: Desktop/sonata-1.6.2/sonata/about.py:172 msgid "An elegant music client for MPD." msgstr "Un elegante client per MPD." #: Desktop/sonata-1.6.2/sonata/about.py:185 msgid "_Shortcuts" msgstr "_Shortcuts" #: Desktop/sonata-1.6.2/sonata/cli.py:81 msgid "The toggle and popup arguments require D-Bus. Aborting." msgstr "L'argomento toggle e popup richiedono D-Bus. Annullo l'operazione." #: Desktop/sonata-1.6.2/sonata/cli.py:97 msgid "Version" msgstr "Versione " #: Desktop/sonata-1.6.2/sonata/cli.py:98 msgid "Website" msgstr "Sito" #: Desktop/sonata-1.6.2/sonata/cli.py:103 msgid "Usage: sonata [OPTION]... [COMMAND]..." msgstr "Uso: sonata [OPZIONE] .. [COMANDO]..." #: Desktop/sonata-1.6.2/sonata/cli.py:105 msgid "Options" msgstr "Opzioni" #: Desktop/sonata-1.6.2/sonata/cli.py:106 msgid "Show this help and exit" msgstr "Stampa questo messaggio di aiuto" #: Desktop/sonata-1.6.2/sonata/cli.py:107 msgid "Popup song notification (requires D-Bus)" msgstr "Popup di notifica del brano (richiede D-Bus)" #: Desktop/sonata-1.6.2/sonata/cli.py:108 msgid "Toggles whether the app is minimized" msgstr "Cambia lo stato dell'applicazione da ridotta ad icona" #: Desktop/sonata-1.6.2/sonata/cli.py:109 msgid "to tray or visible (requires D-Bus)" msgstr "a visibile e viceversa (richiede D-Bus)" #: Desktop/sonata-1.6.2/sonata/cli.py:110 msgid "Don't start app if D-Bus commands fail" msgstr "Non fai partire l'applicazione se il commado D-Bus falisce" #: Desktop/sonata-1.6.2/sonata/cli.py:111 msgid "Show version information and exit" msgstr "Stampa le informazioni sulla versione ed esce" #: Desktop/sonata-1.6.2/sonata/cli.py:112 msgid "Start app hidden (requires systray)" msgstr "" "Avvia l'applicazione ridotta nell'area di notifica\n" "\t\t\t (richiede la presenza di un'area di notifica)" #: Desktop/sonata-1.6.2/sonata/cli.py:113 msgid "Start app visible (requires systray)" msgstr "" "Avvia l'applicazione in primo piano\n" "\t\t\t (richiede la presenza di un'area di notifica)" #: Desktop/sonata-1.6.2/sonata/cli.py:114 msgid "Start with profile [NUM]" msgstr "Avvia con profilo [NUMERO]" #: Desktop/sonata-1.6.2/sonata/cli.py:116 msgid "Commands" msgstr "Commandi" #: Desktop/sonata-1.6.2/sonata/cli.py:117 msgid "Play song in playlist" msgstr "Riproduce il primo brano nella playlist" #: Desktop/sonata-1.6.2/sonata/cli.py:118 msgid "Pause currently playing song" msgstr "Mette in pausa la riproduzione del brano corrente" #: Desktop/sonata-1.6.2/sonata/cli.py:119 msgid "Stop currently playing song" msgstr "Termina la riproduzione del brano corrente" #: Desktop/sonata-1.6.2/sonata/cli.py:120 msgid "Play next song in playlist" msgstr "Inizia la riproduzione del brano successivo nella playlist" #: Desktop/sonata-1.6.2/sonata/cli.py:121 msgid "Play previous song in playlist" msgstr "Inizia la riproduzione del brano precedente nella playlist" #: Desktop/sonata-1.6.2/sonata/cli.py:122 msgid "Toggle play/pause; plays if stopped" msgstr "Metti in riproduzione/pausa; riproduce se fermato" #: Desktop/sonata-1.6.2/sonata/cli.py:123 msgid "Toggle repeat mode" msgstr "Attiva/Disattiva riproduzione continua" #: Desktop/sonata-1.6.2/sonata/cli.py:124 msgid "Toggle random mode" msgstr "Attiva/Disattiva riproduzione casuale" #: Desktop/sonata-1.6.2/sonata/cli.py:125 msgid "Display current song info" msgstr "Mostra informazioni sul brano attualmente in riproduzione" #: Desktop/sonata-1.6.2/sonata/cli.py:126 msgid "Display MPD status" msgstr "Mostra lo status di MPD" #: Desktop/sonata-1.6.2/sonata/cli.py:134 #, python-format msgid "Starting Sonata with profile %s..." msgstr "Avvia Sonata con il profilo %s..." #: Desktop/sonata-1.6.2/sonata/cli.py:136 #, python-format msgid "%d is not an available profile number." msgstr "%d non è un numero profilo disponibile." #: Desktop/sonata-1.6.2/sonata/cli.py:137 #: Desktop/sonata-1.6.2/sonata/cli.py:141 #, python-format msgid "Profile numbers must be between 1 and %d." msgstr "Il numero del profilo deve essere tra 1 e %d." #: Desktop/sonata-1.6.2/sonata/cli.py:140 #, python-format msgid "Python is unable to interpret %s as a number." msgstr "Python non può interpretare %s come un numero." #: Desktop/sonata-1.6.2/sonata/cli.py:176 msgid "" "Unable to connect to MPD.\n" "Please check your Sonata preferences or MPD_HOST/MPD_PORT environment variables." msgstr "" "Impossibile connettersi ad MPD.\n" "Controlla le impostazioni di Sonata o le variabili MPD_HOST/MPD_PORT." #: Desktop/sonata-1.6.2/sonata/cli.py:211 msgid "Date" msgstr "Data" #: Desktop/sonata-1.6.2/sonata/cli.py:219 #: Desktop/sonata-1.6.2/sonata/cli.py:221 msgid "Time" msgstr "Tempo" #: Desktop/sonata-1.6.2/sonata/cli.py:222 msgid "Bitrate" msgstr "Bitrate" #: Desktop/sonata-1.6.2/sonata/cli.py:224 msgid "MPD stopped" msgstr "MPD non avviato" #: Desktop/sonata-1.6.2/sonata/cli.py:228 #: Desktop/sonata-1.6.2/sonata/cli.py:230 #: Desktop/sonata-1.6.2/sonata/cli.py:232 msgid "State" msgstr "Stato" #: Desktop/sonata-1.6.2/sonata/cli.py:228 msgid "Playing" msgstr "Riproducendo" #: Desktop/sonata-1.6.2/sonata/cli.py:230 msgid "Paused" msgstr "In Pausa" #: Desktop/sonata-1.6.2/sonata/cli.py:234 #: Desktop/sonata-1.6.2/sonata/cli.py:236 msgid "Repeat" msgstr "Riproduzione Continua" #: Desktop/sonata-1.6.2/sonata/cli.py:234 #: Desktop/sonata-1.6.2/sonata/cli.py:238 msgid "Off" msgstr "Off" #: Desktop/sonata-1.6.2/sonata/cli.py:236 #: Desktop/sonata-1.6.2/sonata/cli.py:240 msgid "On" msgstr "On" #: Desktop/sonata-1.6.2/sonata/cli.py:238 #: Desktop/sonata-1.6.2/sonata/cli.py:240 msgid "Random" msgstr "Ordine Casuale" #: Desktop/sonata-1.6.2/sonata/cli.py:241 msgid "Volume" msgstr "Volume" #: Desktop/sonata-1.6.2/sonata/cli.py:242 msgid "Crossfade" msgstr "Crossfade" #: Desktop/sonata-1.6.2/sonata/streams.py:102 msgid "Edit Stream" msgstr "Modifica Stream" #: Desktop/sonata-1.6.2/sonata/streams.py:104 #: Desktop/sonata-1.6.2/sonata/streams.py:135 msgid "New Stream" msgstr "Nuovo Stream" #: Desktop/sonata-1.6.2/sonata/streams.py:113 msgid "Stream URL" msgstr "URL dello Stream" #: Desktop/sonata-1.6.2/sonata/streams.py:135 msgid "A stream with this name already exists. Would you like to replace it?" msgstr "Esiste già uno Stream con questo nome. Desideri sostituirlo con questo?" #: Desktop/sonata-1.6.2/sonata/playlists.py:103 #: Desktop/sonata-1.6.2/sonata/playlists.py:105 msgid "Save Playlist" msgstr "Salva Playlist" #: Desktop/sonata-1.6.2/sonata/playlists.py:120 msgid "Would you like to replace the existing playlist or append these songs?" msgstr "Vuoi modificare la playlist esistente o aggiungere questi brani?" #: Desktop/sonata-1.6.2/sonata/playlists.py:120 msgid "Existing Playlist" msgstr "Playlist esistente" #: Desktop/sonata-1.6.2/sonata/playlists.py:120 msgid "Replace playlist" msgstr "Sostituisci Playlist" #: Desktop/sonata-1.6.2/sonata/playlists.py:120 msgid "Append songs" msgstr "Aggiungi brani" #: Desktop/sonata-1.6.2/sonata/playlists.py:141 msgid "A playlist with this name already exists. Would you like to replace it?" msgstr "Esiste già una playlist con questo nome. Desideri sostituirla con questa?" #: Desktop/sonata-1.6.2/sonata/playlists.py:153 msgid "Playlist name" msgstr "Nome della Playlist" #: Desktop/sonata-1.6.2/sonata/playlists.py:182 #: Desktop/sonata-1.6.2/sonata/playlists.py:186 msgid "Rename Playlist" msgstr "Rinomina Playlist" #: Desktop/sonata-1.6.2/sonata/library.py:43 msgid "Untagged" msgstr "Senza Tag" #: Desktop/sonata-1.6.2/sonata/library.py:44 msgid "Various Artists" msgstr "Artisti Vari" #: Desktop/sonata-1.6.2/sonata/library.py:45 msgid "Filename" msgstr "File" #: Desktop/sonata-1.6.2/sonata/library.py:45 msgid "Everything" msgstr "Tutti" #: Desktop/sonata-1.6.2/sonata/library.py:77 msgid "Search terms" msgstr "Chiavi di ricerca" #: Desktop/sonata-1.6.2/sonata/library.py:83 msgid "End Search" msgstr "Finisci Ricerca" #: Desktop/sonata-1.6.2/sonata/library.py:85 msgid "Library browsing view" msgstr "Modalità di visualizzazione della Libreria" #: Desktop/sonata-1.6.2/sonata/library.py:89 msgid "Search" msgstr "Cerca" #: Desktop/sonata-1.6.2/sonata/library.py:112 msgid "Filesystem" msgstr "Filesystem" #: Desktop/sonata-1.6.2/sonata/library.py:114 msgid "Albums" msgstr "Album" #: Desktop/sonata-1.6.2/sonata/library.py:116 msgid "Artists" msgstr "Artisti" #: Desktop/sonata-1.6.2/sonata/library.py:118 msgid "Genres" msgstr "Generi" #: Desktop/sonata-1.6.2/sonata/library.py:378 msgid " v " msgstr "v" #: Desktop/sonata-1.6.2/sonata/library.py:950 msgid "Song" msgstr "Brano" #: Desktop/sonata-1.6.2/sonata/info.py:78 msgid "Song Info" msgstr "Informazioni sul brano" #: Desktop/sonata-1.6.2/sonata/info.py:92 msgid "Launch artist in Wikipedia" msgstr "Mostra l'artista in Wikipedia" #: Desktop/sonata-1.6.2/sonata/info.py:94 msgid "Launch album in Wikipedia" msgstr "Mostra l'album in Wikipedia" #: Desktop/sonata-1.6.2/sonata/info.py:128 msgid "Toggle extra tags" msgstr "Mostra tag extra" #: Desktop/sonata-1.6.2/sonata/info.py:131 msgid "Edit song tags" msgstr "Modifica i tag del brano" #: Desktop/sonata-1.6.2/sonata/info.py:141 msgid "Lyrics" msgstr "Testo brani" #: Desktop/sonata-1.6.2/sonata/info.py:153 msgid "Search Lyricwiki.org for lyrics" msgstr "Cerca testo brani su Lyricwiki.org" #: Desktop/sonata-1.6.2/sonata/info.py:154 msgid "Edit lyrics at Lyricwiki.org" msgstr "Modifica testo brani su Lyricwiki.org" #: Desktop/sonata-1.6.2/sonata/info.py:162 msgid "Album Info" msgstr "Informazioni sull'Album" #: Desktop/sonata-1.6.2/sonata/info.py:214 #: Desktop/sonata-1.6.2/sonata/info.py:219 msgid "more" msgstr "più" #: Desktop/sonata-1.6.2/sonata/info.py:216 msgid "hide" msgstr "nascondi" #: Desktop/sonata-1.6.2/sonata/info.py:282 msgid "edit tags" msgstr "Modifica Tags" #: Desktop/sonata-1.6.2/sonata/info.py:309 msgid "Album info not found." msgstr "Informazioni sull'album non trovate." #: Desktop/sonata-1.6.2/sonata/info.py:312 msgid "Album name not set." msgstr "Nome dell'album sconosciuto" #: Desktop/sonata-1.6.2/sonata/info.py:326 msgid "ZSI not found, fetching lyrics support disabled." msgstr "Libreria ZSI non trovata, il supporto per la ricerca del testo dei brani è stato disabilitato." #: Desktop/sonata-1.6.2/sonata/info.py:331 msgid "Artist or song title not set." msgstr "Artista o nome del brano sconosciuti" #: Desktop/sonata-1.6.2/sonata/info.py:373 msgid "search" msgstr "cerca" #: Desktop/sonata-1.6.2/sonata/info.py:374 msgid "edit" msgstr "Modifica" #: Desktop/sonata-1.6.2/sonata/info.py:383 #: Desktop/sonata-1.6.2/sonata/info.py:438 msgid "Lyrics not found" msgstr "Il testo del brano non è stato trovato" #: Desktop/sonata-1.6.2/sonata/info.py:403 msgid "Fetching lyrics..." msgstr "Ricerca e download del testo del brano in corso..." #: Desktop/sonata-1.6.2/sonata/info.py:413 msgid "Couldn't connect to LyricWiki" msgstr "Impossibile connettersi a LyricWiki" #: Desktop/sonata-1.6.2/sonata/info.py:441 msgid "Fetching lyrics failed" msgstr "Impossibile prelevare il testo del brano" #: Desktop/sonata-1.6.2/sonata/dbus_plugin.py:83 msgid "Sonata failed to connect to the D-BUS session bus: Unable to determine the address of the message bus (try 'man dbus-launch' and 'man dbus-daemon' for help)" msgstr "Sonata non ha potuto connettersi a D-BUS: è impossibile determinare l'indirizzo del message bus (per informazioni digita 'man dbus-launch' e 'man dbus-daemon')" #: Desktop/sonata-1.6.2/sonata/dbus_plugin.py:96 msgid "Failed to execute remote commands." msgstr "Esecuzione comandi remoti fallita." #: Desktop/sonata-1.6.2/sonata/dbus_plugin.py:98 msgid "Starting Sonata instead..." msgstr "Avvio Sonata... " #: Desktop/sonata-1.6.2/sonata/dbus_plugin.py:100 msgid "Maybe Sonata is not running?" msgstr "Forse Sonata non è in esecuzione?" #: Desktop/sonata-1.6.2/sonata/dbus_plugin.py:114 msgid "An instance of Sonata is already running. Showing it..." msgstr "Sonata è già in esecuzione! Ora te la mostro..." #: Desktop/sonata-1.6.2/sonata/dbus_plugin.py:120 msgid "Failed to execute remote command." msgstr "Esecuzione comando remoto fallita." #, fuzzy #~ msgid "Profile" #~ msgstr "Nuovo Profilo" #, fuzzy #~ msgid "The popup argument requires D-Bus. Aborting." #~ msgstr "" #~ "L'argomento --toggle richiede D-Bus, che non è apparentemente presente " #~ "sul sistema. Annullo l'operazione." #, fuzzy #~ msgid "_Update Path" #~ msgstr "_Aggiorna la Libreria" #~ msgid "Website: http://www.nongnu.org/sonata/" #~ msgstr "Sito web: http://www.nongnu.org/sonata/" #~ msgid "Enable Audioscrobbler" #~ msgstr "Abilita Audioscrobbler" #~ msgid "Enable album art" #~ msgstr "Abilita Copertina" #~ msgid "Enable lyrics" #~ msgstr "Abilita la ricerca dei testi" #~ msgid "Enable system tray icon" #~ msgstr "Mostra icona nell'area di notifica" #~ msgid "_Display" #~ msgstr "_Finestra" #~ msgid "_Extras" #~ msgstr "_Extra" #~ msgid "" #~ "PyGTK+ 2.10 or gnome-python-extras not found, system tray support " #~ "disabled." #~ msgstr "" #~ "Librerie PyGTK+ 2.10 e/o gnome-python-extras non trovate, il supporto " #~ "all'area di notifica è stato disabilitato." #~ msgid "Reset to Default" #~ msgstr "Ripristina le impostazioni di Default" #, fuzzy #~ msgid "_New Playlist..." #~ msgstr "_Salva Playlist..." #~ msgid "Notification" #~ msgstr "Notifica" #~ msgid "" #~ "Python 2.5 or python-elementtree not found, audioscrobbler support " #~ "disabled." #~ msgstr "" #~ "Python 2.5 o la libreria python-elementtree non sono installati, il " #~ "supporto ad audioscrobbler è stato disabilitato." #~ msgid "Audioscrobbler Verification" #~ msgstr "Verifica Audioscrobbler" #, fuzzy #~ msgid "Update library for selected item(s)" #~ msgstr "Aggiorna la libreria per i percorsi selezionati" #~ msgid "_Shuffle" #~ msgstr "Mi_schia" #~ msgid "Toggle shuffle mode" #~ msgstr "Attiva/Disattiva riproduzione casuale" #~ msgid "Not connected" #~ msgstr "Non connesso" #~ msgid "Press enter to search for these terms." #~ msgstr "Premi invio per cercare con questa chiave di ricerca" #~ msgid "Add new profile" #~ msgstr "Aggiungi un nuovo profilo" #~ msgid "Remove current profile" #~ msgstr "Rimuovi il profilo corrente" #~ msgid "Play enqueued files on activate" #~ msgstr "Riproduci brani in coda quando attivato" #~ msgid "" #~ "Automatically play enqueued items when activated via double-click or " #~ "enter." #~ msgstr "" #~ "Riproduce automaticamente i brani in coda quando sonata viene attivato " #~ "con un doppio click o premendo invio." #~ msgid "Add selected song(s) or directory(s)" #~ msgstr "Aggiungi il/i brani selezionati o la/le cartelle selezionate" #~ msgid "Replace with selected song(s) or directory(s)" #~ msgstr "Sostituisci con il/i brani selezionati o la/le cartelle selezionate" #~ msgid "Add to _Queue" #~ msgstr "Aggiungi alla _Coda" #~ msgid "Remove from _Queue" #~ msgstr "Rimuovi dalla _Coda" #~ msgid "Add selected song(s) to playlist queue" #~ msgstr "Aggiungi il brano od i brani selezionati alla coda della playlist" #~ msgid "Remove selected song(s) from playlist queue" #~ msgstr "Rimuovi il brano od i brani selezionati dalla coda della playlist" #~ msgid "seconds" #~ msgstr "secondi" #~ msgid "Song Info..." #~ msgstr "Informazioni sul brano" #~ msgid "Click to collapse the player" #~ msgstr "Fai click per passare in modalità compatta" #~ msgid "Click to expand the player" #~ msgstr "Fai click per passare in modalità estesa" #~ msgid "_Song Info" #~ msgstr "Informazioni _sul brano" #~ msgid "_Search..." #~ msgstr "_Cerca..." #~ msgid "Remote only" #~ msgstr "Solo in remoto" #~ msgid "Remote, then local" #~ msgstr "In remoto, poi in locale" #~ msgid "To save artwork as" #~ msgstr "Salva artwork come" #~ msgid "Artwork Verification" #~ msgstr "Verifica Artwork" #~ msgid "Switch to current playlist" #~ msgstr "Vai alla playlist corrente" #~ msgid "Toggle filter bar for jumping straight to track" #~ msgstr "" #~ "Attiva/Disattiva barra dei filtri per saltare direttamente alla traccia" #~ msgid "Song name" #~ msgstr "Brano" #~ msgid "songs." #~ msgstr "brani." ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/po/ja.po�������������������������������������������������������������������������������0000664�0000000�0000000�00000121157�13771420143�0014365�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Japanese translation for Sonata package. # Copyright (C) 2009 Sonata's COPYRIGHT HOLDER # This file is distributed under the same license as the sonata package. # Masato Hashimoto <cabezon.hashimoto@gmail.com>, 2009. # msgid "" msgstr "" "Project-Id-Version: sonata\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-03-22 22:01-0600\n" "PO-Revision-Date: 2009-03-23 21:53+0900\n" "Last-Translator: Masato Hashimoto <cabezon.hashimoto@gmail.com>\n" "Language-Team: Japanese <ja@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. define the shortcuts and their descriptions #. these are all gettextable #: .././sonata/about.py:52 msgid "About Sonata" msgstr "Sonata について" #: .././sonata/about.py:53 #: .././sonata/preferences.py:60 msgid "Preferences" msgstr "設定" #: .././sonata/about.py:54 msgid "Fullscreen Artwork Mode" msgstr "アートワークモードの全画面化" #: .././sonata/about.py:55 msgid "Switch to [1st-5th] tab" msgstr "1 - 5 のタブに切り換え" #: .././sonata/about.py:56 msgid "Connect to MPD" msgstr "MPD に接続" #: .././sonata/about.py:57 msgid "Disconnect from MPD" msgstr "MPD から切断" #: .././sonata/about.py:58 msgid "Randomize current playlist" msgstr "現在のプレイリストをランダムに" #: .././sonata/about.py:59 msgid "Expand player" msgstr "プレイヤの展開" #: .././sonata/about.py:60 msgid "Switch to previous tab" msgstr "前のタブへ切り換え" #: .././sonata/about.py:61 msgid "Switch to next tab" msgstr "次のタブへ切り換え" #: .././sonata/about.py:62 msgid "Collapse player" msgstr "プレイヤを折り畳む" #: .././sonata/about.py:63 #: .././sonata/library.py:86 msgid "Search library" msgstr "ライブラリの検索" #: .././sonata/about.py:64 msgid "Quit" msgstr "終了" #: .././sonata/about.py:65 msgid "Update entire library" msgstr "ライブラリ全体の更新" #: .././sonata/about.py:66 msgid "Display popup menu" msgstr "ポップアップメニューの表示" #: .././sonata/about.py:67 msgid "Minimize to system tray (if enabled)" msgstr "システムトレイへ最小化 (可能であれば)" #: .././sonata/about.py:69 msgid "Previous track" msgstr "前のトラック" #: .././sonata/about.py:70 msgid "Next track" msgstr "次のトラック" #: .././sonata/about.py:71 msgid "Play/Pause" msgstr "再生 / 一時停止" #: .././sonata/about.py:72 msgid "Stop" msgstr "停止" #: .././sonata/about.py:73 msgid "Lower the volume" msgstr "ボリュームを下げる" #: .././sonata/about.py:74 msgid "Raise the volume" msgstr "ボリュームを上げる" #: .././sonata/about.py:76 msgid "Play selected song" msgstr "選択した曲の再生" #: .././sonata/about.py:77 msgid "Remove selected song(s)" msgstr "選択した曲の削除" #: .././sonata/about.py:78 msgid "Center currently playing song" msgstr "現在再生中の曲を中央へ" #: .././sonata/about.py:79 #: .././sonata/about.py:88 msgid "Edit selected song's tags" msgstr "選択した曲のタグの編集" #: .././sonata/about.py:80 msgid "Save to new playlist" msgstr "新しいプレイリストに保存" #: .././sonata/about.py:81 msgid "Clear list" msgstr "リストのクリア" #: .././sonata/about.py:82 msgid "Randomize list" msgstr "リストをランダムに" #: .././sonata/about.py:84 msgid "Add selected song(s) or enter directory" msgstr "選択した曲の追加 / ディレクトリへ移動" #: .././sonata/about.py:85 msgid "Go to parent directory" msgstr "親ディレクトリへ移動" #: .././sonata/about.py:86 msgid "Add selected item(s)" msgstr "選択したアイテムの追加" #: .././sonata/about.py:87 msgid "Replace with selected item(s)" msgstr "選択したアイテムで置き換え" #: .././sonata/about.py:89 msgid "Add selected item(s) and play" msgstr "選択したアイテムを追加して再生" #: .././sonata/about.py:90 msgid "Replace with selected item(s) and play" msgstr "選択したアイテムで置き換えて再生" #: .././sonata/about.py:91 msgid "Update selected item(s)/path(s)" msgstr "選択したアイテム/パスの更新" #: .././sonata/about.py:93 #: .././sonata/about.py:95 msgid "Add selected playlist(s)" msgstr "選択したプレイリストの追加" #: .././sonata/about.py:94 msgid "Remove selected playlist(s)" msgstr "選択したプレイリストの削除" #: .././sonata/about.py:96 msgid "Replace with selected playlist(s)" msgstr "選択したプレイリストで置き換え" #: .././sonata/about.py:97 msgid "Add selected playlist(s) and play" msgstr "選択したプレイリストを追加して再生" #: .././sonata/about.py:98 msgid "Replace with selected playlist(s) and play" msgstr "選択したプレイリストで置き換えて再生" #: .././sonata/about.py:100 #: .././sonata/about.py:102 msgid "Add selected stream(s)" msgstr "選択したストリームの追加" #: .././sonata/about.py:101 msgid "Remove selected stream(s)" msgstr "選択したストリームの削除" #: .././sonata/about.py:103 msgid "Replace with selected stream(s)" msgstr "選択したストリームで置き換え" #: .././sonata/about.py:104 msgid "Add selected stream(s) and play" msgstr "選択したストリームを追加して再生" #: .././sonata/about.py:105 msgid "Replace with selected stream(s) and play" msgstr "選択したストリームで置き換えて再生" #: .././sonata/about.py:107 msgid "Edit playing song's tags" msgstr "再生中の曲のタグの編集" #. define the main array- this adds headings to each section of #. shortcuts that will be displayed #: .././sonata/about.py:110 msgid "Main Shortcuts" msgstr "メインショートカット" #: .././sonata/about.py:111 msgid "Playback Shortcuts" msgstr "再生のショートカット" #: .././sonata/about.py:112 msgid "Current Shortcuts" msgstr "現在のプレイリストのショートカット" #: .././sonata/about.py:113 msgid "Library Shortcuts" msgstr "ライブラリのショートカット" #: .././sonata/about.py:114 msgid "Playlist Shortcuts" msgstr "プレイリストのショートカット" #: .././sonata/about.py:115 msgid "Stream Shortcuts" msgstr "ストリームのショートカット" #: .././sonata/about.py:116 msgid "Info Shortcuts" msgstr "情報のショートカット" #: .././sonata/about.py:117 msgid "Shortcuts" msgstr "ショートカット" #: .././sonata/about.py:153 msgid "An elegant music client for MPD." msgstr "エレガントな MPD クライアント" #. Add button to show keybindings: #: .././sonata/about.py:166 msgid "_Shortcuts" msgstr "ショートカット(_S)" #: .././sonata/about.py:177 #: .././sonata/main.py:3088 #: .././sonata/preferences.py:738 msgid "Unable to launch a suitable browser." msgstr "適切なブラウザを起動できません。" #: .././sonata/about.py:177 #: .././sonata/main.py:3088 #: .././sonata/preferences.py:738 msgid "Launch Browser" msgstr "ブラウザの起動" #: .././sonata/cli.py:81 msgid "The toggle and popup arguments require D-Bus. Aborting." msgstr "--toggle および --popup オプションには D-Bus が必要です。終了します。" #: .././sonata/cli.py:97 msgid "Version" msgstr "バージョン" #: .././sonata/cli.py:98 msgid "Website" msgstr "ウェブサイト" #: .././sonata/cli.py:103 msgid "Usage: sonata [OPTION]... [COMMAND]..." msgstr "使用法: sonata [OPTION]... [COMMAND}..." #: .././sonata/cli.py:105 msgid "Options" msgstr "オプション" #: .././sonata/cli.py:106 msgid "Show this help and exit" msgstr "このヘルプを表示して終了する" #: .././sonata/cli.py:107 msgid "Popup song notification (requires D-Bus)" msgstr "楽曲をポップアップ通知する (D-Bus が必要)" #: .././sonata/cli.py:108 msgid "Toggles whether the app is minimized" msgstr "アプリケーションをシステムトレイに最小化または" #: .././sonata/cli.py:109 msgid "to tray or visible (requires D-Bus)" msgstr "表示を切り換える (D-Bus が必要)" #: .././sonata/cli.py:110 msgid "Don't start app if D-Bus commands fail" msgstr "D-Bus コマンドが失敗したらアプリケーションを起動しない" #: .././sonata/cli.py:111 msgid "Show version information and exit" msgstr "バージョン情報を表示して終了する" #: .././sonata/cli.py:112 msgid "Start app hidden (requires systray)" msgstr "非表示状態で起動する (システムトレイが必要)" #: .././sonata/cli.py:113 msgid "Start app visible (requires systray)" msgstr "表示状態で起動する (システムトレイが必要)" #: .././sonata/cli.py:114 msgid "Start with profile [NUM]" msgstr "プロファイル [NUM] で起動する" #: .././sonata/cli.py:116 msgid "Commands" msgstr "コマンド" #: .././sonata/cli.py:117 msgid "Play song in playlist" msgstr "プレイリストの曲を再生する" #: .././sonata/cli.py:118 msgid "Pause currently playing song" msgstr "再生中の曲を一時停止する" #: .././sonata/cli.py:119 msgid "Stop currently playing song" msgstr "再生中の曲を停止する" #: .././sonata/cli.py:120 msgid "Play next song in playlist" msgstr "プレイリストの次の曲を再生する" #: .././sonata/cli.py:121 msgid "Play previous song in playlist" msgstr "プレイリストの前の曲を再生する" #: .././sonata/cli.py:122 msgid "Toggle play/pause; plays if stopped" msgstr "再生/停止を切り替える" #: .././sonata/cli.py:123 msgid "Toggle repeat mode" msgstr "繰り返しモードを切り換える" #: .././sonata/cli.py:124 msgid "Toggle random mode" msgstr "ランダムモードを切り換える" #: .././sonata/cli.py:125 msgid "Display current song info" msgstr "現在の曲情報を表示する" #: .././sonata/cli.py:126 msgid "Display MPD status" msgstr "MPD の状態を表示する" #: .././sonata/cli.py:134 #, python-format msgid "Starting Sonata with profile %s..." msgstr "Sonata をプロファイル %s で起動しています..." #: .././sonata/cli.py:136 #, python-format msgid "%d is not an available profile number." msgstr "%d は有効なプロファイル番号ではありません。" #: .././sonata/cli.py:137 #: .././sonata/cli.py:141 #, python-format msgid "Profile numbers must be between 1 and %d." msgstr "プロファイル番号は 1 から %d の間でなければなりません。" #: .././sonata/cli.py:140 #, python-format msgid "Python is unable to interpret %s as a number." msgstr "Python は番号として %s を解釈できません。" #: .././sonata/cli.py:154 #: .././sonata/main.py:179 msgid "Default Profile" msgstr "デフォルトプロファイル" #: .././sonata/cli.py:154 #: .././sonata/main.py:179 msgid "by" msgstr "by" #: .././sonata/cli.py:154 #: .././sonata/main.py:179 msgid "from" msgstr "from" #: .././sonata/cli.py:176 msgid "" "Unable to connect to MPD.\n" "Please check your Sonata preferences or MPD_HOST/MPD_PORT environment variables." msgstr "" "MPD に接続できません。\n" "Sonata の設定や環境変数 MPD_HOST/MPD_PORT の値をチェックしてください。" #: .././sonata/cli.py:208 #: .././sonata/info.py:91 #: .././sonata/info.py:245 #: .././sonata/library.py:49 #: .././sonata/tagedit.py:125 msgid "Title" msgstr "タイトル" #: .././sonata/cli.py:209 #: .././sonata/info.py:91 #: .././sonata/info.py:246 #: .././sonata/library.py:49 #: .././sonata/main.py:1184 #: .././sonata/tagedit.py:126 msgid "Artist" msgstr "アーティスト" #: .././sonata/cli.py:210 #: .././sonata/info.py:91 #: .././sonata/info.py:247 #: .././sonata/library.py:49 #: .././sonata/main.py:1185 #: .././sonata/main.py:2439 #: .././sonata/tagedit.py:127 msgid "Album" msgstr "アルバム" #: .././sonata/cli.py:211 #: .././sonata/info.py:91 #: .././sonata/info.py:248 msgid "Date" msgstr "日付" #: .././sonata/cli.py:212 #: .././sonata/info.py:91 #: .././sonata/info.py:250 #: .././sonata/main.py:1186 #: .././sonata/tagedit.py:130 msgid "Track" msgstr "トラック" #: .././sonata/cli.py:213 #: .././sonata/info.py:91 #: .././sonata/info.py:249 #: .././sonata/library.py:49 #: .././sonata/main.py:1189 #: .././sonata/preferences.py:432 #: .././sonata/tagedit.py:139 msgid "Genre" msgstr "ジャンル" #: .././sonata/cli.py:214 #: .././sonata/info.py:91 #: .././sonata/info.py:251 #: .././sonata/main.py:1191 msgid "File" msgstr "ファイル" #: .././sonata/cli.py:219 #: .././sonata/cli.py:221 msgid "Time" msgstr "時間" #: .././sonata/cli.py:222 #: .././sonata/info.py:91 #: .././sonata/info.py:244 msgid "Bitrate" msgstr "ビットレート" #: .././sonata/cli.py:224 msgid "MPD stopped" msgstr "MPD は停止しています" #: .././sonata/cli.py:228 #: .././sonata/cli.py:230 #: .././sonata/cli.py:232 msgid "State" msgstr "状態" #: .././sonata/cli.py:228 msgid "Playing" msgstr "再生中" #: .././sonata/cli.py:230 msgid "Paused" msgstr "一時停止" #: .././sonata/cli.py:232 #: .././sonata/main.py:559 #: .././sonata/main.py:564 #: .././sonata/main.py:1836 #: .././sonata/main.py:1847 msgid "Stopped" msgstr "停止" #: .././sonata/cli.py:234 #: .././sonata/cli.py:236 msgid "Repeat" msgstr "繰り返し" #: .././sonata/cli.py:234 #: .././sonata/cli.py:238 msgid "Off" msgstr "オフ" #: .././sonata/cli.py:236 #: .././sonata/cli.py:240 msgid "On" msgstr "オン" #: .././sonata/cli.py:238 #: .././sonata/cli.py:240 msgid "Random" msgstr "ランダム" #: .././sonata/cli.py:241 msgid "Volume" msgstr "ボリューム" #: .././sonata/cli.py:242 msgid "Crossfade" msgstr "クロスフェード" #: .././sonata/cli.py:242 #: .././sonata/preferences.py:192 msgid "second" msgid_plural "seconds" msgstr[0] "秒" msgstr[1] "秒" #: .././sonata/current.py:64 msgid "Filter" msgstr "フィルタ" #: .././sonata/dbus_plugin.py:83 msgid "Sonata failed to connect to the D-BUS session bus: Unable to determine the address of the message bus (try 'man dbus-launch' and 'man dbus-daemon' for help)" msgstr "Sonata は D-BUS セッションへの接続に失敗しました: メッセージバスのアドレス解決ができません ('man dbus-launch' や 'man dbus-daemon' で調べてみてください)。" #: .././sonata/dbus_plugin.py:96 msgid "Failed to execute remote commands." msgstr "リモートコマンドの実行に失敗しました。" #: .././sonata/dbus_plugin.py:98 msgid "Starting Sonata instead..." msgstr "代わりに Sonata を起動しています..." #: .././sonata/dbus_plugin.py:100 msgid "Maybe Sonata is not running?" msgstr "もしかして Sonata が起動してないとか?" #: .././sonata/dbus_plugin.py:114 msgid "An instance of Sonata is already running. Showing it..." msgstr "Sonata のインスタンスはすでに起動しています。そちらを表示します..." #: .././sonata/dbus_plugin.py:120 msgid "Failed to execute remote command." msgstr "リモートコマンドの実行に失敗しました。" #. Song info #: .././sonata/info.py:78 msgid "Song Info" msgstr "楽曲情報" #: .././sonata/info.py:93 msgid "Launch artist in Wikipedia" msgstr "Wikipedia でアーティストを調べる" #: .././sonata/info.py:93 msgid "Launch album in Wikipedia" msgstr "Wikipedia でアルバムを調べる" #: .././sonata/info.py:127 msgid "Toggle extra tags" msgstr "拡張タグ表示の切り換え" #: .././sonata/info.py:130 msgid "Edit song tags" msgstr "この曲のタグを編集する" #. Lyrics #: .././sonata/info.py:140 msgid "Lyrics" msgstr "歌詞" #: .././sonata/info.py:152 msgid "Search Lyricwiki.org for lyrics" msgstr "歌詞を Lyricwiki.org で検索する" #: .././sonata/info.py:153 msgid "Edit lyrics at Lyricwiki.org" msgstr "Lyricwiki.org の歌詞を編集する" #. Album info #: .././sonata/info.py:161 msgid "Album Info" msgstr "アルバム情報" #: .././sonata/info.py:213 #: .././sonata/info.py:218 msgid "more" msgstr "もっと" #: .././sonata/info.py:215 msgid "hide" msgstr "隠す" #: .././sonata/info.py:281 msgid "edit tags" msgstr "タグの編集" #: .././sonata/info.py:308 msgid "Album info not found." msgstr "アルバム情報が見つかりませんでした。" #: .././sonata/info.py:311 msgid "Album name not set." msgstr "アルバム名が設定されていません。" #: .././sonata/info.py:324 msgid "ZSI not found, fetching lyrics support disabled." msgstr "ZSI が見つかりませんでした。歌詞の取得サポートは無効になります。" #: .././sonata/info.py:329 msgid "Artist or song title not set." msgstr "アーティストまたは曲のタイトルが設定されていません。" #: .././sonata/info.py:371 msgid "search" msgstr "検索" #: .././sonata/info.py:372 msgid "edit" msgstr "編集" #: .././sonata/info.py:381 #: .././sonata/info.py:436 msgid "Lyrics not found" msgstr "歌詞が見つかりませんでした" #. Fetch lyrics from lyricwiki.org #: .././sonata/info.py:401 msgid "Fetching lyrics..." msgstr "歌詞を取得しています..." #: .././sonata/info.py:411 msgid "Couldn't connect to LyricWiki" msgstr "LyricWiki に接続できませんでした" #: .././sonata/info.py:439 msgid "Fetching lyrics failed" msgstr "歌詞の取得に失敗しました" #: .././sonata/library.py:47 msgid "Untagged" msgstr "タグなし" #: .././sonata/library.py:48 msgid "Various Artists" msgstr "いろんなアーティスト" #: .././sonata/library.py:49 msgid "Filename" msgstr "ファイル名" #: .././sonata/library.py:49 msgid "Everything" msgstr "すべて" #: .././sonata/library.py:52 msgid "Filesystem" msgstr "ファイルシステム" #: .././sonata/library.py:53 msgid "Artists" msgstr "アーティスト" #: .././sonata/library.py:54 msgid "Albums" msgstr "アルバム" #: .././sonata/library.py:55 msgid "Genres" msgstr "ジャンル" #: .././sonata/library.py:84 msgid "Search terms" msgstr "検索語" #: .././sonata/library.py:90 msgid "End Search" msgstr "検索をやめる" #: .././sonata/library.py:92 msgid "Library browsing view" msgstr "ライブラリ表示モード" #: .././sonata/library.py:96 msgid "Search" msgstr "検索" #. Show text: #: .././sonata/library.py:761 #: .././sonata/main.py:1763 #: .././sonata/main.py:3331 msgid "song" msgid_plural "songs" msgstr[0] "曲" msgstr[1] "曲" #: .././sonata/library.py:761 #: .././sonata/main.py:1757 msgid "minute" msgid_plural "minutes" msgstr[0] "分" msgstr[1] "分" #: .././sonata/library.py:849 msgid "Song" msgstr "曲" #: .././sonata/library.py:849 #: .././sonata/main.py:1190 msgid "Path" msgstr "パス" #. Constants #: .././sonata/main.py:102 msgid "Current" msgstr "現在のリスト" #: .././sonata/main.py:103 msgid "Library" msgstr "ライブラリ" #: .././sonata/main.py:104 msgid "Playlists" msgstr "プレイリスト" #: .././sonata/main.py:105 msgid "Streams" msgstr "ストリーム" #: .././sonata/main.py:106 msgid "Info" msgstr "情報" # Preference -> Extras -> Popup notification by cong changes (2sec, 3sec...Entire song) #: .././sonata/main.py:137 #: .././sonata/preferences.py:193 #: .././sonata/preferences.py:194 msgid "Entire song" msgstr "曲中ずっと" #: .././sonata/main.py:234 msgid "_Sort List" msgstr "リストの並べ替え(_S)" #: .././sonata/main.py:235 msgid "Sa_ve List to" msgstr "リストの保存(_V)" #: .././sonata/main.py:236 msgid "_Connection" msgstr "接続(_C)" #: .././sonata/main.py:237 msgid "P_lay after" msgstr "再生(_L)" #: .././sonata/main.py:238 #: .././sonata/main.py:2454 msgid "_Update" msgstr "更新(_U)" #: .././sonata/main.py:239 msgid "Use _Remote Image..." msgstr "リモートの画像を使用(_R)..." #: .././sonata/main.py:240 msgid "Use _Local Image..." msgstr "ローカルの画像を使用(_L)..." #: .././sonata/main.py:241 msgid "_Fullscreen Mode" msgstr "全画面モード(_F)" #: .././sonata/main.py:242 msgid "Reset Image" msgstr "画像のリセット" #: .././sonata/main.py:243 msgid "_Play" msgstr "再生(_P)" #: .././sonata/main.py:244 msgid "Pa_use" msgstr "一時停止(_U)" #: .././sonata/main.py:245 msgid "_Stop" msgstr "停止(_S)" #: .././sonata/main.py:246 msgid "Pre_vious" msgstr "前(_V)" #: .././sonata/main.py:247 msgid "_Next" msgstr "次(_N)" #: .././sonata/main.py:248 msgid "_Quit" msgstr "終了(_Q)" #: .././sonata/main.py:249 msgid "_Remove" msgstr "削除(_R)" #: .././sonata/main.py:250 msgid "_Clear" msgstr "クリア(_C)" #: .././sonata/main.py:251 msgid "_Entire Library" msgstr "ライブラリ全体(_E)" #: .././sonata/main.py:252 msgid "_Selected Items" msgstr "選択したアイテム(_S)" #: .././sonata/main.py:253 msgid "_Preferences..." msgstr "設定(_P)" #: .././sonata/main.py:254 msgid "_About..." msgstr "Sonata について(_A)..." #: .././sonata/main.py:255 msgid "_Edit Tags..." msgstr "タグの編集(_E)..." #: .././sonata/main.py:256 msgid "_Add" msgstr "リストに追加(_A)" #: .././sonata/main.py:257 msgid "_Replace" msgstr "リストを置換(_R)" #: .././sonata/main.py:258 msgid "Add" msgstr "リストに追加" #: .././sonata/main.py:259 msgid "Replace" msgstr "リストを置換" #: .././sonata/main.py:260 msgid "_Delete..." msgstr "削除(_D)..." #: .././sonata/main.py:261 msgid "Shuffle" msgstr "シャッフル" #: .././sonata/main.py:286 msgid "S_how Sonata" msgstr "Sonata を表示(_H)" #: .././sonata/main.py:287 msgid "_Repeat" msgstr "繰り返し(_R)" #: .././sonata/main.py:288 msgid "Rando_m" msgstr "ランダム(_M)" #: .././sonata/main.py:428 msgid "By Artist" msgstr "アーティスト名順" #: .././sonata/main.py:429 msgid "By Album" msgstr "アルバム名順" #: .././sonata/main.py:430 msgid "By Song Title" msgstr "曲名順" #: .././sonata/main.py:431 msgid "By File Name" msgstr "ファイル名順" #: .././sonata/main.py:432 msgid "By Dir & File Name" msgstr "ディレクトリ & ファイル名順" #: .././sonata/main.py:433 msgid "Reverse List" msgstr "逆順" #: .././sonata/main.py:456 #: .././sonata/main.py:467 msgid "_New..." msgstr "新規(_N)..." #: .././sonata/main.py:457 msgid "_Edit..." msgstr "編集(_E)..." #: .././sonata/main.py:468 msgid "_Rename..." msgstr "名前の変更(_R)..." #: .././sonata/main.py:530 #: .././sonata/main.py:597 #: .././sonata/main.py:598 msgid "Playlist" msgstr "プレイリスト" #: .././sonata/main.py:560 #: .././sonata/main.py:1840 #: .././sonata/main.py:2049 msgid "Click to expand" msgstr "クリックで展開します" #: .././sonata/main.py:565 #: .././sonata/main.py:1838 #: .././sonata/main.py:2047 msgid "Click to collapse" msgstr "クリックで折り畳みます" #: .././sonata/main.py:570 #: .././sonata/main.py:1732 #: .././sonata/main.py:1843 msgid "Not Connected" msgstr "未接続" #: .././sonata/main.py:572 #: .././sonata/main.py:1730 #: .././sonata/main.py:1845 msgid "No Read Permission" msgstr "読み込み権がありません" #: .././sonata/main.py:645 msgid "Cover Art" msgstr "カバーアート" #: .././sonata/main.py:850 #: .././sonata/main.py:863 #: .././sonata/main.py:884 msgid "Profile" msgstr "プロファイル" #: .././sonata/main.py:863 #: .././sonata/main.py:864 #: .././sonata/main.py:884 msgid "MPD_HOST/PORT" msgstr "MPD_HOST/PORT" #: .././sonata/main.py:865 #: .././sonata/main.py:871 msgid "Disconnect" msgstr "切断" #: .././sonata/main.py:1187 #: .././sonata/main.py:1194 msgid "#" msgstr "#" #: .././sonata/main.py:1188 #: .././sonata/preferences.py:431 #: .././sonata/tagedit.py:128 msgid "Year" msgstr "年" #: .././sonata/main.py:1192 msgid "Stream" msgstr "ストリーム" #: .././sonata/main.py:1193 msgid "Len" msgstr "長さ" #: .././sonata/main.py:1214 #: .././sonata/main.py:1221 #: .././sonata/main.py:1262 #: .././sonata/main.py:1269 msgid "Unknown" msgstr "不明" #: .././sonata/main.py:1753 msgid "day" msgid_plural "days" msgstr[0] "日" msgstr[1] "日" #: .././sonata/main.py:1761 msgid "hour" msgid_plural "hours" msgstr[0] "時間" msgstr[1] "時間" # HH hour(s) *and* MM minutes. Unnecessary for ja. #: .././sonata/main.py:1766 #: .././sonata/main.py:1768 msgid "and" msgstr " " #: .././sonata/main.py:1776 msgid "(updating mpd)" msgstr "(mpd を更新しています)" #: .././sonata/main.py:2116 msgid "Lyrics Search" msgstr "歌詞の検索" #: .././sonata/main.py:2117 msgid "_Search" msgstr "検索(_S)" #: .././sonata/main.py:2120 msgid "Artist Name" msgstr "アーティスト名" #: .././sonata/main.py:2125 msgid "Song Title" msgstr "曲のタイトル" #: .././sonata/main.py:2377 msgid "Open Image" msgstr "画像を開く" #: .././sonata/main.py:2379 msgid "Images" msgstr "画像" #: .././sonata/main.py:2383 msgid "All files" msgstr "全てのファイル" #: .././sonata/main.py:2425 msgid "Choose Cover Art" msgstr "カバーアートの選択" #: .././sonata/main.py:2426 msgid "C_hoose" msgstr "選択(_H)" #: .././sonata/main.py:2459 msgid "Edit search terms" msgstr "検索語の編集" #: .././sonata/main.py:2516 msgid "No artist or album name found." msgstr "アーティストまたはアルバム名が見つかりませんでした。" #: .././sonata/main.py:2519 msgid "No cover art found." msgstr "カバーアートが見つかりませんでした。" #: .././sonata/main.py:2843 msgid "Delete the selected playlist?" msgid_plural "Delete the selected playlists?" msgstr[0] "選択したプレイリストを削除しますか?" msgstr[1] "選択したプレイリストを削除しますか?" #: .././sonata/main.py:2843 msgid "Delete Playlist" msgid_plural "Delete Playlists" msgstr[0] "プレイリストの削除" msgstr[1] "プレイリストの削除" #: .././sonata/main.py:2851 msgid "Delete the selected stream?" msgid_plural "Delete the selected streams?" msgstr[0] "選択したストリームを削除しますか?" msgstr[1] "選択したストリームを削除しますか?" #: .././sonata/main.py:2851 msgid "Delete Stream" msgid_plural "Delete Streams" msgstr[0] "ストリームの削除" msgstr[1] "ストリームの削除" #: .././sonata/main.py:2909 msgid "To save lyrics to the music file's directory, you must specify a valid music directory." msgstr "歌詞を音楽ファイルのディレクトリに保存する場合は、正しい音楽ディレクトリを指定してください。" #: .././sonata/main.py:2909 #: .././sonata/main.py:2916 msgid "Music Dir Verification" msgstr "音楽ディレクトリの確認" #: .././sonata/main.py:2916 msgid "To save artwork to the music file's directory, you must specify a valid music directory." msgstr "アートワークを音楽ディレクトリに保存する場合は、正しい音楽ディレクトリを指定してください。" #: .././sonata/main.py:3332 msgid "album" msgid_plural "albums" msgstr[0] "アルバム" msgstr[1] "アルバム" #: .././sonata/main.py:3333 msgid "artist" msgid_plural "artists" msgstr[0] "アーティスト" msgstr[1] "アーティスト" #: .././sonata/main.py:3340 msgid "day of bliss" msgid_plural "days of bliss" msgstr[0] "日の幸せ" msgstr[1] "日の幸せ" #: .././sonata/main.py:3342 msgid "hour of bliss" msgid_plural "hours of bliss" msgstr[0] "時間の幸せ" msgstr[1] "時間の幸せ" #: .././sonata/playlists.py:103 #: .././sonata/playlists.py:105 msgid "Save Playlist" msgstr "プレイリストの保存" #: .././sonata/playlists.py:120 msgid "Would you like to replace the existing playlist or append these songs?" msgstr "これらの曲を既存のプレイリストに追加しますか、それとも置き換えますか?" #: .././sonata/playlists.py:120 msgid "Existing Playlist" msgstr "既存のプレイリスト" #: .././sonata/playlists.py:120 msgid "Replace playlist" msgstr "プレイリストを置き換える" #: .././sonata/playlists.py:120 msgid "Append songs" msgstr "曲を追加する" #: .././sonata/playlists.py:141 msgid "A playlist with this name already exists. Would you like to replace it?" msgstr "この名前のプレイリストはすでに存在します。置き換えますか?" #: .././sonata/playlists.py:153 msgid "Playlist name" msgstr "プレイリスト名" #: .././sonata/playlists.py:182 #: .././sonata/playlists.py:186 msgid "Rename Playlist" msgstr "プレイリスト名の変更" #. Constants: #: .././sonata/preferences.py:35 msgid "System tray" msgstr "システムトレイ" #: .././sonata/preferences.py:35 msgid "Top Left" msgstr "左上" #: .././sonata/preferences.py:35 msgid "Top Right" msgstr "右上" #: .././sonata/preferences.py:35 msgid "Bottom Left" msgstr "左下" #: .././sonata/preferences.py:35 msgid "Bottom Right" msgstr "右下" #: .././sonata/preferences.py:35 msgid "Screen Center" msgstr "画面中央" #. MPD tab #: .././sonata/preferences.py:64 msgid "MPD Connection" msgstr "MPD 接続" #: .././sonata/preferences.py:76 msgid "_Name" msgstr "名前(_N)" #: .././sonata/preferences.py:79 msgid "_Host" msgstr "ホスト(_H)" #: .././sonata/preferences.py:82 msgid "_Port" msgstr "ポート(_P)" #: .././sonata/preferences.py:86 msgid "_Music dir" msgstr "音楽ディレクトリ(_M)" #: .././sonata/preferences.py:87 msgid "Select a Music Directory" msgstr "音楽ディレクトリの選択" #: .././sonata/preferences.py:91 msgid "Pa_ssword" msgstr "パスワード(_S)" #: .././sonata/preferences.py:94 msgid "Leave blank if no password is required." msgstr "パスワードを必要としない場合は空白のままにしてください。" #: .././sonata/preferences.py:95 msgid "_Autoconnect on start" msgstr "起動時に自動的に接続する(_A)" #: .././sonata/preferences.py:113 msgid "Using MPD_HOST/PORT" msgstr "MPD_HOST/PORT を使用しています" #: .././sonata/preferences.py:163 #: .././sonata/preferences.py:536 msgid "Extras" msgstr "拡張" #: .././sonata/preferences.py:168 msgid "_Audioscrobbling (Last.fm)" msgstr "Audioscrobbler (Last.fm) を有効にする(_A)" #: .././sonata/preferences.py:170 msgid "_Username:" msgstr "ユーザ名(_U):" #: .././sonata/preferences.py:171 msgid "_Password:" msgstr "パスワード(_P):" #: .././sonata/preferences.py:188 msgid "Popup _notification on song changes" msgstr "曲の変更時にポップアップ通知する(_N)" #: .././sonata/preferences.py:210 msgid "Fade length" msgstr "フェード時間:" #: .././sonata/preferences.py:211 msgid "_Fade length" msgstr "フェード時間(_F):" #: .././sonata/preferences.py:213 msgid "sec" msgstr "秒" #: .././sonata/preferences.py:218 msgid "C_rossfade" msgstr "クロスフェードする(_R)" #. Display tab #: .././sonata/preferences.py:246 #: .././sonata/preferences.py:533 msgid "Display" msgstr "表示" #: .././sonata/preferences.py:251 msgid "_Album art" msgstr "アルバムアート(_A)" #: .././sonata/preferences.py:253 msgid "Standard" msgstr "標準" #: .././sonata/preferences.py:253 msgid "Stylized" msgstr "スタイル化" #: .././sonata/preferences.py:256 msgid "Artwork style:" msgstr "アートワークスタイル:" #: .././sonata/preferences.py:258 msgid "Local only" msgstr "ローカルのみ" #: .././sonata/preferences.py:258 msgid "Local and remote" msgstr "ローカルとリモート" #: .././sonata/preferences.py:260 msgid "Search locations:" msgstr "検索場所:" #: .././sonata/preferences.py:267 #: .././sonata/preferences.py:289 msgid "SONG_DIR" msgstr "楽曲DIR" #: .././sonata/preferences.py:269 msgid "custom" msgstr "カスタム" #: .././sonata/preferences.py:274 msgid "Save art to:" msgstr "アートの保存先:" #: .././sonata/preferences.py:277 msgid "_Playback/volume buttons" msgstr "再生/ボリュームボタン(_P)" #: .././sonata/preferences.py:280 msgid "Pr_ogressbar" msgstr "プログレスバー(_O)" #: .././sonata/preferences.py:283 msgid "_Statusbar" msgstr "ステータスバー(_S)" #: .././sonata/preferences.py:286 msgid "Song Ly_rics" msgstr "歌詞(_R)" #: .././sonata/preferences.py:288 msgid "Save lyrics to:" msgstr "歌詞の保存先:" #: .././sonata/preferences.py:297 msgid "System _tray icon" msgstr "システムトレイアイコン(_T)" #. Behavior tab #: .././sonata/preferences.py:319 msgid "Window Behavior" msgstr "ウィンドウの振る舞い" #: .././sonata/preferences.py:323 msgid "_Show window on all workspaces" msgstr "全てのワークスペースで表示する(_S)" #: .././sonata/preferences.py:326 msgid "_Keep window above other windows" msgstr "常に最前面に置く(_K)" #: .././sonata/preferences.py:329 msgid "_Hide window titlebar" msgstr "ウィンドウのタイトルバーを表示しない(_H):" #: .././sonata/preferences.py:334 msgid "_Minimize to system tray on close/escape" msgstr "閉じたときシステムトレイに最小化する(_M)" #: .././sonata/preferences.py:336 msgid "If enabled, closing Sonata will minimize it to the system tray. Note that it's currently impossible to detect if there actually is a system tray, so only check this if you have one." msgstr "このオプションを有効にすると、Sonata を閉じた際にシステムトレイに最小化されます。ただし、現在システムトレイが実際に存在するかどうかチェックできませんので、あなたがシステムトレイを使用している場合のみチェックマークをつけてください。" #: .././sonata/preferences.py:350 msgid "Miscellaneous" msgstr "その他" #: .././sonata/preferences.py:354 msgid "_Update MPD library on start" msgstr "起動時に MPD ライブラリを更新する(_U)" #: .././sonata/preferences.py:356 msgid "If enabled, Sonata will automatically update your MPD library when it starts up." msgstr "このオプションを有効にすると、Sonata は起動時に MPD ライブラリを自動的に更新します。" #: .././sonata/preferences.py:358 msgid "S_top playback on exit" msgstr "終了時に再生を止める(_T)" #: .././sonata/preferences.py:360 msgid "MPD allows playback even when the client is not open. If enabled, Sonata will behave like a more conventional music player and, instead, stop playback upon exit." msgstr "MPD はクライアントが動作していなくても再生できます。このオプションを有効にすると、Sonata は伝統的な音楽プレイヤと同じように振る舞い、終了時に再生を停止します。" #: .././sonata/preferences.py:362 msgid "_Write status file:" msgstr "状態をファイルに出力する(_W):" #: .././sonata/preferences.py:364 #: .././sonata/preferences.py:366 msgid "If enabled, Sonata will create a xmms-infopipe like file containing information about the current song. Many applications support the xmms-info file (Instant Messengers, IRC Clients...)" msgstr "このオプションを有効にすると、Sonata は現在の曲についての情報を xmms-infopipe ライクなファイルに出力します。多くのアプリケーション (インスタントメッセンジャ、IRC クライアントなど) は xmms-info ファイルをサポートしています。" #. Format tab #: .././sonata/preferences.py:392 msgid "Song Formatting" msgstr "表示フォーマット" #: .././sonata/preferences.py:397 msgid "C_urrent playlist:" msgstr "現在のプレイリスト(_U):" #: .././sonata/preferences.py:398 msgid "_Library:" msgstr "ライブラリ(_L):" #: .././sonata/preferences.py:399 msgid "_Window title:" msgstr "ウィンドウタイトル(_W):" #: .././sonata/preferences.py:400 msgid "Current _song line 1:" msgstr "現在の曲の 1 行目(_S):" #: .././sonata/preferences.py:402 msgid "Current s_ong line 2:" msgstr "現在の曲の 2 行目(_O):" #: .././sonata/preferences.py:422 msgid "Available options" msgstr "使用可能なオプション" #. XXX get these directly from the formatting function: #: .././sonata/preferences.py:426 msgid "Artist name" msgstr "アーティスト名" #: .././sonata/preferences.py:427 msgid "Album name" msgstr "アルバム名" #: .././sonata/preferences.py:428 msgid "Track name" msgstr "トラック名" #: .././sonata/preferences.py:429 msgid "Track number" msgstr "トラック番号" #: .././sonata/preferences.py:430 msgid "Disc number" msgstr "ディスク番号" #: .././sonata/preferences.py:433 msgid "File path" msgstr "ファイルのパス" #: .././sonata/preferences.py:434 msgid "File name" msgstr "ファイル名" #: .././sonata/preferences.py:435 #: .././sonata/streams.py:109 msgid "Stream name" msgstr "ストリーム名" #: .././sonata/preferences.py:436 msgid "Song length" msgstr "曲の長さ" #: .././sonata/preferences.py:437 msgid "Elapsed time (title only)" msgstr "経過時間 (タイトルのみ)" #: .././sonata/preferences.py:448 msgid "Info displayed only if all enclosed tags are defined" msgstr "囲まれた内容は、その中にあるタグ全てに値が設定されている場合のみ表示されます" #: .././sonata/preferences.py:448 msgid "Creates columns in the current playlist" msgstr "現在のプレイリストにカラムを作成します" #: .././sonata/preferences.py:473 msgid "_About" msgstr "Sonata について(_A)" #: .././sonata/preferences.py:474 msgid "_Configure..." msgstr "設定(_C)..." #: .././sonata/preferences.py:513 msgid "Loaded" msgstr "読み込み" #: .././sonata/preferences.py:521 msgid "Description" msgstr "説明" #. Set up table #: .././sonata/preferences.py:532 msgid "MPD" msgstr "MPD" #: .././sonata/preferences.py:534 msgid "Behavior" msgstr "振る舞い" #: .././sonata/preferences.py:535 msgid "Format" msgstr "フォーマット" #: .././sonata/preferences.py:605 msgid "New Profile" msgstr "新しいプロファイル" #. Prompt user for playlist name: #: .././sonata/preferences.py:659 msgid "Custom Artwork" msgstr "カスタムアートワーク" #: .././sonata/preferences.py:661 msgid "Artwork filename" msgstr "アートワークファイル名" #: .././sonata/streams.py:105 msgid "Edit Stream" msgstr "ストリームの編集" #: .././sonata/streams.py:107 #: .././sonata/streams.py:138 msgid "New Stream" msgstr "新しいストリーム" #: .././sonata/streams.py:116 msgid "Stream URL" msgstr "ストリーム URL" #: .././sonata/streams.py:138 msgid "A stream with this name already exists. Would you like to replace it?" msgstr "この名前のストリームはすでに存在します。置き換えちゃっていいですか?" #: .././sonata/tagedit.py:61 msgid "Taglib and/or tagpy not found, tag editing support disabled." msgstr "Taglib か tagpy、またはその両方が見つかりませんでした。タグ編集サポートは無効になります。" #: .././sonata/tagedit.py:61 #: .././sonata/tagedit.py:70 #: .././sonata/tagedit.py:75 #: .././sonata/tagedit.py:99 #: .././sonata/tagedit.py:103 #: .././sonata/tagedit.py:260 #: .././sonata/tagedit.py:299 msgid "Edit Tags" msgstr "タグの編集" #: .././sonata/tagedit.py:70 msgid "Tagpy version < 0.91. Please upgrade to a newer version, tag editing support disabled." msgstr "Tagpy のバージョンが 0.91 より古いです。新しいバージョンにアップグレードしてください。タグ編集サポートは無効になります。" #: .././sonata/tagedit.py:75 msgid "The path" msgstr "パス" #: .././sonata/tagedit.py:75 msgid "does not exist. Please specify a valid music directory in preferences." msgstr "が存在しません。「設定」で正しい音楽ディレクトリを指定してください。" #: .././sonata/tagedit.py:99 msgid "File " msgstr "ファイル " #: .././sonata/tagedit.py:99 msgid " not found. Please specify a valid music directory in preferences." msgstr " が見つかりませんでした。「設定」で正しい音楽ディレクトリを指定してください。" #: .././sonata/tagedit.py:103 msgid "No music files with editable tags found." msgstr "タグが編集可能な音楽ファイルが見つかりませんでした。" #: .././sonata/tagedit.py:150 msgid "Comment" msgstr "コメント" #. Only show save all button if more than one song being edited. #: .././sonata/tagedit.py:161 msgid "Save _All" msgstr "全て保存(_A)" #: .././sonata/tagedit.py:207 msgid "Increment each selected music file, starting at track 1 for this file." msgstr "このファイルを 1 として、順番にトラック番号を振りなおします" #: .././sonata/tagedit.py:209 msgid "Apply to all selected music files." msgstr "選択した全ての音楽ファイルに適用します" # Edit tags - n *of* m #: .././sonata/tagedit.py:260 msgid "of" msgstr "of" #. FIXME: was (save_success and self.conn and self.status): #: .././sonata/tagedit.py:299 msgid "Unable to save tag to music file." msgstr "音楽ファイルにタグを保存できません。" #: .././sonata/tagedit.py:366 msgid "Hide file path" msgstr "ファイルパスを表示しない" #: .././sonata/tagedit.py:369 msgid "Show file path" msgstr "ファイルパスを表示する" #~ msgid "Enable Crossfade" #~ msgstr "クロスフェードを有効にする" #~ msgid "Enable album art" #~ msgstr "アルバムアートを有効にする" #~ msgid "file_path" #~ msgstr "ファイルのパス" #~ msgid "Enable lyrics" #~ msgstr "歌詞を表示する" #~ msgid "Enable system tray icon" #~ msgstr "システムトレイアイコンを表示する" #~ msgid "_Display" #~ msgstr "表示(_D)" #~ msgid "_Extras" #~ msgstr "拡張(_E)" #~ msgid "_Plugins" #~ msgstr "プラグイン(_P)" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/po/ko.po�������������������������������������������������������������������������������0000664�0000000�0000000�00000113146�13771420143�0014403�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Korean translation for Sonata package. # Copyright (C) 2009 Sonata's COPYRIGHT HOLDER # This file is distributed under the same license as the Sonata package. # BANG, Jaesung <jaesung@liberotown.com>, 2009. # msgid "" msgstr "" "Project-Id-Version: Sonata 1.6.2\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-04-11 13:21-0600\n" "PO-Revision-Date: 2009-10-13 16:27+0900\n" "Last-Translator: Jaesung <jaesung@liberotown.com>\n" "Language-Team: Ubuntu Korea <admin@ubuntu.or.kr>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. define the shortcuts and their descriptions #. these are all gettextable #: .././sonata/about.py:54 msgid "About Sonata" msgstr "소나타 정보" #: .././sonata/about.py:55 #: .././sonata/preferences.py:96 msgid "Preferences" msgstr "기본 설정" #: .././sonata/about.py:56 msgid "Fullscreen Artwork Mode" msgstr "전체 화면 모드" #: .././sonata/about.py:57 msgid "Switch to [1st-5th] tab" msgstr "1-5 탭 이동" #: .././sonata/about.py:58 msgid "Connect to MPD" msgstr "MPD에 연결" #: .././sonata/about.py:59 msgid "Disconnect from MPD" msgstr "MPD와 연결 끊기" #: .././sonata/about.py:60 msgid "Randomize current playlist" msgstr "현재 재생 목록 순서 섞기" #: .././sonata/about.py:61 msgid "Expand player" msgstr "재생기 확장하기" #: .././sonata/about.py:62 msgid "Switch to previous tab" msgstr "이전 탭으로 이동" #: .././sonata/about.py:63 msgid "Switch to next tab" msgstr "다음 탭으로 이동" #: .././sonata/about.py:64 msgid "Collapse player" msgstr "재생기 접기" #: .././sonata/about.py:65 #: .././sonata/library.py:79 msgid "Search library" msgstr "보관함 검색" #: .././sonata/about.py:66 msgid "Quit" msgstr "끝내기" #: .././sonata/about.py:67 msgid "Update entire library" msgstr "보관함 전체 업데이트" #: .././sonata/about.py:68 msgid "Display popup menu" msgstr "팝업 메뉴 표시" #: .././sonata/about.py:69 msgid "Minimize to system tray (if enabled)" msgstr "가능하다면 시스템 트레이로 최소화" #: .././sonata/about.py:71 msgid "Previous track" msgstr "이전 트랙" #: .././sonata/about.py:72 msgid "Next track" msgstr "다음 트랙" #: .././sonata/about.py:73 msgid "Play/Pause" msgstr "재생/일시 정지" #: .././sonata/about.py:74 msgid "Stop" msgstr "멈춤" #: .././sonata/about.py:75 msgid "Lower the volume" msgstr "음량 낮게" #: .././sonata/about.py:76 msgid "Raise the volume" msgstr "음량 높게" #: .././sonata/about.py:78 msgid "Play selected song" msgstr "선택한 노래 재생" #: .././sonata/about.py:79 msgid "Remove selected song(s)" msgstr "선택한 노래 삭제" #: .././sonata/about.py:80 msgid "Center currently playing song" msgstr "현재 재생 중인 노래를 가운데로" #: .././sonata/about.py:81 #: .././sonata/about.py:90 msgid "Edit selected song's tags" msgstr "선택한 노래의 태그 편집" #: .././sonata/about.py:82 msgid "Save to new playlist" msgstr "새로운 재생 목록으로 저장" #: .././sonata/about.py:83 msgid "Clear list" msgstr "목록 비우기" #: .././sonata/about.py:84 msgid "Randomize list" msgstr "목록 순서 섞기" #: .././sonata/about.py:86 msgid "Add selected song(s) or enter directory" msgstr "선택한 노래를 추가하거나 디렉터리로 이동" #: .././sonata/about.py:87 msgid "Go to parent directory" msgstr "부모 디렉터리로 이동" #: .././sonata/about.py:88 msgid "Add selected item(s)" msgstr "선택한 항목 추가" #: .././sonata/about.py:89 msgid "Replace with selected item(s)" msgstr "선택한 항목으로 대체" #: .././sonata/about.py:91 msgid "Add selected item(s) and play" msgstr "선택한 항목을 추가하고 재생" #: .././sonata/about.py:92 msgid "Replace with selected item(s) and play" msgstr "선택한 항목으로 대체하고 재생" #: .././sonata/about.py:93 msgid "Update selected item(s)/path(s)" msgstr "선택한 항목/경로 업데이트" #: .././sonata/about.py:95 #: .././sonata/about.py:97 msgid "Add selected playlist(s)" msgstr "선택한 재생 목록 추가" #: .././sonata/about.py:96 msgid "Remove selected playlist(s)" msgstr "선택한 재생 목록 삭제" #: .././sonata/about.py:98 msgid "Replace with selected playlist(s)" msgstr "선택한 재생 목록으로 대체" #: .././sonata/about.py:99 msgid "Add selected playlist(s) and play" msgstr "선택한 재생 목록을 추가하고 재생" #: .././sonata/about.py:100 msgid "Replace with selected playlist(s) and play" msgstr "선택한 재생 목록으로 대체하고 재생" #: .././sonata/about.py:102 #: .././sonata/about.py:104 msgid "Add selected stream(s)" msgstr "선택한 스트림 추가" #: .././sonata/about.py:103 msgid "Remove selected stream(s)" msgstr "선택한 스트림 삭제" #: .././sonata/about.py:105 msgid "Replace with selected stream(s)" msgstr "선택한 스트림으로 대체" #: .././sonata/about.py:106 msgid "Add selected stream(s) and play" msgstr "선택한 스트림을 추가하고 재생" #: .././sonata/about.py:107 msgid "Replace with selected stream(s) and play" msgstr "선택한 스트림으로 대체하고 재생" #: .././sonata/about.py:109 msgid "Edit playing song's tags" msgstr "재생 중인 노래의 태그 편집" #. define the main array- this adds headings to each section of #. shortcuts that will be displayed #: .././sonata/about.py:112 msgid "Main Shortcuts" msgstr "주 단축키" #: .././sonata/about.py:113 msgid "Playback Shortcuts" msgstr "재생 관련 단축키" #: .././sonata/about.py:114 msgid "Current Shortcuts" msgstr "현재 목록 단축키" #: .././sonata/about.py:115 msgid "Library Shortcuts" msgstr "보관함 단축키" #: .././sonata/about.py:116 msgid "Playlist Shortcuts" msgstr "재생 목록 단축키" #: .././sonata/about.py:117 msgid "Stream Shortcuts" msgstr "스트림 단축키" #: .././sonata/about.py:118 msgid "Info Shortcuts" msgstr "정보 단축키" #: .././sonata/about.py:119 msgid "Shortcuts" msgstr "단축키" #. XXX translate expressions, not words #. Show text: #: .././sonata/about.py:147 #: .././sonata/library.py:862 #: .././sonata/main.py:1756 msgid "song" msgid_plural "songs" msgstr[0] "곡" msgstr[1] "곡" #: .././sonata/about.py:148 msgid "album" msgid_plural "albums" msgstr[0] "앨범" msgstr[1] "앨범" #: .././sonata/about.py:149 msgid "artist" msgid_plural "artists" msgstr[0] "음악가" msgstr[1] "음악가" #: .././sonata/about.py:156 msgid "day of bliss" msgid_plural "days of bliss" msgstr[0] "일의 행복" msgstr[1] "일의 행복" #: .././sonata/about.py:158 msgid "hour of bliss" msgid_plural "hours of bliss" msgstr[0] "시간의 행복" msgstr[1] "시간의 행복" #: .././sonata/about.py:172 msgid "An elegant music client for MPD." msgstr "고품격 MPD 음악 클라이언트." #. Add button to show keybindings: #: .././sonata/about.py:185 msgid "_Shortcuts" msgstr "단축키(_S)" #: .././sonata/about.py:196 #: .././sonata/main.py:3103 #: .././sonata/preferences.py:880 msgid "Unable to launch a suitable browser." msgstr "해당 브라우저를 실행할 수 없음." #: .././sonata/about.py:196 #: .././sonata/main.py:3103 #: .././sonata/preferences.py:880 msgid "Launch Browser" msgstr "브라우저 실행" #: .././sonata/cli.py:81 msgid "The toggle and popup arguments require D-Bus. Aborting." msgstr "--toggle과 --popup 옵션은 D-Bus가 필요합니다. 중단합니다." #: .././sonata/cli.py:97 msgid "Version" msgstr "버전" #: .././sonata/cli.py:98 msgid "Website" msgstr "웹사이트" #: .././sonata/cli.py:103 msgid "Usage: sonata [OPTION]... [COMMAND]..." msgstr "사용 방법: sonata [옵션]... [명령어]..." #: .././sonata/cli.py:105 msgid "Options" msgstr "옵션" #: .././sonata/cli.py:106 msgid "Show this help and exit" msgstr "이 도움말을 표시하고 나가기" #: .././sonata/cli.py:107 msgid "Popup song notification (requires D-Bus)" msgstr "노래 알림 팝업(D-Bus 필요)" #: .././sonata/cli.py:108 msgid "Toggles whether the app is minimized" msgstr "응용 프로그램을 시스템 트레이로 최소화" #: .././sonata/cli.py:109 msgid "to tray or visible (requires D-Bus)" msgstr "화면에 표시 여부(D-Bus 필요)" #: .././sonata/cli.py:110 msgid "Don't start app if D-Bus commands fail" msgstr "D-Bus 명령에 실패하면 응용 프로그램을 실행하지 않음" #: .././sonata/cli.py:111 msgid "Show version information and exit" msgstr "버전 정보를 표시하고 나가기" #: .././sonata/cli.py:112 msgid "Start app hidden (requires systray)" msgstr "응용 프로그램을 숨김 상태로 실행(시스템 트레이 필요)" #: .././sonata/cli.py:113 msgid "Start app visible (requires systray)" msgstr "응용 프로그램을 보이는 상태로 실행(시스템 트레이 필요)" #: .././sonata/cli.py:114 msgid "Start with profile [NUM]" msgstr "프로파일 [NUM](으)로 실행" #: .././sonata/cli.py:116 msgid "Commands" msgstr "명령어" #: .././sonata/cli.py:117 msgid "Play song in playlist" msgstr "재생 목록에 있는 노래 재생" #: .././sonata/cli.py:118 msgid "Pause currently playing song" msgstr "현재 재생 중인 노래 일시 정지" #: .././sonata/cli.py:119 msgid "Stop currently playing song" msgstr "현재 재생 중인 노래 멈춤" #: .././sonata/cli.py:120 msgid "Play next song in playlist" msgstr "재생 목록에 있는 다음 노래 재생" #: .././sonata/cli.py:121 msgid "Play previous song in playlist" msgstr "재생 목록에 있는 이전 노래 재생" #: .././sonata/cli.py:122 msgid "Toggle play/pause; plays if stopped" msgstr "재생/일시 정지 전환" #: .././sonata/cli.py:123 msgid "Toggle repeat mode" msgstr "반복 재생 모드 전환" #: .././sonata/cli.py:124 msgid "Toggle random mode" msgstr "임의 재생 모드 전환" #: .././sonata/cli.py:125 msgid "Display current song info" msgstr "현재 노래 정보 표시" #: .././sonata/cli.py:126 msgid "Display MPD status" msgstr "MPD 상태 표시" #: .././sonata/cli.py:134 #, python-format msgid "Starting Sonata with profile %s..." msgstr "%s 프로파일로 소나타 시작..." #: .././sonata/cli.py:136 #, python-format msgid "%d is not an available profile number." msgstr "%d는 유효한 프로파일 번호가 아닙니다." #: .././sonata/cli.py:137 #: .././sonata/cli.py:141 #, python-format msgid "Profile numbers must be between 1 and %d." msgstr "프로파일 번호는 1과 %d 사이의 숫자이어야 합니다." #: .././sonata/cli.py:140 #, python-format msgid "Python is unable to interpret %s as a number." msgstr "파이썬은 %s(을)를 숫자로 인식할 수 없습니다." #: .././sonata/cli.py:154 #: .././sonata/main.py:178 msgid "Default Profile" msgstr "기본 프로파일" #: .././sonata/cli.py:154 #: .././sonata/main.py:178 msgid "by" msgstr "음악가:" #: .././sonata/cli.py:154 #: .././sonata/main.py:178 msgid "from" msgstr "앨범:" #: .././sonata/cli.py:176 msgid "" "Unable to connect to MPD.\n" "Please check your Sonata preferences or MPD_HOST/MPD_PORT environment variables." msgstr "" "MPD에 연결할 수 없습니다.\n" "소나타 기본 설정이나 환경 변수 MPD_HOST/MPD_PORT를 확인하십시오." #: .././sonata/cli.py:208 #: .././sonata/info.py:90 #: .././sonata/library.py:45 #: .././sonata/tagedit.py:125 msgid "Title" msgstr "제목" #: .././sonata/cli.py:209 #: .././sonata/info.py:91 #: .././sonata/library.py:45 #: .././sonata/main.py:1180 #: .././sonata/tagedit.py:126 msgid "Artist" msgstr "음악가" #: .././sonata/cli.py:210 #: .././sonata/info.py:93 #: .././sonata/library.py:45 #: .././sonata/main.py:1181 #: .././sonata/main.py:2432 #: .././sonata/tagedit.py:127 msgid "Album" msgstr "앨범" #: .././sonata/cli.py:211 #: .././sonata/info.py:95 msgid "Date" msgstr "연도" #: .././sonata/cli.py:212 #: .././sonata/info.py:96 #: .././sonata/main.py:1182 #: .././sonata/tagedit.py:130 msgid "Track" msgstr "제목" #: .././sonata/cli.py:213 #: .././sonata/info.py:97 #: .././sonata/library.py:45 #: .././sonata/main.py:1185 #: .././sonata/preferences.py:557 #: .././sonata/tagedit.py:139 msgid "Genre" msgstr "장르" #: .././sonata/cli.py:214 #: .././sonata/info.py:98 #: .././sonata/main.py:1187 msgid "File" msgstr "파일" #: .././sonata/cli.py:219 #: .././sonata/cli.py:221 msgid "Time" msgstr "시간" #: .././sonata/cli.py:222 #: .././sonata/info.py:99 msgid "Bitrate" msgstr "비트율" #: .././sonata/cli.py:224 msgid "MPD stopped" msgstr "MPD 멈춤" #: .././sonata/cli.py:228 #: .././sonata/cli.py:230 #: .././sonata/cli.py:232 msgid "State" msgstr "상태" #: .././sonata/cli.py:228 msgid "Playing" msgstr "재생 중" #: .././sonata/cli.py:230 msgid "Paused" msgstr "일시 정지" #: .././sonata/cli.py:232 #: .././sonata/main.py:562 #: .././sonata/main.py:567 #: .././sonata/main.py:1829 #: .././sonata/main.py:1840 msgid "Stopped" msgstr "멈춤" #: .././sonata/cli.py:234 #: .././sonata/cli.py:236 msgid "Repeat" msgstr "반복 재생" #: .././sonata/cli.py:234 #: .././sonata/cli.py:238 msgid "Off" msgstr "꺼짐" #: .././sonata/cli.py:236 #: .././sonata/cli.py:240 msgid "On" msgstr "켜짐" #: .././sonata/cli.py:238 #: .././sonata/cli.py:240 msgid "Random" msgstr "임의 재생" #: .././sonata/cli.py:241 msgid "Volume" msgstr "음량" #: .././sonata/cli.py:242 msgid "Crossfade" msgstr "크로스페이드" #: .././sonata/cli.py:242 #: .././sonata/preferences.py:277 msgid "second" msgid_plural "seconds" msgstr[0] "초" msgstr[1] "초" #: .././sonata/current.py:64 msgid "Filter" msgstr "필터" #: .././sonata/dbus_plugin.py:83 msgid "Sonata failed to connect to the D-BUS session bus: Unable to determine the address of the message bus (try 'man dbus-launch' and 'man dbus-daemon' for help)" msgstr "소나타 D-BUS 세션 연결에 실패: 메시지 버스 주소 확인 불가('man dbus-launch'나 'man dbus-daemon'로 확인)." #: .././sonata/dbus_plugin.py:96 msgid "Failed to execute remote commands." msgstr "원격 명령을 실행하지 못했습니다." #: .././sonata/dbus_plugin.py:98 msgid "Starting Sonata instead..." msgstr "다음 프로그램 대신 소나타를 실행:" #: .././sonata/dbus_plugin.py:100 msgid "Maybe Sonata is not running?" msgstr "혹시 소나타가 실행되지 않고 있습니까?" #: .././sonata/dbus_plugin.py:114 msgid "An instance of Sonata is already running. Showing it..." msgstr "소나타 인스턴스가 이미 실행 중입니다. 실행 중인 소나타 인스턴스를 표시하고 있습니다..." #: .././sonata/dbus_plugin.py:120 msgid "Failed to execute remote command." msgstr "원격 명령을 실행하지 못했습니다." #. Song info #: .././sonata/info.py:78 msgid "Song Info" msgstr "노래 정보" #: .././sonata/info.py:92 msgid "Launch artist in Wikipedia" msgstr "위키백과에서 음악가 확인" #: .././sonata/info.py:94 msgid "Launch album in Wikipedia" msgstr "위키백과에서 앨범 확인" #: .././sonata/info.py:128 msgid "Toggle extra tags" msgstr "기타 태그 보기 전환" #: .././sonata/info.py:131 msgid "Edit song tags" msgstr "노래 태그 편집" #. Lyrics #: .././sonata/info.py:141 msgid "Lyrics" msgstr "가사" #: .././sonata/info.py:153 msgid "Search Lyricwiki.org for lyrics" msgstr "Lyricwiki.org에서 가사 검색" #: .././sonata/info.py:154 msgid "Edit lyrics at Lyricwiki.org" msgstr "Lyricwiki.org에서 가사 편집" #. Album info #: .././sonata/info.py:162 msgid "Album Info" msgstr "앨범 정보" #: .././sonata/info.py:214 #: .././sonata/info.py:219 msgid "more" msgstr "더 보기" #: .././sonata/info.py:216 msgid "hide" msgstr "감추기" #: .././sonata/info.py:282 msgid "edit tags" msgstr "태그 편집" #: .././sonata/info.py:309 msgid "Album info not found." msgstr "앨범 정보를 찾을 수 없음." #: .././sonata/info.py:312 msgid "Album name not set." msgstr "앨범 제목이 설정되지 않음." #: .././sonata/info.py:326 msgid "ZSI not found, fetching lyrics support disabled." msgstr "ZSI를 찾을 수 없으므로 가사 검색 기능을 사용할 수 없음." #: .././sonata/info.py:331 msgid "Artist or song title not set." msgstr "음악가나 노래 제목이 설정되지 않음." #: .././sonata/info.py:373 msgid "search" msgstr "검색" #: .././sonata/info.py:374 msgid "edit" msgstr "편집" #: .././sonata/info.py:383 #: .././sonata/info.py:438 msgid "Lyrics not found" msgstr "가사를 찾을 수 없음" #. Fetch lyrics from lyricwiki.org #: .././sonata/info.py:403 msgid "Fetching lyrics..." msgstr "가사 검색 중 ..." #: .././sonata/info.py:413 msgid "Couldn't connect to LyricWiki" msgstr "LyricWiki에 연결할 수 없음" #: .././sonata/info.py:441 msgid "Fetching lyrics failed" msgstr "가사 검색 실패" #: .././sonata/library.py:43 msgid "Untagged" msgstr "태그 없음" #: .././sonata/library.py:44 msgid "Various Artists" msgstr "여러 음악가" #: .././sonata/library.py:45 msgid "Filename" msgstr "파일 이름" #: .././sonata/library.py:45 msgid "Everything" msgstr "모두" #: .././sonata/library.py:77 msgid "Search terms" msgstr "검색어" #: .././sonata/library.py:83 msgid "End Search" msgstr "검색 끝내기" #: .././sonata/library.py:85 msgid "Library browsing view" msgstr "보관함 표시" #: .././sonata/library.py:89 msgid "Search" msgstr "검색" #: .././sonata/library.py:112 msgid "Filesystem" msgstr "파일 시스템" #: .././sonata/library.py:114 msgid "Albums" msgstr "앨범" #: .././sonata/library.py:116 msgid "Artists" msgstr "음악가" #: .././sonata/library.py:118 msgid "Genres" msgstr "장르" #. add the views button first #: .././sonata/library.py:378 msgid " v " msgstr " v " #: .././sonata/library.py:862 #: .././sonata/main.py:1750 msgid "minute" msgid_plural "minutes" msgstr[0] "분" msgstr[1] "분" #: .././sonata/library.py:950 msgid "Song" msgstr "노래" #: .././sonata/library.py:950 #: .././sonata/main.py:1186 msgid "Path" msgstr "경로" #. Constants #: .././sonata/main.py:102 msgid "Current" msgstr "현재 목록" #: .././sonata/main.py:103 msgid "Library" msgstr "보관함" #: .././sonata/main.py:104 msgid "Playlists" msgstr "재생 목록" #: .././sonata/main.py:105 msgid "Streams" msgstr "스트림" #: .././sonata/main.py:106 msgid "Info" msgstr "정보" #: .././sonata/main.py:137 #: .././sonata/preferences.py:278 #: .././sonata/preferences.py:279 msgid "Entire song" msgstr "노래 전체" #: .././sonata/main.py:236 msgid "_Sort List" msgstr "목록 정렬(_S)" #: .././sonata/main.py:237 msgid "Sa_ve List to" msgstr "목록 저장(_V)" #: .././sonata/main.py:238 msgid "_Connection" msgstr "연결(_C)" #: .././sonata/main.py:239 msgid "P_lay after" msgstr "바로 재생(_L)" #: .././sonata/main.py:240 #: .././sonata/main.py:2446 msgid "_Update" msgstr "업데이트(_U)" #: .././sonata/main.py:241 msgid "Use _Remote Image..." msgstr "원격 이미지 사용(_R)..." #: .././sonata/main.py:242 msgid "Use _Local Image..." msgstr "로컬 이미지 사용(_L)..." #: .././sonata/main.py:243 msgid "_Fullscreen Mode" msgstr "전체 화면 모드(_F)" #: .././sonata/main.py:244 msgid "Reset Image" msgstr "이미지 초기화" #: .././sonata/main.py:245 msgid "_Play" msgstr "재생(_P)" #: .././sonata/main.py:246 msgid "Pa_use" msgstr "일시 정지(_U)" #: .././sonata/main.py:247 msgid "_Stop" msgstr "멈춤(_S)" #: .././sonata/main.py:248 msgid "Pre_vious" msgstr "이전(_V)" #: .././sonata/main.py:249 msgid "_Next" msgstr "다음(_N)" #: .././sonata/main.py:250 msgid "_Quit" msgstr "끝내기(_Q)" #: .././sonata/main.py:251 msgid "_Remove" msgstr "삭제(_R)" #: .././sonata/main.py:252 msgid "_Clear" msgstr "비우기(_C)" #: .././sonata/main.py:253 msgid "_Entire Library" msgstr "보관함 전체(_E)" #: .././sonata/main.py:254 msgid "_Selected Items" msgstr "선택한 항목(_S)" #: .././sonata/main.py:255 msgid "_Preferences..." msgstr "기본 설정(_P)..." #: .././sonata/main.py:256 msgid "_About..." msgstr "정보(_A)..." #: .././sonata/main.py:257 msgid "_Edit Tags..." msgstr "태그 편집(_E)..." #: .././sonata/main.py:258 msgid "_Add" msgstr "추가(_A)" #: .././sonata/main.py:259 msgid "_Replace" msgstr "대체(_R)" #: .././sonata/main.py:260 msgid "Add" msgstr "추가" #: .././sonata/main.py:261 msgid "Replace" msgstr "대체" #: .././sonata/main.py:262 msgid "_Delete..." msgstr "삭제(_D)..." #: .././sonata/main.py:263 msgid "Shuffle" msgstr "순서 섞기" #: .././sonata/main.py:288 msgid "S_how Sonata" msgstr "소나타 보이기(_H)" #: .././sonata/main.py:289 msgid "_Repeat" msgstr "반복 재생(_R)" #: .././sonata/main.py:290 msgid "Rando_m" msgstr "임의 재생(_M)" #: .././sonata/main.py:431 msgid "By Artist" msgstr "음악가" #: .././sonata/main.py:432 msgid "By Album" msgstr "앨범" #: .././sonata/main.py:433 msgid "By Song Title" msgstr "노래 제목" #: .././sonata/main.py:434 msgid "By File Name" msgstr "파일 이름" #: .././sonata/main.py:435 msgid "By Dir & File Name" msgstr "디렉터리와 파일 이름" #: .././sonata/main.py:436 msgid "Reverse List" msgstr "목록 뒤집기" #: .././sonata/main.py:459 #: .././sonata/main.py:470 msgid "_New..." msgstr "새로운 파일(_N)..." #: .././sonata/main.py:460 msgid "_Edit..." msgstr "편집(_E)..." #: .././sonata/main.py:471 msgid "_Rename..." msgstr "이름 바꾸기(_R)..." #: .././sonata/main.py:533 #: .././sonata/main.py:600 #: .././sonata/main.py:601 msgid "Playlist" msgstr "재생 목록" #: .././sonata/main.py:563 #: .././sonata/main.py:1833 #: .././sonata/main.py:2042 msgid "Click to expand" msgstr "재생기 확장하기" #: .././sonata/main.py:568 #: .././sonata/main.py:1831 #: .././sonata/main.py:2040 msgid "Click to collapse" msgstr "재생기 접기" #: .././sonata/main.py:573 #: .././sonata/main.py:1725 #: .././sonata/main.py:1836 msgid "Not Connected" msgstr "연결되지 않음" #: .././sonata/main.py:575 #: .././sonata/main.py:1723 #: .././sonata/main.py:1838 msgid "No Read Permission" msgstr "읽기 권한 없음" #: .././sonata/main.py:648 msgid "Cover Art" msgstr "앨범 아트" #: .././sonata/main.py:872 msgid "MPD_HOST/PORT" msgstr "MPD_HOST/PORT" #: .././sonata/main.py:877 msgid "Disconnect" msgstr "연결 끊기" #: .././sonata/main.py:1183 #: .././sonata/main.py:1190 msgid "#" msgstr "#" #: .././sonata/main.py:1184 #: .././sonata/preferences.py:556 #: .././sonata/tagedit.py:128 msgid "Year" msgstr "연도" #: .././sonata/main.py:1188 msgid "Stream" msgstr "스트림" #: .././sonata/main.py:1189 msgid "Len" msgstr "시간" #: .././sonata/main.py:1210 #: .././sonata/main.py:1217 #: .././sonata/main.py:1258 #: .././sonata/main.py:1265 msgid "Unknown" msgstr "알 수 없음" #: .././sonata/main.py:1746 msgid "day" msgid_plural "days" msgstr[0] "일" msgstr[1] "일" #: .././sonata/main.py:1754 msgid "hour" msgid_plural "hours" msgstr[0] "시간" msgstr[1] "시간" #: .././sonata/main.py:1759 #: .././sonata/main.py:1761 msgid "and" msgstr " " #: .././sonata/main.py:1769 msgid "(updating mpd)" msgstr "(MPD 업데이트 중)" #: .././sonata/main.py:2109 msgid "Lyrics Search" msgstr "가사 검색" #: .././sonata/main.py:2110 msgid "_Search" msgstr "검색(_S)" #: .././sonata/main.py:2113 msgid "Artist Name" msgstr "음악가 이름" #: .././sonata/main.py:2118 msgid "Song Title" msgstr "노래 제목" #: .././sonata/main.py:2370 msgid "Open Image" msgstr "이미지 열기" #: .././sonata/main.py:2372 msgid "Images" msgstr "이미지" #: .././sonata/main.py:2376 msgid "All files" msgstr "모든 파일" #: .././sonata/main.py:2418 msgid "Choose Cover Art" msgstr "앨범 아트 선택" #: .././sonata/main.py:2419 msgid "C_hoose" msgstr "선택(_H)" #: .././sonata/main.py:2451 msgid "Edit search terms" msgstr "검색어 편집" #: .././sonata/main.py:2508 msgid "No artist or album name found." msgstr "음악가 이름이나 앨범 제목을 찾을 수 없음." #: .././sonata/main.py:2511 msgid "No cover art found." msgstr "앨범 아트를 찾을 수 없음." #: .././sonata/main.py:2835 msgid "Delete the selected playlist?" msgid_plural "Delete the selected playlists?" msgstr[0] "선택한 재생 목록을 삭제할까요?" msgstr[1] "선택한 재생 목록을 삭제할까요?" #: .././sonata/main.py:2835 msgid "Delete Playlist" msgid_plural "Delete Playlists" msgstr[0] "재생 목록 삭제" msgstr[1] "재생 목록 삭제" #: .././sonata/main.py:2843 msgid "Delete the selected stream?" msgid_plural "Delete the selected streams?" msgstr[0] "선택한 스트림을 삭제할까요?" msgstr[1] "선택한 스트림을 삭제할까요?" #: .././sonata/main.py:2843 msgid "Delete Stream" msgid_plural "Delete Streams" msgstr[0] "스트림 삭제" msgstr[1] "스트림 삭제" #: .././sonata/playlists.py:103 #: .././sonata/playlists.py:105 msgid "Save Playlist" msgstr "재생 목록 저장" #: .././sonata/playlists.py:120 msgid "Would you like to replace the existing playlist or append these songs?" msgstr "이 노래로 기존 재생 목록을 대체할까요, 아니면 추가할까요?" #: .././sonata/playlists.py:120 msgid "Existing Playlist" msgstr "기존 재생 목록" #: .././sonata/playlists.py:120 msgid "Replace playlist" msgstr "재생 목록 대체" #: .././sonata/playlists.py:120 msgid "Append songs" msgstr "노래 추가" #: .././sonata/playlists.py:141 msgid "A playlist with this name already exists. Would you like to replace it?" msgstr "이미 같은 이름의 재생 목록이 있습니다. 바꾸시겠습니까?" #: .././sonata/playlists.py:153 msgid "Playlist name" msgstr "재생 목록 이름" #: .././sonata/playlists.py:182 #: .././sonata/playlists.py:186 msgid "Rename Playlist" msgstr "재생 목록 이름 바꾸기" #: .././sonata/preferences.py:27 msgid "System tray" msgstr "시스템 트레이" #: .././sonata/preferences.py:27 msgid "Top Left" msgstr "위-왼쪽" #: .././sonata/preferences.py:27 msgid "Top Right" msgstr "위-오른쪽" #: .././sonata/preferences.py:28 msgid "Bottom Left" msgstr "아래-왼쪽" #: .././sonata/preferences.py:28 msgid "Bottom Right" msgstr "아래-오른쪽" #: .././sonata/preferences.py:29 msgid "Screen Center" msgstr "스크린 가운데" #: .././sonata/preferences.py:99 msgid "MPD" msgstr "MPD" #: .././sonata/preferences.py:100 #: .././sonata/preferences.py:343 msgid "Display" msgstr "화면 표시" #: .././sonata/preferences.py:101 msgid "Behavior" msgstr "동작" #: .././sonata/preferences.py:102 msgid "Format" msgstr "표시 형식" #: .././sonata/preferences.py:103 #: .././sonata/preferences.py:245 msgid "Extras" msgstr "기타" #: .././sonata/preferences.py:104 msgid "Plugins" msgstr "플러그인" #: .././sonata/preferences.py:128 msgid "MPD Connection" msgstr "MPD 연결" #: .././sonata/preferences.py:141 msgid "_Name" msgstr "이름(_N)" #: .././sonata/preferences.py:144 msgid "_Host" msgstr "호스트(_H)" #: .././sonata/preferences.py:147 msgid "_Port" msgstr "포트(_P)" #: .././sonata/preferences.py:151 msgid "_Music dir" msgstr "음악 디렉터리(_M)" #: .././sonata/preferences.py:152 msgid "Select a Music Directory" msgstr "음악 디렉터리를 선택" #: .././sonata/preferences.py:158 msgid "Pa_ssword" msgstr "비밀번호(_S)" #: .././sonata/preferences.py:161 msgid "Leave blank if no password is required." msgstr "비밀번호가 필요없다면 공란으로 비워두십시오." #: .././sonata/preferences.py:162 msgid "_Autoconnect on start" msgstr "시작할 때 자동 연결(_A)" #: .././sonata/preferences.py:182 msgid "Using MPD_HOST/PORT" msgstr "MPD_HOST/PORT 사용" #: .././sonata/preferences.py:250 msgid "_Audioscrobbling (Last.fm)" msgstr "Audioscrobbling(Last.fm) 사용(_A)" #: .././sonata/preferences.py:252 msgid "_Username:" msgstr "사용자 이름(_U):" #: .././sonata/preferences.py:253 msgid "_Password:" msgstr "비밀번호(_P):" #: .././sonata/preferences.py:273 msgid "Popup _notification on song changes" msgstr "노래가 바뀔 때 팝업 알림(_N)" #: .././sonata/preferences.py:299 msgid "Fade length" msgstr "페이드 길이" #: .././sonata/preferences.py:300 msgid "_Fade length" msgstr "페이드 길이(_F)" #: .././sonata/preferences.py:302 msgid "sec" msgstr "초" #: .././sonata/preferences.py:307 msgid "C_rossfade" msgstr "크로스페이드(_R)" #: .././sonata/preferences.py:348 msgid "_Album art" msgstr "앨범 아트(_A)" #: .././sonata/preferences.py:350 msgid "Standard" msgstr "표준" #: .././sonata/preferences.py:351 msgid "Stylized" msgstr "꾸밈" #: .././sonata/preferences.py:356 msgid "Artwork style:" msgstr "앨범 아트 스타일:" #: .././sonata/preferences.py:358 msgid "Local only" msgstr "로컬 전용" #: .././sonata/preferences.py:359 msgid "Local and remote" msgstr "로컬 및 원격" #: .././sonata/preferences.py:362 msgid "Search locations:" msgstr "검색 위치:" #: .././sonata/preferences.py:369 #: .././sonata/preferences.py:396 msgid "SONG_DIR" msgstr "노래 디렉터리" #: .././sonata/preferences.py:371 msgid "custom" msgstr "사용자 지정" #: .././sonata/preferences.py:378 msgid "Save art to:" msgstr "앨범 아트 저장 위치:" #: .././sonata/preferences.py:383 msgid "_Playback/volume buttons" msgstr "재생 관련 버튼 및 음량 버튼(_P)" #: .././sonata/preferences.py:386 msgid "Pr_ogressbar" msgstr "진행 상태바(_O)" #: .././sonata/preferences.py:389 msgid "_Statusbar" msgstr "상태바(_S)" #: .././sonata/preferences.py:392 msgid "Song Ly_rics" msgstr "노래 가사" #: .././sonata/preferences.py:394 msgid "Save lyrics to:" msgstr "가사 저장 위치:" #: .././sonata/preferences.py:405 msgid "System _tray icon" msgstr "시스템 트레이 아이콘(_T)" #: .././sonata/preferences.py:429 msgid "Window Behavior" msgstr "창 동작" #: .././sonata/preferences.py:433 msgid "_Show window on all workspaces" msgstr "모든 작업 공간에 창 표시(_S)" #: .././sonata/preferences.py:436 msgid "_Keep window above other windows" msgstr "항상 다른 창 위에 표시(_K)" #: .././sonata/preferences.py:439 msgid "_Hide window titlebar" msgstr "창 타이틀바 숨기기(_H)" #: .././sonata/preferences.py:442 msgid "_Minimize to system tray on close/escape" msgstr "닫거나 ESC 키를 누르면 시스템 트레이로 최소화(_M)" #: .././sonata/preferences.py:444 msgid "If enabled, closing Sonata will minimize it to the system tray. Note that it's currently impossible to detect if there actually is a system tray, so only check this if you have one." msgstr "이 항목을 활성화하면, 소나타를 닫을 때 시스템 트레이로 최소화합니다. 하지만 현재 실제 시스템 트레이가 있는 지를 알아낼 수 없습니다. 따라서, 시스템 트레이가 있을 때만 선택하십시오." #: .././sonata/preferences.py:460 msgid "Miscellaneous" msgstr "기타" #: .././sonata/preferences.py:464 msgid "_Update MPD library on start" msgstr "실행할 때 MPD 보관함을 업데이트(_U)" #: .././sonata/preferences.py:466 msgid "If enabled, Sonata will automatically update your MPD library when it starts up." msgstr "이 항목을 활성화하면, 소나타를 실행할 때 MPD 보관함을 자동으로 업데이트합니다." #: .././sonata/preferences.py:469 msgid "S_top playback on exit" msgstr "끝낼 때 재생 멈춤(_T)" #: .././sonata/preferences.py:471 msgid "MPD allows playback even when the client is not open. If enabled, Sonata will behave like a more conventional music player and, instead, stop playback upon exit." msgstr "MPD는 클라이언트가 열려있지 않아도 재생을 허가합니다. 이 항목을 활성화하면, 소나타는 일반적인 음악 재생기와 같이 끝낼 때 재생을 멈춥니다." #: .././sonata/preferences.py:474 msgid "_Write status file:" msgstr "상태 파일 기록(_W):" #: .././sonata/preferences.py:476 #: .././sonata/preferences.py:478 msgid "If enabled, Sonata will create a xmms-infopipe like file containing information about the current song. Many applications support the xmms-info file (Instant Messengers, IRC Clients...)" msgstr "이 항목을 활성화하면, 현재 노래에 대한 정보를 담은 xmms-infopipe 파일을 생성합니다. 인스턴트 메신저나 IRC 클라이언트 등의 응용 프로그램은 xmms-info 파일을 지원합니다." #: .././sonata/preferences.py:512 msgid "Song Formatting" msgstr "노래 표시 형식" #: .././sonata/preferences.py:517 msgid "C_urrent playlist:" msgstr "현재 재생 목록(_U):" #: .././sonata/preferences.py:518 msgid "_Library:" msgstr "보관함(_L):" #: .././sonata/preferences.py:519 msgid "_Window title:" msgstr "창 타이틀(_W):" #: .././sonata/preferences.py:520 msgid "Current _song line 1:" msgstr "현재 노래의 1행(_S):" #: .././sonata/preferences.py:522 msgid "Current s_ong line 2:" msgstr "현재 노래의 2행(_O):" #: .././sonata/preferences.py:547 msgid "Available options" msgstr "사용가능한 옵션" #. XXX get these directly from the formatting function: #: .././sonata/preferences.py:551 msgid "Artist name" msgstr "음악가 이름" #: .././sonata/preferences.py:552 msgid "Album name" msgstr "앨범 제목" #: .././sonata/preferences.py:553 msgid "Track name" msgstr "트랙 제목" #: .././sonata/preferences.py:554 msgid "Track number" msgstr "트랙 번호" #: .././sonata/preferences.py:555 msgid "Disc number" msgstr "디스크 번호" #: .././sonata/preferences.py:558 msgid "File path" msgstr "파일 경로" #: .././sonata/preferences.py:559 msgid "File name" msgstr "파일 이름" #: .././sonata/preferences.py:560 #: .././sonata/streams.py:107 msgid "Stream name" msgstr "스트림 제목" #: .././sonata/preferences.py:561 msgid "Song length" msgstr "노래 길이" #: .././sonata/preferences.py:562 msgid "Elapsed time (title only)" msgstr "경과 시간(타이틀에만)" #: .././sonata/preferences.py:572 msgid "Info displayed only if all enclosed tags are defined" msgstr "사용되는 모든 태그가 정의되었을 때 정보 표시" #: .././sonata/preferences.py:572 msgid "Creates columns in the current playlist" msgstr "현재 재생 목록에 열 생성" #: .././sonata/preferences.py:598 msgid "_About" msgstr "정보(_A)" #: .././sonata/preferences.py:601 msgid "_Configure..." msgstr "설정(_C)..." #: .././sonata/preferences.py:641 msgid "Enabled" msgstr "활성화" #: .././sonata/preferences.py:649 msgid "Description" msgstr "설명" #: .././sonata/preferences.py:666 msgid "To save lyrics to the music file's directory, you must specify a valid music directory." msgstr "음악 파일 디렉터리에 가사를 저장하려면 올바른 음악 디렉터리를 지정하십시오." #: .././sonata/preferences.py:666 #: .././sonata/preferences.py:673 msgid "Music Dir Verification" msgstr "음악 디렉터리 확인" #: .././sonata/preferences.py:673 msgid "To save artwork to the music file's directory, you must specify a valid music directory." msgstr "음악 파일 디렉터리에 앨범 아트를 저장하려면 올바른 음악 디렉터리를 지정하십시오." #: .././sonata/preferences.py:738 msgid "New Profile" msgstr "새로운 프로파일" #. Prompt user for playlist name: #: .././sonata/preferences.py:792 msgid "Custom Artwork" msgstr "사용자 지정 앨범 아트" #: .././sonata/preferences.py:794 msgid "Artwork filename" msgstr "앨범 아트 파일 이름" #: .././sonata/streams.py:103 msgid "Edit Stream" msgstr "스트림 편집" #: .././sonata/streams.py:105 #: .././sonata/streams.py:136 msgid "New Stream" msgstr "새로운 스트림" #: .././sonata/streams.py:114 msgid "Stream URL" msgstr "스트림 URL" #: .././sonata/streams.py:136 msgid "A stream with this name already exists. Would you like to replace it?" msgstr "이미 같은 이름의 스트림이 있습니다. 바꾸시겠습니까?" #: .././sonata/tagedit.py:61 msgid "Taglib and/or tagpy not found, tag editing support disabled." msgstr "taglib 또는 tagpy를 찾을 수 없으므로 태그 편집 기능을 사용할 수 없음." #: .././sonata/tagedit.py:61 #: .././sonata/tagedit.py:70 #: .././sonata/tagedit.py:75 #: .././sonata/tagedit.py:99 #: .././sonata/tagedit.py:103 #: .././sonata/tagedit.py:260 #: .././sonata/tagedit.py:299 msgid "Edit Tags" msgstr "태그 편집" #: .././sonata/tagedit.py:70 msgid "Tagpy version < 0.91. Please upgrade to a newer version, tag editing support disabled." msgstr "tagpy가 0.91 이전 버전이므로 태그 편집 기능은 사용할 수 없음. 새로운 버전으로 업그레이드하십시오." #: .././sonata/tagedit.py:75 msgid "The path" msgstr "경로" #: .././sonata/tagedit.py:75 msgid "does not exist. Please specify a valid music directory in preferences." msgstr "이(가) 없습니다. 기본 설정에서 올바른 음악 디렉터리를 지정하십시오." #: .././sonata/tagedit.py:99 msgid "File " msgstr "파일 " #: .././sonata/tagedit.py:99 msgid " not found. Please specify a valid music directory in preferences." msgstr "을(를) 찾을 수 없습니다. 기본 설정에서 올바른 음악 디렉터리를 지정하십시오." #: .././sonata/tagedit.py:103 msgid "No music files with editable tags found." msgstr "태그를 편집할 수 있는 음악 파일을 찾을 수 없습니다." #: .././sonata/tagedit.py:150 msgid "Comment" msgstr "메모" #. Only show save all button if more than one song being edited. #: .././sonata/tagedit.py:161 msgid "Save _All" msgstr "모두 저장(_A)" #: .././sonata/tagedit.py:207 msgid "Increment each selected music file, starting at track 1 for this file." msgstr "이 파일을 트랙 1번으로 하여 선택한 각 음악 파일의 트랙 번호를 순서대로 지정." #: .././sonata/tagedit.py:209 msgid "Apply to all selected music files." msgstr "선택한 모든 음악 파일에 적용." #: .././sonata/tagedit.py:260 msgid "of" msgstr "/" #. FIXME: was (save_success and self.conn and self.status): #: .././sonata/tagedit.py:299 msgid "Unable to save tag to music file." msgstr "음악 파일에 태그를 저장할 수 없음." #: .././sonata/tagedit.py:366 msgid "Hide file path" msgstr "파일 경로 숨김" #: .././sonata/tagedit.py:369 msgid "Show file path" msgstr "파일 경로 표시" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/po/nl.po�������������������������������������������������������������������������������0000664�0000000�0000000�00000120014�13771420143�0014373�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # msgid "" msgstr "" "Project-Id-Version: Sonata 1.4.1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-03-22 22:01-0600\n" "PO-Revision-Date: 2008-05-22 19:11+0100\n" "Last-Translator: Olivier Keun <litemotiv@gmail.com>\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #. define the shortcuts and their descriptions #. these are all gettextable #: .././sonata/about.py:52 msgid "About Sonata" msgstr "Over Sonata" #: .././sonata/about.py:53 .././sonata/preferences.py:60 msgid "Preferences" msgstr "Voorkeuren" #: .././sonata/about.py:54 msgid "Fullscreen Artwork Mode" msgstr "" #: .././sonata/about.py:55 msgid "Switch to [1st-5th] tab" msgstr "Spring naar [1ste-5e] tab" #: .././sonata/about.py:56 msgid "Connect to MPD" msgstr "Verbinden met MPD" #: .././sonata/about.py:57 msgid "Disconnect from MPD" msgstr "Losmaken van MPD" #: .././sonata/about.py:58 msgid "Randomize current playlist" msgstr "Huidige afspeellijst shuffelen:" #: .././sonata/about.py:59 msgid "Expand player" msgstr "Speler vergroten" #: .././sonata/about.py:60 msgid "Switch to previous tab" msgstr "Spring naar de vorige tab" #: .././sonata/about.py:61 msgid "Switch to next tab" msgstr "Spring naar de volgende tab" #: .././sonata/about.py:62 msgid "Collapse player" msgstr "Speler verkleinen" #: .././sonata/about.py:63 .././sonata/library.py:86 msgid "Search library" msgstr "Collectie doorzoeken" #: .././sonata/about.py:64 msgid "Quit" msgstr "Beëindigen" #: .././sonata/about.py:65 msgid "Update entire library" msgstr "Hele collectie bijwerken" #: .././sonata/about.py:66 msgid "Display popup menu" msgstr "Popup menu weergeven" #: .././sonata/about.py:67 msgid "Minimize to system tray (if enabled)" msgstr "Minimaliseer naar systeemvak (indien ingeschakeld)" #: .././sonata/about.py:69 msgid "Previous track" msgstr "Vorige nummer" #: .././sonata/about.py:70 msgid "Next track" msgstr "Volgende nummer" #: .././sonata/about.py:71 msgid "Play/Pause" msgstr "Speel/Pauze" #: .././sonata/about.py:72 msgid "Stop" msgstr "Stop" #: .././sonata/about.py:73 msgid "Lower the volume" msgstr "Volume verlagen" #: .././sonata/about.py:74 msgid "Raise the volume" msgstr "Volume verhogen" #: .././sonata/about.py:76 msgid "Play selected song" msgstr "geselecteerde nummer afspelen" #: .././sonata/about.py:77 msgid "Remove selected song(s)" msgstr "Geselecteerde nummer(s) verwijderen" #: .././sonata/about.py:78 msgid "Center currently playing song" msgstr "Centreer het huidige nummer" #: .././sonata/about.py:79 .././sonata/about.py:88 msgid "Edit selected song's tags" msgstr "Tags van het geselecteerde nummer aanpassen" #: .././sonata/about.py:80 msgid "Save to new playlist" msgstr "Als nieuwe afspeellijst opslaan" #: .././sonata/about.py:81 msgid "Clear list" msgstr "Lijst leegmaken" #: .././sonata/about.py:82 msgid "Randomize list" msgstr "Lijst shuffelen" #: .././sonata/about.py:84 msgid "Add selected song(s) or enter directory" msgstr "Geselecteerde nummer(s) toevoegen of map openen" #: .././sonata/about.py:85 msgid "Go to parent directory" msgstr "Ga naar bovenliggende map" #: .././sonata/about.py:86 msgid "Add selected item(s)" msgstr "Geselecteerde item(s) toevoegen" #: .././sonata/about.py:87 msgid "Replace with selected item(s)" msgstr "Door geselecteerde item(s) vervangen" #: .././sonata/about.py:89 msgid "Add selected item(s) and play" msgstr "Geselecteerde item(s) toevoegen en afspelen" #: .././sonata/about.py:90 msgid "Replace with selected item(s) and play" msgstr "Door geselecteerde item(s) vervangen en afspelen" #: .././sonata/about.py:91 #, fuzzy msgid "Update selected item(s)/path(s)" msgstr "Geselecteerde item(s) toevoegen" #: .././sonata/about.py:93 .././sonata/about.py:95 msgid "Add selected playlist(s)" msgstr "Geselecteerde afspeellijst(en) toevoegen" #: .././sonata/about.py:94 msgid "Remove selected playlist(s)" msgstr "Geselecteerde afspeellijsten(en) verwijderen" #: .././sonata/about.py:96 msgid "Replace with selected playlist(s)" msgstr "Door geselecteerde afspeellijst(en) vervangen" #: .././sonata/about.py:97 msgid "Add selected playlist(s) and play" msgstr "Geselecteerde afspeellijst(en) toevoegen en afspelen" #: .././sonata/about.py:98 msgid "Replace with selected playlist(s) and play" msgstr "Door geselecteerde afspeellijst(en) vervangen en afspelen" #: .././sonata/about.py:100 .././sonata/about.py:102 msgid "Add selected stream(s)" msgstr "Geselecteerde stream(s) toevoegen" #: .././sonata/about.py:101 msgid "Remove selected stream(s)" msgstr "Geselecteerde stream(s) verwijderen" #: .././sonata/about.py:103 msgid "Replace with selected stream(s)" msgstr "Door geselecteerde stream(s) vervangen" #: .././sonata/about.py:104 msgid "Add selected stream(s) and play" msgstr "Geselecteerde stream(s) toevoegen en afspelen" #: .././sonata/about.py:105 msgid "Replace with selected stream(s) and play" msgstr "Door geselecteerde stream(s) vervangen en afspelen" #: .././sonata/about.py:107 msgid "Edit playing song's tags" msgstr "Song tags aanpassen van het spelende nummer" #. define the main array- this adds headings to each section of #. shortcuts that will be displayed #: .././sonata/about.py:110 msgid "Main Shortcuts" msgstr "Algemene toetsen" #: .././sonata/about.py:111 msgid "Playback Shortcuts" msgstr "Afspeeltoetsen" #: .././sonata/about.py:112 msgid "Current Shortcuts" msgstr "Huidige toetsen" #: .././sonata/about.py:113 msgid "Library Shortcuts" msgstr "Collectie toetsen" #: .././sonata/about.py:114 msgid "Playlist Shortcuts" msgstr "Afspeellijst toetsen" #: .././sonata/about.py:115 msgid "Stream Shortcuts" msgstr "Stream toetsen" #: .././sonata/about.py:116 msgid "Info Shortcuts" msgstr "Info sneltoetsen" #: .././sonata/about.py:117 msgid "Shortcuts" msgstr "Toetsen" #: .././sonata/about.py:153 msgid "An elegant music client for MPD." msgstr "Een elegante muziekspeler voor MPD." #. Add button to show keybindings: #: .././sonata/about.py:166 msgid "_Shortcuts" msgstr "_Toetsen" #: .././sonata/about.py:177 .././sonata/main.py:3088 #: .././sonata/preferences.py:738 msgid "Unable to launch a suitable browser." msgstr "Kan geen geschikte browser starten." #: .././sonata/about.py:177 .././sonata/main.py:3088 #: .././sonata/preferences.py:738 msgid "Launch Browser" msgstr "Browser starten" #: .././sonata/cli.py:81 #, fuzzy msgid "The toggle and popup arguments require D-Bus. Aborting." msgstr "Het toggle argument vereist D-Bus. Gestopt." #: .././sonata/cli.py:97 #, fuzzy msgid "Version" msgstr "Versie: Sonata" #: .././sonata/cli.py:98 msgid "Website" msgstr "" #: .././sonata/cli.py:103 #, fuzzy msgid "Usage: sonata [OPTION]... [COMMAND]..." msgstr "Gebruik: sonata [OPTIE]" #: .././sonata/cli.py:105 msgid "Options" msgstr "Opties" #: .././sonata/cli.py:106 msgid "Show this help and exit" msgstr "Toon deze hulp en beëindig" #: .././sonata/cli.py:107 #, fuzzy msgid "Popup song notification (requires D-Bus)" msgstr "Popup scherm bij nieuw nummer (vereist DBus)" #: .././sonata/cli.py:108 msgid "Toggles whether the app is minimized" msgstr "Bepaalt of het prog. is geminimaliseerd" #: .././sonata/cli.py:109 msgid "to tray or visible (requires D-Bus)" msgstr "naar het systeemvak of zichtbaar (vereist D-Bus)" #: .././sonata/cli.py:110 msgid "Don't start app if D-Bus commands fail" msgstr "" #: .././sonata/cli.py:111 msgid "Show version information and exit" msgstr "Toon versie informatie en beëindig" #: .././sonata/cli.py:112 msgid "Start app hidden (requires systray)" msgstr "Start prog. geminimaliseerd (vereist systeemvak)" #: .././sonata/cli.py:113 msgid "Start app visible (requires systray)" msgstr "Start prog. zichtbaar (vereist systeemvak)" #: .././sonata/cli.py:114 msgid "Start with profile [NUM]" msgstr "Start met profiel [NUMMER]" #: .././sonata/cli.py:116 #, fuzzy msgid "Commands" msgstr "Opmerkingen" #: .././sonata/cli.py:117 msgid "Play song in playlist" msgstr "Speel nummer in afspeellijst" #: .././sonata/cli.py:118 msgid "Pause currently playing song" msgstr "Pauseer huidige nummer" #: .././sonata/cli.py:119 msgid "Stop currently playing song" msgstr "Stop afpelen van het huidige nummer" #: .././sonata/cli.py:120 msgid "Play next song in playlist" msgstr "Speel het volgende nummer in de afspeellijst" #: .././sonata/cli.py:121 msgid "Play previous song in playlist" msgstr "Speel het vorige nummer in de afspeellijst" #: .././sonata/cli.py:122 msgid "Toggle play/pause; plays if stopped" msgstr "Wissel tussen afspelen/pauze" #: .././sonata/cli.py:123 msgid "Toggle repeat mode" msgstr "Zet herhalen aan/uit" #: .././sonata/cli.py:124 msgid "Toggle random mode" msgstr "Zet willekeurig spelen aan/uit" #: .././sonata/cli.py:125 msgid "Display current song info" msgstr "Toon huidige nummer informatie" #: .././sonata/cli.py:126 msgid "Display MPD status" msgstr "Toon MPD status" #: .././sonata/cli.py:134 #, fuzzy, python-format msgid "Starting Sonata with profile %s..." msgstr "Sonata opstarten met profiel" #: .././sonata/cli.py:136 #, python-format msgid "%d is not an available profile number." msgstr "" #: .././sonata/cli.py:137 .././sonata/cli.py:141 #, fuzzy, python-format msgid "Profile numbers must be between 1 and %d." msgstr "Geen geldig profiel nummer. Gebruik een profiel nummer tussen 1 en" #: .././sonata/cli.py:140 #, python-format msgid "Python is unable to interpret %s as a number." msgstr "" #: .././sonata/cli.py:154 .././sonata/main.py:179 msgid "Default Profile" msgstr "Standaard Profiel" #: .././sonata/cli.py:154 .././sonata/main.py:179 msgid "by" msgstr "door" #: .././sonata/cli.py:154 .././sonata/main.py:179 msgid "from" msgstr "van" #: .././sonata/cli.py:176 msgid "" "Unable to connect to MPD.\n" "Please check your Sonata preferences or MPD_HOST/MPD_PORT environment " "variables." msgstr "" "Kan niet met MPD verbinden.\n" "Controleer de Sonata Instellingen of MPD_HOST/MPD_PORT omgevingsvariabelen." #: .././sonata/cli.py:208 .././sonata/info.py:91 .././sonata/info.py:245 #: .././sonata/library.py:49 .././sonata/tagedit.py:125 msgid "Title" msgstr "Titel" #: .././sonata/cli.py:209 .././sonata/info.py:91 .././sonata/info.py:246 #: .././sonata/library.py:49 .././sonata/main.py:1184 #: .././sonata/tagedit.py:126 msgid "Artist" msgstr "Artiest" #: .././sonata/cli.py:210 .././sonata/info.py:91 .././sonata/info.py:247 #: .././sonata/library.py:49 .././sonata/main.py:1185 .././sonata/main.py:2439 #: .././sonata/tagedit.py:127 msgid "Album" msgstr "Album" #: .././sonata/cli.py:211 .././sonata/info.py:91 .././sonata/info.py:248 msgid "Date" msgstr "Datum" #: .././sonata/cli.py:212 .././sonata/info.py:91 .././sonata/info.py:250 #: .././sonata/main.py:1186 .././sonata/tagedit.py:130 msgid "Track" msgstr "Nummer" #: .././sonata/cli.py:213 .././sonata/info.py:91 .././sonata/info.py:249 #: .././sonata/library.py:49 .././sonata/main.py:1189 #: .././sonata/preferences.py:432 .././sonata/tagedit.py:139 msgid "Genre" msgstr "Genre" #: .././sonata/cli.py:214 .././sonata/info.py:91 .././sonata/info.py:251 #: .././sonata/main.py:1191 msgid "File" msgstr "Bestand" #: .././sonata/cli.py:219 .././sonata/cli.py:221 msgid "Time" msgstr "Tijd" #: .././sonata/cli.py:222 .././sonata/info.py:91 .././sonata/info.py:244 msgid "Bitrate" msgstr "Bitrate" #: .././sonata/cli.py:224 msgid "MPD stopped" msgstr "MPD gestopt" #: .././sonata/cli.py:228 .././sonata/cli.py:230 .././sonata/cli.py:232 msgid "State" msgstr "Status" #: .././sonata/cli.py:228 msgid "Playing" msgstr "Afspelen" #: .././sonata/cli.py:230 msgid "Paused" msgstr "Pauze" #: .././sonata/cli.py:232 .././sonata/main.py:559 .././sonata/main.py:564 #: .././sonata/main.py:1836 .././sonata/main.py:1847 msgid "Stopped" msgstr "Gestopt" #: .././sonata/cli.py:234 .././sonata/cli.py:236 msgid "Repeat" msgstr "Herhalen" #: .././sonata/cli.py:234 .././sonata/cli.py:238 msgid "Off" msgstr "Uit" #: .././sonata/cli.py:236 .././sonata/cli.py:240 msgid "On" msgstr "Aan" #: .././sonata/cli.py:238 .././sonata/cli.py:240 msgid "Random" msgstr "Willekeurig" #: .././sonata/cli.py:241 msgid "Volume" msgstr "Volume" #: .././sonata/cli.py:242 msgid "Crossfade" msgstr "Overgang" #: .././sonata/cli.py:242 .././sonata/preferences.py:192 msgid "second" msgid_plural "seconds" msgstr[0] "seconde" msgstr[1] "seconden" #: .././sonata/current.py:64 msgid "Filter" msgstr "Filter" #: .././sonata/dbus_plugin.py:83 msgid "" "Sonata failed to connect to the D-BUS session bus: Unable to determine the " "address of the message bus (try 'man dbus-launch' and 'man dbus-daemon' for " "help)" msgstr "" "Sonata kan niet met de D-Bus sessie bus verbinden: Het adres van de bus kan " "niet worden bepaald (probeer 'man dbus-launch' en 'man dbus-daemon' voor " "hulp)" #: .././sonata/dbus_plugin.py:96 msgid "Failed to execute remote commands." msgstr "" #: .././sonata/dbus_plugin.py:98 #, fuzzy msgid "Starting Sonata instead..." msgstr "Sonata opstarten met profiel" #: .././sonata/dbus_plugin.py:100 #, fuzzy msgid "Maybe Sonata is not running?" msgstr "Een versie van Sonata is reeds actief." #: .././sonata/dbus_plugin.py:114 #, fuzzy msgid "An instance of Sonata is already running. Showing it..." msgstr "Een versie van Sonata is reeds actief." #: .././sonata/dbus_plugin.py:120 msgid "Failed to execute remote command." msgstr "" #. Song info #: .././sonata/info.py:78 msgid "Song Info" msgstr "Nummer info" #: .././sonata/info.py:93 msgid "Launch artist in Wikipedia" msgstr "Artiest in Wikipedia openen" #: .././sonata/info.py:93 msgid "Launch album in Wikipedia" msgstr "Album in Wikipedia openen" #: .././sonata/info.py:127 msgid "Toggle extra tags" msgstr "Extra tags wisselen" #: .././sonata/info.py:130 msgid "Edit song tags" msgstr "Song tags aanpassen" #. Lyrics #: .././sonata/info.py:140 msgid "Lyrics" msgstr "Songtekst" #: .././sonata/info.py:152 msgid "Search Lyricwiki.org for lyrics" msgstr "Songtekst zoeken op Lyricwiki.org" #: .././sonata/info.py:153 msgid "Edit lyrics at Lyricwiki.org" msgstr "" #. Album info #: .././sonata/info.py:161 msgid "Album Info" msgstr "Album Info" #: .././sonata/info.py:213 .././sonata/info.py:218 msgid "more" msgstr "meer" #: .././sonata/info.py:215 msgid "hide" msgstr "verberg" #: .././sonata/info.py:281 msgid "edit tags" msgstr "Tags bewerken" #: .././sonata/info.py:308 msgid "Album info not found." msgstr "Album info niet gevonden." #: .././sonata/info.py:311 msgid "Album name not set." msgstr "Album naam niet ingevuld." #: .././sonata/info.py:324 msgid "ZSI not found, fetching lyrics support disabled." msgstr "ZSI niet gevonden, geen ondersteuning voor ophalen van songteksten." #: .././sonata/info.py:329 msgid "Artist or song title not set." msgstr "Artiest of songtitel niet ingevuld." #: .././sonata/info.py:371 msgid "search" msgstr "zoeken" #: .././sonata/info.py:372 #, fuzzy msgid "edit" msgstr "Tags bewerken" #: .././sonata/info.py:381 .././sonata/info.py:436 msgid "Lyrics not found" msgstr "Songtekst niet gevonden" #. Fetch lyrics from lyricwiki.org #: .././sonata/info.py:401 msgid "Fetching lyrics..." msgstr "Songtekst ophalen..." #: .././sonata/info.py:411 msgid "Couldn't connect to LyricWiki" msgstr "Kan niet verbinden naar LyricWiki" #: .././sonata/info.py:439 msgid "Fetching lyrics failed" msgstr "Songtekst ophalen mislukt" #: .././sonata/library.py:47 msgid "Untagged" msgstr "Niet getagged" #: .././sonata/library.py:48 msgid "Various Artists" msgstr "Verschillende Artiesten" #: .././sonata/library.py:49 msgid "Filename" msgstr "Bestandsnaam" #: .././sonata/library.py:49 msgid "Everything" msgstr "Alles" #: .././sonata/library.py:52 msgid "Filesystem" msgstr "Bestandssysteem" #: .././sonata/library.py:53 #, fuzzy msgid "Artists" msgstr "Artiest" #: .././sonata/library.py:54 #, fuzzy msgid "Albums" msgstr "Album" #: .././sonata/library.py:55 #, fuzzy msgid "Genres" msgstr "Genre" #: .././sonata/library.py:84 #, fuzzy msgid "Search terms" msgstr "Bewerk zoektermen" #: .././sonata/library.py:90 #, fuzzy msgid "End Search" msgstr "Speel _hierna" #: .././sonata/library.py:92 msgid "Library browsing view" msgstr "_Collectie overzicht" #: .././sonata/library.py:96 #, fuzzy msgid "Search" msgstr "_Zoeken" #. Show text: #: .././sonata/library.py:761 .././sonata/main.py:1763 #: .././sonata/main.py:3331 msgid "song" msgid_plural "songs" msgstr[0] "nummer" msgstr[1] "nummers" #: .././sonata/library.py:761 .././sonata/main.py:1757 msgid "minute" msgid_plural "minutes" msgstr[0] "minuut" msgstr[1] "minuten" #: .././sonata/library.py:849 #, fuzzy msgid "Song" msgstr "nummer" #: .././sonata/library.py:849 .././sonata/main.py:1190 msgid "Path" msgstr "Pad" #. Constants #: .././sonata/main.py:102 msgid "Current" msgstr "Huidige" #: .././sonata/main.py:103 msgid "Library" msgstr "Collectie" #: .././sonata/main.py:104 msgid "Playlists" msgstr "Afspeellijsten" #: .././sonata/main.py:105 msgid "Streams" msgstr "Streams" #: .././sonata/main.py:106 msgid "Info" msgstr "Info" #: .././sonata/main.py:137 .././sonata/preferences.py:193 #: .././sonata/preferences.py:194 msgid "Entire song" msgstr "Hele nummer" #: .././sonata/main.py:234 msgid "_Sort List" msgstr "_Sorteer Lijst" #: .././sonata/main.py:235 msgid "Sa_ve List to" msgstr "Lijst _opslaan als:" #: .././sonata/main.py:236 msgid "_Connection" msgstr "_Verbinding" #: .././sonata/main.py:237 msgid "P_lay after" msgstr "_Hierna afspelen" #: .././sonata/main.py:238 .././sonata/main.py:2454 msgid "_Update" msgstr "_Bijwerken" #: .././sonata/main.py:239 msgid "Use _Remote Image..." msgstr "Gebruik _Extern Plaatje..." #: .././sonata/main.py:240 msgid "Use _Local Image..." msgstr "Gebruik _Lokaal Plaatje..." #: .././sonata/main.py:241 msgid "_Fullscreen Mode" msgstr "" #: .././sonata/main.py:242 #, fuzzy msgid "Reset Image" msgstr "Plaatje Openen" #: .././sonata/main.py:243 msgid "_Play" msgstr "_Afspelen" #: .././sonata/main.py:244 #, fuzzy msgid "Pa_use" msgstr "_Pauze" #: .././sonata/main.py:245 msgid "_Stop" msgstr "_Stop" #: .././sonata/main.py:246 #, fuzzy msgid "Pre_vious" msgstr "V_orige" #: .././sonata/main.py:247 msgid "_Next" msgstr "_Volgende" #: .././sonata/main.py:248 msgid "_Quit" msgstr "Afsl_uiten" #: .././sonata/main.py:249 msgid "_Remove" msgstr "V_erwijderen" #: .././sonata/main.py:250 msgid "_Clear" msgstr "_Leegmaken" #: .././sonata/main.py:251 #, fuzzy msgid "_Entire Library" msgstr "_Collectie Bijwerken" #: .././sonata/main.py:252 #, fuzzy msgid "_Selected Items" msgstr "Geselecteerde item(s) toevoegen" #: .././sonata/main.py:253 msgid "_Preferences..." msgstr "_Voorkeuren..." #: .././sonata/main.py:254 msgid "_About..." msgstr "_Over..." #: .././sonata/main.py:255 msgid "_Edit Tags..." msgstr "_Tags Bewerken..." #: .././sonata/main.py:256 msgid "_Add" msgstr "_Toevoegen" #: .././sonata/main.py:257 msgid "_Replace" msgstr "_Vervangen" #: .././sonata/main.py:258 msgid "Add" msgstr "Toevoegen" #: .././sonata/main.py:259 msgid "Replace" msgstr "Vervangen" #: .././sonata/main.py:260 msgid "_Delete..." msgstr "Verwij_deren" #: .././sonata/main.py:261 msgid "Shuffle" msgstr "Willekeurig" #: .././sonata/main.py:286 #, fuzzy msgid "S_how Sonata" msgstr "_Toon Sonata" #: .././sonata/main.py:287 msgid "_Repeat" msgstr "_Herhalen" #: .././sonata/main.py:288 msgid "Rando_m" msgstr "_Willekeurig" #: .././sonata/main.py:428 msgid "By Artist" msgstr "Op _Artiest" #: .././sonata/main.py:429 msgid "By Album" msgstr "Op A_lbum" #: .././sonata/main.py:430 msgid "By Song Title" msgstr "Op _Songtitel" #: .././sonata/main.py:431 msgid "By File Name" msgstr "Op _Bestandsnaam" #: .././sonata/main.py:432 msgid "By Dir & File Name" msgstr "Op map- en bestandsnaam" #: .././sonata/main.py:433 msgid "Reverse List" msgstr "Lijst Omdraaien" #: .././sonata/main.py:456 .././sonata/main.py:467 msgid "_New..." msgstr "_Nieuw..." #: .././sonata/main.py:457 msgid "_Edit..." msgstr "_Bewerk..." #: .././sonata/main.py:468 msgid "_Rename..." msgstr "_Hernoem..." #: .././sonata/main.py:530 .././sonata/main.py:597 .././sonata/main.py:598 msgid "Playlist" msgstr "_Afspeellijst" #: .././sonata/main.py:560 .././sonata/main.py:1840 .././sonata/main.py:2049 msgid "Click to expand" msgstr "Klik om uit te klappen" #: .././sonata/main.py:565 .././sonata/main.py:1838 .././sonata/main.py:2047 msgid "Click to collapse" msgstr "Klik om in te klappen" #: .././sonata/main.py:570 .././sonata/main.py:1732 .././sonata/main.py:1843 msgid "Not Connected" msgstr "Niet Verbonden" #: .././sonata/main.py:572 .././sonata/main.py:1730 .././sonata/main.py:1845 msgid "No Read Permission" msgstr "Geen lees toegang" #: .././sonata/main.py:645 #, fuzzy msgid "Cover Art" msgstr "Album _Hoes" #: .././sonata/main.py:850 .././sonata/main.py:863 .././sonata/main.py:884 msgid "Profile" msgstr "Profiel" #: .././sonata/main.py:863 .././sonata/main.py:864 .././sonata/main.py:884 msgid "MPD_HOST/PORT" msgstr "MPD_HOST/PORT" #: .././sonata/main.py:865 .././sonata/main.py:871 msgid "Disconnect" msgstr "Afbreken" #: .././sonata/main.py:1187 .././sonata/main.py:1194 msgid "#" msgstr "#" #: .././sonata/main.py:1188 .././sonata/preferences.py:431 #: .././sonata/tagedit.py:128 msgid "Year" msgstr "Jaar" #: .././sonata/main.py:1192 msgid "Stream" msgstr "Stream" #: .././sonata/main.py:1193 msgid "Len" msgstr "Len" #: .././sonata/main.py:1214 .././sonata/main.py:1221 .././sonata/main.py:1262 #: .././sonata/main.py:1269 msgid "Unknown" msgstr "Onbekend" #: .././sonata/main.py:1753 msgid "day" msgid_plural "days" msgstr[0] "dag" msgstr[1] "dagen" #: .././sonata/main.py:1761 msgid "hour" msgid_plural "hours" msgstr[0] "uur" msgstr[1] "uren" #: .././sonata/main.py:1766 .././sonata/main.py:1768 msgid "and" msgstr "en" #: .././sonata/main.py:1776 msgid "(updating mpd)" msgstr "(mpd bijwerken)" #: .././sonata/main.py:2116 msgid "Lyrics Search" msgstr "Songteksten zoeken" #: .././sonata/main.py:2117 msgid "_Search" msgstr "_Zoeken" #: .././sonata/main.py:2120 msgid "Artist Name" msgstr "Artiest Naam" #: .././sonata/main.py:2125 msgid "Song Title" msgstr "Songtitel" #: .././sonata/main.py:2377 msgid "Open Image" msgstr "Plaatje Openen" #: .././sonata/main.py:2379 msgid "Images" msgstr "Plaatjes" #: .././sonata/main.py:2383 msgid "All files" msgstr "Alle bestanden" #: .././sonata/main.py:2425 msgid "Choose Cover Art" msgstr "Kies Album Hoes" #: .././sonata/main.py:2426 msgid "C_hoose" msgstr "_Kies" #: .././sonata/main.py:2459 msgid "Edit search terms" msgstr "Bewerk zoektermen" #: .././sonata/main.py:2516 msgid "No artist or album name found." msgstr "Geen artiest of album gevonden." #: .././sonata/main.py:2519 msgid "No cover art found." msgstr "Geen album hoes gevonden." #: .././sonata/main.py:2843 msgid "Delete the selected playlist?" msgid_plural "Delete the selected playlists?" msgstr[0] "Geselecteerde afspeellijst verwijderen?" msgstr[1] "Geselecteerde afspeellijsten verwijderen?" #: .././sonata/main.py:2843 msgid "Delete Playlist" msgid_plural "Delete Playlists" msgstr[0] "Afspeellijst verwijderen" msgstr[1] "Afspeellijsten verwijderen" #: .././sonata/main.py:2851 msgid "Delete the selected stream?" msgid_plural "Delete the selected streams?" msgstr[0] "Geselecteerde stream verwijderen?" msgstr[1] "Geselecteerde streams verwijderen?" #: .././sonata/main.py:2851 msgid "Delete Stream" msgid_plural "Delete Streams" msgstr[0] "Stream verwijderen" msgstr[1] "Streams verwijderen" #: .././sonata/main.py:2909 msgid "" "To save lyrics to the music file's directory, you must specify a valid music " "directory." msgstr "" "Om songteksten naar de muziekmap op te slaan, moet een geldige map worden " "opgegeven." #: .././sonata/main.py:2909 .././sonata/main.py:2916 msgid "Music Dir Verification" msgstr "Music Dir verificatie" #: .././sonata/main.py:2916 msgid "" "To save artwork to the music file's directory, you must specify a valid " "music directory." msgstr "" "Om album hoezen naar de muziekmap op te slaan, moet een geldige map worden " "opgegeven." #: .././sonata/main.py:3332 msgid "album" msgid_plural "albums" msgstr[0] "album" msgstr[1] "albums" #: .././sonata/main.py:3333 msgid "artist" msgid_plural "artists" msgstr[0] "artiest" msgstr[1] "artiesten" #: .././sonata/main.py:3340 msgid "day of bliss" msgid_plural "days of bliss" msgstr[0] "dag vol genot" msgstr[1] "dagen vol genot" #: .././sonata/main.py:3342 msgid "hour of bliss" msgid_plural "hours of bliss" msgstr[0] "uur vol genot" msgstr[1] "uren vol genot" #: .././sonata/playlists.py:103 .././sonata/playlists.py:105 msgid "Save Playlist" msgstr "Afspeellijst Opslaan" #: .././sonata/playlists.py:120 msgid "Would you like to replace the existing playlist or append these songs?" msgstr "Wil je de huidige afspeellijst vervangen of deze nummers toevoegen?" #: .././sonata/playlists.py:120 #, fuzzy msgid "Existing Playlist" msgstr "_Afspeellijst" #: .././sonata/playlists.py:120 msgid "Replace playlist" msgstr "Afspeellijst vervangen" #: .././sonata/playlists.py:120 msgid "Append songs" msgstr "Nummers toevoegen" #: .././sonata/playlists.py:141 msgid "A playlist with this name already exists. Would you like to replace it?" msgstr "Er bestaat reeds een afspeellijst met deze naam, vervangen?" #: .././sonata/playlists.py:153 msgid "Playlist name" msgstr "Afspeellijst naam" #: .././sonata/playlists.py:182 .././sonata/playlists.py:186 msgid "Rename Playlist" msgstr "Afspeellijst hernoemen" #. Constants: #: .././sonata/preferences.py:35 msgid "System tray" msgstr "Systeemvak" #: .././sonata/preferences.py:35 msgid "Top Left" msgstr "Linksboven" #: .././sonata/preferences.py:35 msgid "Top Right" msgstr "Rechtsboven" #: .././sonata/preferences.py:35 msgid "Bottom Left" msgstr "Linksonder" #: .././sonata/preferences.py:35 msgid "Bottom Right" msgstr "Rechtsonder" #: .././sonata/preferences.py:35 msgid "Screen Center" msgstr "Scherm Midden" #. MPD tab #: .././sonata/preferences.py:64 msgid "MPD Connection" msgstr "MPD Verbinding" #: .././sonata/preferences.py:76 #, fuzzy msgid "_Name" msgstr "Naam" #: .././sonata/preferences.py:79 #, fuzzy msgid "_Host" msgstr "Adres" #: .././sonata/preferences.py:82 #, fuzzy msgid "_Port" msgstr "Poort" #: .././sonata/preferences.py:86 #, fuzzy msgid "_Music dir" msgstr "Muziek map" #: .././sonata/preferences.py:87 msgid "Select a Music Directory" msgstr "" #: .././sonata/preferences.py:91 #, fuzzy msgid "Pa_ssword" msgstr "Wachtwoord" #: .././sonata/preferences.py:94 msgid "Leave blank if no password is required." msgstr "Leeg laten als geen wachtwoord vereist is." #: .././sonata/preferences.py:95 #, fuzzy msgid "_Autoconnect on start" msgstr "Automatisch verbinden bij opstarten" #: .././sonata/preferences.py:113 msgid "Using MPD_HOST/PORT" msgstr "Via MPD_HOST/PORT" #: .././sonata/preferences.py:163 .././sonata/preferences.py:536 msgid "Extras" msgstr "Extra's" #: .././sonata/preferences.py:168 msgid "_Audioscrobbling (Last.fm)" msgstr "" #: .././sonata/preferences.py:170 #, fuzzy msgid "_Username:" msgstr "Gebruikersnaam:" #: .././sonata/preferences.py:171 #, fuzzy msgid "_Password:" msgstr "Wachtwoord:" #: .././sonata/preferences.py:188 #, fuzzy msgid "Popup _notification on song changes" msgstr "Popup scherm bij nieuw nummer spelen" #: .././sonata/preferences.py:210 msgid "Fade length" msgstr "Fade lengte" #: .././sonata/preferences.py:211 #, fuzzy msgid "_Fade length" msgstr "Fade lengte" #: .././sonata/preferences.py:213 msgid "sec" msgstr "sec" #: .././sonata/preferences.py:218 #, fuzzy msgid "C_rossfade" msgstr "Overgang" #. Display tab #: .././sonata/preferences.py:246 .././sonata/preferences.py:533 msgid "Display" msgstr "Weergave" #: .././sonata/preferences.py:251 #, fuzzy msgid "_Album art" msgstr "Album naam" #: .././sonata/preferences.py:253 msgid "Standard" msgstr "Standaard" #: .././sonata/preferences.py:253 msgid "Stylized" msgstr "Aangekleed" #: .././sonata/preferences.py:256 msgid "Artwork style:" msgstr "Album hoes stijl" #: .././sonata/preferences.py:258 msgid "Local only" msgstr "Alleen lokaal" #: .././sonata/preferences.py:258 #, fuzzy msgid "Local and remote" msgstr "Lokaal, dan extern" #: .././sonata/preferences.py:260 #, fuzzy msgid "Search locations:" msgstr "Zoekvolgorde:" #: .././sonata/preferences.py:267 .././sonata/preferences.py:289 msgid "SONG_DIR" msgstr "" #: .././sonata/preferences.py:269 msgid "custom" msgstr "aangepaste" #: .././sonata/preferences.py:274 msgid "Save art to:" msgstr "Hoes opslaan naar:" #: .././sonata/preferences.py:277 #, fuzzy msgid "_Playback/volume buttons" msgstr "Speel/volume knoppen aanzetten" #: .././sonata/preferences.py:280 #, fuzzy msgid "Pr_ogressbar" msgstr "Voortgang indicatie inschakelen" #: .././sonata/preferences.py:283 #, fuzzy msgid "_Statusbar" msgstr "Statusbalk aanzetten" #: .././sonata/preferences.py:286 #, fuzzy msgid "Song Ly_rics" msgstr "Songtekst" #: .././sonata/preferences.py:288 msgid "Save lyrics to:" msgstr "Songtekst opslaan naar:" #: .././sonata/preferences.py:297 #, fuzzy msgid "System _tray icon" msgstr "Systeemvak" #. Behavior tab #: .././sonata/preferences.py:319 msgid "Window Behavior" msgstr "Schermgedrag" #: .././sonata/preferences.py:323 #, fuzzy msgid "_Show window on all workspaces" msgstr "Toon scherm op alle werkbladen" #: .././sonata/preferences.py:326 #, fuzzy msgid "_Keep window above other windows" msgstr "Toon scherm boven andere schermen" #: .././sonata/preferences.py:329 #, fuzzy msgid "_Hide window titlebar" msgstr "Scherm titel:" #: .././sonata/preferences.py:334 #, fuzzy msgid "_Minimize to system tray on close/escape" msgstr "Minimaliseer naar systeemvak bij sluiten/escape" #: .././sonata/preferences.py:336 msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, so " "only check this if you have one." msgstr "" "Indien ingeschakeld zal Sonata minimaliseren naar het systeemvak bij " "afsluiten. Het is op dit moment niet mogelijk om een systeemvak te " "detecteren, dus schakel deze optie alleen in als een systeemvak beschikbaar " "is." #: .././sonata/preferences.py:350 msgid "Miscellaneous" msgstr "Algemeen" #: .././sonata/preferences.py:354 #, fuzzy msgid "_Update MPD library on start" msgstr "MPD collectie bijwerken tijdens opstarten" #: .././sonata/preferences.py:356 msgid "" "If enabled, Sonata will automatically update your MPD library when it starts " "up." msgstr "" "Indien ingeschakeld zal Sonata automatisch de MPD collectie bijwerken " "tijdens het opstarten." #: .././sonata/preferences.py:358 #, fuzzy msgid "S_top playback on exit" msgstr "Afspelen stoppen bij afsluiten" #: .././sonata/preferences.py:360 msgid "" "MPD allows playback even when the client is not open. If enabled, Sonata " "will behave like a more conventional music player and, instead, stop " "playback upon exit." msgstr "" "MPD kan ook wanneer Sonata is afgesloten muziek afspelen. Indien " "ingeschakeld zal Sonata meer als een conventionele speler werken en het " "afspelen stoppen bij afsluiten." #: .././sonata/preferences.py:362 #, fuzzy msgid "_Write status file:" msgstr "Schrijf status bestand:" #: .././sonata/preferences.py:364 .././sonata/preferences.py:366 msgid "" "If enabled, Sonata will create a xmms-infopipe like file containing " "information about the current song. Many applications support the xmms-info " "file (Instant Messengers, IRC Clients...)" msgstr "" "Indien ingeschakeld zal Sonata een xmms-infopipe bestand aanmaken met " "informatie over het huidige nummer. Veel programma's ondersteunen dit " "formaat (Instant Messengers, IRC programma's...)" #. Format tab #: .././sonata/preferences.py:392 msgid "Song Formatting" msgstr "Nummer formaat" #: .././sonata/preferences.py:397 #, fuzzy msgid "C_urrent playlist:" msgstr "Huidige afspeellijst:" #: .././sonata/preferences.py:398 #, fuzzy msgid "_Library:" msgstr "Collectie:" #: .././sonata/preferences.py:399 #, fuzzy msgid "_Window title:" msgstr "Scherm titel:" #: .././sonata/preferences.py:400 #, fuzzy msgid "Current _song line 1:" msgstr "Huidige nummer regel 1:" #: .././sonata/preferences.py:402 #, fuzzy msgid "Current s_ong line 2:" msgstr "Huidige nummer regel 2:" #: .././sonata/preferences.py:422 msgid "Available options" msgstr "Beschikbare opties" #. XXX get these directly from the formatting function: #: .././sonata/preferences.py:426 msgid "Artist name" msgstr "Artiest naam" #: .././sonata/preferences.py:427 msgid "Album name" msgstr "Album naam" #: .././sonata/preferences.py:428 msgid "Track name" msgstr "Track naam" #: .././sonata/preferences.py:429 msgid "Track number" msgstr "Track nummer" #: .././sonata/preferences.py:430 #, fuzzy msgid "Disc number" msgstr "Disc nummer" #: .././sonata/preferences.py:433 #, fuzzy msgid "File path" msgstr "bestand_pad" #: .././sonata/preferences.py:434 msgid "File name" msgstr "Bestandsnaam" #: .././sonata/preferences.py:435 .././sonata/streams.py:109 msgid "Stream name" msgstr "Stream naam" #: .././sonata/preferences.py:436 msgid "Song length" msgstr "Track lengte" #: .././sonata/preferences.py:437 msgid "Elapsed time (title only)" msgstr "Verstreken tijd (alleen titel)" #: .././sonata/preferences.py:448 msgid "Info displayed only if all enclosed tags are defined" msgstr "Info alleen weergeven als alle tags aanwezig zijn" #: .././sonata/preferences.py:448 msgid "Creates columns in the current playlist" msgstr "Maakt kolommen in de huidige afspeellijst" #: .././sonata/preferences.py:473 #, fuzzy msgid "_About" msgstr "_Over..." #: .././sonata/preferences.py:474 msgid "_Configure..." msgstr "" #: .././sonata/preferences.py:513 msgid "Loaded" msgstr "" #: .././sonata/preferences.py:521 msgid "Description" msgstr "" #. Set up table #: .././sonata/preferences.py:532 #, fuzzy msgid "MPD" msgstr "_MPD" #: .././sonata/preferences.py:534 #, fuzzy msgid "Behavior" msgstr "_Gedrag" #: .././sonata/preferences.py:535 #, fuzzy msgid "Format" msgstr "_Formaat" #: .././sonata/preferences.py:605 msgid "New Profile" msgstr "Nieuw Profiel" #. Prompt user for playlist name: #: .././sonata/preferences.py:659 msgid "Custom Artwork" msgstr "Andere album hoes" #: .././sonata/preferences.py:661 msgid "Artwork filename" msgstr "Album hoes bestandsnaam" #: .././sonata/streams.py:105 msgid "Edit Stream" msgstr "Stream Bewerken" #: .././sonata/streams.py:107 .././sonata/streams.py:138 msgid "New Stream" msgstr "Nieuwe Stream" #: .././sonata/streams.py:116 msgid "Stream URL" msgstr "Stream URL" #: .././sonata/streams.py:138 msgid "A stream with this name already exists. Would you like to replace it?" msgstr "Er bestaat reeds een stream met deze naam, vervangen?" #: .././sonata/tagedit.py:61 msgid "Taglib and/or tagpy not found, tag editing support disabled." msgstr "" "Taglib en/of tagpy niet gevonden, geen ondersteuning voor tag aanpassingen." #: .././sonata/tagedit.py:61 .././sonata/tagedit.py:70 #: .././sonata/tagedit.py:75 .././sonata/tagedit.py:99 #: .././sonata/tagedit.py:103 .././sonata/tagedit.py:260 #: .././sonata/tagedit.py:299 msgid "Edit Tags" msgstr "Tags bewerken" #: .././sonata/tagedit.py:70 #, fuzzy msgid "" "Tagpy version < 0.91. Please upgrade to a newer version, tag editing support " "disabled." msgstr "" "Taglib en/of tagpy niet gevonden, geen ondersteuning voor tag aanpassingen." #: .././sonata/tagedit.py:75 msgid "The path" msgstr "Het pad" #: .././sonata/tagedit.py:75 msgid "does not exist. Please specify a valid music directory in preferences." msgstr "bestaat niet. Kies een geldige muziek map onder voorkeuren." #: .././sonata/tagedit.py:99 msgid "File " msgstr "Bestand" #: .././sonata/tagedit.py:99 msgid " not found. Please specify a valid music directory in preferences." msgstr " bestaat niet. Kies een geldige muziek map onder voorkeuren." #: .././sonata/tagedit.py:103 msgid "No music files with editable tags found." msgstr "Geen muziekbestanden met bewerkbare tags gevonden." #: .././sonata/tagedit.py:150 msgid "Comment" msgstr "Opmerkingen" #. Only show save all button if more than one song being edited. #: .././sonata/tagedit.py:161 msgid "Save _All" msgstr "_Alles opslaan" #: .././sonata/tagedit.py:207 msgid "Increment each selected music file, starting at track 1 for this file." msgstr "" "Ophogen voor alle geselecteerde bestanden, begin bij nummer 1 voor dit " "bestand." #: .././sonata/tagedit.py:209 msgid "Apply to all selected music files." msgstr "Toepassen op alle geselecteerde bestanden." #: .././sonata/tagedit.py:260 msgid "of" msgstr "van" #. FIXME: was (save_success and self.conn and self.status): #: .././sonata/tagedit.py:299 msgid "Unable to save tag to music file." msgstr "Opslaan van tag in bestand mislukt." #: .././sonata/tagedit.py:366 #, fuzzy msgid "Hide file path" msgstr "bestand_pad" #: .././sonata/tagedit.py:369 #, fuzzy msgid "Show file path" msgstr "bestand_pad" #~ msgid "The popup argument requires D-Bus. Aborting." #~ msgstr "Het popup argument vereist D-Bus. Gestopt." #, fuzzy #~ msgid "_Update Path" #~ msgstr "_Bijwerken" #~ msgid "Website: http://www.nongnu.org/sonata/" #~ msgstr "Website: http://www.nongnu.org/sonata/" #~ msgid "Enable Audioscrobbler" #~ msgstr "Audioscrobbler inschakelen" #~ msgid "Enable Crossfade" #~ msgstr "Crossfade inschakelen" #~ msgid "Enable album art" #~ msgstr "Album hoezen tonen" #~ msgid "Enable lyrics" #~ msgstr "Songteksten aanzetten" #~ msgid "Enable system tray icon" #~ msgstr "Systeemvak icoon aanzetten" #~ msgid "_Display" #~ msgstr "_Weergave" #~ msgid "_Extras" #~ msgstr "_Extra's" #~ msgid "" #~ "PyGTK+ 2.10 or gnome-python-extras not found, system tray support " #~ "disabled." #~ msgstr "" #~ "PyGTK+ 2.10 of gnome-python-extras niet gevonden, geen systeemvak " #~ "ondersteuning." #~ msgid "Reset to Default" #~ msgstr "Terugzetten naar standaard" #~ msgid "_New Playlist..." #~ msgstr "Nieuwe _Speellijst..." #~ msgid "Notification" #~ msgstr "Notificatie" #~ msgid "" #~ "Python 2.5 or python-elementtree not found, audioscrobbler support " #~ "disabled." #~ msgstr "" #~ "Python 2.5 of python-elementtree niet gevonden, geen audioscrobbler " #~ "ondersteuning." #~ msgid "Audioscrobbler Verification" #~ msgstr "Audioscrobbler verificatie" #~ msgid "Update library for selected item(s)" #~ msgstr "Collectie bijwerken voor geselecteerde item(s)" #~ msgid "_Shuffle" #~ msgstr "S_huffle" #~ msgid "Toggle shuffle mode" #~ msgstr "Zet willekeurig afspelen aan/uit" #~ msgid "Not connected" #~ msgstr "Niet verbonden" #~ msgid "Press enter to search for these terms." #~ msgstr "Druk op enter om te zoeken." #~ msgid "Add new profile" #~ msgstr "Nieuw profiel toevoegen" #~ msgid "Remove current profile" #~ msgstr "Huidig profiel verwijderen" #~ msgid "Play enqueued files on activate" #~ msgstr "Speel toegevoegde bestanden af bij activeren" #~ msgid "" #~ "Automatically play enqueued items when activated via double-click or " #~ "enter." #~ msgstr "Speel toegevoegde bestanden direct af bij dubbelklikken of enter." #~ msgid "Add selected song(s) or directory(s)" #~ msgstr "Geselecteerde nummer(s) of map(pen) toevoegen" #~ msgid "Replace with selected song(s) or directory(s)" #~ msgstr "Door geselecteerde nummer(s) of map(pen) vervangen" #~ msgid "Add to _Queue" #~ msgstr "Voeg toe aan _Wachtrij" #~ msgid "Remove from _Queue" #~ msgstr "Verwijder uit _Wachtrij" #~ msgid "Add selected song(s) to playlist queue" #~ msgstr "Geselecteerde nummer(s) toevoegen aan de wachtrij" #~ msgid "Remove selected song(s) from playlist queue" #~ msgstr "Geselecteerde nummer(s) uit de wachtrij verwijderen" #~ msgid "seconds" #~ msgstr "seconden" #~ msgid "Song Info..." #~ msgstr "Nummer info..." #~ msgid "Click to collapse the player" #~ msgstr "Klik om de speler te verkleinen" #~ msgid "Click to expand the player" #~ msgstr "Klik om de speler te vergroten" #~ msgid "_Song Info" #~ msgstr "_Nummer info" #~ msgid "_Search..." #~ msgstr "_Zoek..." #~ msgid "Remote only" #~ msgstr "Alleen extern" #~ msgid "Remote, then local" #~ msgstr "Extern, dan lokaal" #~ msgid "To save artwork as" #~ msgstr "Om een album hoes op te slaan" #~ msgid "Artwork Verification" #~ msgstr "Album hoes verificatie" #~ msgid "Switch to current playlist" #~ msgstr "Ga naar huidige afspeellijst" #~ msgid "Toggle filter bar for jumping straight to track" #~ msgstr "Filterveld tonen om direct naar nummer te springen" #~ msgid "Song name" #~ msgstr "Track naam" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/po/pl.po�������������������������������������������������������������������������������0000664�0000000�0000000�00000126170�13771420143�0014406�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Polish translation of Sonata. # Copyright (C) 2006-2009 Tomasz Dominikowski # This file is distributed under the same license as the sonata package. # Tomasz Dominikowski 2006-2009, dominikowski@gmail.com # msgid "" msgstr "" "Project-Id-Version: Sonata\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-03-22 22:01-0600\n" "PO-Revision-Date: 2009-03-23 13:59+0100\n" "Last-Translator: Tomasz Dominikowski <dominikowski@gmail.com>\n" "Language-Team: Tomasz Dominikowski <dominikowski@gmail.com>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Poedit-Language: Polish\n" "X-Poedit-Country: Poland\n" #. define the shortcuts and their descriptions #. these are all gettextable #: .././sonata/about.py:52 msgid "About Sonata" msgstr "O programie Sonata" #: .././sonata/about.py:53 #: .././sonata/preferences.py:60 msgid "Preferences" msgstr "Preferencje" #: .././sonata/about.py:54 msgid "Fullscreen Artwork Mode" msgstr "Tryb pełnoekranowych okładek" #: .././sonata/about.py:55 msgid "Switch to [1st-5th] tab" msgstr "Przełączenie do [1-5] karty" #: .././sonata/about.py:56 msgid "Connect to MPD" msgstr "Połączenie z usługą MPD" #: .././sonata/about.py:57 msgid "Disconnect from MPD" msgstr "Rozłączenie z usługą MPD" #: .././sonata/about.py:58 msgid "Randomize current playlist" msgstr "Losowanie kolejności odtwarzania bieżącej listy" #: .././sonata/about.py:59 msgid "Expand player" msgstr "Rozwinięcie odtwarzacza" #: .././sonata/about.py:60 msgid "Switch to previous tab" msgstr "Przełączenie do poprzedniej karty" #: .././sonata/about.py:61 msgid "Switch to next tab" msgstr "Przełączenie do następnej karty" #: .././sonata/about.py:62 msgid "Collapse player" msgstr "Zwinięcie odtwarzacza" #: .././sonata/about.py:63 #: .././sonata/library.py:86 msgid "Search library" msgstr "Wyszukiwanie w kolekcji" #: .././sonata/about.py:64 msgid "Quit" msgstr "Zakończenie" #: .././sonata/about.py:65 msgid "Update entire library" msgstr "Aktualizacja całej kolekcji" #: .././sonata/about.py:66 msgid "Display popup menu" msgstr "Wyświetlenie wyskakującego menu" #: .././sonata/about.py:67 msgid "Minimize to system tray (if enabled)" msgstr "Minimalizacja do zasobnika systemowego (jeśli dostępny)" #: .././sonata/about.py:69 msgid "Previous track" msgstr "Poprzednia ścieżka" #: .././sonata/about.py:70 msgid "Next track" msgstr "Następna ścieżka" #: .././sonata/about.py:71 msgid "Play/Pause" msgstr "Odtwarzanie/Wstrzymanie" #: .././sonata/about.py:72 msgid "Stop" msgstr "Zatrzymanie" #: .././sonata/about.py:73 msgid "Lower the volume" msgstr "Obniżenie poziomu głośności" #: .././sonata/about.py:74 msgid "Raise the volume" msgstr "Zwiększenie poziomu głośności" #: .././sonata/about.py:76 msgid "Play selected song" msgstr "Odtworzenie zaznaczonego utworu" #: .././sonata/about.py:77 msgid "Remove selected song(s)" msgstr "Usunięcie zaznaczonego utworu (utworów)" #: .././sonata/about.py:78 msgid "Center currently playing song" msgstr "Bieżąco odtwarzany utwór na środku" #: .././sonata/about.py:79 #: .././sonata/about.py:88 msgid "Edit selected song's tags" msgstr "Modyfikowanie znaczników zaznaczonego utworu" #: .././sonata/about.py:80 msgid "Save to new playlist" msgstr "Zapisanie do nowej listy odtwarzania" #: .././sonata/about.py:81 msgid "Clear list" msgstr "Wyczyszczenie listy odtwarzania" #: .././sonata/about.py:82 msgid "Randomize list" msgstr "Losowanie kolejności odtwarzania" #: .././sonata/about.py:84 msgid "Add selected song(s) or enter directory" msgstr "Dodanie zaznaczonego utworu (utworów) lub przejście do katalogu" #: .././sonata/about.py:85 msgid "Go to parent directory" msgstr "Przejście do katalogu nadrzędnego" #: .././sonata/about.py:86 msgid "Add selected item(s)" msgstr "Dodanie zaznaczonego elementu (elementów)" #: .././sonata/about.py:87 msgid "Replace with selected item(s)" msgstr "Zamiana na zaznaczony element (elementy)" #: .././sonata/about.py:89 msgid "Add selected item(s) and play" msgstr "Dodanie zaznaczonego elementu (elementów) i rozpoczęcie odtwarzania" #: .././sonata/about.py:90 msgid "Replace with selected item(s) and play" msgstr "Zamiana na zaznaczony element (elementy) i rozpoczęcie odtwarzania" #: .././sonata/about.py:91 msgid "Update selected item(s)/path(s)" msgstr "Aktualizacja zaznaczonego elementu (elementów)/ścieżki (ścieżek)" #: .././sonata/about.py:93 #: .././sonata/about.py:95 msgid "Add selected playlist(s)" msgstr "Dodanie zaznaczonej listy (list) odtwarzania" #: .././sonata/about.py:94 msgid "Remove selected playlist(s)" msgstr "Usunięcie zaznaczonej listy (list) odtwarzania" #: .././sonata/about.py:96 msgid "Replace with selected playlist(s)" msgstr "Zamień na zaznaczoną listę (listy) odtwarzania " #: .././sonata/about.py:97 msgid "Add selected playlist(s) and play" msgstr "Dodanie zaznaczonej listy (list) odtwarzania i rozpoczęcie odtwarzania" #: .././sonata/about.py:98 msgid "Replace with selected playlist(s) and play" msgstr "Zamiana na zaznaczoną listę (listy) odtwarzania i rozpoczęcie odtwarzania" #: .././sonata/about.py:100 #: .././sonata/about.py:102 msgid "Add selected stream(s)" msgstr "Dodanie zaznaczonego strumienia (strumieni)" #: .././sonata/about.py:101 msgid "Remove selected stream(s)" msgstr "Usunięcie zaznaczonego strumienia (strumieni)" #: .././sonata/about.py:103 msgid "Replace with selected stream(s)" msgstr "Zamiana na zaznaczony strumień (strumienie)" #: .././sonata/about.py:104 msgid "Add selected stream(s) and play" msgstr "Dodanie zaznaczonego strumienia (strumieni) i rozpoczęcie odtwarzania" #: .././sonata/about.py:105 msgid "Replace with selected stream(s) and play" msgstr "Zamiana na zaznaczony strumień (strumienie) i rozpoczęcie odtwarzania" #: .././sonata/about.py:107 msgid "Edit playing song's tags" msgstr "Modyfikacja znaczników odtwarzanego utworu" #. define the main array- this adds headings to each section of #. shortcuts that will be displayed #: .././sonata/about.py:110 msgid "Main Shortcuts" msgstr "Skróty główne" #: .././sonata/about.py:111 msgid "Playback Shortcuts" msgstr "Skróty odtwarzania" #: .././sonata/about.py:112 msgid "Current Shortcuts" msgstr "Skróty bieżące" #: .././sonata/about.py:113 msgid "Library Shortcuts" msgstr "Skróty kolekcji" #: .././sonata/about.py:114 msgid "Playlist Shortcuts" msgstr "Skróty listy odtwarzania" #: .././sonata/about.py:115 msgid "Stream Shortcuts" msgstr "Skróty strumieni" #: .././sonata/about.py:116 msgid "Info Shortcuts" msgstr "Skróty klawiszowe" #: .././sonata/about.py:117 msgid "Shortcuts" msgstr "Skróty" #: .././sonata/about.py:153 msgid "An elegant music client for MPD." msgstr "Elegancki odtwarzacz muzyki dla usługi MPD." #. Add button to show keybindings: #: .././sonata/about.py:166 msgid "_Shortcuts" msgstr "_Skróty" #: .././sonata/about.py:177 #: .././sonata/main.py:3088 #: .././sonata/preferences.py:738 msgid "Unable to launch a suitable browser." msgstr "Uruchomienie odpowiedniej przeglądarki niemożliwe." #: .././sonata/about.py:177 #: .././sonata/main.py:3088 #: .././sonata/preferences.py:738 msgid "Launch Browser" msgstr "Uruchom przeglądarkę" #: .././sonata/cli.py:81 msgid "The toggle and popup arguments require D-Bus. Aborting." msgstr "Argument przełączania i wyskakiwania wymaga D-Bus. Przerywanie." #: .././sonata/cli.py:97 msgid "Version" msgstr "Wersja" #: .././sonata/cli.py:98 msgid "Website" msgstr "Witryna" #: .././sonata/cli.py:103 msgid "Usage: sonata [OPTION]... [COMMAND]..." msgstr "Składnia: sonata [OPCJA]... [POLECENIE]..." #: .././sonata/cli.py:105 msgid "Options" msgstr "Opcje" #: .././sonata/cli.py:106 msgid "Show this help and exit" msgstr "Wyświetlenie tej pomocy i zakończenie" #: .././sonata/cli.py:107 msgid "Popup song notification (requires D-Bus)" msgstr "Wyskakujące powiadamianie o utworze (wymaga D-Bus)" #: .././sonata/cli.py:108 msgid "Toggles whether the app is minimized" msgstr "Przełącza stan minimalizacji aplikacji" #: .././sonata/cli.py:109 msgid "to tray or visible (requires D-Bus)" msgstr "(widoczny lub zminimalizowany, wymaga D-Bus)" #: .././sonata/cli.py:110 msgid "Don't start app if D-Bus commands fail" msgstr "Bez uruchamiania programu, jeśli polecenia D-Bus zawiodą" #: .././sonata/cli.py:111 msgid "Show version information and exit" msgstr "Wyświetlenie informacji o wersji i zakończenie" #: .././sonata/cli.py:112 msgid "Start app hidden (requires systray)" msgstr "Uruchomienie aplikacji w trybie ukrytym (wymaga zasobnika systemowego)" #: .././sonata/cli.py:113 msgid "Start app visible (requires systray)" msgstr "Uruchomienie aplikacji w trybie widocznym (wymaga zasobnika systemowego)" #: .././sonata/cli.py:114 msgid "Start with profile [NUM]" msgstr "Uruchomienie z profilem [NR]" #: .././sonata/cli.py:116 msgid "Commands" msgstr "Polecenia" #: .././sonata/cli.py:117 msgid "Play song in playlist" msgstr "Odtworzenie utworu z listy odtwarzania" #: .././sonata/cli.py:118 msgid "Pause currently playing song" msgstr "Wstrzymanie odtwarzania bieżącego utworu" #: .././sonata/cli.py:119 msgid "Stop currently playing song" msgstr "Zatrzymanie odtwarzania bieżącego utworu" #: .././sonata/cli.py:120 msgid "Play next song in playlist" msgstr "Odtwarzanie następnego utworu na liście odtwarzania" #: .././sonata/cli.py:121 msgid "Play previous song in playlist" msgstr "Odtwarzanie poprzedniego utworu na liście odtwarzania" #: .././sonata/cli.py:122 msgid "Toggle play/pause; plays if stopped" msgstr "Przełączanie odtwarzania/wstrzymania; odtwarza, jeśli zatrzymane" #: .././sonata/cli.py:123 msgid "Toggle repeat mode" msgstr "Przełączanie trybu powtarzania" #: .././sonata/cli.py:124 msgid "Toggle random mode" msgstr "Przełączanie trybu losowego" #: .././sonata/cli.py:125 msgid "Display current song info" msgstr "Wyświetlenie informacji o bieżącym utworze" #: .././sonata/cli.py:126 msgid "Display MPD status" msgstr "Wyświetlenie stanu usługi MPD" #: .././sonata/cli.py:134 #, python-format msgid "Starting Sonata with profile %s..." msgstr "Uruchamianie programu Sonata z profilem %s..." #: .././sonata/cli.py:136 #, python-format msgid "%d is not an available profile number." msgstr "%d nie jest dostępnym numerem profilu." #: .././sonata/cli.py:137 #: .././sonata/cli.py:141 #, python-format msgid "Profile numbers must be between 1 and %d." msgstr "Numer profilu musi się mieścić pomiędzy 1 i %d." #: .././sonata/cli.py:140 #, python-format msgid "Python is unable to interpret %s as a number." msgstr "Python nie może zinterpretować %s jako liczby." #: .././sonata/cli.py:154 #: .././sonata/main.py:179 msgid "Default Profile" msgstr "Domyślny profil" #: .././sonata/cli.py:154 #: .././sonata/main.py:179 msgid "by" msgstr " " #: .././sonata/cli.py:154 #: .././sonata/main.py:179 msgid "from" msgstr "z" #: .././sonata/cli.py:176 msgid "" "Unable to connect to MPD.\n" "Please check your Sonata preferences or MPD_HOST/MPD_PORT environment variables." msgstr "" "Połączenie z usługą MPD niemożliwe.\n" "Proszę sprawdzić preferencje programu Sonata lub zmienne MPD_HOST/MPD_PORT." #: .././sonata/cli.py:208 #: .././sonata/info.py:91 #: .././sonata/info.py:245 #: .././sonata/library.py:49 #: .././sonata/tagedit.py:125 msgid "Title" msgstr "Tytuł" #: .././sonata/cli.py:209 #: .././sonata/info.py:91 #: .././sonata/info.py:246 #: .././sonata/library.py:49 #: .././sonata/main.py:1184 #: .././sonata/tagedit.py:126 msgid "Artist" msgstr "Wykonawca" #: .././sonata/cli.py:210 #: .././sonata/info.py:91 #: .././sonata/info.py:247 #: .././sonata/library.py:49 #: .././sonata/main.py:1185 #: .././sonata/main.py:2439 #: .././sonata/tagedit.py:127 msgid "Album" msgstr "Album" #: .././sonata/cli.py:211 #: .././sonata/info.py:91 #: .././sonata/info.py:248 msgid "Date" msgstr "Data" #: .././sonata/cli.py:212 #: .././sonata/info.py:91 #: .././sonata/info.py:250 #: .././sonata/main.py:1186 #: .././sonata/tagedit.py:130 msgid "Track" msgstr "Ścieżka" #: .././sonata/cli.py:213 #: .././sonata/info.py:91 #: .././sonata/info.py:249 #: .././sonata/library.py:49 #: .././sonata/main.py:1189 #: .././sonata/preferences.py:432 #: .././sonata/tagedit.py:139 msgid "Genre" msgstr "Gatunek" #: .././sonata/cli.py:214 #: .././sonata/info.py:91 #: .././sonata/info.py:251 #: .././sonata/main.py:1191 msgid "File" msgstr "Nazwa pliku" #: .././sonata/cli.py:219 #: .././sonata/cli.py:221 msgid "Time" msgstr "Czas" #: .././sonata/cli.py:222 #: .././sonata/info.py:91 #: .././sonata/info.py:244 msgid "Bitrate" msgstr "Gęstość bitowa" #: .././sonata/cli.py:224 msgid "MPD stopped" msgstr "Usługa MPD zatrzymana" #: .././sonata/cli.py:228 #: .././sonata/cli.py:230 #: .././sonata/cli.py:232 msgid "State" msgstr "Stan" #: .././sonata/cli.py:228 msgid "Playing" msgstr "Odtwarzanie" #: .././sonata/cli.py:230 msgid "Paused" msgstr "Wstrzymane" #: .././sonata/cli.py:232 #: .././sonata/main.py:559 #: .././sonata/main.py:564 #: .././sonata/main.py:1836 #: .././sonata/main.py:1847 msgid "Stopped" msgstr "Zatrzymane" #: .././sonata/cli.py:234 #: .././sonata/cli.py:236 msgid "Repeat" msgstr "Powtarzanie" #: .././sonata/cli.py:234 #: .././sonata/cli.py:238 msgid "Off" msgstr "Wyłączone" #: .././sonata/cli.py:236 #: .././sonata/cli.py:240 msgid "On" msgstr "Włączone" #: .././sonata/cli.py:238 #: .././sonata/cli.py:240 msgid "Random" msgstr "Losowo" #: .././sonata/cli.py:241 msgid "Volume" msgstr "Głośność" #: .././sonata/cli.py:242 msgid "Crossfade" msgstr "Płynne przejścia" #: .././sonata/cli.py:242 #: .././sonata/preferences.py:192 msgid "second" msgid_plural "seconds" msgstr[0] "sekunda" msgstr[1] "sekundy" msgstr[2] "sekund" #: .././sonata/current.py:64 msgid "Filter" msgstr "Filtr" #: .././sonata/dbus_plugin.py:83 msgid "Sonata failed to connect to the D-BUS session bus: Unable to determine the address of the message bus (try 'man dbus-launch' and 'man dbus-daemon' for help)" msgstr "Połączenie z sesją D-BUS nieudane: Niemożliwe określenie adresu magistrali wiadomości (spróbuj uzyskać pomoc w \"man dbus-launch\" i \"man dbus-deamon\")" #: .././sonata/dbus_plugin.py:96 msgid "Failed to execute remote commands." msgstr "Nieudane wykonanie zdalnych poleceń." #: .././sonata/dbus_plugin.py:98 msgid "Starting Sonata instead..." msgstr "Zamiast tego, uruchamianie programu Sonata..." #: .././sonata/dbus_plugin.py:100 msgid "Maybe Sonata is not running?" msgstr "Może program Sonata jest już uruchomiony?" #: .././sonata/dbus_plugin.py:114 msgid "An instance of Sonata is already running. Showing it..." msgstr "Instancja programu Sonata jest już uruchomiona. Wyświetlanie..." #: .././sonata/dbus_plugin.py:120 msgid "Failed to execute remote command." msgstr "Nieudane wykonanie zdalnego polecenia." #. Song info #: .././sonata/info.py:78 msgid "Song Info" msgstr "Informacje o utworze" #: .././sonata/info.py:93 msgid "Launch artist in Wikipedia" msgstr "Wyświetl wykonawcę w Wikipedii" #: .././sonata/info.py:93 msgid "Launch album in Wikipedia" msgstr "Wyświetl album w Wikipedii" #: .././sonata/info.py:127 msgid "Toggle extra tags" msgstr "Przełączanie widoczności dodatkowych znaczników" #: .././sonata/info.py:130 msgid "Edit song tags" msgstr "Modyfikacja znaczników utworu" #. Lyrics #: .././sonata/info.py:140 msgid "Lyrics" msgstr "Tekst utworu" #: .././sonata/info.py:152 msgid "Search Lyricwiki.org for lyrics" msgstr "Wyszukiwanie tekstów utworów na Lyricwiki.org" #: .././sonata/info.py:153 msgid "Edit lyrics at Lyricwiki.org" msgstr "Modyfikowanie tekstu utworu na Lyricwiki.org" #. Album info #: .././sonata/info.py:161 msgid "Album Info" msgstr "Informacje o albumie" #: .././sonata/info.py:213 #: .././sonata/info.py:218 msgid "more" msgstr "więcej" #: .././sonata/info.py:215 msgid "hide" msgstr "ukryj" #: .././sonata/info.py:281 msgid "edit tags" msgstr "modyfikuj znaczniki" #: .././sonata/info.py:308 msgid "Album info not found." msgstr "Brak informacji o albumie." #: .././sonata/info.py:311 msgid "Album name not set." msgstr "Nazwa albumu nieustalona." #: .././sonata/info.py:324 msgid "ZSI not found, fetching lyrics support disabled." msgstr "Brak modułu ZSI, obsługa pobierania tekstów utworów wyłączona. " #: .././sonata/info.py:329 msgid "Artist or song title not set." msgstr "Wykonawca lub tytuł utworu nieustalony." #: .././sonata/info.py:371 msgid "search" msgstr "szukaj" #: .././sonata/info.py:372 msgid "edit" msgstr "modyfikuj" #: .././sonata/info.py:381 #: .././sonata/info.py:436 msgid "Lyrics not found" msgstr "Brak tekstu utworu" #. Fetch lyrics from lyricwiki.org #: .././sonata/info.py:401 msgid "Fetching lyrics..." msgstr "Pobieranie tekstu utworu..." #: .././sonata/info.py:411 msgid "Couldn't connect to LyricWiki" msgstr "Nie można połączyć z LyricWiki" #: .././sonata/info.py:439 msgid "Fetching lyrics failed" msgstr "Pobranie tekstu utworu nieudane" #: .././sonata/library.py:47 msgid "Untagged" msgstr "Bez znaczników" #: .././sonata/library.py:48 msgid "Various Artists" msgstr "Różni artyści" #: .././sonata/library.py:49 msgid "Filename" msgstr "Nazwa pliku" #: .././sonata/library.py:49 msgid "Everything" msgstr "Wszystko" #: .././sonata/library.py:52 msgid "Filesystem" msgstr "System plików" #: .././sonata/library.py:53 msgid "Artists" msgstr "Wykonawcy" #: .././sonata/library.py:54 msgid "Albums" msgstr "Albumy" #: .././sonata/library.py:55 msgid "Genres" msgstr "Gatunki" #: .././sonata/library.py:84 msgid "Search terms" msgstr "Zasady wyszukiwania" #: .././sonata/library.py:90 msgid "End Search" msgstr "Przerwij przeszukiwanie" #: .././sonata/library.py:92 msgid "Library browsing view" msgstr "Widok przeglądarki kolekcji" #: .././sonata/library.py:96 msgid "Search" msgstr "Wyszukiwanie" #. Show text: #: .././sonata/library.py:761 #: .././sonata/main.py:1763 #: .././sonata/main.py:3331 msgid "song" msgid_plural "songs" msgstr[0] "utwór" msgstr[1] "utwory" msgstr[2] "utworów" #: .././sonata/library.py:761 #: .././sonata/main.py:1757 msgid "minute" msgid_plural "minutes" msgstr[0] "minuta" msgstr[1] "minuty" msgstr[2] "minut" #: .././sonata/library.py:849 msgid "Song" msgstr "Utwór" #: .././sonata/library.py:849 #: .././sonata/main.py:1190 msgid "Path" msgstr "Ścieżka" #. Constants #: .././sonata/main.py:102 msgid "Current" msgstr "Bieżąca" #: .././sonata/main.py:103 msgid "Library" msgstr "Kolekcja" #: .././sonata/main.py:104 msgid "Playlists" msgstr "Listy odtwarzania" #: .././sonata/main.py:105 msgid "Streams" msgstr "Strumienie" #: .././sonata/main.py:106 msgid "Info" msgstr "Informacje" #: .././sonata/main.py:137 #: .././sonata/preferences.py:193 #: .././sonata/preferences.py:194 msgid "Entire song" msgstr "Cały utwór" #: .././sonata/main.py:234 msgid "_Sort List" msgstr "_Sortuj listę" #: .././sonata/main.py:235 msgid "Sa_ve List to" msgstr "Z_apisz listę do" #: .././sonata/main.py:236 msgid "_Connection" msgstr "_Połączenie" #: .././sonata/main.py:237 msgid "P_lay after" msgstr "Odt_warzaj po" #: .././sonata/main.py:238 #: .././sonata/main.py:2454 msgid "_Update" msgstr "_Aktualizuj" #: .././sonata/main.py:239 msgid "Use _Remote Image..." msgstr "Użyj zdalnego ob_razu..." #: .././sonata/main.py:240 msgid "Use _Local Image..." msgstr "Użyj _lokalnego obrazu..." #: .././sonata/main.py:241 msgid "_Fullscreen Mode" msgstr "_Tryb pełnoekranowy" #: .././sonata/main.py:242 msgid "Reset Image" msgstr "Przywróć obraz" #: .././sonata/main.py:243 msgid "_Play" msgstr "_Odtwarzaj" #: .././sonata/main.py:244 msgid "Pa_use" msgstr "_Wstrzymaj" #: .././sonata/main.py:245 msgid "_Stop" msgstr "_Zatrzymaj" #: .././sonata/main.py:246 msgid "Pre_vious" msgstr "_Poprzedni" #: .././sonata/main.py:247 msgid "_Next" msgstr "_Następny" #: .././sonata/main.py:248 msgid "_Quit" msgstr "_Zakończ" #: .././sonata/main.py:249 msgid "_Remove" msgstr "_Usuń" #: .././sonata/main.py:250 msgid "_Clear" msgstr "_Wyczyść" #: .././sonata/main.py:251 msgid "_Entire Library" msgstr "_Całą kolekcję" #: .././sonata/main.py:252 msgid "_Selected Items" msgstr "Zaznaczone _elementy" #: .././sonata/main.py:253 msgid "_Preferences..." msgstr "P_referencje..." #: .././sonata/main.py:254 msgid "_About..." msgstr "_O programie..." #: .././sonata/main.py:255 msgid "_Edit Tags..." msgstr "Modyfikuj z_naczniki..." #: .././sonata/main.py:256 msgid "_Add" msgstr "_Dodaj" #: .././sonata/main.py:257 msgid "_Replace" msgstr "Za_mień" #: .././sonata/main.py:258 msgid "Add" msgstr "Dodaniu" #: .././sonata/main.py:259 msgid "Replace" msgstr "Zamianie" #: .././sonata/main.py:260 msgid "_Delete..." msgstr "Us_uń..." #: .././sonata/main.py:261 msgid "Shuffle" msgstr "Odtwarzanie losowe" #: .././sonata/main.py:286 msgid "S_how Sonata" msgstr "_Wyświetlanie głównego okna" #: .././sonata/main.py:287 msgid "_Repeat" msgstr "Pow_tarzanie" #: .././sonata/main.py:288 msgid "Rando_m" msgstr "_Losowo" #: .././sonata/main.py:428 msgid "By Artist" msgstr "Wg wykonawcy" #: .././sonata/main.py:429 msgid "By Album" msgstr "Wg albumu" #: .././sonata/main.py:430 msgid "By Song Title" msgstr "Wg tytułu utworu" #: .././sonata/main.py:431 msgid "By File Name" msgstr "Wg nazwy pliku" #: .././sonata/main.py:432 msgid "By Dir & File Name" msgstr "Wg katalogu i nazwy pliku" #: .././sonata/main.py:433 msgid "Reverse List" msgstr "Odwróć kolejność listy" #: .././sonata/main.py:456 #: .././sonata/main.py:467 msgid "_New..." msgstr "_Nowy..." #: .././sonata/main.py:457 msgid "_Edit..." msgstr "_Modyfikuj..." #: .././sonata/main.py:468 msgid "_Rename..." msgstr "_Zmień nazwę..." #: .././sonata/main.py:530 #: .././sonata/main.py:597 #: .././sonata/main.py:598 msgid "Playlist" msgstr "Lista odtwarzania" #: .././sonata/main.py:560 #: .././sonata/main.py:1840 #: .././sonata/main.py:2049 msgid "Click to expand" msgstr "Kliknięcie rozwinie okno" #: .././sonata/main.py:565 #: .././sonata/main.py:1838 #: .././sonata/main.py:2047 msgid "Click to collapse" msgstr "Kliknięcie zwinie okno" #: .././sonata/main.py:570 #: .././sonata/main.py:1732 #: .././sonata/main.py:1843 msgid "Not Connected" msgstr "Nie połączony" #: .././sonata/main.py:572 #: .././sonata/main.py:1730 #: .././sonata/main.py:1845 msgid "No Read Permission" msgstr "Brak zezwolenia na odczyt" #: .././sonata/main.py:645 msgid "Cover Art" msgstr "Okładka albumu" #: .././sonata/main.py:850 #: .././sonata/main.py:863 #: .././sonata/main.py:884 msgid "Profile" msgstr "Profil" #: .././sonata/main.py:863 #: .././sonata/main.py:864 #: .././sonata/main.py:884 msgid "MPD_HOST/PORT" msgstr "KOMPUTER_Z_MPD/PORT" #: .././sonata/main.py:865 #: .././sonata/main.py:871 msgid "Disconnect" msgstr "Rozłącz" #: .././sonata/main.py:1187 #: .././sonata/main.py:1194 msgid "#" msgstr "#" #: .././sonata/main.py:1188 #: .././sonata/preferences.py:431 #: .././sonata/tagedit.py:128 msgid "Year" msgstr "Rok" #: .././sonata/main.py:1192 msgid "Stream" msgstr "Strumień" #: .././sonata/main.py:1193 msgid "Len" msgstr "Długość" #: .././sonata/main.py:1214 #: .././sonata/main.py:1221 #: .././sonata/main.py:1262 #: .././sonata/main.py:1269 msgid "Unknown" msgstr "Nieznany" #: .././sonata/main.py:1753 msgid "day" msgid_plural "days" msgstr[0] "dzień" msgstr[1] "dni" msgstr[2] "dni" #: .././sonata/main.py:1761 msgid "hour" msgid_plural "hours" msgstr[0] "godzina" msgstr[1] "godziny" msgstr[2] "godzin" #: .././sonata/main.py:1766 #: .././sonata/main.py:1768 msgid "and" msgstr "i" #: .././sonata/main.py:1776 msgid "(updating mpd)" msgstr "(aktualizowanie mpd)" #: .././sonata/main.py:2116 msgid "Lyrics Search" msgstr "Wyszukiwanie tekstów utworów" #: .././sonata/main.py:2117 msgid "_Search" msgstr "Wy_szukiwanie" #: .././sonata/main.py:2120 msgid "Artist Name" msgstr "Nazwa wykonawcy" #: .././sonata/main.py:2125 msgid "Song Title" msgstr "Tytuł utworu" #: .././sonata/main.py:2377 msgid "Open Image" msgstr "Otwórz obraz" #: .././sonata/main.py:2379 msgid "Images" msgstr "Obrazy" #: .././sonata/main.py:2383 msgid "All files" msgstr "Wszystkie pliki" #: .././sonata/main.py:2425 msgid "Choose Cover Art" msgstr "Wybierz okładkę albumu" #: .././sonata/main.py:2426 msgid "C_hoose" msgstr "W_ybierz" #: .././sonata/main.py:2459 msgid "Edit search terms" msgstr "Modyfikuj zasady wyszukiwania" #: .././sonata/main.py:2516 msgid "No artist or album name found." msgstr "Nie odnaleziono nazwy albumu lub wykonawcy." #: .././sonata/main.py:2519 msgid "No cover art found." msgstr "Nie odnaleziono okładek." #: .././sonata/main.py:2843 msgid "Delete the selected playlist?" msgid_plural "Delete the selected playlists?" msgstr[0] "Usunąć zaznaczoną listę odtwarzania?" msgstr[1] "Usunąć zaznaczone listy odtwarzania?" msgstr[2] "Usunąć zaznaczone listy odtwarzania?" #: .././sonata/main.py:2843 msgid "Delete Playlist" msgid_plural "Delete Playlists" msgstr[0] "Usuń listę odtwarzania" msgstr[1] "Usuń listy odtwarzania" msgstr[2] "Usuń listy odtwarzania" #: .././sonata/main.py:2851 msgid "Delete the selected stream?" msgid_plural "Delete the selected streams?" msgstr[0] "Usunąć zaznaczony strumień?" msgstr[1] "Usunąć zaznaczone strumienie?" msgstr[2] "Usunąć zaznaczone strumienie?" #: .././sonata/main.py:2851 msgid "Delete Stream" msgid_plural "Delete Streams" msgstr[0] "Usuń strumień" msgstr[1] "Usuń strumienie" msgstr[2] "Usuń strumienie" #: .././sonata/main.py:2909 msgid "To save lyrics to the music file's directory, you must specify a valid music directory." msgstr "Aby zapisywać teksty utworów do katalogu z plikiem muzycznym, proszę określić prawidłowy katalog z muzyką." #: .././sonata/main.py:2909 #: .././sonata/main.py:2916 msgid "Music Dir Verification" msgstr "Sprawdzanie katalogu z muzyką" #: .././sonata/main.py:2916 msgid "To save artwork to the music file's directory, you must specify a valid music directory." msgstr "Aby zapisywać okładki do katalogu z plikiem muzycznym, proszę określić prawidłowy katalog z muzyką." #: .././sonata/main.py:3332 msgid "album" msgid_plural "albums" msgstr[0] "album" msgstr[1] "albumy" msgstr[2] "albumów" #: .././sonata/main.py:3333 msgid "artist" msgid_plural "artists" msgstr[0] "wykonawca" msgstr[1] "wykonawców" msgstr[2] "wykonawców" #: .././sonata/main.py:3340 msgid "day of bliss" msgid_plural "days of bliss" msgstr[0] "dzień oczarowania" msgstr[1] "dni oczarowania" msgstr[2] "dni oczarowania" #: .././sonata/main.py:3342 msgid "hour of bliss" msgid_plural "hours of bliss" msgstr[0] "godzina oczarowania" msgstr[1] "godziny oczarowania" msgstr[2] "godzin oczarowania" #: .././sonata/playlists.py:103 #: .././sonata/playlists.py:105 msgid "Save Playlist" msgstr "Zapisz listę odtwarzania" #: .././sonata/playlists.py:120 msgid "Would you like to replace the existing playlist or append these songs?" msgstr "Zamienić istniejącą listę odtwarzania, czy dodać te utwory?" #: .././sonata/playlists.py:120 msgid "Existing Playlist" msgstr "Istniejąca lista odtwarzania" #: .././sonata/playlists.py:120 msgid "Replace playlist" msgstr "Zamień listę odtwarzania" #: .././sonata/playlists.py:120 msgid "Append songs" msgstr "Dodaj utwory" #: .././sonata/playlists.py:141 msgid "A playlist with this name already exists. Would you like to replace it?" msgstr "Lista odtwarzania o tej nazwie już istnieje. Zastąpić ją?" #: .././sonata/playlists.py:153 msgid "Playlist name" msgstr "Nazwa listy odtwarzania" #: .././sonata/playlists.py:182 #: .././sonata/playlists.py:186 msgid "Rename Playlist" msgstr "Zmień nazwę listy odtwarzania" #. Constants: #: .././sonata/preferences.py:35 msgid "System tray" msgstr "Zasobnik systemowy" #: .././sonata/preferences.py:35 msgid "Top Left" msgstr "Górny lewy" #: .././sonata/preferences.py:35 msgid "Top Right" msgstr "Górny prawy" #: .././sonata/preferences.py:35 msgid "Bottom Left" msgstr "Dolny lewy" #: .././sonata/preferences.py:35 msgid "Bottom Right" msgstr "Dolny prawy" #: .././sonata/preferences.py:35 msgid "Screen Center" msgstr "Środek ekranu" #. MPD tab #: .././sonata/preferences.py:64 msgid "MPD Connection" msgstr "Połączenie z usługą MPD" #: .././sonata/preferences.py:76 msgid "_Name" msgstr "_Nazwa" #: .././sonata/preferences.py:79 msgid "_Host" msgstr "_Komputer" #: .././sonata/preferences.py:82 msgid "_Port" msgstr "_Port" #: .././sonata/preferences.py:86 msgid "_Music dir" msgstr "K_atalog z muzyką" #: .././sonata/preferences.py:87 msgid "Select a Music Directory" msgstr "Wybór katalogu z muzyką" #: .././sonata/preferences.py:91 msgid "Pa_ssword" msgstr "_Hasło" #: .././sonata/preferences.py:94 msgid "Leave blank if no password is required." msgstr "Proszę zostawić puste, jeśli hasło nie jest wymagane." #: .././sonata/preferences.py:95 msgid "_Autoconnect on start" msgstr "_Automatyczne połączenie podczas uruchamiania" #: .././sonata/preferences.py:113 msgid "Using MPD_HOST/PORT" msgstr "Używanie MPD_HOST/PORT" #: .././sonata/preferences.py:163 #: .././sonata/preferences.py:536 msgid "Extras" msgstr "Dodatki" #: .././sonata/preferences.py:168 msgid "_Audioscrobbling (Last.fm)" msgstr "_Audioscrobbling (Last.fm)" #: .././sonata/preferences.py:170 msgid "_Username:" msgstr "_Nazwa użytkownika:" #: .././sonata/preferences.py:171 msgid "_Password:" msgstr "_Hasło:" #: .././sonata/preferences.py:188 msgid "Popup _notification on song changes" msgstr "_Wyskakujące powiadamianie o zmianie utworu" #: .././sonata/preferences.py:210 msgid "Fade length" msgstr "Długość wyciszania" #: .././sonata/preferences.py:211 msgid "_Fade length" msgstr "_Długość wyciszania" #: .././sonata/preferences.py:213 msgid "sec" msgstr "s" #: .././sonata/preferences.py:218 msgid "C_rossfade" msgstr "_Płynne przejścia" #. Display tab #: .././sonata/preferences.py:246 #: .././sonata/preferences.py:533 msgid "Display" msgstr "Wyświetlanie" #: .././sonata/preferences.py:251 msgid "_Album art" msgstr "_Okładka albumu" #: .././sonata/preferences.py:253 msgid "Standard" msgstr "Standardowy" #: .././sonata/preferences.py:253 msgid "Stylized" msgstr "Stylizowany" #: .././sonata/preferences.py:256 msgid "Artwork style:" msgstr "Styl okładek:" #: .././sonata/preferences.py:258 msgid "Local only" msgstr "Tylko lokalne" #: .././sonata/preferences.py:258 msgid "Local and remote" msgstr "Lokalne i zdalne" #: .././sonata/preferences.py:260 msgid "Search locations:" msgstr "Położenia wyszukiwania:" #: .././sonata/preferences.py:267 #: .././sonata/preferences.py:289 msgid "SONG_DIR" msgstr "KATALOG_Z_MUZYKĄ" #: .././sonata/preferences.py:269 msgid "custom" msgstr "własna" #: .././sonata/preferences.py:274 msgid "Save art to:" msgstr "Zapisywanie okładek do:" #: .././sonata/preferences.py:277 msgid "_Playback/volume buttons" msgstr "_Przyciski odtwarzania/poziomu głośności" #: .././sonata/preferences.py:280 msgid "Pr_ogressbar" msgstr "Pa_sek postępu" #: .././sonata/preferences.py:283 msgid "_Statusbar" msgstr "Pase_k stanu" #: .././sonata/preferences.py:286 msgid "Song Ly_rics" msgstr "_Tekst utworu" #: .././sonata/preferences.py:288 msgid "Save lyrics to:" msgstr "Zapisywanie tekstów utworów do:" #: .././sonata/preferences.py:297 msgid "System _tray icon" msgstr "_Zasobnik systemowy" #. Behavior tab #: .././sonata/preferences.py:319 msgid "Window Behavior" msgstr "Zachowanie okna" #: .././sonata/preferences.py:323 msgid "_Show window on all workspaces" msgstr "_Okno na wszystkich obszarach roboczych" #: .././sonata/preferences.py:326 msgid "_Keep window above other windows" msgstr "O_kno programu Sonata powyżej innych okien" #: .././sonata/preferences.py:329 msgid "_Hide window titlebar" msgstr "_Bez paska tytułowego okna" #: .././sonata/preferences.py:334 msgid "_Minimize to system tray on close/escape" msgstr "Mi_nimalizacja do zasobnika systemowego podczas zamykania" #: .././sonata/preferences.py:336 msgid "If enabled, closing Sonata will minimize it to the system tray. Note that it's currently impossible to detect if there actually is a system tray, so only check this if you have one." msgstr "Określa, czy zamykanie programu Sonata zminimalizuje okno do zasobnika systemowego. Obecnie nie jest możliwe wykrycie, czy system dysponuje zasobnikiem systemowym, więc należy się upewnić, że istnieje." #: .././sonata/preferences.py:350 msgid "Miscellaneous" msgstr "Różne" #: .././sonata/preferences.py:354 msgid "_Update MPD library on start" msgstr "_Aktualizowanie kolekcji usługi MPD podczas uruchamiania" #: .././sonata/preferences.py:356 msgid "If enabled, Sonata will automatically update your MPD library when it starts up." msgstr "Określa, czy program Sonata będzie automatycznie aktualizować bibliotekę usługi MPD podczas uruchamiania." #: .././sonata/preferences.py:358 msgid "S_top playback on exit" msgstr "_Zatrzymywanie odtwarzania przy zakończeniu" #: .././sonata/preferences.py:360 msgid "MPD allows playback even when the client is not open. If enabled, Sonata will behave like a more conventional music player and, instead, stop playback upon exit." msgstr "Usługa MPD pozwala na odtwarzanie nawet gdy klient nie jest otwarty. Określa, czy program Sonata będzie zachowywać się jak bardziej konwencjonalny odtwarzacz i będzie zatrzymywać odtwarzanie po zakończeniu." #: .././sonata/preferences.py:362 msgid "_Write status file:" msgstr "Zapi_sywanie pliku stanu:" #: .././sonata/preferences.py:364 #: .././sonata/preferences.py:366 msgid "If enabled, Sonata will create a xmms-infopipe like file containing information about the current song. Many applications support the xmms-info file (Instant Messengers, IRC Clients...)" msgstr "Określa, czy program Sonata utworzy plik typu xmms-infopipe zawierający informacje o bieżącym utworze. Wiele aplikacji obsługuje plik xmms-info (komunikatory, klienty IRC...)" #. Format tab #: .././sonata/preferences.py:392 msgid "Song Formatting" msgstr "Formatowanie utworów" #: .././sonata/preferences.py:397 msgid "C_urrent playlist:" msgstr "_Bieżąca lista odtwarzania:" #: .././sonata/preferences.py:398 msgid "_Library:" msgstr "_Kolekcja:" #: .././sonata/preferences.py:399 msgid "_Window title:" msgstr "_Tytuł okna:" #: .././sonata/preferences.py:400 msgid "Current _song line 1:" msgstr "Bi_eżący utwór wiersz 1:" #: .././sonata/preferences.py:402 msgid "Current s_ong line 2:" msgstr "Bieżą_cy utwór wiersz 2:" #: .././sonata/preferences.py:422 msgid "Available options" msgstr "Dostępne opcje" #. XXX get these directly from the formatting function: #: .././sonata/preferences.py:426 msgid "Artist name" msgstr "Wykonawca" #: .././sonata/preferences.py:427 msgid "Album name" msgstr "Album" #: .././sonata/preferences.py:428 msgid "Track name" msgstr "Nazwa ścieżki" #: .././sonata/preferences.py:429 msgid "Track number" msgstr "Numer ścieżki" #: .././sonata/preferences.py:430 msgid "Disc number" msgstr "Numer płyty" #: .././sonata/preferences.py:433 msgid "File path" msgstr "Ścieżka do pliku" #: .././sonata/preferences.py:434 msgid "File name" msgstr "Nazwa pliku" #: .././sonata/preferences.py:435 #: .././sonata/streams.py:109 msgid "Stream name" msgstr "Nazwa strumienia" #: .././sonata/preferences.py:436 msgid "Song length" msgstr "Długość utworu" #: .././sonata/preferences.py:437 msgid "Elapsed time (title only)" msgstr "Upłynęło czasu (tylko tytuł)" #: .././sonata/preferences.py:448 msgid "Info displayed only if all enclosed tags are defined" msgstr "Informacje wyświetlane tylko, jeśli wszystkie zawarte znaczniki są zdefiniowane" #: .././sonata/preferences.py:448 msgid "Creates columns in the current playlist" msgstr "Tworzenie kolumn w bieżącej liście odtwarzania" #: .././sonata/preferences.py:473 msgid "_About" msgstr "_O programie" #: .././sonata/preferences.py:474 msgid "_Configure..." msgstr "_Konfiguruj..." #: .././sonata/preferences.py:513 msgid "Loaded" msgstr "Wczytano" #: .././sonata/preferences.py:521 msgid "Description" msgstr "Opis" #. Set up table #: .././sonata/preferences.py:532 msgid "MPD" msgstr "MPD" #: .././sonata/preferences.py:534 msgid "Behavior" msgstr "Zachowanie" #: .././sonata/preferences.py:535 msgid "Format" msgstr "Format" #: .././sonata/preferences.py:605 msgid "New Profile" msgstr "Nowy profil" #. Prompt user for playlist name: #: .././sonata/preferences.py:659 msgid "Custom Artwork" msgstr "Własna okładka" #: .././sonata/preferences.py:661 msgid "Artwork filename" msgstr "Nazwa pliku okładki" #: .././sonata/streams.py:105 msgid "Edit Stream" msgstr "Modyfikuj strumień" #: .././sonata/streams.py:107 #: .././sonata/streams.py:138 msgid "New Stream" msgstr "Nowy strumień" #: .././sonata/streams.py:116 msgid "Stream URL" msgstr "URL strumienia" #: .././sonata/streams.py:138 msgid "A stream with this name already exists. Would you like to replace it?" msgstr "Strumień o tej nazwie już istnieje. Zastąpić go?" #: .././sonata/tagedit.py:61 msgid "Taglib and/or tagpy not found, tag editing support disabled." msgstr "Brak modułu Taglib i/lub tagpy, obsługa modyfikowania znaczników wyłączona." #: .././sonata/tagedit.py:61 #: .././sonata/tagedit.py:70 #: .././sonata/tagedit.py:75 #: .././sonata/tagedit.py:99 #: .././sonata/tagedit.py:103 #: .././sonata/tagedit.py:260 #: .././sonata/tagedit.py:299 msgid "Edit Tags" msgstr "Modyfikowanie znaczników" #: .././sonata/tagedit.py:70 msgid "Tagpy version < 0.91. Please upgrade to a newer version, tag editing support disabled." msgstr "Wersja biblioteki Tagpy < 0.91, obsługa modyfikowania znaczników wyłączona." #: .././sonata/tagedit.py:75 msgid "The path" msgstr "Ścieżka" #: .././sonata/tagedit.py:75 msgid "does not exist. Please specify a valid music directory in preferences." msgstr "nie istnieje. Proszę określić prawidłowy katalog z muzyką w preferencjach." #: .././sonata/tagedit.py:99 msgid "File " msgstr "Plik" #: .././sonata/tagedit.py:99 msgid " not found. Please specify a valid music directory in preferences." msgstr " nie odnaleziono. Proszę określić prawidłowy katalog z muzyką w preferencjach." #: .././sonata/tagedit.py:103 msgid "No music files with editable tags found." msgstr "Brak utworów z możliwością modyfikacji znaczników." #: .././sonata/tagedit.py:150 msgid "Comment" msgstr "Komentarz" #. Only show save all button if more than one song being edited. #: .././sonata/tagedit.py:161 msgid "Save _All" msgstr "Z_apisz wszystko" #: .././sonata/tagedit.py:207 msgid "Increment each selected music file, starting at track 1 for this file." msgstr "Zwiększanie każdego zaznaczonego utworu o jeden, zaczynając od ścieżki 1 dla tego pliku." #: .././sonata/tagedit.py:209 msgid "Apply to all selected music files." msgstr "Zastosowanie do wszystkich zaznaczonych utworów." #: .././sonata/tagedit.py:260 msgid "of" msgstr "z" #. FIXME: was (save_success and self.conn and self.status): #: .././sonata/tagedit.py:299 msgid "Unable to save tag to music file." msgstr "Nie można zapisać znacznika w utworze." #: .././sonata/tagedit.py:366 msgid "Hide file path" msgstr "Ukryj ścieżkę do pliku" #: .././sonata/tagedit.py:369 msgid "Show file path" msgstr "Wyświetl ścieżkę do pliku" #~ msgid "The popup argument requires D-Bus. Aborting." #~ msgstr "Argument wyskakujących okien wymaga D-Bus. Przerywanie." #, fuzzy #~ msgid "_Update Path" #~ msgstr "A_ktualizuj" #~ msgid "Website: http://www.nongnu.org/sonata/" #~ msgstr "Strona WWW: http://www.nongnu.org/sonata/" #~ msgid "Enable Audioscrobbler" #~ msgstr "Audioscrobbler" #~ msgid "Enable Crossfade" #~ msgstr "Płynne przejścia" #~ msgid "Enable album art" #~ msgstr "Okładki" #~ msgid "Enable lyrics" #~ msgstr "Teksty utworów" #~ msgid "Enable system tray icon" #~ msgstr "Ikona w zasobniku systemowym" #~ msgid "_Display" #~ msgstr "_Wyświetlanie" #~ msgid "_Extras" #~ msgstr "_Dodatki" #~ msgid "" #~ "PyGTK+ 2.10 or gnome-python-extras not found, system tray support " #~ "disabled." #~ msgstr "" #~ "Brak PyGTK+ 2.10 lub gnome-python-extras, obsługa zasobnika systemowego " #~ "wyłączona." #~ msgid "Reset to Default" #~ msgstr "Przywróć domyślne" #~ msgid "_New Playlist..." #~ msgstr "_Nowa lista odtwarzania..." #~ msgid "Notification" #~ msgstr "Powiadamianie" #~ msgid "" #~ "Python 2.5 or python-elementtree not found, audioscrobbler support " #~ "disabled." #~ msgstr "" #~ "Brak Python 2.5 lub python-elementtree, obsługa audioscrobbler wyłączona." #~ msgid "Audioscrobbler Verification" #~ msgstr "Weryfikacja Audioscrobbler" #~ msgid "Update library for selected item(s)" #~ msgstr "Aktualizowanie kolekcji dla zaznaczonego elementu (elementów)" #~ msgid "_Shuffle" #~ msgstr "Odtwarzanie _losowe" #~ msgid "Toggle shuffle mode" #~ msgstr "Przełączanie trybu odtwarzania losowego" #~ msgid "Not connected" #~ msgstr "Niepołączony" #~ msgid "Press enter to search for these terms." #~ msgstr "Proszę nacisnąć ENTER, aby wyszukać wg tych zasad." #~ msgid "Add new profile" #~ msgstr "Dodaj nowy profil" #~ msgid "Remove current profile" #~ msgstr "Usuń bieżący profil" #~ msgid "Play enqueued files on activate" #~ msgstr "Odtwarzanie zakolejkowanych utworów po aktywacji" #~ msgid "" #~ "Automatically play enqueued items when activated via double-click or " #~ "enter." #~ msgstr "" #~ "Automatyczne odtwarzanie zakolejkowanych elementów po aktywacji podwójnym " #~ "kliknięciem lub klawiszem Enter." #~ msgid "Add selected song(s) or directory(s)" #~ msgstr "Dodanie zaznaczonego utworu (utworów) lub katalogu (katalogów)" #~ msgid "Replace with selected song(s) or directory(s)" #~ msgstr "Zamiana na zaznaczony utwór (utwory) lub katalog (katalogi)" #~ msgid "Add to _Queue" #~ msgstr "Dodaj do _kolejki" #~ msgid "Remove from _Queue" #~ msgstr "Usuń z _kolejki" #~ msgid "Add selected song(s) to playlist queue" #~ msgstr "Dodanie zaznaczonego utworu (utworów) do kolejki listy odtwarzania" #~ msgid "Remove selected song(s) from playlist queue" #~ msgstr "Usunięcie zaznaczonego utworu (utworów) z kolejki listy odtwarzania" #~ msgid "seconds" #~ msgstr "sekund" #~ msgid "Song Info..." #~ msgstr "Informacje o utworze..." #~ msgid "Click to collapse the player" #~ msgstr "Kliknięcie spowoduje zwinięcie odtwarzacza" #~ msgid "Click to expand the player" #~ msgstr "Kliknięcie spowoduje rozwinięcie odtwarzacza" #~ msgid "_Song Info" #~ msgstr "_Informacje o utworze" #~ msgid "S_earch..." #~ msgstr "Wyszukiwani_e..." #~ msgid "Remote only" #~ msgstr "Tylko zdalne" #~ msgid "Remote, then local" #~ msgstr "Zdalne, następnie lokalne" #~ msgid "To save artwork as" #~ msgstr "Aby zapisać okładkę jako" #~ msgid "Artwork Verification" #~ msgstr "Sprawdzanie okładek" #~ msgid "Switch to current playlist" #~ msgstr "Przełączenie do bieżącej listy odtwarzania" #~ msgid "Toggle filter bar for jumping straight to track" #~ msgstr "Przełączenie paska filtra do przechodzenia bezpośrednio do ścieżki" #~ msgid "Song name" #~ msgstr "Utwór" #~ msgid "songs." #~ msgstr "utworów." #~ msgid "By" #~ msgstr "Przez" #~ msgid "Enable" #~ msgstr "Włączenie" #~ msgid "Dis_play" #~ msgstr "Wyś_wietlanie" #, fuzzy #~ msgid "album.jpg" #~ msgstr "albumów." #~ msgid "_Show Player" #~ msgstr "_Wyświetl odtwarzacz" #~ msgid "Enable volume button" #~ msgstr "Wyświetlanie przycisków głośności" #~ msgid "_Help" #~ msgstr "P_omoc" #~ msgid "by Unknown" #~ msgstr "- Nieznany" #~ msgid "Show album covers" #~ msgstr "Wyświetlaj okładki albumów" #~ msgid "Show library searchbar" #~ msgstr "Wyświetlaj pasek wyszukiwania kolekcji" #~ msgid "Unknown Artist" #~ msgstr "Nieznany artysta" #~ msgid "Unknown Album" #~ msgstr "Nieznany album" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/po/pt_BR.po����������������������������������������������������������������������������0000664�0000000�0000000�00000123317�13771420143�0015001�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # # Alex Tercete Matos <alextercete@gmail.com> msgid "" msgstr "" "Project-Id-Version: Sonata 1.3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-03-22 22:01-0600\n" "PO-Revision-Date: 2007-10-25 00:15-0300\n" "Last-Translator: Alex Tercete Matos <alextercete@gmail.com>\n" "Language-Team: Brazilian Portuguese <pt_BR@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #. define the shortcuts and their descriptions #. these are all gettextable #: .././sonata/about.py:52 msgid "About Sonata" msgstr "Sobre o Sonata" #: .././sonata/about.py:53 .././sonata/preferences.py:60 msgid "Preferences" msgstr "Preferências" #: .././sonata/about.py:54 msgid "Fullscreen Artwork Mode" msgstr "" #: .././sonata/about.py:55 #, fuzzy msgid "Switch to [1st-5th] tab" msgstr "Alternar para os streams" #: .././sonata/about.py:56 msgid "Connect to MPD" msgstr "Conectar ao servidor MPD" #: .././sonata/about.py:57 msgid "Disconnect from MPD" msgstr "Desconectar do servidor MPD" #: .././sonata/about.py:58 #, fuzzy msgid "Randomize current playlist" msgstr "Lista de reprodução atual:" #: .././sonata/about.py:59 msgid "Expand player" msgstr "Expandir o reprodutor de músicas" #: .././sonata/about.py:60 #, fuzzy msgid "Switch to previous tab" msgstr "Alternar para as listas de reprodução" #: .././sonata/about.py:61 #, fuzzy msgid "Switch to next tab" msgstr "Alternar para os streams" #: .././sonata/about.py:62 msgid "Collapse player" msgstr "Recolher o reprodutor de músicas" #: .././sonata/about.py:63 .././sonata/library.py:86 #, fuzzy msgid "Search library" msgstr "Alternar para a biblioteca" #: .././sonata/about.py:64 msgid "Quit" msgstr "Sair" #: .././sonata/about.py:65 msgid "Update entire library" msgstr "Atualizar toda a biblioteca" #: .././sonata/about.py:66 msgid "Display popup menu" msgstr "Mostrar o menu" #: .././sonata/about.py:67 msgid "Minimize to system tray (if enabled)" msgstr "Enviar para a área de notificação (se habilitada)" #: .././sonata/about.py:69 msgid "Previous track" msgstr "Faixa anterior" #: .././sonata/about.py:70 msgid "Next track" msgstr "Próxima faixa" #: .././sonata/about.py:71 msgid "Play/Pause" msgstr "Reproduzir/Pausar" #: .././sonata/about.py:72 msgid "Stop" msgstr "Parar" #: .././sonata/about.py:73 msgid "Lower the volume" msgstr "Abaixar o volume" #: .././sonata/about.py:74 msgid "Raise the volume" msgstr "Aumentar o volume" #: .././sonata/about.py:76 msgid "Play selected song" msgstr "Reproduzir a música selecionada" #: .././sonata/about.py:77 msgid "Remove selected song(s)" msgstr "Remover as música(s) selecionada(s)" #: .././sonata/about.py:78 msgid "Center currently playing song" msgstr "Concentrar a música atual em execução" #: .././sonata/about.py:79 .././sonata/about.py:88 msgid "Edit selected song's tags" msgstr "Editar as tags das músicas selecionadas" #: .././sonata/about.py:80 #, fuzzy msgid "Save to new playlist" msgstr "Salvar lista de reprodução" #: .././sonata/about.py:81 msgid "Clear list" msgstr "Limpar lista de reprodução" #: .././sonata/about.py:82 #, fuzzy msgid "Randomize list" msgstr "Renomear lista de reprodução" #: .././sonata/about.py:84 msgid "Add selected song(s) or enter directory" msgstr "Adicionar a(s) música(s) selecionada(s) ou entra no diretório" #: .././sonata/about.py:85 msgid "Go to parent directory" msgstr "Voltar para o diretório anterior" #: .././sonata/about.py:86 #, fuzzy msgid "Add selected item(s)" msgstr "Adicionar o(s) stream(s) selecionado(s)" #: .././sonata/about.py:87 #, fuzzy msgid "Replace with selected item(s)" msgstr "Substituir pelo(s) stream(s) selecionado(s)" #: .././sonata/about.py:89 #, fuzzy msgid "Add selected item(s) and play" msgstr "Adicionar o(s) stream(s) selecionado(s)" #: .././sonata/about.py:90 #, fuzzy msgid "Replace with selected item(s) and play" msgstr "Substituir pelo(s) stream(s) selecionado(s)" #: .././sonata/about.py:91 #, fuzzy msgid "Update selected item(s)/path(s)" msgstr "Adicionar o(s) stream(s) selecionado(s)" #: .././sonata/about.py:93 .././sonata/about.py:95 msgid "Add selected playlist(s)" msgstr "Adicionar a(s) lista(s) de reprodução selecionada(s)" #: .././sonata/about.py:94 msgid "Remove selected playlist(s)" msgstr "Remover a(s) lista(s) de reprodução selecionada(s)" #: .././sonata/about.py:96 msgid "Replace with selected playlist(s)" msgstr "Substituir pela(s) lista(s) de reprodução selecionada(s)" #: .././sonata/about.py:97 #, fuzzy msgid "Add selected playlist(s) and play" msgstr "Adicionar a(s) lista(s) de reprodução selecionada(s)" #: .././sonata/about.py:98 #, fuzzy msgid "Replace with selected playlist(s) and play" msgstr "Substituir pela(s) lista(s) de reprodução selecionada(s)" #: .././sonata/about.py:100 .././sonata/about.py:102 msgid "Add selected stream(s)" msgstr "Adicionar o(s) stream(s) selecionado(s)" #: .././sonata/about.py:101 msgid "Remove selected stream(s)" msgstr "Remover o(s) stream(s) selecionado(s)" #: .././sonata/about.py:103 msgid "Replace with selected stream(s)" msgstr "Substituir pelo(s) stream(s) selecionado(s)" #: .././sonata/about.py:104 #, fuzzy msgid "Add selected stream(s) and play" msgstr "Adicionar o(s) stream(s) selecionado(s)" #: .././sonata/about.py:105 #, fuzzy msgid "Replace with selected stream(s) and play" msgstr "Substituir pelo(s) stream(s) selecionado(s)" #: .././sonata/about.py:107 #, fuzzy msgid "Edit playing song's tags" msgstr "Editar as tags das músicas selecionadas" #. define the main array- this adds headings to each section of #. shortcuts that will be displayed #: .././sonata/about.py:110 msgid "Main Shortcuts" msgstr "Atalhos principais" #: .././sonata/about.py:111 msgid "Playback Shortcuts" msgstr "Atalhos de reprodução" #: .././sonata/about.py:112 msgid "Current Shortcuts" msgstr "Atalhos da lista de reprodução atual" #: .././sonata/about.py:113 msgid "Library Shortcuts" msgstr "Atalhos da biblioteca" #: .././sonata/about.py:114 msgid "Playlist Shortcuts" msgstr "Atalhos das listas de reprodução" #: .././sonata/about.py:115 msgid "Stream Shortcuts" msgstr "Atalhos dos streams" #: .././sonata/about.py:116 #, fuzzy msgid "Info Shortcuts" msgstr "Atalhos principais" #: .././sonata/about.py:117 msgid "Shortcuts" msgstr "Atalhos" #: .././sonata/about.py:153 msgid "An elegant music client for MPD." msgstr "Um refinado cliente de música para MPD." #. Add button to show keybindings: #: .././sonata/about.py:166 msgid "_Shortcuts" msgstr "_Atalhos" #: .././sonata/about.py:177 .././sonata/main.py:3088 #: .././sonata/preferences.py:738 msgid "Unable to launch a suitable browser." msgstr "Não foi possível abrir um navegador compatível." #: .././sonata/about.py:177 .././sonata/main.py:3088 #: .././sonata/preferences.py:738 msgid "Launch Browser" msgstr "Abrir navegador" #: .././sonata/cli.py:81 #, fuzzy msgid "The toggle and popup arguments require D-Bus. Aborting." msgstr "O argumento -t, --toggle necessita do D-Bus. Abortando." #: .././sonata/cli.py:97 #, fuzzy msgid "Version" msgstr "Versão: Sonata" #: .././sonata/cli.py:98 msgid "Website" msgstr "" #: .././sonata/cli.py:103 #, fuzzy msgid "Usage: sonata [OPTION]... [COMMAND]..." msgstr "Uso: sonata [OPÇÃO]" #: .././sonata/cli.py:105 msgid "Options" msgstr "Opções" #: .././sonata/cli.py:106 msgid "Show this help and exit" msgstr "Mostra esta ajuda e sái" #: .././sonata/cli.py:107 #, fuzzy msgid "Popup song notification (requires D-Bus)" msgstr "Mostrar notificação ao trocar de música" #: .././sonata/cli.py:108 msgid "Toggles whether the app is minimized" msgstr "Mostra/Oculta a aplicação" #: .././sonata/cli.py:109 msgid "to tray or visible (requires D-Bus)" msgstr "para a área de notificação (requer D-Bus)" #: .././sonata/cli.py:110 msgid "Don't start app if D-Bus commands fail" msgstr "" #: .././sonata/cli.py:111 msgid "Show version information and exit" msgstr "Mostra informações sobre a versão e sái" #: .././sonata/cli.py:112 msgid "Start app hidden (requires systray)" msgstr "Inicia a aplicação oculta (requer área de notificação)" #: .././sonata/cli.py:113 msgid "Start app visible (requires systray)" msgstr "Inicia a aplicação visível (requer área de notificação)" #: .././sonata/cli.py:114 msgid "Start with profile [NUM]" msgstr "Inicia com o perfil [NUM]" #: .././sonata/cli.py:116 #, fuzzy msgid "Commands" msgstr "Comentário" #: .././sonata/cli.py:117 msgid "Play song in playlist" msgstr "Reproduz a música na lista de reprodução" #: .././sonata/cli.py:118 msgid "Pause currently playing song" msgstr "Pausa a música atualmente em execução" #: .././sonata/cli.py:119 msgid "Stop currently playing song" msgstr "Para a música atualmente em execução" #: .././sonata/cli.py:120 msgid "Play next song in playlist" msgstr "Reproduz a próxima música na lista de reprodução" #: .././sonata/cli.py:121 msgid "Play previous song in playlist" msgstr "Reproduz a música anterior na lista de reprodução" #: .././sonata/cli.py:122 msgid "Toggle play/pause; plays if stopped" msgstr "Reproduz/pausa; Reproduz a música se estiver parado" #: .././sonata/cli.py:123 msgid "Toggle repeat mode" msgstr "Ativa/desativa o modo de repetição" #: .././sonata/cli.py:124 #, fuzzy msgid "Toggle random mode" msgstr "Ativa/desativa o modo de repetição" #: .././sonata/cli.py:125 msgid "Display current song info" msgstr "Mostra informações da música atualmente em execução" #: .././sonata/cli.py:126 msgid "Display MPD status" msgstr "Mostra o status do servidor MPD" #: .././sonata/cli.py:134 #, fuzzy, python-format msgid "Starting Sonata with profile %s..." msgstr "Iniciando o Sonata com o perfil" #: .././sonata/cli.py:136 #, python-format msgid "%d is not an available profile number." msgstr "" #: .././sonata/cli.py:137 .././sonata/cli.py:141 #, fuzzy, python-format msgid "Profile numbers must be between 1 and %d." msgstr "Número de perfil inválido. O número deve estar entre 1 e" #: .././sonata/cli.py:140 #, python-format msgid "Python is unable to interpret %s as a number." msgstr "" #: .././sonata/cli.py:154 .././sonata/main.py:179 #, fuzzy msgid "Default Profile" msgstr "Novo perfil" #: .././sonata/cli.py:154 .././sonata/main.py:179 msgid "by" msgstr "" #: .././sonata/cli.py:154 .././sonata/main.py:179 msgid "from" msgstr "" #: .././sonata/cli.py:176 #, fuzzy msgid "" "Unable to connect to MPD.\n" "Please check your Sonata preferences or MPD_HOST/MPD_PORT environment " "variables." msgstr "" "Não foi possível se conectar ao servidor MPD.\n" "Por favor verifique suas preferências do Sonata." #: .././sonata/cli.py:208 .././sonata/info.py:91 .././sonata/info.py:245 #: .././sonata/library.py:49 .././sonata/tagedit.py:125 msgid "Title" msgstr "Título" #: .././sonata/cli.py:209 .././sonata/info.py:91 .././sonata/info.py:246 #: .././sonata/library.py:49 .././sonata/main.py:1184 #: .././sonata/tagedit.py:126 msgid "Artist" msgstr "Artista" #: .././sonata/cli.py:210 .././sonata/info.py:91 .././sonata/info.py:247 #: .././sonata/library.py:49 .././sonata/main.py:1185 .././sonata/main.py:2439 #: .././sonata/tagedit.py:127 msgid "Album" msgstr "Álbum" #: .././sonata/cli.py:211 .././sonata/info.py:91 .././sonata/info.py:248 msgid "Date" msgstr "Data" #: .././sonata/cli.py:212 .././sonata/info.py:91 .././sonata/info.py:250 #: .././sonata/main.py:1186 .././sonata/tagedit.py:130 msgid "Track" msgstr "Faixa" #: .././sonata/cli.py:213 .././sonata/info.py:91 .././sonata/info.py:249 #: .././sonata/library.py:49 .././sonata/main.py:1189 #: .././sonata/preferences.py:432 .././sonata/tagedit.py:139 msgid "Genre" msgstr "Gênero" #: .././sonata/cli.py:214 .././sonata/info.py:91 .././sonata/info.py:251 #: .././sonata/main.py:1191 msgid "File" msgstr "Arquivo" #: .././sonata/cli.py:219 .././sonata/cli.py:221 msgid "Time" msgstr "Tempo" #: .././sonata/cli.py:222 .././sonata/info.py:91 .././sonata/info.py:244 msgid "Bitrate" msgstr "Taxa de bits" #: .././sonata/cli.py:224 msgid "MPD stopped" msgstr "MPD parado" #: .././sonata/cli.py:228 .././sonata/cli.py:230 .././sonata/cli.py:232 msgid "State" msgstr "Estado" #: .././sonata/cli.py:228 msgid "Playing" msgstr "Reproduzindo" #: .././sonata/cli.py:230 msgid "Paused" msgstr "Pausado" #: .././sonata/cli.py:232 .././sonata/main.py:559 .././sonata/main.py:564 #: .././sonata/main.py:1836 .././sonata/main.py:1847 msgid "Stopped" msgstr "Parado" #: .././sonata/cli.py:234 .././sonata/cli.py:236 msgid "Repeat" msgstr "Repetir" #: .././sonata/cli.py:234 .././sonata/cli.py:238 msgid "Off" msgstr "Desativado" #: .././sonata/cli.py:236 .././sonata/cli.py:240 msgid "On" msgstr "Ativado" #: .././sonata/cli.py:238 .././sonata/cli.py:240 msgid "Random" msgstr "Aleatório" #: .././sonata/cli.py:241 msgid "Volume" msgstr "Volume" #: .././sonata/cli.py:242 msgid "Crossfade" msgstr "Esvaecimento" #: .././sonata/cli.py:242 .././sonata/preferences.py:192 #, fuzzy msgid "second" msgid_plural "seconds" msgstr[0] "segundo" msgstr[1] "segundo" #: .././sonata/current.py:64 msgid "Filter" msgstr "Filtro" #: .././sonata/dbus_plugin.py:83 msgid "" "Sonata failed to connect to the D-BUS session bus: Unable to determine the " "address of the message bus (try 'man dbus-launch' and 'man dbus-daemon' for " "help)" msgstr "" "O Sonata falhou ao se conectar à sessão bus do D-BUS: Não foi possível " "determinar o endereço da mensagem bus (tente os comandos 'man dbus-launch' e " "'man dbus-daemon' para obter ajuda)" #: .././sonata/dbus_plugin.py:96 msgid "Failed to execute remote commands." msgstr "" #: .././sonata/dbus_plugin.py:98 #, fuzzy msgid "Starting Sonata instead..." msgstr "Iniciando o Sonata com o perfil" #: .././sonata/dbus_plugin.py:100 #, fuzzy msgid "Maybe Sonata is not running?" msgstr "Uma instância do Sonata já está em execução." #: .././sonata/dbus_plugin.py:114 #, fuzzy msgid "An instance of Sonata is already running. Showing it..." msgstr "Uma instância do Sonata já está em execução." #: .././sonata/dbus_plugin.py:120 msgid "Failed to execute remote command." msgstr "" #. Song info #: .././sonata/info.py:78 msgid "Song Info" msgstr "Informações da música" #: .././sonata/info.py:93 msgid "Launch artist in Wikipedia" msgstr "" #: .././sonata/info.py:93 msgid "Launch album in Wikipedia" msgstr "" #: .././sonata/info.py:127 msgid "Toggle extra tags" msgstr "" #: .././sonata/info.py:130 #, fuzzy msgid "Edit song tags" msgstr "Editar as tags das músicas selecionadas" #. Lyrics #: .././sonata/info.py:140 #, fuzzy msgid "Lyrics" msgstr "_Letra da música" #: .././sonata/info.py:152 msgid "Search Lyricwiki.org for lyrics" msgstr "" #: .././sonata/info.py:153 msgid "Edit lyrics at Lyricwiki.org" msgstr "" #. Album info #: .././sonata/info.py:161 #, fuzzy msgid "Album Info" msgstr "Inform_ações do álbum" #: .././sonata/info.py:213 .././sonata/info.py:218 msgid "more" msgstr "" #: .././sonata/info.py:215 msgid "hide" msgstr "" #: .././sonata/info.py:281 #, fuzzy msgid "edit tags" msgstr "Editar tags" #: .././sonata/info.py:308 #, fuzzy msgid "Album info not found." msgstr "Nome do álbum não especificado." #: .././sonata/info.py:311 msgid "Album name not set." msgstr "Nome do álbum não especificado." #: .././sonata/info.py:324 msgid "ZSI not found, fetching lyrics support disabled." msgstr "" "ZSI não foi encontrado. O suporte à busca de letras de música foi " "desabilitado." #: .././sonata/info.py:329 msgid "Artist or song title not set." msgstr "Artista ou título da música não especificados." #: .././sonata/info.py:371 #, fuzzy msgid "search" msgstr "Buscar" #: .././sonata/info.py:372 #, fuzzy msgid "edit" msgstr "Editar tags" #: .././sonata/info.py:381 .././sonata/info.py:436 msgid "Lyrics not found" msgstr "Letra da música não encontrada" #. Fetch lyrics from lyricwiki.org #: .././sonata/info.py:401 msgid "Fetching lyrics..." msgstr "Buscando letra da música..." #: .././sonata/info.py:411 msgid "Couldn't connect to LyricWiki" msgstr "Não foi possível se conectar ao LyricWiki" #: .././sonata/info.py:439 msgid "Fetching lyrics failed" msgstr "A busca pela letra da música falhou" #: .././sonata/library.py:47 msgid "Untagged" msgstr "" #: .././sonata/library.py:48 msgid "Various Artists" msgstr "Artistas variados" #: .././sonata/library.py:49 msgid "Filename" msgstr "Nome" #: .././sonata/library.py:49 msgid "Everything" msgstr "Todos" #: .././sonata/library.py:52 msgid "Filesystem" msgstr "Sistema de arquivos" #: .././sonata/library.py:53 #, fuzzy msgid "Artists" msgstr "Artista" #: .././sonata/library.py:54 #, fuzzy msgid "Albums" msgstr "Álbum" #: .././sonata/library.py:55 #, fuzzy msgid "Genres" msgstr "Gênero" #: .././sonata/library.py:84 #, fuzzy msgid "Search terms" msgstr "Editar termos da busca" #: .././sonata/library.py:90 #, fuzzy msgid "End Search" msgstr "_Finalizar busca" #: .././sonata/library.py:92 msgid "Library browsing view" msgstr "Visualização de navegação da biblioteca" #: .././sonata/library.py:96 #, fuzzy msgid "Search" msgstr "Buscar" #. Show text: #: .././sonata/library.py:761 .././sonata/main.py:1763 #: .././sonata/main.py:3331 msgid "song" msgid_plural "songs" msgstr[0] "música" msgstr[1] "músicas" #: .././sonata/library.py:761 .././sonata/main.py:1757 msgid "minute" msgid_plural "minutes" msgstr[0] "minuto" msgstr[1] "minutos" #: .././sonata/library.py:849 #, fuzzy msgid "Song" msgstr "música" #: .././sonata/library.py:849 .././sonata/main.py:1190 msgid "Path" msgstr "Caminho" #. Constants #: .././sonata/main.py:102 msgid "Current" msgstr "Atual" #: .././sonata/main.py:103 msgid "Library" msgstr "Biblioteca" #: .././sonata/main.py:104 msgid "Playlists" msgstr "Listas de reprodução" #: .././sonata/main.py:105 msgid "Streams" msgstr "Streams" #: .././sonata/main.py:106 #, fuzzy msgid "Info" msgstr "Informações da música" #: .././sonata/main.py:137 .././sonata/preferences.py:193 #: .././sonata/preferences.py:194 msgid "Entire song" msgstr "Toda a música" #: .././sonata/main.py:234 msgid "_Sort List" msgstr "_Ordenar lista de reprodução" #: .././sonata/main.py:235 #, fuzzy msgid "Sa_ve List to" msgstr "Salvar capa em:" #: .././sonata/main.py:236 msgid "_Connection" msgstr "_Conexão" #: .././sonata/main.py:237 msgid "P_lay after" msgstr "" #: .././sonata/main.py:238 .././sonata/main.py:2454 #, fuzzy msgid "_Update" msgstr "_Atualizar biblioteca" #: .././sonata/main.py:239 msgid "Use _Remote Image..." msgstr "Usar imagem _remota" #: .././sonata/main.py:240 msgid "Use _Local Image..." msgstr "Usar imagem _local" #: .././sonata/main.py:241 msgid "_Fullscreen Mode" msgstr "" #: .././sonata/main.py:242 #, fuzzy msgid "Reset Image" msgstr "Abrir imagem" #: .././sonata/main.py:243 msgid "_Play" msgstr "_Reproduzir" #: .././sonata/main.py:244 #, fuzzy msgid "Pa_use" msgstr "_Pausar" #: .././sonata/main.py:245 msgid "_Stop" msgstr "_Parar" #: .././sonata/main.py:246 #, fuzzy msgid "Pre_vious" msgstr "_Anterior" #: .././sonata/main.py:247 msgid "_Next" msgstr "Pró_xima" #: .././sonata/main.py:248 msgid "_Quit" msgstr "_Sair" #: .././sonata/main.py:249 msgid "_Remove" msgstr "_Remover" #: .././sonata/main.py:250 msgid "_Clear" msgstr "_Limpar" #: .././sonata/main.py:251 #, fuzzy msgid "_Entire Library" msgstr "_Atualizar biblioteca" #: .././sonata/main.py:252 #, fuzzy msgid "_Selected Items" msgstr "Adicionar o(s) stream(s) selecionado(s)" #: .././sonata/main.py:253 msgid "_Preferences..." msgstr "_Preferências" #: .././sonata/main.py:254 msgid "_About..." msgstr "_Sobre..." #: .././sonata/main.py:255 msgid "_Edit Tags..." msgstr "_Editar tags..." #: .././sonata/main.py:256 msgid "_Add" msgstr "_Adicionar" #: .././sonata/main.py:257 msgid "_Replace" msgstr "Su_bstituir" #: .././sonata/main.py:258 #, fuzzy msgid "Add" msgstr "_Adicionar" #: .././sonata/main.py:259 #, fuzzy msgid "Replace" msgstr "Su_bstituir" #: .././sonata/main.py:260 msgid "_Delete..." msgstr "_Apagar..." #: .././sonata/main.py:261 msgid "Shuffle" msgstr "Embaralhar" #: .././sonata/main.py:286 #, fuzzy msgid "S_how Sonata" msgstr "_Mostrar o Sonata" #: .././sonata/main.py:287 msgid "_Repeat" msgstr "_Repetir" #: .././sonata/main.py:288 #, fuzzy msgid "Rando_m" msgstr "Aleatório" #: .././sonata/main.py:428 msgid "By Artist" msgstr "Por artista" #: .././sonata/main.py:429 msgid "By Album" msgstr "Por álbum" #: .././sonata/main.py:430 msgid "By Song Title" msgstr "Por título da faixa" #: .././sonata/main.py:431 msgid "By File Name" msgstr "Por nome de arquivo" #: .././sonata/main.py:432 msgid "By Dir & File Name" msgstr "Por diretório e nome de arquivo" #: .././sonata/main.py:433 msgid "Reverse List" msgstr "Inverter lista" #: .././sonata/main.py:456 .././sonata/main.py:467 msgid "_New..." msgstr "_Novo..." #: .././sonata/main.py:457 msgid "_Edit..." msgstr "_Editar..." #: .././sonata/main.py:468 msgid "_Rename..." msgstr "_Renomear..." #: .././sonata/main.py:530 .././sonata/main.py:597 .././sonata/main.py:598 msgid "Playlist" msgstr "Lista de reprodução" #: .././sonata/main.py:560 .././sonata/main.py:1840 .././sonata/main.py:2049 msgid "Click to expand" msgstr "Clique para expandir" #: .././sonata/main.py:565 .././sonata/main.py:1838 .././sonata/main.py:2047 msgid "Click to collapse" msgstr "Clique para recolher" #: .././sonata/main.py:570 .././sonata/main.py:1732 .././sonata/main.py:1843 msgid "Not Connected" msgstr "Não conectado" #: .././sonata/main.py:572 .././sonata/main.py:1730 .././sonata/main.py:1845 msgid "No Read Permission" msgstr "" #: .././sonata/main.py:645 #, fuzzy msgid "Cover Art" msgstr "_Capa" #: .././sonata/main.py:850 .././sonata/main.py:863 .././sonata/main.py:884 #, fuzzy msgid "Profile" msgstr "Novo perfil" #: .././sonata/main.py:863 .././sonata/main.py:864 .././sonata/main.py:884 msgid "MPD_HOST/PORT" msgstr "" #: .././sonata/main.py:865 .././sonata/main.py:871 msgid "Disconnect" msgstr "Desconectar" #: .././sonata/main.py:1187 .././sonata/main.py:1194 msgid "#" msgstr "Nº" #: .././sonata/main.py:1188 .././sonata/preferences.py:431 #: .././sonata/tagedit.py:128 msgid "Year" msgstr "Ano" #: .././sonata/main.py:1192 msgid "Stream" msgstr "Stream" #: .././sonata/main.py:1193 msgid "Len" msgstr "Duração" #: .././sonata/main.py:1214 .././sonata/main.py:1221 .././sonata/main.py:1262 #: .././sonata/main.py:1269 msgid "Unknown" msgstr "Desconhecido" #: .././sonata/main.py:1753 msgid "day" msgid_plural "days" msgstr[0] "" msgstr[1] "" #: .././sonata/main.py:1761 #, fuzzy msgid "hour" msgid_plural "hours" msgstr[0] "hora e" msgstr[1] "horas e" #: .././sonata/main.py:1766 .././sonata/main.py:1768 #, fuzzy msgid "and" msgstr "Aleatório" #: .././sonata/main.py:1776 msgid "(updating mpd)" msgstr "(atualizando mpd)" #: .././sonata/main.py:2116 #, fuzzy msgid "Lyrics Search" msgstr "_Letra da música" #: .././sonata/main.py:2117 #, fuzzy msgid "_Search" msgstr "Buscar" #: .././sonata/main.py:2120 msgid "Artist Name" msgstr "Nome do artista" #: .././sonata/main.py:2125 msgid "Song Title" msgstr "Título da música" #: .././sonata/main.py:2377 msgid "Open Image" msgstr "Abrir imagem" #: .././sonata/main.py:2379 msgid "Images" msgstr "Imagens" #: .././sonata/main.py:2383 msgid "All files" msgstr "Todos os arquivos" #: .././sonata/main.py:2425 msgid "Choose Cover Art" msgstr "Escolha a capa" #: .././sonata/main.py:2426 #, fuzzy msgid "C_hoose" msgstr "Escolher" #: .././sonata/main.py:2459 msgid "Edit search terms" msgstr "Editar termos da busca" #: .././sonata/main.py:2516 msgid "No artist or album name found." msgstr "Artista ou nome do álbum não encontrados." #: .././sonata/main.py:2519 msgid "No cover art found." msgstr "Capa não encontrada." #: .././sonata/main.py:2843 msgid "Delete the selected playlist?" msgid_plural "Delete the selected playlists?" msgstr[0] "Apagar a lista de reprodução selecionada?" msgstr[1] "Apagar as listas de reprodução selecionadas?" #: .././sonata/main.py:2843 msgid "Delete Playlist" msgid_plural "Delete Playlists" msgstr[0] "Apagar lista de reprodução" msgstr[1] "Apagar listas de reprodução" #: .././sonata/main.py:2851 msgid "Delete the selected stream?" msgid_plural "Delete the selected streams?" msgstr[0] "Apagar o stream selecionado?" msgstr[1] "Apagar os streams selecionados?" #: .././sonata/main.py:2851 msgid "Delete Stream" msgid_plural "Delete Streams" msgstr[0] "Apagar stream" msgstr[1] "Apagar streams" #: .././sonata/main.py:2909 #, fuzzy msgid "" "To save lyrics to the music file's directory, you must specify a valid music " "directory." msgstr "você deve especificar um diretório de músicas válido" #: .././sonata/main.py:2909 .././sonata/main.py:2916 #, fuzzy msgid "Music Dir Verification" msgstr "Verificação de Audioscrobbler" #: .././sonata/main.py:2916 #, fuzzy msgid "" "To save artwork to the music file's directory, you must specify a valid " "music directory." msgstr "você deve especificar um diretório de músicas válido" #: .././sonata/main.py:3332 msgid "album" msgid_plural "albums" msgstr[0] "álbum" msgstr[1] "álbuns" #: .././sonata/main.py:3333 msgid "artist" msgid_plural "artists" msgstr[0] "artista" msgstr[1] "artistas" #: .././sonata/main.py:3340 #, fuzzy msgid "day of bliss" msgid_plural "days of bliss" msgstr[0] "hora de êxtase" msgstr[1] "horas de êxtase" #: .././sonata/main.py:3342 msgid "hour of bliss" msgid_plural "hours of bliss" msgstr[0] "hora de êxtase" msgstr[1] "horas de êxtase" #: .././sonata/playlists.py:103 .././sonata/playlists.py:105 msgid "Save Playlist" msgstr "Salvar lista de reprodução" #: .././sonata/playlists.py:120 msgid "Would you like to replace the existing playlist or append these songs?" msgstr "" #: .././sonata/playlists.py:120 #, fuzzy msgid "Existing Playlist" msgstr "Lista de reprodução" #: .././sonata/playlists.py:120 #, fuzzy msgid "Replace playlist" msgstr "Renomear lista de reprodução" #: .././sonata/playlists.py:120 msgid "Append songs" msgstr "" #: .././sonata/playlists.py:141 msgid "A playlist with this name already exists. Would you like to replace it?" msgstr "" "Uma lista de reprodução com esse nome já existe. Você gostaria de substituir " "a atual?" #: .././sonata/playlists.py:153 msgid "Playlist name" msgstr "Nome da lista de reprodução" #: .././sonata/playlists.py:182 .././sonata/playlists.py:186 msgid "Rename Playlist" msgstr "Renomear lista de reprodução" #. Constants: #: .././sonata/preferences.py:35 msgid "System tray" msgstr "Área de notificação" #: .././sonata/preferences.py:35 msgid "Top Left" msgstr "Superior à esquerda" #: .././sonata/preferences.py:35 msgid "Top Right" msgstr "Superior à direita" #: .././sonata/preferences.py:35 msgid "Bottom Left" msgstr "Inferior à esquerda" #: .././sonata/preferences.py:35 msgid "Bottom Right" msgstr "Inferior à direita" #: .././sonata/preferences.py:35 msgid "Screen Center" msgstr "" #. MPD tab #: .././sonata/preferences.py:64 msgid "MPD Connection" msgstr "Conexão do servidor MPD" #: .././sonata/preferences.py:76 #, fuzzy msgid "_Name" msgstr "Nome" #: .././sonata/preferences.py:79 #, fuzzy msgid "_Host" msgstr "Servidor" #: .././sonata/preferences.py:82 #, fuzzy msgid "_Port" msgstr "Porta" #: .././sonata/preferences.py:86 #, fuzzy msgid "_Music dir" msgstr "Pasta" #: .././sonata/preferences.py:87 msgid "Select a Music Directory" msgstr "" #: .././sonata/preferences.py:91 #, fuzzy msgid "Pa_ssword" msgstr "Senha" #: .././sonata/preferences.py:94 msgid "Leave blank if no password is required." msgstr "Deixe em branco caso nenhuma senha seja necessária." #: .././sonata/preferences.py:95 #, fuzzy msgid "_Autoconnect on start" msgstr "Auto-conectar ao iniciar" #: .././sonata/preferences.py:113 msgid "Using MPD_HOST/PORT" msgstr "" #: .././sonata/preferences.py:163 .././sonata/preferences.py:536 msgid "Extras" msgstr "Extras" #: .././sonata/preferences.py:168 msgid "_Audioscrobbling (Last.fm)" msgstr "" #: .././sonata/preferences.py:170 #, fuzzy msgid "_Username:" msgstr "Usuário:" #: .././sonata/preferences.py:171 #, fuzzy msgid "_Password:" msgstr "Senha:" #: .././sonata/preferences.py:188 #, fuzzy msgid "Popup _notification on song changes" msgstr "Mostrar notificação ao trocar de música" #: .././sonata/preferences.py:210 msgid "Fade length" msgstr "Duração do efeito" #: .././sonata/preferences.py:211 #, fuzzy msgid "_Fade length" msgstr "Duração do efeito" #: .././sonata/preferences.py:213 msgid "sec" msgstr "segundos" #: .././sonata/preferences.py:218 #, fuzzy msgid "C_rossfade" msgstr "Esvaecimento" #. Display tab #: .././sonata/preferences.py:246 .././sonata/preferences.py:533 msgid "Display" msgstr "Exibição" #: .././sonata/preferences.py:251 #, fuzzy msgid "_Album art" msgstr "Nome do álbum" #: .././sonata/preferences.py:253 msgid "Standard" msgstr "" #: .././sonata/preferences.py:253 msgid "Stylized" msgstr "" #: .././sonata/preferences.py:256 #, fuzzy msgid "Artwork style:" msgstr "Nome do arquivo de capa" #: .././sonata/preferences.py:258 msgid "Local only" msgstr "Local, apenas" #: .././sonata/preferences.py:258 #, fuzzy msgid "Local and remote" msgstr "Local, depois remota" #: .././sonata/preferences.py:260 #, fuzzy msgid "Search locations:" msgstr "Buscar" #: .././sonata/preferences.py:267 .././sonata/preferences.py:289 msgid "SONG_DIR" msgstr "" #: .././sonata/preferences.py:269 #, fuzzy msgid "custom" msgstr "nome personalizado" #: .././sonata/preferences.py:274 msgid "Save art to:" msgstr "Salvar capa em:" #: .././sonata/preferences.py:277 #, fuzzy msgid "_Playback/volume buttons" msgstr "Habilitar os botões de reprodução/volume" #: .././sonata/preferences.py:280 #, fuzzy msgid "Pr_ogressbar" msgstr "Habilitar esvaecimento entre as músicas" #: .././sonata/preferences.py:283 #, fuzzy msgid "_Statusbar" msgstr "Habilitar a barra de status" #: .././sonata/preferences.py:286 #, fuzzy msgid "Song Ly_rics" msgstr "_Letra da música" #: .././sonata/preferences.py:288 #, fuzzy msgid "Save lyrics to:" msgstr "Salvar capa em:" #: .././sonata/preferences.py:297 #, fuzzy msgid "System _tray icon" msgstr "Área de notificação" #. Behavior tab #: .././sonata/preferences.py:319 msgid "Window Behavior" msgstr "Comportamento da janela" #: .././sonata/preferences.py:323 #, fuzzy msgid "_Show window on all workspaces" msgstr "Mostrar janela em todos os espaços de trabalho" #: .././sonata/preferences.py:326 #, fuzzy msgid "_Keep window above other windows" msgstr "Manter janela sobre as outras janelas" #: .././sonata/preferences.py:329 #, fuzzy msgid "_Hide window titlebar" msgstr "Título da janela:" #: .././sonata/preferences.py:334 #, fuzzy msgid "_Minimize to system tray on close/escape" msgstr "Enviar para a área de notificação ao fechar" #: .././sonata/preferences.py:336 msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, so " "only check this if you have one." msgstr "" "Se essa opção for habilitada, ao fechar o Sonata, ele será enviado para a " "área de notificação. Nota: atualmente é impossível detectar se existe uma " "área de notificação disponível, então apenas habilite se você tiver uma." #: .././sonata/preferences.py:350 msgid "Miscellaneous" msgstr "Miscelânea" #: .././sonata/preferences.py:354 #, fuzzy msgid "_Update MPD library on start" msgstr "Atualizar a biblioteca do servidor MPD ao iniciar" #: .././sonata/preferences.py:356 msgid "" "If enabled, Sonata will automatically update your MPD library when it starts " "up." msgstr "" "Se essa opção for habilitada, o Sonata irá automaticamente atualizar a " "biblioteca do seu servidor MPD ao iniciar." #: .././sonata/preferences.py:358 #, fuzzy msgid "S_top playback on exit" msgstr "Parar reprodução ao sair" #: .././sonata/preferences.py:360 msgid "" "MPD allows playback even when the client is not open. If enabled, Sonata " "will behave like a more conventional music player and, instead, stop " "playback upon exit." msgstr "" "O servidor MPD permite reprodução de músicas mesmo que o cliente não esteja " "aberto. Se essa opção for habilitada, o Sonata irá se comportar como um " "reprodutor de músicas convencional e para a reprodução ao sair." #: .././sonata/preferences.py:362 #, fuzzy msgid "_Write status file:" msgstr "Criar arquivo de status:" #: .././sonata/preferences.py:364 .././sonata/preferences.py:366 msgid "" "If enabled, Sonata will create a xmms-infopipe like file containing " "information about the current song. Many applications support the xmms-info " "file (Instant Messengers, IRC Clients...)" msgstr "" "Se essa opção for habilitada, o Sonata irá criar um arquivo com o xmms-" "infopipe contendo informações sobre a música atual. Muitas aplicações " "suportam esse arquivo (mensageiros instantâneos, clientes IRC...)" #. Format tab #: .././sonata/preferences.py:392 msgid "Song Formatting" msgstr "Formato das músicas" #: .././sonata/preferences.py:397 #, fuzzy msgid "C_urrent playlist:" msgstr "Lista de reprodução atual:" #: .././sonata/preferences.py:398 #, fuzzy msgid "_Library:" msgstr "Biblioteca:" #: .././sonata/preferences.py:399 #, fuzzy msgid "_Window title:" msgstr "Título da janela:" #: .././sonata/preferences.py:400 #, fuzzy msgid "Current _song line 1:" msgstr "Música atual (1ª linha):" #: .././sonata/preferences.py:402 #, fuzzy msgid "Current s_ong line 2:" msgstr "Música atual (2ª linha):" #: .././sonata/preferences.py:422 msgid "Available options" msgstr "Opções disponíveis" #. XXX get these directly from the formatting function: #: .././sonata/preferences.py:426 msgid "Artist name" msgstr "Nome do artista" #: .././sonata/preferences.py:427 msgid "Album name" msgstr "Nome do álbum" #: .././sonata/preferences.py:428 msgid "Track name" msgstr "Nome da faixa" #: .././sonata/preferences.py:429 msgid "Track number" msgstr "Nº da faixa" #: .././sonata/preferences.py:430 #, fuzzy msgid "Disc number" msgstr "Nº da faixa" #: .././sonata/preferences.py:433 #, fuzzy msgid "File path" msgstr "O arquivo " #: .././sonata/preferences.py:434 msgid "File name" msgstr "Nome do arquivo" #: .././sonata/preferences.py:435 .././sonata/streams.py:109 msgid "Stream name" msgstr "Nome do stream" #: .././sonata/preferences.py:436 msgid "Song length" msgstr "Duração da música" #: .././sonata/preferences.py:437 msgid "Elapsed time (title only)" msgstr "Tempo decorrido (título apenas)" #: .././sonata/preferences.py:448 msgid "Info displayed only if all enclosed tags are defined" msgstr "Informação exibida apenas se todas as tags englobadas estão definidas" #: .././sonata/preferences.py:448 #, fuzzy msgid "Creates columns in the current playlist" msgstr "Lista de reprodução atual:" #: .././sonata/preferences.py:473 #, fuzzy msgid "_About" msgstr "_Sobre..." #: .././sonata/preferences.py:474 msgid "_Configure..." msgstr "" #: .././sonata/preferences.py:513 msgid "Loaded" msgstr "" #: .././sonata/preferences.py:521 msgid "Description" msgstr "" #. Set up table #: .././sonata/preferences.py:532 #, fuzzy msgid "MPD" msgstr "_MPD" #: .././sonata/preferences.py:534 #, fuzzy msgid "Behavior" msgstr "_Comportamento" #: .././sonata/preferences.py:535 #, fuzzy msgid "Format" msgstr "_Formato" #: .././sonata/preferences.py:605 msgid "New Profile" msgstr "Novo perfil" #. Prompt user for playlist name: #: .././sonata/preferences.py:659 msgid "Custom Artwork" msgstr "Capa personalizada" #: .././sonata/preferences.py:661 msgid "Artwork filename" msgstr "Nome do arquivo de capa" #: .././sonata/streams.py:105 msgid "Edit Stream" msgstr "Editar stream" #: .././sonata/streams.py:107 .././sonata/streams.py:138 msgid "New Stream" msgstr "Novo stream" #: .././sonata/streams.py:116 msgid "Stream URL" msgstr "URL do stream" #: .././sonata/streams.py:138 msgid "A stream with this name already exists. Would you like to replace it?" msgstr "" "Um stream com esse nome já existe. Você gostaria de substituir o atual?" #: .././sonata/tagedit.py:61 msgid "Taglib and/or tagpy not found, tag editing support disabled." msgstr "" "Taglib e/ou tagpy não foram encontrados. O suporte à edição de tags foi " "desabilitado." #: .././sonata/tagedit.py:61 .././sonata/tagedit.py:70 #: .././sonata/tagedit.py:75 .././sonata/tagedit.py:99 #: .././sonata/tagedit.py:103 .././sonata/tagedit.py:260 #: .././sonata/tagedit.py:299 msgid "Edit Tags" msgstr "Editar tags" #: .././sonata/tagedit.py:70 #, fuzzy msgid "" "Tagpy version < 0.91. Please upgrade to a newer version, tag editing support " "disabled." msgstr "" "Taglib e/ou tagpy não foram encontrados. O suporte à edição de tags foi " "desabilitado." #: .././sonata/tagedit.py:75 msgid "The path" msgstr "O caminho" #: .././sonata/tagedit.py:75 msgid "does not exist. Please specify a valid music directory in preferences." msgstr "" "não existe. Por favor especifique um diretório de músicas válido nas " "preferências." #: .././sonata/tagedit.py:99 msgid "File " msgstr "O arquivo " #: .././sonata/tagedit.py:99 msgid " not found. Please specify a valid music directory in preferences." msgstr "" " não foi encontrado. Por favor especifique um diretório de músicas válido " "nas preferências." #: .././sonata/tagedit.py:103 msgid "No music files with editable tags found." msgstr "Não foram encontrados arquivos de música com tags editáveis." #: .././sonata/tagedit.py:150 msgid "Comment" msgstr "Comentário" #. Only show save all button if more than one song being edited. #: .././sonata/tagedit.py:161 msgid "Save _All" msgstr "Salvar _todos" #: .././sonata/tagedit.py:207 msgid "Increment each selected music file, starting at track 1 for this file." msgstr "" "Incrementar cada arquivo de música selecionado, começando pela faixa 1 para " "esse arquivo." #: .././sonata/tagedit.py:209 msgid "Apply to all selected music files." msgstr "Aplicar a todos os arquivos de música selecionados." #: .././sonata/tagedit.py:260 msgid "of" msgstr "de" #. FIXME: was (save_success and self.conn and self.status): #: .././sonata/tagedit.py:299 msgid "Unable to save tag to music file." msgstr "Não foi possível salvar a tag no arquivo de música." #: .././sonata/tagedit.py:366 msgid "Hide file path" msgstr "" #: .././sonata/tagedit.py:369 #, fuzzy msgid "Show file path" msgstr "O caminho" #, fuzzy #~ msgid "The popup argument requires D-Bus. Aborting." #~ msgstr "O argumento -t, --toggle necessita do D-Bus. Abortando." #, fuzzy #~ msgid "_Update Path" #~ msgstr "_Atualizar biblioteca" #~ msgid "Website: http://www.nongnu.org/sonata/" #~ msgstr "Página: http://www.nongnu.org/sonata/" #~ msgid "Enable Audioscrobbler" #~ msgstr "Habilitar Audioscrobbler" #~ msgid "Enable Crossfade" #~ msgstr "Habilitar esvaecimento entre as músicas" #~ msgid "Enable album art" #~ msgstr "Habilitar capa do álbum" #~ msgid "Enable lyrics" #~ msgstr "Habilitar as letras de música" #~ msgid "Enable system tray icon" #~ msgstr "Habilitar o ícone da área de notificação" #~ msgid "_Display" #~ msgstr "_Exibição" #~ msgid "_Extras" #~ msgstr "_Extras" #~ msgid "" #~ "PyGTK+ 2.10 or gnome-python-extras not found, system tray support " #~ "disabled." #~ msgstr "" #~ "PyGTK+ 2.10 ou gnome-python-extras não foram encontrados. O suporte à " #~ "Área de Notificação foi desabilitado." #~ msgid "Reset to Default" #~ msgstr "Retornar ao padrão" #, fuzzy #~ msgid "_New Playlist..." #~ msgstr "_Salvar lista de reprodução" #~ msgid "Notification" #~ msgstr "Notificação" #~ msgid "" #~ "Python 2.5 or python-elementtree not found, audioscrobbler support " #~ "disabled." #~ msgstr "" #~ "Python 2.5 ou python-elementtree não foram encontrados. O suporte ao " #~ "Audioscrobbler foi desabilitado." #~ msgid "Audioscrobbler Verification" #~ msgstr "Verificação de Audioscrobbler" #, fuzzy #~ msgid "Update library for selected item(s)" #~ msgstr "Atualizar a biblioteca para o(s) caminho(s) selecionado(s)" #~ msgid "_Shuffle" #~ msgstr "_Embaralhar" #~ msgid "Toggle shuffle mode" #~ msgstr "Ativa/desativa o modo de embaralhação" #~ msgid "Not connected" #~ msgstr "Não conectado" #~ msgid "Press enter to search for these terms." #~ msgstr "Aperte enter para buscar por esses termos." #~ msgid "Add new profile" #~ msgstr "Adicionar novo perfil" #~ msgid "Remove current profile" #~ msgstr "Remover perfil atual" #~ msgid "Play enqueued files on activate" #~ msgstr "Reproduzir arquivos ao enviar para a lista de reprodução" #~ msgid "" #~ "Automatically play enqueued items when activated via double-click or " #~ "enter." #~ msgstr "" #~ "Reproduz automaticamente arquivos enviados para a lista de reprodução " #~ "através de clique duplo ou enter." #~ msgid "Add selected song(s) or directory(s)" #~ msgstr "Adicionar a(s) música(s) ou diretório(s) selecionados" #~ msgid "Replace with selected song(s) or directory(s)" #~ msgstr "Substituir pela(s) música(s) ou diretório(s) selecionados" #~ msgid "Add to _Queue" #~ msgstr "Adicionar à lista de _espera" #~ msgid "Remove from _Queue" #~ msgstr "Remover da lista de _espera" #~ msgid "Add selected song(s) to playlist queue" #~ msgstr "Adicionar as músicas selecionadas à lista de espera" #~ msgid "Remove selected song(s) from playlist queue" #~ msgstr "Remover a(s) música(s) selecionada(s) da lista de espera" #~ msgid "seconds" #~ msgstr "segundos" #~ msgid "Song Info..." #~ msgstr "Informações da música" #~ msgid "Click to collapse the player" #~ msgstr "Clique para recolher o reprodutor de músicas" #~ msgid "Click to expand the player" #~ msgstr "Clique para expandir o reprodutor de músicas" #~ msgid "_Song Info" #~ msgstr "_Informações da música" #~ msgid "_Search..." #~ msgstr "_Buscar..." #~ msgid "Remote only" #~ msgstr "Remota, apenas" #~ msgid "Remote, then local" #~ msgstr "Remota, depois local" #~ msgid "To save artwork as" #~ msgstr "Para salvar a capa como" #~ msgid "Artwork Verification" #~ msgstr "Verificação de capa" #~ msgid "Switch to current playlist" #~ msgstr "Alternar para a lista de reprodução atual" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/po/ru.po�������������������������������������������������������������������������������0000664�0000000�0000000�00000127121�13771420143�0014416�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # DolphinStKom <dolphinstkom@gmail.com>, 2013 msgid "" msgstr "" "Project-Id-Version: Sonata\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-07-08 19:07+0200\n" "PO-Revision-Date: 2013-07-09 19:50+0000\n" "Last-Translator: DolphinStKom <dolphinstkom@gmail.com>\n" "Language-Team: Russian (http://www.transifex.com/projects/p/sonata/language/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ru\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #. define the shortcuts and their descriptions #. these are all gettextable #. Keep them here (not as XML) as they're more convenient this way #: ../sonata/about.py:41 msgid "About Sonata" msgstr "О Sonata" #: ../sonata/about.py:42 ../sonata/ui/preferences.glade.h:5 msgid "Preferences" msgstr "Настройки" #: ../sonata/about.py:43 msgid "Fullscreen Artwork Mode" msgstr "Развернуть в полноэкранный режим" #: ../sonata/about.py:44 msgid "Switch to [1st-5th] tab" msgstr "Переключиться на [1ю-5ю] закладку" #: ../sonata/about.py:45 msgid "Connect to MPD" msgstr "Подключиться к MPD" #: ../sonata/about.py:46 msgid "Disconnect from MPD" msgstr "Отключиться от MPD" #: ../sonata/about.py:47 msgid "Randomize current playlist" msgstr "Перемешать текущий список" #: ../sonata/about.py:48 msgid "Expand player" msgstr "Развернуть плеер" #: ../sonata/about.py:49 msgid "Switch to previous tab" msgstr "Предыдущая закладка" #: ../sonata/about.py:50 msgid "Switch to next tab" msgstr "Следующая закладка" #: ../sonata/about.py:51 msgid "Collapse player" msgstr "Свернуть плеер" #: ../sonata/about.py:52 ../sonata/ui/library.glade.h:2 msgid "Search library" msgstr "Поиск в фонотеке" #: ../sonata/about.py:53 msgid "Quit" msgstr "Выйти" #: ../sonata/about.py:54 msgid "Update entire library" msgstr "Обновить фонотеку" #: ../sonata/about.py:55 msgid "Display popup menu" msgstr "Показать всплывающее меню" #: ../sonata/about.py:56 msgid "Minimize to system tray (if enabled)" msgstr "Свернуть в трей (если включено)" #: ../sonata/about.py:58 msgid "Previous track" msgstr "Предыдущая песня" #: ../sonata/about.py:59 msgid "Next track" msgstr "Следующая песня" #: ../sonata/about.py:60 msgid "Play/Pause" msgstr "Воспроизведение/Пауза" #: ../sonata/about.py:61 msgid "Stop" msgstr "Остановить" #: ../sonata/about.py:62 msgid "Lower the volume" msgstr "Понизить громкость" #: ../sonata/about.py:63 msgid "Raise the volume" msgstr "Повысить громкость" #: ../sonata/about.py:65 msgid "Play selected song" msgstr "Воспроизвести выделенную песню" #: ../sonata/about.py:66 msgid "Remove selected song(s)" msgstr "Удалить выбранную песню(-и)" #: ../sonata/about.py:67 msgid "Center currently playing song" msgstr "Остановить проигрывание" #: ../sonata/about.py:68 ../sonata/about.py:77 msgid "Edit selected song's tags" msgstr "Редактировать теги выбранной записи" #: ../sonata/about.py:69 msgid "Save to new playlist" msgstr "Сохранить в новый список" #: ../sonata/about.py:70 msgid "Clear list" msgstr "Очистить список" #: ../sonata/about.py:71 msgid "Randomize list" msgstr "Перемешать список" #: ../sonata/about.py:73 msgid "Add selected song(s) or enter directory" msgstr "Добавить отмеченные песни или войти в каталог" #: ../sonata/about.py:74 msgid "Go to parent directory" msgstr "Перейти в родительский каталог" #: ../sonata/about.py:75 msgid "Add selected item(s)" msgstr "Добавить выделенные песни" #: ../sonata/about.py:76 msgid "Replace with selected item(s)" msgstr "Заменить выбранными песнями" #: ../sonata/about.py:78 msgid "Add selected item(s) and play" msgstr "Добавить песни в список и проиграть" #: ../sonata/about.py:79 msgid "Replace with selected item(s) and play" msgstr "Заменить выбранными песнями и проиграть" #: ../sonata/about.py:80 msgid "Update selected item(s)/path(s)" msgstr "Обновить выделенные позиции/пути" #: ../sonata/about.py:82 ../sonata/about.py:84 msgid "Add selected playlist(s)" msgstr "Добавить отмеченные списки" #: ../sonata/about.py:83 msgid "Remove selected playlist(s)" msgstr "Удалить отмеченные списки" #: ../sonata/about.py:85 msgid "Replace with selected playlist(s)" msgstr "Заменить на отмеченные списки" #: ../sonata/about.py:86 msgid "Add selected playlist(s) and play" msgstr "Добавить отмеченные списки и воспроизвести" #: ../sonata/about.py:90 ../sonata/about.py:92 msgid "Add selected stream(s)" msgstr "Добавить выделенные потоки" #: ../sonata/about.py:91 msgid "Remove selected stream(s)" msgstr "Удалить выделенные потоки" #: ../sonata/about.py:93 msgid "Replace with selected stream(s)" msgstr "Заменить выбранными потоками" #: ../sonata/about.py:94 msgid "Add selected stream(s) and play" msgstr "Добавить выделенные потоки и воспроизвести" #: ../sonata/about.py:98 msgid "Edit playing song's tags" msgstr "Правка тегов воспроизводимой записи" #. define the main array- this adds headings to each section of #. shortcuts that will be displayed #: ../sonata/about.py:101 msgid "Main Shortcuts" msgstr "Основные горячие клавиши" #: ../sonata/about.py:102 msgid "Playback Shortcuts" msgstr "Воспроизведение" #: ../sonata/about.py:103 msgid "Current Shortcuts" msgstr "Текущий плейлист" #: ../sonata/about.py:104 msgid "Library Shortcuts" msgstr "Фонотека" #: ../sonata/about.py:105 msgid "Playlist Shortcuts" msgstr "Списки воспроизведения" #: ../sonata/about.py:106 msgid "Stream Shortcuts" msgstr "Потоки" #: ../sonata/about.py:107 msgid "Info Shortcuts" msgstr "Информация" #: ../sonata/about.py:144 msgid "{count} song." msgid_plural "{count} songs." msgstr[0] "{count} песня." msgstr[1] "{count} песни." msgstr[2] "{count} песен." #: ../sonata/about.py:147 msgid "{count} album." msgid_plural "{count} albums." msgstr[0] "{count} альбом." msgstr[1] "{count} альбома." msgstr[2] "{count} альбомов." #: ../sonata/about.py:150 msgid "{count} artist." msgid_plural "{count} artists." msgstr[0] "{count} исполнитель." msgstr[1] "{count} исполнителя." msgstr[2] "{count} исполнителей." #: ../sonata/about.py:160 msgid "{count} day of bliss." msgid_plural "{count} days of bliss." msgstr[0] "{count} день блаженства." msgstr[1] "{count} дня блаженства." msgstr[2] "{count} дней блаженства." #: ../sonata/about.py:164 msgid "{count} hour of bliss." msgid_plural "{count} hours of bliss." msgstr[0] "{count} час блаженства." msgstr[1] "{count} часа блаженства." msgstr[2] "{count} часов блаженства." #. toggle and popup and fullscreen need d-bus and don't always need gui #. version and help don't need anything and exit without gui #. hidden and visible are only applicable when gui is launched #. profile and no-start don't need anything #: ../sonata/cli.py:35 msgid "%prog [OPTION]... [COMMAND]..." msgstr "%prog [ОПЦИЯ]... [КОМАНДА]..." #: ../sonata/cli.py:36 msgid "Commands:" msgstr "Команды:" #: ../sonata/cli.py:37 msgid "play song in playlist" msgstr "воспроизвести песню из ротации" #: ../sonata/cli.py:38 msgid "pause currently playing song" msgstr "приостановить воспроизведение песни" #: ../sonata/cli.py:39 msgid "stop currently playing song" msgstr "остановить воспроизведение песни" #: ../sonata/cli.py:40 msgid "play next song in playlist" msgstr "перейти к следующей песне в ротации" #: ../sonata/cli.py:41 msgid "play previous song in playlist" msgstr "перейти к предыдущей песне в ротации" #: ../sonata/cli.py:42 msgid "toggle play/pause; plays if stopped" msgstr "переключить воспроизведение/пауза; воспроизвести или остановить" #: ../sonata/cli.py:43 msgid "toggle repeat mode" msgstr "переключить режим повтора" #: ../sonata/cli.py:44 msgid "toggle random mode" msgstr "переключить случайное воспроизведение" #: ../sonata/cli.py:45 msgid "display current song info" msgstr "отобразить информацию о песне" #: ../sonata/cli.py:46 msgid "display MPD status" msgstr "отобразить состояние MPD" #: ../sonata/cli.py:53 msgid "popup song notification (requires D-Bus)" msgstr "всплывающее уведомление (требуется наличие D-Bus)" #: ../sonata/cli.py:56 msgid "" "toggles whether the app is minimized to the tray or visible (requires D-Bus)" msgstr "переключить режимы, свернуть приложение в трей или показать (требует наличие D-Bus)" #: ../sonata/cli.py:59 msgid "go fullscreen (requires D-Bus)" msgstr "перейти в полноэкранный режим (требует наличие D-Bus)" #: ../sonata/cli.py:62 msgid "don't start app if D-Bus commands fail" msgstr "не запускайте приложение если D-Bus команды потерпели неудачу" #: ../sonata/cli.py:65 msgid "start app hidden (requires systray)" msgstr "запустить приложение свернутым (требуется наличие включённого трея)" #: ../sonata/cli.py:68 msgid "start app visible (requires systray)" msgstr "запустить приложение на очно (требуется наличие включённого трея)" #: ../sonata/cli.py:70 msgid "start with profile NUM" msgstr "запустить с профилем NUM" #: ../sonata/cli.py:73 msgid "start app with a interactive (ipython) shell" msgstr "запустить приложение посредством интерактивной оболочки (ipython)" #: ../sonata/cli.py:76 msgid "Increase log verbosity" msgstr "Увеличить детализацию отчета" #: ../sonata/cli.py:79 msgid "Decrease log verbosity" msgstr "Уменьшить детализацию отчета" #: ../sonata/cli.py:99 #, python-format msgid "unknown command %s" msgstr "неизвестная команда выполнения %s" #: ../sonata/cli.py:105 msgid "toggle and popup options require D-Bus. Aborting." msgstr "всплывающим и переключающим опциям необходим D-Bus. Отклонено." #: ../sonata/cli.py:127 #, python-format msgid "Starting Sonata with profile %s..." msgstr "Sonata стартует с профилем %s..." #: ../sonata/cli.py:131 #, python-format msgid "%d is not an available profile number." msgstr "%d является не верным номером профиля." #: ../sonata/cli.py:133 #, python-format msgid "Profile numbers must be between 1 and %d." msgstr "Номер профиля должен быть между 1 и %d." #: ../sonata/cli.py:153 ../sonata/main.py:171 msgid "Default Profile" msgstr "Основной профиль" #: ../sonata/cli.py:154 msgid "by" msgstr "от" #: ../sonata/cli.py:154 msgid "from" msgstr "из" #: ../sonata/cli.py:177 msgid "" "Unable to connect to MPD.\n" "Please check your Sonata preferences or MPD_HOST/MPD_PORT environment variables." msgstr "Невозможно подключиться к MPD.⏎\nПроверьте настройки Sonata либо переменные окружения MPD_HOST/MPD_PORT" #: ../sonata/cli.py:216 ../sonata/library.py:60 ../sonata/ui/library.glade.h:5 msgid "Title" msgstr "Название" #: ../sonata/cli.py:217 ../sonata/formatting.py:102 ../sonata/library.py:60 #: ../sonata/ui/library.glade.h:4 msgid "Artist" msgstr "Исполнитель" #: ../sonata/cli.py:218 ../sonata/formatting.py:103 ../sonata/library.py:60 #: ../sonata/ui/library.glade.h:6 msgid "Album" msgstr "Альбом" #: ../sonata/cli.py:219 msgid "Date" msgstr "Год" #: ../sonata/cli.py:220 ../sonata/formatting.py:104 msgid "Track" msgstr "Дорожка" #: ../sonata/cli.py:221 ../sonata/formatting.py:108 ../sonata/library.py:60 #: ../sonata/ui/library.glade.h:7 msgid "Genre" msgstr "Жанр" #: ../sonata/cli.py:222 ../sonata/formatting.py:111 msgid "File" msgstr "Файл" #: ../sonata/cli.py:236 ../sonata/cli.py:238 msgid "Time" msgstr "Время" #: ../sonata/cli.py:239 msgid "Bitrate" msgstr "Битрейт" #: ../sonata/cli.py:242 msgid "MPD stopped" msgstr "MPD остановлен" #: ../sonata/cli.py:246 msgid "Playing" msgstr "Воспроизведение" #: ../sonata/cli.py:247 msgid "Paused" msgstr "Приостановлено" #: ../sonata/cli.py:248 ../sonata/main.py:630 ../sonata/main.py:1640 #: ../sonata/main.py:1654 msgid "Stopped" msgstr "Остановлено" #: ../sonata/cli.py:249 msgid "State" msgstr "Состояние" #: ../sonata/cli.py:251 msgid "Repeat:" msgstr "Повтор:" #: ../sonata/cli.py:251 ../sonata/cli.py:253 msgid "On" msgstr "Вкл." #: ../sonata/cli.py:252 ../sonata/cli.py:254 msgid "Off" msgstr "Выкл." #: ../sonata/cli.py:253 msgid "Random:" msgstr "Случайным образом:" #: ../sonata/cli.py:255 msgid "Volume" msgstr "Громкость" #: ../sonata/cli.py:256 msgid "Crossfade" msgstr "Перекрестное затухание" #: ../sonata/cli.py:257 ../sonata/preferences.py:194 msgid "second" msgid_plural "seconds" msgstr[0] "секунда" msgstr[1] "секунды" msgstr[2] "секунд" #: ../sonata/dbus_plugin.py:101 msgid "" "Sonata failed to connect to the D-BUS session bus: Unable to determine the " "address of the message bus (try 'man dbus-launch' and 'man dbus-daemon' for " "help)\")" msgstr "Sonata не смогла подключиться к D-Bus: Не удалось определить расположение шины сообщений (попробуйте найти решение проблемы с помощью консольных команд 'man dbus-launch' и 'man dbus-daemon')" #: ../sonata/dbus_plugin.py:121 msgid "Failed to execute remote commands." msgstr "Сбой при выполнении удаленных команд." #: ../sonata/dbus_plugin.py:123 msgid "Starting Sonata instead..." msgstr "Запуск Sonata с профилем..." #. TODO: should we log the exception here? #: ../sonata/dbus_plugin.py:126 msgid "Maybe Sonata is not running?" msgstr "Возможно Sonata не запущена?" #: ../sonata/formatting.py:28 msgid "Unknown" msgstr "Неизвестно" #: ../sonata/formatting.py:102 msgid "Artist name" msgstr "Исполнитель" #: ../sonata/formatting.py:103 msgid "Album name" msgstr "Альбом" #: ../sonata/formatting.py:104 msgid "Track name" msgstr "Название песни" #: ../sonata/formatting.py:105 msgid "Track number" msgstr "Номер дорожки" #: ../sonata/formatting.py:105 ../sonata/formatting.py:106 msgid "#" msgstr "#" #: ../sonata/formatting.py:106 msgid "Disc number" msgstr "Номер диска" #: ../sonata/formatting.py:107 msgid "Year" msgstr "Год" #: ../sonata/formatting.py:109 msgid "File path" msgstr "Путь к файлу" #: ../sonata/formatting.py:109 ../sonata/library.py:1028 msgid "Path" msgstr "Путь" #: ../sonata/formatting.py:111 msgid "File name" msgstr "Имя файла" #: ../sonata/formatting.py:113 msgid "Stream name" msgstr "Название потока" #: ../sonata/formatting.py:113 msgid "Stream" msgstr "Поток" #: ../sonata/formatting.py:114 msgid "Song length" msgstr "Длительность песни" #: ../sonata/formatting.py:114 msgid "Len" msgstr "Длина" #: ../sonata/formatting.py:115 msgid "Elapsed time (title only)" msgstr "Прошедшее время (только в заголовке)" #: ../sonata/info.py:155 msgid "hide" msgstr "спрятать" #: ../sonata/info.py:158 msgid "more" msgstr "больше" #: ../sonata/info.py:243 msgid "Album name not set." msgstr "Альбом без названия." #: ../sonata/info.py:247 msgid "Album info not found." msgstr "Нет описания альбома." #: ../sonata/info.py:309 msgid "Lyrics not found" msgstr "Текст не найден" #: ../sonata/info.py:351 msgid "Fetching lyrics..." msgstr "Получение текста..." #: ../sonata/info.py:372 msgid "Lyrics not found." msgstr "Текст не найден." #: ../sonata/info.py:375 msgid "No lyrics plug-in enabled." msgstr "Нет текстов потому что плагин не включен." #: ../sonata/library.py:14 msgid "Various Artists" msgstr "Сборник" #: ../sonata/library.py:59 msgid "Untagged" msgstr "Нет тегов" #: ../sonata/library.py:61 ../sonata/ui/library.glade.h:8 msgid "Filename" msgstr "Имя файла" #: ../sonata/library.py:61 ../sonata/ui/library.glade.h:9 msgid "Everything" msgstr "Во всех" #: ../sonata/library.py:137 msgid "Filesystem" msgstr "Файловая система" #: ../sonata/library.py:139 msgid "Albums" msgstr "Альбомы" #: ../sonata/library.py:141 msgid "Artists" msgstr "Исполнители" #: ../sonata/library.py:143 msgid "Genres" msgstr "Жанры" #: ../sonata/library.py:922 ../sonata/main.py:1561 msgid "{count} song" msgid_plural "{count} songs" msgstr[0] "{count} песня" msgstr[1] "{count} песни" msgstr[2] "{count} песен" #: ../sonata/library.py:924 msgid "{count} second" msgid_plural "{count} seconds" msgstr[0] "{count} секунда" msgstr[1] "{count} секунды" msgstr[2] "{count} секунд" #: ../sonata/library.py:926 ../sonata/main.py:1576 msgid "{count} minute" msgid_plural "{count} minutes" msgstr[0] "{count} минута" msgstr[1] "{count} минуты" msgstr[2] "{count} минут" #: ../sonata/library.py:928 ../sonata/main.py:1572 msgid "{count} hour" msgid_plural "{count} hours" msgstr[0] "{count} час" msgstr[1] "{count} часа" msgstr[2] "{count} часов" #: ../sonata/library.py:1028 msgid "Song" msgstr "Песня" #. Constants #: ../sonata/main.py:93 msgid "Current" msgstr "В ротации" #: ../sonata/main.py:94 msgid "Library" msgstr "Фонотека" #: ../sonata/main.py:95 msgid "Playlists" msgstr "Списки" #: ../sonata/main.py:96 msgid "Streams" msgstr "Потоки" #: ../sonata/main.py:97 msgid "Info" msgstr "Информация" #: ../sonata/main.py:129 ../sonata/preferences.py:195 #: ../sonata/ui/preferences.glade.h:59 msgid "Entire song" msgstr "На всю песню" #: ../sonata/main.py:171 msgid "by %A from %B" msgstr "от %A из %B" #: ../sonata/main.py:227 msgid "_Sort List" msgstr "Со_ртировать список" #: ../sonata/main.py:228 msgid "Sa_ve Selected to" msgstr "Сохранить выделеное в" #: ../sonata/main.py:229 msgid "_Connection" msgstr "Соединение" #: ../sonata/main.py:230 msgid "P_lay after" msgstr "Играть после" #: ../sonata/main.py:231 msgid "Play _Mode" msgstr "Режим _Воспроизведения" #: ../sonata/main.py:232 msgid "_Update" msgstr "_Обновить" #: ../sonata/main.py:233 msgid "Use _Remote Image..." msgstr "Изображение из _интернета..." #: ../sonata/main.py:235 msgid "Use _Local Image..." msgstr "_Локальное изображение..." #: ../sonata/main.py:238 msgid "_Fullscreen Mode" msgstr "_Полноэкранный Режим" #: ../sonata/main.py:239 msgid "Reset Image" msgstr "Сбросить изображение" #: ../sonata/main.py:241 msgid "_Play" msgstr "_Воспроизвести" #: ../sonata/main.py:243 msgid "Pa_use" msgstr "_Пауза" #: ../sonata/main.py:245 msgid "_Stop" msgstr "_Остановить" #: ../sonata/main.py:247 msgid "Pre_vious" msgstr "_Назад" #: ../sonata/main.py:249 msgid "_Next" msgstr "_Вперёд" #: ../sonata/main.py:251 msgid "_Quit" msgstr "Вы_ход" #: ../sonata/main.py:253 msgid "_Remove" msgstr "_Удалить" #: ../sonata/main.py:255 msgid "_Clear" msgstr "О_чистить" #: ../sonata/main.py:257 msgid "_Entire Library" msgstr "_Всю Фонотеку" #: ../sonata/main.py:259 msgid "_Selected Items" msgstr "_Выделенные элементы" #: ../sonata/main.py:261 msgid "_Preferences..." msgstr "_Настройки..." #: ../sonata/main.py:263 msgid "_About..." msgstr "О п_рограмме" #: ../sonata/main.py:264 msgid "_Edit Tags..." msgstr "_Править теги" #: ../sonata/main.py:266 msgid "_Add" msgstr "_Добавить" #: ../sonata/main.py:268 msgid "_Replace" msgstr "_Заменить" #: ../sonata/main.py:270 msgid "Add" msgstr "Добавить" #: ../sonata/main.py:272 msgid "Replace" msgstr "Заменить" #: ../sonata/main.py:274 msgid "_Delete..." msgstr "_Удалить" #: ../sonata/main.py:275 msgid "Shuffle" msgstr "В случайном порядке" #: ../sonata/main.py:315 msgid "S_how Sonata" msgstr "_Показать Sonata" #: ../sonata/main.py:317 msgid "_Repeat" msgstr "_Повторять" #: ../sonata/main.py:319 msgid "Rando_m" msgstr "_Случайно" #: ../sonata/main.py:321 msgid "Consume" msgstr "Удалять после проигрывания" #: ../sonata/main.py:468 msgid "By Artist" msgstr "По исполнителю" #: ../sonata/main.py:470 msgid "By Album" msgstr "По альбому" #: ../sonata/main.py:472 msgid "By Song Title" msgstr "По названию" #: ../sonata/main.py:474 msgid "By File Name" msgstr "По имени файла" #: ../sonata/main.py:476 msgid "By Dir & File Name" msgstr "По каталогу и имени файла" #: ../sonata/main.py:478 msgid "Reverse List" msgstr "В обратном порядке" #: ../sonata/main.py:519 msgid "_New..." msgstr "Создать..." #: ../sonata/main.py:521 msgid "_Edit..." msgstr "_Правка" #: ../sonata/main.py:541 msgid "_New Playlist..." msgstr "_Новый список..." #: ../sonata/main.py:543 msgid "_Rename..." msgstr "Пере_именовать" #: ../sonata/main.py:586 #, python-format msgid "Enabling new plug-in %s..." msgstr "Включение нового плагина %s..." #: ../sonata/main.py:589 #, python-format msgid "Found new plug-in %s." msgstr "Найден новый плагин %s." #: ../sonata/main.py:634 ../sonata/main.py:1645 ../sonata/main.py:1862 msgid "Click to expand" msgstr "Развернуть" #: ../sonata/main.py:637 ../sonata/main.py:1643 ../sonata/main.py:1860 msgid "Click to collapse" msgstr "Свернуть" #: ../sonata/main.py:644 ../sonata/main.py:1549 ../sonata/main.py:1650 msgid "Not Connected" msgstr "Нет соединения" #: ../sonata/main.py:646 ../sonata/main.py:1547 ../sonata/main.py:1652 msgid "No Read Permission" msgstr "Чтение не разрешено" #: ../sonata/main.py:856 msgid "MPD_HOST/PORT" msgstr "MPD_ХОСТ/ПОРТ" #: ../sonata/main.py:870 msgid "Disconnect" msgstr "Отключиться" #: ../sonata/main.py:1568 msgid "{count} day" msgid_plural "{count} days" msgstr[0] "{count} день" msgstr[1] "{count} дня" msgstr[2] "{count} дней" #: ../sonata/main.py:1585 msgid "(updating mpd)" msgstr "(обновляется база MPD)" #: ../sonata/main.py:2248 msgid "Images" msgstr "Изображения" #: ../sonata/main.py:2252 msgid "All files" msgstr "Все файлы" #: ../sonata/main.py:2372 msgid "No artist or album name found." msgstr "Исполнитель или альбом не найдены." #: ../sonata/main.py:2375 msgid "No cover art found." msgstr "Обложка не найдена." #: ../sonata/main.py:2609 msgid "Delete the selected playlist?" msgid_plural "Delete the selected playlists?" msgstr[0] "Удалить указанный список?" msgstr[1] "Удалить указанные списки?" msgstr[2] "Удалить указанные списки?" #: ../sonata/main.py:2612 msgid "Delete Playlist" msgid_plural "Delete Playlists" msgstr[0] "Удалить список" msgstr[1] "Удалить списки" msgstr[2] "Удалить списки" #: ../sonata/main.py:2626 msgid "Delete the selected stream?" msgid_plural "Delete the selected streams?" msgstr[0] "Удалить выбранный поток?" msgstr[1] "Удалить выбранные потоки?" msgstr[2] "Удалить выбранные потоки?" #: ../sonata/main.py:2629 msgid "Delete Stream" msgid_plural "Delete Streams" msgstr[0] "Удалить поток" msgstr[1] "Удалить потоки" msgstr[2] "Удалить потоки" #: ../sonata/main.py:2892 msgid "Unable to launch a suitable browser." msgstr "Не удалось запустить подходящий браузер." #: ../sonata/main.py:2893 msgid "Launch Browser" msgstr "Запустить браузер" #: ../sonata/playlists.py:114 ../sonata/playlists.py:117 msgid "Save Playlist" msgstr "Сохранить список" #: ../sonata/playlists.py:139 msgid "Existing Playlist" msgstr "Список уже существует" #: ../sonata/playlists.py:140 msgid "Replace playlist" msgstr "Заменить список" #: ../sonata/playlists.py:141 msgid "Append songs" msgstr "Добавить песни" #: ../sonata/playlists.py:215 ../sonata/playlists.py:218 msgid "Rename Playlist" msgstr "Переименовать список" #: ../sonata/plugins/localmpd.py:98 msgid "Processes" msgstr "Процессы" #: ../sonata/plugins/localmpd.py:99 msgid "Files" msgstr "Файлы" #: ../sonata/plugins/localmpd.py:108 msgid "Networking" msgstr "Сеть" #: ../sonata/plugins/ui/localmpd.glade.h:1 msgid "Local MPD" msgstr "Локальный MPD" #: ../sonata/plugins/ui/localmpd.glade.h:2 msgid "Edit /etc/mpd.conf" msgstr "Редактировать настройки в /etc/mpd.conf" #: ../sonata/plugins/ui/localmpd.glade.h:3 msgid "Restart the mpd service" msgstr "Перезагрузить службы MPD" #: ../sonata/preferences.py:152 msgid "Using MPD_HOST/PORT" msgstr "Используется MPD_HOST/PORT" #: ../sonata/preferences.py:248 ../sonata/ui/preferences.glade.h:22 msgid "SONG_DIR" msgstr "ПАПКА_ПЕСЕН" #: ../sonata/preferences.py:250 ../sonata/preferences.py:556 msgid "custom" msgstr "другое" #: ../sonata/preferences.py:371 msgid "Info displayed only if all enclosed tags are defined" msgstr "Информация отображается только при наличии всех включенных тегов" #: ../sonata/preferences.py:376 msgid "Creates columns in the current playlist" msgstr "Создать столбцы в текущем списке" #: ../sonata/preferences.py:421 msgid "" "To save lyrics to the music file's directory, you must specify a valid music" " directory." msgstr "Чтобы сохранять тексты песен в каталог с музыкой Вы должны правильно указать музыкальную директорию." #: ../sonata/preferences.py:421 ../sonata/preferences.py:428 msgid "Music Dir Verification" msgstr "Проверка каталога с музыкой" #: ../sonata/preferences.py:428 msgid "" "To save artwork to the music file's directory, you must specify a valid " "music directory." msgstr "Чтобы сохранять обложки в каталог с музыкой Вы должны правильно указать музыкальную директорию." #: ../sonata/preferences.py:494 msgid "New Profile" msgstr "Новый профиль" #: ../sonata/streams.py:105 msgid "Edit Stream" msgstr "Править поток" #: ../sonata/streams.py:107 ../sonata/streams.py:150 msgid "New Stream" msgstr "Создать поток" #: ../sonata/streams.py:149 msgid "A stream with this name already exists. Would you like to replace it?" msgstr "Поток с таким названием уже существует. Хотите ли Вы заменить его?" #: ../sonata/tagedit.py:98 msgid "Taglib and/or tagpy not found, tag editing support disabled." msgstr "Библиотеки Taglib и/или Tagpy не найдены. Правка тегов отключена." #: ../sonata/tagedit.py:98 ../sonata/tagedit.py:107 ../sonata/tagedit.py:112 #: ../sonata/tagedit.py:137 ../sonata/tagedit.py:141 ../sonata/tagedit.py:276 msgid "Edit Tags" msgstr "Править теги" #: ../sonata/tagedit.py:107 msgid "" "Tagpy version < 0.91. Please upgrade to a newer version, tag editing support" " disabled." msgstr "Версия библиотеки Tagpy < 0.91. Пожалуйста обновите библиотеку, правка тегов отключена." #: ../sonata/tagedit.py:112 #, python-format msgid "" "The path %s does not exist. Please specify a valid music directory in " "preferences." msgstr "Путь %s не действителен. Пожалуйста укажите правильную музыкальную директорию в настройках." #: ../sonata/tagedit.py:137 #, python-format msgid "" "File '%s' not found. Please specify a valid music directory in preferences." msgstr "Файл '%s' не найден. Пожалуйста укажите правильную музыкальную директорию в настройках." #: ../sonata/tagedit.py:141 msgid "No music files with editable tags found." msgstr "Не найдено файлов с редактируемыми тегами." #: ../sonata/tagedit.py:254 #, python-format msgid "Edit Tags - %s of %s" msgstr "Править теги - %s из %s" #: ../sonata/tagedit.py:275 msgid "Unable to save tag to music file." msgstr "Невозможно сохранить тег в файл." #: ../sonata/tagedit.py:332 msgid "Hide file path" msgstr "Скрыть путь к файлу" #: ../sonata/tagedit.py:335 msgid "Show file path" msgstr "Показать путь к файлу" #: ../sonata/ui/about.glade.h:1 msgid "" "Sonata, an elegant GTK+ client for the Music Player Daemon\n" "Copyright 2006-2008 Scott Horowitz <stonecrest@gmail.com>" msgstr "Sonata, элегантный GTK+ клиент для Music Player Daemon⏎\nCopyright © 2006-2008 Scott Horowitz <stonecrest@gmail.com>" #: ../sonata/ui/about.glade.h:3 msgid "An elegant music client for MPD." msgstr "Прекрасный клиент для MPD." #: ../sonata/ui/about.glade.h:4 msgid "_Shortcuts" msgstr "_Гор. клавиши" #: ../sonata/ui/about.glade.h:5 msgid "Shortcuts" msgstr "Гор. клавиши" #: ../sonata/ui/current.glade.h:1 msgid "Filter:" msgstr "Фильтр:" #: ../sonata/ui/info.glade.h:1 ../sonata/ui/tagedit.glade.h:2 msgid "Title:" msgstr "Наименование:" #: ../sonata/ui/info.glade.h:2 ../sonata/ui/sonata.glade.h:2 #: ../sonata/ui/tagedit.glade.h:3 msgid "Artist:" msgstr "Исполнитель:" #: ../sonata/ui/info.glade.h:3 ../sonata/ui/sonata.glade.h:3 #: ../sonata/ui/tagedit.glade.h:4 msgid "Album:" msgstr "Альбом:" #: ../sonata/ui/info.glade.h:4 msgid "Date:" msgstr "Год:" #: ../sonata/ui/info.glade.h:5 ../sonata/ui/tagedit.glade.h:8 msgid "Track:" msgstr "№ дорожки:" #: ../sonata/ui/info.glade.h:6 ../sonata/ui/tagedit.glade.h:6 msgid "Genre:" msgstr "Жанр:" #: ../sonata/ui/info.glade.h:7 msgid "File:" msgstr "Файл:" #: ../sonata/ui/info.glade.h:8 msgid "Bitrate:" msgstr "Битрейт:" #: ../sonata/ui/info.glade.h:9 msgid "Launch artist in Wikipedia" msgstr "Поиск исполнителя в Википедии" #: ../sonata/ui/info.glade.h:10 msgid "Launch album in Wikipedia" msgstr "Поиск альбома в Википедии" #: ../sonata/ui/info.glade.h:11 msgid "Toggle extra tags" msgstr "Дополнительные теги" #: ../sonata/ui/info.glade.h:12 msgid "Edit song tags" msgstr "Правка тегов песни" #: ../sonata/ui/info.glade.h:13 msgid "(edit tags)" msgstr "(править теги)" #: ../sonata/ui/info.glade.h:14 msgid "Song Info" msgstr "О песне" #: ../sonata/ui/info.glade.h:15 msgid "Search Lyricwiki.org for lyrics" msgstr "Поиск текстов на Lyricwiki.org" #: ../sonata/ui/info.glade.h:16 msgid "(search)" msgstr "(поиск)" #: ../sonata/ui/info.glade.h:17 msgid "Lyrics" msgstr "Тексты" #: ../sonata/ui/info.glade.h:18 msgid "Album Info" msgstr "Об альбоме" #: ../sonata/ui/library.glade.h:1 msgid "Search:" msgstr "Поиск:" #: ../sonata/ui/library.glade.h:3 msgid "Search terms" msgstr "Условия поиска" #: ../sonata/ui/library.glade.h:10 msgid "End Search" msgstr "Завершить поиск" #: ../sonata/ui/playlists.glade.h:1 msgid "Playlist name:" msgstr "Название списка:" #: ../sonata/ui/preferences.glade.h:1 msgid "Custom Artwork" msgstr "Особая обложка " #: ../sonata/ui/preferences.glade.h:2 msgid "Artwork filename:" msgstr "Имя файла обложки:" #: ../sonata/ui/preferences.glade.h:3 msgid "_About" msgstr "О п_рограмме" #: ../sonata/ui/preferences.glade.h:4 msgid "_Configure..." msgstr "_Настройки..." #: ../sonata/ui/preferences.glade.h:6 msgid "_Name:" msgstr "_Имя:" #: ../sonata/ui/preferences.glade.h:7 msgid "_Host:" msgstr "_Хост:" #: ../sonata/ui/preferences.glade.h:8 msgid "_Port:" msgstr "_Порт:" #: ../sonata/ui/preferences.glade.h:9 msgid "Leave blank if no password is required." msgstr "Оставьте поле пустым если пароль не требуется." #: ../sonata/ui/preferences.glade.h:10 msgid "Pa_ssword:" msgstr "_Пароль:" #: ../sonata/ui/preferences.glade.h:11 msgid "Select a Music Directory" msgstr "Выберите Каталог с музыкой" #: ../sonata/ui/preferences.glade.h:12 msgid "_Music dir:" msgstr "_Музыкальная директория:" #: ../sonata/ui/preferences.glade.h:13 msgid "_Autoconnect on start" msgstr "Подключаться при з_апуске" #: ../sonata/ui/preferences.glade.h:14 msgid "MPD Connection" msgstr "Соединение с MPD" #: ../sonata/ui/preferences.glade.h:15 msgid "MPD" msgstr "MPD" #: ../sonata/ui/preferences.glade.h:16 msgid "_Playback/volume buttons" msgstr "Кно_пки воспроизведения и регулятор громкости" #: ../sonata/ui/preferences.glade.h:17 msgid "Pr_ogressbar" msgstr "Индикат_ор позиции" #: ../sonata/ui/preferences.glade.h:18 msgid "_Statusbar" msgstr "_Статусная строка" #: ../sonata/ui/preferences.glade.h:19 msgid "System _tray icon" msgstr "Иконка в _трее" #: ../sonata/ui/preferences.glade.h:20 msgid "Song Ly_rics" msgstr "_Тексты" #: ../sonata/ui/preferences.glade.h:21 msgid "Save lyrics to:" msgstr "Сохранять тексты в:" #: ../sonata/ui/preferences.glade.h:23 msgid "_Album art" msgstr "_Альбом" #: ../sonata/ui/preferences.glade.h:24 msgid "Artwork style:" msgstr "Стиль обложки:" #: ../sonata/ui/preferences.glade.h:25 msgid "Standard" msgstr "Обычная" #: ../sonata/ui/preferences.glade.h:26 msgid "Stylized" msgstr "Стилизованная" #: ../sonata/ui/preferences.glade.h:27 msgid "Search locations:" msgstr "Место поиска:" #: ../sonata/ui/preferences.glade.h:28 msgid "Local only" msgstr "Только локально" #: ../sonata/ui/preferences.glade.h:29 msgid "Local and remote" msgstr "Локально и удаленно" #: ../sonata/ui/preferences.glade.h:30 msgid "Save art to:" msgstr "Сохранять обложки в:" #: ../sonata/ui/preferences.glade.h:31 msgid "Display" msgstr "Отображение" #: ../sonata/ui/preferences.glade.h:32 msgid "_Show window on all workspaces" msgstr "Показывать на всех рабочих _столах" #: ../sonata/ui/preferences.glade.h:33 msgid "_Keep window above other windows" msgstr "_Поверх остальных окон" #: ../sonata/ui/preferences.glade.h:34 msgid "_Hide window titlebar" msgstr "_Спрятать заголовок окна" #: ../sonata/ui/preferences.glade.h:35 msgid "_Minimize to system tray on close/escape" msgstr "_Сворачивать в трей при закрытии/нажатии escape" #: ../sonata/ui/preferences.glade.h:36 msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray," " so only check this if you have one." msgstr "Если выбрано, то при закрытии Sonata будет сворачиваться в трей. Имейте в виду, что на данный момент невозможно определить, есть ли у вас трей, так что отмечайте только если вы уверены, что он есть." #: ../sonata/ui/preferences.glade.h:37 msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, so " "only check this if you have one." msgstr "Если отмечено, при закрытии Sonata будет сворачиваться в трей. Имейте в виду, что на данный момент невозможно определить, есть ли у вас трей, так что отмечайте только если вы уверены, что он есть." #: ../sonata/ui/preferences.glade.h:38 msgid "Window Behavior" msgstr "Поведение окна" #: ../sonata/ui/preferences.glade.h:39 msgid "_Update MPD library on start" msgstr "О_бновлять фонотеку MPD при запуске" #: ../sonata/ui/preferences.glade.h:40 msgid "" "If enabled, Sonata will automatically update your MPD library when it starts" " up." msgstr "Если отмечено, Sonata будет автоматически обновлять фонотеку MPD при старте." #: ../sonata/ui/preferences.glade.h:41 msgid "S_top playback on exit" msgstr "Ос_танавливать воспроизведение при выходе" #: ../sonata/ui/preferences.glade.h:42 msgid "" "MPD allows playback even when the client is not open. If enabled, Sonata " "will behave like a more conventional music player and, instead, stop " "playback upon exit." msgstr "MPD позволяет проигрывание даже если клиент не запущен. Если включено, Sonata будет похожа на обычный плеер и останавливать воспроизведение при выходе." #: ../sonata/ui/preferences.glade.h:43 msgid "_Write status file:" msgstr "_Записывать статус в файл:" #: ../sonata/ui/preferences.glade.h:44 msgid "" "If enabled, Sonata will create a xmms-infopipe like file containing " "information about the current song. Many applications support the xmms-info " "file (Instant Messengers, IRC Clients...)" msgstr "Если отмечено, Sonata будет создавать XMMS-подобный файл информации о текущей песне. Такой файл используется многими приложениями (программы обмена мгновенными сообщениями, клиенты IRC...)." #: ../sonata/ui/preferences.glade.h:45 msgid "Miscellaneous" msgstr "Разное" #: ../sonata/ui/preferences.glade.h:46 msgid "Behavior" msgstr "Поведение" #: ../sonata/ui/preferences.glade.h:47 msgid "C_urrent playlist:" msgstr "_Текущий список:" #: ../sonata/ui/preferences.glade.h:48 msgid "_Library:" msgstr "_Фонотека:" #: ../sonata/ui/preferences.glade.h:49 msgid "_Window title:" msgstr "Заголо_вок окна:" #: ../sonata/ui/preferences.glade.h:50 msgid "Current _song line 1:" msgstr "Текущая _запись строка 1:" #: ../sonata/ui/preferences.glade.h:51 msgid "Current s_ong line 2:" msgstr "Текущая з_апись строка 2:" #: ../sonata/ui/preferences.glade.h:52 msgid "<small>Available options:</small>" msgstr "<small>Доступные опции:</small>" #: ../sonata/ui/preferences.glade.h:53 msgid "Song Formatting" msgstr "Форматирование информации" #: ../sonata/ui/preferences.glade.h:54 msgid "Format" msgstr "Форматирование" #: ../sonata/ui/preferences.glade.h:55 msgid "_Audioscrobbling (Last.fm)" msgstr "_Аудио скробблинг (посредством Last.fm)" #: ../sonata/ui/preferences.glade.h:56 msgid "_Username:" msgstr "_Идентификатор:" #: ../sonata/ui/preferences.glade.h:57 msgid "_Password:" msgstr "_Пароль:" #: ../sonata/ui/preferences.glade.h:58 msgid "Popup _notification on song changes" msgstr "Всплывающее уведомле_ние при смене песни" #: ../sonata/ui/preferences.glade.h:60 msgid "System tray" msgstr "В трее" #: ../sonata/ui/preferences.glade.h:61 msgid "Top Left" msgstr "Слева вверху" #: ../sonata/ui/preferences.glade.h:62 msgid "Top Right" msgstr "Справа вверху" #: ../sonata/ui/preferences.glade.h:63 msgid "Bottom Left" msgstr "Слева внизу" #: ../sonata/ui/preferences.glade.h:64 msgid "Bottom Right" msgstr "Справа внизу" #: ../sonata/ui/preferences.glade.h:65 msgid "Screen Center" msgstr "Центр экрана" #: ../sonata/ui/preferences.glade.h:66 msgid "C_rossfade" msgstr "Пе_рекрестное затухание" #: ../sonata/ui/preferences.glade.h:67 msgid "_Fade length:" msgstr "_Длительность затухания:" #: ../sonata/ui/preferences.glade.h:68 msgid "sec" msgstr "сек" #: ../sonata/ui/preferences.glade.h:69 msgid "Extras" msgstr "Дополнительно" #: ../sonata/ui/preferences.glade.h:70 msgid "Enabled" msgstr "Доступно" #: ../sonata/ui/preferences.glade.h:71 msgid "Description" msgstr "Описание" #: ../sonata/ui/preferences.glade.h:72 msgid "Plugins" msgstr "Плагины" #: ../sonata/ui/sonata.glade.h:1 msgid "Choose Cover Art" msgstr "Выбрать Обложку" #: ../sonata/ui/sonata.glade.h:4 msgid "Edit search terms" msgstr "Править условия поиска" #: ../sonata/ui/sonata.glade.h:5 msgid "Cover Art" msgstr "Обложка" #: ../sonata/ui/sonata.glade.h:6 msgid "Open Image" msgstr "Открыть Изображение" #: ../sonata/ui/sonata.glade.h:7 msgid "Lyrics Search" msgstr "Поиск Текстов" #: ../sonata/ui/sonata.glade.h:8 msgid "Artist Name:" msgstr "Исполнитель:" #: ../sonata/ui/sonata.glade.h:9 msgid "Song Title:" msgstr "Название песни:" #: ../sonata/ui/sonata.glade.h:10 msgid "Playlist" msgstr "Списки" #: ../sonata/ui/streams.glade.h:1 msgid "Stream name:" msgstr "Название потока:" #: ../sonata/ui/streams.glade.h:2 msgid "Stream URL:" msgstr "URL потока:" #: ../sonata/ui/tagedit.glade.h:1 msgid "Save _All" msgstr "Сохранить _Всё" #: ../sonata/ui/tagedit.glade.h:5 msgid "Year:" msgstr "Год:" #: ../sonata/ui/tagedit.glade.h:7 msgid "Comment:" msgstr "Комментарий:" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/po/sk.po�������������������������������������������������������������������������������0000664�0000000�0000000�00000112130�13771420143�0014377�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Slovak translation of Sonata # Copyright (C) 2008 Sonata 'S COPYRIGHT HOLDER # This file is distributed under the same license as the Sonata package. # Robert Hartl <hartl.robert@gmail.com>, 2008, 2009. msgid "" msgstr "" "Project-Id-Version: sonata svn\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-04-11 13:21-0600\n" "PO-Revision-Date: 2009-08-24 13:30+0200\n" "Last-Translator: Robert Hartl <hartl.robert@gmail.com>\n" "Language-Team: slovak <sk-i18n@lists.linux.sk>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : n>=2 && n<=4 ? 1 : 2;\n" #. define the shortcuts and their descriptions #. these are all gettextable #: .././sonata/about.py:54 msgid "About Sonata" msgstr "O programe Snata" #: .././sonata/about.py:55 .././sonata/preferences.py:96 msgid "Preferences" msgstr "Možnosti" #: .././sonata/about.py:56 msgid "Fullscreen Artwork Mode" msgstr "Obrázok na celú obrazovku" #: .././sonata/about.py:57 msgid "Switch to [1st-5th] tab" msgstr "Prepnúť na kartu [1-5]" #: .././sonata/about.py:58 msgid "Connect to MPD" msgstr "Pripojiť sa na MPD" #: .././sonata/about.py:59 msgid "Disconnect from MPD" msgstr "Odpojiť od MPD" #: .././sonata/about.py:60 msgid "Randomize current playlist" msgstr "Náhodne zoradiť aktuálny zoznam" #: .././sonata/about.py:61 msgid "Expand player" msgstr "Zväčšiť prehrávač" #: .././sonata/about.py:62 msgid "Switch to previous tab" msgstr "Prejsť na predchádzajúcu kartu" #: .././sonata/about.py:63 msgid "Switch to next tab" msgstr "Prejsť na ďalšiu kartu" #: .././sonata/about.py:64 msgid "Collapse player" msgstr "Zmenšiť prehrávač" #: .././sonata/about.py:65 .././sonata/library.py:79 msgid "Search library" msgstr "Prehľadať knižnicu" #: .././sonata/about.py:66 msgid "Quit" msgstr "Koniec" #: .././sonata/about.py:67 msgid "Update entire library" msgstr "Aktualizovať celú knižnicu" #: .././sonata/about.py:68 msgid "Display popup menu" msgstr "Zobraziť vyskakovacie okno" #: .././sonata/about.py:69 msgid "Minimize to system tray (if enabled)" msgstr "Skryť do systémovej oblasti (ak je zapnutá)" #: .././sonata/about.py:71 msgid "Previous track" msgstr "Predchádzajúca skladba" #: .././sonata/about.py:72 msgid "Next track" msgstr "Ďalšia skladba" #: .././sonata/about.py:73 msgid "Play/Pause" msgstr "Hrať/Pozastaviť" #: .././sonata/about.py:74 msgid "Stop" msgstr "Zastaviť" #: .././sonata/about.py:75 msgid "Lower the volume" msgstr "Znížiť hlasitosť" #: .././sonata/about.py:76 msgid "Raise the volume" msgstr "Zvýšiť hlasitosť" #: .././sonata/about.py:78 msgid "Play selected song" msgstr "Prehrať vybranú skladbu" #: .././sonata/about.py:79 msgid "Remove selected song(s)" msgstr "Zmazať vybrané skladby" #: .././sonata/about.py:80 msgid "Center currently playing song" msgstr "Umiestniť prehrávanú skladbu na stred" #: .././sonata/about.py:81 .././sonata/about.py:90 msgid "Edit selected song's tags" msgstr "Upraviť tagy vybranej skladby" #: .././sonata/about.py:82 msgid "Save to new playlist" msgstr "Uložiť nový zoznam skladieb" #: .././sonata/about.py:83 msgid "Clear list" msgstr "Vymazať zoznam" #: .././sonata/about.py:84 msgid "Randomize list" msgstr "Náhodne zoradiť zoznam" #: .././sonata/about.py:86 msgid "Add selected song(s) or enter directory" msgstr "Pridať vybranú skladbu alebo vstúpiť do priečinku" #: .././sonata/about.py:87 msgid "Go to parent directory" msgstr "Ísť do nadradeného priečinku" #: .././sonata/about.py:88 msgid "Add selected item(s)" msgstr "Pridať vybrané položky" #: .././sonata/about.py:89 msgid "Replace with selected item(s)" msgstr "Prepísať vybranými položkami" #: .././sonata/about.py:91 msgid "Add selected item(s) and play" msgstr "Pridať vybrané položky a prehrať" #: .././sonata/about.py:92 msgid "Replace with selected item(s) and play" msgstr "Nahradiť vybranými položkami a prehrať" #: .././sonata/about.py:93 msgid "Update selected item(s)/path(s)" msgstr "Aktualizovať vybrané položky/cesty" #: .././sonata/about.py:95 .././sonata/about.py:97 msgid "Add selected playlist(s)" msgstr "Pridať vybrané zoznamy skladieb" #: .././sonata/about.py:96 msgid "Remove selected playlist(s)" msgstr "Zmazať vybrané zoznam skladieb" #: .././sonata/about.py:98 msgid "Replace with selected playlist(s)" msgstr "Nahradiť vybranými zoznamami skladieb" #: .././sonata/about.py:99 msgid "Add selected playlist(s) and play" msgstr "Pridať označené zoznamy skladieb a prehrať" #: .././sonata/about.py:100 msgid "Replace with selected playlist(s) and play" msgstr "Nahradiť vybranými zoznamami skladieb a prehrať" #: .././sonata/about.py:102 .././sonata/about.py:104 msgid "Add selected stream(s)" msgstr "Pridať vybrané streamy" #: .././sonata/about.py:103 msgid "Remove selected stream(s)" msgstr "Zmazať vybrané streamy" #: .././sonata/about.py:105 msgid "Replace with selected stream(s)" msgstr "Nahradiť vybrané streamy" #: .././sonata/about.py:106 msgid "Add selected stream(s) and play" msgstr "Pridať vybrané streamy a prehrať" #: .././sonata/about.py:107 msgid "Replace with selected stream(s) and play" msgstr "Nahradiť vybrané streamy a prehrať" #: .././sonata/about.py:109 msgid "Edit playing song's tags" msgstr "Upraviť tagy prehrávenej skladby" #. define the main array- this adds headings to each section of #. shortcuts that will be displayed #: .././sonata/about.py:112 msgid "Main Shortcuts" msgstr "Hlavné skratky" #: .././sonata/about.py:113 msgid "Playback Shortcuts" msgstr "Skratky pre prehrávanie" #: .././sonata/about.py:114 msgid "Current Shortcuts" msgstr "Skratky pre aktuálny zoznam skladieb" #: .././sonata/about.py:115 msgid "Library Shortcuts" msgstr "Skratky pre knižnicu" #: .././sonata/about.py:116 msgid "Playlist Shortcuts" msgstr "Skratky pre zoznam skladieb" #: .././sonata/about.py:117 msgid "Stream Shortcuts" msgstr "Skratky pre stream" #: .././sonata/about.py:118 msgid "Info Shortcuts" msgstr "Skratky pre informácie" #: .././sonata/about.py:119 msgid "Shortcuts" msgstr "Skratky" #. XXX translate expressions, not words #. Show text: #: .././sonata/about.py:147 .././sonata/library.py:862 #: .././sonata/main.py:1756 msgid "song" msgid_plural "songs" msgstr[0] "skladba" msgstr[1] "skladby" msgstr[2] "skladieb" #: .././sonata/about.py:148 msgid "album" msgid_plural "albums" msgstr[0] "album" msgstr[1] "albumy" msgstr[2] "albumov" #: .././sonata/about.py:149 msgid "artist" msgid_plural "artists" msgstr[0] "umelec" msgstr[1] "umelci" msgstr[2] "umelcov" #: .././sonata/about.py:156 msgid "day of bliss" msgid_plural "days of bliss" msgstr[0] "deň blaha" msgstr[1] "dni blaha" msgstr[2] "dní blaha" #: .././sonata/about.py:158 msgid "hour of bliss" msgid_plural "hours of bliss" msgstr[0] "hodina blaha" msgstr[1] "hodiny blaha" msgstr[2] "hodín blaha" #: .././sonata/about.py:172 msgid "An elegant music client for MPD." msgstr "Elegantný klient pre MPD" #. Add button to show keybindings: #: .././sonata/about.py:185 msgid "_Shortcuts" msgstr "_Skratky" #: .././sonata/about.py:196 .././sonata/main.py:3103 #: .././sonata/preferences.py:880 msgid "Unable to launch a suitable browser." msgstr "Nie je možné spustiť vhodný prehliadač." #: .././sonata/about.py:196 .././sonata/main.py:3103 #: .././sonata/preferences.py:880 msgid "Launch Browser" msgstr "Spustiť prehliadač" #: .././sonata/cli.py:81 msgid "The toggle and popup arguments require D-Bus. Aborting." msgstr "Parameter toggle a popup vyžadujú D-Bus. Ruší sa." #: .././sonata/cli.py:97 msgid "Version" msgstr "Verzia" #: .././sonata/cli.py:98 msgid "Website" msgstr "Webová stránka" #: .././sonata/cli.py:103 msgid "Usage: sonata [OPTION]... [COMMAND]..." msgstr "Použitie: sonata [VOĽBA]... [PRÍKAZ]..." #: .././sonata/cli.py:105 msgid "Options" msgstr "Voľby" #: .././sonata/cli.py:106 msgid "Show this help and exit" msgstr "Zobrazí tohto pomocníka a ukončí" #: .././sonata/cli.py:107 msgid "Popup song notification (requires D-Bus)" msgstr "Vyskakovacie oznámenie o skladbe (potrebuje D-Bus)" #: .././sonata/cli.py:108 msgid "Toggles whether the app is minimized" msgstr "Prepína ak je aplikácia minimalizovaná" #: .././sonata/cli.py:109 msgid "to tray or visible (requires D-Bus)" msgstr "v systémovej oblasti alebo viditeľná (vyžaduje D-Bus)" #: .././sonata/cli.py:110 msgid "Don't start app if D-Bus commands fail" msgstr "Nespúšťať aplikáciu ak D-Bus príkaz zlyhá" #: .././sonata/cli.py:111 msgid "Show version information and exit" msgstr "Zobrazí verziu a ukončí" #: .././sonata/cli.py:112 msgid "Start app hidden (requires systray)" msgstr "Spustiť aplikáciu skrytú (vyžaduje systray)" #: .././sonata/cli.py:113 msgid "Start app visible (requires systray)" msgstr "Spustiť aplikáciu viditeľnú (vyžaduje systray)" #: .././sonata/cli.py:114 msgid "Start with profile [NUM]" msgstr "Spustiť s profilom [NUM]" #: .././sonata/cli.py:116 msgid "Commands" msgstr "Príkazy" #: .././sonata/cli.py:117 msgid "Play song in playlist" msgstr "Prehrať skladbu v zozname skladieb" #: .././sonata/cli.py:118 msgid "Pause currently playing song" msgstr "Pozastaviť prehrávanú skladbu" #: .././sonata/cli.py:119 msgid "Stop currently playing song" msgstr "Zastaviť prehrávanú skladbu" #: .././sonata/cli.py:120 msgid "Play next song in playlist" msgstr "Prehrať ďalšiu skladbu v zozname skladieb" #: .././sonata/cli.py:121 msgid "Play previous song in playlist" msgstr "Prehrať predchádzajúcu skladbu v zozname skladieb" #: .././sonata/cli.py:122 msgid "Toggle play/pause; plays if stopped" msgstr "Zmeniť prehrávanie/pozastavenie; ak je zastavené" #: .././sonata/cli.py:123 msgid "Toggle repeat mode" msgstr "Prepnúť do módu opakovania" #: .././sonata/cli.py:124 msgid "Toggle random mode" msgstr "Prepnúť do náhodného módu" #: .././sonata/cli.py:125 msgid "Display current song info" msgstr "Zobraziť informácie o aktuálnej skladbe" #: .././sonata/cli.py:126 msgid "Display MPD status" msgstr "Zobraziť stav MPD" #: .././sonata/cli.py:134 #, python-format msgid "Starting Sonata with profile %s..." msgstr "Spustiť Sonatu s profilom %s..." #: .././sonata/cli.py:136 #, python-format msgid "%d is not an available profile number." msgstr "%d nie je dostupné číslo profilu." #: .././sonata/cli.py:137 .././sonata/cli.py:141 #, python-format msgid "Profile numbers must be between 1 and %d." msgstr "Číslo profilu musí byť medzi 1 a %d." #: .././sonata/cli.py:140 #, python-format msgid "Python is unable to interpret %s as a number." msgstr "Python nemôže interpretovať %s ako číslo." #: .././sonata/cli.py:154 .././sonata/main.py:178 msgid "Default Profile" msgstr "Štandardný profil" #: .././sonata/cli.py:154 .././sonata/main.py:178 msgid "by" msgstr "od" #: .././sonata/cli.py:154 .././sonata/main.py:178 msgid "from" msgstr "z" #: .././sonata/cli.py:176 msgid "" "Unable to connect to MPD.\n" "Please check your Sonata preferences or MPD_HOST/MPD_PORT environment " "variables." msgstr "" "Nie je možné sa pripojiť s MPD.\n" "Prosím skontrolujte nastavenia Sonaty alebo premenné prostredie MPD_HOST/" "MPD_PORT." #: .././sonata/cli.py:208 .././sonata/info.py:90 .././sonata/library.py:45 #: .././sonata/tagedit.py:125 msgid "Title" msgstr "Názov" #: .././sonata/cli.py:209 .././sonata/info.py:91 .././sonata/library.py:45 #: .././sonata/main.py:1180 .././sonata/tagedit.py:126 msgid "Artist" msgstr "Umelec" #: .././sonata/cli.py:210 .././sonata/info.py:93 .././sonata/library.py:45 #: .././sonata/main.py:1181 .././sonata/main.py:2432 #: .././sonata/tagedit.py:127 msgid "Album" msgstr "Album" #: .././sonata/cli.py:211 .././sonata/info.py:95 msgid "Date" msgstr "Dátum" #: .././sonata/cli.py:212 .././sonata/info.py:96 .././sonata/main.py:1182 #: .././sonata/tagedit.py:130 msgid "Track" msgstr "Stopa" #: .././sonata/cli.py:213 .././sonata/info.py:97 .././sonata/library.py:45 #: .././sonata/main.py:1185 .././sonata/preferences.py:557 #: .././sonata/tagedit.py:139 msgid "Genre" msgstr "Žáner" #: .././sonata/cli.py:214 .././sonata/info.py:98 .././sonata/main.py:1187 msgid "File" msgstr "Súbor" #: .././sonata/cli.py:219 .././sonata/cli.py:221 msgid "Time" msgstr "Čas" #: .././sonata/cli.py:222 .././sonata/info.py:99 msgid "Bitrate" msgstr "Dátový tok" #: .././sonata/cli.py:224 msgid "MPD stopped" msgstr "MPD zastavené" #: .././sonata/cli.py:228 .././sonata/cli.py:230 .././sonata/cli.py:232 msgid "State" msgstr "Stav" #: .././sonata/cli.py:228 msgid "Playing" msgstr "Prehrávanie" #: .././sonata/cli.py:230 msgid "Paused" msgstr "Pozastavené" #: .././sonata/cli.py:232 .././sonata/main.py:562 .././sonata/main.py:567 #: .././sonata/main.py:1829 .././sonata/main.py:1840 msgid "Stopped" msgstr "Zastavené" #: .././sonata/cli.py:234 .././sonata/cli.py:236 msgid "Repeat" msgstr "Opakovať" #: .././sonata/cli.py:234 .././sonata/cli.py:238 msgid "Off" msgstr "Off" #: .././sonata/cli.py:236 .././sonata/cli.py:240 msgid "On" msgstr "On" #: .././sonata/cli.py:238 .././sonata/cli.py:240 msgid "Random" msgstr "Náhodne" #: .././sonata/cli.py:241 msgid "Volume" msgstr "Hlasitosť" #: .././sonata/cli.py:242 msgid "Crossfade" msgstr "Prelínanie" #: .././sonata/cli.py:242 .././sonata/preferences.py:277 msgid "second" msgid_plural "seconds" msgstr[0] "sekunda" msgstr[1] "sekundy" msgstr[2] "sekúnd" #: .././sonata/current.py:64 msgid "Filter" msgstr "Filter" #: .././sonata/dbus_plugin.py:83 msgid "" "Sonata failed to connect to the D-BUS session bus: Unable to determine the " "address of the message bus (try 'man dbus-launch' and 'man dbus-daemon' for " "help)" msgstr "" "Sonata zlyhala pri spojovaní s D-BUS session bus: Nieje možné určiť adresu " "správy bus (skúste 'man-dbus-launch' a 'man dbus-deamon' pre pomocníka)" #: .././sonata/dbus_plugin.py:96 msgid "Failed to execute remote commands." msgstr "Zlyhalo spustenie vzdialených príkazov." #: .././sonata/dbus_plugin.py:98 msgid "Starting Sonata instead..." msgstr "Spustiť Sonatu namiesto..." #: .././sonata/dbus_plugin.py:100 msgid "Maybe Sonata is not running?" msgstr "Možno je už Sonata spustená" #: .././sonata/dbus_plugin.py:114 msgid "An instance of Sonata is already running. Showing it..." msgstr "Jedna inštancia Sonaty je už spustená..." #: .././sonata/dbus_plugin.py:120 msgid "Failed to execute remote command." msgstr "Zlyhalo spustenie vzdialeného príkazu." #. Song info #: .././sonata/info.py:78 msgid "Song Info" msgstr "Informácie o skladbe" #: .././sonata/info.py:92 msgid "Launch artist in Wikipedia" msgstr "Prejsť na umelca vo Wikipédii" #: .././sonata/info.py:94 msgid "Launch album in Wikipedia" msgstr "Prejsť na album vo Wikipédii" #: .././sonata/info.py:128 msgid "Toggle extra tags" msgstr "Prepnúť dodatočné tagy" #: .././sonata/info.py:131 msgid "Edit song tags" msgstr "Upraviť tagy skladby" #. Lyrics #: .././sonata/info.py:141 msgid "Lyrics" msgstr "Text skladby" #: .././sonata/info.py:153 msgid "Search Lyricwiki.org for lyrics" msgstr "Vyhľadať text na Lyricwiki.org" #: .././sonata/info.py:154 msgid "Edit lyrics at Lyricwiki.org" msgstr "Upraviť text na Lyricwiki.org" #. Album info #: .././sonata/info.py:162 msgid "Album Info" msgstr "Informácie o albume" #: .././sonata/info.py:214 .././sonata/info.py:219 msgid "more" msgstr "viac" #: .././sonata/info.py:216 msgid "hide" msgstr "skryť" #: .././sonata/info.py:282 msgid "edit tags" msgstr "upraviť tagy" #: .././sonata/info.py:309 msgid "Album info not found." msgstr "Informácie o albume sa nenašli." #: .././sonata/info.py:312 msgid "Album name not set." msgstr "Meno albumu nie je nastavene." #: .././sonata/info.py:326 msgid "ZSI not found, fetching lyrics support disabled." msgstr "ZSI nie je dostupný, získavanie textov bude vypnuté." #: .././sonata/info.py:331 msgid "Artist or song title not set." msgstr "Umelec alebo skladba nie je nastavená." #: .././sonata/info.py:373 msgid "search" msgstr "hľadať" #: .././sonata/info.py:374 msgid "edit" msgstr "upraviť" #: .././sonata/info.py:383 .././sonata/info.py:438 msgid "Lyrics not found" msgstr "Text nie je dostupný" #. Fetch lyrics from lyricwiki.org #: .././sonata/info.py:403 msgid "Fetching lyrics..." msgstr "Získavam text..." #: .././sonata/info.py:413 msgid "Couldn't connect to LyricWiki" msgstr "Nie je možné sa pripojiť k LyricWiki" #: .././sonata/info.py:441 msgid "Fetching lyrics failed" msgstr "Získavanie textu zlyhalo" #: .././sonata/library.py:43 msgid "Untagged" msgstr "Bez tagov" #: .././sonata/library.py:44 msgid "Various Artists" msgstr "Rôzny umelci" #: .././sonata/library.py:45 msgid "Filename" msgstr "Názov súboru" #: .././sonata/library.py:45 msgid "Everything" msgstr "Všetko" #: .././sonata/library.py:77 msgid "Search terms" msgstr "Hľadať výraz" #: .././sonata/library.py:83 msgid "End Search" msgstr "Ukončiť hľadanie" #: .././sonata/library.py:85 msgid "Library browsing view" msgstr "Prehliadanie knižnice" #: .././sonata/library.py:89 msgid "Search" msgstr "Hľadať" #: .././sonata/library.py:112 msgid "Filesystem" msgstr "Systém súborov" #: .././sonata/library.py:114 msgid "Albums" msgstr "Albumy" #: .././sonata/library.py:116 msgid "Artists" msgstr "Umelci" #: .././sonata/library.py:118 msgid "Genres" msgstr "Žánre" #. add the views button first #: .././sonata/library.py:378 msgid " v " msgstr " v " #: .././sonata/library.py:862 .././sonata/main.py:1750 msgid "minute" msgid_plural "minutes" msgstr[0] "minúta" msgstr[1] "minúty" msgstr[2] "minút" #: .././sonata/library.py:950 msgid "Song" msgstr "Skladba" #: .././sonata/library.py:950 .././sonata/main.py:1186 msgid "Path" msgstr "Cesta" #. Constants #: .././sonata/main.py:102 msgid "Current" msgstr "Aktuálne" #: .././sonata/main.py:103 msgid "Library" msgstr "Knižnica" #: .././sonata/main.py:104 msgid "Playlists" msgstr "Zoznamy skladieb" #: .././sonata/main.py:105 msgid "Streams" msgstr "Stramy" #: .././sonata/main.py:106 msgid "Info" msgstr "Informácie" #: .././sonata/main.py:137 .././sonata/preferences.py:278 #: .././sonata/preferences.py:279 msgid "Entire song" msgstr "Celá skladba" #: .././sonata/main.py:236 msgid "_Sort List" msgstr "_Zoradiť zoznam" #: .././sonata/main.py:237 msgid "Sa_ve List to" msgstr "Uložiť zoznam skladieb do" #: .././sonata/main.py:238 msgid "_Connection" msgstr "_Pripojenie" #: .././sonata/main.py:239 msgid "P_lay after" msgstr "Pr_ehrať po" #: .././sonata/main.py:240 .././sonata/main.py:2446 msgid "_Update" msgstr "_Aktualizovať" #: .././sonata/main.py:241 msgid "Use _Remote Image..." msgstr "Použiť _vzdialený obrázok" #: .././sonata/main.py:242 msgid "Use _Local Image..." msgstr "Použiť _lokálny obrázok" #: .././sonata/main.py:243 msgid "_Fullscreen Mode" msgstr "_Celá obrazovka" #: .././sonata/main.py:244 msgid "Reset Image" msgstr "Vynulovať obrázok" #: .././sonata/main.py:245 msgid "_Play" msgstr "_Prehrať" #: .././sonata/main.py:246 msgid "Pa_use" msgstr "Poza_staviť" #: .././sonata/main.py:247 msgid "_Stop" msgstr "_Zastaviť" #: .././sonata/main.py:248 msgid "Pre_vious" msgstr "_Predchádzajúcu" #: .././sonata/main.py:249 msgid "_Next" msgstr "_Ďalšiu" #: .././sonata/main.py:250 msgid "_Quit" msgstr "_Koniec" #: .././sonata/main.py:251 msgid "_Remove" msgstr "_Zmazať" #: .././sonata/main.py:252 msgid "_Clear" msgstr "Zmazať _všetko" #: .././sonata/main.py:253 msgid "_Entire Library" msgstr "_Celú knižnicu" #: .././sonata/main.py:254 msgid "_Selected Items" msgstr "_Vybrané položky" #: .././sonata/main.py:255 msgid "_Preferences..." msgstr "_Možnosti" #: .././sonata/main.py:256 msgid "_About..." msgstr "_O programe" #: .././sonata/main.py:257 msgid "_Edit Tags..." msgstr "_Upraviť tagy..." #: .././sonata/main.py:258 msgid "_Add" msgstr "_Pridať" #: .././sonata/main.py:259 msgid "_Replace" msgstr "_Nahradiť" #: .././sonata/main.py:260 msgid "Add" msgstr "Pridať" #: .././sonata/main.py:261 msgid "Replace" msgstr "Nahradiť" #: .././sonata/main.py:262 msgid "_Delete..." msgstr "_Zmazať..." #: .././sonata/main.py:263 msgid "Shuffle" msgstr "Zamiešať" #: .././sonata/main.py:288 msgid "S_how Sonata" msgstr "Zobraziť _Sonatu" #: .././sonata/main.py:289 msgid "_Repeat" msgstr "_Opakovať" #: .././sonata/main.py:290 msgid "Rando_m" msgstr "_Náhodne" #: .././sonata/main.py:431 msgid "By Artist" msgstr "Podľa umelca" #: .././sonata/main.py:432 msgid "By Album" msgstr "Podľa albumu" #: .././sonata/main.py:433 msgid "By Song Title" msgstr "Podľa názvu skladby" #: .././sonata/main.py:434 msgid "By File Name" msgstr "Podľa názvu súboru" #: .././sonata/main.py:435 msgid "By Dir & File Name" msgstr "Podľa názvu súboru a priečinku" #: .././sonata/main.py:436 msgid "Reverse List" msgstr "Obrátiť zoznam" #: .././sonata/main.py:459 .././sonata/main.py:470 msgid "_New..." msgstr "_Nový..." #: .././sonata/main.py:460 msgid "_Edit..." msgstr "_Upraviť..." #: .././sonata/main.py:471 msgid "_Rename..." msgstr "_Premenovať..." #: .././sonata/main.py:533 .././sonata/main.py:600 .././sonata/main.py:601 msgid "Playlist" msgstr "Zoznam súborov" #: .././sonata/main.py:563 .././sonata/main.py:1833 .././sonata/main.py:2042 msgid "Click to expand" msgstr "Klikni pre rozšírené zobrazenie" #: .././sonata/main.py:568 .././sonata/main.py:1831 .././sonata/main.py:2040 msgid "Click to collapse" msgstr "Klikni pre kompaktné zobrazenie" #: .././sonata/main.py:573 .././sonata/main.py:1725 .././sonata/main.py:1836 msgid "Not Connected" msgstr "Nepripojené" #: .././sonata/main.py:575 .././sonata/main.py:1723 .././sonata/main.py:1838 msgid "No Read Permission" msgstr "Chýba právo na čítanie" #: .././sonata/main.py:648 msgid "Cover Art" msgstr "Obrázok albumu" #: .././sonata/main.py:872 msgid "MPD_HOST/PORT" msgstr "MPD_HOST/PORT" #: .././sonata/main.py:877 msgid "Disconnect" msgstr "Odpojiť" #: .././sonata/main.py:1183 .././sonata/main.py:1190 msgid "#" msgstr "#" #: .././sonata/main.py:1184 .././sonata/preferences.py:556 #: .././sonata/tagedit.py:128 msgid "Year" msgstr "Rok" #: .././sonata/main.py:1188 msgid "Stream" msgstr "Stream" #: .././sonata/main.py:1189 msgid "Len" msgstr "Dĺžka" #: .././sonata/main.py:1210 .././sonata/main.py:1217 .././sonata/main.py:1258 #: .././sonata/main.py:1265 msgid "Unknown" msgstr "Neznámy" #: .././sonata/main.py:1746 msgid "day" msgid_plural "days" msgstr[0] "deň" msgstr[1] "dni" msgstr[2] "dní" #: .././sonata/main.py:1754 msgid "hour" msgid_plural "hours" msgstr[0] "hodina" msgstr[1] "hodiny" msgstr[2] "hodín" #: .././sonata/main.py:1759 .././sonata/main.py:1761 msgid "and" msgstr "a" #: .././sonata/main.py:1769 msgid "(updating mpd)" msgstr "(aktualizuje sa mpd)" #: .././sonata/main.py:2109 msgid "Lyrics Search" msgstr "Hľadanie textu" #: .././sonata/main.py:2110 msgid "_Search" msgstr "_Hľadať" #: .././sonata/main.py:2113 msgid "Artist Name" msgstr "Meno umelca" #: .././sonata/main.py:2118 msgid "Song Title" msgstr "Názov skladby" #: .././sonata/main.py:2370 msgid "Open Image" msgstr "Otvoriť obrázok" #: .././sonata/main.py:2372 msgid "Images" msgstr "Obrázky" #: .././sonata/main.py:2376 msgid "All files" msgstr "Všetky súbory" #: .././sonata/main.py:2418 msgid "Choose Cover Art" msgstr "Vybrať obrázok albumu" #: .././sonata/main.py:2419 msgid "C_hoose" msgstr "_Vybrať" #: .././sonata/main.py:2451 msgid "Edit search terms" msgstr "Upraviť hľadaný výraz" #: .././sonata/main.py:2508 msgid "No artist or album name found." msgstr "Meno umelca alebo albumu nie je dostupné" #: .././sonata/main.py:2511 msgid "No cover art found." msgstr "Obrázok albumu nie je dostupný" #: .././sonata/main.py:2835 msgid "Delete the selected playlist?" msgid_plural "Delete the selected playlists?" msgstr[0] "Zmazať vybraný zoznam skladieb?" msgstr[1] "Zmazať vybrané zoznamy skladieb?" msgstr[2] "Zmazať vybrané zoznamy skladieb?" #: .././sonata/main.py:2835 msgid "Delete Playlist" msgid_plural "Delete Playlists" msgstr[0] "Zmazať zoznam skladieb" msgstr[1] "Zmazať zoznamy skladieb" msgstr[2] "Zmazať zoznamy skladieb" #: .././sonata/main.py:2843 msgid "Delete the selected stream?" msgid_plural "Delete the selected streams?" msgstr[0] "Zmazať vybraný stream?" msgstr[1] "Zmazať vybrané streamy?" msgstr[2] "Zmazať vybrané streamy?" #: .././sonata/main.py:2843 msgid "Delete Stream" msgid_plural "Delete Streams" msgstr[0] "Zmazať stream" msgstr[1] "Zmazať streamy" msgstr[2] "Zmazať streamy" #: .././sonata/playlists.py:103 .././sonata/playlists.py:105 msgid "Save Playlist" msgstr "Uložiť zoznam skladieb" #: .././sonata/playlists.py:120 msgid "Would you like to replace the existing playlist or append these songs?" msgstr "Chcete nahradiť existujúci zoznam skladieb alebo pridať tieto piesne?" #: .././sonata/playlists.py:120 msgid "Existing Playlist" msgstr "Existujúci zoznam skladieb" #: .././sonata/playlists.py:120 msgid "Replace playlist" msgstr "Nahradiť zoznam skladieb" #: .././sonata/playlists.py:120 msgid "Append songs" msgstr "Pridať skladby" #: .././sonata/playlists.py:141 msgid "A playlist with this name already exists. Would you like to replace it?" msgstr "Zoznam skladieb s týmto názvom už existuje. Chcete ho prepísať?" #: .././sonata/playlists.py:153 msgid "Playlist name" msgstr "Názov zoznam skladieb" #: .././sonata/playlists.py:182 .././sonata/playlists.py:186 msgid "Rename Playlist" msgstr "Premenovať zoznam skladieb" #: .././sonata/preferences.py:27 msgid "System tray" msgstr "Systémová oblasť" #: .././sonata/preferences.py:27 msgid "Top Left" msgstr "Vľavo hore" #: .././sonata/preferences.py:27 msgid "Top Right" msgstr "Vpravo hore" #: .././sonata/preferences.py:28 msgid "Bottom Left" msgstr "Vľavo dole" #: .././sonata/preferences.py:28 msgid "Bottom Right" msgstr "Vpravo dole" #: .././sonata/preferences.py:29 msgid "Screen Center" msgstr "Stred obrazovky" #: .././sonata/preferences.py:99 msgid "MPD" msgstr "MPD" #: .././sonata/preferences.py:100 .././sonata/preferences.py:343 msgid "Display" msgstr "Zobrazenie" #: .././sonata/preferences.py:101 msgid "Behavior" msgstr "Správanie" #: .././sonata/preferences.py:102 msgid "Format" msgstr "Formát" #: .././sonata/preferences.py:103 .././sonata/preferences.py:245 msgid "Extras" msgstr "Naviac" #: .././sonata/preferences.py:104 msgid "Plugins" msgstr "Zásuvné moduly" #: .././sonata/preferences.py:128 msgid "MPD Connection" msgstr "Pripojenie k MPD" #: .././sonata/preferences.py:141 msgid "_Name" msgstr "_Názov" #: .././sonata/preferences.py:144 msgid "_Host" msgstr "_Host" #: .././sonata/preferences.py:147 msgid "_Port" msgstr "_Port" #: .././sonata/preferences.py:151 msgid "_Music dir" msgstr "Priečinok s _hudbou" #: .././sonata/preferences.py:152 msgid "Select a Music Directory" msgstr "Vybrať priečinok s hudbou" #: .././sonata/preferences.py:158 msgid "Pa_ssword" msgstr "_Heslo" #: .././sonata/preferences.py:161 msgid "Leave blank if no password is required." msgstr "Nechať prázdne, ak sa heslo nevyžaduje." #: .././sonata/preferences.py:162 msgid "_Autoconnect on start" msgstr "_Automaticky pripojiť pri spustení" #: .././sonata/preferences.py:182 msgid "Using MPD_HOST/PORT" msgstr "Používam MPD_HOST/PORT" #: .././sonata/preferences.py:250 msgid "_Audioscrobbling (Last.fm)" msgstr "_Audioscrobbling (Last.fm)" #: .././sonata/preferences.py:252 msgid "_Username:" msgstr "_Užívateľské meno:" #: .././sonata/preferences.py:253 msgid "_Password:" msgstr "Heslo:" #: .././sonata/preferences.py:273 msgid "Popup _notification on song changes" msgstr "_Vyskakovacie oznámenie pri zmene skladby" #: .././sonata/preferences.py:299 msgid "Fade length" msgstr "Dĺžka prechodu" #: .././sonata/preferences.py:300 msgid "_Fade length" msgstr "_Dĺžka prechodu" #: .././sonata/preferences.py:302 msgid "sec" msgstr "s" #: .././sonata/preferences.py:307 msgid "C_rossfade" msgstr "_Prelínanie" #: .././sonata/preferences.py:348 msgid "_Album art" msgstr "Obrázok _albumu" #: .././sonata/preferences.py:350 msgid "Standard" msgstr "Štandarný" #: .././sonata/preferences.py:351 msgid "Stylized" msgstr "Štylizovaný" #: .././sonata/preferences.py:356 msgid "Artwork style:" msgstr "Štýl obrázku albumu:" #: .././sonata/preferences.py:358 msgid "Local only" msgstr "Iba lokálny" #: .././sonata/preferences.py:359 msgid "Local and remote" msgstr "Lokálny a vzdialený" #: .././sonata/preferences.py:362 msgid "Search locations:" msgstr "Poradie hľadania:" #: .././sonata/preferences.py:369 .././sonata/preferences.py:396 msgid "SONG_DIR" msgstr "ADRESÁR_SO_SKLADBOU" #: .././sonata/preferences.py:371 msgid "custom" msgstr "vlastný" #: .././sonata/preferences.py:378 msgid "Save art to:" msgstr "Uložiť obrázok albumu ako:" #: .././sonata/preferences.py:383 msgid "_Playback/volume buttons" msgstr "_Tlačidlá prehrávania a hlasitosti" #: .././sonata/preferences.py:386 msgid "Pr_ogressbar" msgstr "_Lišta priebehu" #: .././sonata/preferences.py:389 msgid "_Statusbar" msgstr "_Stavový riadok" #: .././sonata/preferences.py:392 msgid "Song Ly_rics" msgstr "Te_xt skladby" #: .././sonata/preferences.py:394 msgid "Save lyrics to:" msgstr "Uložiť text do:" #: .././sonata/preferences.py:405 msgid "System _tray icon" msgstr "_Ikona v systémovej oblasti" #: .././sonata/preferences.py:429 msgid "Window Behavior" msgstr "Správanie okna" #: .././sonata/preferences.py:433 msgid "_Show window on all workspaces" msgstr "_Zobraziť okno na všetkých plochách" #: .././sonata/preferences.py:436 msgid "_Keep window above other windows" msgstr "_Podržať okno vždy navrchu" #: .././sonata/preferences.py:439 msgid "_Hide window titlebar" msgstr "_Skryť titulok okna" #: .././sonata/preferences.py:442 msgid "_Minimize to system tray on close/escape" msgstr "_Minimalizovať do systémovej oblasti pri zavrení" #: .././sonata/preferences.py:444 msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, so " "only check this if you have one." msgstr "" "Ak je povolené, pri zatvorení bude Sonata iba minimalizovaná do systémovej " "oblasti. Teraz nie je možné zistiť, či je k dispozícii systémová oblasť, " "preto sa uistite, že je možné systémovú oblasť použiť." #: .././sonata/preferences.py:460 msgid "Miscellaneous" msgstr "Rôzne" #: .././sonata/preferences.py:464 msgid "_Update MPD library on start" msgstr "_Aktualizovať knižnicu MPD pri spustení" #: .././sonata/preferences.py:466 msgid "" "If enabled, Sonata will automatically update your MPD library when it starts " "up." msgstr "" "Ak je povolené, Sonata bude automaticky aktualizovať knižnicu MPD pri " "spustení." #: .././sonata/preferences.py:469 msgid "S_top playback on exit" msgstr "Za_staviť prehrávanie pri vypnutí" #: .././sonata/preferences.py:471 msgid "" "MPD allows playback even when the client is not open. If enabled, Sonata " "will behave like a more conventional music player and, instead, stop " "playback upon exit." msgstr "" "MPD umožňuje prehrávanie i keď klient nie je spustený. Pokiaľ je táto voľba " "zapnutá, Sonata sa môže správať ako bežné prehrávače a zastaviť prehrávanie " "pri ukončení." #: .././sonata/preferences.py:474 msgid "_Write status file:" msgstr "Zapísať stav _do súboru:" #: .././sonata/preferences.py:476 .././sonata/preferences.py:478 msgid "" "If enabled, Sonata will create a xmms-infopipe like file containing " "information about the current song. Many applications support the xmms-info " "file (Instant Messengers, IRC Clients...)" msgstr "" "Ak je povolené, Sonata vytvorí xmms-infopipe ako súbor obsahujúci informácie " "o aktuálnej skladbe. Mnoho aplikácií súbor xmms-info podporuje (Instant " "messanger, IRC klienty...)" #: .././sonata/preferences.py:512 msgid "Song Formatting" msgstr "Formát skladby" #: .././sonata/preferences.py:517 msgid "C_urrent playlist:" msgstr "_Aktuálny zoznam skladieb" #: .././sonata/preferences.py:518 msgid "_Library:" msgstr "_Knižnica" #: .././sonata/preferences.py:519 msgid "_Window title:" msgstr "_Titulok okna:" #: .././sonata/preferences.py:520 msgid "Current _song line 1:" msgstr "Aktuálna _skladba, riadok 1:" #: .././sonata/preferences.py:522 msgid "Current s_ong line 2:" msgstr "Aktuálna sk_ladba, riadok 1:" #: .././sonata/preferences.py:547 msgid "Available options" msgstr "Dostupné voľby" #. XXX get these directly from the formatting function: #: .././sonata/preferences.py:551 msgid "Artist name" msgstr "Názov umelca" #: .././sonata/preferences.py:552 msgid "Album name" msgstr "Názov albumu" #: .././sonata/preferences.py:553 msgid "Track name" msgstr "Názov stopy" #: .././sonata/preferences.py:554 msgid "Track number" msgstr "Číslo stopy" #: .././sonata/preferences.py:555 msgid "Disc number" msgstr "Číslo disku" #: .././sonata/preferences.py:558 msgid "File path" msgstr "Cesta k súboru" #: .././sonata/preferences.py:559 msgid "File name" msgstr "Názov súboru" #: .././sonata/preferences.py:560 .././sonata/streams.py:107 msgid "Stream name" msgstr "Názov streamu" #: .././sonata/preferences.py:561 msgid "Song length" msgstr "Dĺžka skladby" #: .././sonata/preferences.py:562 msgid "Elapsed time (title only)" msgstr "Uplynulý čas (iba v názve)" #: .././sonata/preferences.py:572 msgid "Info displayed only if all enclosed tags are defined" msgstr "Informácie zobrazené iba keď sú všetky priložené tagy definované" #: .././sonata/preferences.py:572 msgid "Creates columns in the current playlist" msgstr "Vytvorí stĺpce v aktuálnom zozname skladieb" #: .././sonata/preferences.py:598 msgid "_About" msgstr "_O programe" #: .././sonata/preferences.py:601 msgid "_Configure..." msgstr "_Nastaviť" #: .././sonata/preferences.py:641 msgid "Enabled" msgstr "Povolené" #: .././sonata/preferences.py:649 msgid "Description" msgstr "Poznámka" #: .././sonata/preferences.py:666 msgid "" "To save lyrics to the music file's directory, you must specify a valid music " "directory." msgstr "" "Pre uloženie textu do adresára s hudbou musíte zadať platný priečinok s " "hudbou." #: .././sonata/preferences.py:666 .././sonata/preferences.py:673 msgid "Music Dir Verification" msgstr "Overenie priečinku s hudbou" #: .././sonata/preferences.py:673 msgid "" "To save artwork to the music file's directory, you must specify a valid " "music directory." msgstr "" "Pre uloženie obrázku do priečinku s hubou musíte uviesť platný adresár s " "hudbou" #: .././sonata/preferences.py:738 msgid "New Profile" msgstr "Nový profil" #. Prompt user for playlist name: #: .././sonata/preferences.py:792 msgid "Custom Artwork" msgstr "Vlastný obrázok albumu" #: .././sonata/preferences.py:794 msgid "Artwork filename" msgstr "Názov obrázku albumu" #: .././sonata/streams.py:103 msgid "Edit Stream" msgstr "Upraviť stram" #: .././sonata/streams.py:105 .././sonata/streams.py:136 msgid "New Stream" msgstr "Nový stream" #: .././sonata/streams.py:114 msgid "Stream URL" msgstr "URL streamu" #: .././sonata/streams.py:136 msgid "A stream with this name already exists. Would you like to replace it?" msgstr "Stream s týmto názvom už existuje. Chcete ho prepísať?" #: .././sonata/tagedit.py:61 msgid "Taglib and/or tagpy not found, tag editing support disabled." msgstr "Knižnica tagpy nie je dostupná. Podpora editácie tagov vypnutá." #: .././sonata/tagedit.py:61 .././sonata/tagedit.py:70 #: .././sonata/tagedit.py:75 .././sonata/tagedit.py:99 #: .././sonata/tagedit.py:103 .././sonata/tagedit.py:260 #: .././sonata/tagedit.py:299 msgid "Edit Tags" msgstr "Upraviť tagy" #: .././sonata/tagedit.py:70 msgid "" "Tagpy version < 0.91. Please upgrade to a newer version, tag editing support " "disabled." msgstr "" "Verzia knižnice Tagpy je staršia ako 0.91. Prosím aktualizujte na novšiu " "verziu. Podpora úpravy tagov je vypnutá." #: .././sonata/tagedit.py:75 msgid "The path" msgstr "Cesta" #: .././sonata/tagedit.py:75 msgid "does not exist. Please specify a valid music directory in preferences." msgstr "neexistuje. Prosím zadajte platný adresár s hudbou v nastaveniach." #: .././sonata/tagedit.py:99 msgid "File " msgstr "Súbor" #: .././sonata/tagedit.py:99 msgid " not found. Please specify a valid music directory in preferences." msgstr "neexsituje. Prosím zadajte platný priečinok s hudbou v nastaveniach." #: .././sonata/tagedit.py:103 msgid "No music files with editable tags found." msgstr "Nie sú dostupné súbory s upraviteľnými tagmi" #: .././sonata/tagedit.py:150 msgid "Comment" msgstr "Komentár" #. Only show save all button if more than one song being edited. #: .././sonata/tagedit.py:161 msgid "Save _All" msgstr "Uložiť _všetko" #: .././sonata/tagedit.py:207 msgid "Increment each selected music file, starting at track 1 for this file." msgstr "Pridať vybraný hudobný súbor, začiatok od stopy 1 pre tento súbor." #: .././sonata/tagedit.py:209 msgid "Apply to all selected music files." msgstr "Použiť všetky vybrané hudobné súbory." #: .././sonata/tagedit.py:260 msgid "of" msgstr "z" #. FIXME: was (save_success and self.conn and self.status): #: .././sonata/tagedit.py:299 msgid "Unable to save tag to music file." msgstr "Nemožno uložiť tag do hudobného súboru." #: .././sonata/tagedit.py:366 msgid "Hide file path" msgstr "Skryť cestu k súboru" #: .././sonata/tagedit.py:369 msgid "Show file path" msgstr "Zobraziť cestu k súboru" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/po/sl.po�������������������������������������������������������������������������������0000664�0000000�0000000�00000116162�13771420143�0014411�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # msgid "" msgstr "" "Project-Id-Version: sonata 1.5.3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-03-22 22:01-0600\n" "PO-Revision-Date: 2009-04-12 20:16+0100\n" "Last-Translator: Alan Pepelko <alan.pepelko@gmail.com>\n" "Language-Team: Slovenian <sl@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" "X-Poedit-Language: Slovenian\n" "X-Poedit-Country: SLOVENIA\n" "X-Poedit-SourceCharset: utf-8\n" #. define the shortcuts and their descriptions #. these are all gettextable #: .././sonata/about.py:52 msgid "About Sonata" msgstr "O Sonati" #: .././sonata/about.py:53 #: .././sonata/preferences.py:60 msgid "Preferences" msgstr "Nastavitve" #: .././sonata/about.py:54 msgid "Fullscreen Artwork Mode" msgstr "Celozaslonski način prikaza naslovnice" #: .././sonata/about.py:55 msgid "Switch to [1st-5th] tab" msgstr "Preklopi na [1st-5th] zavihek" #: .././sonata/about.py:56 msgid "Connect to MPD" msgstr "Vzpostavi povezavo z MPD-jem" #: .././sonata/about.py:57 msgid "Disconnect from MPD" msgstr "Prekini povezavo z MPD-jem" #: .././sonata/about.py:58 msgid "Randomize current playlist" msgstr "Premešaj trenutni seznam predvajanja" #: .././sonata/about.py:59 msgid "Expand player" msgstr "Razširi predvajalnik" #: .././sonata/about.py:60 msgid "Switch to previous tab" msgstr "Preklopi na prejšnji zavihek" #: .././sonata/about.py:61 msgid "Switch to next tab" msgstr "Preklopi na naslednji zavihek" #: .././sonata/about.py:62 msgid "Collapse player" msgstr "Zožaj predvajalnik" #: .././sonata/about.py:63 #: .././sonata/library.py:86 msgid "Search library" msgstr "Išči po zbirki" #: .././sonata/about.py:64 msgid "Quit" msgstr "Končaj" #: .././sonata/about.py:65 msgid "Update entire library" msgstr "Posodobi celotno zbirko" #: .././sonata/about.py:66 msgid "Display popup menu" msgstr "Prikaži popup meni" #: .././sonata/about.py:67 msgid "Minimize to system tray (if enabled)" msgstr "Pomanjšaj v sistemski pult (če je omogočeno)" #: .././sonata/about.py:69 msgid "Previous track" msgstr "Predhodna sled" #: .././sonata/about.py:70 msgid "Next track" msgstr "Naslednja sled" #: .././sonata/about.py:71 msgid "Play/Pause" msgstr "Predvajaj/Premor" #: .././sonata/about.py:72 msgid "Stop" msgstr "Ustavi" #: .././sonata/about.py:73 msgid "Lower the volume" msgstr "Tišje" #: .././sonata/about.py:74 msgid "Raise the volume" msgstr "Glasneje" #: .././sonata/about.py:76 msgid "Play selected song" msgstr "Predvajaj izbrano skladbo" #: .././sonata/about.py:77 msgid "Remove selected song(s)" msgstr "Odstrani izbrane skladbe" #: .././sonata/about.py:78 msgid "Center currently playing song" msgstr "Trenutno predvajano skladbo postavi v sredino" #: .././sonata/about.py:79 #: .././sonata/about.py:88 msgid "Edit selected song's tags" msgstr "Uredi oznake izbrane skladbe" #: .././sonata/about.py:80 msgid "Save to new playlist" msgstr "Shrani v nov seznam predvajanja" #: .././sonata/about.py:81 msgid "Clear list" msgstr "Počisti seznam" #: .././sonata/about.py:82 msgid "Randomize list" msgstr "Premešaj seznam" #: .././sonata/about.py:84 msgid "Add selected song(s) or enter directory" msgstr "Dodaj izbrane skladbe ali vnesi imenik" #: .././sonata/about.py:85 msgid "Go to parent directory" msgstr "Pojdi na starševski imenik" #: .././sonata/about.py:86 msgid "Add selected item(s)" msgstr "Dodaj izbrane predmete" #: .././sonata/about.py:87 msgid "Replace with selected item(s)" msgstr "Zamenjaj z izbranimi predmeti" #: .././sonata/about.py:89 msgid "Add selected item(s) and play" msgstr "Dodaj izbrane predmete in predvajaj" #: .././sonata/about.py:90 msgid "Replace with selected item(s) and play" msgstr "Zamenjaj z izbranimi predmeti in predvajaj" #: .././sonata/about.py:91 msgid "Update selected item(s)/path(s)" msgstr "Posodobi izbrane predmete/poti" #: .././sonata/about.py:93 #: .././sonata/about.py:95 msgid "Add selected playlist(s)" msgstr "Dodaj izbrane sezname predvajanja" #: .././sonata/about.py:94 msgid "Remove selected playlist(s)" msgstr "Odstrani izbrane sezname predvajanja" #: .././sonata/about.py:96 msgid "Replace with selected playlist(s)" msgstr "Zamenjaj z izbranimi seznami predvajanja" #: .././sonata/about.py:97 msgid "Add selected playlist(s) and play" msgstr "Dodaj izbrane sezname predvajanja in predvajaj" #: .././sonata/about.py:98 msgid "Replace with selected playlist(s) and play" msgstr "Zamenjaj z izbranimi seznami predvajanja in predvajaj" #: .././sonata/about.py:100 #: .././sonata/about.py:102 msgid "Add selected stream(s)" msgstr "Dodaj izbrane pretoke" #: .././sonata/about.py:101 msgid "Remove selected stream(s)" msgstr "Odstrani izbrane pretoke" #: .././sonata/about.py:103 msgid "Replace with selected stream(s)" msgstr "Zamenjaj z izbranimi pretoki" #: .././sonata/about.py:104 msgid "Add selected stream(s) and play" msgstr "Dodaj izbrane tokove in predvajaj" #: .././sonata/about.py:105 msgid "Replace with selected stream(s) and play" msgstr "Zamenjaj z izbranimi tokovi in predvajaj" #: .././sonata/about.py:107 msgid "Edit playing song's tags" msgstr "Uredi oznake predvajane skladbe" #. define the main array- this adds headings to each section of #. shortcuts that will be displayed #: .././sonata/about.py:110 msgid "Main Shortcuts" msgstr "Glavne bližnjice" #: .././sonata/about.py:111 msgid "Playback Shortcuts" msgstr "Bližnjice predvajanja" #: .././sonata/about.py:112 msgid "Current Shortcuts" msgstr "Trenutne bližnjice" #: .././sonata/about.py:113 msgid "Library Shortcuts" msgstr "Bližnjice zbirke" #: .././sonata/about.py:114 msgid "Playlist Shortcuts" msgstr "Bližnjice seznama predvajanja" #: .././sonata/about.py:115 msgid "Stream Shortcuts" msgstr "Bližnjice pretokov" #: .././sonata/about.py:116 msgid "Info Shortcuts" msgstr "Bližnjice informacij" #: .././sonata/about.py:117 msgid "Shortcuts" msgstr "Bližnjice" #: .././sonata/about.py:153 msgid "An elegant music client for MPD." msgstr "Elegantni glasbeni odjemalec za MPD." #. Add button to show keybindings: #: .././sonata/about.py:166 msgid "_Shortcuts" msgstr "_Bližnjice" #: .././sonata/about.py:177 #: .././sonata/main.py:3088 #: .././sonata/preferences.py:738 msgid "Unable to launch a suitable browser." msgstr "Ne morem zagnati primernega brskalnika." #: .././sonata/about.py:177 #: .././sonata/main.py:3088 #: .././sonata/preferences.py:738 msgid "Launch Browser" msgstr "Zaženi brskalnik" #: .././sonata/cli.py:81 msgid "The toggle and popup arguments require D-Bus. Aborting." msgstr "Argumenta 'toggle' in 'popup' zahtevata D-Bus. Prekinitev." #: .././sonata/cli.py:97 msgid "Version" msgstr "Različica" #: .././sonata/cli.py:98 msgid "Website" msgstr "Spletna stran" #: .././sonata/cli.py:103 msgid "Usage: sonata [OPTION]... [COMMAND]..." msgstr "Uporaba: sonata [MOŽNOST] ... [UKAZ] ..." #: .././sonata/cli.py:105 msgid "Options" msgstr "Možnosti" #: .././sonata/cli.py:106 msgid "Show this help and exit" msgstr "Pokaži pomoč in končaj z delom" #: .././sonata/cli.py:107 msgid "Popup song notification (requires D-Bus)" msgstr "Popup obvestilo o skladbi (zahteva D-Bus)" #: .././sonata/cli.py:108 msgid "Toggles whether the app is minimized" msgstr "" #: .././sonata/cli.py:109 msgid "to tray or visible (requires D-Bus)" msgstr "v pult ali vidno (zahteva D-Bus)" #: .././sonata/cli.py:110 msgid "Don't start app if D-Bus commands fail" msgstr "" #: .././sonata/cli.py:111 msgid "Show version information and exit" msgstr "Pokaži podatke o različici in končaj z delom" #: .././sonata/cli.py:112 msgid "Start app hidden (requires systray)" msgstr "Zaženi aplikacijo skrito (zahteva systray)" #: .././sonata/cli.py:113 msgid "Start app visible (requires systray)" msgstr "Zaženi aplikacijo vidno (zahteva systray)" #: .././sonata/cli.py:114 msgid "Start with profile [NUM]" msgstr "Začni s profilom [NUM]" #: .././sonata/cli.py:116 msgid "Commands" msgstr "Ukazi" #: .././sonata/cli.py:117 msgid "Play song in playlist" msgstr "Predvajaj skladbo v seznamu predvajanja" #: .././sonata/cli.py:118 msgid "Pause currently playing song" msgstr "Premor trenutno predvajane skladbe" #: .././sonata/cli.py:119 msgid "Stop currently playing song" msgstr "Ustavi trenutno predvajano skladbo" #: .././sonata/cli.py:120 msgid "Play next song in playlist" msgstr "Predvajaj naslednjo skladbo na seznamu" #: .././sonata/cli.py:121 msgid "Play previous song in playlist" msgstr "Predvajaj prejšnjo skladbo na seznamu" #: .././sonata/cli.py:122 msgid "Toggle play/pause; plays if stopped" msgstr "" #: .././sonata/cli.py:123 msgid "Toggle repeat mode" msgstr "Nastavi ponavljajoče predvajanje" #: .././sonata/cli.py:124 msgid "Toggle random mode" msgstr "Vklopi/izklopi naključno predvajanje" #: .././sonata/cli.py:125 msgid "Display current song info" msgstr "Prikaži informacije o trenutni skladbi" #: .././sonata/cli.py:126 msgid "Display MPD status" msgstr "Prikaži stanje MPD-ja" #: .././sonata/cli.py:134 #, python-format msgid "Starting Sonata with profile %s..." msgstr "Zaganjanje Sonate s profilom %s ..." #: .././sonata/cli.py:136 #, python-format msgid "%d is not an available profile number." msgstr "Številka profila %d ne obstaja." #: .././sonata/cli.py:137 #: .././sonata/cli.py:141 #, python-format msgid "Profile numbers must be between 1 and %d." msgstr "Številke profilov morajo biti med 1 in %d." #: .././sonata/cli.py:140 #, python-format msgid "Python is unable to interpret %s as a number." msgstr "Python ne more interpretirati %s kot števila." #: .././sonata/cli.py:154 #: .././sonata/main.py:179 msgid "Default Profile" msgstr "Privzeti profil" #: .././sonata/cli.py:154 #: .././sonata/main.py:179 msgid "by" msgstr "od" #: .././sonata/cli.py:154 #: .././sonata/main.py:179 msgid "from" msgstr "z albuma" #: .././sonata/cli.py:176 msgid "" "Unable to connect to MPD.\n" "Please check your Sonata preferences or MPD_HOST/MPD_PORT environment variables." msgstr "" "Ne morem se povezati z MPD-jem.\n" "Prosim, preverite vaše nastavitve Sonate ali spremenljivke okolja MPD_HOST/MPD_PORT." #: .././sonata/cli.py:208 #: .././sonata/info.py:91 #: .././sonata/info.py:245 #: .././sonata/library.py:49 #: .././sonata/tagedit.py:125 msgid "Title" msgstr "Naslov" #: .././sonata/cli.py:209 #: .././sonata/info.py:91 #: .././sonata/info.py:246 #: .././sonata/library.py:49 #: .././sonata/main.py:1184 #: .././sonata/tagedit.py:126 msgid "Artist" msgstr "Izvajalec" #: .././sonata/cli.py:210 #: .././sonata/info.py:91 #: .././sonata/info.py:247 #: .././sonata/library.py:49 #: .././sonata/main.py:1185 #: .././sonata/main.py:2439 #: .././sonata/tagedit.py:127 msgid "Album" msgstr "Album" #: .././sonata/cli.py:211 #: .././sonata/info.py:91 #: .././sonata/info.py:248 msgid "Date" msgstr "Datum" #: .././sonata/cli.py:212 #: .././sonata/info.py:91 #: .././sonata/info.py:250 #: .././sonata/main.py:1186 #: .././sonata/tagedit.py:130 msgid "Track" msgstr "Sled" #: .././sonata/cli.py:213 #: .././sonata/info.py:91 #: .././sonata/info.py:249 #: .././sonata/library.py:49 #: .././sonata/main.py:1189 #: .././sonata/preferences.py:432 #: .././sonata/tagedit.py:139 msgid "Genre" msgstr "Žanr" #: .././sonata/cli.py:214 #: .././sonata/info.py:91 #: .././sonata/info.py:251 #: .././sonata/main.py:1191 msgid "File" msgstr "Datoteka" #: .././sonata/cli.py:219 #: .././sonata/cli.py:221 msgid "Time" msgstr "Čas" #: .././sonata/cli.py:222 #: .././sonata/info.py:91 #: .././sonata/info.py:244 msgid "Bitrate" msgstr "Bitna hitrost" #: .././sonata/cli.py:224 msgid "MPD stopped" msgstr "MPD je ustavljen" #: .././sonata/cli.py:228 #: .././sonata/cli.py:230 #: .././sonata/cli.py:232 msgid "State" msgstr "Stanje" #: .././sonata/cli.py:228 msgid "Playing" msgstr "Predvajanje" #: .././sonata/cli.py:230 msgid "Paused" msgstr "Premor" #: .././sonata/cli.py:232 #: .././sonata/main.py:559 #: .././sonata/main.py:564 #: .././sonata/main.py:1836 #: .././sonata/main.py:1847 msgid "Stopped" msgstr "Zaustavljen" #: .././sonata/cli.py:234 #: .././sonata/cli.py:236 msgid "Repeat" msgstr "Ponovi" #: .././sonata/cli.py:234 #: .././sonata/cli.py:238 msgid "Off" msgstr "Izključeno" #: .././sonata/cli.py:236 #: .././sonata/cli.py:240 msgid "On" msgstr "Vključeno" #: .././sonata/cli.py:238 #: .././sonata/cli.py:240 msgid "Random" msgstr "Naključno" #: .././sonata/cli.py:241 msgid "Volume" msgstr "Glasnost" #: .././sonata/cli.py:242 msgid "Crossfade" msgstr "Prelivanje" #: .././sonata/cli.py:242 #: .././sonata/preferences.py:192 msgid "second" msgid_plural "seconds" msgstr[0] "sekunda" msgstr[1] "sekundi" msgstr[2] "sekunde" msgstr[3] "sekund" #: .././sonata/current.py:64 msgid "Filter" msgstr "Filter" #: .././sonata/dbus_plugin.py:83 msgid "Sonata failed to connect to the D-BUS session bus: Unable to determine the address of the message bus (try 'man dbus-launch' and 'man dbus-daemon' for help)" msgstr "Sonata ni mogla vzpostaviti povezave z D-BUS bus sejo: nemogoče je določiti naslov bus sporočil (za pomoč poskusite 'man dbus-launch' in 'man dbus-daemon')" #: .././sonata/dbus_plugin.py:96 msgid "Failed to execute remote commands." msgstr "Oddaljenih ukazov ni bilo mogoče zagnati." #: .././sonata/dbus_plugin.py:98 msgid "Starting Sonata instead..." msgstr "" #: .././sonata/dbus_plugin.py:100 msgid "Maybe Sonata is not running?" msgstr "Morda Sonata ni zagnana?" #: .././sonata/dbus_plugin.py:114 msgid "An instance of Sonata is already running. Showing it..." msgstr "Sonata je že zagnana. Prikaz ..." #: .././sonata/dbus_plugin.py:120 msgid "Failed to execute remote command." msgstr "Oddaljenega ukaza ni bilo mogoče zagnati." #. Song info #: .././sonata/info.py:78 msgid "Song Info" msgstr "Podatki o skladbi" #: .././sonata/info.py:93 msgid "Launch artist in Wikipedia" msgstr "Odpri izvajalca v Wikipediji" #: .././sonata/info.py:93 msgid "Launch album in Wikipedia" msgstr "Odpri album v Wikipediji" #: .././sonata/info.py:127 msgid "Toggle extra tags" msgstr "Vključi dodatne oznake" #: .././sonata/info.py:130 msgid "Edit song tags" msgstr "Uredi oznake skladbe" #. Lyrics #: .././sonata/info.py:140 msgid "Lyrics" msgstr "Besedilo skladbe" #: .././sonata/info.py:152 msgid "Search Lyricwiki.org for lyrics" msgstr "Preišči Lyricwiki.org za besedilo skladbe" #: .././sonata/info.py:153 msgid "Edit lyrics at Lyricwiki.org" msgstr "Uredi besedilo skladbe na Lyricwiki.org" #. Album info #: .././sonata/info.py:161 msgid "Album Info" msgstr "Informacije o albumu" #: .././sonata/info.py:213 #: .././sonata/info.py:218 msgid "more" msgstr "več" #: .././sonata/info.py:215 msgid "hide" msgstr "skrij" #: .././sonata/info.py:281 msgid "edit tags" msgstr "uredi oznake" #: .././sonata/info.py:308 msgid "Album info not found." msgstr "Informacije o albumu niso bile najdene." #: .././sonata/info.py:311 msgid "Album name not set." msgstr "Naslov albuma ni določen." #: .././sonata/info.py:324 msgid "ZSI not found, fetching lyrics support disabled." msgstr "ZSI ni bil najden. Podpora za pridobivanje besedil skladb izključena." #: .././sonata/info.py:329 msgid "Artist or song title not set." msgstr "Izvajalec ali naslov skladbe ni določen." #: .././sonata/info.py:371 msgid "search" msgstr "išči" #: .././sonata/info.py:372 msgid "edit" msgstr "uredi" #: .././sonata/info.py:381 #: .././sonata/info.py:436 msgid "Lyrics not found" msgstr "Besedila skladbe ni mogoče najti" #. Fetch lyrics from lyricwiki.org #: .././sonata/info.py:401 msgid "Fetching lyrics..." msgstr "Prenašanje besedila skladbe ..." #: .././sonata/info.py:411 msgid "Couldn't connect to LyricWiki" msgstr "Povezava z LyricWiki ni uspela" #: .././sonata/info.py:439 msgid "Fetching lyrics failed" msgstr "Prejemanje besedila skladbe je spodletelo" #: .././sonata/library.py:47 msgid "Untagged" msgstr "Neoznačen" #: .././sonata/library.py:48 msgid "Various Artists" msgstr "Različni izvajalci" #: .././sonata/library.py:49 msgid "Filename" msgstr "Ime datoteke" #: .././sonata/library.py:49 msgid "Everything" msgstr "Vse" #: .././sonata/library.py:52 msgid "Filesystem" msgstr "Datotečni sistem" #: .././sonata/library.py:53 msgid "Artists" msgstr "Izvajalci" #: .././sonata/library.py:54 msgid "Albums" msgstr "Albumi" #: .././sonata/library.py:55 msgid "Genres" msgstr "Žanri" #: .././sonata/library.py:84 msgid "Search terms" msgstr "Iskalni nizi" #: .././sonata/library.py:90 msgid "End Search" msgstr "Konec iskanja" #: .././sonata/library.py:92 msgid "Library browsing view" msgstr "Pogled brskanja po zbirki" #: .././sonata/library.py:96 msgid "Search" msgstr "Iskanje" #. Show text: #: .././sonata/library.py:761 #: .././sonata/main.py:1763 #: .././sonata/main.py:3331 msgid "song" msgid_plural "songs" msgstr[0] "skladba" msgstr[1] "skladbi" msgstr[2] "skladbe" msgstr[3] "skladb" #: .././sonata/library.py:761 #: .././sonata/main.py:1757 msgid "minute" msgid_plural "minutes" msgstr[0] "minuta" msgstr[1] "minuti" msgstr[2] "minute" msgstr[3] "minut" #: .././sonata/library.py:849 msgid "Song" msgstr "Skladba" #: .././sonata/library.py:849 #: .././sonata/main.py:1190 msgid "Path" msgstr "Pot" #. Constants #: .././sonata/main.py:102 msgid "Current" msgstr "Trenutno" #: .././sonata/main.py:103 msgid "Library" msgstr "Zbirka" #: .././sonata/main.py:104 msgid "Playlists" msgstr "Seznami predvajanja" #: .././sonata/main.py:105 msgid "Streams" msgstr "Pretoki" #: .././sonata/main.py:106 msgid "Info" msgstr "Podrobnosti" #: .././sonata/main.py:137 #: .././sonata/preferences.py:193 #: .././sonata/preferences.py:194 msgid "Entire song" msgstr "Celotna skladba" #: .././sonata/main.py:234 msgid "_Sort List" msgstr "_Sortiraj seznam" #: .././sonata/main.py:235 msgid "Sa_ve List to" msgstr "S_hrani listo v" #: .././sonata/main.py:236 msgid "_Connection" msgstr "_Povezava" #: .././sonata/main.py:237 msgid "P_lay after" msgstr "P_redvajaj po" #: .././sonata/main.py:238 #: .././sonata/main.py:2454 msgid "_Update" msgstr "_Posodobi" #: .././sonata/main.py:239 msgid "Use _Remote Image..." msgstr "Uporabi _oddaljeno sliko ..." #: .././sonata/main.py:240 msgid "Use _Local Image..." msgstr "Uporabi _lokalno sliko ..." #: .././sonata/main.py:241 msgid "_Fullscreen Mode" msgstr "_Celozaslonski način" #: .././sonata/main.py:242 msgid "Reset Image" msgstr "Ponastavi sliko" #: .././sonata/main.py:243 msgid "_Play" msgstr "_Predvajaj" #: .././sonata/main.py:244 msgid "Pa_use" msgstr "_Premor" #: .././sonata/main.py:245 msgid "_Stop" msgstr "_Ustavi" #: .././sonata/main.py:246 msgid "Pre_vious" msgstr "_Prejšnja" #: .././sonata/main.py:247 msgid "_Next" msgstr "_Naslednja" #: .././sonata/main.py:248 msgid "_Quit" msgstr "_Izhod" #: .././sonata/main.py:249 msgid "_Remove" msgstr "Odst_rani" #: .././sonata/main.py:250 msgid "_Clear" msgstr "_Počisti" #: .././sonata/main.py:251 msgid "_Entire Library" msgstr "c_elotno zbirko" #: .././sonata/main.py:252 msgid "_Selected Items" msgstr "i_zbrane predmete" #: .././sonata/main.py:253 msgid "_Preferences..." msgstr "_Nastavitve ..." #: .././sonata/main.py:254 msgid "_About..." msgstr "_O programu ..." #: .././sonata/main.py:255 msgid "_Edit Tags..." msgstr "_Uredi oznake ..." #: .././sonata/main.py:256 msgid "_Add" msgstr "_Dodaj" #: .././sonata/main.py:257 msgid "_Replace" msgstr "_Zamenjaj" #: .././sonata/main.py:258 msgid "Add" msgstr "Dodaj" #: .././sonata/main.py:259 msgid "Replace" msgstr "Zamenjaj" #: .././sonata/main.py:260 msgid "_Delete..." msgstr "_Izbriši ..." #: .././sonata/main.py:261 msgid "Shuffle" msgstr "Premešaj" #: .././sonata/main.py:286 msgid "S_how Sonata" msgstr "_Pokaži Sonato" #: .././sonata/main.py:287 msgid "_Repeat" msgstr "_Ponovi" #: .././sonata/main.py:288 msgid "Rando_m" msgstr "Naključ_no" #: .././sonata/main.py:428 msgid "By Artist" msgstr "po izvajalcu" #: .././sonata/main.py:429 msgid "By Album" msgstr "po albumu" #: .././sonata/main.py:430 msgid "By Song Title" msgstr "po naslovu skladbe" #: .././sonata/main.py:431 msgid "By File Name" msgstr "po imenu datoteke" #: .././sonata/main.py:432 msgid "By Dir & File Name" msgstr "po imeniku in imenu datoteke" #: .././sonata/main.py:433 msgid "Reverse List" msgstr "Obrni seznam predvajanja" #: .././sonata/main.py:456 #: .././sonata/main.py:467 msgid "_New..." msgstr "_Nova ..." #: .././sonata/main.py:457 msgid "_Edit..." msgstr "_Uredi ..." #: .././sonata/main.py:468 msgid "_Rename..." msgstr "P_reimenuj ..." #: .././sonata/main.py:530 #: .././sonata/main.py:597 #: .././sonata/main.py:598 msgid "Playlist" msgstr "Seznam predvajanja" #: .././sonata/main.py:560 #: .././sonata/main.py:1840 #: .././sonata/main.py:2049 msgid "Click to expand" msgstr "Kliknite, da razširite" #: .././sonata/main.py:565 #: .././sonata/main.py:1838 #: .././sonata/main.py:2047 msgid "Click to collapse" msgstr "Kliknite, da zožate" #: .././sonata/main.py:570 #: .././sonata/main.py:1732 #: .././sonata/main.py:1843 msgid "Not Connected" msgstr "Ni povezave" #: .././sonata/main.py:572 #: .././sonata/main.py:1730 #: .././sonata/main.py:1845 msgid "No Read Permission" msgstr "Ni dovoljenja za branje" #: .././sonata/main.py:645 msgid "Cover Art" msgstr "Naslovnica" #: .././sonata/main.py:850 #: .././sonata/main.py:863 #: .././sonata/main.py:884 msgid "Profile" msgstr "Profil" #: .././sonata/main.py:863 #: .././sonata/main.py:864 #: .././sonata/main.py:884 msgid "MPD_HOST/PORT" msgstr "MPD_GOSTITELJ/VRATA" #: .././sonata/main.py:865 #: .././sonata/main.py:871 msgid "Disconnect" msgstr "Prekinitev povezave" #: .././sonata/main.py:1187 #: .././sonata/main.py:1194 msgid "#" msgstr "#" #: .././sonata/main.py:1188 #: .././sonata/preferences.py:431 #: .././sonata/tagedit.py:128 msgid "Year" msgstr "Leto" #: .././sonata/main.py:1192 msgid "Stream" msgstr "Pretok" #: .././sonata/main.py:1193 msgid "Len" msgstr "Len" #: .././sonata/main.py:1214 #: .././sonata/main.py:1221 #: .././sonata/main.py:1262 #: .././sonata/main.py:1269 msgid "Unknown" msgstr "Neznan" #: .././sonata/main.py:1753 msgid "day" msgid_plural "days" msgstr[0] "dan" msgstr[1] "dneva" msgstr[2] "dnevi" msgstr[3] "dni" #: .././sonata/main.py:1761 msgid "hour" msgid_plural "hours" msgstr[0] "ura" msgstr[1] "uri" msgstr[2] "ure" msgstr[3] "ur" #: .././sonata/main.py:1766 #: .././sonata/main.py:1768 msgid "and" msgstr "in" #: .././sonata/main.py:1776 msgid "(updating mpd)" msgstr "(posodabljam mpd)" #: .././sonata/main.py:2116 msgid "Lyrics Search" msgstr "Išči besedilo pesmi" #: .././sonata/main.py:2117 msgid "_Search" msgstr "_Iskanje" #: .././sonata/main.py:2120 msgid "Artist Name" msgstr "Izvajalec" #: .././sonata/main.py:2125 msgid "Song Title" msgstr "Skladba" #: .././sonata/main.py:2377 msgid "Open Image" msgstr "Odpri sliko" #: .././sonata/main.py:2379 msgid "Images" msgstr "Slike" #: .././sonata/main.py:2383 msgid "All files" msgstr "Vse datoteke" #: .././sonata/main.py:2425 msgid "Choose Cover Art" msgstr "Izberite naslovnico" #: .././sonata/main.py:2426 msgid "C_hoose" msgstr "_Izberi" #: .././sonata/main.py:2459 msgid "Edit search terms" msgstr "Uredi iskalni niz" #: .././sonata/main.py:2516 msgid "No artist or album name found." msgstr "Izvajalec ali naslov albuma nista bila najdena." #: .././sonata/main.py:2519 msgid "No cover art found." msgstr "Nobena naslovnica ni bila najdena" #: .././sonata/main.py:2843 msgid "Delete the selected playlist?" msgid_plural "Delete the selected playlists?" msgstr[0] "Izbrišem izbrani seznam predvajanja?" msgstr[1] "Izbrišem izbrana seznama predvajanja?" msgstr[2] "Izbrišem izbrane sezname predvajanja?" msgstr[3] "Izbrišem izbrane sezname predvajanja?" #: .././sonata/main.py:2843 msgid "Delete Playlist" msgid_plural "Delete Playlists" msgstr[0] "Izbriši seznam predvajanja" msgstr[1] "Izbriši seznama predvajanja" msgstr[2] "Izbriši sezname predvajanja" msgstr[3] "Izbriši sezname predvajanja" #: .././sonata/main.py:2851 msgid "Delete the selected stream?" msgid_plural "Delete the selected streams?" msgstr[0] "Izbrišem izbrani pretok?" msgstr[1] "Izbrišem izbrana pretoka?" msgstr[2] "Izbrišem izbrane pretoke?" msgstr[3] "Izbrišem izbrane pretoke?" #: .././sonata/main.py:2851 msgid "Delete Stream" msgid_plural "Delete Streams" msgstr[0] "Izbriši pretok" msgstr[1] "Izbriši pretoka" msgstr[2] "Izbriši pretoke" msgstr[3] "Izbriši pretoke" #: .././sonata/main.py:2909 msgid "To save lyrics to the music file's directory, you must specify a valid music directory." msgstr "Določiti morate veljaven glasbeni imenik, da bi lahko shranili besedilo skladbe v imenik glasbene datoteke. " #: .././sonata/main.py:2909 #: .././sonata/main.py:2916 msgid "Music Dir Verification" msgstr "Preverjanje verodostojnosti glasbenega imenika" #: .././sonata/main.py:2916 msgid "To save artwork to the music file's directory, you must specify a valid music directory." msgstr "Določiti morate veljaven glasbeni imenik, da bi lahko shranili naslovnico v imenik glasbene datoteke." #: .././sonata/main.py:3332 msgid "album" msgid_plural "albums" msgstr[0] "album" msgstr[1] "albuma" msgstr[2] "albumi" msgstr[3] "albumov" #: .././sonata/main.py:3333 msgid "artist" msgid_plural "artists" msgstr[0] "izvajalec" msgstr[1] "izvajalca" msgstr[2] "izvajalci" msgstr[3] "izvajalcev" #: .././sonata/main.py:3340 msgid "day of bliss" msgid_plural "days of bliss" msgstr[0] "dan blaženosti" msgstr[1] "dneva blaženosti" msgstr[2] "dnevi blaženosti" msgstr[3] "dni blaženosti" #: .././sonata/main.py:3342 msgid "hour of bliss" msgid_plural "hours of bliss" msgstr[0] "ura blaženosti" msgstr[1] "uri blaženosti" msgstr[2] "ure blaženosti" msgstr[3] "ur blaženosti" #: .././sonata/playlists.py:103 #: .././sonata/playlists.py:105 msgid "Save Playlist" msgstr "Shrani seznam predvajanja" #: .././sonata/playlists.py:120 msgid "Would you like to replace the existing playlist or append these songs?" msgstr "Želite zamenjati obstoječi seznam predvajanja ali dodati skladbe?" #: .././sonata/playlists.py:120 msgid "Existing Playlist" msgstr "Obstoječ seznam predvajanja" #: .././sonata/playlists.py:120 msgid "Replace playlist" msgstr "Zamenjaj seznam predvajanja" #: .././sonata/playlists.py:120 msgid "Append songs" msgstr "Dodaj skladbe" #: .././sonata/playlists.py:141 msgid "A playlist with this name already exists. Would you like to replace it?" msgstr "Seznam predvajanja s tem imenom že obstaja. Bi ga želeli zamenjati?" #: .././sonata/playlists.py:153 msgid "Playlist name" msgstr "Ime seznama predvajanja" #: .././sonata/playlists.py:182 #: .././sonata/playlists.py:186 msgid "Rename Playlist" msgstr "Preimenuj seznam predvajanja" #. Constants: #: .././sonata/preferences.py:35 msgid "System tray" msgstr "sistemski pult" #: .././sonata/preferences.py:35 msgid "Top Left" msgstr "zgoraj levo" #: .././sonata/preferences.py:35 msgid "Top Right" msgstr "zgoraj desno" #: .././sonata/preferences.py:35 msgid "Bottom Left" msgstr "spodaj levo" #: .././sonata/preferences.py:35 msgid "Bottom Right" msgstr "spodaj desno" #: .././sonata/preferences.py:35 msgid "Screen Center" msgstr "sredina zaslona" #. MPD tab #: .././sonata/preferences.py:64 msgid "MPD Connection" msgstr "MPD povezava" #: .././sonata/preferences.py:76 msgid "_Name" msgstr "I_me" #: .././sonata/preferences.py:79 msgid "_Host" msgstr "G_ostitelj" #: .././sonata/preferences.py:82 msgid "_Port" msgstr "V_rata" #: .././sonata/preferences.py:86 msgid "_Music dir" msgstr "_Glasbeni imenik" #: .././sonata/preferences.py:87 msgid "Select a Music Directory" msgstr "Izberite glasbeni imenik" #: .././sonata/preferences.py:91 msgid "Pa_ssword" msgstr "Ge_slo" #: .././sonata/preferences.py:94 msgid "Leave blank if no password is required." msgstr "Pustite prazno, če ni zahtevano geslo." #: .././sonata/preferences.py:95 msgid "_Autoconnect on start" msgstr "S_amodejno poveži ob zagonu" #: .././sonata/preferences.py:113 msgid "Using MPD_HOST/PORT" msgstr "Uporabljam MPD_HOST/PORT" #: .././sonata/preferences.py:163 #: .././sonata/preferences.py:536 msgid "Extras" msgstr "Dodatno" #: .././sonata/preferences.py:168 msgid "_Audioscrobbling (Last.fm)" msgstr "Pošiljanje skladb na Last.fm" #: .././sonata/preferences.py:170 msgid "_Username:" msgstr "_Uporabniško ime:" #: .././sonata/preferences.py:171 msgid "_Password:" msgstr "_Geslo:" #: .././sonata/preferences.py:188 msgid "Popup _notification on song changes" msgstr "Popup o_bvestilo ob spremembi skladbe" #: .././sonata/preferences.py:210 msgid "Fade length" msgstr "Trajanje pojemanja" #: .././sonata/preferences.py:211 msgid "_Fade length" msgstr "_Trajanje pojemanja" #: .././sonata/preferences.py:213 msgid "sec" msgstr "sek." #: .././sonata/preferences.py:218 msgid "C_rossfade" msgstr "P_relivanje" #. Display tab #: .././sonata/preferences.py:246 #: .././sonata/preferences.py:533 msgid "Display" msgstr "Prikaži" #: .././sonata/preferences.py:251 msgid "_Album art" msgstr "N_aslovnica" #: .././sonata/preferences.py:253 msgid "Standard" msgstr "Standardno" #: .././sonata/preferences.py:253 msgid "Stylized" msgstr "Stilizirano" #: .././sonata/preferences.py:256 msgid "Artwork style:" msgstr "Slog naslovnice:" #: .././sonata/preferences.py:258 msgid "Local only" msgstr "samo krajevno" #: .././sonata/preferences.py:258 msgid "Local and remote" msgstr "Lokalno, nato oddaljeno" #: .././sonata/preferences.py:260 msgid "Search locations:" msgstr "Išči lokacije:" #: .././sonata/preferences.py:267 #: .././sonata/preferences.py:289 msgid "SONG_DIR" msgstr "" #: .././sonata/preferences.py:269 msgid "custom" msgstr "po meri" #: .././sonata/preferences.py:274 msgid "Save art to:" msgstr "Shrani naslovnico v:" #: .././sonata/preferences.py:277 msgid "_Playback/volume buttons" msgstr "Gumb _predvajanja/glasnosti" #: .././sonata/preferences.py:280 msgid "Pr_ogressbar" msgstr "Vrsti_ca napredka" #: .././sonata/preferences.py:283 msgid "_Statusbar" msgstr "Vrstica stanja" #: .././sonata/preferences.py:286 msgid "Song Ly_rics" msgstr "Besedilo skladbe" #: .././sonata/preferences.py:288 msgid "Save lyrics to:" msgstr "Shrani besedilo skladbe v:" #: .././sonata/preferences.py:297 msgid "System _tray icon" msgstr "Ikona sistemskega pulta" #. Behavior tab #: .././sonata/preferences.py:319 msgid "Window Behavior" msgstr "Obnašanje oken" #: .././sonata/preferences.py:323 msgid "_Show window on all workspaces" msgstr "Prikaži okno na v_seh delovnih površinah" #: .././sonata/preferences.py:326 msgid "_Keep window above other windows" msgstr "Obdrži o_kno nad drugimi okni" #: .././sonata/preferences.py:329 msgid "_Hide window titlebar" msgstr "Skrij _nazivno vrstico okna" #: .././sonata/preferences.py:334 msgid "_Minimize to system tray on close/escape" msgstr "Po_manjšaj v sistemski pult ob zaprtju/izhodu" #: .././sonata/preferences.py:336 msgid "If enabled, closing Sonata will minimize it to the system tray. Note that it's currently impossible to detect if there actually is a system tray, so only check this if you have one." msgstr "Če je omogočeno, se bo Sonata ob izhodu pomanjšala v sistemski pult. Podite pozorni na to, da je trenutno nemogoče zaznati, ali je sistemski pult dejansko omogočen, zato označite to možnost, če res deluje." #: .././sonata/preferences.py:350 msgid "Miscellaneous" msgstr "Razno" #: .././sonata/preferences.py:354 msgid "_Update MPD library on start" msgstr "Ob zagon_u posodobi MPD zbirko" #: .././sonata/preferences.py:356 msgid "If enabled, Sonata will automatically update your MPD library when it starts up." msgstr "Če je omogočeno, bo Sonata ob zagonu samodejno posodobila MPD zbirko." #: .././sonata/preferences.py:358 msgid "S_top playback on exit" msgstr "Ob izhodu us_tavi predvajanje" #: .././sonata/preferences.py:360 msgid "MPD allows playback even when the client is not open. If enabled, Sonata will behave like a more conventional music player and, instead, stop playback upon exit." msgstr "MPD omogoča predvajanje tudi, ko je odjemalec ustavljen. Če je omogočeno, bo Sonata delovala kot običajni predvajalnik glasbe in ustavila predvajanje ob izhodu iz programa." #: .././sonata/preferences.py:362 msgid "_Write status file:" msgstr "Zapiši _datoteko stanja:" #: .././sonata/preferences.py:364 #: .././sonata/preferences.py:366 msgid "If enabled, Sonata will create a xmms-infopipe like file containing information about the current song. Many applications support the xmms-info file (Instant Messengers, IRC Clients...)" msgstr "Če je omogočeno, bo Sonata ustvarila datoteko podobno xmms-infopipe, ki vsebuje informacije o trenutni skladbi. Veliko aplikacij podpira datoteko xmms-info (takojšnji sporočilniki, IRC odjemalci ...)" #. Format tab #: .././sonata/preferences.py:392 msgid "Song Formatting" msgstr "Način prikaza skladb" #: .././sonata/preferences.py:397 msgid "C_urrent playlist:" msgstr "Tren_utni seznam predvajanja:" #: .././sonata/preferences.py:398 msgid "_Library:" msgstr "_Zbirka:" #: .././sonata/preferences.py:399 msgid "_Window title:" msgstr "Nazi_v okna:" #: .././sonata/preferences.py:400 msgid "Current _song line 1:" msgstr "1. vr_stica trenutne skladbe:" #: .././sonata/preferences.py:402 msgid "Current s_ong line 2:" msgstr "2. vr_stica trenutne skladbe:" #: .././sonata/preferences.py:422 msgid "Available options" msgstr "Razpoložljive možnosti" #. XXX get these directly from the formatting function: #: .././sonata/preferences.py:426 msgid "Artist name" msgstr "Ime izvajalca" #: .././sonata/preferences.py:427 msgid "Album name" msgstr "Naslov albuma" #: .././sonata/preferences.py:428 msgid "Track name" msgstr "Naslov skladbe" #: .././sonata/preferences.py:429 msgid "Track number" msgstr "Številka sledi" #: .././sonata/preferences.py:430 msgid "Disc number" msgstr "Številka diska" #: .././sonata/preferences.py:433 msgid "File path" msgstr "Pot do datoteke" #: .././sonata/preferences.py:434 msgid "File name" msgstr "Ime datoteke" #: .././sonata/preferences.py:435 #: .././sonata/streams.py:109 msgid "Stream name" msgstr "Ime pretoka" #: .././sonata/preferences.py:436 msgid "Song length" msgstr "Trajanje skladbe" #: .././sonata/preferences.py:437 msgid "Elapsed time (title only)" msgstr "Ocenjen čas (samo naslov)" #: .././sonata/preferences.py:448 msgid "Info displayed only if all enclosed tags are defined" msgstr "Informacije so prikazane le, če so vse vključene oznake definirane" #: .././sonata/preferences.py:448 msgid "Creates columns in the current playlist" msgstr "Ustvari stolpce v trenutnem seznamu predvajanja" #: .././sonata/preferences.py:473 msgid "_About" msgstr "_O programu" #: .././sonata/preferences.py:474 msgid "_Configure..." msgstr "_Prikroji ..." #: .././sonata/preferences.py:513 msgid "Loaded" msgstr "Naloženo" #: .././sonata/preferences.py:521 msgid "Description" msgstr "Opis" #. Set up table #: .././sonata/preferences.py:532 msgid "MPD" msgstr "MPD" #: .././sonata/preferences.py:534 msgid "Behavior" msgstr "Obnašanje" #: .././sonata/preferences.py:535 msgid "Format" msgstr "Oblika" #: .././sonata/preferences.py:605 msgid "New Profile" msgstr "Nov profil" #. Prompt user for playlist name: #: .././sonata/preferences.py:659 msgid "Custom Artwork" msgstr "Poljubna naslovnica" #: .././sonata/preferences.py:661 msgid "Artwork filename" msgstr "Ime datoteke naslovnice" #: .././sonata/streams.py:105 msgid "Edit Stream" msgstr "Uredi pretok" #: .././sonata/streams.py:107 #: .././sonata/streams.py:138 msgid "New Stream" msgstr "Nov pretok" #: .././sonata/streams.py:116 msgid "Stream URL" msgstr "URL pretoka" #: .././sonata/streams.py:138 msgid "A stream with this name already exists. Would you like to replace it?" msgstr "Pretok s tem imenom že obstaja. Bi ga želeli zamenjati?" #: .././sonata/tagedit.py:61 msgid "Taglib and/or tagpy not found, tag editing support disabled." msgstr "Taglib in/ali tagpy nista bila najdena. Podpora za urejanje oznak izključena." #: .././sonata/tagedit.py:61 #: .././sonata/tagedit.py:70 #: .././sonata/tagedit.py:75 #: .././sonata/tagedit.py:99 #: .././sonata/tagedit.py:103 #: .././sonata/tagedit.py:260 #: .././sonata/tagedit.py:299 msgid "Edit Tags" msgstr "Uredi oznake" #: .././sonata/tagedit.py:70 msgid "Tagpy version < 0.91. Please upgrade to a newer version, tag editing support disabled." msgstr "Različica tagpy-ja je manjša od 0.91. Prosimo, nadgradite jo na novejšo različico. Podpora za urejanje oznak izključena." #: .././sonata/tagedit.py:75 msgid "The path" msgstr "Pot" #: .././sonata/tagedit.py:75 msgid "does not exist. Please specify a valid music directory in preferences." msgstr "ne obstaja. Prosim, v nastavitvah določite veljaven glasbeni imenik." #: .././sonata/tagedit.py:99 msgid "File " msgstr "Datoteka" #: .././sonata/tagedit.py:99 msgid " not found. Please specify a valid music directory in preferences." msgstr " ni najden. Prosim, v nastavitvah določite veljaven glasbeni imenik." #: .././sonata/tagedit.py:103 msgid "No music files with editable tags found." msgstr "Najdena ni bila nobena glasbena datoteka z možnostjo urejanja oznak." #: .././sonata/tagedit.py:150 msgid "Comment" msgstr "Komentar" #. Only show save all button if more than one song being edited. #: .././sonata/tagedit.py:161 msgid "Save _All" msgstr "Shrani _vse" #: .././sonata/tagedit.py:207 msgid "Increment each selected music file, starting at track 1 for this file." msgstr "" #: .././sonata/tagedit.py:209 msgid "Apply to all selected music files." msgstr "Uveljavi vsem izbranim glasbenim datotekam." #: .././sonata/tagedit.py:260 msgid "of" msgstr "od" #. FIXME: was (save_success and self.conn and self.status): #: .././sonata/tagedit.py:299 msgid "Unable to save tag to music file." msgstr "Nisem mogel shraniti oznak v glasbeno datoteko." #: .././sonata/tagedit.py:366 msgid "Hide file path" msgstr "Skrij pot do datoteke" #: .././sonata/tagedit.py:369 msgid "Show file path" msgstr "Pokaži pot do datoteke" #~ msgid "_Update Path" #~ msgstr "_Posodobi pot" #~ msgid "Enable Audioscrobbler" #~ msgstr "Omogoči Audioscrobbler" #~ msgid "Enable Crossfade" #~ msgstr "Omogoči prelivanje" #~ msgid "Enable album art" #~ msgstr "Omogoči naslovnico" #~ msgid "Enable lyrics" #~ msgstr "Omogoči besedilo skladbe" #~ msgid "Enable system tray icon" #~ msgstr "Omogoči ikono v sistemski vrstici" #~ msgid "_Display" #~ msgstr "_Prikaz" #~ msgid "_Extras" #~ msgstr "_Dodatno" #, fuzzy #~ msgid "The popup argument requires D-Bus. Aborting." #~ msgstr "Argument popup zahteva D-Bus. Prekinjam." #~ msgid "" #~ "PyGTK+ 2.10 or gnome-python-extras not found, system tray support " #~ "disabled." #~ msgstr "" #~ "PyGTK+ 2.10 ali gnome-python-extras nista bila najdena. Podpora za " #~ "sistemski pult izključena." #~ msgid "Reset to Default" #~ msgstr "Vrni na privzeto" #~ msgid "_New Playlist..." #~ msgstr "_Nov seznam predvajanja ..." #~ msgid "_Shuffle" #~ msgstr "_Premešaj" #~ msgid "Website: http://www.nongnu.org/sonata/" #~ msgstr "Spletna stran: http://www.nongnu.org/sonata/" #~ msgid "Toggle shuffle mode" #~ msgstr "Nastavi premešano predvajanje" #~ msgid "Notification" #~ msgstr "Obvestilo" #~ msgid "" #~ "Python 2.5 or python-elementtree not found, audioscrobbler support " #~ "disabled." #~ msgstr "" #~ "Python 2.5 ali python-elementtree nista bila najdena. Podpora za " #~ "audioscrobbler izključena." #~ msgid "Audioscrobbler Verification" #~ msgstr "Preverjanje verodostojnosti audioscrobblerja" #~ msgid "Update library for selected item(s)" #~ msgstr "Posodobi zbirko za izbrane predmete" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/po/sv.po�������������������������������������������������������������������������������0000664�0000000�0000000�00000120225�13771420143�0014416�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Swedish translation for sonata. # Copyright (C) 2007, 2009 Free Software Foundation, Inc. # This file is distributed under the same license as the sonata package. # Unknown translator, 2008. # Daniel Nylander <po@danielnylander.se>, 2007, 2009. # msgid "" msgstr "" "Project-Id-Version: sonata\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-03-22 22:01-0600\n" "PO-Revision-Date: 2009-03-23 10:04+0100\n" "Last-Translator: Daniel Nylander <po@danielnylander.se>\n" "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" #. define the shortcuts and their descriptions #. these are all gettextable #: .././sonata/about.py:52 msgid "About Sonata" msgstr "Om Sonata" #: .././sonata/about.py:53 #: .././sonata/preferences.py:60 msgid "Preferences" msgstr "Inställningar" #: .././sonata/about.py:54 msgid "Fullscreen Artwork Mode" msgstr "Omslag i helskärmsläge" #: .././sonata/about.py:55 msgid "Switch to [1st-5th] tab" msgstr "Växla mellan flikarna [1-5]" #: .././sonata/about.py:56 msgid "Connect to MPD" msgstr "Anslut till MPD" #: .././sonata/about.py:57 msgid "Disconnect from MPD" msgstr "Koppla från MPD" #: .././sonata/about.py:58 msgid "Randomize current playlist" msgstr "Blanda aktuell spellista" #: .././sonata/about.py:59 msgid "Expand player" msgstr "Fäll ut spelaren" #: .././sonata/about.py:60 msgid "Switch to previous tab" msgstr "Växla till föregående flik" #: .././sonata/about.py:61 msgid "Switch to next tab" msgstr "Växla till nästa flik" #: .././sonata/about.py:62 msgid "Collapse player" msgstr "Fäll in spelaren" #: .././sonata/about.py:63 #: .././sonata/library.py:86 msgid "Search library" msgstr "Sök i biblioteket" #: .././sonata/about.py:64 msgid "Quit" msgstr "Avsluta" #: .././sonata/about.py:65 msgid "Update entire library" msgstr "Uppdatera hela biblioteket" #: .././sonata/about.py:66 msgid "Display popup menu" msgstr "Visa popupmeny" #: .././sonata/about.py:67 msgid "Minimize to system tray (if enabled)" msgstr "Minimera till aktivitetsfältet (om aktiverad)" #: .././sonata/about.py:69 msgid "Previous track" msgstr "Föregående spår" #: .././sonata/about.py:70 msgid "Next track" msgstr "Nästa spår" #: .././sonata/about.py:71 msgid "Play/Pause" msgstr "Spela upp/Gör paus" #: .././sonata/about.py:72 msgid "Stop" msgstr "Stoppa" #: .././sonata/about.py:73 msgid "Lower the volume" msgstr "Sänk volymen" #: .././sonata/about.py:74 msgid "Raise the volume" msgstr "Höj volymen" #: .././sonata/about.py:76 msgid "Play selected song" msgstr "Spela markerad låt" #: .././sonata/about.py:77 msgid "Remove selected song(s)" msgstr "Ta bort markerade låt(ar)" #: .././sonata/about.py:78 msgid "Center currently playing song" msgstr "Centrera låten som spelas" #: .././sonata/about.py:79 #: .././sonata/about.py:88 msgid "Edit selected song's tags" msgstr "Redigera taggar för markerad låt" #: .././sonata/about.py:80 msgid "Save to new playlist" msgstr "Spara som ny spellista" #: .././sonata/about.py:81 msgid "Clear list" msgstr "Töm lista" #: .././sonata/about.py:82 msgid "Randomize list" msgstr "Blanda spellistan" #: .././sonata/about.py:84 msgid "Add selected song(s) or enter directory" msgstr "Lägg till markerade låt(ar) eller ange katalog" #: .././sonata/about.py:85 msgid "Go to parent directory" msgstr "Gå till föräldrakatalogen" #: .././sonata/about.py:86 msgid "Add selected item(s)" msgstr "Lägg till markerade objekt" #: .././sonata/about.py:87 msgid "Replace with selected item(s)" msgstr "Ersätt med markerade objekt" #: .././sonata/about.py:89 msgid "Add selected item(s) and play" msgstr "Lägg till markerade objekt och spela upp" #: .././sonata/about.py:90 msgid "Replace with selected item(s) and play" msgstr "Ersätt med markerade objekt och spela upp" #: .././sonata/about.py:91 msgid "Update selected item(s)/path(s)" msgstr "Uppdatera markerade objekt/sökväg(ar)" #: .././sonata/about.py:93 #: .././sonata/about.py:95 msgid "Add selected playlist(s)" msgstr "Lägg till markerade spellistor" #: .././sonata/about.py:94 msgid "Remove selected playlist(s)" msgstr "Ta bort markerade spellistor" #: .././sonata/about.py:96 msgid "Replace with selected playlist(s)" msgstr "Ersätt med markerade spellistor" #: .././sonata/about.py:97 msgid "Add selected playlist(s) and play" msgstr "Lägg till markerade spellistor och spela upp" #: .././sonata/about.py:98 msgid "Replace with selected playlist(s) and play" msgstr "Ersätt med markerade spellistor och spela upp" #: .././sonata/about.py:100 #: .././sonata/about.py:102 msgid "Add selected stream(s)" msgstr "Lägg till markerade ström(mar)" #: .././sonata/about.py:101 msgid "Remove selected stream(s)" msgstr "Ta bort markerade ström(mar)" #: .././sonata/about.py:103 msgid "Replace with selected stream(s)" msgstr "Ersätt med markerade ström(mar)" #: .././sonata/about.py:104 msgid "Add selected stream(s) and play" msgstr "Lägg till markerade ström(mar) och spela upp" #: .././sonata/about.py:105 msgid "Replace with selected stream(s) and play" msgstr "Ersätt med markerade ström(mar) och spela upp" #: .././sonata/about.py:107 msgid "Edit playing song's tags" msgstr "Redigera taggar för aktuell låt" #. define the main array- this adds headings to each section of #. shortcuts that will be displayed #: .././sonata/about.py:110 msgid "Main Shortcuts" msgstr "Allmänna genvägar" #: .././sonata/about.py:111 msgid "Playback Shortcuts" msgstr "Uppspelningsgenvägar" #: .././sonata/about.py:112 msgid "Current Shortcuts" msgstr "Aktuella genvägar" #: .././sonata/about.py:113 msgid "Library Shortcuts" msgstr "Biblioteksgenvägar" #: .././sonata/about.py:114 msgid "Playlist Shortcuts" msgstr "Spellistgenvägar" #: .././sonata/about.py:115 msgid "Stream Shortcuts" msgstr "Strömgenvägar" #: .././sonata/about.py:116 msgid "Info Shortcuts" msgstr "Låtinformationsgenvägar" #: .././sonata/about.py:117 msgid "Shortcuts" msgstr "Genvägar" #: .././sonata/about.py:153 msgid "An elegant music client for MPD." msgstr "En elegant musikklient för MPD." #. Add button to show keybindings: #: .././sonata/about.py:166 msgid "_Shortcuts" msgstr "_Genvägar" #: .././sonata/about.py:177 #: .././sonata/main.py:3088 #: .././sonata/preferences.py:738 msgid "Unable to launch a suitable browser." msgstr "Kunde inte starta en lämplig webbläsare." #: .././sonata/about.py:177 #: .././sonata/main.py:3088 #: .././sonata/preferences.py:738 msgid "Launch Browser" msgstr "Starta webbläsare" #: .././sonata/cli.py:81 msgid "The toggle and popup arguments require D-Bus. Aborting." msgstr "Växlings- och popupargument kräver D-Bus. Avbryter." #: .././sonata/cli.py:97 msgid "Version" msgstr "Version" #: .././sonata/cli.py:98 msgid "Website" msgstr "Webbplats" #: .././sonata/cli.py:103 msgid "Usage: sonata [OPTION]... [COMMAND]..." msgstr "Användning: sonata [FLAGGA]... [KOMMANDO]..." #: .././sonata/cli.py:105 msgid "Options" msgstr "Flaggor" #: .././sonata/cli.py:106 msgid "Show this help and exit" msgstr "Visa den här hjälpen och avsluta" #: .././sonata/cli.py:107 msgid "Popup song notification (requires D-Bus)" msgstr "Popupnotifiering vid låtbyte (kräver D-Bus)" #: .././sonata/cli.py:108 msgid "Toggles whether the app is minimized" msgstr "Växlar huruvida programmet är minimerat" #: .././sonata/cli.py:109 msgid "to tray or visible (requires D-Bus)" msgstr "till brickan eller synligt (kräver D-Bus)" #: .././sonata/cli.py:110 msgid "Don't start app if D-Bus commands fail" msgstr "Starta inte program om D-Bus-kommandon misslyckas" #: .././sonata/cli.py:111 msgid "Show version information and exit" msgstr "Visa versionsinformation och avsluta" #: .././sonata/cli.py:112 msgid "Start app hidden (requires systray)" msgstr "Starta programmet dolt (kräver systray)" #: .././sonata/cli.py:113 msgid "Start app visible (requires systray)" msgstr "Starta programmet synligt (kräver systray)" #: .././sonata/cli.py:114 msgid "Start with profile [NUM]" msgstr "Starta med profil [NUM]" #: .././sonata/cli.py:116 msgid "Commands" msgstr "Kommandon" #: .././sonata/cli.py:117 msgid "Play song in playlist" msgstr "Spela låt i spellistan" #: .././sonata/cli.py:118 msgid "Pause currently playing song" msgstr "Pausa för närvarande spelad låt" #: .././sonata/cli.py:119 msgid "Stop currently playing song" msgstr "Stoppa för närvarande spelad låt" #: .././sonata/cli.py:120 msgid "Play next song in playlist" msgstr "Spela nästa låt i spellistan" #: .././sonata/cli.py:121 msgid "Play previous song in playlist" msgstr "Spela föregående låt i spellistan" #: .././sonata/cli.py:122 msgid "Toggle play/pause; plays if stopped" msgstr "Växla spela/gör paus; spelar om stoppad" #: .././sonata/cli.py:123 msgid "Toggle repeat mode" msgstr "Växla upprepningsläge" #: .././sonata/cli.py:124 msgid "Toggle random mode" msgstr "Växla blandningsläge" #: .././sonata/cli.py:125 msgid "Display current song info" msgstr "Visa information om aktuell låt" #: .././sonata/cli.py:126 msgid "Display MPD status" msgstr "Visa MPD-status" #: .././sonata/cli.py:134 #, python-format msgid "Starting Sonata with profile %s..." msgstr "Startar Sonata med profilen %s..." #: .././sonata/cli.py:136 #, python-format msgid "%d is not an available profile number." msgstr "%d är inte ett tillgängligt profilnummer." #: .././sonata/cli.py:137 #: .././sonata/cli.py:141 #, python-format msgid "Profile numbers must be between 1 and %d." msgstr "Profilnummer måste vara mellan 1 och %d." #: .././sonata/cli.py:140 #, python-format msgid "Python is unable to interpret %s as a number." msgstr "Python kunde inte tolka %s som ett nummer." #: .././sonata/cli.py:154 #: .././sonata/main.py:179 msgid "Default Profile" msgstr "Standardprofil" #: .././sonata/cli.py:154 #: .././sonata/main.py:179 msgid "by" msgstr "av" #: .././sonata/cli.py:154 #: .././sonata/main.py:179 msgid "from" msgstr "från" #: .././sonata/cli.py:176 msgid "" "Unable to connect to MPD.\n" "Please check your Sonata preferences or MPD_HOST/MPD_PORT environment variables." msgstr "" "Kunde inte ansluta till MPD.\n" "Kontrollera dina inställningar i Sonata eller miljövariablerna MPD_HOST/MPD_PORT." #: .././sonata/cli.py:208 #: .././sonata/info.py:91 #: .././sonata/info.py:245 #: .././sonata/library.py:49 #: .././sonata/tagedit.py:125 msgid "Title" msgstr "Titel" #: .././sonata/cli.py:209 #: .././sonata/info.py:91 #: .././sonata/info.py:246 #: .././sonata/library.py:49 #: .././sonata/main.py:1184 #: .././sonata/tagedit.py:126 msgid "Artist" msgstr "Artist" #: .././sonata/cli.py:210 #: .././sonata/info.py:91 #: .././sonata/info.py:247 #: .././sonata/library.py:49 #: .././sonata/main.py:1185 #: .././sonata/main.py:2439 #: .././sonata/tagedit.py:127 msgid "Album" msgstr "Album" #: .././sonata/cli.py:211 #: .././sonata/info.py:91 #: .././sonata/info.py:248 msgid "Date" msgstr "Datum" #: .././sonata/cli.py:212 #: .././sonata/info.py:91 #: .././sonata/info.py:250 #: .././sonata/main.py:1186 #: .././sonata/tagedit.py:130 msgid "Track" msgstr "Spår" #: .././sonata/cli.py:213 #: .././sonata/info.py:91 #: .././sonata/info.py:249 #: .././sonata/library.py:49 #: .././sonata/main.py:1189 #: .././sonata/preferences.py:432 #: .././sonata/tagedit.py:139 msgid "Genre" msgstr "Genre" #: .././sonata/cli.py:214 #: .././sonata/info.py:91 #: .././sonata/info.py:251 #: .././sonata/main.py:1191 msgid "File" msgstr "Fil" #: .././sonata/cli.py:219 #: .././sonata/cli.py:221 msgid "Time" msgstr "Tid" #: .././sonata/cli.py:222 #: .././sonata/info.py:91 #: .././sonata/info.py:244 msgid "Bitrate" msgstr "Bitfrekvens" #: .././sonata/cli.py:224 msgid "MPD stopped" msgstr "MPD stoppad" #: .././sonata/cli.py:228 #: .././sonata/cli.py:230 #: .././sonata/cli.py:232 msgid "State" msgstr "Tillstånd" #: .././sonata/cli.py:228 msgid "Playing" msgstr "Spelar" #: .././sonata/cli.py:230 msgid "Paused" msgstr "Pausad" #: .././sonata/cli.py:232 #: .././sonata/main.py:559 #: .././sonata/main.py:564 #: .././sonata/main.py:1836 #: .././sonata/main.py:1847 msgid "Stopped" msgstr "Stoppad" #: .././sonata/cli.py:234 #: .././sonata/cli.py:236 msgid "Repeat" msgstr "Upprepa" #: .././sonata/cli.py:234 #: .././sonata/cli.py:238 msgid "Off" msgstr "Av" #: .././sonata/cli.py:236 #: .././sonata/cli.py:240 msgid "On" msgstr "På" #: .././sonata/cli.py:238 #: .././sonata/cli.py:240 msgid "Random" msgstr "Blanda" #: .././sonata/cli.py:241 msgid "Volume" msgstr "Volym" #: .././sonata/cli.py:242 msgid "Crossfade" msgstr "Toning" #: .././sonata/cli.py:242 #: .././sonata/preferences.py:192 msgid "second" msgid_plural "seconds" msgstr[0] "sekund" msgstr[1] "sekunder" #: .././sonata/current.py:64 msgid "Filter" msgstr "Filter" #: .././sonata/dbus_plugin.py:83 msgid "Sonata failed to connect to the D-BUS session bus: Unable to determine the address of the message bus (try 'man dbus-launch' and 'man dbus-daemon' for help)" msgstr "Sonata misslyckades med att ansluta till D-BUS-sessionsbussen: Kunde inte fastställa adressen för meddelandebussen (prova med \"man dbus-launch\" och \"man dbus-daemon\" för hjälp)" #: .././sonata/dbus_plugin.py:96 msgid "Failed to execute remote commands." msgstr "Misslyckades med att köra fjärrkommandon." #: .././sonata/dbus_plugin.py:98 msgid "Starting Sonata instead..." msgstr "Startar Sonata istället..." #: .././sonata/dbus_plugin.py:100 msgid "Maybe Sonata is not running?" msgstr "Kanske Sonata inte är igång?" #: .././sonata/dbus_plugin.py:114 msgid "An instance of Sonata is already running. Showing it..." msgstr "En instans av Sonata körs redan. Visar den..." #: .././sonata/dbus_plugin.py:120 msgid "Failed to execute remote command." msgstr "Misslyckades med att köra fjärrkommando." #. Song info #: .././sonata/info.py:78 msgid "Song Info" msgstr "Låtinformation" #: .././sonata/info.py:93 msgid "Launch artist in Wikipedia" msgstr "Öppna artisten i Wikipedia" #: .././sonata/info.py:93 msgid "Launch album in Wikipedia" msgstr "Öppna albumet i Wikipedia" #: .././sonata/info.py:127 msgid "Toggle extra tags" msgstr "Växla mellan extra taggar" #: .././sonata/info.py:130 msgid "Edit song tags" msgstr "Redigera låttaggar" #. Lyrics #: .././sonata/info.py:140 msgid "Lyrics" msgstr "Låttext" #: .././sonata/info.py:152 msgid "Search Lyricwiki.org for lyrics" msgstr "Sök efter låttext via Lyricwiki.org" #: .././sonata/info.py:153 msgid "Edit lyrics at Lyricwiki.org" msgstr "Redigera låttext på Lyricwiki.org" #. Album info #: .././sonata/info.py:161 msgid "Album Info" msgstr "Albuminformation" #: .././sonata/info.py:213 #: .././sonata/info.py:218 msgid "more" msgstr "mer information" #: .././sonata/info.py:215 msgid "hide" msgstr "dölj" #: .././sonata/info.py:281 msgid "edit tags" msgstr "redigera taggar" #: .././sonata/info.py:308 msgid "Album info not found." msgstr "Albuminformation hittades inte." #: .././sonata/info.py:311 msgid "Album name not set." msgstr "Albumnamnet inte inställt." #: .././sonata/info.py:324 msgid "ZSI not found, fetching lyrics support disabled." msgstr "ZSI hittades inte, stöd för hämtning av låttexter har inaktiverats." #: .././sonata/info.py:329 msgid "Artist or song title not set." msgstr "Artist- eller låttitel inte inställd." #: .././sonata/info.py:371 msgid "search" msgstr "sök" #: .././sonata/info.py:372 msgid "edit" msgstr "redigera" #: .././sonata/info.py:381 #: .././sonata/info.py:436 msgid "Lyrics not found" msgstr "Låttexten hittades inte" #. Fetch lyrics from lyricwiki.org #: .././sonata/info.py:401 msgid "Fetching lyrics..." msgstr "Hämtar låttexter..." #: .././sonata/info.py:411 msgid "Couldn't connect to LyricWiki" msgstr "Kunde inte ansluta till LyricWiki" #: .././sonata/info.py:439 msgid "Fetching lyrics failed" msgstr "Hämtning av låttexter misslyckades" #: .././sonata/library.py:47 msgid "Untagged" msgstr "Inte taggad" #: .././sonata/library.py:48 msgid "Various Artists" msgstr "Diverse artister" #: .././sonata/library.py:49 msgid "Filename" msgstr "Filnamn" #: .././sonata/library.py:49 msgid "Everything" msgstr "Allting" #: .././sonata/library.py:52 msgid "Filesystem" msgstr "Filsystem" #: .././sonata/library.py:53 msgid "Artists" msgstr "Artister" #: .././sonata/library.py:54 msgid "Albums" msgstr "Album" #: .././sonata/library.py:55 msgid "Genres" msgstr "Genrer" #: .././sonata/library.py:84 msgid "Search terms" msgstr "Söktermer" #: .././sonata/library.py:90 msgid "End Search" msgstr "Avsluta sökning" #: .././sonata/library.py:92 msgid "Library browsing view" msgstr "Biblioteksbläddringsvy" #: .././sonata/library.py:96 msgid "Search" msgstr "Sök" #. Show text: #: .././sonata/library.py:761 #: .././sonata/main.py:1763 #: .././sonata/main.py:3331 msgid "song" msgid_plural "songs" msgstr[0] "låt" msgstr[1] "låtar" #: .././sonata/library.py:761 #: .././sonata/main.py:1757 msgid "minute" msgid_plural "minutes" msgstr[0] "minut" msgstr[1] "minuter" #: .././sonata/library.py:849 msgid "Song" msgstr "Låt" #: .././sonata/library.py:849 #: .././sonata/main.py:1190 msgid "Path" msgstr "Sökväg" #. Constants #: .././sonata/main.py:102 msgid "Current" msgstr "Aktuell" #: .././sonata/main.py:103 msgid "Library" msgstr "Bibliotek" #: .././sonata/main.py:104 msgid "Playlists" msgstr "Spellistor" #: .././sonata/main.py:105 msgid "Streams" msgstr "Strömmar" #: .././sonata/main.py:106 msgid "Info" msgstr "Låtinformation" #: .././sonata/main.py:137 #: .././sonata/preferences.py:193 #: .././sonata/preferences.py:194 msgid "Entire song" msgstr "Hela låten" #: .././sonata/main.py:234 msgid "_Sort List" msgstr "_Sortera lista" #: .././sonata/main.py:235 msgid "Sa_ve List to" msgstr "Sp_ara spellista till" #: .././sonata/main.py:236 msgid "_Connection" msgstr "_Anslutning" #: .././sonata/main.py:237 msgid "P_lay after" msgstr "_Spela efter" #: .././sonata/main.py:238 #: .././sonata/main.py:2454 msgid "_Update" msgstr "_Uppdatera" #: .././sonata/main.py:239 msgid "Use _Remote Image..." msgstr "Använd _fjärrbild..." #: .././sonata/main.py:240 msgid "Use _Local Image..." msgstr "Använd _lokal bild..." #: .././sonata/main.py:241 msgid "_Fullscreen Mode" msgstr "_Helskärmsläge" #: .././sonata/main.py:242 msgid "Reset Image" msgstr "Återställ bild" #: .././sonata/main.py:243 msgid "_Play" msgstr "_Spela" #: .././sonata/main.py:244 msgid "Pa_use" msgstr "_Gör paus" #: .././sonata/main.py:245 msgid "_Stop" msgstr "_Stoppa" #: .././sonata/main.py:246 msgid "Pre_vious" msgstr "Före_gående" #: .././sonata/main.py:247 msgid "_Next" msgstr "_Nästa" #: .././sonata/main.py:248 msgid "_Quit" msgstr "_Avsluta" #: .././sonata/main.py:249 msgid "_Remove" msgstr "_Ta bort" #: .././sonata/main.py:250 msgid "_Clear" msgstr "Tö_m" #: .././sonata/main.py:251 msgid "_Entire Library" msgstr "Hela _biblioteket" #: .././sonata/main.py:252 msgid "_Selected Items" msgstr "_Markerade objekt" #: .././sonata/main.py:253 msgid "_Preferences..." msgstr "_Inställningar..." #: .././sonata/main.py:254 msgid "_About..." msgstr "_Om..." #: .././sonata/main.py:255 msgid "_Edit Tags..." msgstr "R_edigera taggar..." #: .././sonata/main.py:256 msgid "_Add" msgstr "_Lägg till" #: .././sonata/main.py:257 msgid "_Replace" msgstr "E_rsätt" #: .././sonata/main.py:258 msgid "Add" msgstr "Lägg till" #: .././sonata/main.py:259 msgid "Replace" msgstr "Ersätt" #: .././sonata/main.py:260 msgid "_Delete..." msgstr "_Ta bort..." #: .././sonata/main.py:261 msgid "Shuffle" msgstr "Blanda" #: .././sonata/main.py:286 msgid "S_how Sonata" msgstr "V_isa Sonata" #: .././sonata/main.py:287 msgid "_Repeat" msgstr "_Upprepa" #: .././sonata/main.py:288 msgid "Rando_m" msgstr "_Blanda" #: .././sonata/main.py:428 msgid "By Artist" msgstr "Efter artist" #: .././sonata/main.py:429 msgid "By Album" msgstr "Efter album" #: .././sonata/main.py:430 msgid "By Song Title" msgstr "Efter låttitel" #: .././sonata/main.py:431 msgid "By File Name" msgstr "Efter filnamn" #: .././sonata/main.py:432 msgid "By Dir & File Name" msgstr "Efter katalog- och filnamn" #: .././sonata/main.py:433 msgid "Reverse List" msgstr "Omvänd lista" #: .././sonata/main.py:456 #: .././sonata/main.py:467 msgid "_New..." msgstr "_Ny..." #: .././sonata/main.py:457 msgid "_Edit..." msgstr "R_edigera..." #: .././sonata/main.py:468 msgid "_Rename..." msgstr "_Byt namn..." #: .././sonata/main.py:530 #: .././sonata/main.py:597 #: .././sonata/main.py:598 msgid "Playlist" msgstr "Spellista" #: .././sonata/main.py:560 #: .././sonata/main.py:1840 #: .././sonata/main.py:2049 msgid "Click to expand" msgstr "Klicka för att fälla ut" #: .././sonata/main.py:565 #: .././sonata/main.py:1838 #: .././sonata/main.py:2047 msgid "Click to collapse" msgstr "Klicka för att fälla in" #: .././sonata/main.py:570 #: .././sonata/main.py:1732 #: .././sonata/main.py:1843 msgid "Not Connected" msgstr "Inte ansluten" #: .././sonata/main.py:572 #: .././sonata/main.py:1730 #: .././sonata/main.py:1845 msgid "No Read Permission" msgstr "Saknar läsrättigheter" #: .././sonata/main.py:645 msgid "Cover Art" msgstr "Omslagsbild" #: .././sonata/main.py:850 #: .././sonata/main.py:863 #: .././sonata/main.py:884 msgid "Profile" msgstr "Profil" #: .././sonata/main.py:863 #: .././sonata/main.py:864 #: .././sonata/main.py:884 msgid "MPD_HOST/PORT" msgstr "MPD_VÄRD/PORT" #: .././sonata/main.py:865 #: .././sonata/main.py:871 msgid "Disconnect" msgstr "Koppla från" #: .././sonata/main.py:1187 #: .././sonata/main.py:1194 msgid "#" msgstr "Nr" #: .././sonata/main.py:1188 #: .././sonata/preferences.py:431 #: .././sonata/tagedit.py:128 msgid "Year" msgstr "År" #: .././sonata/main.py:1192 msgid "Stream" msgstr "Ström" #: .././sonata/main.py:1193 msgid "Len" msgstr "Speltid" #: .././sonata/main.py:1214 #: .././sonata/main.py:1221 #: .././sonata/main.py:1262 #: .././sonata/main.py:1269 msgid "Unknown" msgstr "Okänd" #: .././sonata/main.py:1753 msgid "day" msgid_plural "days" msgstr[0] "dag" msgstr[1] "dagar" #: .././sonata/main.py:1761 msgid "hour" msgid_plural "hours" msgstr[0] "timme" msgstr[1] "timmar" #: .././sonata/main.py:1766 #: .././sonata/main.py:1768 msgid "and" msgstr "och" #: .././sonata/main.py:1776 msgid "(updating mpd)" msgstr "(uppdaterar mpd)" #: .././sonata/main.py:2116 msgid "Lyrics Search" msgstr "Sök låttext" #: .././sonata/main.py:2117 msgid "_Search" msgstr "_Sök" #: .././sonata/main.py:2120 msgid "Artist Name" msgstr "Artistnamn" #: .././sonata/main.py:2125 msgid "Song Title" msgstr "Låttitel" #: .././sonata/main.py:2377 msgid "Open Image" msgstr "Öppna bild" #: .././sonata/main.py:2379 msgid "Images" msgstr "Bilder" #: .././sonata/main.py:2383 msgid "All files" msgstr "Alla filer" #: .././sonata/main.py:2425 msgid "Choose Cover Art" msgstr "Välj omslagsbild" #: .././sonata/main.py:2426 msgid "C_hoose" msgstr "_Välj" #: .././sonata/main.py:2459 msgid "Edit search terms" msgstr "Redigera söktermer" #: .././sonata/main.py:2516 msgid "No artist or album name found." msgstr "Inget artist- eller albumnamn hittades." #: .././sonata/main.py:2519 msgid "No cover art found." msgstr "Ingen omslagsbild hittades." #: .././sonata/main.py:2843 msgid "Delete the selected playlist?" msgid_plural "Delete the selected playlists?" msgstr[0] "Ta bort markerad spellista?" msgstr[1] "Ta bort markerade spellistor?" #: .././sonata/main.py:2843 msgid "Delete Playlist" msgid_plural "Delete Playlists" msgstr[0] "Ta bort spellista" msgstr[1] "Ta bort spellistor" #: .././sonata/main.py:2851 msgid "Delete the selected stream?" msgid_plural "Delete the selected streams?" msgstr[0] "Ta bort markerade strömmar?" msgstr[1] "Ta bort markerade strömmar?" #: .././sonata/main.py:2851 msgid "Delete Stream" msgid_plural "Delete Streams" msgstr[0] "Ta bort ström" msgstr[1] "Ta bort strömmar" #: .././sonata/main.py:2909 msgid "To save lyrics to the music file's directory, you must specify a valid music directory." msgstr "För att spara låttexten till musikfilens katalog så måste du ange en giltig musikkatalog." #: .././sonata/main.py:2909 #: .././sonata/main.py:2916 msgid "Music Dir Verification" msgstr "Verifikation av musikkatalog" #: .././sonata/main.py:2916 msgid "To save artwork to the music file's directory, you must specify a valid music directory." msgstr "För att spara omslag till musikfilens katalog så måste du ange en giltig musikkatalog." #: .././sonata/main.py:3332 msgid "album" msgid_plural "albums" msgstr[0] "album" msgstr[1] "album" #: .././sonata/main.py:3333 msgid "artist" msgid_plural "artists" msgstr[0] "artist" msgstr[1] "artister" #: .././sonata/main.py:3340 msgid "day of bliss" msgid_plural "days of bliss" msgstr[0] "dag av fullständig lycka." msgstr[1] "dagar av fullständig lycka." #: .././sonata/main.py:3342 msgid "hour of bliss" msgid_plural "hours of bliss" msgstr[0] "timme av fullständig lycka." msgstr[1] "timmar av fullständig lycka." #: .././sonata/playlists.py:103 #: .././sonata/playlists.py:105 msgid "Save Playlist" msgstr "Spara spellista" #: .././sonata/playlists.py:120 msgid "Would you like to replace the existing playlist or append these songs?" msgstr "Vill du ersätta den befintliga spellistan eller lägga till låtarna till listan?" #: .././sonata/playlists.py:120 msgid "Existing Playlist" msgstr "Befintlig spellista" #: .././sonata/playlists.py:120 msgid "Replace playlist" msgstr "Ersätt spellista" #: .././sonata/playlists.py:120 msgid "Append songs" msgstr "Lägg till låtar" #: .././sonata/playlists.py:141 msgid "A playlist with this name already exists. Would you like to replace it?" msgstr "En spellista med det här namnet finns redan. Vill du ersätta den?" #: .././sonata/playlists.py:153 msgid "Playlist name" msgstr "Spellistans namn" #: .././sonata/playlists.py:182 #: .././sonata/playlists.py:186 msgid "Rename Playlist" msgstr "Byt namn på spellista" #. Constants: #: .././sonata/preferences.py:35 msgid "System tray" msgstr "Aktivitetsfält" #: .././sonata/preferences.py:35 msgid "Top Left" msgstr "Övre vänster" #: .././sonata/preferences.py:35 msgid "Top Right" msgstr "Övre höger" #: .././sonata/preferences.py:35 msgid "Bottom Left" msgstr "Nedre vänster" #: .././sonata/preferences.py:35 msgid "Bottom Right" msgstr "Nedre höger" #: .././sonata/preferences.py:35 msgid "Screen Center" msgstr "Mitten av skärmen" #. MPD tab #: .././sonata/preferences.py:64 msgid "MPD Connection" msgstr "MPD-anslutning" #: .././sonata/preferences.py:76 msgid "_Name" msgstr "_Namn" #: .././sonata/preferences.py:79 msgid "_Host" msgstr "_Värd" #: .././sonata/preferences.py:82 msgid "_Port" msgstr "_Port" #: .././sonata/preferences.py:86 msgid "_Music dir" msgstr "Musikkatal_og" #: .././sonata/preferences.py:87 msgid "Select a Music Directory" msgstr "Välj en musikkatalog" #: .././sonata/preferences.py:91 msgid "Pa_ssword" msgstr "L_ösenord" #: .././sonata/preferences.py:94 msgid "Leave blank if no password is required." msgstr "Lämna blank om inget lösenord krävs." #: .././sonata/preferences.py:95 msgid "_Autoconnect on start" msgstr "_Anslut automatiskt vid uppstart" #: .././sonata/preferences.py:113 msgid "Using MPD_HOST/PORT" msgstr "Använder MPD_VÄRD/PORT" #: .././sonata/preferences.py:163 #: .././sonata/preferences.py:536 msgid "Extras" msgstr "Extrafunktioner" #: .././sonata/preferences.py:168 msgid "_Audioscrobbling (Last.fm)" msgstr "_Audioscrobbling (Last.fm)" #: .././sonata/preferences.py:170 msgid "_Username:" msgstr "_Användarnamn:" #: .././sonata/preferences.py:171 msgid "_Password:" msgstr "_Lösenord:" #: .././sonata/preferences.py:188 msgid "Popup _notification on song changes" msgstr "Popup_notifiering vid låtbyte" #: .././sonata/preferences.py:210 msgid "Fade length" msgstr "Toningslängd" #: .././sonata/preferences.py:211 msgid "_Fade length" msgstr "Ton_ingslängd" #: .././sonata/preferences.py:213 msgid "sec" msgstr "s" #: .././sonata/preferences.py:218 msgid "C_rossfade" msgstr "Ko_rstoning" #. Display tab #: .././sonata/preferences.py:246 #: .././sonata/preferences.py:533 msgid "Display" msgstr "Visa" #: .././sonata/preferences.py:251 msgid "_Album art" msgstr "Album_omslag" #: .././sonata/preferences.py:253 msgid "Standard" msgstr "Standard" #: .././sonata/preferences.py:253 msgid "Stylized" msgstr "Stiliserad" #: .././sonata/preferences.py:256 msgid "Artwork style:" msgstr "Stil på omslagsbild:" #: .././sonata/preferences.py:258 msgid "Local only" msgstr "Endast lokal" #: .././sonata/preferences.py:258 msgid "Local and remote" msgstr "Lokal och fjärr" #: .././sonata/preferences.py:260 msgid "Search locations:" msgstr "Sökplatser:" #: .././sonata/preferences.py:267 #: .././sonata/preferences.py:289 msgid "SONG_DIR" msgstr "LÅTKAT" #: .././sonata/preferences.py:269 msgid "custom" msgstr "anpassad" #: .././sonata/preferences.py:274 msgid "Save art to:" msgstr "Spara omslag till:" #: .././sonata/preferences.py:277 msgid "_Playback/volume buttons" msgstr "Knappar för _uppspelning/volym" #: .././sonata/preferences.py:280 msgid "Pr_ogressbar" msgstr "Förlo_ppsmätare" #: .././sonata/preferences.py:283 msgid "_Statusbar" msgstr "_Statusrad" #: .././sonata/preferences.py:286 msgid "Song Ly_rics" msgstr "Låt_text" #: .././sonata/preferences.py:288 msgid "Save lyrics to:" msgstr "Spara låttext till:" #: .././sonata/preferences.py:297 msgid "System _tray icon" msgstr "Aktivitets_fältsikon" #. Behavior tab #: .././sonata/preferences.py:319 msgid "Window Behavior" msgstr "Fönsterbeteende" #: .././sonata/preferences.py:323 msgid "_Show window on all workspaces" msgstr "_Visa fönstret på alla arbetsytor" #: .././sonata/preferences.py:326 msgid "_Keep window above other windows" msgstr "_Håll fönstret ovanför andra fönster" #: .././sonata/preferences.py:329 msgid "_Hide window titlebar" msgstr "_Dölj fönstrets titellist" #: .././sonata/preferences.py:334 msgid "_Minimize to system tray on close/escape" msgstr "_Minimera till aktivitetsfält vid stängning" #: .././sonata/preferences.py:336 msgid "If enabled, closing Sonata will minimize it to the system tray. Note that it's currently impossible to detect if there actually is a system tray, so only check this if you have one." msgstr "Om aktiverad kommer en stängning av Sonata att minimera den till meddelandefältet. Observera att det för närvarande inte är möjligt att identifiera om det verkligen finns ett meddelandefält. Använd endast den här funktionen om du har ett meddelandefält." #: .././sonata/preferences.py:350 msgid "Miscellaneous" msgstr "Diverse" #: .././sonata/preferences.py:354 msgid "_Update MPD library on start" msgstr "_Uppdatera MPD-biblioteket vid uppstart" #: .././sonata/preferences.py:356 msgid "If enabled, Sonata will automatically update your MPD library when it starts up." msgstr "Om aktiverad kommer Sonata att automatiskt uppdatera ditt MPD-bibliotek när den startar upp." #: .././sonata/preferences.py:358 msgid "S_top playback on exit" msgstr "S_toppa uppspelning vid avslut" #: .././sonata/preferences.py:360 msgid "MPD allows playback even when the client is not open. If enabled, Sonata will behave like a more conventional music player and, instead, stop playback upon exit." msgstr "MPD tillåter uppspelning även när klienten inte är öppnad. Om aktiverad kommer Sonata att bete sig mer som en vanlig musikspelare och istället stoppa uppspelningen vid avslut." #: .././sonata/preferences.py:362 msgid "_Write status file:" msgstr "S_kriv statusfil:" #: .././sonata/preferences.py:364 #: .././sonata/preferences.py:366 msgid "If enabled, Sonata will create a xmms-infopipe like file containing information about the current song. Many applications support the xmms-info file (Instant Messengers, IRC Clients...)" msgstr "Om aktiverad kommer Sonata att skapa en xmms-infopipe-liknande fil som innehåller information om den aktuella låten. Många program har stöd för xmms-info-filer (snabbmeddelandeklienter, IRC-klienter...)" #. Format tab #: .././sonata/preferences.py:392 msgid "Song Formatting" msgstr "Låtformatering" #: .././sonata/preferences.py:397 msgid "C_urrent playlist:" msgstr "A_ktuell spellista:" #: .././sonata/preferences.py:398 msgid "_Library:" msgstr "_Bibliotek:" #: .././sonata/preferences.py:399 msgid "_Window title:" msgstr "F_önstertitel:" #: .././sonata/preferences.py:400 msgid "Current _song line 1:" msgstr "Aktuell _låt rad 1:" #: .././sonata/preferences.py:402 msgid "Current s_ong line 2:" msgstr "Aktuell l_åt rad 2:" #: .././sonata/preferences.py:422 msgid "Available options" msgstr "Tillgängliga alternativ" #. XXX get these directly from the formatting function: #: .././sonata/preferences.py:426 msgid "Artist name" msgstr "Artistnamn" #: .././sonata/preferences.py:427 msgid "Album name" msgstr "Albumnamn" #: .././sonata/preferences.py:428 msgid "Track name" msgstr "Spårnummer" #: .././sonata/preferences.py:429 msgid "Track number" msgstr "Spårnummer" #: .././sonata/preferences.py:430 msgid "Disc number" msgstr "Skivnummer" #: .././sonata/preferences.py:433 msgid "File path" msgstr "Filsökväg" #: .././sonata/preferences.py:434 msgid "File name" msgstr "Filnamn" #: .././sonata/preferences.py:435 #: .././sonata/streams.py:109 msgid "Stream name" msgstr "Strömnamn" #: .././sonata/preferences.py:436 msgid "Song length" msgstr "Låtlängd" #: .././sonata/preferences.py:437 msgid "Elapsed time (title only)" msgstr "Speltid (endast titel)" #: .././sonata/preferences.py:448 msgid "Info displayed only if all enclosed tags are defined" msgstr "Information visas endast om alla bifogade taggar har definierats" #: .././sonata/preferences.py:448 msgid "Creates columns in the current playlist" msgstr "Skapar kolumner i den aktuella spellistan" #: .././sonata/preferences.py:473 msgid "_About" msgstr "_Om" #: .././sonata/preferences.py:474 msgid "_Configure..." msgstr "_Konfigurera..." #: .././sonata/preferences.py:513 msgid "Loaded" msgstr "Inläst" #: .././sonata/preferences.py:521 msgid "Description" msgstr "Beskrivning" #. Set up table #: .././sonata/preferences.py:532 msgid "MPD" msgstr "MPD" #: .././sonata/preferences.py:534 msgid "Behavior" msgstr "Beteende" #: .././sonata/preferences.py:535 msgid "Format" msgstr "Format" #: .././sonata/preferences.py:605 msgid "New Profile" msgstr "Ny profil" #. Prompt user for playlist name: #: .././sonata/preferences.py:659 msgid "Custom Artwork" msgstr "Anpassat omslag" #: .././sonata/preferences.py:661 msgid "Artwork filename" msgstr "Filnamn för omslagsbild" #: .././sonata/streams.py:105 msgid "Edit Stream" msgstr "Redigera ström" #: .././sonata/streams.py:107 #: .././sonata/streams.py:138 msgid "New Stream" msgstr "Ny ström" #: .././sonata/streams.py:116 msgid "Stream URL" msgstr "URL för ström" #: .././sonata/streams.py:138 msgid "A stream with this name already exists. Would you like to replace it?" msgstr "En ström med det här namnet finns redan. Vill du ersätta den?" #: .././sonata/tagedit.py:61 msgid "Taglib and/or tagpy not found, tag editing support disabled." msgstr "Taglib och/eller tagpy hittades inte, stöd för taggredigering har inaktiverats." #: .././sonata/tagedit.py:61 #: .././sonata/tagedit.py:70 #: .././sonata/tagedit.py:75 #: .././sonata/tagedit.py:99 #: .././sonata/tagedit.py:103 #: .././sonata/tagedit.py:260 #: .././sonata/tagedit.py:299 msgid "Edit Tags" msgstr "Redigera taggar" #: .././sonata/tagedit.py:70 msgid "Tagpy version < 0.91. Please upgrade to a newer version, tag editing support disabled." msgstr "Tagpy version < 0.91. Uppgradera till en senare version, stöd för taggredigering har inaktiverats." #: .././sonata/tagedit.py:75 msgid "The path" msgstr "Sökvägen" #: .././sonata/tagedit.py:75 msgid "does not exist. Please specify a valid music directory in preferences." msgstr "finns inte. Ange en giltig musikkatalog i inställningarna." #: .././sonata/tagedit.py:99 msgid "File " msgstr "Filen" #: .././sonata/tagedit.py:99 msgid " not found. Please specify a valid music directory in preferences." msgstr " finns inte. Ange en giltig musikkatalog i inställningarna." #: .././sonata/tagedit.py:103 msgid "No music files with editable tags found." msgstr "Inga musikfiler med redigerbara taggar hittades." #: .././sonata/tagedit.py:150 msgid "Comment" msgstr "Kommentar" #. Only show save all button if more than one song being edited. #: .././sonata/tagedit.py:161 msgid "Save _All" msgstr "Spara _alla" #: .././sonata/tagedit.py:207 msgid "Increment each selected music file, starting at track 1 for this file." msgstr "Öka varje markerad musikfil, börjar med spår 1 för den här filen." #: .././sonata/tagedit.py:209 msgid "Apply to all selected music files." msgstr "Verkställ på alla markerade musikfiler." #: .././sonata/tagedit.py:260 msgid "of" msgstr "av" #. FIXME: was (save_success and self.conn and self.status): #: .././sonata/tagedit.py:299 msgid "Unable to save tag to music file." msgstr "Kunde inte spara tagg till musikfil." #: .././sonata/tagedit.py:366 msgid "Hide file path" msgstr "Dölj filsökväg" #: .././sonata/tagedit.py:369 msgid "Show file path" msgstr "Visa filsökväg" #~ msgid "_Update Path" #~ msgstr "_Uppdatera sökväg" #~ msgid "Enable Audioscrobbler" #~ msgstr "Aktivera Audioscrobbler" #~ msgid "Enable Crossfade" #~ msgstr "Aktivera korstoning" #~ msgid "Enable album art" #~ msgstr "Aktivera albumomslag" #~ msgid "Enable lyrics" #~ msgstr "Aktivera låttexter" #~ msgid "Enable system tray icon" #~ msgstr "Aktivera aktivitetsfältsikon" #~ msgid "_Display" #~ msgstr "_Visa" #~ msgid "_Extras" #~ msgstr "_Extrafunktioner" #~ msgid "The popup argument requires D-Bus. Aborting." #~ msgstr "Popupargumentet kräver D-Bus. Avbryter." #~ msgid "Website: http://www.nongnu.org/sonata/" #~ msgstr "Webbplats: http://www.nongnu.org/sonata/" #~ msgid "" #~ "PyGTK+ 2.10 or gnome-python-extras not found, system tray support " #~ "disabled." #~ msgstr "" #~ "PyGTK+ 2.10 eller gnome-python-extras hittades inte, stöd för " #~ "meddelandefält har inaktiverats." #~ msgid "Reset to Default" #~ msgstr "Återställ till standardvärden" #~ msgid "_New Playlist..." #~ msgstr "_Ny spellista..." #~ msgid "Notification" #~ msgstr "Notifiering" #~ msgid "" #~ "Python 2.5 or python-elementtree not found, audioscrobbler support " #~ "disabled." #~ msgstr "" #~ "Python 2.5 eller python-elementtree hittades inte, stöd för " #~ "audioscrobbler har inaktiverats." #~ msgid "Audioscrobbler Verification" #~ msgstr "Verifiering för Audioscrobbler" #~ msgid "Update library for selected item(s)" #~ msgstr "Uppdatera biblioteket för markerade poster" #~ msgid "_Shuffle" #~ msgstr "B_landa" #~ msgid "Toggle shuffle mode" #~ msgstr "Växla blandningsläge" #~ msgid "Not connected" #~ msgstr "Inte ansluten" #~ msgid "Press enter to search for these terms." #~ msgstr "Tryck Enter för att söka efter dessa termer." #~ msgid "Add new profile" #~ msgstr "Lägg till ny profil" #~ msgid "Remove current profile" #~ msgstr "Ta bort aktuell profil" #~ msgid "Play enqueued files on activate" #~ msgstr "Spela kölagda filer vid aktivering" #~ msgid "" #~ "Automatically play enqueued items when activated via double-click or " #~ "enter." #~ msgstr "" #~ "Spela automatiskt upp kölagda objekt när de aktiveras via dubbelklick " #~ "eller Enter." #~ msgid "Add selected song(s) or directory(s)" #~ msgstr "Lägg till markerade låt(ar) eller katalog(er)" #~ msgid "Replace with selected song(s) or directory(s)" #~ msgstr "Ersätt med markerade låt(ar) eller katalog(er)" #, fuzzy #~ msgid "Add selected song(s) to playlist queue" #~ msgstr "Lägg till markerade spellistor" #, fuzzy #~ msgid "Remove selected song(s) from playlist queue" #~ msgstr "Ta bort markerade låt(ar)?" #~ msgid "seconds" #~ msgstr "sekunder" #~ msgid "Song Info..." #~ msgstr "Låtinformation..." #~ msgid "Click to collapse the player" #~ msgstr "Klicka för att fälla in spelaren" #~ msgid "Click to expand the player" #~ msgstr "Klicka för att fälla ut spelaren" #~ msgid "_Song Info" #~ msgstr "_Låtinformation" #~ msgid "_Search..." #~ msgstr "_Sök..." #~ msgid "Remote only" #~ msgstr "Endast fjärr" #~ msgid "Remote, then local" #~ msgstr "Fjärr sedan lokal" #~ msgid "To save artwork as" #~ msgstr "För att spara omslagsbild som" #~ msgid "Artwork Verification" #~ msgstr "Verifiering av omslagsbild" #~ msgid "Switch to current playlist" #~ msgstr "Växla till aktuell spellista" #~ msgid "Toggle filter bar for jumping straight to track" #~ msgstr "Växla filterrad för hopp direkt till spår" #~ msgid "Song name" #~ msgstr "Låtnamn" #~ msgid "By" #~ msgstr "Av" #~ msgid "Enable" #~ msgstr "Aktivera" #~ msgid "Dis_play" #~ msgstr "Vis_ning" #~ msgid "songs." #~ msgstr "låtar." ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/po/tr.po�������������������������������������������������������������������������������0000664�0000000�0000000�00000114545�13771420143�0014423�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Turkish translaitons for sonata package. # Copyright (C) 2008 THE sonata'S COPYRIGHT HOLDER # This file is distributed under the same license as the sonata package. # # Gökmen Görgen <gkmngrgn@gmail.com>, 2008. # Fatih Altınok <photonia@gmail.com>, 2008. # msgid "" msgstr "" "Project-Id-Version: Sonata 1.5.1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-03-22 22:01-0600\n" "PO-Revision-Date: 2008-05-17 21:04+0200\n" "Last-Translator: Gökmen Görgen <gkmngrgn@gmail.com>\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Fatih Altınok <photonia@gmail.com>\n" "Plural-Forms: nplurals=1; plural=0;\n" #. define the shortcuts and their descriptions #. these are all gettextable #: .././sonata/about.py:52 msgid "About Sonata" msgstr "Sonata Hakkında" #: .././sonata/about.py:53 .././sonata/preferences.py:60 msgid "Preferences" msgstr "Tercihler" #: .././sonata/about.py:54 msgid "Fullscreen Artwork Mode" msgstr "" #: .././sonata/about.py:55 msgid "Switch to [1st-5th] tab" msgstr "[1-5]'inci sekmeye geç" #: .././sonata/about.py:56 msgid "Connect to MPD" msgstr "MPD'ye bağlan" #: .././sonata/about.py:57 msgid "Disconnect from MPD" msgstr "MPD bağlantısını kes" #: .././sonata/about.py:58 msgid "Randomize current playlist" msgstr "Çalma listesini karıştır" #: .././sonata/about.py:59 msgid "Expand player" msgstr "Çalıcıyı genişlet" #: .././sonata/about.py:60 #, fuzzy msgid "Switch to previous tab" msgstr "[1-5]'inci sekmeye geç" #: .././sonata/about.py:61 #, fuzzy msgid "Switch to next tab" msgstr "[1-5]'inci sekmeye geç" #: .././sonata/about.py:62 msgid "Collapse player" msgstr "Çalıcıyı daralt" #: .././sonata/about.py:63 .././sonata/library.py:86 msgid "Search library" msgstr "Kitaplıkta ara" #: .././sonata/about.py:64 msgid "Quit" msgstr "Kapat" #: .././sonata/about.py:65 msgid "Update entire library" msgstr "Tüm kütüphaneyi güncelle" #: .././sonata/about.py:66 msgid "Display popup menu" msgstr "Bilgilendirme penceresini göster" #: .././sonata/about.py:67 msgid "Minimize to system tray (if enabled)" msgstr "Sistem çekmecesine yerleş (eğer etkinse)" #: .././sonata/about.py:69 msgid "Previous track" msgstr "Önceki şarkı" #: .././sonata/about.py:70 msgid "Next track" msgstr "Sonraki şarkı" #: .././sonata/about.py:71 msgid "Play/Pause" msgstr "Çal/Duraklat" #: .././sonata/about.py:72 msgid "Stop" msgstr "Durdur" #: .././sonata/about.py:73 msgid "Lower the volume" msgstr "Sesi azalt" #: .././sonata/about.py:74 msgid "Raise the volume" msgstr "Sesi yükselt" #: .././sonata/about.py:76 msgid "Play selected song" msgstr "Seçili şarkıyı çal" #: .././sonata/about.py:77 msgid "Remove selected song(s)" msgstr "Seçili şarkı(lar)ı sil" #: .././sonata/about.py:78 msgid "Center currently playing song" msgstr "Çalınan şarkıyı ortaya getir" #: .././sonata/about.py:79 .././sonata/about.py:88 msgid "Edit selected song's tags" msgstr "Seçili şarkının etiketlerini düzenle" #: .././sonata/about.py:80 msgid "Save to new playlist" msgstr "Yeni çalma listesine kaydet" #: .././sonata/about.py:81 msgid "Clear list" msgstr "Listeyi temizle" #: .././sonata/about.py:82 msgid "Randomize list" msgstr "Listeyi karıştır" #: .././sonata/about.py:84 msgid "Add selected song(s) or enter directory" msgstr "Seçili şarkı(lar)ı ekle veya dizin gir" #: .././sonata/about.py:85 msgid "Go to parent directory" msgstr "Üst dizine git" #: .././sonata/about.py:86 msgid "Add selected item(s)" msgstr "Seçili olan(lar)ı ekle" #: .././sonata/about.py:87 msgid "Replace with selected item(s)" msgstr "Seçili olan(lar)la değiştir" #: .././sonata/about.py:89 msgid "Add selected item(s) and play" msgstr "Seçili olan(lar)ı ekle ve çal" #: .././sonata/about.py:90 msgid "Replace with selected item(s) and play" msgstr "Seçili olan(lar)la değiştir ve çal" #: .././sonata/about.py:91 #, fuzzy msgid "Update selected item(s)/path(s)" msgstr "Seçili olan(lar)ı ekle" #: .././sonata/about.py:93 .././sonata/about.py:95 msgid "Add selected playlist(s)" msgstr "Seçili çalma listesini/listelerini ekle" #: .././sonata/about.py:94 msgid "Remove selected playlist(s)" msgstr "Seçili çalma listesini/listelerini sil" #: .././sonata/about.py:96 msgid "Replace with selected playlist(s)" msgstr "Seçili şarkı listesi/listeleri ile değiştir" #: .././sonata/about.py:97 msgid "Add selected playlist(s) and play" msgstr "Seçili şarkı listesi/listelerini ekle ve çal" #: .././sonata/about.py:98 msgid "Replace with selected playlist(s) and play" msgstr "Seçili şarkı listesi/listeleri ile değiştir ve çal" #: .././sonata/about.py:100 .././sonata/about.py:102 msgid "Add selected stream(s)" msgstr "Seçili yayın(lar)ı ekle" #: .././sonata/about.py:101 msgid "Remove selected stream(s)" msgstr "Seçili yayın(lar)ı sil" #: .././sonata/about.py:103 msgid "Replace with selected stream(s)" msgstr "Seçili yayın(lar) ile değiştir" #: .././sonata/about.py:104 msgid "Add selected stream(s) and play" msgstr "Seçili yayın(lar)ı ekle ve çal" #: .././sonata/about.py:105 msgid "Replace with selected stream(s) and play" msgstr "Seçili yayın(lar) ile değiştir ve çal" #: .././sonata/about.py:107 msgid "Edit playing song's tags" msgstr "Çalan şarkının etiketlerini düzenle" #. define the main array- this adds headings to each section of #. shortcuts that will be displayed #: .././sonata/about.py:110 msgid "Main Shortcuts" msgstr "Ana Kısayollar" #: .././sonata/about.py:111 msgid "Playback Shortcuts" msgstr "Çalma Kısayolları" #: .././sonata/about.py:112 msgid "Current Shortcuts" msgstr "Geçerli Kısayollar" #: .././sonata/about.py:113 msgid "Library Shortcuts" msgstr "Kütüphane Kısayolları" #: .././sonata/about.py:114 msgid "Playlist Shortcuts" msgstr "Çalma Listesi Kısayolları" #: .././sonata/about.py:115 msgid "Stream Shortcuts" msgstr "Yayın Kısayolları" #: .././sonata/about.py:116 msgid "Info Shortcuts" msgstr "Bilgi Kısayolları" #: .././sonata/about.py:117 msgid "Shortcuts" msgstr "Kısayollar" #: .././sonata/about.py:153 msgid "An elegant music client for MPD." msgstr "MPD için zarif bir müzik istemcisi." #. Add button to show keybindings: #: .././sonata/about.py:166 msgid "_Shortcuts" msgstr "_Kısayollar" #: .././sonata/about.py:177 .././sonata/main.py:3088 #: .././sonata/preferences.py:738 msgid "Unable to launch a suitable browser." msgstr "" #: .././sonata/about.py:177 .././sonata/main.py:3088 #: .././sonata/preferences.py:738 msgid "Launch Browser" msgstr "" #: .././sonata/cli.py:81 #, fuzzy msgid "The toggle and popup arguments require D-Bus. Aborting." msgstr "Geçiş argümanı için D-Bus gerekli, durduruluyor." #: .././sonata/cli.py:97 #, fuzzy msgid "Version" msgstr "Sürüm: Sonata" #: .././sonata/cli.py:98 msgid "Website" msgstr "" #: .././sonata/cli.py:103 #, fuzzy msgid "Usage: sonata [OPTION]... [COMMAND]..." msgstr "Kullanım: sonata [OPTION]" #: .././sonata/cli.py:105 msgid "Options" msgstr "Seçenekler" #: .././sonata/cli.py:106 msgid "Show this help and exit" msgstr "Bu yardımı göster ve çık" #: .././sonata/cli.py:107 #, fuzzy msgid "Popup song notification (requires D-Bus)" msgstr "Bilgilendirme penceresi (DBus gerekli)" #: .././sonata/cli.py:108 msgid "Toggles whether the app is minimized" msgstr "Uygulamanın sistem çekmecesine gizlenmesi" #: .././sonata/cli.py:109 msgid "to tray or visible (requires D-Bus)" msgstr "veya görünmesi arasında geçiş yapar (D-Bus gerekli)" #: .././sonata/cli.py:110 msgid "Don't start app if D-Bus commands fail" msgstr "" #: .././sonata/cli.py:111 msgid "Show version information and exit" msgstr "Sürüm bilgisini göster ve çık" #: .././sonata/cli.py:112 msgid "Start app hidden (requires systray)" msgstr "Uygulamayı gizli başlat (sistem çekmecesi gerekli)" #: .././sonata/cli.py:113 msgid "Start app visible (requires systray)" msgstr "Uygulamayı görünür başlat (sistem çekmecesi gerekli)" #: .././sonata/cli.py:114 msgid "Start with profile [NUM]" msgstr "Profil [NUM] ile başlat" #: .././sonata/cli.py:116 #, fuzzy msgid "Commands" msgstr "Yorum" #: .././sonata/cli.py:117 msgid "Play song in playlist" msgstr "Çalma listesinden şarkı çal" #: .././sonata/cli.py:118 msgid "Pause currently playing song" msgstr "Çalmakta olan şarkıyı duraklat" #: .././sonata/cli.py:119 msgid "Stop currently playing song" msgstr "Çalmakta olan şarkıyı durdur" #: .././sonata/cli.py:120 msgid "Play next song in playlist" msgstr "Çalma listesinde sonraki şarkıyı çal" #: .././sonata/cli.py:121 msgid "Play previous song in playlist" msgstr "Çalma listesinde önceki şarkıyı çal" #: .././sonata/cli.py:122 msgid "Toggle play/pause; plays if stopped" msgstr "Çal/duraklat; şarkı durmuşsa başlatır" #: .././sonata/cli.py:123 msgid "Toggle repeat mode" msgstr "Tekrarlama durumunu değiştir" #: .././sonata/cli.py:124 #, fuzzy msgid "Toggle random mode" msgstr "Tekrarlama durumunu değiştir" #: .././sonata/cli.py:125 msgid "Display current song info" msgstr "Çalmakta olan şarkı bilgisini göster" #: .././sonata/cli.py:126 msgid "Display MPD status" msgstr "MPD durumunu göster" #: .././sonata/cli.py:134 #, fuzzy, python-format msgid "Starting Sonata with profile %s..." msgstr "Sonata, şu profil ile başlıyor:" #: .././sonata/cli.py:136 #, python-format msgid "%d is not an available profile number." msgstr "" #: .././sonata/cli.py:137 .././sonata/cli.py:141 #, fuzzy, python-format msgid "Profile numbers must be between 1 and %d." msgstr "Geçerli bir profil numarası değil. Profil numarası aralığı, 1 - " #: .././sonata/cli.py:140 #, python-format msgid "Python is unable to interpret %s as a number." msgstr "" #: .././sonata/cli.py:154 .././sonata/main.py:179 msgid "Default Profile" msgstr "Öntanımlı Profil" #: .././sonata/cli.py:154 .././sonata/main.py:179 msgid "by" msgstr "" #: .././sonata/cli.py:154 .././sonata/main.py:179 msgid "from" msgstr "-" #: .././sonata/cli.py:176 msgid "" "Unable to connect to MPD.\n" "Please check your Sonata preferences or MPD_HOST/MPD_PORT environment " "variables." msgstr "" "MPD'ye bağlanılamıyor.\n" "Lütfen Sonata tercihlerinizi veya MPD_HOST/ MPD_PORT çevre değişkenlerinizi " "kontrol edin." #: .././sonata/cli.py:208 .././sonata/info.py:91 .././sonata/info.py:245 #: .././sonata/library.py:49 .././sonata/tagedit.py:125 msgid "Title" msgstr "Şarkı" #: .././sonata/cli.py:209 .././sonata/info.py:91 .././sonata/info.py:246 #: .././sonata/library.py:49 .././sonata/main.py:1184 #: .././sonata/tagedit.py:126 msgid "Artist" msgstr "Sanatçı" #: .././sonata/cli.py:210 .././sonata/info.py:91 .././sonata/info.py:247 #: .././sonata/library.py:49 .././sonata/main.py:1185 .././sonata/main.py:2439 #: .././sonata/tagedit.py:127 msgid "Album" msgstr "Albüm" #: .././sonata/cli.py:211 .././sonata/info.py:91 .././sonata/info.py:248 msgid "Date" msgstr "Tarih" #: .././sonata/cli.py:212 .././sonata/info.py:91 .././sonata/info.py:250 #: .././sonata/main.py:1186 .././sonata/tagedit.py:130 msgid "Track" msgstr "Parça" #: .././sonata/cli.py:213 .././sonata/info.py:91 .././sonata/info.py:249 #: .././sonata/library.py:49 .././sonata/main.py:1189 #: .././sonata/preferences.py:432 .././sonata/tagedit.py:139 msgid "Genre" msgstr "Tür" #: .././sonata/cli.py:214 .././sonata/info.py:91 .././sonata/info.py:251 #: .././sonata/main.py:1191 msgid "File" msgstr "Dosya" #: .././sonata/cli.py:219 .././sonata/cli.py:221 msgid "Time" msgstr "Zaman" #: .././sonata/cli.py:222 .././sonata/info.py:91 .././sonata/info.py:244 msgid "Bitrate" msgstr "Bitrate" #: .././sonata/cli.py:224 msgid "MPD stopped" msgstr "MPD durduruldu" #: .././sonata/cli.py:228 .././sonata/cli.py:230 .././sonata/cli.py:232 msgid "State" msgstr "Durum" #: .././sonata/cli.py:228 msgid "Playing" msgstr "Çalıyor" #: .././sonata/cli.py:230 msgid "Paused" msgstr "Duraklatıldı" #: .././sonata/cli.py:232 .././sonata/main.py:559 .././sonata/main.py:564 #: .././sonata/main.py:1836 .././sonata/main.py:1847 msgid "Stopped" msgstr "Durduruldu" #: .././sonata/cli.py:234 .././sonata/cli.py:236 msgid "Repeat" msgstr "Yinele" #: .././sonata/cli.py:234 .././sonata/cli.py:238 msgid "Off" msgstr "Kapalı" #: .././sonata/cli.py:236 .././sonata/cli.py:240 msgid "On" msgstr "Açık" #: .././sonata/cli.py:238 .././sonata/cli.py:240 msgid "Random" msgstr "Rastgele" #: .././sonata/cli.py:241 msgid "Volume" msgstr "Ses seviyesi" #: .././sonata/cli.py:242 msgid "Crossfade" msgstr "Crossfade" #: .././sonata/cli.py:242 .././sonata/preferences.py:192 msgid "second" msgid_plural "seconds" msgstr[0] "" msgstr[1] "saniye" #: .././sonata/current.py:64 msgid "Filter" msgstr "Süzgeç" #: .././sonata/dbus_plugin.py:83 msgid "" "Sonata failed to connect to the D-BUS session bus: Unable to determine the " "address of the message bus (try 'man dbus-launch' and 'man dbus-daemon' for " "help)" msgstr "" "Sonara D-BUS oturumuna bağlanamadı: Adres belirlenemedi (yardım için 'man " "dbus-launch' ve 'man dbus-daemon'a bakın)" #: .././sonata/dbus_plugin.py:96 msgid "Failed to execute remote commands." msgstr "" #: .././sonata/dbus_plugin.py:98 #, fuzzy msgid "Starting Sonata instead..." msgstr "Sonata, şu profil ile başlıyor:" #: .././sonata/dbus_plugin.py:100 #, fuzzy msgid "Maybe Sonata is not running?" msgstr "Sonata şu an çalışıyor." #: .././sonata/dbus_plugin.py:114 #, fuzzy msgid "An instance of Sonata is already running. Showing it..." msgstr "Sonata şu an çalışıyor." #: .././sonata/dbus_plugin.py:120 msgid "Failed to execute remote command." msgstr "" #. Song info #: .././sonata/info.py:78 msgid "Song Info" msgstr "Şarkı Bilgisi" #: .././sonata/info.py:93 msgid "Launch artist in Wikipedia" msgstr "Sanatçıyı Wikipedia'da arat" #: .././sonata/info.py:93 msgid "Launch album in Wikipedia" msgstr "Albümü Wikipedia'da arat" #: .././sonata/info.py:127 msgid "Toggle extra tags" msgstr "Diğer etiketler" #: .././sonata/info.py:130 msgid "Edit song tags" msgstr "Şarkı etiketlerini düzenle" #. Lyrics #: .././sonata/info.py:140 msgid "Lyrics" msgstr "Şarkı sözleri" #: .././sonata/info.py:152 msgid "Search Lyricwiki.org for lyrics" msgstr "Lyricwiki.org'tan şarkı sözü ara" #: .././sonata/info.py:153 msgid "Edit lyrics at Lyricwiki.org" msgstr "" #. Album info #: .././sonata/info.py:161 msgid "Album Info" msgstr "Albüm Bilgisi" #: .././sonata/info.py:213 .././sonata/info.py:218 msgid "more" msgstr "daha fazla" #: .././sonata/info.py:215 msgid "hide" msgstr "gizle" #: .././sonata/info.py:281 msgid "edit tags" msgstr "etiketleri düzenle" #: .././sonata/info.py:308 msgid "Album info not found." msgstr "Albüm bilgisi bulunamadı" #: .././sonata/info.py:311 msgid "Album name not set." msgstr "Albüm ismi belirtilmemiş." #: .././sonata/info.py:324 msgid "ZSI not found, fetching lyrics support disabled." msgstr "ZSI bulunamadı, şarkı sözü indirme desteği devre dışı." #: .././sonata/info.py:329 msgid "Artist or song title not set." msgstr "Sanatçı ya da şarkı ismi belirtilmemiş." #: .././sonata/info.py:371 msgid "search" msgstr "ara" #: .././sonata/info.py:372 #, fuzzy msgid "edit" msgstr "etiketleri düzenle" #: .././sonata/info.py:381 .././sonata/info.py:436 msgid "Lyrics not found" msgstr "Şarkı sözü bulunamadı" #. Fetch lyrics from lyricwiki.org #: .././sonata/info.py:401 msgid "Fetching lyrics..." msgstr "Şarkı sözleri getiriliyor..." #: .././sonata/info.py:411 msgid "Couldn't connect to LyricWiki" msgstr "LyricWiki'ye bağlanılamadı" #: .././sonata/info.py:439 msgid "Fetching lyrics failed" msgstr "Şarkı sözleri getirilemedi" #: .././sonata/library.py:47 msgid "Untagged" msgstr "Etiketlenmemiş" #: .././sonata/library.py:48 msgid "Various Artists" msgstr "Çeşitli Sanatçılar" #: .././sonata/library.py:49 msgid "Filename" msgstr "Dosya adı" #: .././sonata/library.py:49 msgid "Everything" msgstr "Hepsi" #: .././sonata/library.py:52 msgid "Filesystem" msgstr "Dosya sistemi" #: .././sonata/library.py:53 #, fuzzy msgid "Artists" msgstr "Sanatçı" #: .././sonata/library.py:54 #, fuzzy msgid "Albums" msgstr "Albüm" #: .././sonata/library.py:55 #, fuzzy msgid "Genres" msgstr "Tür" #: .././sonata/library.py:84 #, fuzzy msgid "Search terms" msgstr "Arama terimlerini düzenle" #: .././sonata/library.py:90 #, fuzzy msgid "End Search" msgstr "_Aramayı Bitir" #: .././sonata/library.py:92 msgid "Library browsing view" msgstr "Kütüphane arama görünümü" #: .././sonata/library.py:96 #, fuzzy msgid "Search" msgstr "_Ara" #. Show text: #: .././sonata/library.py:761 .././sonata/main.py:1763 #: .././sonata/main.py:3331 msgid "song" msgid_plural "songs" msgstr[0] "" msgstr[1] "şarkı" #: .././sonata/library.py:761 .././sonata/main.py:1757 msgid "minute" msgid_plural "minutes" msgstr[0] "" msgstr[1] "dakika" #: .././sonata/library.py:849 #, fuzzy msgid "Song" msgstr "Şarkı Bilgisi" #: .././sonata/library.py:849 .././sonata/main.py:1190 msgid "Path" msgstr "" #. Constants #: .././sonata/main.py:102 msgid "Current" msgstr "Çalınan" #: .././sonata/main.py:103 msgid "Library" msgstr "Kütüphane" #: .././sonata/main.py:104 msgid "Playlists" msgstr "Çalma Listeleri" #: .././sonata/main.py:105 msgid "Streams" msgstr "Yayınlar" #: .././sonata/main.py:106 msgid "Info" msgstr "Bilgi" #: .././sonata/main.py:137 .././sonata/preferences.py:193 #: .././sonata/preferences.py:194 msgid "Entire song" msgstr "Tüm şarkı" #: .././sonata/main.py:234 msgid "_Sort List" msgstr "Lis_teyi Sırala" #: .././sonata/main.py:235 msgid "Sa_ve List to" msgstr "Listeyi K_aydet" #: .././sonata/main.py:236 msgid "_Connection" msgstr "_Bağlantı" #: .././sonata/main.py:237 msgid "P_lay after" msgstr "Ardından ça_l" #: .././sonata/main.py:238 .././sonata/main.py:2454 msgid "_Update" msgstr "_Güncelle" #: .././sonata/main.py:239 msgid "Use _Remote Image..." msgstr "_Harici Resim Kullan" #: .././sonata/main.py:240 msgid "Use _Local Image..." msgstr "Y_erel Resim Kullan" #: .././sonata/main.py:241 msgid "_Fullscreen Mode" msgstr "" #: .././sonata/main.py:242 #, fuzzy msgid "Reset Image" msgstr "Resmi Aç" #: .././sonata/main.py:243 msgid "_Play" msgstr "Ça_l" #: .././sonata/main.py:244 #, fuzzy msgid "Pa_use" msgstr "Du_raklat" #: .././sonata/main.py:245 msgid "_Stop" msgstr "_Durdur" #: .././sonata/main.py:246 #, fuzzy msgid "Pre_vious" msgstr "_Geri" #: .././sonata/main.py:247 msgid "_Next" msgstr "İle_ri" #: .././sonata/main.py:248 msgid "_Quit" msgstr "_Kapat" #: .././sonata/main.py:249 msgid "_Remove" msgstr "_Sil" #: .././sonata/main.py:250 msgid "_Clear" msgstr "_Temizle" #: .././sonata/main.py:251 #, fuzzy msgid "_Entire Library" msgstr "Kütüphaneyi _Güncelle" #: .././sonata/main.py:252 #, fuzzy msgid "_Selected Items" msgstr "Seçili olan(lar)ı ekle" #: .././sonata/main.py:253 msgid "_Preferences..." msgstr "T_ercihler..." #: .././sonata/main.py:254 msgid "_About..." msgstr "_Hakkında..." #: .././sonata/main.py:255 msgid "_Edit Tags..." msgstr "_Etiketleri Düzenle" #: .././sonata/main.py:256 msgid "_Add" msgstr "E_kle" #: .././sonata/main.py:257 msgid "_Replace" msgstr "Değişti_r" #: .././sonata/main.py:258 msgid "Add" msgstr "Ekle" #: .././sonata/main.py:259 msgid "Replace" msgstr "Değiştir" #: .././sonata/main.py:260 msgid "_Delete..." msgstr "_Sil..." #: .././sonata/main.py:261 msgid "Shuffle" msgstr "Karıştır" #: .././sonata/main.py:286 #, fuzzy msgid "S_how Sonata" msgstr "_Sonata'yı Göster" #: .././sonata/main.py:287 msgid "_Repeat" msgstr "_Tekrarla" #: .././sonata/main.py:288 #, fuzzy msgid "Rando_m" msgstr "Rastgele" #: .././sonata/main.py:428 msgid "By Artist" msgstr "Sanatçıya göre" #: .././sonata/main.py:429 msgid "By Album" msgstr "Albüme göre" #: .././sonata/main.py:430 msgid "By Song Title" msgstr "Şarkı İsmine göre" #: .././sonata/main.py:431 msgid "By File Name" msgstr "Dosya İsmine göre" #: .././sonata/main.py:432 msgid "By Dir & File Name" msgstr "Dizin ve Dosya İsmine göre" #: .././sonata/main.py:433 msgid "Reverse List" msgstr "Listeyi Ters Çevir" #: .././sonata/main.py:456 .././sonata/main.py:467 msgid "_New..." msgstr "_Yeni..." #: .././sonata/main.py:457 msgid "_Edit..." msgstr "_Düzenle..." #: .././sonata/main.py:468 msgid "_Rename..." msgstr "_Yeniden Adlandır..." #: .././sonata/main.py:530 .././sonata/main.py:597 .././sonata/main.py:598 msgid "Playlist" msgstr "Çalma Listesi" #: .././sonata/main.py:560 .././sonata/main.py:1840 .././sonata/main.py:2049 msgid "Click to expand" msgstr "Genişletmek için tıklayın" #: .././sonata/main.py:565 .././sonata/main.py:1838 .././sonata/main.py:2047 msgid "Click to collapse" msgstr "Daraltmak için tıklayın" #: .././sonata/main.py:570 .././sonata/main.py:1732 .././sonata/main.py:1843 msgid "Not Connected" msgstr "Bağlı Değil" #: .././sonata/main.py:572 .././sonata/main.py:1730 .././sonata/main.py:1845 msgid "No Read Permission" msgstr "Okuma İzni Yok" #: .././sonata/main.py:645 #, fuzzy msgid "Cover Art" msgstr "Kapak Resmi Seç" #: .././sonata/main.py:850 .././sonata/main.py:863 .././sonata/main.py:884 #, fuzzy msgid "Profile" msgstr "Yeni Profil" #: .././sonata/main.py:863 .././sonata/main.py:864 .././sonata/main.py:884 #, fuzzy msgid "MPD_HOST/PORT" msgstr "MPD_HOST/PORT kullanılıyor" #: .././sonata/main.py:865 .././sonata/main.py:871 msgid "Disconnect" msgstr "Bağlantıyı kes" #: .././sonata/main.py:1187 .././sonata/main.py:1194 msgid "#" msgstr "#" #: .././sonata/main.py:1188 .././sonata/preferences.py:431 #: .././sonata/tagedit.py:128 msgid "Year" msgstr "Yıl" #: .././sonata/main.py:1192 msgid "Stream" msgstr "Yayın" #: .././sonata/main.py:1193 msgid "Len" msgstr "Uzunluk" #: .././sonata/main.py:1214 .././sonata/main.py:1221 .././sonata/main.py:1262 #: .././sonata/main.py:1269 msgid "Unknown" msgstr "Bilinmeyen" #: .././sonata/main.py:1753 msgid "day" msgid_plural "days" msgstr[0] "" msgstr[1] "gün" #: .././sonata/main.py:1761 msgid "hour" msgid_plural "hours" msgstr[0] "" msgstr[1] "saat" #: .././sonata/main.py:1766 .././sonata/main.py:1768 msgid "and" msgstr "ve" #: .././sonata/main.py:1776 msgid "(updating mpd)" msgstr "(mpd güncelleniyor)" #: .././sonata/main.py:2116 msgid "Lyrics Search" msgstr "Şarkı Sözü Ara" #: .././sonata/main.py:2117 msgid "_Search" msgstr "_Ara" #: .././sonata/main.py:2120 msgid "Artist Name" msgstr "Sanatçı İsmi" #: .././sonata/main.py:2125 msgid "Song Title" msgstr "Şarkı İsmi" #: .././sonata/main.py:2377 msgid "Open Image" msgstr "Resmi Aç" #: .././sonata/main.py:2379 msgid "Images" msgstr "Resimler" #: .././sonata/main.py:2383 msgid "All files" msgstr "Tüm Dosyalar" #: .././sonata/main.py:2425 msgid "Choose Cover Art" msgstr "Kapak Resmi Seç" #: .././sonata/main.py:2426 msgid "C_hoose" msgstr "S_eç" #: .././sonata/main.py:2459 msgid "Edit search terms" msgstr "Arama terimlerini düzenle" #: .././sonata/main.py:2516 msgid "No artist or album name found." msgstr "Sanatçı veya albüm ismi bulunamadı." #: .././sonata/main.py:2519 msgid "No cover art found." msgstr "Albüm kapağı bulunamadı." #: .././sonata/main.py:2843 msgid "Delete the selected playlist?" msgid_plural "Delete the selected playlists?" msgstr[0] "" msgstr[1] "Seçili çalma listeleri silinsin mi?" #: .././sonata/main.py:2843 msgid "Delete Playlist" msgid_plural "Delete Playlists" msgstr[0] "" msgstr[1] "Çalma listelerini sil" #: .././sonata/main.py:2851 msgid "Delete the selected stream?" msgid_plural "Delete the selected streams?" msgstr[0] "" msgstr[1] "Seçili yayınlar silinsin mi?" #: .././sonata/main.py:2851 msgid "Delete Stream" msgid_plural "Delete Streams" msgstr[0] "" msgstr[1] "Yayınları Sil" #: .././sonata/main.py:2909 msgid "" "To save lyrics to the music file's directory, you must specify a valid music " "directory." msgstr "" "Şarkı sözlerini müzik dosyasının dizinine kaydetmek için, geçerli müzik " "dizini belirtmeniz gerekmektedir." #: .././sonata/main.py:2909 .././sonata/main.py:2916 msgid "Music Dir Verification" msgstr "Müzik Dizini Doğrulaması" #: .././sonata/main.py:2916 msgid "" "To save artwork to the music file's directory, you must specify a valid " "music directory." msgstr "" "Albüm resimlerini müzik dosyasının dizinine kaydetmek için, geçerli müzik " "dizini belirtmeniz gerekmektedir." #: .././sonata/main.py:3332 msgid "album" msgid_plural "albums" msgstr[0] "" msgstr[1] "albüm" #: .././sonata/main.py:3333 msgid "artist" msgid_plural "artists" msgstr[0] "" msgstr[1] "sanatçı" #: .././sonata/main.py:3340 msgid "day of bliss" msgid_plural "days of bliss" msgstr[0] "" msgstr[1] "günlük mutluluk" #: .././sonata/main.py:3342 msgid "hour of bliss" msgid_plural "hours of bliss" msgstr[0] "" msgstr[1] "saatlik mutluluk" #: .././sonata/playlists.py:103 .././sonata/playlists.py:105 msgid "Save Playlist" msgstr "Çalma Listesini Kaydet" #: .././sonata/playlists.py:120 msgid "Would you like to replace the existing playlist or append these songs?" msgstr "" #: .././sonata/playlists.py:120 #, fuzzy msgid "Existing Playlist" msgstr "Çalma Listesi" #: .././sonata/playlists.py:120 #, fuzzy msgid "Replace playlist" msgstr "Çalma Listesini Yeniden Adlandır" #: .././sonata/playlists.py:120 msgid "Append songs" msgstr "" #: .././sonata/playlists.py:141 msgid "A playlist with this name already exists. Would you like to replace it?" msgstr "Bu isimde çalma listesi zaten var. Başka isim dener misiniz?" #: .././sonata/playlists.py:153 msgid "Playlist name" msgstr "Çalma listesi ismi" #: .././sonata/playlists.py:182 .././sonata/playlists.py:186 msgid "Rename Playlist" msgstr "Çalma Listesini Yeniden Adlandır" #. Constants: #: .././sonata/preferences.py:35 msgid "System tray" msgstr "Sistem çekmecesi" #: .././sonata/preferences.py:35 msgid "Top Left" msgstr "Sol Üst" #: .././sonata/preferences.py:35 msgid "Top Right" msgstr "Sağ Üst" #: .././sonata/preferences.py:35 msgid "Bottom Left" msgstr "Sol Alt" #: .././sonata/preferences.py:35 msgid "Bottom Right" msgstr "Sağ Alt" #: .././sonata/preferences.py:35 msgid "Screen Center" msgstr "Ekran Merkezi" #. MPD tab #: .././sonata/preferences.py:64 msgid "MPD Connection" msgstr "MPD Bağlantısı" #: .././sonata/preferences.py:76 #, fuzzy msgid "_Name" msgstr "İsim" #: .././sonata/preferences.py:79 #, fuzzy msgid "_Host" msgstr "Sunucu" #: .././sonata/preferences.py:82 #, fuzzy msgid "_Port" msgstr "Port" #: .././sonata/preferences.py:86 #, fuzzy msgid "_Music dir" msgstr "Müzik dizini" #: .././sonata/preferences.py:87 msgid "Select a Music Directory" msgstr "" #: .././sonata/preferences.py:91 #, fuzzy msgid "Pa_ssword" msgstr "Parola" #: .././sonata/preferences.py:94 msgid "Leave blank if no password is required." msgstr "Şifre gerekmiyorsa boş bırakın." #: .././sonata/preferences.py:95 #, fuzzy msgid "_Autoconnect on start" msgstr "Başlangıçta otomatik bağlan" #: .././sonata/preferences.py:113 msgid "Using MPD_HOST/PORT" msgstr "MPD_HOST/PORT kullanılıyor" #: .././sonata/preferences.py:163 .././sonata/preferences.py:536 msgid "Extras" msgstr "Ekler" #: .././sonata/preferences.py:168 msgid "_Audioscrobbling (Last.fm)" msgstr "" #: .././sonata/preferences.py:170 #, fuzzy msgid "_Username:" msgstr "Kullanıcı Adı:" #: .././sonata/preferences.py:171 #, fuzzy msgid "_Password:" msgstr "Şifre:" #: .././sonata/preferences.py:188 #, fuzzy msgid "Popup _notification on song changes" msgstr "Şarkı değişikliklerinde bilgilendirme göster" #: .././sonata/preferences.py:210 msgid "Fade length" msgstr "Fade uzunluğu" #: .././sonata/preferences.py:211 #, fuzzy msgid "_Fade length" msgstr "Fade uzunluğu" #: .././sonata/preferences.py:213 msgid "sec" msgstr "saniye" #: .././sonata/preferences.py:218 #, fuzzy msgid "C_rossfade" msgstr "Crossfade" #. Display tab #: .././sonata/preferences.py:246 .././sonata/preferences.py:533 msgid "Display" msgstr "Göster" #: .././sonata/preferences.py:251 #, fuzzy msgid "_Album art" msgstr "Albüm ismi" #: .././sonata/preferences.py:253 msgid "Standard" msgstr "Temel" #: .././sonata/preferences.py:253 msgid "Stylized" msgstr "Şekilli" #: .././sonata/preferences.py:256 msgid "Artwork style:" msgstr "Albüm resmi biçimi:" #: .././sonata/preferences.py:258 msgid "Local only" msgstr "Sadece yerel" #: .././sonata/preferences.py:258 #, fuzzy msgid "Local and remote" msgstr "Önce yerel, sonra harici" #: .././sonata/preferences.py:260 #, fuzzy msgid "Search locations:" msgstr "Arama sırası:" #: .././sonata/preferences.py:267 .././sonata/preferences.py:289 msgid "SONG_DIR" msgstr "" #: .././sonata/preferences.py:269 msgid "custom" msgstr "özel" #: .././sonata/preferences.py:274 msgid "Save art to:" msgstr "Albüm kapaklarını buraya kaydet:" #: .././sonata/preferences.py:277 #, fuzzy msgid "_Playback/volume buttons" msgstr "Tekrar çalma/ses butonları" #: .././sonata/preferences.py:280 #, fuzzy msgid "Pr_ogressbar" msgstr "İlerleme çubuğu" #: .././sonata/preferences.py:283 #, fuzzy msgid "_Statusbar" msgstr "Durum çubuğu" #: .././sonata/preferences.py:286 #, fuzzy msgid "Song Ly_rics" msgstr "Şarkı sözleri" #: .././sonata/preferences.py:288 msgid "Save lyrics to:" msgstr "Şarkı sözlerini buraya kaydet:" #: .././sonata/preferences.py:297 #, fuzzy msgid "System _tray icon" msgstr "Sistem çekmecesi" #. Behavior tab #: .././sonata/preferences.py:319 msgid "Window Behavior" msgstr "Pencere Davranışı" #: .././sonata/preferences.py:323 #, fuzzy msgid "_Show window on all workspaces" msgstr "Pencereyi tüm çalışma alanlarında göster" #: .././sonata/preferences.py:326 #, fuzzy msgid "_Keep window above other windows" msgstr "Pencereyi diğer pencerelerin üstünde tut" #: .././sonata/preferences.py:329 #, fuzzy msgid "_Hide window titlebar" msgstr "Pencere başlığı:" #: .././sonata/preferences.py:334 #, fuzzy msgid "_Minimize to system tray on close/escape" msgstr "Pencere kapatıldığında sistem çekmecesine yerleş" #: .././sonata/preferences.py:336 msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, so " "only check this if you have one." msgstr "" "Eğer seçiliyse, Sonata kapanırken sistem çekmecesine yerleşecek. Panelde " "sistem çekmecenizin olduğundan emin olun, aksi halde Sonata penceresini geri " "açamayabilirsiniz." #: .././sonata/preferences.py:350 msgid "Miscellaneous" msgstr "Çeşitli" #: .././sonata/preferences.py:354 #, fuzzy msgid "_Update MPD library on start" msgstr "Başlangıçta MPD kütüphanesini güncelle" #: .././sonata/preferences.py:356 msgid "" "If enabled, Sonata will automatically update your MPD library when it starts " "up." msgstr "" "Eğer seçiliyse, Sonata otomatik olarak MPD kütüphanenizi başlangıçta " "güncelleyecektir." #: .././sonata/preferences.py:358 #, fuzzy msgid "S_top playback on exit" msgstr "Çıkışta şarkıyı durdur" #: .././sonata/preferences.py:360 msgid "" "MPD allows playback even when the client is not open. If enabled, Sonata " "will behave like a more conventional music player and, instead, stop " "playback upon exit." msgstr "" "MPD, istemci kapalı olduğu halde çalmaya devam eder. Eğer seçiliyse, Sonata " "genel müzik çalıcılar gibi davranacak ve uygulama kapatıldığında tekrar " "çalma da duracak." #: .././sonata/preferences.py:362 #, fuzzy msgid "_Write status file:" msgstr "Durumu dosyaya yaz:" #: .././sonata/preferences.py:364 .././sonata/preferences.py:366 msgid "" "If enabled, Sonata will create a xmms-infopipe like file containing " "information about the current song. Many applications support the xmms-info " "file (Instant Messengers, IRC Clients...)" msgstr "" "Eğer seçiliyse, Sonata xmms-infopipe tarzı şarkı hakkında bilgi içeren bir " "dosya oluşturacak. Birçok uygulama (Anlık-İleti araçları, IRC istemciler...) " "xmms-info dosyalarını destekler." #. Format tab #: .././sonata/preferences.py:392 msgid "Song Formatting" msgstr "Şarkı Biçimi" #: .././sonata/preferences.py:397 #, fuzzy msgid "C_urrent playlist:" msgstr "Çalınanlar listesi:" #: .././sonata/preferences.py:398 #, fuzzy msgid "_Library:" msgstr "Kütüphane:" #: .././sonata/preferences.py:399 #, fuzzy msgid "_Window title:" msgstr "Pencere başlığı:" #: .././sonata/preferences.py:400 #, fuzzy msgid "Current _song line 1:" msgstr "Çalınan şarkı satır 1:" #: .././sonata/preferences.py:402 #, fuzzy msgid "Current s_ong line 2:" msgstr "Çalınan şarkı satır 2:" #: .././sonata/preferences.py:422 msgid "Available options" msgstr "Kullanılabilir seçenekler" #. XXX get these directly from the formatting function: #: .././sonata/preferences.py:426 msgid "Artist name" msgstr "Sanatçı ismi" #: .././sonata/preferences.py:427 msgid "Album name" msgstr "Albüm ismi" #: .././sonata/preferences.py:428 msgid "Track name" msgstr "Şarkı ismi" #: .././sonata/preferences.py:429 msgid "Track number" msgstr "Şarkı numarası" #: .././sonata/preferences.py:430 #, fuzzy msgid "Disc number" msgstr "Disk Numarası" #: .././sonata/preferences.py:433 #, fuzzy msgid "File path" msgstr "dosya_yolu" #: .././sonata/preferences.py:434 msgid "File name" msgstr "Dosya ismi" #: .././sonata/preferences.py:435 .././sonata/streams.py:109 msgid "Stream name" msgstr "Yayın ismi" #: .././sonata/preferences.py:436 msgid "Song length" msgstr "Şarkı uzunluğu" #: .././sonata/preferences.py:437 msgid "Elapsed time (title only)" msgstr "Geçen süre (sadece başlık)" #: .././sonata/preferences.py:448 msgid "Info displayed only if all enclosed tags are defined" msgstr "Yalnız etiketler tanımlanmışsa bilgi gösterilecek" #: .././sonata/preferences.py:448 msgid "Creates columns in the current playlist" msgstr "Çalınanlar listesinde sütunlar oluşturur" #: .././sonata/preferences.py:473 #, fuzzy msgid "_About" msgstr "_Hakkında..." #: .././sonata/preferences.py:474 msgid "_Configure..." msgstr "" #: .././sonata/preferences.py:513 msgid "Loaded" msgstr "" #: .././sonata/preferences.py:521 msgid "Description" msgstr "" #. Set up table #: .././sonata/preferences.py:532 #, fuzzy msgid "MPD" msgstr "_MPD" #: .././sonata/preferences.py:534 #, fuzzy msgid "Behavior" msgstr "_Davranış" #: .././sonata/preferences.py:535 #, fuzzy msgid "Format" msgstr "_Biçim" #: .././sonata/preferences.py:605 msgid "New Profile" msgstr "Yeni Profil" #. Prompt user for playlist name: #: .././sonata/preferences.py:659 msgid "Custom Artwork" msgstr "Özel Resim" #: .././sonata/preferences.py:661 msgid "Artwork filename" msgstr "Resim ismi" #: .././sonata/streams.py:105 msgid "Edit Stream" msgstr "Yayını Düzenle" #: .././sonata/streams.py:107 .././sonata/streams.py:138 msgid "New Stream" msgstr "Yeni Yayın" #: .././sonata/streams.py:116 msgid "Stream URL" msgstr "Yayın URL'si" #: .././sonata/streams.py:138 msgid "A stream with this name already exists. Would you like to replace it?" msgstr "Bu isimde bir yayın zaten var. Başka bir isim dener misiniz?" #: .././sonata/tagedit.py:61 msgid "Taglib and/or tagpy not found, tag editing support disabled." msgstr "Taglib ve/veya tagpy bulunamadı, etiket düzenleme desteği kaldırıldı." #: .././sonata/tagedit.py:61 .././sonata/tagedit.py:70 #: .././sonata/tagedit.py:75 .././sonata/tagedit.py:99 #: .././sonata/tagedit.py:103 .././sonata/tagedit.py:260 #: .././sonata/tagedit.py:299 msgid "Edit Tags" msgstr "Etiketleri Düzenle" #: .././sonata/tagedit.py:70 #, fuzzy msgid "" "Tagpy version < 0.91. Please upgrade to a newer version, tag editing support " "disabled." msgstr "Taglib ve/veya tagpy bulunamadı, etiket düzenleme desteği kaldırıldı." #: .././sonata/tagedit.py:75 msgid "The path" msgstr "Yol" #: .././sonata/tagedit.py:75 msgid "does not exist. Please specify a valid music directory in preferences." msgstr "mevcut değil. Lütfen tercihlerde geçerli müzik dizini belirtin." #: .././sonata/tagedit.py:99 msgid "File " msgstr "Dosya" #: .././sonata/tagedit.py:99 msgid " not found. Please specify a valid music directory in preferences." msgstr " bulunamadı. Lütfen tercihlerde geçerli müzik dizini belirtin." #: .././sonata/tagedit.py:103 msgid "No music files with editable tags found." msgstr "Düzenlenebilir etikete sahip hiç müzik dosyası bulunamadı." #: .././sonata/tagedit.py:150 msgid "Comment" msgstr "Yorum" #. Only show save all button if more than one song being edited. #: .././sonata/tagedit.py:161 msgid "Save _All" msgstr "_Hepsini Kaydet" #: .././sonata/tagedit.py:207 msgid "Increment each selected music file, starting at track 1 for this file." msgstr "" "Seçilen dosyaların numarasını bu dosya 1 olacak şekilde birer birer artır." #: .././sonata/tagedit.py:209 msgid "Apply to all selected music files." msgstr "Tüm müzik dosyaları için uygula" #: .././sonata/tagedit.py:260 msgid "of" msgstr "" #. FIXME: was (save_success and self.conn and self.status): #: .././sonata/tagedit.py:299 msgid "Unable to save tag to music file." msgstr "Etiket müzik dosyasına kaydedilemiyor." #: .././sonata/tagedit.py:366 #, fuzzy msgid "Hide file path" msgstr "dosya_yolu" #: .././sonata/tagedit.py:369 #, fuzzy msgid "Show file path" msgstr "dosya_yolu" #~ msgid "The popup argument requires D-Bus. Aborting." #~ msgstr "Bilgilendirme penceresi için D-Bus gerekli, durduruluyor." #, fuzzy #~ msgid "_Update Path" #~ msgstr "_Güncelle" #~ msgid "Website: http://www.nongnu.org/sonata/" #~ msgstr "İnternet Sitesi: http://www.nongnu.org/sonata/" #~ msgid "Enable Audioscrobbler" #~ msgstr "Audioscrobbler etkinleştir" #~ msgid "Enable Crossfade" #~ msgstr "Crossfade aktif" #~ msgid "Enable album art" #~ msgstr "Albüm resmi seçili" #~ msgid "Enable lyrics" #~ msgstr "Şarkı sözleri" #~ msgid "Enable system tray icon" #~ msgstr "Sistem çekmecesi" #~ msgid "_Display" #~ msgstr "_Göster" #~ msgid "_Extras" #~ msgstr "_Ekler" #~ msgid "" #~ "PyGTK+ 2.10 or gnome-python-extras not found, system tray support " #~ "disabled." #~ msgstr "" #~ "PyGTK+ 2.10 ya da gnome-python-extras bulunamadı, sistem çekmecesi " #~ "desteği şu an uygun değil." #~ msgid "Reset to Default" #~ msgstr "Öntanımlı Ayarlara Dön" #~ msgid "_New Playlist..." #~ msgstr "_Yeni Çalma Listesi..." #~ msgid "_Shuffle" #~ msgstr "_Karıştır" #~ msgid "Toggle shuffle mode" #~ msgstr "Karıştırma durumunu değiştir" #~ msgid "Notification" #~ msgstr "Bilgilendirme" #~ msgid "" #~ "Python 2.5 or python-elementtree not found, audioscrobbler support " #~ "disabled." #~ msgstr "" #~ "Python 2.5 ya da python-elementtree bulunamadı, audioscrobbler desteği " #~ "devre dışı." #~ msgid "Audioscrobbler Verification" #~ msgstr "Audioscrobbler Doğrulaması" #~ msgid "Update library for selected item(s)" #~ msgstr "Kütüphaneyi seçili olan(lar) için güncelle" �����������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/po/uk.po�������������������������������������������������������������������������������0000664�0000000�0000000�00000126510�13771420143�0014410�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # DolphinStKom <dolphinstkom@gmail.com>, 2013 msgid "" msgstr "" "Project-Id-Version: Sonata\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-07-08 19:07+0200\n" "PO-Revision-Date: 2013-07-09 20:24+0000\n" "Last-Translator: DolphinStKom <dolphinstkom@gmail.com>\n" "Language-Team: Ukrainian (http://www.transifex.com/projects/p/sonata/language/uk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: uk\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #. define the shortcuts and their descriptions #. these are all gettextable #. Keep them here (not as XML) as they're more convenient this way #: ../sonata/about.py:41 msgid "About Sonata" msgstr "Про Sonata" #: ../sonata/about.py:42 ../sonata/ui/preferences.glade.h:5 msgid "Preferences" msgstr "Налаштування" #: ../sonata/about.py:43 msgid "Fullscreen Artwork Mode" msgstr "Розгорнути до повноекранного режиму" #: ../sonata/about.py:44 msgid "Switch to [1st-5th] tab" msgstr "Перейти до [1ї-5ї] закладки" #: ../sonata/about.py:45 msgid "Connect to MPD" msgstr "З'єднання з MPD" #: ../sonata/about.py:46 msgid "Disconnect from MPD" msgstr "З'єднання з MPD розірвано" #: ../sonata/about.py:47 msgid "Randomize current playlist" msgstr "Перемішати поточний список" #: ../sonata/about.py:48 msgid "Expand player" msgstr "Розгорнути плеєр" #: ../sonata/about.py:49 msgid "Switch to previous tab" msgstr "До попередньої вкладки" #: ../sonata/about.py:50 msgid "Switch to next tab" msgstr "До наступної вкладки" #: ../sonata/about.py:51 msgid "Collapse player" msgstr "Згорнути плеєр" #: ../sonata/about.py:52 ../sonata/ui/library.glade.h:2 msgid "Search library" msgstr "Пошук у фонотеці" #: ../sonata/about.py:53 msgid "Quit" msgstr "Вихід" #: ../sonata/about.py:54 msgid "Update entire library" msgstr "Оновити фонетику" #: ../sonata/about.py:55 msgid "Display popup menu" msgstr "Показати спливаюче меню" #: ../sonata/about.py:56 msgid "Minimize to system tray (if enabled)" msgstr "Згорнути до трею (якщо увімкнено)" #: ../sonata/about.py:58 msgid "Previous track" msgstr "Попередня пісня" #: ../sonata/about.py:59 msgid "Next track" msgstr "Наступна пісня" #: ../sonata/about.py:60 msgid "Play/Pause" msgstr "Вітворити/Пауза" #: ../sonata/about.py:61 msgid "Stop" msgstr "Зупинити" #: ../sonata/about.py:62 msgid "Lower the volume" msgstr "Знизити гучність" #: ../sonata/about.py:63 msgid "Raise the volume" msgstr "Підвищити гучність" #: ../sonata/about.py:65 msgid "Play selected song" msgstr "Відтворити виділену пісню" #: ../sonata/about.py:66 msgid "Remove selected song(s)" msgstr "Вилучити вибрану пісню(-і)" #: ../sonata/about.py:67 msgid "Center currently playing song" msgstr "Зупинити відтворення" #: ../sonata/about.py:68 ../sonata/about.py:77 msgid "Edit selected song's tags" msgstr "Редагувати теги обраної композиції" #: ../sonata/about.py:69 msgid "Save to new playlist" msgstr "Зберегти у новий список" #: ../sonata/about.py:70 msgid "Clear list" msgstr "Зачистити список" #: ../sonata/about.py:71 msgid "Randomize list" msgstr "Перемішати поточний список" #: ../sonata/about.py:73 msgid "Add selected song(s) or enter directory" msgstr "Додати відмічені пісні або увійти до каталогу" #: ../sonata/about.py:74 msgid "Go to parent directory" msgstr "Перейти до батьківського каталогу" #: ../sonata/about.py:75 msgid "Add selected item(s)" msgstr "Додати виділені пісні" #: ../sonata/about.py:76 msgid "Replace with selected item(s)" msgstr "Замінити обраними піснями" #: ../sonata/about.py:78 msgid "Add selected item(s) and play" msgstr "Додати пісні до списку та відтворити" #: ../sonata/about.py:79 msgid "Replace with selected item(s) and play" msgstr "Замінити обраними піснями і відтворити" #: ../sonata/about.py:80 msgid "Update selected item(s)/path(s)" msgstr "Оновити виділені позиції/шляхи" #: ../sonata/about.py:82 ../sonata/about.py:84 msgid "Add selected playlist(s)" msgstr "Додати зазначені списки" #: ../sonata/about.py:83 msgid "Remove selected playlist(s)" msgstr "Вилучити зазначені списки" #: ../sonata/about.py:85 msgid "Replace with selected playlist(s)" msgstr "Замінити на зазначені списки" #: ../sonata/about.py:86 msgid "Add selected playlist(s) and play" msgstr "Додати зазначені списки і відтворити" #: ../sonata/about.py:90 ../sonata/about.py:92 msgid "Add selected stream(s)" msgstr "Додати виділені потоки" #: ../sonata/about.py:91 msgid "Remove selected stream(s)" msgstr "Вилучити виділені потоки" #: ../sonata/about.py:93 msgid "Replace with selected stream(s)" msgstr "Замінити обраними потоками" #: ../sonata/about.py:94 msgid "Add selected stream(s) and play" msgstr "Додати обрані потоки і відтворити" #: ../sonata/about.py:98 msgid "Edit playing song's tags" msgstr "Редагування тегів відтворюючого запису" #. define the main array- this adds headings to each section of #. shortcuts that will be displayed #: ../sonata/about.py:101 msgid "Main Shortcuts" msgstr "Основні гарячі клавіші" #: ../sonata/about.py:102 msgid "Playback Shortcuts" msgstr "Відтворення" #: ../sonata/about.py:103 msgid "Current Shortcuts" msgstr "Поточний список" #: ../sonata/about.py:104 msgid "Library Shortcuts" msgstr "Фонотека" #: ../sonata/about.py:105 msgid "Playlist Shortcuts" msgstr "Списки відтворення" #: ../sonata/about.py:106 msgid "Stream Shortcuts" msgstr "Потоки" #: ../sonata/about.py:107 msgid "Info Shortcuts" msgstr "Інформація" #: ../sonata/about.py:144 msgid "{count} song." msgid_plural "{count} songs." msgstr[0] "{count} пісня." msgstr[1] "{count} пісні." msgstr[2] "{count} пісень." #: ../sonata/about.py:147 msgid "{count} album." msgid_plural "{count} albums." msgstr[0] "{count} альбом." msgstr[1] "{count} альбоми." msgstr[2] "{count} альбомів." #: ../sonata/about.py:150 msgid "{count} artist." msgid_plural "{count} artists." msgstr[0] "{count} виконавець." msgstr[1] "{count} виконавця." msgstr[2] "{count} виконавців." #: ../sonata/about.py:160 msgid "{count} day of bliss." msgid_plural "{count} days of bliss." msgstr[0] "{count} доба насолоди." msgstr[1] "{count} доби насолоди." msgstr[2] "{count} днів насолоди." #: ../sonata/about.py:164 msgid "{count} hour of bliss." msgid_plural "{count} hours of bliss." msgstr[0] "{count} година насолоди." msgstr[1] "{count} години насолоди." msgstr[2] "{count} годин насолоди." #. toggle and popup and fullscreen need d-bus and don't always need gui #. version and help don't need anything and exit without gui #. hidden and visible are only applicable when gui is launched #. profile and no-start don't need anything #: ../sonata/cli.py:35 msgid "%prog [OPTION]... [COMMAND]..." msgstr "%prog [ОПЦІЯ]... [КОМАНДА]..." #: ../sonata/cli.py:36 msgid "Commands:" msgstr "Команди:" #: ../sonata/cli.py:37 msgid "play song in playlist" msgstr "відтворити пісню зі списку" #: ../sonata/cli.py:38 msgid "pause currently playing song" msgstr "призупинити відтворення пісні" #: ../sonata/cli.py:39 msgid "stop currently playing song" msgstr "зупинити відтворення пісні" #: ../sonata/cli.py:40 msgid "play next song in playlist" msgstr "перейти до наступної пісні зі списку" #: ../sonata/cli.py:41 msgid "play previous song in playlist" msgstr "перейти до попередньої пісні зі списку" #: ../sonata/cli.py:42 msgid "toggle play/pause; plays if stopped" msgstr "переключити відтворення/пауза; відтворити або зупинити" #: ../sonata/cli.py:43 msgid "toggle repeat mode" msgstr "перемкнути режим повтору" #: ../sonata/cli.py:44 msgid "toggle random mode" msgstr "перемкнути випадкове відтворення" #: ../sonata/cli.py:45 msgid "display current song info" msgstr "відобразити інформацію про композицію" #: ../sonata/cli.py:46 msgid "display MPD status" msgstr "відобразити стан MPD" #: ../sonata/cli.py:53 msgid "popup song notification (requires D-Bus)" msgstr "спливаюче повідомлення (потрібна наявність D-Bus)" #: ../sonata/cli.py:56 msgid "" "toggles whether the app is minimized to the tray or visible (requires D-Bus)" msgstr "перемкнути режими, згорнути програму в трей або показати (потребує наявність D-Bus)" #: ../sonata/cli.py:59 msgid "go fullscreen (requires D-Bus)" msgstr "перейти до повноекранного режиму (потребує наявність D-Bus)" #: ../sonata/cli.py:62 msgid "don't start app if D-Bus commands fail" msgstr "не вмикайте додаток якщо D-Bus команди зазнали невдачі" #: ../sonata/cli.py:65 msgid "start app hidden (requires systray)" msgstr "запустити додаток згорнутим (потрібна наявність увімкненого трея)" #: ../sonata/cli.py:68 msgid "start app visible (requires systray)" msgstr "запустити додаток на очно (потрібна наявність увімкненого трея)" #: ../sonata/cli.py:70 msgid "start with profile NUM" msgstr "запустити з профілем NUM" #: ../sonata/cli.py:73 msgid "start app with a interactive (ipython) shell" msgstr "запустити додаток за допомогою інтерактивної оболонки (ipython)" #: ../sonata/cli.py:76 msgid "Increase log verbosity" msgstr "Збільшити деталізацію звіту" #: ../sonata/cli.py:79 msgid "Decrease log verbosity" msgstr "Зменшити деталізацію звіту" #: ../sonata/cli.py:99 #, python-format msgid "unknown command %s" msgstr "невідома команда виконання %s" #: ../sonata/cli.py:105 msgid "toggle and popup options require D-Bus. Aborting." msgstr "спливаючим і перемикальним опціям потрібний D-Bus. Відхилено." #: ../sonata/cli.py:127 #, python-format msgid "Starting Sonata with profile %s..." msgstr "Sonata стартує з профілем %s..." #: ../sonata/cli.py:131 #, python-format msgid "%d is not an available profile number." msgstr "%d є хибним номером профілю." #: ../sonata/cli.py:133 #, python-format msgid "Profile numbers must be between 1 and %d." msgstr "Номер профілю має бути між 1 і %d." #: ../sonata/cli.py:153 ../sonata/main.py:171 msgid "Default Profile" msgstr "Базовий профіль" #: ../sonata/cli.py:154 msgid "by" msgstr " від" #: ../sonata/cli.py:154 msgid "from" msgstr "з" #: ../sonata/cli.py:177 msgid "" "Unable to connect to MPD.\n" "Please check your Sonata preferences or MPD_HOST/MPD_PORT environment variables." msgstr "Неможливо з'єднатися з MPD. ⏎\nПеревірте налаштування Sonata або змінні оточення MPD_HOST/MPD_PORT." #: ../sonata/cli.py:216 ../sonata/library.py:60 ../sonata/ui/library.glade.h:5 msgid "Title" msgstr "Назва" #: ../sonata/cli.py:217 ../sonata/formatting.py:102 ../sonata/library.py:60 #: ../sonata/ui/library.glade.h:4 msgid "Artist" msgstr "Виконавець" #: ../sonata/cli.py:218 ../sonata/formatting.py:103 ../sonata/library.py:60 #: ../sonata/ui/library.glade.h:6 msgid "Album" msgstr "Альбом" #: ../sonata/cli.py:219 msgid "Date" msgstr "Рік" #: ../sonata/cli.py:220 ../sonata/formatting.py:104 msgid "Track" msgstr "№ пісні" #: ../sonata/cli.py:221 ../sonata/formatting.py:108 ../sonata/library.py:60 #: ../sonata/ui/library.glade.h:7 msgid "Genre" msgstr "Жанр" #: ../sonata/cli.py:222 ../sonata/formatting.py:111 msgid "File" msgstr "Файл" #: ../sonata/cli.py:236 ../sonata/cli.py:238 msgid "Time" msgstr "Час" #: ../sonata/cli.py:239 msgid "Bitrate" msgstr "Бітрейт" #: ../sonata/cli.py:242 msgid "MPD stopped" msgstr "MPD зупинений" #: ../sonata/cli.py:246 msgid "Playing" msgstr "Відтворення" #: ../sonata/cli.py:247 msgid "Paused" msgstr "Пауза" #: ../sonata/cli.py:248 ../sonata/main.py:630 ../sonata/main.py:1640 #: ../sonata/main.py:1654 msgid "Stopped" msgstr "Зупинено" #: ../sonata/cli.py:249 msgid "State" msgstr "Стан" #: ../sonata/cli.py:251 msgid "Repeat:" msgstr "Повторювати:" #: ../sonata/cli.py:251 ../sonata/cli.py:253 msgid "On" msgstr "Увімкнути" #: ../sonata/cli.py:252 ../sonata/cli.py:254 msgid "Off" msgstr "Вимкнути" #: ../sonata/cli.py:253 msgid "Random:" msgstr "Випадковим чином:" #: ../sonata/cli.py:255 msgid "Volume" msgstr "Гучність" #: ../sonata/cli.py:256 msgid "Crossfade" msgstr "Перехресне згасання" #: ../sonata/cli.py:257 ../sonata/preferences.py:194 msgid "second" msgid_plural "seconds" msgstr[0] "секунда" msgstr[1] "секунди" msgstr[2] "секунд" #: ../sonata/dbus_plugin.py:101 msgid "" "Sonata failed to connect to the D-BUS session bus: Unable to determine the " "address of the message bus (try 'man dbus-launch' and 'man dbus-daemon' for " "help)\")" msgstr "Sonata не змогла з'єднатися з D-Bus: Не вдається визначити розташування шини повідомлень (спробуйте знайти рішення проблеми за допомогою консольних команд 'man dbus-launch' й 'man dbus-daemon')" #: ../sonata/dbus_plugin.py:121 msgid "Failed to execute remote commands." msgstr "Збій під час виконання віддалених команд." #: ../sonata/dbus_plugin.py:123 msgid "Starting Sonata instead..." msgstr "Запуск Sonata з профілем..." #. TODO: should we log the exception here? #: ../sonata/dbus_plugin.py:126 msgid "Maybe Sonata is not running?" msgstr "Можливо Sonata не запущено?" #: ../sonata/formatting.py:28 msgid "Unknown" msgstr "Невідомо" #: ../sonata/formatting.py:102 msgid "Artist name" msgstr "Виконавець" #: ../sonata/formatting.py:103 msgid "Album name" msgstr "Альбом" #: ../sonata/formatting.py:104 msgid "Track name" msgstr "Назва пісні" #: ../sonata/formatting.py:105 msgid "Track number" msgstr "№ пісні" #: ../sonata/formatting.py:105 ../sonata/formatting.py:106 msgid "#" msgstr "#" #: ../sonata/formatting.py:106 msgid "Disc number" msgstr "Номер диску" #: ../sonata/formatting.py:107 msgid "Year" msgstr "Рік" #: ../sonata/formatting.py:109 msgid "File path" msgstr "Шлях до файлу" #: ../sonata/formatting.py:109 ../sonata/library.py:1028 msgid "Path" msgstr "Шлях" #: ../sonata/formatting.py:111 msgid "File name" msgstr "Файл" #: ../sonata/formatting.py:113 msgid "Stream name" msgstr "Ім'я потоку" #: ../sonata/formatting.py:113 msgid "Stream" msgstr "Потоки" #: ../sonata/formatting.py:114 msgid "Song length" msgstr "Тривалість пісні" #: ../sonata/formatting.py:114 msgid "Len" msgstr "Тривалість пісні" #: ../sonata/formatting.py:115 msgid "Elapsed time (title only)" msgstr "Поточний час (лише в заголовку)" #: ../sonata/info.py:155 msgid "hide" msgstr "сховати" #: ../sonata/info.py:158 msgid "more" msgstr "більше" #: ../sonata/info.py:243 msgid "Album name not set." msgstr "Не вказано альбом" #: ../sonata/info.py:247 msgid "Album info not found." msgstr "Немає опису альбому." #: ../sonata/info.py:309 msgid "Lyrics not found" msgstr "Тексту не знайдено" #: ../sonata/info.py:351 msgid "Fetching lyrics..." msgstr "Завантаження текстів..." #: ../sonata/info.py:372 msgid "Lyrics not found." msgstr "Тексту не знайдено." #: ../sonata/info.py:375 msgid "No lyrics plug-in enabled." msgstr "Немає текстів бо плагін не увімкнено." #: ../sonata/library.py:14 msgid "Various Artists" msgstr "Різні виконавці" #: ../sonata/library.py:59 msgid "Untagged" msgstr "Немає тегів" #: ../sonata/library.py:61 ../sonata/ui/library.glade.h:8 msgid "Filename" msgstr "Назва файлу" #: ../sonata/library.py:61 ../sonata/ui/library.glade.h:9 msgid "Everything" msgstr "В усіх" #: ../sonata/library.py:137 msgid "Filesystem" msgstr "Файлова система" #: ../sonata/library.py:139 msgid "Albums" msgstr "Альбоми" #: ../sonata/library.py:141 msgid "Artists" msgstr "Виконавці" #: ../sonata/library.py:143 msgid "Genres" msgstr "Жанри" #: ../sonata/library.py:922 ../sonata/main.py:1561 msgid "{count} song" msgid_plural "{count} songs" msgstr[0] "{count} пісня" msgstr[1] "{count} пісні" msgstr[2] "{count} пісень" #: ../sonata/library.py:924 msgid "{count} second" msgid_plural "{count} seconds" msgstr[0] "{count} секунда" msgstr[1] "{count} секунди" msgstr[2] "{count} секунд" #: ../sonata/library.py:926 ../sonata/main.py:1576 msgid "{count} minute" msgid_plural "{count} minutes" msgstr[0] "{count} хвилина" msgstr[1] "{count} хвилини" msgstr[2] "{count} хвилин" #: ../sonata/library.py:928 ../sonata/main.py:1572 msgid "{count} hour" msgid_plural "{count} hours" msgstr[0] "{count} година" msgstr[1] "{count} години" msgstr[2] "{count} годин" #: ../sonata/library.py:1028 msgid "Song" msgstr "Пісня" #. Constants #: ../sonata/main.py:93 msgid "Current" msgstr "Поточна" #: ../sonata/main.py:94 msgid "Library" msgstr "Фонотека" #: ../sonata/main.py:95 msgid "Playlists" msgstr "Списки програвання" #: ../sonata/main.py:96 msgid "Streams" msgstr "Потоки" #: ../sonata/main.py:97 msgid "Info" msgstr "Інформація" #: ../sonata/main.py:129 ../sonata/preferences.py:195 #: ../sonata/ui/preferences.glade.h:59 msgid "Entire song" msgstr "Протягом композиції" #: ../sonata/main.py:171 msgid "by %A from %B" msgstr "від %A з" #: ../sonata/main.py:227 msgid "_Sort List" msgstr "Сортувати" #: ../sonata/main.py:228 msgid "Sa_ve Selected to" msgstr "Зберегти виділене до" #: ../sonata/main.py:229 msgid "_Connection" msgstr "_З'єднання" #: ../sonata/main.py:230 msgid "P_lay after" msgstr "В_ідтворити після" #: ../sonata/main.py:231 msgid "Play _Mode" msgstr "Режим _Відтворення" #: ../sonata/main.py:232 msgid "_Update" msgstr "_Оновити" #: ../sonata/main.py:233 msgid "Use _Remote Image..." msgstr "Використати зображення з мережі" #: ../sonata/main.py:235 msgid "Use _Local Image..." msgstr "Використати локальне зображення" #: ../sonata/main.py:238 msgid "_Fullscreen Mode" msgstr "_Повноекранний Режим" #: ../sonata/main.py:239 msgid "Reset Image" msgstr "Перезавантажити зображення" #: ../sonata/main.py:241 msgid "_Play" msgstr "_Відтворити" #: ../sonata/main.py:243 msgid "Pa_use" msgstr "_Пауза" #: ../sonata/main.py:245 msgid "_Stop" msgstr "Зупинити" #: ../sonata/main.py:247 msgid "Pre_vious" msgstr "_Попереднє" #: ../sonata/main.py:249 msgid "_Next" msgstr "Наступне" #: ../sonata/main.py:251 msgid "_Quit" msgstr "Вихід" #: ../sonata/main.py:253 msgid "_Remove" msgstr "Видалити" #: ../sonata/main.py:255 msgid "_Clear" msgstr "Видалити усі" #: ../sonata/main.py:257 msgid "_Entire Library" msgstr "_Всю Фонотеку" #: ../sonata/main.py:259 msgid "_Selected Items" msgstr "_Виділені Елементи" #: ../sonata/main.py:261 msgid "_Preferences..." msgstr "Налаштування" #: ../sonata/main.py:263 msgid "_About..." msgstr "Про..." #: ../sonata/main.py:264 msgid "_Edit Tags..." msgstr "Редагувати теги" #: ../sonata/main.py:266 msgid "_Add" msgstr "_Додати" #: ../sonata/main.py:268 msgid "_Replace" msgstr "_Замінити" #: ../sonata/main.py:270 msgid "Add" msgstr "Додати" #: ../sonata/main.py:272 msgid "Replace" msgstr "Замінити" #: ../sonata/main.py:274 msgid "_Delete..." msgstr "Видалити" #: ../sonata/main.py:275 msgid "Shuffle" msgstr "Випадково" #: ../sonata/main.py:315 msgid "S_how Sonata" msgstr "_Показати Sonata" #: ../sonata/main.py:317 msgid "_Repeat" msgstr "Повторювати" #: ../sonata/main.py:319 msgid "Rando_m" msgstr "_Випадково" #: ../sonata/main.py:321 msgid "Consume" msgstr "Вилучати після відтворення" #: ../sonata/main.py:468 msgid "By Artist" msgstr "За Виконавцями" #: ../sonata/main.py:470 msgid "By Album" msgstr "За Альбомом" #: ../sonata/main.py:472 msgid "By Song Title" msgstr "За Назвою" #: ../sonata/main.py:474 msgid "By File Name" msgstr "За ім'ям файлу" #: ../sonata/main.py:476 msgid "By Dir & File Name" msgstr "За каталогом та ім'ям файлу" #: ../sonata/main.py:478 msgid "Reverse List" msgstr "Зворотній порядок" #: ../sonata/main.py:519 msgid "_New..." msgstr "Новий" #: ../sonata/main.py:521 msgid "_Edit..." msgstr "Редагувати" #: ../sonata/main.py:541 msgid "_New Playlist..." msgstr "_Новий Список..." #: ../sonata/main.py:543 msgid "_Rename..." msgstr "Пере_йменувати" #: ../sonata/main.py:586 #, python-format msgid "Enabling new plug-in %s..." msgstr "Увімкнення нового плагіну %s..." #: ../sonata/main.py:589 #, python-format msgid "Found new plug-in %s." msgstr "Знайдений новий плагін %s." #: ../sonata/main.py:634 ../sonata/main.py:1645 ../sonata/main.py:1862 msgid "Click to expand" msgstr "Розгорнути" #: ../sonata/main.py:637 ../sonata/main.py:1643 ../sonata/main.py:1860 msgid "Click to collapse" msgstr "Згорнути" #: ../sonata/main.py:644 ../sonata/main.py:1549 ../sonata/main.py:1650 msgid "Not Connected" msgstr "Немає з'єднання" #: ../sonata/main.py:646 ../sonata/main.py:1547 ../sonata/main.py:1652 msgid "No Read Permission" msgstr "Зчитування не дозволене" #: ../sonata/main.py:856 msgid "MPD_HOST/PORT" msgstr "MPD_ХОСТ/ПОРТ" #: ../sonata/main.py:870 msgid "Disconnect" msgstr "Роз'єднати" #: ../sonata/main.py:1568 msgid "{count} day" msgid_plural "{count} days" msgstr[0] "{count} доба" msgstr[1] "{count} доби" msgstr[2] "{count} днів" #: ../sonata/main.py:1585 msgid "(updating mpd)" msgstr "(оновлюється база MPD)" #: ../sonata/main.py:2248 msgid "Images" msgstr "Зображення" #: ../sonata/main.py:2252 msgid "All files" msgstr "Усі файли" #: ../sonata/main.py:2372 msgid "No artist or album name found." msgstr "Не знайдено ні виконавці ні альбому з таким ім'ям" #: ../sonata/main.py:2375 msgid "No cover art found." msgstr "Обкладинки не знайдено" #: ../sonata/main.py:2609 msgid "Delete the selected playlist?" msgid_plural "Delete the selected playlists?" msgstr[0] "Вилучити обраний список?" msgstr[1] "Вилучити обрані списки?" msgstr[2] "Вилучити обрані списки?" #: ../sonata/main.py:2612 msgid "Delete Playlist" msgid_plural "Delete Playlists" msgstr[0] "Вилучити Список" msgstr[1] "Вилучити Списки" msgstr[2] "Вилучити Списки" #: ../sonata/main.py:2626 msgid "Delete the selected stream?" msgid_plural "Delete the selected streams?" msgstr[0] "Вилучити зазначений список?" msgstr[1] "Вилучити зазначені списки?" msgstr[2] "Вилучити зазначені списки?" #: ../sonata/main.py:2629 msgid "Delete Stream" msgid_plural "Delete Streams" msgstr[0] "Вилучити список" msgstr[1] "Вилучити списки" msgstr[2] "Вилучити списки" #: ../sonata/main.py:2892 msgid "Unable to launch a suitable browser." msgstr "Не вдаєть запустити браузер." #: ../sonata/main.py:2893 msgid "Launch Browser" msgstr "Запустити Браузер" #: ../sonata/playlists.py:114 ../sonata/playlists.py:117 msgid "Save Playlist" msgstr "Зберегти Список" #: ../sonata/playlists.py:139 msgid "Existing Playlist" msgstr "Список Вже Існує" #: ../sonata/playlists.py:140 msgid "Replace playlist" msgstr "Замінити Список" #: ../sonata/playlists.py:141 msgid "Append songs" msgstr "Додати пісні" #: ../sonata/playlists.py:215 ../sonata/playlists.py:218 msgid "Rename Playlist" msgstr "Перейменувати Список" #: ../sonata/plugins/localmpd.py:98 msgid "Processes" msgstr "Процеси" #: ../sonata/plugins/localmpd.py:99 msgid "Files" msgstr "Файли" #: ../sonata/plugins/localmpd.py:108 msgid "Networking" msgstr "Мережа" #: ../sonata/plugins/ui/localmpd.glade.h:1 msgid "Local MPD" msgstr "Локальний MPD" #: ../sonata/plugins/ui/localmpd.glade.h:2 msgid "Edit /etc/mpd.conf" msgstr "Редагувати налаштування в /etc/mpd.conf" #: ../sonata/plugins/ui/localmpd.glade.h:3 msgid "Restart the mpd service" msgstr "Перезавантажити служби MPD" #: ../sonata/preferences.py:152 msgid "Using MPD_HOST/PORT" msgstr "Використовується MPD_HOST/PORT" #: ../sonata/preferences.py:248 ../sonata/ui/preferences.glade.h:22 msgid "SONG_DIR" msgstr "ПАПКА_ПІСЕНЬ" #: ../sonata/preferences.py:250 ../sonata/preferences.py:556 msgid "custom" msgstr "інше" #: ../sonata/preferences.py:371 msgid "Info displayed only if all enclosed tags are defined" msgstr "Виводитиметься у випадку, якщо заповнений тег композиції" #: ../sonata/preferences.py:376 msgid "Creates columns in the current playlist" msgstr "Створити стовпці в поточному списку" #: ../sonata/preferences.py:421 msgid "" "To save lyrics to the music file's directory, you must specify a valid music" " directory." msgstr "Щоб зберігати тексти пісень в каталог з музикою Ви маєте правильно зазначити музичну директорію." #: ../sonata/preferences.py:421 ../sonata/preferences.py:428 msgid "Music Dir Verification" msgstr "Перевірка каталогу з музикою" #: ../sonata/preferences.py:428 msgid "" "To save artwork to the music file's directory, you must specify a valid " "music directory." msgstr "Щоб зберігати обкладинки в каталог з музикою Ви маєте правильно зазначити музичну директорію." #: ../sonata/preferences.py:494 msgid "New Profile" msgstr "Новий Профіль" #: ../sonata/streams.py:105 msgid "Edit Stream" msgstr "Редагування потоку" #: ../sonata/streams.py:107 ../sonata/streams.py:150 msgid "New Stream" msgstr "Новий потік" #: ../sonata/streams.py:149 msgid "A stream with this name already exists. Would you like to replace it?" msgstr "Поток з такою назвою вже існує. Чи бажаєте Ви замінити його?" #: ../sonata/tagedit.py:98 msgid "Taglib and/or tagpy not found, tag editing support disabled." msgstr "Бібліотеки Taglib і/або Tagpy не знайдені. Редагування тегів вимкнено." #: ../sonata/tagedit.py:98 ../sonata/tagedit.py:107 ../sonata/tagedit.py:112 #: ../sonata/tagedit.py:137 ../sonata/tagedit.py:141 ../sonata/tagedit.py:276 msgid "Edit Tags" msgstr "Редагувати тег" #: ../sonata/tagedit.py:107 msgid "" "Tagpy version < 0.91. Please upgrade to a newer version, tag editing support" " disabled." msgstr "Версія бібліотеки Tagpy <0.91. Будь ласка оновіть бібліотеку, правка тегів вимкнена." #: ../sonata/tagedit.py:112 #, python-format msgid "" "The path %s does not exist. Please specify a valid music directory in " "preferences." msgstr "Шлях %s не є дійсним. Будь ласка зазначте правильну музичну директорію в налаштуваннях." #: ../sonata/tagedit.py:137 #, python-format msgid "" "File '%s' not found. Please specify a valid music directory in preferences." msgstr "Файл '%s' не знайдений. Будь ласка зазначте правильну музичну директорію в налаштуваннях." #: ../sonata/tagedit.py:141 msgid "No music files with editable tags found." msgstr "Не знайдено файлів з підтримкою тегів." #: ../sonata/tagedit.py:254 #, python-format msgid "Edit Tags - %s of %s" msgstr "Редагувати теги - %s з %s" #: ../sonata/tagedit.py:275 msgid "Unable to save tag to music file." msgstr "Не вдається записати тег у файл." #: ../sonata/tagedit.py:332 msgid "Hide file path" msgstr "Сховати шлях до файлу" #: ../sonata/tagedit.py:335 msgid "Show file path" msgstr "Показати шлях до файлу" #: ../sonata/ui/about.glade.h:1 msgid "" "Sonata, an elegant GTK+ client for the Music Player Daemon\n" "Copyright 2006-2008 Scott Horowitz <stonecrest@gmail.com>" msgstr "Sonata, елегантний GTK+ клієнт для Music Player Daemon⏎\nCopyright © 2006-2008 Scott Horowitz <stonecrest@gmail.com>" #: ../sonata/ui/about.glade.h:3 msgid "An elegant music client for MPD." msgstr "Чудовий клієнт для MPD." #: ../sonata/ui/about.glade.h:4 msgid "_Shortcuts" msgstr "_Гарячі клавіші" #: ../sonata/ui/about.glade.h:5 msgid "Shortcuts" msgstr "Гарячі клавіші" #: ../sonata/ui/current.glade.h:1 msgid "Filter:" msgstr "Фільтр:" #: ../sonata/ui/info.glade.h:1 ../sonata/ui/tagedit.glade.h:2 msgid "Title:" msgstr "Назва:" #: ../sonata/ui/info.glade.h:2 ../sonata/ui/sonata.glade.h:2 #: ../sonata/ui/tagedit.glade.h:3 msgid "Artist:" msgstr "Виконавець:" #: ../sonata/ui/info.glade.h:3 ../sonata/ui/sonata.glade.h:3 #: ../sonata/ui/tagedit.glade.h:4 msgid "Album:" msgstr "Альбом:" #: ../sonata/ui/info.glade.h:4 msgid "Date:" msgstr "Рік:" #: ../sonata/ui/info.glade.h:5 ../sonata/ui/tagedit.glade.h:8 msgid "Track:" msgstr "№ доріжки:" #: ../sonata/ui/info.glade.h:6 ../sonata/ui/tagedit.glade.h:6 msgid "Genre:" msgstr "Жанр:" #: ../sonata/ui/info.glade.h:7 msgid "File:" msgstr "Файл:" #: ../sonata/ui/info.glade.h:8 msgid "Bitrate:" msgstr "Бітрейт:" #: ../sonata/ui/info.glade.h:9 msgid "Launch artist in Wikipedia" msgstr "Пошук виконавця у Вікіпедії" #: ../sonata/ui/info.glade.h:10 msgid "Launch album in Wikipedia" msgstr "Пошук альбому у Вікіпедії" #: ../sonata/ui/info.glade.h:11 msgid "Toggle extra tags" msgstr "Додаткові теги" #: ../sonata/ui/info.glade.h:12 msgid "Edit song tags" msgstr "Редагування тегів пісні" #: ../sonata/ui/info.glade.h:13 msgid "(edit tags)" msgstr "(редагувати теги)" #: ../sonata/ui/info.glade.h:14 msgid "Song Info" msgstr "Про композицію" #: ../sonata/ui/info.glade.h:15 msgid "Search Lyricwiki.org for lyrics" msgstr "Пошук текстів на Lyricwiki.org" #: ../sonata/ui/info.glade.h:16 msgid "(search)" msgstr "(пошук)" #: ../sonata/ui/info.glade.h:17 msgid "Lyrics" msgstr "Тексти" #: ../sonata/ui/info.glade.h:18 msgid "Album Info" msgstr "Про альбом" #: ../sonata/ui/library.glade.h:1 msgid "Search:" msgstr "Пошук:" #: ../sonata/ui/library.glade.h:3 msgid "Search terms" msgstr "Умови пошуку" #: ../sonata/ui/library.glade.h:10 msgid "End Search" msgstr "Закінчити Пошук" #: ../sonata/ui/playlists.glade.h:1 msgid "Playlist name:" msgstr "Назва списку:" #: ../sonata/ui/preferences.glade.h:1 msgid "Custom Artwork" msgstr "Особлива Обкладинка" #: ../sonata/ui/preferences.glade.h:2 msgid "Artwork filename:" msgstr "Назва файлу обкладинки:" #: ../sonata/ui/preferences.glade.h:3 msgid "_About" msgstr "Про п_рограму" #: ../sonata/ui/preferences.glade.h:4 msgid "_Configure..." msgstr "_Налаштування..." #: ../sonata/ui/preferences.glade.h:6 msgid "_Name:" msgstr "_Ім'я:" #: ../sonata/ui/preferences.glade.h:7 msgid "_Host:" msgstr "_Хост:" #: ../sonata/ui/preferences.glade.h:8 msgid "_Port:" msgstr "_Порт:" #: ../sonata/ui/preferences.glade.h:9 msgid "Leave blank if no password is required." msgstr "Залишіть порожнім, якщо пароль не потрібний" #: ../sonata/ui/preferences.glade.h:10 msgid "Pa_ssword:" msgstr "_Пароль:" #: ../sonata/ui/preferences.glade.h:11 msgid "Select a Music Directory" msgstr "Оберіть Каталог з Музикою" #: ../sonata/ui/preferences.glade.h:12 msgid "_Music dir:" msgstr "_Музична директорія:" #: ../sonata/ui/preferences.glade.h:13 msgid "_Autoconnect on start" msgstr "Підключатися під час з_апуску" #: ../sonata/ui/preferences.glade.h:14 msgid "MPD Connection" msgstr "З'єднання з MPD" #: ../sonata/ui/preferences.glade.h:15 msgid "MPD" msgstr "MPD" #: ../sonata/ui/preferences.glade.h:16 msgid "_Playback/volume buttons" msgstr "Кно_пки відтворення і регулятор гучності" #: ../sonata/ui/preferences.glade.h:17 msgid "Pr_ogressbar" msgstr "Індикат_ор позиції" #: ../sonata/ui/preferences.glade.h:18 msgid "_Statusbar" msgstr "_Статусний рядок" #: ../sonata/ui/preferences.glade.h:19 msgid "System _tray icon" msgstr "Піктограма у _треї" #: ../sonata/ui/preferences.glade.h:20 msgid "Song Ly_rics" msgstr "_Тексти" #: ../sonata/ui/preferences.glade.h:21 msgid "Save lyrics to:" msgstr "Зберігати тексти в:" #: ../sonata/ui/preferences.glade.h:23 msgid "_Album art" msgstr "_Альбом" #: ../sonata/ui/preferences.glade.h:24 msgid "Artwork style:" msgstr "Стиль обкладинки:" #: ../sonata/ui/preferences.glade.h:25 msgid "Standard" msgstr "Звичайна" #: ../sonata/ui/preferences.glade.h:26 msgid "Stylized" msgstr "Стилізована" #: ../sonata/ui/preferences.glade.h:27 msgid "Search locations:" msgstr "Місце пошуку:" #: ../sonata/ui/preferences.glade.h:28 msgid "Local only" msgstr "Лише локально" #: ../sonata/ui/preferences.glade.h:29 msgid "Local and remote" msgstr "Локально і віддалено" #: ../sonata/ui/preferences.glade.h:30 msgid "Save art to:" msgstr "Зберігати обкладинки в:" #: ../sonata/ui/preferences.glade.h:31 msgid "Display" msgstr "Інтерфейс" #: ../sonata/ui/preferences.glade.h:32 msgid "_Show window on all workspaces" msgstr "Відображати на всіх робочих _столах" #: ../sonata/ui/preferences.glade.h:33 msgid "_Keep window above other windows" msgstr "_Поверх інших вікон" #: ../sonata/ui/preferences.glade.h:34 msgid "_Hide window titlebar" msgstr "_Сховати заголовок вікна" #: ../sonata/ui/preferences.glade.h:35 msgid "_Minimize to system tray on close/escape" msgstr "_Згортати в трей при закритті або натисканні escape" #: ../sonata/ui/preferences.glade.h:36 msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray," " so only check this if you have one." msgstr "Якщо вибрано, то при закритті Sonata буде згортатися в трей. Майте на увазі, що на даний момент неможливо визначити, чи є у вас трей, так що відзначайте тільки якщо ви впевнені, що він є." #: ../sonata/ui/preferences.glade.h:37 msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, so " "only check this if you have one." msgstr "Програма не зупиняє свого виконання, а ховається до зони сповіщення. Але це має сенс, якщо є зона сповіщення." #: ../sonata/ui/preferences.glade.h:38 msgid "Window Behavior" msgstr "Розміщення програми" #: ../sonata/ui/preferences.glade.h:39 msgid "_Update MPD library on start" msgstr "О_новлювати фонотеку MPD при запуску" #: ../sonata/ui/preferences.glade.h:40 msgid "" "If enabled, Sonata will automatically update your MPD library when it starts" " up." msgstr "Якщо ввімкнено, Sonata автоматично оновлюватиме фонотеку MPD під час запуску." #: ../sonata/ui/preferences.glade.h:41 msgid "S_top playback on exit" msgstr "Зу_пиняти відтворення при виході" #: ../sonata/ui/preferences.glade.h:42 msgid "" "MPD allows playback even when the client is not open. If enabled, Sonata " "will behave like a more conventional music player and, instead, stop " "playback upon exit." msgstr "MPD дозволяє відтворювати музику, якщо не запущено контролюючої програми. Якщо ввімкнено, то Sonata буде себе поводити як більшість інших програвачів, тобто зупинить відтворення пісні при закритті." #: ../sonata/ui/preferences.glade.h:43 msgid "_Write status file:" msgstr "_Записувати статус у файл:" #: ../sonata/ui/preferences.glade.h:44 msgid "" "If enabled, Sonata will create a xmms-infopipe like file containing " "information about the current song. Many applications support the xmms-info " "file (Instant Messengers, IRC Clients...)" msgstr "Якщо ввімкнено, Sonata створить файл про поточну композицію на кшталт xmms. Це зручно для передачі цих даних іншим програмам (програми обміну миттєвими повідомленнями, клієнти IRC...)." #: ../sonata/ui/preferences.glade.h:45 msgid "Miscellaneous" msgstr "Різне" #: ../sonata/ui/preferences.glade.h:46 msgid "Behavior" msgstr "Поведінка" #: ../sonata/ui/preferences.glade.h:47 msgid "C_urrent playlist:" msgstr "_Поточний список:" #: ../sonata/ui/preferences.glade.h:48 msgid "_Library:" msgstr "_Фонотека:" #: ../sonata/ui/preferences.glade.h:49 msgid "_Window title:" msgstr "Заголо_вок вікна:" #: ../sonata/ui/preferences.glade.h:50 msgid "Current _song line 1:" msgstr "Поточний _запис рядок 1:" #: ../sonata/ui/preferences.glade.h:51 msgid "Current s_ong line 2:" msgstr "Поточний з_апис рядок 2:" #: ../sonata/ui/preferences.glade.h:52 msgid "<small>Available options:</small>" msgstr "<small>Доступні опції:</small>" #: ../sonata/ui/preferences.glade.h:53 msgid "Song Formatting" msgstr "Формат інформації про композицію" #: ../sonata/ui/preferences.glade.h:54 msgid "Format" msgstr "Форматування" #: ../sonata/ui/preferences.glade.h:55 msgid "_Audioscrobbling (Last.fm)" msgstr "_Аудіо скробблінг (за допомогою Last.fm)" #: ../sonata/ui/preferences.glade.h:56 msgid "_Username:" msgstr "_Ідентифікатор:" #: ../sonata/ui/preferences.glade.h:57 msgid "_Password:" msgstr "_Пароль:" #: ../sonata/ui/preferences.glade.h:58 msgid "Popup _notification on song changes" msgstr "Спливаюче повідомлен_ня при зміні пісні" #: ../sonata/ui/preferences.glade.h:60 msgid "System tray" msgstr "Біля зони сповіщення" #: ../sonata/ui/preferences.glade.h:61 msgid "Top Left" msgstr "Вгорі ліворуч" #: ../sonata/ui/preferences.glade.h:62 msgid "Top Right" msgstr "Вгорі праворуч" #: ../sonata/ui/preferences.glade.h:63 msgid "Bottom Left" msgstr "Знизу ліворуч" #: ../sonata/ui/preferences.glade.h:64 msgid "Bottom Right" msgstr "Знизу праворуч" #: ../sonata/ui/preferences.glade.h:65 msgid "Screen Center" msgstr "Центр Екрану" #: ../sonata/ui/preferences.glade.h:66 msgid "C_rossfade" msgstr "Пе_рехресне згасання" #: ../sonata/ui/preferences.glade.h:67 msgid "_Fade length:" msgstr "_Тривалість згасання:" #: ../sonata/ui/preferences.glade.h:68 msgid "sec" msgstr "секунд" #: ../sonata/ui/preferences.glade.h:69 msgid "Extras" msgstr "Додатково" #: ../sonata/ui/preferences.glade.h:70 msgid "Enabled" msgstr "Доступно" #: ../sonata/ui/preferences.glade.h:71 msgid "Description" msgstr "Опис" #: ../sonata/ui/preferences.glade.h:72 msgid "Plugins" msgstr "Плагіни" #: ../sonata/ui/sonata.glade.h:1 msgid "Choose Cover Art" msgstr "Оберіть обкладинку" #: ../sonata/ui/sonata.glade.h:4 msgid "Edit search terms" msgstr "Редагувати рядок пошуку" #: ../sonata/ui/sonata.glade.h:5 msgid "Cover Art" msgstr "Обкладинка" #: ../sonata/ui/sonata.glade.h:6 msgid "Open Image" msgstr "Завантажити зображення" #: ../sonata/ui/sonata.glade.h:7 msgid "Lyrics Search" msgstr "Пошук Текстів" #: ../sonata/ui/sonata.glade.h:8 msgid "Artist Name:" msgstr "Виконавець:" #: ../sonata/ui/sonata.glade.h:9 msgid "Song Title:" msgstr "Назва пісні:" #: ../sonata/ui/sonata.glade.h:10 msgid "Playlist" msgstr "Список відтворення" #: ../sonata/ui/streams.glade.h:1 msgid "Stream name:" msgstr "Назва потоку:" #: ../sonata/ui/streams.glade.h:2 msgid "Stream URL:" msgstr "URL потоку:" #: ../sonata/ui/tagedit.glade.h:1 msgid "Save _All" msgstr "Зберегти _Все" #: ../sonata/ui/tagedit.glade.h:5 msgid "Year:" msgstr "Рік:" #: ../sonata/ui/tagedit.glade.h:7 msgid "Comment:" msgstr "Коментарі:" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/po/zh_CN.po����������������������������������������������������������������������������0000664�0000000�0000000�00000115127�13771420143�0014774�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Simplified Chinese translation for Sonata. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the Sonata package. # Desmond O. Chang <dochang@gmail.com>, 2007-2008. # msgid "" msgstr "" "Project-Id-Version: Sonata 1.6\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-03-22 22:01-0600\n" "PO-Revision-Date: 2009-03-25 06:25+0800\n" "Last-Translator: Desmond O. Chang <dochang@gmail.com>\n" "Language-Team: Simplified Chinese\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" #. define the shortcuts and their descriptions #. these are all gettextable #: .././sonata/about.py:52 msgid "About Sonata" msgstr "关于 Sonata" #: .././sonata/about.py:53 .././sonata/preferences.py:60 msgid "Preferences" msgstr "偏好" #: .././sonata/about.py:54 msgid "Fullscreen Artwork Mode" msgstr "全屏封面模式" #: .././sonata/about.py:55 msgid "Switch to [1st-5th] tab" msgstr "切换到第 1-5 个标签页" #: .././sonata/about.py:56 msgid "Connect to MPD" msgstr "连接到 MPD" #: .././sonata/about.py:57 msgid "Disconnect from MPD" msgstr "断开与 MPD 的连接" #: .././sonata/about.py:58 msgid "Randomize current playlist" msgstr "随机排列当前播放列表" #: .././sonata/about.py:59 msgid "Expand player" msgstr "展开播放器" #: .././sonata/about.py:60 msgid "Switch to previous tab" msgstr "切换到上一个标签页" #: .././sonata/about.py:61 msgid "Switch to next tab" msgstr "切换到下一个标签页" #: .././sonata/about.py:62 msgid "Collapse player" msgstr "折叠播放器" #: .././sonata/about.py:63 .././sonata/library.py:86 msgid "Search library" msgstr "搜索数据库" #: .././sonata/about.py:64 msgid "Quit" msgstr "退出" #: .././sonata/about.py:65 msgid "Update entire library" msgstr "更新整个数据库" #: .././sonata/about.py:66 msgid "Display popup menu" msgstr "显示弹出菜单" #: .././sonata/about.py:67 msgid "Minimize to system tray (if enabled)" msgstr "最小化到系统托盘(如果可以)" #: .././sonata/about.py:69 msgid "Previous track" msgstr "上一条音轨" #: .././sonata/about.py:70 msgid "Next track" msgstr "下一条音轨" #: .././sonata/about.py:71 msgid "Play/Pause" msgstr "播放/暂停" #: .././sonata/about.py:72 msgid "Stop" msgstr "停止" #: .././sonata/about.py:73 msgid "Lower the volume" msgstr "降低音量" #: .././sonata/about.py:74 msgid "Raise the volume" msgstr "提高音量" #: .././sonata/about.py:76 msgid "Play selected song" msgstr "播放选择的曲目" #: .././sonata/about.py:77 msgid "Remove selected song(s)" msgstr "删除选择的曲目" #: .././sonata/about.py:78 msgid "Center currently playing song" msgstr "居中显示当前播放的曲目" #: .././sonata/about.py:79 .././sonata/about.py:88 msgid "Edit selected song's tags" msgstr "编辑已选择曲目的标签" #: .././sonata/about.py:80 msgid "Save to new playlist" msgstr "保存到新的播放列表" #: .././sonata/about.py:81 msgid "Clear list" msgstr "清除列表" #: .././sonata/about.py:82 msgid "Randomize list" msgstr "随机排列列表" #: .././sonata/about.py:84 msgid "Add selected song(s) or enter directory" msgstr "添加选择的曲目或进入目录" #: .././sonata/about.py:85 msgid "Go to parent directory" msgstr "转到上一级目录" #: .././sonata/about.py:86 msgid "Add selected item(s)" msgstr "添加选择的项" #: .././sonata/about.py:87 msgid "Replace with selected item(s)" msgstr "替换为选择的项" #: .././sonata/about.py:89 msgid "Add selected item(s) and play" msgstr "添加选择的项并播放" #: .././sonata/about.py:90 msgid "Replace with selected item(s) and play" msgstr "替换为选择的项并播放" #: .././sonata/about.py:91 msgid "Update selected item(s)/path(s)" msgstr "更新选择的项目/路径" #: .././sonata/about.py:93 .././sonata/about.py:95 msgid "Add selected playlist(s)" msgstr "添加选择的播放列表" #: .././sonata/about.py:94 msgid "Remove selected playlist(s)" msgstr "删除选择的播放列表" #: .././sonata/about.py:96 msgid "Replace with selected playlist(s)" msgstr "替换为选择的播放列表" #: .././sonata/about.py:97 msgid "Add selected playlist(s) and play" msgstr "添加选择的播放列表并播放" #: .././sonata/about.py:98 msgid "Replace with selected playlist(s) and play" msgstr "替换为选择的播放列表并播放" #: .././sonata/about.py:100 .././sonata/about.py:102 msgid "Add selected stream(s)" msgstr "添加选择的流" #: .././sonata/about.py:101 msgid "Remove selected stream(s)" msgstr "删除选择的流" #: .././sonata/about.py:103 msgid "Replace with selected stream(s)" msgstr "替换为选择的流" #: .././sonata/about.py:104 msgid "Add selected stream(s) and play" msgstr "添加选择的流并播放" #: .././sonata/about.py:105 msgid "Replace with selected stream(s) and play" msgstr "替换为选择的流并播放" #: .././sonata/about.py:107 msgid "Edit playing song's tags" msgstr "编辑当前曲目的标签" #. define the main array- this adds headings to each section of #. shortcuts that will be displayed #: .././sonata/about.py:110 msgid "Main Shortcuts" msgstr "全局快捷键" #: .././sonata/about.py:111 msgid "Playback Shortcuts" msgstr "播放快捷键" #: .././sonata/about.py:112 msgid "Current Shortcuts" msgstr "当前曲目快捷键" #: .././sonata/about.py:113 msgid "Library Shortcuts" msgstr "数据库快捷键" #: .././sonata/about.py:114 msgid "Playlist Shortcuts" msgstr "播放列表快捷键" #: .././sonata/about.py:115 msgid "Stream Shortcuts" msgstr "流媒体快捷键" #: .././sonata/about.py:116 msgid "Info Shortcuts" msgstr "曲目信息快捷键" #: .././sonata/about.py:117 msgid "Shortcuts" msgstr "快捷键" #: .././sonata/about.py:153 msgid "An elegant music client for MPD." msgstr "一个精美的 MPD 客户端" #. Add button to show keybindings: #: .././sonata/about.py:166 msgid "_Shortcuts" msgstr "快捷键(_S)" #: .././sonata/about.py:177 .././sonata/main.py:3088 #: .././sonata/preferences.py:738 msgid "Unable to launch a suitable browser." msgstr "无法启动合适的浏览器。" #: .././sonata/about.py:177 .././sonata/main.py:3088 #: .././sonata/preferences.py:738 msgid "Launch Browser" msgstr "启动浏览器" #: .././sonata/cli.py:81 msgid "The toggle and popup arguments require D-Bus. Aborting." msgstr "参数 toggle 和 popup 需要 D-Bus。放弃中。" #: .././sonata/cli.py:97 msgid "Version" msgstr "版本" #: .././sonata/cli.py:98 msgid "Website" msgstr "网站" #: .././sonata/cli.py:103 msgid "Usage: sonata [OPTION]... [COMMAND]..." msgstr "用法: sonata [选项]... [命令]..." #: .././sonata/cli.py:105 msgid "Options" msgstr "选项" #: .././sonata/cli.py:106 msgid "Show this help and exit" msgstr "显示帮助信息并退出" #: .././sonata/cli.py:107 msgid "Popup song notification (requires D-Bus)" msgstr "弹出曲目提示(需要 D-Bus)" #: .././sonata/cli.py:108 msgid "Toggles whether the app is minimized" msgstr "切换是否将应用程序最小化" #: .././sonata/cli.py:109 msgid "to tray or visible (requires D-Bus)" msgstr "到托盘或可见(需要 D-Bus)" #: .././sonata/cli.py:110 msgid "Don't start app if D-Bus commands fail" msgstr "如果 D-Bus 命令失败,不启动应用程序" #: .././sonata/cli.py:111 msgid "Show version information and exit" msgstr "显示版本信息并退出" #: .././sonata/cli.py:112 msgid "Start app hidden (requires systray)" msgstr "启动应用程序时隐藏(需要系统托盘)" #: .././sonata/cli.py:113 msgid "Start app visible (requires systray)" msgstr "启动应用程序时可见(需要系统托盘)" #: .././sonata/cli.py:114 msgid "Start with profile [NUM]" msgstr "以档案 NUM 启动" #: .././sonata/cli.py:116 msgid "Commands" msgstr "命令" #: .././sonata/cli.py:117 msgid "Play song in playlist" msgstr "播放列表中的曲目" #: .././sonata/cli.py:118 msgid "Pause currently playing song" msgstr "暂停当前播放的曲目" #: .././sonata/cli.py:119 msgid "Stop currently playing song" msgstr "停止当前播放的曲目" #: .././sonata/cli.py:120 msgid "Play next song in playlist" msgstr "播放队列中的下一曲目" #: .././sonata/cli.py:121 msgid "Play previous song in playlist" msgstr "播放队列中的上一曲目" #: .././sonata/cli.py:122 msgid "Toggle play/pause; plays if stopped" msgstr "切换播放/暂停;如果已停止就播放" #: .././sonata/cli.py:123 msgid "Toggle repeat mode" msgstr "切换重复模式" #: .././sonata/cli.py:124 msgid "Toggle random mode" msgstr "切换随机模式" #: .././sonata/cli.py:125 msgid "Display current song info" msgstr "显示当前曲目信息" #: .././sonata/cli.py:126 msgid "Display MPD status" msgstr "显示 MPD 状态" #: .././sonata/cli.py:134 #, python-format msgid "Starting Sonata with profile %s..." msgstr "启动 Sonata 以档案 %s..." #: .././sonata/cli.py:136 #, python-format msgid "%d is not an available profile number." msgstr "%d 不是合法的档案编号。" #: .././sonata/cli.py:137 .././sonata/cli.py:141 #, python-format msgid "Profile numbers must be between 1 and %d." msgstr "档案编号必须介于 1 和 %d 之间。" #: .././sonata/cli.py:140 #, python-format msgid "Python is unable to interpret %s as a number." msgstr "Python 不能将 %s 解释为数字。" #: .././sonata/cli.py:154 .././sonata/main.py:179 msgid "Default Profile" msgstr "默认档案" #: .././sonata/cli.py:154 .././sonata/main.py:179 msgid "by" msgstr "by" #: .././sonata/cli.py:154 .././sonata/main.py:179 msgid "from" msgstr "from" #: .././sonata/cli.py:176 msgid "" "Unable to connect to MPD.\n" "Please check your Sonata preferences or MPD_HOST/MPD_PORT environment " "variables." msgstr "" "不能连接到 MPD。\n" "请检查你的偏好设置或环境变量 MPD_HOST/MPD_PORT 。" #: .././sonata/cli.py:208 .././sonata/info.py:91 .././sonata/info.py:245 #: .././sonata/library.py:49 .././sonata/tagedit.py:125 msgid "Title" msgstr "标题" #: .././sonata/cli.py:209 .././sonata/info.py:91 .././sonata/info.py:246 #: .././sonata/library.py:49 .././sonata/main.py:1184 #: .././sonata/tagedit.py:126 msgid "Artist" msgstr "艺术家" #: .././sonata/cli.py:210 .././sonata/info.py:91 .././sonata/info.py:247 #: .././sonata/library.py:49 .././sonata/main.py:1185 .././sonata/main.py:2439 #: .././sonata/tagedit.py:127 msgid "Album" msgstr "专辑" #: .././sonata/cli.py:211 .././sonata/info.py:91 .././sonata/info.py:248 msgid "Date" msgstr "日期" #: .././sonata/cli.py:212 .././sonata/info.py:91 .././sonata/info.py:250 #: .././sonata/main.py:1186 .././sonata/tagedit.py:130 msgid "Track" msgstr "音轨" #: .././sonata/cli.py:213 .././sonata/info.py:91 .././sonata/info.py:249 #: .././sonata/library.py:49 .././sonata/main.py:1189 #: .././sonata/preferences.py:432 .././sonata/tagedit.py:139 msgid "Genre" msgstr "风格" #: .././sonata/cli.py:214 .././sonata/info.py:91 .././sonata/info.py:251 #: .././sonata/main.py:1191 msgid "File" msgstr "文件" #: .././sonata/cli.py:219 .././sonata/cli.py:221 msgid "Time" msgstr "时间" #: .././sonata/cli.py:222 .././sonata/info.py:91 .././sonata/info.py:244 msgid "Bitrate" msgstr "比特率" #: .././sonata/cli.py:224 msgid "MPD stopped" msgstr "MPD 已停止" #: .././sonata/cli.py:228 .././sonata/cli.py:230 .././sonata/cli.py:232 msgid "State" msgstr "状态" #: .././sonata/cli.py:228 msgid "Playing" msgstr "播放中" #: .././sonata/cli.py:230 msgid "Paused" msgstr "已暂停" #: .././sonata/cli.py:232 .././sonata/main.py:559 .././sonata/main.py:564 #: .././sonata/main.py:1836 .././sonata/main.py:1847 msgid "Stopped" msgstr "已停止" #: .././sonata/cli.py:234 .././sonata/cli.py:236 msgid "Repeat" msgstr "重复" #: .././sonata/cli.py:234 .././sonata/cli.py:238 msgid "Off" msgstr "关" #: .././sonata/cli.py:236 .././sonata/cli.py:240 msgid "On" msgstr "开" #: .././sonata/cli.py:238 .././sonata/cli.py:240 msgid "Random" msgstr "随机" #: .././sonata/cli.py:241 msgid "Volume" msgstr "音量" #: .././sonata/cli.py:242 msgid "Crossfade" msgstr "淡入淡出" #: .././sonata/cli.py:242 .././sonata/preferences.py:192 msgid "second" msgid_plural "seconds" msgstr[0] "秒" #: .././sonata/current.py:64 msgid "Filter" msgstr "过滤" #: .././sonata/dbus_plugin.py:83 msgid "" "Sonata failed to connect to the D-BUS session bus: Unable to determine the " "address of the message bus (try 'man dbus-launch' and 'man dbus-daemon' for " "help)" msgstr "" "Sonata 连接到 D-BUS session bus 失败:无法决定 message bus 的地址(尝试 'man " "dbus-launch' 和 'man dbus-daemon' 来获取帮助)" #: .././sonata/dbus_plugin.py:96 msgid "Failed to execute remote commands." msgstr "执行远程命令失败。" #: .././sonata/dbus_plugin.py:98 msgid "Starting Sonata instead..." msgstr "正在启动 Sonata ……" #: .././sonata/dbus_plugin.py:100 msgid "Maybe Sonata is not running?" msgstr "也许 Sonata 没有运行?" #: .././sonata/dbus_plugin.py:114 msgid "An instance of Sonata is already running. Showing it..." msgstr "Sonata 已经在运行中。正在显示……" #: .././sonata/dbus_plugin.py:120 msgid "Failed to execute remote command." msgstr "执行远程命令失败。" #. Song info #: .././sonata/info.py:78 msgid "Song Info" msgstr "曲目信息" #: .././sonata/info.py:93 msgid "Launch artist in Wikipedia" msgstr "显示维基百科上该艺术家的资料" #: .././sonata/info.py:93 msgid "Launch album in Wikipedia" msgstr "显示维基百科上该专辑的资料" #: .././sonata/info.py:127 msgid "Toggle extra tags" msgstr "切换显示余下的标签" #: .././sonata/info.py:130 msgid "Edit song tags" msgstr "编辑曲目标签" #. Lyrics #: .././sonata/info.py:140 msgid "Lyrics" msgstr "歌词" #: .././sonata/info.py:152 msgid "Search Lyricwiki.org for lyrics" msgstr "在 Lyricwiki.org 上搜索歌词" #: .././sonata/info.py:153 msgid "Edit lyrics at Lyricwiki.org" msgstr "在 Lyricwiki.org 上编辑歌词" #. Album info #: .././sonata/info.py:161 msgid "Album Info" msgstr "专辑信息" #: .././sonata/info.py:213 .././sonata/info.py:218 msgid "more" msgstr "更多" #: .././sonata/info.py:215 msgid "hide" msgstr "隐藏" #: .././sonata/info.py:281 msgid "edit tags" msgstr "编辑标签" #: .././sonata/info.py:308 msgid "Album info not found." msgstr "未发现专辑信息。" #: .././sonata/info.py:311 msgid "Album name not set." msgstr "专辑名未设置。" #: .././sonata/info.py:324 msgid "ZSI not found, fetching lyrics support disabled." msgstr "ZSI 未找到,不能获取歌词。" #: .././sonata/info.py:329 msgid "Artist or song title not set." msgstr "艺术家或曲目标题未设置。" #: .././sonata/info.py:371 msgid "search" msgstr "搜索" #: .././sonata/info.py:372 msgid "edit" msgstr "编辑" #: .././sonata/info.py:381 .././sonata/info.py:436 msgid "Lyrics not found" msgstr "未发现歌词" #. Fetch lyrics from lyricwiki.org #: .././sonata/info.py:401 msgid "Fetching lyrics..." msgstr "歌词获取中..." #: .././sonata/info.py:411 msgid "Couldn't connect to LyricWiki" msgstr "无法连接到 LyricWiki" #: .././sonata/info.py:439 msgid "Fetching lyrics failed" msgstr "获取歌词失败" #: .././sonata/library.py:47 msgid "Untagged" msgstr "无标签" #: .././sonata/library.py:48 msgid "Various Artists" msgstr "多位艺术家" #: .././sonata/library.py:49 msgid "Filename" msgstr "文件名" #: .././sonata/library.py:49 msgid "Everything" msgstr "所有" #: .././sonata/library.py:52 msgid "Filesystem" msgstr "文件系统" #: .././sonata/library.py:53 msgid "Artists" msgstr "艺术家" #: .././sonata/library.py:54 msgid "Albums" msgstr "专辑" #: .././sonata/library.py:55 msgid "Genres" msgstr "风格" #: .././sonata/library.py:84 msgid "Search terms" msgstr "搜索条件" #: .././sonata/library.py:90 msgid "End Search" msgstr "结束搜索" #: .././sonata/library.py:92 msgid "Library browsing view" msgstr "数据库浏览方式" #: .././sonata/library.py:96 msgid "Search" msgstr "搜索" #. Show text: #: .././sonata/library.py:761 .././sonata/main.py:1763 #: .././sonata/main.py:3331 msgid "song" msgid_plural "songs" msgstr[0] "首曲目" #: .././sonata/library.py:761 .././sonata/main.py:1757 msgid "minute" msgid_plural "minutes" msgstr[0] "分钟" #: .././sonata/library.py:849 msgid "Song" msgstr "曲目" #: .././sonata/library.py:849 .././sonata/main.py:1190 msgid "Path" msgstr "路径" #. Constants #: .././sonata/main.py:102 msgid "Current" msgstr "当前曲目" #: .././sonata/main.py:103 msgid "Library" msgstr "数据库" #: .././sonata/main.py:104 msgid "Playlists" msgstr "播放列表" #: .././sonata/main.py:105 msgid "Streams" msgstr "流媒体" #: .././sonata/main.py:106 msgid "Info" msgstr "曲目信息" #: .././sonata/main.py:137 .././sonata/preferences.py:193 #: .././sonata/preferences.py:194 msgid "Entire song" msgstr "整首曲目" #: .././sonata/main.py:234 msgid "_Sort List" msgstr "排序列表(_S)" #: .././sonata/main.py:235 msgid "Sa_ve List to" msgstr "保存列表到(_v)" #: .././sonata/main.py:236 msgid "_Connection" msgstr "连接(_C)" #: .././sonata/main.py:237 msgid "P_lay after" msgstr "在动作执行后播放(_l)" #: .././sonata/main.py:238 .././sonata/main.py:2454 msgid "_Update" msgstr "更新(_U)" #: .././sonata/main.py:239 msgid "Use _Remote Image..." msgstr "使用远程图像(_R)..." #: .././sonata/main.py:240 msgid "Use _Local Image..." msgstr "使用本地图像(_L)..." #: .././sonata/main.py:241 msgid "_Fullscreen Mode" msgstr "全屏模式(_F)" #: .././sonata/main.py:242 msgid "Reset Image" msgstr "重置图像" #: .././sonata/main.py:243 msgid "_Play" msgstr "播放(_P)" #: .././sonata/main.py:244 msgid "Pa_use" msgstr "暂停(_u)" #: .././sonata/main.py:245 msgid "_Stop" msgstr "停止(_S)" #: .././sonata/main.py:246 msgid "Pre_vious" msgstr "上一首(_v)" #: .././sonata/main.py:247 msgid "_Next" msgstr "下一首(_N)" #: .././sonata/main.py:248 msgid "_Quit" msgstr "退出(_Q)" #: .././sonata/main.py:249 msgid "_Remove" msgstr "删除(_R)" #: .././sonata/main.py:250 msgid "_Clear" msgstr "清除(_C)" #: .././sonata/main.py:251 msgid "_Entire Library" msgstr "更新数据库全部(_E)" #: .././sonata/main.py:252 msgid "_Selected Items" msgstr "更新选择的项(_S)" #: .././sonata/main.py:253 msgid "_Preferences..." msgstr "偏好(_P)..." #: .././sonata/main.py:254 msgid "_About..." msgstr "关于(_A)..." #: .././sonata/main.py:255 msgid "_Edit Tags..." msgstr "编辑标签(_E)..." #: .././sonata/main.py:256 msgid "_Add" msgstr "添加(_A)" #: .././sonata/main.py:257 msgid "_Replace" msgstr "替换(_R)" #: .././sonata/main.py:258 msgid "Add" msgstr "添加" #: .././sonata/main.py:259 msgid "Replace" msgstr "替换" #: .././sonata/main.py:260 msgid "_Delete..." msgstr "删除(_D)..." #: .././sonata/main.py:261 msgid "Shuffle" msgstr "乱序" #: .././sonata/main.py:286 msgid "S_how Sonata" msgstr "显示(_h) Sonata" #: .././sonata/main.py:287 msgid "_Repeat" msgstr "重复(_R)" #: .././sonata/main.py:288 msgid "Rando_m" msgstr "随机(_m)" #: .././sonata/main.py:428 msgid "By Artist" msgstr "按 艺术家" #: .././sonata/main.py:429 msgid "By Album" msgstr "按 专辑" #: .././sonata/main.py:430 msgid "By Song Title" msgstr "按 曲目标题" #: .././sonata/main.py:431 msgid "By File Name" msgstr "按 文件名" #: .././sonata/main.py:432 msgid "By Dir & File Name" msgstr "按 目录及文件名" #: .././sonata/main.py:433 msgid "Reverse List" msgstr "反转列表" #: .././sonata/main.py:456 .././sonata/main.py:467 msgid "_New..." msgstr "新建(_N)..." #: .././sonata/main.py:457 msgid "_Edit..." msgstr "编辑(_E)..." #: .././sonata/main.py:468 msgid "_Rename..." msgstr "重命名(_R)..." #: .././sonata/main.py:530 .././sonata/main.py:597 .././sonata/main.py:598 msgid "Playlist" msgstr "播放列表" #: .././sonata/main.py:560 .././sonata/main.py:1840 .././sonata/main.py:2049 msgid "Click to expand" msgstr "点击展开" #: .././sonata/main.py:565 .././sonata/main.py:1838 .././sonata/main.py:2047 msgid "Click to collapse" msgstr "点击折叠" #: .././sonata/main.py:570 .././sonata/main.py:1732 .././sonata/main.py:1843 msgid "Not Connected" msgstr "未连接" #: .././sonata/main.py:572 .././sonata/main.py:1730 .././sonata/main.py:1845 msgid "No Read Permission" msgstr "没有读取权限" #: .././sonata/main.py:645 msgid "Cover Art" msgstr "封面" #: .././sonata/main.py:850 .././sonata/main.py:863 .././sonata/main.py:884 msgid "Profile" msgstr "档案" #: .././sonata/main.py:863 .././sonata/main.py:864 .././sonata/main.py:884 msgid "MPD_HOST/PORT" msgstr "MPD_HOST/PORT" #: .././sonata/main.py:865 .././sonata/main.py:871 msgid "Disconnect" msgstr "断开连接" #: .././sonata/main.py:1187 .././sonata/main.py:1194 msgid "#" msgstr "#" #: .././sonata/main.py:1188 .././sonata/preferences.py:431 #: .././sonata/tagedit.py:128 msgid "Year" msgstr "年份" #: .././sonata/main.py:1192 msgid "Stream" msgstr "流媒体" #: .././sonata/main.py:1193 msgid "Len" msgstr "长度" #: .././sonata/main.py:1214 .././sonata/main.py:1221 .././sonata/main.py:1262 #: .././sonata/main.py:1269 msgid "Unknown" msgstr "未知" #: .././sonata/main.py:1753 msgid "day" msgid_plural "days" msgstr[0] "天" #: .././sonata/main.py:1761 msgid "hour" msgid_plural "hours" msgstr[0] "小时" #: .././sonata/main.py:1766 .././sonata/main.py:1768 msgid "and" msgstr "" #: .././sonata/main.py:1776 msgid "(updating mpd)" msgstr "(正在更新 mpd)" #: .././sonata/main.py:2116 msgid "Lyrics Search" msgstr "歌词搜索" #: .././sonata/main.py:2117 msgid "_Search" msgstr "搜索(_S)" #: .././sonata/main.py:2120 msgid "Artist Name" msgstr "艺术家" #: .././sonata/main.py:2125 msgid "Song Title" msgstr "曲目标题" #: .././sonata/main.py:2377 msgid "Open Image" msgstr "打开图像" #: .././sonata/main.py:2379 msgid "Images" msgstr "图像" #: .././sonata/main.py:2383 msgid "All files" msgstr "所有文件" #: .././sonata/main.py:2425 msgid "Choose Cover Art" msgstr "选择封面" #: .././sonata/main.py:2426 msgid "C_hoose" msgstr "选择(_h)" #: .././sonata/main.py:2459 msgid "Edit search terms" msgstr "编辑搜索条目" #: .././sonata/main.py:2516 msgid "No artist or album name found." msgstr "未发现艺术家或专辑名。" #: .././sonata/main.py:2519 msgid "No cover art found." msgstr "未发现封面。" #: .././sonata/main.py:2843 msgid "Delete the selected playlist?" msgid_plural "Delete the selected playlists?" msgstr[0] "删除已选择的播放列表?" #: .././sonata/main.py:2843 msgid "Delete Playlist" msgid_plural "Delete Playlists" msgstr[0] "删除播放列表" #: .././sonata/main.py:2851 msgid "Delete the selected stream?" msgid_plural "Delete the selected streams?" msgstr[0] "删除已选择的流媒体?" #: .././sonata/main.py:2851 msgid "Delete Stream" msgid_plural "Delete Streams" msgstr[0] "删除流媒体" #: .././sonata/main.py:2909 msgid "" "To save lyrics to the music file's directory, you must specify a valid music " "directory." msgstr "要将歌词保存到音乐文件的目录中,你必须指定一个有效的音乐目录。" #: .././sonata/main.py:2909 .././sonata/main.py:2916 msgid "Music Dir Verification" msgstr "音乐目录确认" #: .././sonata/main.py:2916 msgid "" "To save artwork to the music file's directory, you must specify a valid " "music directory." msgstr "要将封面保存到音乐文件的目录中,你必须指定一个有效的音乐目录。" #: .././sonata/main.py:3332 msgid "album" msgid_plural "albums" msgstr[0] "张专辑" #: .././sonata/main.py:3333 msgid "artist" msgid_plural "artists" msgstr[0] "位艺术家" #: .././sonata/main.py:3340 msgid "day of bliss" msgid_plural "days of bliss" msgstr[0] "天的幸福" #: .././sonata/main.py:3342 msgid "hour of bliss" msgid_plural "hours of bliss" msgstr[0] "个小时的幸福" #: .././sonata/playlists.py:103 .././sonata/playlists.py:105 msgid "Save Playlist" msgstr "保存播放列表" #: .././sonata/playlists.py:120 msgid "Would you like to replace the existing playlist or append these songs?" msgstr "你想替换掉现有的播放列表,还是添加这些曲目?" #: .././sonata/playlists.py:120 msgid "Existing Playlist" msgstr "现有播放列表" #: .././sonata/playlists.py:120 msgid "Replace playlist" msgstr "替换播放列表" #: .././sonata/playlists.py:120 msgid "Append songs" msgstr "添加曲目" #: .././sonata/playlists.py:141 msgid "A playlist with this name already exists. Would you like to replace it?" msgstr "播放列表的名字已经存在。是否替换?" #: .././sonata/playlists.py:153 msgid "Playlist name" msgstr "播放列表名字" #: .././sonata/playlists.py:182 .././sonata/playlists.py:186 msgid "Rename Playlist" msgstr "重命名播放列表" #. Constants: #: .././sonata/preferences.py:35 msgid "System tray" msgstr "系统托盘" #: .././sonata/preferences.py:35 msgid "Top Left" msgstr "左上角" #: .././sonata/preferences.py:35 msgid "Top Right" msgstr "右上角" #: .././sonata/preferences.py:35 msgid "Bottom Left" msgstr "左下角" #: .././sonata/preferences.py:35 msgid "Bottom Right" msgstr "右下角" #: .././sonata/preferences.py:35 msgid "Screen Center" msgstr "屏幕中央" #. MPD tab #: .././sonata/preferences.py:64 msgid "MPD Connection" msgstr "MPD 连接" #: .././sonata/preferences.py:76 msgid "_Name" msgstr "名字(_N)" #: .././sonata/preferences.py:79 msgid "_Host" msgstr "主机(_H)" #: .././sonata/preferences.py:82 msgid "_Port" msgstr "端口(_P)" #: .././sonata/preferences.py:86 msgid "_Music dir" msgstr "音乐目录(_M)" #: .././sonata/preferences.py:87 msgid "Select a Music Directory" msgstr "选择音乐目录" #: .././sonata/preferences.py:91 msgid "Pa_ssword" msgstr "口令(_s)" #: .././sonata/preferences.py:94 msgid "Leave blank if no password is required." msgstr "如果不需要口令则留空。" #: .././sonata/preferences.py:95 msgid "_Autoconnect on start" msgstr "启动时自动连接(_A)" #: .././sonata/preferences.py:113 msgid "Using MPD_HOST/PORT" msgstr "使用 MPD_HOST/PORT" #: .././sonata/preferences.py:163 .././sonata/preferences.py:536 msgid "Extras" msgstr "其它" #: .././sonata/preferences.py:168 msgid "_Audioscrobbling (Last.fm)" msgstr "_Audioscrobbling (Last.fm)" #: .././sonata/preferences.py:170 msgid "_Username:" msgstr "用户名(_U):" #: .././sonata/preferences.py:171 msgid "_Password:" msgstr "口令(_P):" #: .././sonata/preferences.py:188 msgid "Popup _notification on song changes" msgstr "当曲目改变时弹出提示(_n)" #: .././sonata/preferences.py:210 msgid "Fade length" msgstr "淡入淡出长度" #: .././sonata/preferences.py:211 msgid "_Fade length" msgstr "淡入淡出长度(_F)" #: .././sonata/preferences.py:213 msgid "sec" msgstr "秒" #: .././sonata/preferences.py:218 msgid "C_rossfade" msgstr "淡入淡出(_r)" #. Display tab #: .././sonata/preferences.py:246 .././sonata/preferences.py:533 msgid "Display" msgstr "显示" #: .././sonata/preferences.py:251 msgid "_Album art" msgstr "专辑封面(_A)" #: .././sonata/preferences.py:253 msgid "Standard" msgstr "标准" #: .././sonata/preferences.py:253 msgid "Stylized" msgstr "风格化" #: .././sonata/preferences.py:256 msgid "Artwork style:" msgstr "封面样式:" #: .././sonata/preferences.py:258 msgid "Local only" msgstr "仅限本地" #: .././sonata/preferences.py:258 msgid "Local and remote" msgstr "本地与远程" #: .././sonata/preferences.py:260 msgid "Search locations:" msgstr "搜索位置:" #: .././sonata/preferences.py:267 .././sonata/preferences.py:289 msgid "SONG_DIR" msgstr "曲目目录" #: .././sonata/preferences.py:269 msgid "custom" msgstr "自定义" #: .././sonata/preferences.py:274 msgid "Save art to:" msgstr "保存封面到:" #: .././sonata/preferences.py:277 msgid "_Playback/volume buttons" msgstr "播放/音量按钮(_P)" #: .././sonata/preferences.py:280 msgid "Pr_ogressbar" msgstr "进度条(_o)" #: .././sonata/preferences.py:283 msgid "_Statusbar" msgstr "状态栏(_S)" #: .././sonata/preferences.py:286 msgid "Song Ly_rics" msgstr "歌词(_r)" #: .././sonata/preferences.py:288 msgid "Save lyrics to:" msgstr "保存歌词到:" #: .././sonata/preferences.py:297 msgid "System _tray icon" msgstr "系统托盘(_t)" #. Behavior tab #: .././sonata/preferences.py:319 msgid "Window Behavior" msgstr "窗口行为" #: .././sonata/preferences.py:323 msgid "_Show window on all workspaces" msgstr "在所有工作区显示窗口(_S)" #: .././sonata/preferences.py:326 msgid "_Keep window above other windows" msgstr "将窗口置于其它窗口上方(_K)" #: .././sonata/preferences.py:329 msgid "_Hide window titlebar" msgstr "隐藏窗口标题栏(_H)" #: .././sonata/preferences.py:334 msgid "_Minimize to system tray on close/escape" msgstr "关闭时最小化到系统托盘(_M)" #: .././sonata/preferences.py:336 msgid "" "If enabled, closing Sonata will minimize it to the system tray. Note that " "it's currently impossible to detect if there actually is a system tray, so " "only check this if you have one." msgstr "" "如果启用,Sonata 关闭时将会最小化到系统托盘上。注意目前它还不能检测到是否真的" "有系统托盘,所以仅当你有系统托盘时才选择此选项。" #: .././sonata/preferences.py:350 msgid "Miscellaneous" msgstr "其它" #: .././sonata/preferences.py:354 msgid "_Update MPD library on start" msgstr "启动时更新 MPD 数据库(_U)" #: .././sonata/preferences.py:356 msgid "" "If enabled, Sonata will automatically update your MPD library when it starts " "up." msgstr "如果启用,Sonata 将在启动时自动更新你的 MPD 数据库。" #: .././sonata/preferences.py:358 msgid "S_top playback on exit" msgstr "退出时停止播放(_t)" #: .././sonata/preferences.py:360 msgid "" "MPD allows playback even when the client is not open. If enabled, Sonata " "will behave like a more conventional music player and, instead, stop " "playback upon exit." msgstr "" "即使客户端没有打开,MPD 仍然允许播放。如果启用此选项,Sonata 将更像一个习惯上" "的音乐播放器,在退出的时候停止播放。" #: .././sonata/preferences.py:362 msgid "_Write status file:" msgstr "将状态写入文件(_W):" #: .././sonata/preferences.py:364 .././sonata/preferences.py:366 msgid "" "If enabled, Sonata will create a xmms-infopipe like file containing " "information about the current song. Many applications support the xmms-info " "file (Instant Messengers, IRC Clients...)" msgstr "" "如果启用,Sonata 将建立一个类似管道的文件 xmms-info,包含关于当前曲目的信息。" "许多应用程序支持 xmms-info 文件(即时通讯软件、IRC 客户端……)" #. Format tab #: .././sonata/preferences.py:392 msgid "Song Formatting" msgstr "曲目格式" #: .././sonata/preferences.py:397 msgid "C_urrent playlist:" msgstr "当前播放列表(_u):" #: .././sonata/preferences.py:398 msgid "_Library:" msgstr "数据库(_L):" #: .././sonata/preferences.py:399 msgid "_Window title:" msgstr "窗口标题(_W):" #: .././sonata/preferences.py:400 msgid "Current _song line 1:" msgstr "当前曲目第一行(_s):" #: .././sonata/preferences.py:402 msgid "Current s_ong line 2:" msgstr "当前曲目第二行(_o):" #: .././sonata/preferences.py:422 msgid "Available options" msgstr "可用选项" #. XXX get these directly from the formatting function: #: .././sonata/preferences.py:426 msgid "Artist name" msgstr "艺术家名字" #: .././sonata/preferences.py:427 msgid "Album name" msgstr "专辑名" #: .././sonata/preferences.py:428 msgid "Track name" msgstr "音轨名" #: .././sonata/preferences.py:429 msgid "Track number" msgstr "音轨编号" #: .././sonata/preferences.py:430 msgid "Disc number" msgstr "唱片编号" #: .././sonata/preferences.py:433 msgid "File path" msgstr "文件路径" #: .././sonata/preferences.py:434 msgid "File name" msgstr "文件名" #: .././sonata/preferences.py:435 .././sonata/streams.py:109 msgid "Stream name" msgstr "流媒体名字" #: .././sonata/preferences.py:436 msgid "Song length" msgstr "曲目长度" #: .././sonata/preferences.py:437 msgid "Elapsed time (title only)" msgstr "已播放时间(仅限标题用)" #: .././sonata/preferences.py:448 msgid "Info displayed only if all enclosed tags are defined" msgstr "仅当结组中的所有标签都有定义时才会显示信息" #: .././sonata/preferences.py:448 msgid "Creates columns in the current playlist" msgstr "在当前播放列表建立分栏" #: .././sonata/preferences.py:473 msgid "_About" msgstr "关于(_A)" #: .././sonata/preferences.py:474 msgid "_Configure..." msgstr "配置(_C)..." #: .././sonata/preferences.py:513 msgid "Loaded" msgstr "已载入" #: .././sonata/preferences.py:521 msgid "Description" msgstr "描述" #. Set up table #: .././sonata/preferences.py:532 msgid "MPD" msgstr "MPD" #: .././sonata/preferences.py:534 msgid "Behavior" msgstr "行为" #: .././sonata/preferences.py:535 msgid "Format" msgstr "格式" #: .././sonata/preferences.py:605 msgid "New Profile" msgstr "新档案" #. Prompt user for playlist name: #: .././sonata/preferences.py:659 msgid "Custom Artwork" msgstr "自定义封面" #: .././sonata/preferences.py:661 msgid "Artwork filename" msgstr "封面文件名" #: .././sonata/streams.py:105 msgid "Edit Stream" msgstr "编辑流" #: .././sonata/streams.py:107 .././sonata/streams.py:138 msgid "New Stream" msgstr "新建流" #: .././sonata/streams.py:116 msgid "Stream URL" msgstr "流媒体 URL" #: .././sonata/streams.py:138 msgid "A stream with this name already exists. Would you like to replace it?" msgstr "流的名字已经存在。是否替换?" #: .././sonata/tagedit.py:61 msgid "Taglib and/or tagpy not found, tag editing support disabled." msgstr "TagLib 与/或 TagPy 未找到,不能编辑标签。" #: .././sonata/tagedit.py:61 .././sonata/tagedit.py:70 #: .././sonata/tagedit.py:75 .././sonata/tagedit.py:99 #: .././sonata/tagedit.py:103 .././sonata/tagedit.py:260 #: .././sonata/tagedit.py:299 msgid "Edit Tags" msgstr "编辑标签" #: .././sonata/tagedit.py:70 msgid "" "Tagpy version < 0.91. Please upgrade to a newer version, tag editing support " "disabled." msgstr "TagPy 版本 < 0.91 ,不能编辑标签。请升级到较新的版本。" #: .././sonata/tagedit.py:75 msgid "The path" msgstr "路径" #: .././sonata/tagedit.py:75 msgid "does not exist. Please specify a valid music directory in preferences." msgstr "不存在。请在偏好设置中指定一个有效的音乐目录。" #: .././sonata/tagedit.py:99 msgid "File " msgstr "文件 " #: .././sonata/tagedit.py:99 msgid " not found. Please specify a valid music directory in preferences." msgstr " 未找到。请在偏好设置中指定一个有效的音乐目录。" #: .././sonata/tagedit.py:103 msgid "No music files with editable tags found." msgstr "没有可以编辑标签的音乐文件。" #: .././sonata/tagedit.py:150 msgid "Comment" msgstr "注解" #. Only show save all button if more than one song being edited. #: .././sonata/tagedit.py:161 msgid "Save _All" msgstr "保存全部(_A)" #: .././sonata/tagedit.py:207 msgid "Increment each selected music file, starting at track 1 for this file." msgstr "" "设置此文件的音轨编号为 1,从此文件开始递增地设置每一个已选择的音乐文件的音轨" "编号。" #: .././sonata/tagedit.py:209 msgid "Apply to all selected music files." msgstr "应用到所有已选择的音乐文件。" #: .././sonata/tagedit.py:260 msgid "of" msgstr "of" #. FIXME: was (save_success and self.conn and self.status): #: .././sonata/tagedit.py:299 msgid "Unable to save tag to music file." msgstr "不能将标签保存到音乐文件。" #: .././sonata/tagedit.py:366 msgid "Hide file path" msgstr "隐藏文件路径" #: .././sonata/tagedit.py:369 msgid "Show file path" msgstr "显示文件路径" #~ msgid "The popup argument requires D-Bus. Aborting." #~ msgstr "popup 参数需要 D-Bus。放弃中。" #, fuzzy #~ msgid "_Update Path" #~ msgstr "更新(_U)" #~ msgid "Website: http://www.nongnu.org/sonata/" #~ msgstr "网站: http://www.nongnu.org/sonata/" #~ msgid "Enable Audioscrobbler" #~ msgstr "启用 Audioscrobbler" #~ msgid "Enable Crossfade" #~ msgstr "启用渐变" #~ msgid "Enable album art" #~ msgstr "启用封面" #~ msgid "Enable lyrics" #~ msgstr "启用歌词" #~ msgid "Enable system tray icon" #~ msgstr "启用系统托盘图标" #~ msgid "_Display" #~ msgstr "显示(_D)" #~ msgid "_Extras" #~ msgstr "其它(_E)" #~ msgid "" #~ "PyGTK+ 2.10 or gnome-python-extras not found, system tray support " #~ "disabled." #~ msgstr "PyGTK+ 2.10 或 gnome-python-extras 未找到,禁用系统托盘。" #~ msgid "Reset to Default" #~ msgstr "重置为默认" #~ msgid "_New Playlist..." #~ msgstr "新建播放列表(_N)..." #~ msgid "Notification" #~ msgstr "提示" #~ msgid "" #~ "Python 2.5 or python-elementtree not found, audioscrobbler support " #~ "disabled." #~ msgstr "Python 2.5 或 python-elementtree 未找到,禁用 audioscrobbler。" #~ msgid "Audioscrobbler Verification" #~ msgstr "Audioscrobbler 确认" #~ msgid "Update library for selected item(s)" #~ msgstr "更新选择的项" #~ msgid "_Shuffle" #~ msgstr "随机(_S)" #~ msgid "Toggle shuffle mode" #~ msgstr "切换随机模式" #~ msgid "Not connected" #~ msgstr "未连接" #~ msgid "Press enter to search for these terms." #~ msgstr "按 enter 键来搜索这些词条。" #~ msgid "Add new profile" #~ msgstr "添加新的档案" #~ msgid "Remove current profile" #~ msgstr "删除当前档案" #~ msgid "Play enqueued files on activate" #~ msgstr "播放加入队列的文件" #~ msgid "" #~ "Automatically play enqueued items when activated via double-click or " #~ "enter." #~ msgstr "当通过双击或按 enter 键向队列中加入曲目后,自动播放加入的曲目。" #~ msgid "Add selected song(s) or directory(s)" #~ msgstr "添加选择的曲目或目录" #~ msgid "Replace with selected song(s) or directory(s)" #~ msgstr "替换为选择的曲目或目录" #~ msgid "Add to _Queue" #~ msgstr "添加到队列(_Q)" #~ msgid "Remove from _Queue" #~ msgstr "从队列删除(_Q)" #~ msgid "Add selected song(s) to playlist queue" #~ msgstr "添加选择的曲目到播放队列" #~ msgid "Remove selected song(s) from playlist queue" #~ msgstr "从播放队列中删除选择的曲目" #~ msgid "seconds" #~ msgstr "秒" #~ msgid "Song Info..." #~ msgstr "曲目信息..." #~ msgid "Click to collapse the player" #~ msgstr "点击折叠播放器" #~ msgid "Click to expand the player" #~ msgstr "点击展开播放器" #~ msgid "_Song Info" #~ msgstr "曲目信息(_S)" #~ msgid "_Search..." #~ msgstr "搜索(_S)..." #~ msgid "Remote only" #~ msgstr "仅限远程" #~ msgid "Remote, then local" #~ msgstr "先远程,后本地" #~ msgid "To save artwork as" #~ msgstr "要保存封面为" #~ msgid "Artwork Verification" #~ msgstr "封面确认" #~ msgid "Switch to current playlist" #~ msgstr "切换到当前曲目" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/po/zh_TW.po����������������������������������������������������������������������������0000664�0000000�0000000�00000110356�13771420143�0015025�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # msgid "" msgstr "" "Project-Id-Version: sonata\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-04-10 10:01+0800\n" "PO-Revision-Date: 2009-04-10 10:22+0800\n" "Last-Translator: b4283 <da.mi.spirit@gmail.com>\n" "Language-Team: Traditional Chinese (zh_TW)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" #. define the shortcuts and their descriptions #. these are all gettextable #: .././sonata/about.py:54 msgid "About Sonata" msgstr "關於 Sonata" #: .././sonata/about.py:55 #: .././sonata/preferences.py:96 msgid "Preferences" msgstr "偏好設定" #: .././sonata/about.py:56 msgid "Fullscreen Artwork Mode" msgstr "全螢幕封面模式" #: .././sonata/about.py:57 msgid "Switch to [1st-5th] tab" msgstr "切換至第一至第五個分頁" #: .././sonata/about.py:58 msgid "Connect to MPD" msgstr "連線至 MPD" #: .././sonata/about.py:59 msgid "Disconnect from MPD" msgstr "自 MPD 斷線" #: .././sonata/about.py:60 msgid "Randomize current playlist" msgstr "將當前清單亂數化" #: .././sonata/about.py:61 msgid "Expand player" msgstr "放大播放器" #: .././sonata/about.py:62 msgid "Switch to previous tab" msgstr "切換至第一至第五個分頁" #: .././sonata/about.py:63 msgid "Switch to next tab" msgstr "切換至第一至第五個分頁" #: .././sonata/about.py:64 msgid "Collapse player" msgstr "縮小播放器" #: .././sonata/about.py:65 #: .././sonata/library.py:79 msgid "Search library" msgstr "搜尋音樂庫" #: .././sonata/about.py:66 msgid "Quit" msgstr "離開" #: .././sonata/about.py:67 msgid "Update entire library" msgstr "更新整個音樂庫" #: .././sonata/about.py:68 msgid "Display popup menu" msgstr "顯示跳出菜單" #: .././sonata/about.py:69 msgid "Minimize to system tray (if enabled)" msgstr "縮至系統列 (如果有開啟)" #: .././sonata/about.py:71 msgid "Previous track" msgstr "前一軌" #: .././sonata/about.py:72 msgid "Next track" msgstr "下一軌" #: .././sonata/about.py:73 msgid "Play/Pause" msgstr "播放/暫停" #: .././sonata/about.py:74 msgid "Stop" msgstr "停止" #: .././sonata/about.py:75 msgid "Lower the volume" msgstr "降低音量" #: .././sonata/about.py:76 msgid "Raise the volume" msgstr "提高音量" #: .././sonata/about.py:78 msgid "Play selected song" msgstr "播放選定歌曲" #: .././sonata/about.py:79 msgid "Remove selected song(s)" msgstr "移除選定歌曲" #: .././sonata/about.py:80 msgid "Center currently playing song" msgstr "移至目前播放中的曲子" #: .././sonata/about.py:81 #: .././sonata/about.py:90 msgid "Edit selected song's tags" msgstr "編輯選定歌曲的標籤" #: .././sonata/about.py:82 msgid "Save to new playlist" msgstr "存至新清單" #: .././sonata/about.py:83 msgid "Clear list" msgstr "清除清單" #: .././sonata/about.py:84 msgid "Randomize list" msgstr "清單亂數化" #: .././sonata/about.py:86 msgid "Add selected song(s) or enter directory" msgstr "新增選定歌曲,或進入目錄" #: .././sonata/about.py:87 msgid "Go to parent directory" msgstr "回上一目錄" #: .././sonata/about.py:88 msgid "Add selected item(s)" msgstr "新增選定項目" #: .././sonata/about.py:89 msgid "Replace with selected item(s)" msgstr "用選定項目替代" #: .././sonata/about.py:91 msgid "Add selected item(s) and play" msgstr "新增選定項目並播放" #: .././sonata/about.py:92 msgid "Replace with selected item(s) and play" msgstr "以選定項目替代並播放" #: .././sonata/about.py:93 msgid "Update selected item(s)/path(s)" msgstr "新增選定項目" #: .././sonata/about.py:95 #: .././sonata/about.py:97 msgid "Add selected playlist(s)" msgstr "新增選定清單" #: .././sonata/about.py:96 msgid "Remove selected playlist(s)" msgstr "移除選定清單" #: .././sonata/about.py:98 msgid "Replace with selected playlist(s)" msgstr "以選定清單替代" #: .././sonata/about.py:99 msgid "Add selected playlist(s) and play" msgstr "新增選定清單並播放" #: .././sonata/about.py:100 msgid "Replace with selected playlist(s) and play" msgstr "以選定清單替代並播放" #: .././sonata/about.py:102 #: .././sonata/about.py:104 msgid "Add selected stream(s)" msgstr "新增選定串流" #: .././sonata/about.py:103 msgid "Remove selected stream(s)" msgstr "移除選定串流" #: .././sonata/about.py:105 msgid "Replace with selected stream(s)" msgstr "以選定串流替代" #: .././sonata/about.py:106 msgid "Add selected stream(s) and play" msgstr "新增選定串流並播放" #: .././sonata/about.py:107 msgid "Replace with selected stream(s) and play" msgstr "以選定串流替代並播放" #: .././sonata/about.py:109 msgid "Edit playing song's tags" msgstr "編輯目前播放歌曲的標籤" #. define the main array- this adds headings to each section of #. shortcuts that will be displayed #: .././sonata/about.py:112 msgid "Main Shortcuts" msgstr "主要捷徑" #: .././sonata/about.py:113 msgid "Playback Shortcuts" msgstr "播放控制捷徑" #: .././sonata/about.py:114 msgid "Current Shortcuts" msgstr "「當前清單」捷徑" #: .././sonata/about.py:115 msgid "Library Shortcuts" msgstr "「音樂庫」分頁捷徑" #: .././sonata/about.py:116 msgid "Playlist Shortcuts" msgstr "「清單列」捷徑" #: .././sonata/about.py:117 msgid "Stream Shortcuts" msgstr "「串流」分頁捷徑" #: .././sonata/about.py:118 msgid "Info Shortcuts" msgstr "「詳細」分頁捷徑" #: .././sonata/about.py:119 msgid "Shortcuts" msgstr "捷徑" #. XXX translate expressions, not words #. Show text: #: .././sonata/about.py:147 #: .././sonata/library.py:856 #: .././sonata/main.py:1756 #, fuzzy msgid "song" msgid_plural "songs" msgstr[0] "首歌曲" #: .././sonata/about.py:148 #, fuzzy msgid "album" msgid_plural "albums" msgstr[0] "張專輯" #: .././sonata/about.py:149 #, fuzzy msgid "artist" msgid_plural "artists" msgstr[0] "位演奏人" #: .././sonata/about.py:156 #, fuzzy msgid "day of bliss" msgid_plural "days of bliss" msgstr[0] "晝夜的天籟" #: .././sonata/about.py:158 #, fuzzy msgid "hour of bliss" msgid_plural "hours of bliss" msgstr[0] "時辰的天籟" #: .././sonata/about.py:172 msgid "An elegant music client for MPD." msgstr "優雅的 MPD 音樂客端。" #. Add button to show keybindings: #: .././sonata/about.py:185 msgid "_Shortcuts" msgstr "捷徑 (_S)" #: .././sonata/about.py:196 #: .././sonata/main.py:3103 #: .././sonata/preferences.py:880 msgid "Unable to launch a suitable browser." msgstr "無法開啟合適的瀏覽器。" #: .././sonata/about.py:196 #: .././sonata/main.py:3103 #: .././sonata/preferences.py:880 msgid "Launch Browser" msgstr "開啟瀏覽器" #: .././sonata/cli.py:81 msgid "The toggle and popup arguments require D-Bus. Aborting." msgstr "這個開關需要 D-Bus,中止。" #: .././sonata/cli.py:97 msgid "Version" msgstr "版本: Sonata" #: .././sonata/cli.py:98 msgid "Website" msgstr "網站" #: .././sonata/cli.py:103 msgid "Usage: sonata [OPTION]... [COMMAND]..." msgstr "用法: sonata [選項]" #: .././sonata/cli.py:105 msgid "Options" msgstr "選項" #: .././sonata/cli.py:106 msgid "Show this help and exit" msgstr "顯示本說明並離開" #: .././sonata/cli.py:107 msgid "Popup song notification (requires D-Bus)" msgstr "跳出視窗提示 (需要 DBus)" #: .././sonata/cli.py:108 msgid "Toggles whether the app is minimized" msgstr "不管程式縮至系統列" #: .././sonata/cli.py:109 msgid "to tray or visible (requires D-Bus)" msgstr "或者顯示都打開視窗(需要 D-Bus)" #: .././sonata/cli.py:110 msgid "Don't start app if D-Bus commands fail" msgstr "如果 D-Bus 命令失效就不要開啟程式" #: .././sonata/cli.py:111 msgid "Show version information and exit" msgstr "顯示版本資料後離開" #: .././sonata/cli.py:112 msgid "Start app hidden (requires systray)" msgstr "以隱藏方式啟動 (需要系統列)" #: .././sonata/cli.py:113 msgid "Start app visible (requires systray)" msgstr "以明顯視窗啟動 (需要系統列)" #: .././sonata/cli.py:114 msgid "Start with profile [NUM]" msgstr "使用 [NUM] 號設定檔啟動" #: .././sonata/cli.py:116 msgid "Commands" msgstr "註解" #: .././sonata/cli.py:117 msgid "Play song in playlist" msgstr "播放清單中的曲子" #: .././sonata/cli.py:118 msgid "Pause currently playing song" msgstr "暫停目前的曲子" #: .././sonata/cli.py:119 msgid "Stop currently playing song" msgstr "停止目前的曲子" #: .././sonata/cli.py:120 msgid "Play next song in playlist" msgstr "跳至清單的下一首" #: .././sonata/cli.py:121 msgid "Play previous song in playlist" msgstr "跳至清單的前一首" #: .././sonata/cli.py:122 msgid "Toggle play/pause; plays if stopped" msgstr "播放/暫停之間切換" #: .././sonata/cli.py:123 msgid "Toggle repeat mode" msgstr "啟動重複播放" #: .././sonata/cli.py:124 msgid "Toggle random mode" msgstr "啟動重複播放" #: .././sonata/cli.py:125 msgid "Display current song info" msgstr "顯示目前歌曲詳細" #: .././sonata/cli.py:126 msgid "Display MPD status" msgstr "顯示 MPD 狀態" #: .././sonata/cli.py:134 #, python-format msgid "Starting Sonata with profile %s..." msgstr "使用 %s 號設定檔開啟 Sonata…" #: .././sonata/cli.py:136 #, python-format msgid "%d is not an available profile number." msgstr "%d 不是有效的設定檔號碼。" #: .././sonata/cli.py:137 #: .././sonata/cli.py:141 #, python-format msgid "Profile numbers must be between 1 and %d." msgstr "不是有效的設定檔號碼,號碼必須介於 1 和 %d 之間。" #: .././sonata/cli.py:140 #, python-format msgid "Python is unable to interpret %s as a number." msgstr "Python 無法識讀 %s 為一個號碼。" #: .././sonata/cli.py:154 #: .././sonata/main.py:178 msgid "Default Profile" msgstr "預設設定檔" #: .././sonata/cli.py:154 #: .././sonata/main.py:178 msgid "by" msgstr "" #: .././sonata/cli.py:154 #: .././sonata/main.py:178 msgid "from" msgstr "" #: .././sonata/cli.py:176 msgid "" "Unable to connect to MPD.\n" "Please check your Sonata preferences or MPD_HOST/MPD_PORT environment variables." msgstr "" "無法連線至 MPD。\n" "請檢查你的 Sonata 設定,和 MPD_HOST/MPD_PORT 環境變數。" #: .././sonata/cli.py:208 #: .././sonata/info.py:90 #: .././sonata/library.py:45 #: .././sonata/tagedit.py:125 msgid "Title" msgstr "曲名" #: .././sonata/cli.py:209 #: .././sonata/info.py:91 #: .././sonata/library.py:45 #: .././sonata/main.py:1180 #: .././sonata/tagedit.py:126 msgid "Artist" msgstr "演奏人" #: .././sonata/cli.py:210 #: .././sonata/info.py:93 #: .././sonata/library.py:45 #: .././sonata/main.py:1181 #: .././sonata/main.py:2432 #: .././sonata/tagedit.py:127 msgid "Album" msgstr "專輯" #: .././sonata/cli.py:211 #: .././sonata/info.py:95 msgid "Date" msgstr "日期" #: .././sonata/cli.py:212 #: .././sonata/info.py:96 #: .././sonata/main.py:1182 #: .././sonata/tagedit.py:130 msgid "Track" msgstr "音軌" #: .././sonata/cli.py:213 #: .././sonata/info.py:97 #: .././sonata/library.py:45 #: .././sonata/main.py:1185 #: .././sonata/preferences.py:557 #: .././sonata/tagedit.py:139 msgid "Genre" msgstr "類型" #: .././sonata/cli.py:214 #: .././sonata/info.py:98 #: .././sonata/main.py:1187 msgid "File" msgstr "檔案" #: .././sonata/cli.py:219 #: .././sonata/cli.py:221 msgid "Time" msgstr "時間" #: .././sonata/cli.py:222 #: .././sonata/info.py:99 msgid "Bitrate" msgstr "位元率" #: .././sonata/cli.py:224 msgid "MPD stopped" msgstr "MPD 已停止" #: .././sonata/cli.py:228 #: .././sonata/cli.py:230 #: .././sonata/cli.py:232 msgid "State" msgstr "狀態" #: .././sonata/cli.py:228 msgid "Playing" msgstr "播放中" #: .././sonata/cli.py:230 msgid "Paused" msgstr "暫停" #: .././sonata/cli.py:232 #: .././sonata/main.py:562 #: .././sonata/main.py:567 #: .././sonata/main.py:1829 #: .././sonata/main.py:1840 msgid "Stopped" msgstr "已停止" #: .././sonata/cli.py:234 #: .././sonata/cli.py:236 msgid "Repeat" msgstr "重複" #: .././sonata/cli.py:234 #: .././sonata/cli.py:238 msgid "Off" msgstr "關閉" #: .././sonata/cli.py:236 #: .././sonata/cli.py:240 msgid "On" msgstr "開啟" #: .././sonata/cli.py:238 #: .././sonata/cli.py:240 msgid "Random" msgstr "隨機" #: .././sonata/cli.py:241 msgid "Volume" msgstr "音量" #: .././sonata/cli.py:242 msgid "Crossfade" msgstr "淡入淡出" #: .././sonata/cli.py:242 #: .././sonata/preferences.py:277 #, fuzzy msgid "second" msgid_plural "seconds" msgstr[0] "秒" #: .././sonata/current.py:64 msgid "Filter" msgstr "篩選" #: .././sonata/dbus_plugin.py:83 msgid "Sonata failed to connect to the D-BUS session bus: Unable to determine the address of the message bus (try 'man dbus-launch' and 'man dbus-daemon' for help)" msgstr "Sonata 無法連線至 D-BUS: 無法得知 message bus 的位址。(試著用 man dbus-launch 和 man dbus-daemon 指令獲取協助)" #: .././sonata/dbus_plugin.py:96 msgid "Failed to execute remote commands." msgstr "無法執行遠端命令。" #: .././sonata/dbus_plugin.py:98 msgid "Starting Sonata instead..." msgstr "使用設定檔開啟 Sonata" #: .././sonata/dbus_plugin.py:100 msgid "Maybe Sonata is not running?" msgstr "已經有另一個 Sonata 使用中。" #: .././sonata/dbus_plugin.py:114 msgid "An instance of Sonata is already running. Showing it..." msgstr "已經有另一個 Sonata 使用中。" #: .././sonata/dbus_plugin.py:120 msgid "Failed to execute remote command." msgstr "無法執行遠端命令。" #. Song info #: .././sonata/info.py:78 msgid "Song Info" msgstr "歌曲詳細" #: .././sonata/info.py:92 msgid "Launch artist in Wikipedia" msgstr "在維基百科中搜尋該演奏人" #: .././sonata/info.py:94 msgid "Launch album in Wikipedia" msgstr "在維基百科中搜尋該專輯" #: .././sonata/info.py:128 msgid "Toggle extra tags" msgstr "啟動額外的標籤設定" #: .././sonata/info.py:131 msgid "Edit song tags" msgstr "編輯歌曲標籤" #. Lyrics #: .././sonata/info.py:141 msgid "Lyrics" msgstr "歌詞" #: .././sonata/info.py:153 msgid "Search Lyricwiki.org for lyrics" msgstr "在 lyricwiki.org 上搜尋歌曲" #: .././sonata/info.py:154 msgid "Edit lyrics at Lyricwiki.org" msgstr "在 lyricwiki.org 編輯歌詞" #. Album info #: .././sonata/info.py:162 msgid "Album Info" msgstr "專輯詳細" #: .././sonata/info.py:214 #: .././sonata/info.py:219 msgid "more" msgstr "更多" #: .././sonata/info.py:216 msgid "hide" msgstr "隱藏" #: .././sonata/info.py:282 msgid "edit tags" msgstr "編輯標籤" #: .././sonata/info.py:309 msgid "Album info not found." msgstr "找不到專輯資料。" #: .././sonata/info.py:312 msgid "Album name not set." msgstr "未設定專輯名。" #: .././sonata/info.py:326 msgid "ZSI not found, fetching lyrics support disabled." msgstr "沒有 ZSI,抓取歌詞關閉。" #: .././sonata/info.py:331 msgid "Artist or song title not set." msgstr "未設定演奏人或曲名" #: .././sonata/info.py:373 msgid "search" msgstr "搜尋" #: .././sonata/info.py:374 msgid "edit" msgstr "編輯標籤" #: .././sonata/info.py:383 #: .././sonata/info.py:438 msgid "Lyrics not found" msgstr "找不到歌詞" #. Fetch lyrics from lyricwiki.org #: .././sonata/info.py:403 msgid "Fetching lyrics..." msgstr "抓取歌詞中..." #: .././sonata/info.py:413 msgid "Couldn't connect to LyricWiki" msgstr "無法連線至 LyricWiki" #: .././sonata/info.py:441 msgid "Fetching lyrics failed" msgstr "抓取歌詞失敗" #: .././sonata/library.py:43 msgid "Untagged" msgstr "未標籤" #: .././sonata/library.py:44 msgid "Various Artists" msgstr "多元演奏人" #: .././sonata/library.py:45 msgid "Filename" msgstr "檔名" #: .././sonata/library.py:45 msgid "Everything" msgstr "所有" #: .././sonata/library.py:77 msgid "Search terms" msgstr "編輯搜尋詞" #: .././sonata/library.py:83 msgid "End Search" msgstr "結束搜尋" #: .././sonata/library.py:85 msgid "Library browsing view" msgstr "瀏覽音樂庫" #. disabled as breadcrumbs replace this: #. self.searchbox.pack_start(self.libraryview, False, False, 1) #. self.searchbox.pack_start(gtk.VSeparator(), False, False, 2) #: .././sonata/library.py:89 msgid "Search" msgstr "搜尋" #: .././sonata/library.py:110 msgid "Filesystem" msgstr "檔案系統" #: .././sonata/library.py:112 msgid "Albums" msgstr "專輯" #: .././sonata/library.py:114 msgid "Artists" msgstr "演奏人" #: .././sonata/library.py:116 msgid "Genres" msgstr "類型" #. add the views button first #: .././sonata/library.py:376 msgid " v " msgstr "" #: .././sonata/library.py:856 #: .././sonata/main.py:1750 #, fuzzy msgid "minute" msgid_plural "minutes" msgstr[0] "分" #: .././sonata/library.py:944 msgid "Song" msgstr "曲" #: .././sonata/library.py:944 #: .././sonata/main.py:1186 msgid "Path" msgstr "路徑" #. Constants #: .././sonata/main.py:102 msgid "Current" msgstr "當前" #: .././sonata/main.py:103 msgid "Library" msgstr "音樂庫" #: .././sonata/main.py:104 msgid "Playlists" msgstr "播放清單" #: .././sonata/main.py:105 msgid "Streams" msgstr "串流" #: .././sonata/main.py:106 msgid "Info" msgstr "詳細" #: .././sonata/main.py:137 #: .././sonata/preferences.py:278 #: .././sonata/preferences.py:279 msgid "Entire song" msgstr "整首曲子" #: .././sonata/main.py:236 msgid "_Sort List" msgstr "排序 (_S)" #: .././sonata/main.py:237 msgid "Sa_ve List to" msgstr "儲存清單至 (_V)" #: .././sonata/main.py:238 msgid "_Connection" msgstr "連線 (_C)" #: .././sonata/main.py:239 msgid "P_lay after" msgstr "在...之後播放 (_L)" #: .././sonata/main.py:240 #: .././sonata/main.py:2446 msgid "_Update" msgstr "更新 (_U)" #: .././sonata/main.py:241 msgid "Use _Remote Image..." msgstr "使用遠端圖案... (_R)" #: .././sonata/main.py:242 msgid "Use _Local Image..." msgstr "使用本地圖案... (_L)" #: .././sonata/main.py:243 msgid "_Fullscreen Mode" msgstr "全螢幕模式 (_F)" #: .././sonata/main.py:244 msgid "Reset Image" msgstr "打開影像" #: .././sonata/main.py:245 msgid "_Play" msgstr "播放 (_P)" #: .././sonata/main.py:246 msgid "Pa_use" msgstr "暫停 (_P)" #: .././sonata/main.py:247 msgid "_Stop" msgstr "停止 (_S)" #: .././sonata/main.py:248 msgid "Pre_vious" msgstr "前一首 (_V)" #: .././sonata/main.py:249 msgid "_Next" msgstr "下一首 (_N)" #: .././sonata/main.py:250 msgid "_Quit" msgstr "離開 (_Q)" #: .././sonata/main.py:251 msgid "_Remove" msgstr "移除 (_R)" #: .././sonata/main.py:252 msgid "_Clear" msgstr "清除 (_C)" #: .././sonata/main.py:253 msgid "_Entire Library" msgstr "整個音樂庫 (_E)" #: .././sonata/main.py:254 msgid "_Selected Items" msgstr "選定項目 (_S)" #: .././sonata/main.py:255 msgid "_Preferences..." msgstr "偏好設定 (_P)" #: .././sonata/main.py:256 msgid "_About..." msgstr "關於 (_A)" #: .././sonata/main.py:257 msgid "_Edit Tags..." msgstr "編輯標籤... (_E)" #: .././sonata/main.py:258 msgid "_Add" msgstr "新增 (_A)" #: .././sonata/main.py:259 msgid "_Replace" msgstr "替代 (_R)" #: .././sonata/main.py:260 msgid "Add" msgstr "新增" #: .././sonata/main.py:261 msgid "Replace" msgstr "替代" #: .././sonata/main.py:262 msgid "_Delete..." msgstr "刪除 (_D)" #: .././sonata/main.py:263 msgid "Shuffle" msgstr "隨機" #: .././sonata/main.py:288 msgid "S_how Sonata" msgstr "顯示 Sonata (_H)" #: .././sonata/main.py:289 msgid "_Repeat" msgstr "重複 (_R)" #: .././sonata/main.py:290 msgid "Rando_m" msgstr "隨機 (_M)" #: .././sonata/main.py:431 msgid "By Artist" msgstr "演奏人" #: .././sonata/main.py:432 msgid "By Album" msgstr "專輯" #: .././sonata/main.py:433 msgid "By Song Title" msgstr "曲名" #: .././sonata/main.py:434 msgid "By File Name" msgstr "檔名" #: .././sonata/main.py:435 msgid "By Dir & File Name" msgstr "路徑及檔名" #: .././sonata/main.py:436 msgid "Reverse List" msgstr "反轉清單" #: .././sonata/main.py:459 #: .././sonata/main.py:470 msgid "_New..." msgstr "新的... (_N)" #: .././sonata/main.py:460 msgid "_Edit..." msgstr "編輯... (_E)" #: .././sonata/main.py:471 msgid "_Rename..." msgstr "重新命名... (_R)" #: .././sonata/main.py:533 #: .././sonata/main.py:600 #: .././sonata/main.py:601 msgid "Playlist" msgstr "清單" #: .././sonata/main.py:563 #: .././sonata/main.py:1833 #: .././sonata/main.py:2042 msgid "Click to expand" msgstr "按下放大" #: .././sonata/main.py:568 #: .././sonata/main.py:1831 #: .././sonata/main.py:2040 msgid "Click to collapse" msgstr "按下縮小" #: .././sonata/main.py:573 #: .././sonata/main.py:1725 #: .././sonata/main.py:1836 msgid "Not Connected" msgstr "尚未連線" #: .././sonata/main.py:575 #: .././sonata/main.py:1723 #: .././sonata/main.py:1838 msgid "No Read Permission" msgstr "沒有讀取權限" #: .././sonata/main.py:648 msgid "Cover Art" msgstr "選擇封面圖案" #: .././sonata/main.py:872 msgid "MPD_HOST/PORT" msgstr "使用 MPD_HOST/PORT 中" #: .././sonata/main.py:877 msgid "Disconnect" msgstr "斷線" #: .././sonata/main.py:1183 #: .././sonata/main.py:1190 msgid "#" msgstr "" #: .././sonata/main.py:1184 #: .././sonata/preferences.py:556 #: .././sonata/tagedit.py:128 msgid "Year" msgstr "年" #: .././sonata/main.py:1188 msgid "Stream" msgstr "串流" #: .././sonata/main.py:1189 msgid "Len" msgstr "" #: .././sonata/main.py:1210 #: .././sonata/main.py:1217 #: .././sonata/main.py:1258 #: .././sonata/main.py:1265 msgid "Unknown" msgstr "未知" #: .././sonata/main.py:1746 #, fuzzy msgid "day" msgid_plural "days" msgstr[0] "日" #: .././sonata/main.py:1754 #, fuzzy msgid "hour" msgid_plural "hours" msgstr[0] "小時" #: .././sonata/main.py:1759 #: .././sonata/main.py:1761 msgid "and" msgstr "和" #: .././sonata/main.py:1769 msgid "(updating mpd)" msgstr "(更新 mpd 中)" #: .././sonata/main.py:2109 msgid "Lyrics Search" msgstr "搜尋歌詞" #: .././sonata/main.py:2110 msgid "_Search" msgstr "搜尋 (_S)" #: .././sonata/main.py:2113 msgid "Artist Name" msgstr "演奏人名稱" #: .././sonata/main.py:2118 msgid "Song Title" msgstr "歌曲標題" #: .././sonata/main.py:2370 msgid "Open Image" msgstr "打開影像" #: .././sonata/main.py:2372 msgid "Images" msgstr "影像" #: .././sonata/main.py:2376 msgid "All files" msgstr "所有檔案" #: .././sonata/main.py:2418 msgid "Choose Cover Art" msgstr "選擇封面圖案" #: .././sonata/main.py:2419 msgid "C_hoose" msgstr "選擇 (_H)" #: .././sonata/main.py:2451 msgid "Edit search terms" msgstr "編輯搜尋詞" #: .././sonata/main.py:2508 msgid "No artist or album name found." msgstr "找不到演奏人或專輯名。" #: .././sonata/main.py:2511 msgid "No cover art found." msgstr "找不到封面圖案。" #: .././sonata/main.py:2835 #, fuzzy msgid "Delete the selected playlist?" msgid_plural "Delete the selected playlists?" msgstr[0] "刪除選擇的清單?" #: .././sonata/main.py:2835 #, fuzzy msgid "Delete Playlist" msgid_plural "Delete Playlists" msgstr[0] "刪除清單" #: .././sonata/main.py:2843 #, fuzzy msgid "Delete the selected stream?" msgid_plural "Delete the selected streams?" msgstr[0] "刪除選擇的串流?" #: .././sonata/main.py:2843 #, fuzzy msgid "Delete Stream" msgid_plural "Delete Streams" msgstr[0] "刪除串流" #: .././sonata/playlists.py:103 #: .././sonata/playlists.py:105 msgid "Save Playlist" msgstr "儲存清單" #: .././sonata/playlists.py:120 msgid "Would you like to replace the existing playlist or append these songs?" msgstr "你想替代現存的清單,還是附加於清單末端?" #: .././sonata/playlists.py:120 msgid "Existing Playlist" msgstr "清單" #: .././sonata/playlists.py:120 msgid "Replace playlist" msgstr "重新命名清單" #: .././sonata/playlists.py:120 msgid "Append songs" msgstr "附加歌曲" #: .././sonata/playlists.py:141 msgid "A playlist with this name already exists. Would you like to replace it?" msgstr "已經有同名的清單,是否取代之?" #: .././sonata/playlists.py:153 msgid "Playlist name" msgstr "清單名稱" #: .././sonata/playlists.py:182 #: .././sonata/playlists.py:186 msgid "Rename Playlist" msgstr "重新命名清單" #: .././sonata/preferences.py:27 msgid "System tray" msgstr "系統列" #: .././sonata/preferences.py:27 msgid "Top Left" msgstr "左上" #: .././sonata/preferences.py:27 msgid "Top Right" msgstr "右上" #: .././sonata/preferences.py:28 msgid "Bottom Left" msgstr "左下" #: .././sonata/preferences.py:28 msgid "Bottom Right" msgstr "右下" #: .././sonata/preferences.py:29 msgid "Screen Center" msgstr "畫面中央" #: .././sonata/preferences.py:99 msgid "MPD" msgstr "" #: .././sonata/preferences.py:100 #: .././sonata/preferences.py:343 msgid "Display" msgstr "顯示" #: .././sonata/preferences.py:101 msgid "Behavior" msgstr "行為" #: .././sonata/preferences.py:102 msgid "Format" msgstr "格式" #: .././sonata/preferences.py:103 #: .././sonata/preferences.py:245 msgid "Extras" msgstr "額外功能" #: .././sonata/preferences.py:104 msgid "Plugins" msgstr "插件" #: .././sonata/preferences.py:128 msgid "MPD Connection" msgstr "MPD 連線" #: .././sonata/preferences.py:141 msgid "_Name" msgstr "名稱 (_N)" #: .././sonata/preferences.py:144 msgid "_Host" msgstr "站台 (_H)" #: .././sonata/preferences.py:147 msgid "_Port" msgstr "格式 (_P)" #: .././sonata/preferences.py:151 msgid "_Music dir" msgstr "音樂根目錄 (_M)" #: .././sonata/preferences.py:152 msgid "Select a Music Directory" msgstr "選擇音樂目錄" #: .././sonata/preferences.py:158 msgid "Pa_ssword" msgstr "密碼 (_S)" #: .././sonata/preferences.py:161 msgid "Leave blank if no password is required." msgstr "如果沒有密碼就留白。" #: .././sonata/preferences.py:162 msgid "_Autoconnect on start" msgstr "啟動時自動連線 (_A)" #: .././sonata/preferences.py:182 msgid "Using MPD_HOST/PORT" msgstr "使用 MPD_HOST/PORT 中" #: .././sonata/preferences.py:250 msgid "_Audioscrobbling (Last.fm)" msgstr "" #: .././sonata/preferences.py:252 msgid "_Username:" msgstr "用戶名 (_U):" #: .././sonata/preferences.py:253 msgid "_Password:" msgstr "密碼 (_P):" #: .././sonata/preferences.py:273 msgid "Popup _notification on song changes" msgstr "歌曲變換時跳出提醒窗 (_N)" #: .././sonata/preferences.py:299 msgid "Fade length" msgstr "淡出淡入長度" #: .././sonata/preferences.py:300 msgid "_Fade length" msgstr "淡出淡入長度 (_F)" #: .././sonata/preferences.py:302 msgid "sec" msgstr "秒" #: .././sonata/preferences.py:307 msgid "C_rossfade" msgstr "淡入淡出 (_R)" #: .././sonata/preferences.py:348 msgid "_Album art" msgstr "專輯名稱 (_A)" #: .././sonata/preferences.py:350 msgid "Standard" msgstr "標準" #: .././sonata/preferences.py:351 msgid "Stylized" msgstr "風格化" #: .././sonata/preferences.py:356 msgid "Artwork style:" msgstr "圖案風格:" #: .././sonata/preferences.py:358 msgid "Local only" msgstr "只有本地" #: .././sonata/preferences.py:359 msgid "Local and remote" msgstr "先本地,後遠端" #: .././sonata/preferences.py:362 msgid "Search locations:" msgstr "搜尋次序:" #: .././sonata/preferences.py:369 #: .././sonata/preferences.py:396 msgid "SONG_DIR" msgstr "" #: .././sonata/preferences.py:371 msgid "custom" msgstr "自訂" #: .././sonata/preferences.py:378 msgid "Save art to:" msgstr "儲存圖案至:" #: .././sonata/preferences.py:383 msgid "_Playback/volume buttons" msgstr "啟動控制/音量按鈕 (_P)" #: .././sonata/preferences.py:386 msgid "Pr_ogressbar" msgstr "啟動歌曲進度列 (_O_" #: .././sonata/preferences.py:389 msgid "_Statusbar" msgstr "啟動狀態列 (_S)" #: .././sonata/preferences.py:392 msgid "Song Ly_rics" msgstr "歌詞 (_R)" #: .././sonata/preferences.py:394 msgid "Save lyrics to:" msgstr "儲存歌詞至:" #: .././sonata/preferences.py:405 msgid "System _tray icon" msgstr "系統列 (_T)" #: .././sonata/preferences.py:429 msgid "Window Behavior" msgstr "視窗行為" #: .././sonata/preferences.py:433 msgid "_Show window on all workspaces" msgstr "在所有桌面顯示視窗 (_S)" #: .././sonata/preferences.py:436 msgid "_Keep window above other windows" msgstr "視窗置頂 (_K)" #: .././sonata/preferences.py:439 msgid "_Hide window titlebar" msgstr "視窗標題 (_H):" #: .././sonata/preferences.py:442 msgid "_Minimize to system tray on close/escape" msgstr "關閉/ESC鍵縮至系統列 (_M)" #: .././sonata/preferences.py:444 msgid "If enabled, closing Sonata will minimize it to the system tray. Note that it's currently impossible to detect if there actually is a system tray, so only check this if you have one." msgstr "如果開啟,關閉 Sonata 的按鈕將導致它縮至系統列而非真的關閉。" #: .././sonata/preferences.py:460 msgid "Miscellaneous" msgstr "其他雜項" #: .././sonata/preferences.py:464 msgid "_Update MPD library on start" msgstr "啟動就更新 MPD 音樂庫 (_U)" #: .././sonata/preferences.py:466 msgid "If enabled, Sonata will automatically update your MPD library when it starts up." msgstr "如果開啟,Sonata 會在它啟動就自動更新 MPD 資料庫。" #: .././sonata/preferences.py:469 msgid "S_top playback on exit" msgstr "離開時停止音樂 (_T)" #: .././sonata/preferences.py:471 msgid "MPD allows playback even when the client is not open. If enabled, Sonata will behave like a more conventional music player and, instead, stop playback upon exit." msgstr "MPD 在沒有客端軟體時亦可以播放。然而如果啟動此選項,Sonata 將會模仿傳統音樂播放器,在程式離開同時停止音樂。" #: .././sonata/preferences.py:474 msgid "_Write status file:" msgstr "寫入狀態檔至 (_W):" #: .././sonata/preferences.py:476 #: .././sonata/preferences.py:478 msgid "If enabled, Sonata will create a xmms-infopipe like file containing information about the current song. Many applications support the xmms-info file (Instant Messengers, IRC Clients...)" msgstr "如果開啟,Sonata 會創建一個類似 xmms-infopipe 的檔案,以供其他程式利用。(例如聊天軟體)" #: .././sonata/preferences.py:512 msgid "Song Formatting" msgstr "歌曲格式" #: .././sonata/preferences.py:517 msgid "C_urrent playlist:" msgstr "當前清單 (_U):" #: .././sonata/preferences.py:518 msgid "_Library:" msgstr "音樂庫 (_L):" #: .././sonata/preferences.py:519 msgid "_Window title:" msgstr "視窗標題 (_W):" #: .././sonata/preferences.py:520 msgid "Current _song line 1:" msgstr "歌曲提示第一行 (_S):" #: .././sonata/preferences.py:522 msgid "Current s_ong line 2:" msgstr "歌曲提示第二行 (_O):" #: .././sonata/preferences.py:547 msgid "Available options" msgstr "可用選項" #. XXX get these directly from the formatting function: #: .././sonata/preferences.py:551 msgid "Artist name" msgstr "演奏人名稱" #: .././sonata/preferences.py:552 msgid "Album name" msgstr "專輯名稱" #: .././sonata/preferences.py:553 msgid "Track name" msgstr "音軌名稱" #: .././sonata/preferences.py:554 msgid "Track number" msgstr "音軌號" #: .././sonata/preferences.py:555 msgid "Disc number" msgstr "碟片號" #: .././sonata/preferences.py:558 msgid "File path" msgstr "檔案路徑" #: .././sonata/preferences.py:559 msgid "File name" msgstr "檔名" #: .././sonata/preferences.py:560 #: .././sonata/streams.py:107 msgid "Stream name" msgstr "串流名稱" #: .././sonata/preferences.py:561 msgid "Song length" msgstr "歌曲長度" #: .././sonata/preferences.py:562 msgid "Elapsed time (title only)" msgstr "經過時間 (只能用在標題)" #: .././sonata/preferences.py:572 msgid "Info displayed only if all enclosed tags are defined" msgstr "只有框起來的所有變數都有值時才顯示" #: .././sonata/preferences.py:572 msgid "Creates columns in the current playlist" msgstr "在「當前清單」中畫出直列" #: .././sonata/preferences.py:598 msgid "_About" msgstr "關於 (_A)" #: .././sonata/preferences.py:601 msgid "_Configure..." msgstr "設定… (_C)" #: .././sonata/preferences.py:641 msgid "Enabled" msgstr "啟動淡出淡入" #: .././sonata/preferences.py:649 msgid "Description" msgstr "描述" #: .././sonata/preferences.py:666 msgid "To save lyrics to the music file's directory, you must specify a valid music directory." msgstr "要儲存歌詞至音樂目錄,你必須指定一個有效的音樂目錄。" #: .././sonata/preferences.py:666 #: .././sonata/preferences.py:673 msgid "Music Dir Verification" msgstr "音樂目錄確認" #: .././sonata/preferences.py:673 msgid "To save artwork to the music file's directory, you must specify a valid music directory." msgstr "要儲存封面圖案至音樂目錄,你必須指定一個有效的音樂目錄。" #: .././sonata/preferences.py:738 msgid "New Profile" msgstr "新增設定檔" #. Prompt user for playlist name: #: .././sonata/preferences.py:792 msgid "Custom Artwork" msgstr "自訂封面圖案" #: .././sonata/preferences.py:794 msgid "Artwork filename" msgstr "封面檔名" #: .././sonata/streams.py:103 msgid "Edit Stream" msgstr "編輯串流" #: .././sonata/streams.py:105 #: .././sonata/streams.py:136 msgid "New Stream" msgstr "新增串流" #: .././sonata/streams.py:114 msgid "Stream URL" msgstr "URL" #: .././sonata/streams.py:136 msgid "A stream with this name already exists. Would you like to replace it?" msgstr "已經有同名的串流,是否要替代之?" #: .././sonata/tagedit.py:61 msgid "Taglib and/or tagpy not found, tag editing support disabled." msgstr "找不到 tablib 或 tagpy,將沒有編輯標籤的功能。" #: .././sonata/tagedit.py:61 #: .././sonata/tagedit.py:70 #: .././sonata/tagedit.py:75 #: .././sonata/tagedit.py:99 #: .././sonata/tagedit.py:103 #: .././sonata/tagedit.py:260 #: .././sonata/tagedit.py:299 msgid "Edit Tags" msgstr "編輯標籤" #: .././sonata/tagedit.py:70 msgid "Tagpy version < 0.91. Please upgrade to a newer version, tag editing support disabled." msgstr "找不到 tablib 或 tagpy,將沒有編輯標籤的功能。" #: .././sonata/tagedit.py:75 msgid "The path" msgstr "路徑" #: .././sonata/tagedit.py:75 msgid "does not exist. Please specify a valid music directory in preferences." msgstr "不存在,請在偏好設定中指定一個有效的音樂根目錄。" #: .././sonata/tagedit.py:99 msgid "File " msgstr "檔案 " #: .././sonata/tagedit.py:99 msgid " not found. Please specify a valid music directory in preferences." msgstr "找不到,請在偏好設定中指定一個有效的音樂根目錄。" #: .././sonata/tagedit.py:103 msgid "No music files with editable tags found." msgstr "沒有可編輯標籤的音樂檔案。" #: .././sonata/tagedit.py:150 msgid "Comment" msgstr "註解" #. Only show save all button if more than one song being edited. #: .././sonata/tagedit.py:161 msgid "Save _All" msgstr "儲存所有 (_A)" #: .././sonata/tagedit.py:207 msgid "Increment each selected music file, starting at track 1 for this file." msgstr "由此檔作為第一軌開始計算,逐步增加。" #: .././sonata/tagedit.py:209 msgid "Apply to all selected music files." msgstr "套用至所有選擇的檔案。" #: .././sonata/tagedit.py:260 msgid "of" msgstr "" #. FIXME: was (save_success and self.conn and self.status): #: .././sonata/tagedit.py:299 msgid "Unable to save tag to music file." msgstr "無法存標籤至檔案。" #: .././sonata/tagedit.py:366 msgid "Hide file path" msgstr "檔案路徑" #: .././sonata/tagedit.py:369 msgid "Show file path" msgstr "檔案路徑" #~ msgid "The popup argument requires D-Bus. Aborting." #~ msgstr "這個跳出視窗需要 D-Bus,中止。" #~ msgid "" #~ "PyGTK+ 2.10 or gnome-python-extras not found, system tray support " #~ "disabled." #~ msgstr "找不到 PyGTK+ 2.10 或 gnome-python-extras,將不支援系統列。" #~ msgid "Reset to Default" #~ msgstr "重設" #~ msgid "_New Playlist..." #~ msgstr "創立新清單 (_N)" #~ msgid "Website: http://www.nongnu.org/sonata/" #~ msgstr "網站: http://www.nongnu.org/sonata/" #~ msgid "Toggle shuffle mode" #~ msgstr "啟動隨機播放" #~ msgid "Enable Audioscrobbler" #~ msgstr "啟動 Audioscrobbler" #~ msgid "Notification" #~ msgstr "提醒" #~ msgid "Enable album art" #~ msgstr "開啟封面圖案" #~ msgid "Enable lyrics" #~ msgstr "啟動歌詞支援" #~ msgid "Enable system tray icon" #~ msgstr "啟動系統列圖示" #~ msgid "_Display" #~ msgstr "顯示 (_D)" #~ msgid "_Extras" #~ msgstr "額外 (_E)" #~ msgid "" #~ "Python 2.5 or python-elementtree not found, audioscrobbler support " #~ "disabled." #~ msgstr "" #~ "找不到 Python 2.5 或 python-elementtree,將沒有 audioscrobbler 支援。" #~ msgid "Audioscrobbler Verification" #~ msgstr "Audioscrobbler 確認" #~ msgid "Update library for selected item(s)" #~ msgstr "為選定項目更新音樂庫" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/run-sonata�����������������������������������������������������������������������������0000775�0000000�0000000�00000001545�13771420143�0015030�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python3 # Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> # Copyright 2009-2014 Jonathan Ballet <jon@multani.info> # # This file is part of Sonata. # # Sonata is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Sonata is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Sonata. If not, see <http://www.gnu.org/licenses/>. import sonata.launcher if __name__ == '__main__': sonata.launcher.run() �����������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/run-tests������������������������������������������������������������������������������0000775�0000000�0000000�00000001407�13771420143�0014702�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Copyright 2009-2014 Jonathan Ballet <jon@multani.info> # # This file is part of Sonata. # # Sonata is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Sonata is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Sonata. If not, see <http://www.gnu.org/licenses/>. BASEDIR=$(dirname $0) cd $BASEDIR python3 setup.py test ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/scripts/�������������������������������������������������������������������������������0000775�0000000�0000000�00000000000�13771420143�0014475�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/scripts/update-po����������������������������������������������������������������������0000775�0000000�0000000�00000003046�13771420143�0016324�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> # Copyright 2009-2014 Jonathan Ballet <jon@multani.info> # # This file is part of Sonata. # # Sonata is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Sonata is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Sonata. If not, see <http://www.gnu.org/licenses/>. PACKAGE=Sonata INTLTOOL_UPDATE="intltool-update --gettext-package=$PACKAGE" if ! which intltool-update > /dev/null then echo "You need intltool-update to update the translation files!" > /dev/fd/2 exit 1 fi cd $(dirname "$0")/../po rm -f missing echo Updating POTFILES.in... $INTLTOOL_UPDATE -m if [ -f missing ] then exit 1 fi echo Updating $PACKAGE.pot... $INTLTOOL_UPDATE -p for i in *.po do # Generate ;po files only for the specified language. echo "$*" | grep -q "$(echo $i | sed "s/.po$//g")" if [ $? = 0 -o $# = 0 ] then echo Updating $i... $INTLTOOL_UPDATE "${i%*.po}" echo Purging old translations from $i... msgattrib --output-file="$i" --no-obsolete "$i" fi done echo "Translation status:" $INTLTOOL_UPDATE -r ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/setup.cfg������������������������������������������������������������������������������0000664�0000000�0000000�00000000100�13771420143�0014616�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������[install] single_version_externally_managed = 1 record = RECORD ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/setup.py�������������������������������������������������������������������������������0000664�0000000�0000000�00000005153�13771420143�0014524�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python import sys if sys.version_info <= (3, 2): sys.stderr.write("Sonata requires Python 3.2+\n") sys.exit(1) from distutils.dep_util import newer import glob import os from setuptools import setup, Extension from sonata.version import version tests_require = [] if sys.version_info < (3, 3): # Available as unittest.mock since 3.3 tests_require.append('mock') def capture(cmd): return os.popen(cmd).read().strip() def generate_translation_files(): lang_files = [] langs = (os.path.splitext(l)[0] for l in os.listdir('po') if l.endswith('po') and l != "messages.po") for lang in langs: pofile = os.path.join("po", "%s.po" % lang) modir = os.path.join("sonata", "share", "locale", lang, "LC_MESSAGES") mofile = os.path.join(modir, "sonata.mo") if not os.path.exists(modir): os.makedirs(modir) lang_files.append(('share/locale/%s/LC_MESSAGES' % lang, [mofile])) if newer(pofile, mofile): print("Generating %s" % mofile) os.system("msgfmt %s -o %s" % (pofile, mofile)) return lang_files versionfile = open("sonata/genversion.py","wt") versionfile.write(""" # generated by setup.py VERSION = 'v%s' """ % version) versionfile.close() data_files = [ ('share/sonata', ['README.rst', 'CHANGELOG', 'TODO', 'TRANSLATORS']), ('share/applications', ['sonata.desktop']), ('share/man/man1', ['sonata.1']), ] + generate_translation_files() setup( name='Sonata', version=version, description='GTK+ client for the Music Player Daemon (MPD).', author='Scott Horowitz', author_email='stonecrest@gmail.com', url='http://www.nongnu.org/sonata/', classifiers=[ 'Development Status :: 4 - Beta', 'Environment :: X11 Applications', 'Intended Audience :: End Users/Desktop', 'License :: GNU General Public License (GPL)', 'Operating System :: Linux', 'Programming Language :: Python', 'Topic :: Multimedia :: Sound :: Players', ], packages=["sonata", "sonata.plugins"], package_dir={"sonata": "sonata"}, data_files=data_files, package_data={ 'sonata': [ 'pixmaps/*.*', 'ui/*.glade', 'ui/*.css', 'plugins/ui/*.glade', 'plugins/ui/*.css', ], }, entry_points={ 'console_scripts': [ 'sonata=sonata.launcher:run', ] }, test_suite='sonata.tests', tests_require=tests_require, ) try: os.remove("sonata/genversion.py") os.remove("sonata/genversion.pyc") except: pass ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/sonata.1�������������������������������������������������������������������������������0000664�0000000�0000000�00000002547�13771420143�0014365�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.TH SONATA 1 "October 20, 2006" .SH NAME sonata \- GTK+ client for the Music Player Daemon .SH SYNOPSIS .B sonata [\fIOPTION\fR] .SH DESCRIPTION Sonata is an elegant GTK+ music client for the Music Player Daemon (MPD). .SH OPTIONS .TP .B \-h\fR, \fB\-\-help Show this help and exit .TP .B \-p\fR, \fB\-\-popup Popup song notification (requires D\-Bus) .TP .B \-t\fR, \fB\-\-toggle Toggles whether the app is minimized to tray or visible (requires D\-Bus) .TP .B \-v\fR, \fB\-\-version Show version information and exit .TP .B \-\-hidden Start app hidden (requires systray) .TP .B \-\-visible Start app visible (requires systray) .TP .B \-\-profile\=[NUM] Start with profile [NUM] .TP .B play Play song in playlist .TP .B pause Pause currently playing song .TP .B stop Stop currently playing song .TP .B next Play next song in playlist .TP .B prev Play previous song in playlist .TP .B pp Toggle play/pause; plays if stopped .TP .B repeat Toggle repeat mode .TP .B random Toggle random mode .TP .B info Display current song info .TP .B status Display MPD status .SH "SEE ALSO" .PP Website: http://www.nongnu.org/sonata/ .PP MPD Website: http://www.musicpd.org .SH AUTHOR Sonata was written by Scott Horowitz <stonecrest@gmail.com>. .PP This manual page is currently maintained by Scott Horowitz <stonecrest@gmail.com>. It was originally written by Michal Cihar <michal@cihar.com>. ���������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/sonata.desktop�������������������������������������������������������������������������0000664�0000000�0000000�00000000312�13771420143�0015662�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ [Desktop Entry] Name=Sonata Comment=An elegant GTK+ MPD client Exec=sonata Terminal=false Type=Application Icon=sonata Categories=GTK;AudioVideo;Player; StartupNotify=true Keywords=Player;Music;Audio; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/sonata/��������������������������������������������������������������������������������0000775�0000000�0000000�00000000000�13771420143�0014273�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/sonata/__init__.py���������������������������������������������������������������������0000664�0000000�0000000�00000001464�13771420143�0016411�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������__license__ = """ Sonata, an elegant GTK+ client for the Music Player Daemon Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> Copyright 2009-2014 Jonathan Ballet <jon@multani.info> This file is part of Sonata. Sonata is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Sonata is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Sonata. If not, see <http://www.gnu.org/licenses/>. """ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/sonata/about.py������������������������������������������������������������������������0000664�0000000�0000000�00000022744�13771420143�0015770�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# coding=utf-8 # Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> # Copyright 2009-2014 Jonathan Ballet <jon@multani.info> # # This file is part of Sonata. # # Sonata is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Sonata is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Sonata. If not, see <http://www.gnu.org/licenses/>. import gettext import os from gi.repository import Gtk, GdkPixbuf from sonata import misc, ui class About: def __init__(self, parent_window, config, version): self.parent_window = parent_window self.config = config self.version = version self.about_dialog = None self.shortcuts_dialog = None def about_close(self, _event, _data=None): if _data == Gtk.ResponseType.DELETE_EVENT or \ _data == Gtk.ResponseType.CANCEL: self.about_dialog.hide() return True def shortcuts_close(self, _event, _data=None): if _data == Gtk.ResponseType.DELETE_EVENT or \ _data == Gtk.ResponseType.CANCEL: self.shortcuts_dialog.hide() return True def shortcuts_close_click_cb(self, _button): self.shortcuts_dialog.hide() def _init_shortcuts_dialog(self): # define the shortcuts and their descriptions # these are all gettextable # Keep them here (not as XML) as they're more convenient this way mainshortcuts = \ [["F1", _("About Sonata")], ["F5", _("Preferences")], ["F11", _("Fullscreen Artwork Mode")], ["Alt-[1-5]", _("Switch to [1st-5th] tab")], ["Alt-C", _("Connect to MPD")], ["Alt-D", _("Disconnect from MPD")], ["Alt-R", _("Randomize current playlist")], ["Alt-Down", _("Expand player")], ["Alt-Left", _("Switch to previous tab")], ["Alt-Right", _("Switch to next tab")], ["Alt-Up", _("Collapse player")], ["Ctrl-H", _("Search library")], ["Ctrl-Q", _("Quit")], ["Ctrl-Shift-U", _("Update entire library")], ["Menu", _("Display popup menu")], ["Escape", _("Minimize to system tray (if enabled)")]] playbackshortcuts = \ [["Ctrl-Left", _("Previous track")], ["Ctrl-Right", _("Next track")], ["Ctrl-P", _("Play/Pause")], ["Ctrl-S", _("Stop")], ["Ctrl-Minus", _("Lower the volume")], ["Ctrl-Plus", _("Raise the volume")]] currentshortcuts = \ [["Enter/Space", _("Play selected song")], ["Delete", _("Remove selected song(s)")], ["Ctrl-I", _("Center currently playing song")], ["Ctrl-T", _("Edit selected song's tags")], ["Ctrl-Shift-S", _("Save to new playlist")], ["Ctrl-Delete", _("Clear list")], ["Alt-R", _("Randomize list")]] libraryshortcuts = \ [["Enter/Space", _("Add selected song(s) or enter directory")], ["Backspace", _("Go to parent directory")], ["Ctrl-D", _("Add selected item(s)")], ["Ctrl-R", _("Replace with selected item(s)")], ["Ctrl-T", _("Edit selected song's tags")], ["Ctrl-Shift-D", _("Add selected item(s) and play")], ["Ctrl-Shift-R", _("Replace with selected item(s) and play")], ["Ctrl-U", _("Update selected item(s)/path(s)")]] playlistshortcuts = \ [["Enter/Space", _("Add selected playlist(s)")], ["Delete", _("Remove selected playlist(s)")], ["Ctrl-D", _("Add selected playlist(s)")], ["Ctrl-R", _("Replace with selected playlist(s)")], ["Ctrl-Shift-D", _("Add selected playlist(s) and play")], ["Ctrl-Shift-R", _(('Replace with selected ' 'playlist(s) and play'))]] streamshortcuts = \ [["Enter/Space", _("Add selected stream(s)")], ["Delete", _("Remove selected stream(s)")], ["Ctrl-D", _("Add selected stream(s)")], ["Ctrl-R", _("Replace with selected stream(s)")], ["Ctrl-Shift-D", _("Add selected stream(s) and play")], ["Ctrl-Shift-R", _(('Replace with selected ' 'stream(s) and play'))]] infoshortcuts = \ [["Ctrl-T", _("Edit playing song's tags")]] # define the main array- this adds headings to each section of # shortcuts that will be displayed shortcuts = [[_("Main Shortcuts"), mainshortcuts], [_("Playback Shortcuts"), playbackshortcuts], [_("Current Shortcuts"), currentshortcuts], [_("Library Shortcuts"), libraryshortcuts], [_("Playlist Shortcuts"), playlistshortcuts], [_("Stream Shortcuts"), streamshortcuts], [_("Info Shortcuts"), infoshortcuts]] self.shortcuts_dialog = self.builder.get_object('shortcuts_dialog') self.shortcuts_dialog.connect('response', self.shortcuts_close) self.shortcuts_dialog.connect('delete_event', self.shortcuts_close) shortcuts_close_button = self.builder.get_object( 'shortcuts_dialog_closebutton') shortcuts_close_button.connect('clicked', self.shortcuts_close_click_cb) # each pair is a [ heading, shortcutlist ] vbox = self.builder.get_object('shortcuts_dialog_content_box') for heading, shortcutlist in shortcuts: titlelabel = Gtk.Label(heading, xalign=0) titlelabel.get_style_context().add_class('heading') vbox.pack_start(titlelabel, False, False, 2) # print the items of [ shortcut, desc ] for shortcut, desc in shortcutlist: tmphbox = Gtk.HBox() tmplabel = Gtk.Label('{}:'.format(shortcut), xalign=0) tmplabel.get_style_context().add_class('shortcut') tmpdesc = Gtk.Label(desc, xalign=0, wrap=False) tmphbox.pack_start(tmplabel, False, False, 2) tmphbox.pack_start(tmpdesc, True, True, 2) vbox.pack_start(tmphbox, False, False, 2) vbox.pack_start(Gtk.Label(" "), False, False, 2) def about_shortcuts(self, _button): if not self.shortcuts_dialog: self._init_shortcuts_dialog() self.shortcuts_dialog.show_all() self.shortcuts_dialog.run() def statstext(self, stats): song_count = int(stats['songs']) song_text = ngettext('{count} song.', '{count} songs.', song_count).format(count=song_count) album_count = int(stats['albums']) album_text = ngettext('{count} album.', '{count} albums.', album_count).format(count=album_count) artist_count = int(stats['artists']) artist_text = ngettext('{count} artist.', '{count} artists.', artist_count).format(count=artist_count) try: db_playtime = float(stats['db_playtime']) hours = int(misc.convert_time(db_playtime).split(':')[-3]) except: hours = 0 if hours >= 24: days = round(hours / 24, 1) time_text = ngettext('{count} day of bliss.', '{count} days of bliss.', days).format(count=days) else: time_text = ngettext('{count} hour of bliss.', '{count} hours of bliss.', hours).format(count=hours) parts = (song_text, album_text, artist_text, time_text) live_parts = [part for part in parts if part is not None] return '\n'.join(live_parts) def about_load(self, stats): self.builder = ui.builder('about') self.provider = ui.css_provider('about') self.about_dialog = self.builder.get_object('about_dialog') try: self.about_dialog.set_transient_for(self.parent_window) except: pass self.about_dialog.set_version(self.version) if stats: self.about_dialog.set_copyright(self.statstext(stats)) context = self.about_dialog.get_style_context() logo_icon = Gtk.IconFactory.lookup_default('sonata-large') logo_pb = logo_icon.render_icon_pixbuf(context, -1) self.about_dialog.set_logo(logo_pb) # Add button to show keybindings: children = self.about_dialog.action_area.get_children()[-1] self.about_dialog.action_area.reorder_child(children, -2) # Connect to callbacks self.about_dialog.connect('response', self.about_close) self.about_dialog.connect('delete_event', self.about_close) shortcut_button = self.builder.get_object('shortcut_button') shortcut_button.connect('clicked', self.about_shortcuts) self.about_dialog.show_all() ����������������������������sonata-1.7.0/sonata/artwork.py����������������������������������������������������������������������0000664�0000000�0000000�00000066176�13771420143�0016356�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> # Copyright 2009-2014 Jonathan Ballet <jon@multani.info> # # This file is part of Sonata. # # Sonata is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Sonata is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Sonata. If not, see <http://www.gnu.org/licenses/>. import collections import logging import os import re import shutil import threading # artwork_update starts a thread _artwork_update from gi.repository import Gtk, Gdk, GdkPixbuf, GLib, GObject from sonata import img, ui, misc, consts, mpdhelper as mpdh from sonata.song import SongRecord from sonata.pluginsystem import pluginsystem COVERS_DIR = os.path.expanduser("~/.covers") COVERS_TEMP_DIR = os.path.join(COVERS_DIR, 'temp') logger = logging.getLogger(__name__) class ArtworkLocator: """Find and return artwork paths requested for songs.""" def __init__(self, config): self.config = config def _get_locations(self, artist, album, song_dir, default_kind=None): """Get the various possible locations for the artwork for one song.""" artist = (artist or "").replace("/", "") album = (album or "").replace("/", "") song_dir = os.path.join( self.config.current_musicdir, get_multicd_album_root_dir(song_dir) ) join = os.path.join custom_filename = self.config.art_location_custom_filename # Build a map of location kinds and actual locations. The order is # important and represents the most common/easiest to the least # common/more expensive ways of finding covers. # Each location is an iterable of possibly several locations. pre_map = [ ('HOMECOVERS', (COVERS_DIR, "%s-%s.jpg" % (artist, album))), ('COVER', (song_dir, "cover.jpg")), ('FOLDER', (song_dir, "folder.jpg")), ('ALBUM', (song_dir, "album.jpg")), ('CUSTOM', ((song_dir, custom_filename) if len(custom_filename) > 0 else [] )), ('MISC', (join(song_dir, location) for location in consts.ART_LOCATIONS_MISC)), ('SINGLE', self._lookup_single_image(song_dir)), ] map = collections.OrderedDict() for (fake_key, value) in pre_map: key = getattr(consts, 'ART_LOCATION_%s' % fake_key) if isinstance(value, tuple): value = [join(*value)] map[key] = value # Move the default kind requested to the beginning of the map, so it has # priority over the other. if default_kind in map: map.move_to_end(default_kind, last=False) return map def _lookup_single_image(self, song_dir): """Look up a song directory to find one image to be the artwork. This basically loops over all the files in a song directory and returns something only if it found exactly one image. This will be the artwork image. """ try: files = os.listdir(song_dir) except OSError: return get_ext = lambda path: os.path.splitext(path)[1][1:] artworks = [f for f in files if get_ext(f) in img.VALID_EXTENSIONS] if len(artworks) != 1: return yield os.path.join(song_dir, artworks[0]) def path(self, artist, album, song_dir, specific_kind=None): """Return the artwork path from a song data (without checks) By default, the location of the song is made based on the preferences set by the user, but this can be overriden if necessary. No guarantees are made with the respect to the path validity. """ locations_map = self._get_locations(artist, album, song_dir, self.config.art_location) if specific_kind is None: specific_kind = self.config.art_location try: result = next(iter(locations_map[specific_kind])) except StopIteration: # We tried an empty location :( result = None return result def path_from_song(self, song, specific_kind=None): """Same as `path()` but using a Song object.""" return self.path(song.artist, song.album, os.path.dirname(song.file), specific_kind) def locate(self, artist, album, song_dir): """Locate an actual artwork for the specified data. Sonata tries *very* hard to find an artwork for the specified data. It looks in "well-known" places and return the first artwork which actually exists. """ # XXX: the 'kind' returned can probably be removed once the calling code # will be refactored. It is used only for some kind of thread # concurrency management, and is probably buggy and not optimal... locations_map = self._get_locations(artist, album, song_dir, self.config.art_location) for kind, locations in locations_map.items(): for location in locations: if os.path.exists(location): return (kind, location) return (None, None) def get_multicd_album_root_dir(albumpath): """Go one dir upper for multicd albums >>> from sonata.artwork import get_multicd_album_root_dir as f >>> f('Moonspell/1995 - Wolfheart/cd 2') 'Moonspell/1995 - Wolfheart' >>> f('2007 - Dark Passion Play/CD3') '2007 - Dark Passion Play' >>> f('Ayreon/2008 - 01011001/CD 1 - Y') 'Ayreon/2008 - 01011001' """ if re.compile(r'(?i)cd\s*\d+').match(os.path.split(albumpath)[1]): albumpath = os.path.split(albumpath)[0] return albumpath def artwork_path(song, config): if song.name is not None: f = artwork_stream(song.name) else: f = ArtworkLocator(config).path_from_song(song) return f def artwork_stream(stream_name): return os.path.join(os.path.expanduser('~/.covers'), "%s.jpg" % stream_name.replace("/", "")) class Artwork(GObject.GObject): __gsignals__ = { 'artwork-changed': (GObject.SIGNAL_RUN_FIRST, None, (GdkPixbuf.Pixbuf,)), 'artwork-reset': (GObject.SIGNAL_RUN_FIRST, None, ()), } def __init__(self, config, is_lang_rtl, schedule_gc_collect, imagelist_append, remotefilelist_append, allow_art_search, status_is_play_or_pause, album_image, tray_image): super().__init__() self.config = config self.locator = ArtworkLocator(config) self.album_filename = 'sonata-album' # constants from main self.is_lang_rtl = is_lang_rtl # callbacks to main XXX refactor to clear this list self.schedule_gc_collect = schedule_gc_collect self.imagelist_append = imagelist_append self.remotefilelist_append = remotefilelist_append self.allow_art_search = allow_art_search self.status_is_play_or_pause = status_is_play_or_pause # local pixbufs, image file names self.sonatacd = Gtk.IconFactory.lookup_default('sonata-cd') self.sonatacd_large = Gtk.IconFactory.lookup_default('sonata-cd-large') self.albumpb = None self.currentpb = None # local UI widgets provided to main by getter methods self.albumimage = album_image self.albumimage.set_from_icon_set(self.sonatacd, -1) self.tray_album_image = tray_image # local version of Main.songinfo mirrored by update_songinfo self.songinfo = None # local state self.lastalbumart = None self.single_img_in_dir = None self.misc_img_in_dir = None self.stop_art_update = False self.downloading_image = False self.lib_art_cond = None # local artwork, cache for library self.lib_model = None self.lib_art_rows_local = [] self.lib_art_rows_remote = [] self.lib_art_pb_size = 0 self.cache = ArtworkCache(self.config) self.cache.load() def update_songinfo(self, songinfo): self.songinfo = songinfo def on_reset_image(self, _action): if self.songinfo: if 'name' in self.songinfo: # Stream, remove file: misc.remove_file(artwork_stream(self.songinfo.name)) else: # Normal song: misc.remove_file(self.locator.path_from_song(self.songinfo)) misc.remove_file(self.locator.path_from_song( self.songinfo, consts.ART_LOCATION_HOMECOVERS)) # Use blank cover as the artwork dest_filename = self.locator.path_from_song( self.songinfo, consts.ART_LOCATION_HOMECOVERS) try: emptyfile = open(dest_filename, 'w') emptyfile.close() except IOError: pass self.artwork_update(True) def artwork_set_tooltip_art(self, pix): # Set artwork pix = pix.new_subpixbuf(0, 0, 77, 77) self.tray_album_image.set_from_pixbuf(pix) del pix def artwork_stop_update(self): self.stop_art_update = True def artwork_is_downloading_image(self): return self.downloading_image def library_artwork_init(self, model, pb_size): self.lib_model = model self.lib_art_pb_size = pb_size self.lib_art_cond = threading.Condition() thread = threading.Thread(target=self._library_artwork_update) thread.name = "ArtworkLibraryUpdate" thread.daemon = True thread.start() def library_artwork_update(self, model, start_row, end_row, albumpb): self.albumpb = albumpb # Update self.lib_art_rows_local with new rows followed # by the rest of the rows. self.lib_art_cond.acquire() self.lib_art_rows_local = [] self.lib_art_rows_remote = [] start = start_row.get_indices()[0] end = end_row.get_indices()[0] test_rows = list(range(start, end + 1)) + list(range(len(model))) for row in test_rows: i = model.get_iter((row,)) icon = model.get_value(i, 0) if icon == self.albumpb: data = model.get_value(i, 1) self.lib_art_rows_local.append((i, data, icon)) self.lib_art_cond.notifyAll() self.lib_art_cond.release() def _library_artwork_update(self): while True: # Wait for items.. self.lib_art_cond.acquire() while(len(self.lib_art_rows_local) == 0 and \ len(self.lib_art_rows_remote) == 0): self.lib_art_cond.wait() self.lib_art_cond.release() # Try first element, giving precedence to local queue: if self.lib_art_rows_local: i, data, icon = self.lib_art_rows_local.pop(0) cb = self._library_artwork_update_local elif self.lib_art_rows_remote: i, data, icon = self.lib_art_rows_remote.pop(0) cb = self._library_artwork_update_remote else: continue cache_key = SongRecord(artist=data.artist, album=data.album, path=data.path) # Try to replace default icons with cover art: pb = self.cache.get_pixbuf(cache_key, self.lib_art_pb_size) cb(i, data, icon, cache_key, pb) def _library_artwork_update_local(self, i, data, icon, cache_key, pb): filename = None if pb is not None: # Continue to rescan for local artwork if we are # displaying the default album image, in case the user # has added a local image since we first scanned. filename = self.cache.get(cache_key) if os.path.basename(filename) == os.path.basename( self.album_filename): filename = None pb = None # No cached pixbuf, try local/remote search: if pb is None: pb, filename = self.library_get_album_cover( data.path, data.artist, data.album, self.lib_art_pb_size) # Set pixbuf icon in model; add to cache if pb is not None and filename is not None: self.cache.set(cache_key, filename) GLib.idle_add(self.library_set_cover, i, pb, data) if pb is None and self.config.covers_pref == consts.ART_LOCAL_REMOTE: # No local art found, add to remote queue for later self.lib_art_rows_remote.append((i, data, icon)) def _library_artwork_update_remote(self, i, data, icon, cache_key, pb): filename = None # No cached pixbuf, try local/remote search: if pb is None: pb, filename = self.library_get_album_cover(data.path, data.artist, data.album, self.lib_art_pb_size) filename = self.locator.path(data.artist, data.album, data.path) self.artwork_download_img_to_file(data.artist, data.album, filename) # Set pixbuf icon in model; add to cache if pb is not None and filename is not None: self.cache.set(cache_key, filename) GLib.idle_add(self.library_set_cover, i, pb, data) if pb is None: # No remote art found, store self.albumpb filename in cache self.cache.set(cache_key, self.album_filename) def library_set_image_for_current_song(self, cache_key): # Search through the rows in the library to see # if we match the currently playing song: if cache_key.artist is None and cache_key.album is None: return for row in self.lib_model: if str(cache_key.artist).lower() == str(row[1].artist).lower() \ and str(cache_key.album).lower() == str(row[1].album).lower(): pb = self.cache.get_pixbuf(cache_key, self.lib_art_pb_size) if pb: self.lib_model.set_value(row.iter, 0, pb) def library_set_cover(self, i, pb, data): if self.lib_model.iter_is_valid(i): if self.lib_model.get_value(i, 1) == data: self.lib_model.set_value(i, 0, pb) def library_get_album_cover(self, song_dir, artist, album, pb_size): _tmp, coverfile = self.locator.locate(artist, album, song_dir) if coverfile: try: coverpb = GdkPixbuf.Pixbuf.new_from_file_at_size(coverfile, pb_size, pb_size) except: # Delete bad image: misc.remove_file(coverfile) return (None, None) w = coverpb.get_width() h = coverpb.get_height() coverpb = img.do_style_cover(self.config, coverpb, w, h) return (coverpb, coverfile) return (None, None) def artwork_update(self, force=False): if force: self.lastalbumart = None self.stop_art_update = False if not self.config.show_covers: return if not self.songinfo: self.artwork_set_default_icon() return if self.status_is_play_or_pause(): thread = threading.Thread(target=self._artwork_update) thread.name = "ArtworkUpdate" thread.daemon = True thread.start() else: self.artwork_set_default_icon() def _artwork_update(self): if 'name' in self.songinfo: # Stream streamfile = artwork_stream(self.songinfo.name) if os.path.exists(streamfile): GLib.idle_add(self.artwork_set_image, streamfile, None, None, None) else: self.artwork_set_default_icon() else: # Normal song: artist = self.songinfo.artist or "" album = self.songinfo.album or "" path = os.path.dirname(self.songinfo.file) if len(artist) == 0 and len(album) == 0: self.artwork_set_default_icon(artist, album, path) return filename = self.locator.path_from_song(self.songinfo) if filename == self.lastalbumart: # No need to update.. self.stop_art_update = False return self.lastalbumart = None imgfound = self.artwork_check_for_local(artist, album, path) if not imgfound: if self.config.covers_pref == consts.ART_LOCAL_REMOTE: imgfound = self.artwork_check_for_remote(artist, album, path, filename) def artwork_check_for_local(self, artist, album, path): self.artwork_set_default_icon(artist, album, path) self.misc_img_in_dir = None self.single_img_in_dir = None location_type, filename = self.locator.locate( self.songinfo.artist, self.songinfo.album, os.path.dirname(self.songinfo.file)) if location_type is not None and filename: if location_type == consts.ART_LOCATION_MISC: self.misc_img_in_dir = filename elif location_type == consts.ART_LOCATION_SINGLE: self.single_img_in_dir = filename GLib.idle_add(self.artwork_set_image, filename, artist, album, path) return True return False def artwork_check_for_remote(self, artist, album, path, filename): self.artwork_set_default_icon(artist, album, path) self.artwork_download_img_to_file(artist, album, filename) if os.path.exists(filename): GLib.idle_add(self.artwork_set_image, filename, artist, album, path) return True return False def artwork_set_default_icon(self, artist=None, album=None, path=None): GLib.idle_add(self.albumimage.set_from_icon_set, self.sonatacd, -1) self.emit('artwork-reset') GLib.idle_add(self.tray_album_image.set_from_icon_set, self.sonatacd, -1) self.lastalbumart = None # Also, update row in library: if artist is not None: cache_key = SongRecord(artist=artist, album=album, path=path) self.cache.set(cache_key, self.album_filename) GLib.idle_add(self.library_set_image_for_current_song, cache_key) def artwork_set_image(self, filename, artist, album, path, info_img_only=False): # Note: filename arrives here is in FILESYSTEM_CHARSET, not UTF-8! if self.artwork_is_for_playing_song(filename): if os.path.exists(filename): # We use try here because the file might exist, but might # still be downloading or corrupt: try: pix = GdkPixbuf.Pixbuf.new_from_file(filename) except: # If we have a 0-byte file, it should mean that # sonata reset the image file. Otherwise, it's a # bad file and should be removed. if os.stat(filename).st_size != 0: misc.remove_file(filename) return self.currentpb = pix if not info_img_only: # Store in cache cache_key = SongRecord(artist=artist, album=album, path=path) self.cache.set(cache_key, filename) # Artwork for tooltip, left-top of player: (pix1, w, h) = img.get_pixbuf_of_size(pix, 75) pix1 = img.do_style_cover(self.config, pix1, w, h) pix1 = img.pixbuf_add_border(pix1) pix1 = img.pixbuf_pad(pix1, 77, 77) self.albumimage.set_from_pixbuf(pix1) self.artwork_set_tooltip_art(pix1) del pix1 # Artwork for library, if current song matches: self.library_set_image_for_current_song(cache_key) self.emit('artwork-changed', pix) del pix self.lastalbumart = filename self.schedule_gc_collect() def artwork_set_image_last(self): self.artwork_set_image(self.lastalbumart, None, None, None, True) def artwork_is_for_playing_song(self, filename): # Since there can be multiple threads that are getting album art, # this will ensure that only the artwork for the currently playing # song is displayed if self.status_is_play_or_pause() and self.songinfo: if 'name' in self.songinfo: streamfile = artwork_stream(self.songinfo.name) if filename == streamfile: return True else: # Normal song: if (filename in [self.locator.path_from_song(self.songinfo, l) for l in [consts.ART_LOCATION_HOMECOVERS, consts.ART_LOCATION_COVER, consts.ART_LOCATION_ALBUM, consts.ART_LOCATION_FOLDER, consts.ART_LOCATION_CUSTOM]] or (self.misc_img_in_dir and \ filename == self.misc_img_in_dir) or (self.single_img_in_dir and filename == \ self.single_img_in_dir)): return True # If we got this far, no match: return False def artwork_download_img_to_file(self, artist, album, dest_filename, all_images=False): downloader = CoverDownloader(dest_filename, self.download_progress, all_images) self.downloading_image = True # Fetch covers from covers websites or such... cover_fetchers = pluginsystem.get('cover_fetching') for plugin, callback in cover_fetchers: logger.info("Looking for covers for %r from %r (using %s)", album, artist, plugin.name) try: callback(artist, album, downloader.on_save_callback, downloader.on_err_cb) except Exception as e: if logger.isEnabledFor(logging.DEBUG): log = logger.exception else: log = logger.warning log("Error while downloading covers from %s: %s", plugin.name, e) if downloader.found_images: break self.downloading_image = False return downloader.found_images def download_progress(self, dest_filename_curr, i): # This populates Main.imagelist for the remote image window if os.path.exists(dest_filename_curr): pix = GdkPixbuf.Pixbuf.new_from_file(dest_filename_curr) pix = pix.scale_simple(148, 148, GdkPixbuf.InterpType.HYPER) pix = img.do_style_cover(self.config, pix, 148, 148) pix = img.pixbuf_add_border(pix) if self.stop_art_update: del pix return False # don't continue to next image self.imagelist_append([i + 1, pix]) del pix self.remotefilelist_append(dest_filename_curr) if i == 0: self.allow_art_search() ui.change_cursor(None) return True # continue to next image def have_last(self): if self.lastalbumart is not None: return True return False class CoverDownloader: """Download covers and store them in temporary files""" def __init__(self, path, progress_cb, all_images): self.path = path self.progress_cb = progress_cb self.max_images = 50 if all_images else 1 self.current = 0 @property def found_images(self): return self.current != 0 def on_save_callback(self, content_fp): """Return True to continue finding covers, False to stop finding covers.""" self.current += 1 if self.max_images > 1: path = self.path.replace("<imagenum>", str(self.current)) else: path = self.path with open(path, 'wb') as fp: shutil.copyfileobj(content_fp, fp) if self.max_images > 1: # XXX: progress_cb makes sense only if we are downloading several # images, since it is supposed to update the choose artwork # dialog... return self.progress_cb(path, self.current-1) def on_err_cb(self, reason=None): """Return True to stop finding, False to continue finding covers.""" return False class ArtworkCache: def __init__(self, config, path=None): self.logger = logging.getLogger('sonata.artwork.cache') self._cache = {} self.config = config self.path = path if path is not None else \ os.path.expanduser("~/.config/sonata/art_cache") def set(self, key, value): self.logger.debug("Setting %r to %r", key, value) self._cache[key] = value def get(self, key): self.logger.debug("Requesting for %r", key) return self._cache.get(key) def get_pixbuf(self, key, size, default=None): self.logger.debug("Requesting pixbuf for %r", key) try: path = self._cache[key] except KeyError: return default if not os.path.exists(path): self._cache.pop(key, None) return default try: p = GdkPixbuf.Pixbuf.new_from_file_at_size(path, size, size) except: self.logger.exception("Unable to load %r at size (%d, %d)", path, size, size) raise return img.do_style_cover(self.config, p, size, size) def save(self): self.logger.debug("Saving to %s", self.path) misc.create_dir(os.path.dirname(self.path)) try: with open(self.path, 'w', encoding="utf8") as f: f.write(repr(self._cache)) except IOError as e: self.logger.info("Unable to save: %s", e) def load(self): self.logger.debug("Loading from %s", self.path) self._cache = {} try: with open(self.path, 'r', encoding="utf8") as f: self._cache = eval(f.read()) except (IOError, SyntaxError) as e: self.logger.info("Unable to load: %s", e) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/sonata/audioscrobbler.py���������������������������������������������������������������0000664�0000000�0000000�00000102620�13771420143�0017645�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# $Id$ """ ~~~~~~~~~~~ PyScrobbler ~~~~~~~~~~~ Python Classes for AudioScrobbler ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ A set of python classes for interacting with the Last.fm AudioScrobbler services. AudioScrobblerQuery AudioScrobblerQuery is used to consume the web services that provide similar artists, charts, tags and so on AudioScrobblerPost AudioScrobblerPost is used to update your personal play information for those of you (like me) who've been stoopid enough to write your own player. AudioScrobblerQuery: AudioScrobbler Web Service Consumption ============================================================= A set of classes for consuming the AudioScrobbler web services. Currently we consume protocol 1.0, as defined at: http://www.audioscrobbler.net/data/webservices Basic usage ----------- >>> lips = AudioScrobblerQuery(artist='The Flaming Lips') >>> for artist in lips.similar(): ... print artist.name, artist.mbid ... or >>> for i in AudioScrobblerQuery(user='offmessage').topalbums() ... print i.name, i.image.small ... A certain number of the services take a querystring (for example a user's weekly artist chart takes a start and end date). These can be passed as follows: >>> offmessage = AudioScrobblerQuery(user='offmessage') >>> for i in offmessage.weeklyartistchart(_from=1114965332, to=1115570132): ... print i.name, i.chartposition ... Note that we have had to prefix the ``from`` keyword with an underscore (``_``). This is because ``from`` is a reserved word in Python and can't be used as a parameter name. Any parameter passed with a leading underscore will have that underscore stripped (so ``_from`` is passed as ``from``, as ``_foo`` would be passed as ``foo``). If an element has an attribute (for example the artist has an ``mbid`` in /user/.../topalbums.xml) these can be accessed as a dictionary key of that element: >>> offmessage = AudioScrobblerQuery(user='offmessage') >>> for i in offmessage.topalbums(): ... print i.name, i.artist, i.artist['mbid'] ... if you're not sure if an element has an attribute they can be accessed instead using the ``get()`` method: >>> offmessage = AudioScrobblerQuery(user='offmessage') >>> for i in offmessage.topalbums(): ... print i.name, i.artist, i.artist.get('mbid', '') ... More control ------------ There are 2 additional keyword arguments that you can offer at the point of instantiation of the AudioScrobblerQuery object: host If the lovely people at Last.fm change their server name, or if you set up some kind of local proxy of their services you can set the host from which you get the XML. Usage: >>> lips = AudioScrobblerQuery(artist='The Flaming Lips', ... host='audioscrobbler.isotoma.com') Default is ``'ws.audioscrobbler.com'`` version If another version of the web services is released, and this code still holds up you can set the protocol version at instantiation. This is inserted into the request URL at the correct point (i.e. ws.audioscrobbler.com/**1.0**/artist/The+Flaming+Lips). Usage: >>> lips = AudioScrobberRequest(artist='The Flaming Lips', version='1.1') Default is ``'1.0'`` Caching ------- Each instance of the ``AudioScrobblerQuery`` maintains its own internal cache of requests, which are checked against the server's response. If the server returns a ``304`` (content not modified) we return the cached value, otherwise we return the result that the server gave us. This is all well and good, however at the time of writing the ``ws.audioscrobbler.com`` server does not support the ``304`` response for all pages, so you may find yourself making requests that you are sure should be cached, but in fact aren't. For example: http://ws.audioscrobbler.com/1.0/user/offmessage/topalbums.xml returns a ``304`` http://ws.audioscrobbler.com/1.0/artist/The+Flaming+Lips/similar.xml does not I have assumed that this is for a reason, and as such honour this behaviour. If a page does not return a ``Last-Modified`` header we do not cache it. Any page that does return such a header (but not the ``Pragma: no-cache`` header) gets cached. Any page that does return a ``Last-Modified`` header gets exactly what it sent to us sent back to it as the ``If-Modified-Since``. This is a fit of pragmatism based on the fact that calculating local dates and avoiding clock disparaties is not worth the effort. Also, note that the AudioScrobbler servers do not return the ``ETag`` header and so we do not look for it or refer to it. A last note ----------- These classes are for consuming the AudioScrobbler web services. As such each of the classes here have no ``set``, ``__setitem__`` or ``__setattr__`` methods. They are read only. If you want to actually manipulate the resulting XML you should access the underlying ElementTree_ instances directly using either the ``raw()`` or ``element()`` methods provided. You can then make use of the innate power of those classes directly: ``raw()`` returns an ElementTree: >>> tree = AudioScrobblerQuery(user='offmessage').topalbums().raw() while ``element()`` returns an Element at the point within the tree that you currently are: >>> lips = AudioScrobblerQuery(artist='The Flaming Lips') >>> elements = [ x.name.element() for x in lips.similar() ] which is equivalent to: >>> lips = AudioScrobberRequest(artist='The Flaming Lips') >>> elements = lips.similar().raw().findall('*/name') As an alternative you could also look at XMLTramp_, which is another XML manipulator designed primarily for consuming web services (and used in the FlickrClient_ script that gave me much inspiration for these classes). Last but not least a mention should go to BeautifulSoup_, just because it is the most powerful and flexible of this type of application that I've used. It specialises in badly formed XML/HTML though, and luckily is not required in this instance. That said, it's a powerful beast and you should have a look at it the minute your requirements become more complex than this code supports. .. _ElementTree: http://effbot.org/zone/element.htm .. _XMLTramp: http://www.aaronsw.com/2002/xmltramp/ .. _BeautifulSoup: http://www.crummy.com/software/BeautifulSoup/ AudioScrobblerPost: Update Your Personal Play History ===================================================== A set of classes for posting playlist information to your Last.fm account. Please note that you will need your own account to use these classes. Updated to work with version 1.2 of the Audioscrobbler protocol. Some stuff about the time management and internal cache should go here. Basic usage (outdated) ----------- >>> track = dict(artist_name="The Flaming Lips", song_title="The Yeah Yeah Yeah Song", length=291, date_played="2006-04-29 04:20:00", album="At War With The Mystics", mbid="" ) >>> post = AudioScrobblerPost(user='offmessage', password='mypasswd') >>> post(**track) >>> More control ------------ There are a number of keywords that can be passed at the time of instantiation of the ``AudioScrobblerPost`` class: verbose Boolean. If you pass ``verbose=True`` every log line is also printed. Useful for debugging and in interactive scripts. client_name By default pyscrobbler uses the ``tst`` client name. If you deploy these classes in an application with a wide user base it seems to be advisable to apply for your own client name. If lots of people start to use these classes as is I will apply for a unique name for them. If you have your own, pass it in here (as a string) client_version Currently we use ``1.0``. This is because we are using the ``tst`` client name (see above) and anything lower seems to raise an ``UPDATE`` message from the post server at handshake. protocol_version By default we use ``1.1``. These classes are not compatible with Protocol 1.0. It's unlikely they will be compatible with any later versions. The changes between 1.0 and 1.1 were pretty major; I can't see they'd be any less major for the next version. host By default we use ``post.audioscrobbler.com``. If the server name changes (or you want to run tests) you can pass a different host name here. In fact, the url that we authenticate against is built as ``"http://%s/?%s" % (host, params)`` so as long as your host string makes a valid url in that format, go for it. Note the trailing slash between host and the query string. This seems to be a requirement of urllib2. This means that your test auth script should be able to be called that way. Putting them to use in real life ================================ Some advice on using these classes. ``timeout`` ----------- I've not done anything about the socket timeout on the running system. It's not really this code's place to do anything about it, but it is something that probably needs sorting out, otherwise your scripts will hang for as long as your timeout setting if there is a problem with the Last.fm servers (which there appears to be fairly frequently with the submissions servers). Generally, if you are on a slow link or one with poor latency you can up the timeout so that your requests don't keep failing unnecessarily. However, if you're on a quick link you may want to lower it as low as 10 seconds, as the wait can be agonising if you're making a few requests and the server is not responding. Thanks ====== I took a considerable amount of inspiration from Michael Campeotto's FlickrClient_ script for AudioScrobblerQuery I've taken even greater amounts of inspiration from Mike Bleyer's iPodScrobbler_ script for AudioScrobblerPost. .. _FlickrClient: http://micampe.it/things/flickrclient .. _iPodScrobbler: http://www.hoc.net/mike/source/iPodScrobbler/ TODO ==== Mad leet reStructuredText epydoc mashup Get that sorted. Example query script Actually write some example query scripts :) Document use of the factory class AudioScrobbler License ======= Copyright 2011 Andy Theyers Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. """ __author__ = "Andy Theyers <andy@isotoma.com>" __version__ = "$Revision$"[11:-2] __docformat__ = "restructuredtext" import datetime import locale import hashlib import site import logging import sys import time import urllib.error, urllib.parse, urllib.request import configparser import os from xml.etree import ElementTree # This is lifted in the most part from iPodScrobbler (see docs above) # Get the base local encoding enc = 'ascii' try: enc = site.encoding except: pass if enc == 'ascii' and locale.getpreferredencoding(): enc = locale.getpreferredencoding() # if we are on MacOSX, we default to UTF8 # because apples python reports 'ISO8859-1' as locale, but MacOSX uses utf8 if sys.platform == 'darwin': enc = 'utf8' # AudioScrobblerQuery configuration settings audioscrobbler_request_version = '1.0' audioscrobbler_request_host = 'ws.audioscrobbler.com' # AudioScrobblerPost configuration settings audioscrobbler_post_version = '1.2' #updated audioscrobbler_post_host = 'post.audioscrobbler.com' client_name = 'sna' pyscrobbler_version = '1.0.0.0' # This is set to 1.0 while we use # client_name = u'tst' as we keep getting # UPDATE responses with anything less. def lines_from_utf8(lines): return [line.decode('utf-8') for line in lines] class AudioScrobblerError(Exception): """ The base AudioScrobbler error from which all our other exceptions derive """ def __init__(self, message): """ Create a new AudioScrobblerError. :Parameters: - `message`: The message that will be displayed to the user """ self.message = message def __repr__(self): msg = "%s: %s" return msg % (self.__class__.__name__, self.message,) def __str__(self): return self.__repr__() class AudioScrobblerConnectionError(AudioScrobblerError): """ The base network error, raise by invalid HTTP responses or failures to connect to the server specified (DNS, timeouts, etc.) """ def __init__(self, type, code, message): self.type = type self.code = code self.message = message def __repr__(self): msg = "AudioScrobblerConnectionError: %s: %s %s" return msg % (self.type.upper(), self.code, self.message,) class AudioScrobblerTypeError(AudioScrobblerError): """ If we would normally raise a TypeError we raise this instead """ pass class AudioScrobblerPostUpdate(AudioScrobblerError): """ If the POST server returns an ``UPDATE`` message we raise this exception. This is the only case when this exception is raised, allowing you to happily ignore it. """ def __repr__(self): msg = "An update to your AudioScrobbler client is available at %s" return msg % (self.message,) class AudioScrobblerPostFailed(AudioScrobblerError): """ If the POST server returns an ``FAILED`` message we raise this exception. """ def __repr__(self): msg = "Posting track to AudioScrobbler failed. Reason given: %s" return msg % (self.message,) class AudioScrobblerHandshakeError(AudioScrobblerError): """ If we fail the handshake this is raised. If you're running in a long running process you should pass on this error, as the system keeps a cache which ``flushcache()`` will clear for you when the server is back. """ pass class AudioScrobbler: """ Factory for Queries and Posts. Holds configuration for the session """ def __init__(self, audioscrobbler_request_version=audioscrobbler_request_version, audioscrobbler_post_version=audioscrobbler_post_version, audioscrobbler_request_host=audioscrobbler_request_host, audioscrobbler_post_host=audioscrobbler_post_host, client_name=client_name, client_version=pyscrobbler_version): self.logger = logging.getLogger(__name__) self.audioscrobbler_request_version = audioscrobbler_request_version self.audioscrobbler_post_version = audioscrobbler_post_version self.audioscrobbler_request_host = audioscrobbler_request_host self.audioscrobbler_post_host = audioscrobbler_post_host self.client_name = client_name self.client_version = pyscrobbler_version def query(self, **kwargs): """ Create a new AudioScrobblerQuery """ if len(kwargs) != 1: raise TypeError("__init__() takes exactly 1 argument, %s " "given" % (len(kwargs),)) ret = AudioScrobblerQuery(version=self.audioscrobbler_request_version, host=self.audioscrobbler_request_host, **kwargs) return ret def post(self, username, md5_password, verbose=False): """ Create a new AudioScrobblerPost """ ret = AudioScrobblerPost(username=username.encode('utf8'), md5_password=md5_password.encode('utf8'), host=self.audioscrobbler_post_host, protocol_version=self.audioscrobbler_post_version, client_name=self.client_name, client_version=self.client_version, verbose=verbose) return ret class AudioScrobblerCache: def __init__(self, elemtree, last): self.elemtree = elemtree self.requestdate = last def created(self): return self.requestdate def gettree(self): return self.elemtree class AudioScrobblerQuery: def __init__(self, version=audioscrobbler_request_version, host=audioscrobbler_request_host, **kwargs): if len(kwargs) != 1: raise TypeError("__init__() takes exactly 1 audioscrobbler " "request argument, %s given" % str(len(kwargs))) self.type = kwargs.keys()[0] self.param = str(kwargs[self.type]) self.baseurl = 'http://%s/%s/%s/%s' % (host, version, urllib.parse.quote(self.type), urllib.parse.quote(self.param), ) self._cache = {} def __getattr__(self, name): def method(_self=self, name=name, **params): # Build the URL url = '%s/%s.xml' % (_self.baseurl, urllib.parse.quote(name)) if len(params) != 0: for key in params.keys(): # This little mess is required to get round the fact that # 'from' is a reserved word and can't be passed as a # parameter name. if key.startswith('_'): params[key[1:]] = params[key] del params[key] url = '%s?%s' % (url, urllib.parse.urlencode(params)) req = urllib.request.Request(url) # Check the cache cache = _self._cache if url in cache and cache[url].created() is not None: req.add_header('If-Modified-Since', cache[url].created()) # Open the URL and test the response try: response = urllib.request.urlopen(url) except urllib.error.HTTPError as error: if error.code == 304: return AudioScrobblerItem(cache[url].getroot(), _self, url) if error.code == 400: raise AudioScrobblerConnectionError('ws', 400, error.fp.read()) raise AudioScrobblerConnectionError('http', error.code, error.msg) except urllib.error.URLError as error: code = error.reason.args[0] message = error.reason.args[1] raise AudioScrobblerConnectionError('network', code, message) elemtree = ElementTree.ElementTree(file=response) if response.headers.get('pragma', None) != 'no-cache': last_modified = response.headers.get('last-modified', None) else: last_modified = None _self._cache[url] = AudioScrobblerCache(elemtree, last_modified) return AudioScrobblerItem(elemtree.getroot(), _self, url) return method def __repr__(self): return "AudioScrobblerQuery(%s='%s')" % (self.type, self.param) def __str__(self): return self.__repr__() class AudioScrobblerItem: def __init__(self, element, parent, url=None): self._element = element self._parent = parent self.tag = element.tag self.text = element.text self._url = url if self._url is None: self._url = self._parent._url def __repr__(self): if isinstance(self._parent, AudioScrobblerQuery): return "<AudioScrobbler response from %s>" % (self._url,) return "<AudioScrobbler %s element at %s>" % (self.tag, id(self)) def __str__(self): if self.text is None: return '' text = self.text try: retval = text.encode(enc) except AttributeError: retval = text return retval def __getattr__(self, name): result = self._element.findall(name) if len(result) == 0: raise AttributeError("AudioScrobbler %s element has no " "subelement '%s'" % (self.tag, name)) ret = [AudioScrobblerItem(i, self) for i in result] if len(ret) == 1: return ret[0] return ret def __iter__(self): for i in self._element: yield AudioScrobblerItem(i, self) def __getitem__(self, i): return self._element.attrib[i] def get(self, i, default): if i in self._element.attrib: return self._element.attrib[i] else: return default def __getslice__(self, i, j): return [AudioScrobblerItem(x, self) for x in self._element[i:j]] def raw(self): def getparent(obj): if isinstance(obj._parent, AudioScrobblerQuery): return obj._parent return getparent(obj._parent) return getparent(self)._cache[self._url].gettree() def element(self): return self._element class AudioScrobblerPost: """ Provide the ability to post tracks played to a user's Last.fm account """ #Updated to protocol version 1.2 def __init__(self, username='', md5_password='', client_name=client_name, client_version=pyscrobbler_version, protocol_version=audioscrobbler_post_version, host=audioscrobbler_post_host, verbose=False): # Capture the information passed for future use self.params = dict(username=username, md5_password=md5_password, client_name=client_name, client_version=client_version, protocol_version=protocol_version, host=host) self.logger = logging.getLogger(__name__) if not verbose: self.logger.setLevel(logging.WARNING) self.auth_details = {} self.last_post = None self.interval = 0 self.cache = [] self.loglines = [] # TODO: it somehow duplicates with the logging module self.last_shake = None self.authenticated = False self.updateurl = None self.posturl = None self.npurl = None def auth(self): """ Authenticate against the server """ if self.authenticated: return True timestamp = str(int(time.time())).encode('ascii') md5_password = self.params['md5_password'] auth_token = hashlib.md5(md5_password + timestamp).hexdigest() p = {} p['hs'] = 'true' p['p'] = self.params['protocol_version'] p['c'] = self.params['client_name'] p['v'] = self.params['client_version'] p['u'] = self.params['username'] p['t'] = timestamp p['a'] = auth_token plist = [(k, urllib.parse.quote_plus(v).encode('utf-8')) for k, v in p.items()] authparams = urllib.parse.urlencode(plist) url = 'http://%s/?%s' % (self.params['host'], authparams) req = urllib.request.Request(url) try: url_handle = urllib.request.urlopen(req) except urllib.error.HTTPError as error: self.authenticated = False raise AudioScrobblerConnectionError('http', error.code, error.msg) except urllib.error.URLError as error: self.authenticated = False code = error.reason#.args[0] message = error.reason#.args[1] raise AudioScrobblerConnectionError('network', code, message) response = lines_from_utf8(url_handle.readlines()) if len(response) == 0: raise AudioScrobblerHandshakeError(('Got nothing back from ' 'the server')) username = self.params['username'] md5_password = self.params['md5_password'] # First we test the best and most likely case if response[0].startswith('OK'): answer = response[1].strip() self.auth_details['s'] = answer self.npurl = response[2].strip() self.posturl = response[3].strip() self.authenticated = True # Then the various failure states.... elif response[0].startswith('BANNED'): self.authenticated = False msg = "this client version has been banned from the server." raise AudioScrobblerHandshakeError(msg) elif response[0].startswith('BADAUTH'): self.authenticated = False msg = "The authentication details provided were incorrect." raise AudioScrobblerHandshakeError(msg) elif response[0].startswith('BADTIME'): self.authenticated = False msg = ('The timestamp provided was not close enough to ' 'the current time.') raise AudioScrobblerHandshakeError(msg) elif response[0].startswith('FAILED'): self.authenticated = False msg = response[0][6:] raise AudioScrobblerHandshakeError(msg) else: self.authenticated = False msg = "Unknown response from server: %r" % (response,) raise AudioScrobblerHandshakeError(msg) def posttrack(self, artist_name, song_title, length, date_played, tracknumber='', album='', mbid='', source='P'): """ Add the track to the local cache, and try to post it to the server """ self.addtrack(artist_name=artist_name, song_title=song_title, length=length, date_played=date_played, tracknumber=tracknumber, album=album, mbid=mbid, source=source) self.post() __call__ = posttrack def addtrack(self, artist_name, song_title, length, date_played, tracknumber='', album='', mbid='', source='P'): """ Add a track to the local cache """ # Quick sanity check on track length if type(length) == type(0): sane_length = length elif type(length) == type('') and length.isdigit(): sane_length = int(length) else: sane_length = -1 # If the track length is less than 30 move on if sane_length < 30: msg = ("Track '%s' by '%s' only %s seconds in length, so " "not added" % (song_title, artist_name, sane_length)) self.log(msg) # Otherwise build the track dictionary and add it to the local cache else: try: track = {'a[%s]': artist_name.encode('utf8'), 't[%s]': song_title.encode('utf8'), 'l[%s]': str(sane_length), 'i[%s]': date_played, 'b[%s]': album.encode('utf8'), 'm[%s]': mbid.encode('utf8'), 'r[%s]': '', 'n[%s]': str(tracknumber), 'o[%s]': source.encode('utf8'), } except: track = {'a[%s]': artist_name, 't[%s]': song_title, 'l[%s]': str(sane_length), 'i[%s]': date_played, 'b[%s]': album, 'm[%s]': mbid.encode('utf8'), 'r[%s]': '', 'n[%s]': str(tracknumber), 'o[%s]': source.encode('utf8'), } self.cache.append(track) def nowplaying(self, artist_name, song_title, length='', tracknumber='', album='', mbid=''): self.auth() p = {} p['s'] = self.auth_details['s'] p['a'] = artist_name p['t'] = song_title p['b'] = album p['l'] = str(length) p['n'] = str(tracknumber) p['m'] = str(mbid) npdata = urllib.parse.urlencode(p).encode('utf-8') req = urllib.request.Request(url=self.npurl, data=npdata) try: url_handle = urllib.request.urlopen(req) except urllib.error.HTTPError as error: self.authenticated = False self.logger.error( "%s", AudioScrobblerConnectionError('http', error.code, error.msg)) return except: code = '000' message = sys.exc_info()[1] self.logger.error( "%s", AudioScrobblerConnectionError('network', code, message)) return response = lines_from_utf8(url_handle.readlines()) if response[0].startswith('OK'): self.log("Now playing track updated ('%s' by '%s')." % (p['t'], p['a'])) elif response[0].startswith('BADSESSION'): self.authenticated = False def post(self): """ Post the tracks by popping the first ten off the cache and attempting to post them. """ if len(self.cache) == 0: return if len(self.cache) > 10: number = 10 else: number = len(self.cache) params = {} count = 0 for track in self.cache[:number]: for k in track.keys(): params[k % (count,)] = track[k] count += 1 self.auth() params.update(self.auth_details) postdata = urllib.parse.urlencode(params).encode('utf-8') req = urllib.request.Request(url=self.posturl, data=postdata) now = datetime.datetime.utcnow() try: url_handle = urllib.request.urlopen(req) except urllib.error.HTTPError as error: raise AudioScrobblerConnectionError('http', error.code, error.msg) except urllib.error.URLError as error: args = getattr(error.reason, 'args', None) code = '000' message = str(error) if args is not None: if len(args) == 1: message = error.reason.args[0] elif len(args) == 2: code = error.reason.args[0] message = error.reason.args[1] raise AudioScrobblerConnectionError('network', code, message) except: code = '000' message = sys.exc_info()[1] raise AudioScrobblerConnectionError('network', code, message) self.last_post = now response = lines_from_utf8(url_handle.readlines()) # Test the various responses possibilities: if response[0].startswith('OK'): for song in self.cache[:number]: self.log("Uploaded track successfully ('%s' by '%s')." \ % (song['t[%s]'], song['a[%s]'])) del self.cache[:number] elif response[0].startswith('BADSESSION'): self.log("Got BADSESSION.") self.authenticated = False elif response[0].startswith('FAILED'): reason = response[0][6:].strip() raise AudioScrobblerPostFailed(reason) else: msg = "Server returned something unexpected." raise AudioScrobblerPostFailed(msg) def flushcache(self): """ Post all the tracks in the cache """ while len(self.cache) > 0: self.post() def savecache(self, filename): """ Save all tracks in the cache to a file """ conf = configparser.ConfigParser() # Save each track in cache: count = 0 for track in self.cache: conf.add_section('Track ' + str(count)) for k in track.keys(): conf.set('Track ' + str(count), k, track[k]) count += 1 try: conf.write(open(filename, 'w')) except IOError: pass def retrievecache(self, filename): """ Retrieve all cached tracks from a file so that cached tracks are preserved across client restarts """ if not os.path.isfile(filename): return conf = configparser.ConfigParser() try: conf.read(filename) except IOError: return # Retrieve each cached track from file: count = 0 while conf.has_section('Track ' + str(count)): track = {} for key in ['a', 't', 'l', 'i', 'b', 'm', 'r', 'n', 'o']: if conf.has_option('Track ' + str(count), key + '[%s]'): track[key + '[%s]'] = conf.get('Track %s' % (str(count),), key + '[%s]') self.cache.append(track) count += 1 # Cached tracks retrieved, delete file: os.remove(filename) def log(self, msg): """ Add a line to the log, print it if verbose """ time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") self.loglines.append("%s: %s" % (time, msg)) self.logger.debug(msg) def getlog(self, clear=False): """ Return the entire log, clear it if requested """ if clear: retval = self.loglines self.loglines = [] return retval return self.loglines ����������������������������������������������������������������������������������������������������������������sonata-1.7.0/sonata/breadcrumbs.py������������������������������������������������������������������0000664�0000000�0000000�00000017420�13771420143�0017142�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python # Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> # Copyright 2009-2014 Jonathan Ballet <jon@multani.info> # # This file is part of Sonata. # # Sonata is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Sonata is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Sonata. If not, see <http://www.gnu.org/licenses/>. from gi.repository import Gtk, Gdk, Pango class CrumbButton(Gtk.ToggleButton): """A ToggleButton tailored for use as a breadcrumb.""" def __init__(self, image, label): super().__init__() self.set_properties(can_focus=False, relief=Gtk.ReliefStyle.NONE) self.label = label # adapt Gtk.Button internal layout code: hbox = Gtk.HBox(spacing=2) align = Gtk.Alignment.new(0.5, 0.5, 0, 0) hbox.pack_start(image, False, False, 0) hbox.pack_start(label, True, True, 0) align.add(hbox) self.add(align) def ellipsize(self, do_ellipsize=True): can_ellipsize = len(self.label.get_text()) >= 15 if do_ellipsize and can_ellipsize: mode = Pango.EllipsizeMode.END width_chars = 15 else: mode = Pango.EllipsizeMode.NONE width_chars = -1 self.label.set_ellipsize(mode) self.label.set_max_width_chars(width_chars) self.label.set_width_chars(width_chars) return do_ellipsize and can_ellipsize class CrumbBox(Gtk.Box): """A box layout similar to Gtk.HBox, but specifically for breadcrumbs. * Crumbs in the middle are replaced with an ellipsis if necessary. * The root, parent, and current element are always kept visible. * The root and parent are put in a condensed form if necessary. * The current element is truncated if necessary. """ __gtype_name__ = 'CrumbBox' def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) def set_crumb_break(self, widget): self.crumb_break = widget def do_get_preferred_width(self): """This gets called to determine the size we request""" reqs = [w.size_request() for w in self] # Request "minimum" size: heights = [r.height for r in reqs] height = max([0] + heights) widths = [r.width for r in reqs] width = max([0] + widths) natural_width = self._req_sum(reqs) if len(reqs) == 0: # empty width = 0 elif len(reqs) < 3: # current crumb width = natural_width elif len(reqs) == 3: # parent and current width = 2 * height + self.props.spacing elif len(reqs) == 4: # root, parent and current width = 3 * height + 2 * self.props.spacing elif len(reqs) > 4: # root, break, parent, current pad = 3 * self.props.spacing width = 3 * height + reqs[1].width + pad return width, natural_width def _req_sum(self, reqs): pad = 0 if not reqs else (len(reqs)-1) * self.props.spacing return pad + sum([req.width for req in reqs]) def _condense(self, req, w): # FIXME show and hide cause a fight in an infinite loop # try: # w.get_child().get_child().get_children()[1].hide() # except (AttributeError, IndexError): # pass return req # XXX simplistic: set square size for now def _uncondense(self, w): pass # try: # w.get_child().get_child().get_children()[1].show() # except (AttributeError, IndexError): def _truncate(self, req, amount): req.width -= amount if req.width < 0: req.width = 0 return req def do_size_allocate(self, allocation): """This gets called to layout our child widgets""" # XXX allocation seems to stick at some width, no matter how much wider # the window gets, but if we go down the path and back, it goes higher? # Gtk bug? x0, y0 = allocation.x, allocation.y w0, h0 = allocation.width, allocation.height crumbs = self.get_children() if len(crumbs) < 2: if self.crumb_break: self.crumb_break.hide() Gtk.Box.do_size_allocate(self, allocation) return # Undo any earlier condensing and ellipsizing for crumb in crumbs: crumb.ellipsize(False) if len(crumbs) > 2: self._uncondense(crumbs[-2]) reqs = [w.get_child_requisition() for w in crumbs] # Step 1: Try ellipsizing if self._req_sum(reqs) > w0: # We want a descending sort by widths # We ellipsize biggest to smallest to preserve the most crumbs crumbsorted = [(w.width, crumb) for w, crumb in zip(reqs, crumbs)] sorted(crumbsorted, key=lambda crumb: crumb[0], reverse=True) for x, crumb in crumbsorted: if crumb.ellipsize(): i = crumbs.index(crumb) reqs[i] = crumb.get_child_requisition() if self._req_sum(reqs) < w0: break # Step 2: remove as many crumbs as needed except: # Never remove the parent or current hidden = [] while self._req_sum(reqs) > w0: if len(crumbs) > 2: hidden.append(crumbs.pop(0)) reqs.pop(0) else: break # don't remove the parent # If necessary, condense the parent crumb if self._req_sum(reqs) > w0 and len(crumbs) > 2: reqs[-2] = self._condense(reqs[-2], crumbs[-2]) # If necessary, truncate the current crumb if self._req_sum(reqs) > w0: reqs[-1] = self._truncate(reqs[-1], self._req_sum(reqs) - w0) # Now we are at minimum width # Only show the break (ellipsis) if we have hidden crumbs if self.crumb_break: if len(hidden): self.crumb_break.show() else: self.crumb_break.hide() x = 0 for w, req in zip(crumbs, reqs): alloc = Gdk.Rectangle() alloc.x = x0 + x alloc.y = y0 alloc.width = req.width alloc.height = h0 w.size_allocate(alloc) w.show() x += req.width + self.props.spacing for w in hidden: alloc = Gdk.Rectangle() alloc.x = -1 alloc.y = -1 alloc.width = 0 alloc.height = 0 w.size_allocate(alloc) w.hide() Gtk.Box.do_size_allocate(self, allocation) # this file can be run as a simple test program: # FIXME or XXX this is out of sync with the rest of file if __name__ == '__main__': w = Gtk.Window() crumbs = CrumbBox(spacing=2) items = [ (Gtk.STOCK_HARDDISK, "Filesystem"), (None, None), # XXX for ellipsis (Gtk.STOCK_OPEN, "home"), (Gtk.STOCK_OPEN, "user"), (Gtk.STOCK_OPEN, "music"), (Gtk.STOCK_OPEN, "genre"), (Gtk.STOCK_OPEN, "artist"), (Gtk.STOCK_OPEN, "album"), ] for stock, text in items: if stock: image = Gtk.Image.new_from_stock(stock, Gtk.IconSize.MENU) crumbs.pack_start(CrumbButton(image, Gtk.Label(label=text)), False, False, 0) else: crumbs.pack_start(Gtk.Label("..."), False, False, 0) w.add(crumbs) w.connect('hide', Gtk.main_quit) w.show_all() Gtk.main() ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/sonata/cli.py��������������������������������������������������������������������������0000664�0000000�0000000�00000025327�13771420143�0015425�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> # Copyright 2009-2014 Jonathan Ballet <jon@multani.info> # # This file is part of Sonata. # # Sonata is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Sonata is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Sonata. If not, see <http://www.gnu.org/licenses/>. import gettext import locale import logging import os from optparse import OptionParser import sys from sonata import config, misc, mpdhelper as mpdh from sonata.version import version # the mpd commands need a connection to server and exit without gui mpd_cmds = ["play", "pause", "stop", "next", "prev", "pp", "info", "status", "repeat", "random"] class Args: def __init__(self): self.logger = logging.getLogger(__name__) self.skip_gui = False self.start_visibility = None self.start_shell = False def parse(self, argv): """Parse the command line arguments. Separates options and arguments from the given argument list, checks their validity.""" # toggle and popup and fullscreen need d-bus and don't always need gui # version and help don't need anything and exit without gui # hidden and visible are only applicable when gui is launched # profile and no-start don't need anything _usage = "\n".join((_("%prog [OPTION]... [COMMAND]...") + "\n", _("Commands:"), " play %s" % _("play song in playlist"), " pause %s" % _("pause currently playing song"), " stop %s" % _("stop currently playing song"), " next %s" % _("play next song in playlist"), " prev %s" % _("play previous song in playlist"), " pp %s" % _("toggle play/pause; plays if stopped"), " repeat %s" % _("toggle repeat mode"), " random %s" % _("toggle random mode"), " info %s" % _("display current song info"), " status %s" % _("display MPD status"), )) _version = "%prog " + version parser = OptionParser(usage=_usage, version=_version) parser.add_option("-p", "--popup", dest="popup", action="store_true", help=_("popup song notification (requires D-Bus)")) parser.add_option("-t", "--toggle", dest="toggle", action="store_true", help=_("toggles whether the app is minimized to the tray or visible (requires D-Bus)")) parser.add_option("-f", "--fullscreen", dest="fullscreen", action="store_true", help=_("go fullscreen (requires D-Bus)")) parser.add_option("-n", "--no-start", dest="start", action="store_false", help=_("don't start app if D-Bus commands fail")) parser.add_option("--hidden", dest="start_visibility", action="store_false", help=_("start app hidden (requires systray)")) parser.add_option("--visible", dest="start_visibility", action="store_true", help=_("start app visible (requires systray)")) parser.add_option("--profile", dest="profile", metavar="NUM", help=_("start with profile NUM"), type=int) parser.add_option("--shell", dest="start_shell", action="store_true", help=_("start app with a interactive (ipython) shell")) parser.add_option("-v", "--verbose", dest="log_level", action="append_const", const=-10, help=_("Increase log verbosity")) parser.add_option("-q", "--quiet", dest="log_level", action="append_const", const=10, help=_("Decrease log verbosity")) parser.set_defaults(log_level=[logging.root.level]) options, self.cmds = parser.parse_args(argv[1:]) # Update default log level logging.root.setLevel(sum(options.log_level)) if logging.root.level >= logging.DEBUG: # Only display MPD logs if we area really trying to debug hard # (-vvv) logging.getLogger('mpd').setLevel(logging.WARNING) if options.toggle: options.start_visibility = True if options.popup or options.fullscreen and options.start_visibility is None: options.start_visibility = False self.start_visibility = options.start_visibility self.arg_profile = options.profile self.start_shell = options.start_shell for cmd in self.cmds: if cmd in mpd_cmds: self.skip_gui = True else: parser.error(_("unknown command %s") % cmd) if options.toggle or options.popup or options.fullscreen: from sonata import dbus_plugin as dbus if not dbus.using_dbus(): self.logger.critical( _("toggle and popup options require D-Bus. Aborting.")) sys.exit(1) dbus.execute_remote_commands(options.toggle, options.popup, options.fullscreen, options.start) def execute_cmds(self): """If arguments were passed, perform action on them.""" if self.cmds: main = CliMain(self) main.mpd_connect() for cmd in self.cmds: main.execute_cmd(cmd) sys.exit() def apply_profile_arg(self, config): if self.arg_profile: a = self.arg_profile if a > 0 and a <= len(config.profile_names): config.profile_num = a-1 self.logger.info(_("Starting Sonata with profile %s...") % config.profile_names[config.profile_num]) else: self.logger.critical( _("%d is not an available profile number.") % a) self.logger.critical( _("Profile numbers must be between 1 and %d.") % len(config.profile_names)) sys.exit(1) class CliMain: def __init__(self, args): global os, mpd, misc, config, mpdh import os import mpd from sonata import config, misc, mpdhelper as mpdh # This should disable processing for nearly all logging messages, as # long as no other handlers are configured for special loggers. # Note that using the "-v" command line argument is mostly useless in # this case... logging.root.setLevel(logging.CRITICAL) self.logger = logging.getLogger(__name__) self.config = config.Config(_('Default Profile'), _("by") + " %A " + _("from") + " %B") self.config.settings_load_real() args.apply_profile_arg(self.config) self.mpd = mpdh.MPDClient() def mpd_connect(self): host, port, password = misc.mpd_env_vars() if not host: host = self.config.host[self.config.profile_num] if not port: port = self.config.port[self.config.profile_num] if not password: password = self.config.password[self.config.profile_num] self.mpd.connect(host, port) if password: self.mpd.password(password) def execute_cmd(self, cmd): self.status = self.mpd.status() if not self.status: self.logger.critical(_( 'Unable to connect to MPD.\nPlease check your Sonata ' 'preferences or MPD_HOST/MPD_PORT environment variables.')) sys.exit(1) self.songinfo = self.mpd.currentsong() getattr(self, "_execute_%s" % cmd)() def _execute_play(self): self.mpd.play() def _execute_pause(self): self.mpd.pause(1) def _execute_stop(self): self.mpd.stop() def _execute_next(self): self.mpd.next() def _execute_prev(self): self.mpd.previous() def _execute_random(self): opt = int(not int(self.status["random"])) self.mpd.random(opt) def _execute_repeat(self): opt = int(not int(self.status["repeat"])) self.mpd.repeat(opt) def _execute_pp(self): if self.status['state'] in ['play']: self.mpd.pause(1) elif self.status['state'] in ['pause', 'stop']: self.mpd.play() def _execute_info(self): if self.status['state'] in ['play', 'pause']: cmds = [ (_("Title"), 'title'), (_("Artist"), 'artist'), (_("Album"), 'album'), (_("Date"), 'date'), (_("Track"), 'track'), (_("Genre"), 'genre'), (_("File"), 'file'), ] for pretty, key in cmds: value = str(self.songinfo.get(key)) if key == 'track': value = value.zfill(2) # XXX this could fail, if not all characters are supported by # os.stdout.encoding print("%s: %s" % (pretty, value)) at, _length = [int(c) for c in self.status['time'].split(':')] at_time = misc.convert_time(at) try: time = misc.convert_time(self.songinfo.time) print("%s: %s/%s" % (_("Time"), at_time, time)) except: print("%s: %s" % (_("Time"), at_time)) print("%s: %s" % (_("Bitrate"), self.status.get('bitrate', ''))) else: print(_("MPD stopped")) def _execute_status(self): state_map = { 'play': _("Playing"), 'pause': _("Paused"), 'stop': _("Stopped")} print("%s: %s" % (_("State"), state_map[self.status['state']])) print("%s %s" % (_("Repeat:"), _("On") \ if self.status['repeat'] == '1' else _("Off"))) print("%s %s" % (_("Random:"), _("On") \ if self.status['random'] == '1' else _("Off"))) print("%s: %s/100" % (_("Volume"), self.status['volume'])) print("%s: %s %s" % (_('Crossfade'), self.status['xfade'], ngettext('second', 'seconds', int(self.status['xfade'])))) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/sonata/config.py�����������������������������������������������������������������������0000664�0000000�0000000�00000032756�13771420143�0016127�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> # Copyright 2009-2014 Jonathan Ballet <jon@multani.info> # # This file is part of Sonata. # # Sonata is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Sonata is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Sonata. If not, see <http://www.gnu.org/licenses/>. """ This module contains the configuration variables and implements their initialisation, loading, and saving in a file. Example usage: import config ... # XXX We shouldn't have the default values contain localised parts: self.config = config.Config(_('Default Profile'), _("by") + " %A " +\ _("from") + " %B") """ import logging import os import hashlib from configparser import RawConfigParser from sonata import misc, consts from sonata.song import SongRecord # Constant to express a None value LIB_NODATA = "!NONE!" logger = logging.getLogger(__name__) class ConfigParser(RawConfigParser): """Override the default configuration parser with specific loader""" def getlist(self, section, name, sep=","): """Get a list of values, separated by `sep`""" value = self.get(section, name) return [v.strip() for v in value.split(sep)] def getlistint(self, section, name, sep=","): """Load a list of integer values, separated by `sep`.""" return [int(v) for v in self.getlist(section, name, sep)] class Serializer: """Helper to serialize specific values. Those methods can be function, but it makes easier to locate and load them if they are stored here.""" @staticmethod def list(value, sep=","): return ",".join(str(s) for s in value) listint = list class Config: """This class contains the configuration variables as attributes. Each new variable should be initialised to its default value in __init__, loaded from a file in settings_load_real, and saved to a file in settings_save_real. XXX This is mostly ConfigParser plus some custom serialization work. """ CONFIG_PATH = os.path.expanduser('~/.config/sonata/sonatarc') def __init__(self, default_profile_name, currsongformat2): self.wd = SongRecord(path="/") self._options = { 'audioscrobbler': { 'as_enabled': ('use_audioscrobbler', 'boolean', False), 'as_password_md5': ('password_md5', '', ''), 'as_username': ('username', '', '')}, 'connection': { 'autoconnect': ('auto', 'boolean', True), 'profile_num': ('profile_num', 'int', 0)}, 'currformat': { 'currentformat': ('current', '', '%A - %T|%L'), 'currsongformat1': ('currsong1', '', '%T'), 'currsongformat2': ('currsong2', '', currsongformat2), 'libraryformat': ('library', '', '%A - %T'), 'titleformat': ('title', '', '[Sonata] %A - %T')}, 'library': { 'lib_view': ('lib_view', 'int', consts.VIEW_FILESYSTEM)}, 'notebook': { 'current_tab_pos': ('current_tab_pos', 'int', 0), 'current_tab_visible': ('current_tab_visible', 'boolean', True), 'info_tab_pos': ('info_tab_pos', 'int', 4), 'info_tab_visible': ('info_tab_visible', 'boolean', True), 'library_tab_pos': ('library_tab_pos', 'int', 1), 'library_tab_visible': ('library_tab_visible', 'boolean', True), 'playlists_tab_pos': ('playlists_tab_pos', 'int', 2), 'playlists_tab_visible': ('playlists_tab_visible', 'boolean', True), 'streams_tab_pos': ('streams_tab_pos', 'int', 3), 'streams_tab_visible': ('streams_tab_visible', 'boolean', True)}, 'player': { 'art_location': ('art_location', 'int', consts.ART_LOCATION_HOMECOVERS), 'art_location_custom_filename': ('art_location_custom_filename', '', ''), 'columnwidths': ('columnwidths', 'listint', [325, 10]), 'covers_pref': ('covers_pref', 'int', consts.ART_LOCAL_REMOTE), 'covers_type': ('covers_type', 'int', 1), 'decorated': ('decorated', 'boolean', True), 'existing_playlist_option': ('existing_playlist', 'int', 0), 'expanded': ('expanded', 'boolean', True), 'h': ('h', 'int', 300), 'info_album_expanded': ('info_album_expanded', 'boolean', True), 'info_art_enlarged': ('info_art_enlarged', 'boolean', False), 'info_lyrics_expanded': ('info_lyrics_expanded', 'boolean', True), 'info_song_expanded': ('info_song_expanded', 'boolean', True), 'info_song_more': ('info_song_more', 'boolean', False), 'infofile_path': ('infofile_path', '', '/tmp/xmms-info'), 'initial_run': ('initial_run', 'boolean', True), 'last_search_num': ('search_num', 'int', 0), 'lyrics_location': ('lyrics_location', 'int', consts.LYRICS_LOCATION_HOME), 'minimize_to_systray': ('minimize', 'boolean', False), 'ontop': ('ontop', 'boolean', False), 'popup_option': ('popup_time', 'int', 2), 'screen': ('screen', 'int', 0), 'show_covers': ('covers', 'boolean', True), 'show_header': ('show_header', 'boolean', True), 'show_lyrics': ('lyrics', 'boolean', True), 'show_notification': ('notification', 'boolean', False), 'show_playback': ('playback', 'boolean', True), 'show_progress': ('progressbar', 'boolean', True), 'show_statusbar': ('statusbar', 'boolean', False), 'show_trayicon': ('trayicon', 'boolean', True), 'sticky': ('sticky', 'boolean', False), 'stop_on_exit': ('stop_on_exit', 'boolean', False), 'tabs_expanded': ('tabs_expanded', 'boolean', False), 'traytips_notifications_location': ('notif_location', 'int', 0), 'update_on_start': ('update_on_start', 'boolean', False), 'url_browser': ('browser', '', ''), 'use_infofile': ('use_infofile', 'boolean', False), 'w': ('w', 'int', 400), 'withdrawn': ('withdrawn', 'boolean', False), 'x': ('x', 'int', 0), 'xfade': ('xfade', 'int', 0), 'xfade_enabled': ('xfade_enabled', 'boolean', False), 'y': ('y', 'int', 0)}, 'plugins': { 'autostart_plugins': ('autostart_plugins', 'list', []), 'known_plugins': ('known_plugins', 'list', [])}, 'tags': { 'tags_use_mpdpath': ('use_mpdpaths', 'boolean', False)} } self._indexed_options = { 'streams': ('num_streams', { 'stream_names': ('names', '', []), 'stream_uris': ('uris', '', []), }), 'profiles': ('num_profiles', { 'profile_names': ('names', '', [default_profile_name]), 'musicdir': ('musicdirs', '', ["~/music"]), 'host': ('hosts', '', ['localhost']), 'port': ('ports', 'int', [6600]), 'password': ('passwords', '', ['']), }) } @property def current_musicdir(self): return self.musicdir[self.profile_num] def settings_load_real(self): """Load configuration from file""" conf = ConfigParser() misc.create_dir(os.path.dirname(self.CONFIG_PATH)) conf.read(self.CONFIG_PATH) # Load all the "simple" options, as described in self._options, and set # them as instance attribute. for section, attributes in self._options.items(): for attribute, (opt_key, type, default) in attributes.items(): if conf.has_option(section, opt_key): try: value = getattr(conf, 'get' + type)(section, opt_key) except Exception as e: # BBB: we need to expect some errors since Sonata uses # to write None values for "int"-type settings, which # fail to be loaded when using getint(). The new code # should write better values each time. Consider # removing this try/except clause when configuration # files are "clean". value = default # This should be safe in all cases faulty_value = conf.get(section, opt_key) logger.warning( "Can't load %r from section %r (as %s). Value is %r", opt_key, section, type if type else "str", faulty_value) else: value = default setattr(self, attribute, value) # Load all the attributes which have several values and are indexed. for section, (index_name, attributes) in self._indexed_options.items(): if not conf.has_option(section, index_name): num = 0 else: num = conf.getint(section, index_name) for attribute, (key, type, default) in attributes.items(): if num == 0: setattr(self, attribute, default) else: setattr(self, attribute, []) for i in range(num): opt_key = "%s[%d]" % (key, i) value = getattr(conf, 'get' + type)(section, opt_key) getattr(self, attribute).append(value) # Finally, load attributes related to the library. This is a bit weird # so we use an helper function to make it easier: def lib_get(name): # Helper function to load attributes related to the library. value = None if conf.has_option('library', name): value = conf.get('library', name) if value == LIB_NODATA: value = None return value if conf.has_section('library'): album = lib_get('lib_album') artist = lib_get('lib_artist') genre = lib_get('lib_genre') year = lib_get('lib_year') path = lib_get('lib_path') self.wd = SongRecord(album, artist, genre, year, path) # Finally, patch some values: self.musicdir = [misc.sanitize_musicdir(v) for v in self.musicdir] # Ensure we have a valid profile number: self.profile_num = max(0, min(self.profile_num, len(self.profile_names) - 1)) # Specifying remote artwork first is too confusing and probably # rarely used, so we're removing this option and defaulting users # back to the default 'local, then remote' option. # Backward compatibility if self.covers_pref > consts.ART_LOCAL_REMOTE: self.covers_pref = consts.ART_LOCAL_REMOTE def settings_save_real(self): """Save configuration in file""" conf = ConfigParser() # First, write all the "simple" attributes in their respective section: for section, attributes in self._options.items(): if not conf.has_section(section): conf.add_section(section) for attribute, (name, type, default) in attributes.items(): value = getattr(self, attribute) if hasattr(Serializer, type): value = getattr(Serializer, type)(value) conf.set(section, name, value) # Then, write all the attributes which are grouped together, and index # them. for section, (index_name, attributes) in self._indexed_options.items(): if not conf.has_section(section): conf.add_section(section) value_index = 0 for attribute, (name, type, default) in attributes.items(): for i, value in enumerate(getattr(self, attribute)): conf.set(section, "%s[%d]" % (name, i), value) value_index = i + 1 conf.set(section, index_name, value_index) # Finally, save the settings related to the library. Again, we use an # helper function to help us to do the job: def lib_set(name): value = getattr(self.wd, name) conf.set('library', 'lib_' + name, value if value is not None else LIB_NODATA) if not conf.has_section('library'): conf.add_section('library') lib_set('album') lib_set('artist') lib_set('genre') lib_set('year') lib_set('path') # Now, we can properly save the configuration file: try: with open(self.CONFIG_PATH, 'w', encoding="utf-8") as rc: conf.write(rc) except IOError as e: self.logger.warning("Couldn't write configuration into %r: %s", self.CONFIG_PATH, e) ������������������sonata-1.7.0/sonata/consts.py�����������������������������������������������������������������������0000664�0000000�0000000�00000004604�13771420143�0016162�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> # Copyright 2009-2014 Jonathan Ballet <jon@multani.info> # # This file is part of Sonata. # # Sonata is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Sonata is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Sonata. If not, see <http://www.gnu.org/licenses/>. """ This module contains various constant definitions that any other module can import without risk of cyclic imports. Most of the constants are enum-like, that is, they provide symbolic names for a set of values. XXX Should some of these be moved to be private in some module, or into config? Example usage: from consts import consts ... if view == consts.VIEW_ALBUM: ... """ ART_LOCAL = 0 ART_LOCAL_REMOTE = 1 VIEW_FILESYSTEM = 0 VIEW_ARTIST = 1 VIEW_GENRE = 2 VIEW_ALBUM = 3 LYRIC_TIMEOUT = 10 NOTIFICATION_WIDTH_MAX = 500 NOTIFICATION_WIDTH_MIN = 350 FULLSCREEN_COVER_SIZE = 500 ART_LOCATION_HOMECOVERS = 0 # ~/.covers/[artist]-[album].jpg ART_LOCATION_COVER = 1 # file_dir/cover.jpg ART_LOCATION_ALBUM = 2 # file_dir/album.jpg ART_LOCATION_FOLDER = 3 # file_dir/folder.jpg ART_LOCATION_CUSTOM = 4 # file_dir/[custom] ART_LOCATION_SINGLE = 6 ART_LOCATION_MISC = 7 ART_LOCATIONS_MISC = ['front.jpg', '.folder.jpg', '.folder.png', 'AlbumArt.jpg', 'AlbumArtSmall.jpg'] LYRICS_LOCATION_HOME = 0 # ~/.lyrics/[artist]-[song].txt LYRICS_LOCATION_PATH = 1 # file_dir/[artist]-[song].txt LYRICS_LOCATION_HOME_ALT = 2 # ~/.lyrics/[artist] - [song].txt LYRICS_LOCATION_PATH_ALT = 3 # file_dir/[artist] - [song].txt LIB_COVER_SIZE = 32 COVERS_TYPE_STANDARD = 0 COVERS_TYPE_STYLIZED = 1 LIB_LEVEL_GENRE = 0 LIB_LEVEL_ARTIST = 1 LIB_LEVEL_ALBUM = 2 LIB_LEVEL_SONG = 3 NUM_ARTISTS_FOR_VA = 2 PREV_TRACK_RESTART = 5 # the names of the plug-ins that will be enabled by default DEFAULT_PLUGINS = [ 'playlists', 'streams', 'lyricwiki', 'localmpd', ] ����������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/sonata/current.py����������������������������������������������������������������������0000664�0000000�0000000�00000071253�13771420143�0016337�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> # Copyright 2009-2014 Jonathan Ballet <jon@multani.info> # # This file is part of Sonata. # # Sonata is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Sonata is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Sonata. If not, see <http://www.gnu.org/licenses/>. """Handle the mpd current playlist and provides a user interface for it.""" import os import re import urllib.parse, urllib.request from gi.repository import Gtk, Gdk, Pango, GLib from sonata import ui, misc, formatting from sonata.mpdhelper import MPDSong class Current: def __init__(self, config, mpd, name, on_button_press, connected, sonata_loaded, songinfo, update_statusbar, iterate_now, add_tab): self.config = config self.mpd = mpd self.on_button_press = on_button_press self.connected = connected self.sonata_loaded = sonata_loaded self.songinfo = songinfo self.update_statusbar = update_statusbar self.iterate_now = iterate_now self.store = None self.filterbox_visible = False self.update_skip = False self.columnformat = None self.columns = None self.refilter_handler_id = None # TreeViewColumn, order self.column_sorted = (None, Gtk.SortType.DESCENDING) self.total_time = 0 self.resizing_columns = None self.prev_boldrow = -1 self.playlist_pos_before_filter = None self.sel_rows = None # Current tab builder = ui.builder('current') self.view = builder.get_object('current_page_treeview') self.selection = self.view.get_selection() self.filterpattern = builder.get_object('current_page_filterbox_entry') self.filterbox = builder.get_object('current_page_filterbox') self.vbox = builder.get_object('current_page_v_box') builder.get_object('current_tab_label').set_text(name) tab_label_widget = builder.get_object('current_tab_eventbox') self.tab = add_tab(self.vbox, tab_label_widget, name, self.view) self.view.connect('drag-data-received', self.on_dnd_received) self.view.connect('row-activated', self.on_click) self.view.connect('button-press-event', self.on_button_press) self.view.connect('drag-begin', self.on_drag_begin) self.view.connect_after('drag-begin', self.on_dnd_after_drag_begin) self.view.connect('button-release-event', self.on_button_release) self.filter_changed_handler = self.filterpattern.connect( 'changed', self.searchfilter_key_pressed) self.filterpattern.connect('activate', self.searchfilter_on_enter) filterclosebutton = builder.get_object( 'current_page_filterbox_closebutton') filterclosebutton.connect('clicked', self.searchfilter_toggle) # Set up current view self.initialize_columns() self.selection.set_mode(Gtk.SelectionMode.MULTIPLE) target_reorder = ('MY_TREE_MODEL_ROW', Gtk.TargetFlags.SAME_WIDGET, 0) target_file_managers = ('text/uri-list', 0, 0) self.view.enable_model_drag_source( Gdk.ModifierType.BUTTON1_MASK, [target_reorder, target_file_managers], Gdk.DragAction.COPY | Gdk.DragAction.DEFAULT) self.view.enable_model_drag_dest( [target_reorder, target_file_managers], Gdk.DragAction.MOVE | Gdk.DragAction.DEFAULT) self.view.connect('drag-data-get', self.dnd_get_data_for_file_managers) def get_widgets(self): return self.vbox def is_empty(self): return len(self.store) == 0 def clear(self): self.store.clear() def on_song_change(self, status): self.unbold_boldrow(self.prev_boldrow) if status and 'song' in status: row = int(status['song']) self.boldrow(row) self.center_song_in_list() self.prev_boldrow = row def try_keep_position(func): """Decorator to keep the position of the view while updating it""" def do_try_keep_position(self, *args, **kwargs): realized = self.view.get_realized() if realized: position = self.view.get_visible_rect() result = func(self, *args, **kwargs) if realized: self.view.scroll_to_point(-1, position.y) return result return do_try_keep_position def get_treeview(self): return self.view def get_selection(self): return self.selection def get_filterbox_visible(self): return self.filterbox_visible @try_keep_position def initialize_columns(self): # Initialize current playlist data and widget self.resizing_columns = False self.columnformat = self.config.currentformat.split("|") current_columns = [MPDSong] + [str] * len(self.columnformat) + [int] previous_tracks = (item[0] for item in (self.store or [])) self.store = Gtk.ListStore(*(current_columns)) cellrenderer = Gtk.CellRendererText() cellrenderer.set_property("ellipsize", Pango.EllipsizeMode.END) cellrenderer.set_property("weight-set", True) num_columns = len(self.columnformat) if num_columns != len(self.config.columnwidths): # Number of columns changed, set columns equally spaced: self.config.columnwidths = [self.view.get_allocation().width / \ num_columns] * num_columns colnames = formatting.parse_colnames(self.config.currentformat) for column in self.view.get_columns(): self.view.remove_column(column) self.columns = [Gtk.TreeViewColumn(name, cellrenderer, markup=(i + 1)) for i, name in enumerate(colnames)] for tree in self.columns: tree.add_attribute(cellrenderer, "weight", len(current_columns) - 1) for column, width in zip(self.columns, self.config.columnwidths): column.set_sizing(Gtk.TreeViewColumnSizing.FIXED) # If just one column, we want it to expand with the tree, so # don't set a fixed_width; if multiple columns, size accordingly: if num_columns > 1: column.set_resizable(True) try: column.set_fixed_width(max(width, 10)) except: column.set_fixed_width(150) column.connect('clicked', self.on_column_click) self.view.append_column(column) self.view.set_fixed_height_mode(True) self.view.set_headers_visible(num_columns > 1 and \ self.config.show_header) self.view.set_headers_clickable(not self.filterbox_visible) self.update_format(previous_tracks) self.view.set_model(self.store) def dnd_get_data_for_file_managers(self, _treeview, context, selection, _info, timestamp): if not os.path.isdir(self.config.current_musicdir): # Prevent the DND mouse cursor from looking like we can DND # when we clearly can't. return Gdk.drag_status(context, Gdk.DragAction.COPY, timestamp) filenames = self.get_selected_filenames(True) uris = ["file://%s" % urllib.parse.quote(filename) for filename in filenames] selection.set_uris(uris) def get_selected_filenames(self, return_abs_paths): _model, selected = self.selection.get_selected_rows() filenames = [] for path in selected: index = path.get_indices()[0] item = self.store[index][0].file if return_abs_paths: filenames.append( os.path.join(self.config.current_musicdir, item)) else: filenames.append(item) return filenames def update_format(self, tracks): for i, track in enumerate(tracks): items = [formatting.parse(part, track, True) for part in self.columnformat] if self.songinfo().pos == i: weight = [Pango.Weight.BOLD] else: weight = [Pango.Weight.NORMAL] self.store.append([track] + items + weight) @try_keep_position def current_update(self, prevstatus_playlist, new_playlist_length): if self.connected(): self.view.freeze_child_notify() self.unbold_boldrow(self.prev_boldrow) if not self.update_skip: save_model = self.view.get_model() self.view.set_model(None) if prevstatus_playlist: changed_songs = self.mpd.plchanges(prevstatus_playlist) else: changed_songs = self.mpd.plchanges(0) newlen = int(new_playlist_length) currlen = len(self.store) for track in changed_songs: pos = track.pos items = [formatting.parse(part, track, True) for part in self.columnformat] if pos < currlen: # Update attributes for item: i = self.store.get_iter((pos, )) if track.id != self.store.get_value(i, 0).id: self.store.set_value(i, 0, track) for index in range(len(items)): if items[index] != self.store.get_value(i, index+1): self.store.set_value(i, index + 1, items[index]) else: # Add new item: self.store.append( [track] + items + [Pango.Weight.NORMAL]) if newlen == 0: self.store.clear() else: # Remove excess songs: for i in range(currlen - newlen): it = self.store.get_iter((currlen - 1 - i,)) self.store.remove(it) self.view.set_model(save_model) self.update_skip = False # Update statusbar time: self.total_time = sum(item[0].time for item in self.store) if 'pos' in self.songinfo(): currsong = self.songinfo().pos self.boldrow(currsong) self.prev_boldrow = currsong self.view.thaw_child_notify() self.header_update_column_indicators() self.update_statusbar() ui.change_cursor(None) def header_update_column_indicators(self): # If we just sorted a column, display the sorting arrow: if self.column_sorted[0]: if self.column_sorted[1] == Gtk.SortType.DESCENDING: self.header_hide_all_indicators(self.view, True) self.column_sorted[0].set_sort_order(Gtk.SortType.ASCENDING) self.column_sorted = (None, Gtk.SortType.ASCENDING) else: self.header_hide_all_indicators(self.view, True) self.column_sorted[0].set_sort_order(Gtk.SortType.DESCENDING) self.column_sorted = (None, Gtk.SortType.DESCENDING) def header_hide_all_indicators(self, treeview, show_sorted_column): if not show_sorted_column: self.column_sorted = (None, Gtk.SortType.descending) for column in treeview.get_columns(): if show_sorted_column and column == self.column_sorted[0]: column.set_sort_indicator(True) else: column.set_sort_indicator(False) def center_song_in_list(self, do_select_current_song=False): if not self.filterbox_visible and self.config.expanded and \ len(self.store) > 0: row_path = Gtk.TreePath(self.songinfo().pos) if do_select_current_song: selection = self.view.get_selection() selection.unselect_all() selection.select_path(row_path) self.view.set_cursor(row_path) self.view.grab_focus() # For some reason, calling view.set_cursor() after # view.scroll_to_cell() changes the scrolling position of the view # (the selected item appears at the top of the view, not in the # center anymore). self.view.scroll_to_cell(row_path, None, True, 0.5, 0.5) def get_songid(self, i, model): return model.get_value(i, 0).id def on_drag_begin(self, _widget, _context): self.sel_rows = False def on_dnd_after_drag_begin(self, _widget, context): # Override default image of selected row with sonata icon: Gtk.drag_set_icon_stock(context, 'sonata', 0, 0) def on_button_release(self, widget, event): if self.sel_rows: self.sel_rows = False # User released mouse, select single row: selection = widget.get_selection() selection.unselect_all() path, _col, _x, _y = widget.get_path_at_pos(int(event.x), int(event.y)) selection.select_path(path) def on_column_click(self, column): columns = self.view.get_columns() col_num = 0 for col in columns: col_num = col_num + 1 if column == col: self.sort('col' + str(col_num), column) return def on_sort_by_artist(self, _action): self.sort('artist') def on_sort_by_album(self, _action): self.sort('album') def on_sort_by_title(self, _action): self.sort('title') def on_sort_by_file(self, _action): self.sort('file') def on_sort_by_dirfile(self, _action): self.sort('dirfile') def sort(self, mode, column=None): if self.connected(): if not self.store: return while Gtk.events_pending(): Gtk.main_iteration() songs = [] track_num = 0 if mode[0:3] == 'col': col_num = int(mode.replace('col', '')) if column.get_sort_indicator(): # If this column was already sorted, reverse list: self.column_sorted = (column, self.column_sorted[1]) self.on_sort_reverse(None) return else: self.column_sorted = (column, Gtk.SortType.DESCENDING) mode = "col" # If the first tag in the format is song length, we will make # sure to compare the same number of items in the song length # string (e.g. always use ##:##:##) and pad the first item to two # (e.g. #:##:## -> ##:##:##) custom_sort = False if mode == 'col': custom_sort, custom_pos = self.sort_get_first_format_tag( self.config.currentformat, col_num, 'L') for track in (item[0] for item in self.store): record = {} # Those items that don't have the specified tag will be put at # the end of the list (hence the 'zzzzzzz'): zzz = 'zzzzzzzz' if mode == 'artist': record["sortby"] = ( misc.lower_no_the(track.artist or zzz), (track.album or zzz).lower(), track.disc, track.track) elif mode == 'album': record["sortby"] = ((track.album or zzz).lower(), track.disc, track.track) elif mode == 'file': record["sortby"] = os.path.basename(track.file or zzz).lower() elif mode == 'dirfile': record["sortby"] = (track.file or zzz).lower() elif mode == 'col': # Sort by column: record["sortby"] = self.store.get_value( self.store.get_iter((track_num, 0)), col_num).lower() if custom_sort: record["sortby"] = self.sanitize_songlen_for_sorting( record["sortby"], custom_pos) else: record["sortby"] = track.get(mode, zzz).lower() record["id"] = track.id songs.append(record) track_num = track_num + 1 songs.sort(key=lambda x: x["sortby"]) pos = 0 self.mpd.command_list_ok_begin() for item in songs: self.mpd.moveid(item["id"], pos) pos += 1 self.mpd.command_list_end() self.iterate_now() self.header_update_column_indicators() def sort_get_first_format_tag(self, format, colnum, tag_letter): # Returns a tuple with whether the first tag of the format # includes tag_letter and the position of the tag in the string: formats = format.split('|') format = formats[colnum-1] prev_letter = None for letter in format: if letter == tag_letter and prev_letter == '%': return (True, pos) else: break prev_letter = letter return (False, 0) def sanitize_songlen_for_sorting(self, songlength, pos_of_string): songlength = songlength[pos_of_string:] items = [item.zfill(2) for item in songlength.split(':')] for i in range(3 - len(items)): items.insert(0, "00") return ":".join(item for item in items[:3]) def on_sort_reverse(self, _action): if self.connected(): if not self.store: return while Gtk.events_pending(): Gtk.main_iteration() top = 0 bot = len(self.store)-1 self.mpd.command_list_ok_begin() while top < bot: self.mpd.swap(top, bot) top = top + 1 bot = bot - 1 self.mpd.command_list_end() self.iterate_now() def on_dnd_received(self, treeview, drag_context, x, y, selection, _info, timestamp): drop_info = treeview.get_dest_row_at_pos(x, y) if selection.get_data(): if not os.path.isdir(self.config.current_musicdir): return # DND from outside sonata: uri = selection.get_data().strip().decode('utf-8') path = urllib.request.url2pathname(uri) paths = path.rsplit('\n') mpdpaths = [] # Strip off paranthesis so that we can DND entire music dir # if we wish. musicdir = self.config.current_musicdir[:-1] for i, path in enumerate(paths): paths[i] = path.rstrip('\r') if paths[i].startswith('file://'): paths[i] = paths[i][7:] elif paths[i].startswith('file:'): paths[i] = paths[i][5:] if paths[i].startswith(musicdir): paths[i] = paths[i][len(musicdir):] if len(paths[i]) == 0: paths[i] = "/" listallinfo = self.mpd.listallinfo(paths[i]) for item in listallinfo: if 'file' in item: mpdpaths.append(item['file']) # Add local file, available in mpd 0.14. This currently # work because python-mpd does not support unix socket # paths, won't which is needed for authentication for # local files. It's also therefore untested. if os.path.isdir(paths[i]): filenames = misc.get_files_recursively(paths[i]) else: filenames = [paths[i]] for filename in filenames: if os.path.exists(filename): mpdpaths.append("file://" + urllib.parse.quote(filename)) if len(mpdpaths) > 0: # Items found, add to list at drop position: if drop_info: destpath, position = drop_info if position in (Gtk.TreeViewDropPosition.BEFORE, Gtk.TreeViewDropPosition.INTO_OR_BEFORE): songid = destpath[0] else: songid = destpath[0] + 1 else: songid = len(self.store) for mpdpath in mpdpaths: self.mpd.addid(mpdpath, songid) self.iterate_now() return # Otherwise, it's a DND just within the current playlist model = self.store _foobar, selected = self.selection.get_selected_rows() # calculate all this now before we start moving stuff drag_sources = [] for path in selected: index = path[0] treeiter = model.get_iter(path) songid = self.get_songid(treeiter, model) drag_sources.append([index, treeiter, songid]) # Keep track of the moved iters so we can select them afterwards moved_iters = [] # Will manipulate model to prevent the entire playlist from refreshing offset = 0 self.mpd.command_list_ok_begin() for index, treeiter, songid in drag_sources: if drop_info: destpath, position = drop_info dest = destpath[0] + offset if dest < index: offset = offset + 1 pop_from = index move_to = dest if position in (Gtk.TreeViewDropPosition.BEFORE, Gtk.TreeViewDropPosition.INTO_OR_BEFORE): insert_to = dest if dest < index + 1: pop_from = index + 1 else: move_to = dest - 1 else: insert_to = dest + 1 if dest < index: pop_from = index + 1 move_to = insert_to else: dest = len(self.store) - 1 insert_to = dest + 1 self.mpd.moveid(songid, move_to) moved_iters.append(model.insert(insert_to, tuple(model[index]))) model.remove(treeiter) # now fixup for source in drag_sources: if dest < index: # we moved it back, so all indexes inbetween increased by 1 if dest < source[0] < index: source[0] += 1 else: # we moved it ahead, so all indexes inbetween # decreased by 1 if index < source[0] < dest: source[0] -= 1 self.mpd.command_list_end() # we are manipulating the model manually for speed, so... self.update_skip = True # Gdk.DragContext.get_action() returns a bitmask of actions if drag_context.get_actions() & Gdk.DragAction.MOVE: Gdk.drag_finish(drag_context, True, True, timestamp) self.header_hide_all_indicators(self.view, False) self.iterate_now() selection = treeview.get_selection() selection.unselect_all() for i in moved_iters: selection.select_iter(i) if moved_iters: treeview.scroll_to_cell(model.get_path(moved_iters[0]), None) def on_click(self, _treeview, path, _column): model = self.view.get_model() if self.filterbox_visible: self.searchfilter_on_enter(None) return try: i = model.get_iter(path) self.mpd.playid(self.get_songid(i, model)) except: pass self.sel_rows = False self.iterate_now() def searchfilter_toggle(self, _widget, initial_text=""): if self.filterbox_visible: ui.hide(self.filterbox) self.filterbox_visible = False self.filterpattern.set_text("") self.view.set_model(self.store) elif self.connected(): self.playlist_pos_before_filter = \ self.view.get_visible_rect().height self.filterbox_visible = True with self.filterpattern.handler_block(self.filter_changed_handler): self.filterpattern.set_text(initial_text) ui.show(self.filterbox) self.filterpattern.grab_focus() self.view.set_headers_clickable(not self.filterbox_visible) def model_filter_func(self, model, iter, regex): row = model.get(iter, 1, *range(len(self.columnformat)- 1)[1:]) for cell in row: if regex.match(cell.lower()): return True return False def searchfilter_on_enter(self, _entry): model, selected = self.view.get_selection().get_selected_rows() song_id = None if len(selected) > 0: # If items are selected, play the first selected item: song_id = self.get_songid(model.get_iter(selected[0]), model) elif len(model) > 0: # If nothing is selected: play the first item: song_id = self.get_songid(model.get_iter_first(), model) if song_id: self.searchfilter_toggle(None) self.mpd.playid(song_id) def searchfilter_key_pressed(self, widget): # We have something new to search, try first to cancel the previous # search. try: GLib.source_remove(self.refilter_handler_id) except TypeError: # self.refilter_handler_id is None pass text = widget.get_text() if text == '': # Nothing to search for, just display the whole model. self.view.set_model(self.store) return regex = misc.escape_html(text) regex = re.escape(regex) regex = '.*' + regex.replace(' ', ' .*').lower() filter_regex = re.compile(regex) def set_filtering_function(regex): # Creates a Gtk.TreeModelFilter filter_model = self.store.filter_new() filter_model.set_visible_func(self.model_filter_func, regex) self.view.set_model(filter_model) # Delay slightly the new search, in case something else is coming. self.refilter_handler_id = GLib.timeout_add( 250, set_filtering_function, filter_regex) def filter_key_pressed(self, widget, event, treeview): if event.keyval == Gdk.keyval_from_name('Down') or \ event.keyval == Gdk.keyval_from_name('Up') or \ event.keyval == Gdk.keyval_from_name('Page_Down') or \ event.keyval == Gdk.keyval_from_name('Page_Up'): treeview.grab_focus() treeview.emit("key-press-event", event) GLib.idle_add(self.filter_entry_grab_focus, widget) def boldrow(self, row): if row > -1: try: self.store[row][-1] = Pango.Weight.BOLD except IndexError: # The row might not exist anymore pass def unbold_boldrow(self, row): if row > -1: try: self.store[row][-1] = Pango.Weight.NORMAL except IndexError: # The row might not exist anymore pass def on_remove(self): model, selected = self.selection.get_selected_rows() if len(selected) == len(self.store) and not self.filterbox_visible: # Everything is selected, clear: self.mpd.clear() elif len(selected) > 0: # we are manipulating the model manually for speed, so... self.update_skip = True self.mpd.command_list_ok_begin() for i in (model.get_iter(path) for path in reversed(selected)): self.mpd.deleteid(model.get(i, 0)[0].id) if model != self.store: # model is different if there is a filter currently applied. # So we retrieve the iter of the wrapped model... i = model.convert_iter_to_child_iter(i) self.store.remove(i) self.mpd.command_list_end() �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/sonata/dbus_plugin.py������������������������������������������������������������������0000664�0000000�0000000�00000013772�13771420143�0017172�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> # Copyright 2009-2014 Jonathan Ballet <jon@multani.info> # # This file is part of Sonata. # # Sonata is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Sonata is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Sonata. If not, see <http://www.gnu.org/licenses/>. """ This plugin implements D-Bus features for Sonata: * Check that only one instance of Sonata is running at a time * Allow other programs to request the info popup, and to show or to toggle the main window visibility * Listen to Gnome 2.18+ multimedia key events XXX Not a real plugin yet. Example usage: import dbus_plugin as dbus self.dbus_service = dbus.SonataDBus(self.dbus_show, self.dbus_toggle, self.dbus_popup, self.dbus_fullscreen) dbus.init_gnome_mediakeys(self.mpd_pp, self.mpd_stop, self.mpd_prev, self.mpd_next) if not dbus.using_gnome_mediakeys(): # do something else instead... """ import logging import sys try: import dbus import dbus.service import _dbus_bindings as dbus_bindings from dbus.mainloop.glib import DBusGMainLoop DBusGMainLoop(set_as_default=True) HAVE_DBUS = True except: HAVE_DBUS = False logger = logging.getLogger(__name__) def using_dbus(): return HAVE_DBUS HAVE_GNOME_MMKEYS = False def using_gnome_mediakeys(): return HAVE_GNOME_MMKEYS def init_gnome_mediakeys(mpd_pp, mpd_stop, mpd_prev, mpd_next): global HAVE_GNOME_MMKEYS if HAVE_DBUS: try: bus = dbus.SessionBus() dbusObj = bus.get_object('org.freedesktop.DBus', '/org/freedesktop/DBus') dbusInterface = dbus.Interface(dbusObj, 'org.freedesktop.DBus') if dbusInterface.NameHasOwner('org.gnome.SettingsDaemon'): try: # mmkeys for gnome 2.22+ settingsDaemonObj = bus.get_object( 'org.gnome.SettingsDaemon', '/org/gnome/SettingsDaemon/MediaKeys') settingsDaemonInterface = dbus.Interface(settingsDaemonObj, 'org.gnome.SettingsDaemon.MediaKeys') settingsDaemonInterface.GrabMediaPlayerKeys('Sonata', 0) except: # mmkeys for gnome 2.18+ settingsDaemonObj = bus.get_object( 'org.gnome.SettingsDaemon', '/org/gnome/SettingsDaemon') settingsDaemonInterface = dbus.Interface(settingsDaemonObj, 'org.gnome.SettingsDaemon') settingsDaemonInterface.GrabMediaPlayerKeys('Sonata', 0) settingsDaemonInterface.connect_to_signal( 'MediaPlayerKeyPressed', lambda app, key: mediaPlayerKeysCallback(mpd_pp, mpd_stop, mpd_prev, mpd_next, app, key)) HAVE_GNOME_MMKEYS = True except: pass def mediaPlayerKeysCallback(mpd_pp, mpd_stop, mpd_prev, mpd_next, app, key): if app == 'Sonata': if key in ('Play', 'PlayPause', 'Pause'): mpd_pp(None) elif key == 'Stop': mpd_stop(None) elif key == 'Previous': mpd_prev(None) elif key == 'Next': mpd_next(None) def get_session_bus(): try: return dbus.SessionBus() except Exception: logger.error( _('Sonata failed to connect to the D-BUS session bus: ' 'Unable to determine the address of the message bus ' '(try \'man dbus-launch\' and \'man dbus-daemon\' ' 'for help)")')) raise def execute_remote_commands(toggle=False, popup=False, fullscreen=False, start=False): try: bus = get_session_bus() obj = bus.get_object('org.MPD', '/org/MPD/Sonata') if toggle: obj.toggle(dbus_interface='org.MPD.SonataInterface') if popup: obj.popup(dbus_interface='org.MPD.SonataInterface') if fullscreen: obj.fullscreen(dbus_interface='org.MPD.SonataInterface') sys.exit() except Exception: logger.warning(_("Failed to execute remote commands.")) if start is None or start: logger.info(_("Starting Sonata instead...")) else: # TODO: should we log the exception here? logger.critical(_("Maybe Sonata is not running?")) sys.exit(1) if HAVE_DBUS: class SonataDBus(dbus.service.Object): def __init__(self, dbus_show, dbus_toggle, dbus_popup, dbus_fullscreen): self.dbus_show = dbus_show self.dbus_toggle = dbus_toggle self.dbus_popup = dbus_popup self.dbus_fullscreen = dbus_fullscreen session_bus = get_session_bus() bus_name = dbus.service.BusName('org.MPD', bus=session_bus) object_path = '/org/MPD/Sonata' super().__init__(bus_name, object_path) @dbus.service.method('org.MPD.SonataInterface') def show(self): self.dbus_show() @dbus.service.method('org.MPD.SonataInterface') def toggle(self): self.dbus_toggle() @dbus.service.method('org.MPD.SonataInterface') def popup(self): self.dbus_popup() @dbus.service.method('org.MPD.SonataInterface') def fullscreen(self): self.dbus_fullscreen() ������sonata-1.7.0/sonata/formatting.py�������������������������������������������������������������������0000664�0000000�0000000�00000014705�13771420143�0017026�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> # Copyright 2009-2014 Jonathan Ballet <jon@multani.info> # # This file is part of Sonata. # # Sonata is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Sonata is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Sonata. If not, see <http://www.gnu.org/licenses/>. """This module implements the format strings used to display song info. Example usage: import formatting colnames = formatting.parse_colnames(self.config.currentformat) ... newtitle = formatting.parse(self.config.titleformat, self.songinfo, False, True) ... formatcodes = formatting.formatcodes """ import re import os from sonata import mpdhelper as mpdh from sonata import misc class FormatCode: """Implements deafult format code behavior. Replaces all instances of %code with the value of key or default if the key doesn't exist. """ def __init__(self, code, description, column, key, default=_("Unknown")): self.code = code self.description = description self.column = column self.key = key self.default = default def format(self, item, wintitle, songpos): """Returns the value used in place of the format code""" return str(item.get(self.key, self.default)) class NumFormatCode(FormatCode): """Implements format code behavior for numeric values. Used for numbers which need special padding. """ def __init__(self, code, description, column, key, default, padding): super().__init__(code, description, column, key, default) self.padding = padding def format(self, item, wintitle, songpos): return str(item.get(self.key, self.default)).zfill(self.padding) class PathFormatCode(FormatCode): """Implements format code behavior for path values.""" def __init__(self, code, description, column, key, path_func): """ path_func: os.path function to apply """ super().__init__(code, description, column, key) self.func = getattr(os.path, path_func) def format(self, item, wintitle, songpos): return self.func(FormatCode.format(self, item, wintitle, songpos)) class TitleFormatCode(FormatCode): """Implements format code behavior for track titles.""" def format(self, item, wintitle, songpos): path = item['file'] full_path = re.match(r"^(http://|ftp://)", path) self.default = path if full_path else os.path.basename(path) self.default = misc.escape_html(self.default) return FormatCode.format(self, item, wintitle, songpos) class LenFormatCode(FormatCode): """Implements format code behavior for song length.""" def format(self, item, wintitle, songpos): time = FormatCode.format(self, item, wintitle, songpos) if time.isdigit(): time = misc.convert_time(int(time)) return time class ElapsedFormatCode(FormatCode): """Implements format code behavior for elapsed time.""" def format(self, item, wintitle, songpos): if not wintitle: return "%E" elapsed_time = songpos.split(':')[0] if songpos else self.default if elapsed_time.isdigit(): elapsed_time = misc.convert_time(int(elapsed_time)) return elapsed_time formatcodes = [FormatCode('A', _('Artist name'), _("Artist"), 'artist'), FormatCode('B', _('Album name'), _("Album"), 'album'), TitleFormatCode('T', _('Track name'), _("Track"), 'title'), NumFormatCode('N', _('Track number'), _("#"), 'track', '00', 2), NumFormatCode('D', _('Disc number'), _("#"), 'disc', '0', 0), FormatCode('Y', _('Year'), _("Year"), 'date', '?'), FormatCode('G', _('Genre'), _("Genre"), 'genre'), PathFormatCode('P', _('File path'), _("Path"), 'file', 'dirname'), PathFormatCode('F', _('File name'), _("File"), 'file', 'basename'), FormatCode('S', _('Stream name'), _("Stream"), 'name'), LenFormatCode('L', _('Song length'), _("Len"), 'time', '?'), ElapsedFormatCode('E', _('Elapsed time (title only)'), None, 'songpos', '?')] replace_map = dict((code.code, code) for code in formatcodes) replace_expr = r"%%[%s]" % "".join(k for k in replace_map.keys()) def _return_substrings(format): """Split format along the { and } characters. For example: %A{-%T} {%L} -> ['%A', '{-%T} ', '{%L}']""" substrings = [] end = format while len(end) > 0: begin, sep1, end = end.partition('{') substrings.append(begin) if len(end) == 0: substrings.append(sep1) break begin, sep2, end = end.partition('}') substrings.append(sep1 + begin + sep2) return substrings def parse_colnames(format): def replace_format(m): format_code = replace_map.get(m.group(0)[1:]) return format_code.column cols = [re.sub(replace_expr, replace_format, s). replace("{", ""). replace("}", ""). # If the user wants the format of, e.g., "#%N", we'll # ensure the # doesn't show up twice in a row. replace("##", "#") for s in format.split('|')] return cols class EmptyBrackets(Exception): pass def _format_substrings(text, item, wintitle, songpos): has_brackets = text.startswith("{") and text.endswith("}") def formatter(m): format_code = replace_map[m.group(0)[1:]] if has_brackets and format_code.key not in item: raise EmptyBrackets return format_code.format(item, wintitle, songpos) try: text = re.sub(replace_expr, formatter, text) except EmptyBrackets: return "" return text[1:-1] if has_brackets else text def parse(format, item, use_escape_html, wintitle=False, songpos=None): substrings = _return_substrings(format) text = "".join(_format_substrings(sub, item, wintitle, songpos) for sub in substrings) return misc.escape_html(text) if use_escape_html else text �����������������������������������������������������������sonata-1.7.0/sonata/img.py��������������������������������������������������������������������������0000664�0000000�0000000�00000010405�13771420143�0015421�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> # Copyright 2009-2014 Jonathan Ballet <jon@multani.info> # # This file is part of Sonata. # # Sonata is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Sonata is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Sonata. If not, see <http://www.gnu.org/licenses/>. import itertools import os from gi.repository import Gtk, Gdk, GdkPixbuf, GLib from sonata import consts VALID_EXTENSIONS = set( itertools.chain.from_iterable( fmt.get_extensions() for fmt in GdkPixbuf.Pixbuf.get_formats() ) ) def valid_image(filename): return bool(GdkPixbuf.Pixbuf.get_file_info(filename)) def get_pixbuf_of_size(pixbuf, size): # Creates a pixbuf that fits in the specified square of sizexsize # while preserving the aspect ratio # Returns tuple: (scaled_pixbuf, actual_width, actual_height) image_width = pixbuf.get_width() image_height = pixbuf.get_height() if image_width > image_height: if image_width > size: image_height = int(size / float(image_width) * image_height) image_width = size else: if image_height > size: image_width = int(size / float(image_height) * image_width) image_height = size crop_pixbuf = pixbuf.scale_simple(image_width, image_height, GdkPixbuf.InterpType.HYPER) return (crop_pixbuf, image_width, image_height) def pixbuf_add_border(pix): # Add a gray outline to pix. This will increase the pixbuf size by # 2 pixels lengthwise and heightwise, 1 on each side. Returns pixbuf. width = pix.get_width() height = pix.get_height() newpix = GdkPixbuf.Pixbuf.new(GdkPixbuf.Colorspace.RGB, True, 8, width + 2, height + 2) newpix.fill(0x858585ff) pix.copy_area(0, 0, width, height, newpix, 1, 1) return newpix def pixbuf_pad(pix, w, h): # Adds transparent canvas so that the pixbuf is of size (w,h). Also # centers the pixbuf in the canvas. width = pix.get_width() height = pix.get_height() transpbox = GdkPixbuf.Pixbuf.new(GdkPixbuf.Colorspace.RGB, True, 8, w, h) transpbox.fill(0) x_pos = int((w - width) / 2) y_pos = int((h - height) / 2) pix.copy_area(0, 0, width, height, transpbox, x_pos, y_pos) return transpbox def do_style_cover(config, pix, w, h): """Style a cover, according to the specified configuration.""" if config.covers_type == consts.COVERS_TYPE_STYLIZED: return composite_case(pix, w, h) else: return pix def composite_case(pix, w, h): """Blend the cover with a 'case' cover, for maximum beauty.""" if w / h <= 0.5: return pix # Rather than merely compositing the case on top of the artwork, # we will scale the artwork so that it isn't covered by the case: spine_ratio = 60 / 600 # From original png spine_width = int(w * spine_ratio) #case_icon = Gtk.IconFactory.lookup_default('sonata-case') ## We use the fullscreenalbumimage because it's the biggest we have #context = self.fullscreenalbumimage.get_style_context() #case_pb = case_icon.render_icon_pixbuf(context, -1) i = Gtk.Image.new_from_pixbuf(pix) case_pb = i.render_icon_pixbuf('sonata-case', -1) case = case_pb.scale_simple(w, h, GdkPixbuf.InterpType.BILINEAR) # Scale pix and shift to the right on a transparent pixbuf: pix = pix.scale_simple(w - spine_width, h, GdkPixbuf.InterpType.BILINEAR) blank = GdkPixbuf.Pixbuf.new(GdkPixbuf.Colorspace.RGB, True, 8, w, h) blank.fill(0x00000000) pix.copy_area(0, 0, pix.get_width(), pix.get_height(), blank, spine_width, 0) # Composite case and scaled pix: case.composite(blank, 0, 0, w, h, 0, 0, 1, 1, GdkPixbuf.InterpType.BILINEAR, 250) del case del case_pb return blank �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/sonata/info.py�������������������������������������������������������������������������0000664�0000000�0000000�00000053504�13771420143�0015607�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> # Copyright 2009-2014 Jonathan Ballet <jon@multani.info> # # This file is part of Sonata. # # Sonata is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Sonata is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Sonata. If not, see <http://www.gnu.org/licenses/>. import sys import os import locale import logging import threading from gi.repository import Gtk, Pango, Gdk, GdkPixbuf, GLib from sonata import ui, misc, consts, mpdhelper as mpdh, img from sonata.pluginsystem import pluginsystem def target_lyrics_filename(cfg, artist, title, song_dir, force_location=None): """Get the filename of the lyrics of a song""" lyrics_loc = force_location if force_location else cfg.lyrics_location if song_dir is not None: song_dir.replace('%', '%%') music_dir = cfg.musicdir[cfg.profile_num].replace('%', '%%') pattern1 = "%s-%s.txt" pattern2 = "%s - %s.txt" # Note: *_ALT searching is for compatibility with other mpd clients # (like ncmpcpp): file_map = { consts.LYRICS_LOCATION_HOME: ("~/.lyrics", pattern1), consts.LYRICS_LOCATION_PATH: (music_dir, song_dir, pattern1), consts.LYRICS_LOCATION_HOME_ALT: ("~/.lyrics", pattern2), consts.LYRICS_LOCATION_PATH_ALT: (music_dir, song_dir, pattern2), } file_path = os.path.join(*file_map[lyrics_loc]) file_path = os.path.expanduser(file_path) % (artist, title) return misc.file_exists_insensitive(file_path) class Info: def __init__(self, config, linkcolor, on_link_click_cb, get_playing_song, TAB_INFO, on_image_activate, on_image_motion_cb, on_image_drop_cb, album_return_artist_and_tracks, add_tab): self.logger = logging.getLogger(__name__) self.config = config self.linkcolor = linkcolor self.on_link_click_cb = on_link_click_cb self.get_playing_song = get_playing_song self.album_return_artist_and_tracks = album_return_artist_and_tracks self.last_bitrate = None self.info_boxes_in_more = None self._editlabel = None self.info_left_label = None self.info_lyrics = None self._morelabel = None self._searchlabel = None self.lyrics_text = None self.album_text = None self.active = False # Info tab self.builder = ui.builder('info') self.css_provider = ui.css_provider('info') self.info_area = self.builder.get_object('info_page_scrolledwindow') self.tab_label_widget = self.builder.get_object('info_tab_eventbox') tab_label = self.builder.get_object('info_tab_label') tab_label.set_text(TAB_INFO) self.tab = add_tab(self.info_area, self.tab_label_widget, TAB_INFO, self.info_area) self._imagebox = self.builder.get_object('info_page_song_eventbox') self.image = self.builder.get_object('info_page_song_image') self.image.set_from_icon_set(ui.icon('sonata-cd-large'), -1) self._imagebox.drag_dest_set(Gtk.DestDefaults.HIGHLIGHT | Gtk.DestDefaults.DROP, [Gtk.TargetEntry.new("text/uri-list", 0, 80), Gtk.TargetEntry.new("text/plain", 0, 80)], Gdk.DragAction.DEFAULT) self._imagebox.connect('button_press_event', on_image_activate) self._imagebox.connect('drag_motion', on_image_motion_cb) self._imagebox.connect('drag_data_received', on_image_drop_cb) self._widgets_initialize() def _widgets_initialize(self): self._widgets_song() self._widgets_lyrics() self._widgets_album() # Finish.. if not self.config.show_lyrics: ui.hide(self.info_lyrics) if not self.config.show_covers: ui.hide(self._imagebox) def _widgets_song(self): self.info_song = self.builder.get_object('info_page_song_expander') self.info_song.set_expanded(self.config.info_song_expanded) self.info_song_grid = self.builder.get_object('info_page_song_grid') self.info_song.connect("activate", self._expanded, "song") self.info_labels = {} names = ('title', 'artist', 'album', 'date', 'track', 'genre', 'file', 'bitrate') for name in names: self.info_labels[name] = self.builder.get_object( 'info_song_{}_label'.format(name)) artist_eventbox = self.builder.get_object('info_song_artist_eventbox') album_eventbox = self.builder.get_object('info_song_album_eventbox') links = { 'artist': artist_eventbox, 'album': album_eventbox,} for name, widget in links.items(): self._apply_link_signals(widget, name) file_label = self.builder.get_object('info_song_file_label_label') bitrate_label = self.builder.get_object('info_song_bitrate_label_label') self.info_boxes_in_more = { 'values': (self.info_labels['file'], self.info_labels['bitrate'],), 'labels': (file_label, bitrate_label,),} self._morelabel = self.builder.get_object('info_song_links_more_label') self.toggle_more() moreevbox = self.builder.get_object('info_song_links_more_eventbox') self._apply_link_signals(moreevbox, 'more') self._editlabel = self.builder.get_object('info_song_links_edit_label') editevbox = self.builder.get_object('info_song_links_edit_eventbox') self._apply_link_signals(editevbox, 'edit') def _widgets_lyrics(self): self.info_lyrics = self.builder.get_object('info_page_lyrics_expander') self.info_lyrics.set_expanded(self.config.info_lyrics_expanded) self.info_lyrics.connect("activate", self._expanded, "lyrics") self.lyrics_scrolledwindow = self.builder.get_object( 'info_page_lyrics_scrolledwindow') self.lyrics_text = self.builder.get_object('info_page_lyrics_textview') self._populate_lyrics_tag_table() self._searchlabel = self.builder.get_object('info_page_lyrics_search') search_eventbox = self.builder.get_object( 'info_page_lyrics_search_eventbox') self._apply_link_signals(search_eventbox, 'search') def _widgets_album(self): self.info_album = self.builder.get_object('info_page_album_expander') self.info_album.set_expanded(self.config.info_album_expanded) self.album_text = self.builder.get_object('info_page_album_textview') self.album_scrolledwindow = self.builder.get_object( 'info_page_album_scrolledwindow') self.info_album.connect("activate", self._expanded, "album") def get_widgets(self): return self.info_area def get_info_imagebox(self): return self._imagebox def show_lyrics_updated(self): func = "show" if self.config.show_lyrics else "hide" getattr(ui, func)(self.info_lyrics) def _apply_link_signals(self, widget, linktype): widget.connect("enter-notify-event", self.on_link_enter) widget.connect("leave-notify-event", self.on_link_leave) widget.connect("button-press-event", self.on_link_click, linktype) def on_link_enter(self, widget, _event): ui.change_cursor(Gdk.Cursor.new(Gdk.CursorType.HAND2)) def on_link_leave(self, _widget, _event): ui.change_cursor(None) def toggle_more(self): if self.config.info_song_more: text = _("hide") func = "show" else: text = _("more") func = "hide" text = "({})".format(text) self._morelabel.set_text(text) func = getattr(ui, func) for widget in self.info_boxes_in_more['labels']: func(widget) if not self.active and self.config.info_song_more: return for widget in self.info_boxes_in_more['values']: func(widget) def on_link_click(self, _widget, _event, linktype): if linktype == 'more': self.config.info_song_more = not self.config.info_song_more self.toggle_more() else: self.on_link_click_cb(linktype) def _expanded(self, expander, infotype): setattr(self.config, "info_%s_expanded" % infotype, not expander.get_expanded()) def clear_info(self): """Clear the info widgets of any information""" for label in self.info_labels.values(): label.hide() self._searchlabel.hide() self._show_lyrics(None, None) self.album_text.get_buffer().set_text("") self.last_bitrate = "" def update(self, playing_or_paused, newbitrate, songinfo, update_all): # update_all = True means that every tag should update. This is # only the case on song and status changes. Otherwise we only # want to update the minimum number of widgets so the user can # do things like select label text. if not playing_or_paused: self.clear_info() self.active = False return self.active = True for label in self.info_labels.values(): if self.config.info_song_more or \ not label in self.info_boxes_in_more['values']: label.show() bitratelabel = self.info_labels['bitrate'] if self.last_bitrate != newbitrate: bitratelabel.set_text(newbitrate) self.last_bitrate = newbitrate if update_all: for func in ["song", "album", "lyrics"]: getattr(self, "_update_%s" % func)(songinfo) def _update_song(self, songinfo): artistlabel = self.info_labels['artist'] tracklabel = self.info_labels['track'] albumlabel = self.info_labels['album'] filelabel = self.info_labels['file'] for name in ['title', 'date', 'genre']: label = self.info_labels[name] label.set_text(songinfo.get(name, '')) tracklabel.set_text(str(songinfo.track)) artistlabel.set_text(misc.escape_html(songinfo.artist)) albumlabel.set_text(misc.escape_html(songinfo.album)) path = os.path.join(self.config.current_musicdir, songinfo.file) if os.path.exists(path): filelabel.set_text(path) self._editlabel.show() else: filelabel.set_text(songinfo.file) self._editlabel.hide() def _update_album(self, songinfo): if 'album' not in songinfo: self.album_text.get_buffer().set_text(_("Album name not set.")) return artist, tracks = self.album_return_artist_and_tracks() albuminfo = _("Album info not found.") if tracks: tracks.sort(key=lambda x: x.track) playtime = 0 tracklist = [] for t in tracks: playtime += t.time tracklist.append("%s. %s" % ( str(t.track).zfill(2), t.get('title', os.path.basename(t.file)))) album = songinfo.album year = songinfo.date playtime = misc.convert_time(playtime) albuminfo = "\n".join(i for i in (album, artist, year, playtime) if i) albuminfo += "\n\n" albuminfo += "\n".join(t for t in tracklist) self.album_text.get_buffer().set_text(albuminfo) def _update_lyrics(self, songinfo): if self.config.show_lyrics: if 'artist' in songinfo and 'title' in songinfo: self.get_lyrics_start(songinfo.artist, songinfo.title, songinfo.artist, songinfo.title, os.path.dirname(songinfo.file)) else: self._show_lyrics(None, None, error=_(('Artist or song title ' 'not set.'))) def _check_for_local_lyrics(self, artist, title, song_dir): locations = [ consts.LYRICS_LOCATION_HOME, consts.LYRICS_LOCATION_PATH, consts.LYRICS_LOCATION_HOME_ALT, consts.LYRICS_LOCATION_PATH_ALT] for location in locations: filename = target_lyrics_filename(self.config, artist, title, song_dir, location) if os.path.exists(filename): return filename def get_lyrics_start(self, search_artist, search_title, filename_artist, filename_title, song_dir, force_fetch=False): filename_artist = misc.strip_all_slashes(filename_artist) filename_title = misc.strip_all_slashes(filename_title) filename = self._check_for_local_lyrics(filename_artist, filename_title, song_dir) lyrics = "" if filename: # If the lyrics only contain "not found", delete the file and try # to fetch new lyrics. If there is a bug in Sonata/SZI/LyricWiki # that prevents lyrics from being found, storing the "not found" # will prevent a future release from correctly fetching the lyrics. try: with open(filename, 'r', encoding="utf-8") as f: lyrics = f.read() except IOError: pass if lyrics == _("Lyrics not found"): force_fetch = True if force_fetch: # Remove all lyrics for this song while filename is not None: filename = self._check_for_local_lyrics(filename_artist, filename_title, song_dir) if filename is not None: misc.remove_file(filename) if filename: # Re-use lyrics from file: try: with open(filename, 'r', encoding="utf-8") as f: lyrics = f.read() except IOError: pass # Strip artist - title line from file if it exists, since we # now have that information visible elsewhere. header = "%s - %s\n\n" % (filename_artist, filename_title) if lyrics[:len(header)] == header: lyrics = lyrics[len(header):] self._show_lyrics(filename_artist, filename_title, lyrics=lyrics) else: def communicate(artist_then, title_then, lyrics=None, error=None): """Schedule actions from the plugin thread into the main thread""" GLib.idle_add(self._show_lyrics, artist_then, title_then, lyrics, error) # Fetch lyrics from plugins. thread = threading.Thread( name="LyricsFetcher", target=FetchLyricsWorker, args=(self.config, communicate, search_artist, search_title, song_dir)) thread.start() def _show_lyrics(self, artist_then, title_then, lyrics=None, error=None): # For error messages where there is no appropriate info: if not artist_then or not title_then: self._searchlabel.hide() if error: self.lyrics_text.get_buffer().set_text(error) elif lyrics: self.lyrics_text.get_buffer().set_text(lyrics) else: self.lyrics_text.get_buffer().set_text("") return # Verify that we are displaying the correct lyrics: songinfo = self.get_playing_song() if not songinfo: return artist_now = misc.strip_all_slashes(songinfo.artist) title_now = misc.strip_all_slashes(songinfo.title) if artist_now == artist_then and title_now == title_then: self._searchlabel.show() if error: self.lyrics_text.get_buffer().set_text(error) elif lyrics: self._set_lyrics(lyrics) else: self.lyrics_text.get_buffer().set_text("") def _set_lyrics(self, lyrics): if lyrics is None: return lyrics_buf = self.lyrics_text.get_buffer() lyrics_buf.set_text('') # pango needs only ampersand to be escaped lyrics = misc.unescape_html(lyrics).replace('&', '&') try: attr_list, plain_text, accel_marker = Pango.parse_markup(lyrics) except: # failed to parse, use lyrics as it is lyrics_buf.set_text(lyrics) return attr_iter = attr_list.get_iterator() while True: range = attr_iter.range() font = attr_iter.get_font()[0] text = plain_text[range[0]:range[1]] tags = [] if font.get_weight() == Pango.Weight.BOLD: tags.append('bold') if font.get_style() == Pango.Style.ITALIC: tags.append('italic') if tags: lyrics_buf.insert_with_tags_by_name(lyrics_buf.get_end_iter(), text, *tags) else: lyrics_buf.insert(lyrics_buf.get_end_iter(), text) if not attr_iter.next(): break def _populate_lyrics_tag_table(self): tag_table = self.lyrics_text.get_buffer().get_tag_table() bold_tag = Gtk.TextTag.new('bold') bold_tag.set_property('weight', Pango.Weight.BOLD) tag_table.add(bold_tag) italic_tag = Gtk.TextTag.new('italic') italic_tag.set_property('style', Pango.Style.ITALIC) tag_table.add(italic_tag) def on_artwork_changed(self, artwork_obj, pixbuf): if self._imagebox.get_size_request()[0] == -1: notebook_width = self.info_song_grid.get_parent().get_allocation().width grid = self.info_song_grid grid_allocation = grid.get_allocation() grid_height = grid_allocation.height grid_width = grid.get_preferred_width_for_height(grid_height)[0] fullwidth = notebook_width - (grid_width + 120) new_width = max(fullwidth, 150) else: new_width = 150 (pix2, w, h) = img.get_pixbuf_of_size(pixbuf, new_width) pix2 = img.do_style_cover(self.config, pix2, w, h) pix2 = img.pixbuf_add_border(pix2) self.image.set_from_pixbuf(pix2) del pix2 del pixbuf def on_artwork_reset(self, artwork_obj): self.image.set_from_icon_set(ui.icon('sonata-cd-large'), -1) class FetchLyricsWorker: """Thread worker to fetch lyrics for a song This must use the `communicate` method to commuicate with the main thread to update the GUI. """ def __init__(self, config, communicate, search_artist, search_title, song_dir): self.config = config self.communicate = communicate self.logger = logging.getLogger(__name__) self.fetch_lyrics(search_artist, search_title, song_dir) def fetch_lyrics(self, search_artist, search_title, song_dir): # Homogenize search patterns, so plugins don't have to do it. search_artist = str(search_artist).title() search_title = str(search_title).title() lyrics_fetchers = pluginsystem.get('lyrics_fetching') if lyrics_fetchers: self.logger.info("Looking for lyrics for %r - %r...", search_artist, search_title) self.communicate(search_artist, search_title, lyrics=_("Fetching lyrics...")) for plugin, get_lyrics in lyrics_fetchers: try: lyrics = get_lyrics(search_artist, search_title) except Exception as e: if self.logger.isEnabledFor(logging.DEBUG): # Be more verbose if we want something verbose log = self.logger.exception else: log = self.logger.warning log("Plugin %s: unable to fetch lyrics (%s)", plugin.name, e) continue if lyrics: self.logger.info("Lyrics for %r - %r fetched by %r plugin.", search_artist, search_title, plugin.name) self.get_lyrics_response(search_artist, search_title, song_dir, lyrics=lyrics) return msg = _("Lyrics not found.") else: self.logger.info("Can't look for lyrics, no plugin enabled.") msg = _("No lyrics plug-in enabled.") self.communicate(search_artist, search_title, lyrics=msg) def get_lyrics_response(self, artist_then, title_then, song_dir, lyrics=None, error=None): if lyrics and not error: filename = target_lyrics_filename(self.config, artist_then, title_then, song_dir) # Save lyrics to file: misc.create_dir('~/.lyrics/') self.logger.info("Saving lyrics to: %s", filename) try: with open(filename, 'w', encoding="utf-8") as f: lyrics = misc.unescape_html(lyrics) f.write(lyrics) except IOError as e: self.logger.warning("Can't save lyrics to %s: %s", filename, e) self.communicate(artist_then, title_then, lyrics, error) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/sonata/launcher.py���������������������������������������������������������������������0000664�0000000�0000000�00000017175�13771420143�0016461�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python3 # Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> # Copyright 2009-2014 Jonathan Ballet <jon@multani.info> # # This file is part of Sonata. # # Sonata is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Sonata is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Sonata. If not, see <http://www.gnu.org/licenses/>. """Sonata is a simple GTK+ client for the Music Player Daemon.""" import sys if sys.version_info <= (3, 2): sys.stderr.write("Sonata requires Python 3.2+\n") sys.exit(1) import gettext import locale import logging import os import platform import threading # needed for interactive shell import gi def run(): """Main entry point of Sonata""" # TODO: allow to exit the application with Ctrl+C from the terminal # This is a fix for https://bugzilla.gnome.org/show_bug.cgi?id=622084 import signal signal.signal(signal.SIGINT, signal.SIG_DFL) # XXX insert the correct sonata package dir in sys.path logging.basicConfig( level=logging.WARNING, format="[%(asctime)s] [%(threadName)s] %(name)s: %(message)s", datefmt="%Y-%m-%d %H:%M:%S", stream=sys.stderr) logger = logging.getLogger(__name__) try: import sonata except ImportError: logger.critical("Python failed to find the sonata modules.") logger.critical("Searched in the following directories:\n%s", "\n".join(sys.path)) logger.critical("Perhaps Sonata is improperly installed?") sys.exit(1) try: from sonata.version import version except ImportError: logger.critical("Python failed to find the sonata modules.") logger.critical("An old or incomplete installation was " "found in the following directory: %s", os.path.dirname(sonata.__file__)) logger.critical("Perhaps you want to delete it?") sys.exit(1) # XXX check that version.VERSION is what this script was installed for ## Apply global fixes: if platform.system() == 'Linux': sys.argv[0] = "sonata" import ctypes libc = ctypes.CDLL('libc.so.6') PR_SET_NAME = 15 libc.prctl(PR_SET_NAME, b"sonata", 0, 0, 0) ## Apply locale and translation: # Try to find a "good" locale directory. for path in [ # This is useful when working from the source repository os.path.join(os.path.dirname(sonata.__file__), "share", "locale"), # This is useful when Sonata is installed in a special place os.path.join(sonata.__file__.split('/lib')[0], 'share', 'locale'), ]: if os.path.exists(path): locales_path = path break else: # This tells gettext to look at the default place for the translation # files. locales_path = None # Gtk.Builder uses gettext functions from C library. Enable # correct localization for these functions with the locale # module. See: # https://docs.python.org/3/library/locale.html#access-to-message-catalogs try: locale.setlocale(locale.LC_ALL, '') except locale.Error as e: # If locale is not supported by C library, the initial call to # locale.setlocale will fail and raise an exception. Any Glade # strings would not be translated. But native python strings # would still be translated if the .mo files are included in # sonata! # # To prevent a mix of languages, disable translation for both: # 1. explicitly set locale to 'C' (default strings) # 2. don't provide python gettext with any translatable # strings (localedir=None), but still install the required # _() function logger.error("setlocale() failed: %s. Falling back to default locale.", e) locale.setlocale(locale.LC_ALL, 'C') gettext.install(True, localedir=None, names=["ngettext"]) else: gettext.install('sonata', locales_path, names=["ngettext"]) # bindtextdomain() is GNU libc specific and may not be available # on other systems (e.g. OSX) if hasattr(locale, 'bindtextdomain'): locale.bindtextdomain('sonata', locales_path) gettext.textdomain('sonata') gettext.bindtextdomain('sonata', locales_path) ## Check initial dependencies: try: import mpd except: logger.critical("Sonata requires python-mpd2. Aborting...") sys.exit(1) ## Initialize the plugin system: from sonata.pluginsystem import pluginsystem pluginsystem.find_plugins() pluginsystem.notify_of('enablables', lambda plugin, cb: cb(True), lambda plugin, cb: cb(False)) ## Load the command line interface: from sonata import cli args = cli.Args() args.parse(sys.argv) ## Deal with GTK: if not args.skip_gui: # importing gtk does sys.setdefaultencoding("utf-8"), sets locale etc. gi.require_version('Gdk', '3.0') gi.require_version('GdkPixbuf', '2.0') gi.require_version('Gtk', '3.0') gi.require_version('Pango', '1.0') from gi.repository import Gtk, Gdk else: class FakeModule: pass # make sure the ui modules aren't imported for m in 'gtk', 'pango', 'sonata.ui', 'sonata.breadcrumbs': if m in sys.modules: logger.warning( "Module %s imported in CLI mode (it should not)", m) else: sys.modules[m] = FakeModule() ## Global init: from socket import setdefaulttimeout as socketsettimeout socketsettimeout(5) if not args.skip_gui: Gdk.threads_init() ## CLI actions: args.execute_cmds() ## Load the main application: from sonata import main def on_application_activate(application): Gdk.threads_enter() windows = application.get_windows() if windows: for window in windows: window.present() else: sonata = main.Base(args) sonata.window.set_application(application) Gdk.threads_leave() app = Gtk.Application(application_id="org.MPD.Sonata") app.connect("activate", on_application_activate) ## Load the shell # yo dawg, I heard you like python, # so I put a python shell in your python application # so you can debug while you run it. if args.start_shell: # the enviroment used for the shell scope = dict(list(globals().items()) + list(locals().items())) def run_shell(): try: import IPython IPython.embed(user_ns=scope) except ImportError as e: # fallback if ipython is not avaible import code shell = code.InteractiveConsole(scope) shell.interact() # quit program if shell is closed, # This is the only way to close the program clone in this mode, # because we can't close the shell thread easily from gi.repository import Gtk Gtk.main_quit() threading.Thread(target=run_shell, name="Shell").start() try: app.run([]) except KeyboardInterrupt: Gtk.main_quit() ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/sonata/library.py����������������������������������������������������������������������0000664�0000000�0000000�00000170107�13771420143�0016317�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> # Copyright 2009-2014 Jonathan Ballet <jon@multani.info> # # This file is part of Sonata. # # Sonata is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Sonata is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Sonata. If not, see <http://www.gnu.org/licenses/>. import os import re import gettext import locale import threading # libsearchfilter_toggle starts thread libsearchfilter_loop import operator from gi.repository import Gtk, Gdk, GdkPixbuf, GObject, GLib, Pango from sonata import ui, misc, consts, formatting, breadcrumbs, mpdhelper as mpdh from sonata.artwork import get_multicd_album_root_dir from sonata.song import SongRecord VARIOUS_ARTISTS = _("Various Artists") def list_mark_various_artists_albums(albums): for i in range(len(albums)): if i + consts.NUM_ARTISTS_FOR_VA - 1 > len(albums)-1: break VA = False for j in range(1, consts.NUM_ARTISTS_FOR_VA): if albums[i].album.lower() != albums[i + j].album.lower() or \ albums[i].year != albums[i + j].year or \ albums[i].path != albums[i + j].path: break if albums[i].artist == albums[i + j].artist: albums.pop(i + j) break if j == consts.NUM_ARTISTS_FOR_VA - 1: VA = True if VA: album = albums[i]._asdict() album['artist'] = VARIOUS_ARTISTS albums[i] = SongRecord(**album) j = 1 while i + j <= len(albums) - 1: if albums[i].album.lower() == albums[i + j].album.lower() \ and albums[i].year == albums[i + j].year: albums.pop(i + j) else: break return albums class Library: def __init__(self, config, mpd, artwork, TAB_LIBRARY, settings_save, filter_key_pressed, on_add_item, connected, on_library_button_press, add_tab): self.artwork = artwork self.config = config self.mpd = mpd self.librarymenu = None # cyclic dependency, set later self.settings_save = settings_save self.filter_key_pressed = filter_key_pressed self.on_add_item = on_add_item self.connected = connected self.on_library_button_press = on_library_button_press self.NOTAG = _("Untagged") self.search_terms = [_('Artist'), _('Title'), _('Album'), _('Genre'), _('Filename'), _('Everything')] self.search_terms_mpd = ['artist', 'title', 'album', 'genre', 'file', 'any'] self.libfilterbox_cmd_buf = None self.libfilterbox_cond = None self.libfilterbox_source = None self.prevlibtodo_base = None self.prevlibtodo_base_results = None self.prevlibtodo = None self.save_timeout = None self.libsearch_last_tooltip = None self.lib_view_filesystem_cache = None self.lib_view_artist_cache = None self.lib_view_genre_cache = None self.lib_view_album_cache = None self.lib_list_genres = None self.lib_list_artists = None self.lib_list_albums = None self.lib_list_years = None self.view_caches_reset() # Library tab self.builder = ui.builder('library') self.css_provider = ui.css_provider('library') self.libraryvbox = self.builder.get_object('library_page_v_box') self.library = self.builder.get_object('library_page_treeview') self.library_selection = self.library.get_selection() self.breadcrumbs = self.builder.get_object('library_crumbs_box') self.crumb_section = self.builder.get_object( 'library_crumb_section_togglebutton') self.crumb_section_image = self.builder.get_object( 'library_crumb_section_image') self.crumb_break = self.builder.get_object( 'library_crumb_break_box') self.breadcrumbs.set_crumb_break(self.crumb_break) self.crumb_section_handler = None expanderwindow2 = self.builder.get_object('library_page_scrolledwindow') self.searchbox = self.builder.get_object('library_page_searchbox') self.searchcombo = self.builder.get_object('library_page_searchbox_combo') self.searchtext = self.builder.get_object('library_page_searchbox_entry') self.searchbutton = self.builder.get_object('library_page_searchbox_button') self.searchbutton.hide() self.libraryview = self.builder.get_object('library_crumb_button') self.tab_label_widget = self.builder.get_object('library_tab_eventbox') tab_label = self.builder.get_object('library_tab_label') tab_label.set_text(TAB_LIBRARY) self.tab = add_tab(self.libraryvbox, self.tab_label_widget, TAB_LIBRARY, self.library) # Assign some pixbufs for use in self.library self.openpb2 = self.library.render_icon(Gtk.STOCK_OPEN, Gtk.IconSize.LARGE_TOOLBAR) self.harddiskpb2 = self.library.render_icon(Gtk.STOCK_HARDDISK, Gtk.IconSize.LARGE_TOOLBAR) self.openpb = self.library.render_icon(Gtk.STOCK_OPEN, Gtk.IconSize.MENU) self.harddiskpb = self.library.render_icon(Gtk.STOCK_HARDDISK, Gtk.IconSize.MENU) self.albumpb = self.library.render_icon('sonata-album', Gtk.IconSize.LARGE_TOOLBAR) self.genrepb = self.library.render_icon('gtk-orientation-portrait', Gtk.IconSize.LARGE_TOOLBAR) self.artistpb = self.library.render_icon('sonata-artist', Gtk.IconSize.LARGE_TOOLBAR) self.sonatapb = self.library.render_icon('sonata', Gtk.IconSize.LARGE_TOOLBAR) # list of the library views: (id, name, icon name, label) self.VIEWS = [ (consts.VIEW_FILESYSTEM, 'filesystem', Gtk.STOCK_HARDDISK, _("Filesystem")), (consts.VIEW_ALBUM, 'album', 'sonata-album', _("Albums")), (consts.VIEW_ARTIST, 'artist', 'sonata-artist', _("Artists")), (consts.VIEW_GENRE, 'genre', Gtk.STOCK_ORIENTATION_PORTRAIT, _("Genres")), ] self.library.connect('row_activated', self.on_library_row_activated) self.library.connect('button_press_event', self.on_library_button_press) self.library.connect('key-press-event', self.on_library_key_press) self.library.connect('query-tooltip', self.on_library_query_tooltip) expanderwindow2.connect('scroll-event', self.on_library_scrolled) self.libraryview.connect('clicked', self.library_view_popup) self.searchtext.connect('key-press-event', self.libsearchfilter_key_pressed) self.searchtext.connect('activate', self.libsearchfilter_on_enter) self.searchbutton.connect('clicked', self.on_search_end) self.libfilter_changed_handler = self.searchtext.connect( 'changed', self.libsearchfilter_feed_loop) searchcombo_changed_handler = self.searchcombo.connect( 'changed', self.on_library_search_combo_change) # Initialize library data and widget self.libraryposition = {} self.libraryselectedpath = {} self.searchcombo.handler_block(searchcombo_changed_handler) self.searchcombo.set_active(self.config.last_search_num) self.searchcombo.handler_unblock(searchcombo_changed_handler) self.librarydata = Gtk.ListStore(GdkPixbuf.Pixbuf, GObject.TYPE_PYOBJECT, str) self.library.set_model(self.librarydata) self.library.set_search_column(2) self.librarycell = Gtk.CellRendererText() self.librarycell.set_property("ellipsize", Pango.EllipsizeMode.END) self.libraryimg = Gtk.CellRendererPixbuf() self.librarycolumn = Gtk.TreeViewColumn() self.librarycolumn.pack_start(self.libraryimg, False) self.librarycolumn.pack_start(self.librarycell, True) self.librarycolumn.add_attribute(self.libraryimg, 'pixbuf', 0) self.librarycolumn.add_attribute(self.librarycell, 'markup', 2) self.librarycolumn.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE) self.library.append_column(self.librarycolumn) self.library_selection.set_mode(Gtk.SelectionMode.MULTIPLE) def get_libraryactions(self): return [(name + 'view', icon, label, None, None, self.on_libraryview_chosen) for _view, name, icon, label in self.VIEWS] def get_model(self): return self.librarydata def get_widgets(self): return self.libraryvbox def get_treeview(self): return self.library def get_selection(self): return self.library_selection def set_librarymenu(self, librarymenu): self.librarymenu = librarymenu self.librarymenu.attach_to_widget(self.libraryview, None) def library_view_popup(self, button): if hasattr(self.librarymenu, 'popup_at_widget'): self.librarymenu.popup_at_widget(button, Gdk.Gravity.CENTER, Gdk.Gravity.NORTH_WEST, None) else: self.librarymenu.popup(None, None, self.library_view_position_menu, button, 1, 0) def library_view_position_menu(self, _menu, *args): # Depending on PyGObject version, args is either just the # button that was our user_data, or [x, y, button]. button = args[-1] alloc = button.get_allocation() return (self.config.x + alloc.x, self.config.y + alloc.y + alloc.height, True) def on_libraryview_chosen(self, action): if self.search_visible(): self.on_search_end(None) if action.get_name() == 'filesystemview': self.config.lib_view = consts.VIEW_FILESYSTEM elif action.get_name() == 'artistview': self.config.lib_view = consts.VIEW_ARTIST elif action.get_name() == 'genreview': self.config.lib_view = consts.VIEW_GENRE elif action.get_name() == 'albumview': self.config.lib_view = consts.VIEW_ALBUM self.library.grab_focus() self.libraryposition = {} self.libraryselectedpath = {} self.library_browse(root=SongRecord(path="/")) try: if len(self.librarydata) > 0: first = Gtk.TreePath.new_first() to = Gtk.TreePath.new() to.append_index(len(self.librarydata) - 1) self.library_selection.unselect_range(first, to) except Exception as e: # XXX import logger here in the future raise e GLib.idle_add(self.library.scroll_to_point, 0, 0) def view_caches_reset(self): # We should call this on first load and whenever mpd is # updated. self.lib_view_filesystem_cache = None self.lib_view_artist_cache = None self.lib_view_genre_cache = None self.lib_view_album_cache = None self.lib_list_genres = None self.lib_list_artists = None self.lib_list_albums = None self.lib_list_years = None def on_library_scrolled(self, _widget, _event): try: # Use GLib.idle_add so that we can get the visible # state of the treeview GLib.idle_add(self._on_library_scrolled) except: pass def _on_library_scrolled(self): if not self.config.show_covers: return # This avoids a warning about a NULL node in get_visible_range if not self.library.props.visible: return visible_range = self.library.get_visible_range() if visible_range is None: return else: start_row, end_row = visible_range self.artwork.library_artwork_update(self.librarydata, start_row, end_row, self.albumpb) def library_browse(self, _widget=None, root=None): # Populates the library list with entries if not self.connected(): return if root is None or (self.config.lib_view == consts.VIEW_FILESYSTEM \ and root.path is None): root = SongRecord(path="/") if self.config.wd is None or (self.config.lib_view == \ consts.VIEW_FILESYSTEM and \ self.config.wd.path is None): self.config.wd = SongRecord(path="/") prev_selection = [] prev_selection_root = False prev_selection_parent = False if root == self.config.wd: # This will happen when the database is updated. So, lets save # the current selection in order to try to re-select it after # the update is over. model, selected = self.library_selection.get_selected_rows() for path in selected: prev_selection.append(model.get_value(model.get_iter(path), 1)) self.libraryposition[self.config.wd] = \ self.library.get_visible_rect().width path_updated = True else: path_updated = False new_level = self.library_get_data_level(root) curr_level = self.library_get_data_level(self.config.wd) # The logic below is more consistent with, e.g., thunar. if new_level > curr_level: # Save position and row for where we just were if we've # navigated into a sub-directory: self.libraryposition[self.config.wd] = \ self.library.get_visible_rect().width model, rows = self.library_selection.get_selected_rows() if len(rows) > 0: data = self.librarydata.get_value( self.librarydata.get_iter(rows[0]), 2) self.libraryselectedpath[self.config.wd] = rows[0] elif (self.config.lib_view == consts.VIEW_FILESYSTEM and \ root != self.config.wd) \ or (self.config.lib_view != consts.VIEW_FILESYSTEM and new_level != \ curr_level): # If we've navigated to a parent directory, don't save # anything so that the user will enter that subdirectory # again at the top position with nothing selected self.libraryposition[self.config.wd] = 0 self.libraryselectedpath[self.config.wd] = None # In case sonata is killed or crashes, we'll save the library state # in 5 seconds (first removing any current settings_save timeouts) if self.config.wd != root: try: GLib.source_remove(self.save_timeout) except: pass self.save_timeout = GLib.timeout_add(5000, self.settings_save) self.config.wd = root self.library.freeze_child_notify() self.library.set_model(None) self.librarydata.clear() # Populate treeview with data: bd = [] wd = self.config.wd while len(bd) == 0: if self.config.lib_view == consts.VIEW_FILESYSTEM: bd = self.library_populate_filesystem_data(wd.path) elif self.config.lib_view == consts.VIEW_ALBUM: if wd.album is not None: bd = self.library_populate_data(artist=wd.artist, album=wd.album, year=wd.year) else: bd = self.library_populate_toplevel_data(albumview=True) elif self.config.lib_view == consts.VIEW_ARTIST: if wd.artist is not None and wd.album is not None: bd = self.library_populate_data(artist=wd.artist, album=wd.album, year=wd.year) elif self.config.wd.artist is not None: bd = self.library_populate_data(artist=wd.artist) else: bd = self.library_populate_toplevel_data(artistview=True) elif self.config.lib_view == consts.VIEW_GENRE: if wd.genre is not None and \ wd.artist is not None and \ wd.album is not None: bd = self.library_populate_data(genre=wd.genre, artist=wd.artist, album=wd.album, year=wd.year) elif wd.genre is not None: bd = self.library_populate_data(genre=wd.genre, artist=wd.artist) else: bd = self.library_populate_toplevel_data(genreview=True) if len(bd) == 0: # Nothing found; go up a level until we reach the top level # or results are found last_wd = self.config.wd self.config.wd = self.library_get_parent() if self.config.wd == last_wd: break for _sort, path in bd: self.librarydata.append(path) self.library.set_model(self.librarydata) self.library.thaw_child_notify() # Scroll back to set view for current dir: self.library.realize() GLib.idle_add(self.library_set_view, not path_updated) if len(prev_selection) > 0 or prev_selection_root or \ prev_selection_parent: # Retain pre-update selection: self.library_retain_selection(prev_selection, prev_selection_root, prev_selection_parent) self.update_breadcrumbs() def update_breadcrumbs(self): # remove previous buttons for b in self.breadcrumbs: self.breadcrumbs.remove(b) # find info for current view view, _name, icon, label = [v for v in self.VIEWS if v[0] == self.config.lib_view][0] # the first crumb is the root of the current view self.crumb_section.set_label(label) self.crumb_section_image.set_from_stock(icon, Gtk.IconSize.MENU) self.crumb_section.set_tooltip_text(label) if self.crumb_section_handler: self.crumb_section.disconnect(self.crumb_section_handler) crumbs = [] # crumbs are specific to the view if view == consts.VIEW_FILESYSTEM: if self.config.wd.path and self.config.wd.path != '/': parts = self.config.wd.path.split('/') else: parts = [] # no crumbs for / # append a crumb for each part for i, part in enumerate(parts): partpath = '/'.join(parts[:i + 1]) target = SongRecord(path=partpath) crumbs.append((part, Gtk.STOCK_OPEN, None, target)) else: parts = () if view == consts.VIEW_ALBUM: # We don't want to show an artist button in album view keys = 'genre', 'album' nkeys = 2 parts = (self.config.wd.genre, self.config.wd.album) else: keys = 'genre', 'artist', 'album' nkeys = 3 parts = (self.config.wd.genre, self.config.wd.artist, self.config.wd.album) # append a crumb for each part for i, key, part in zip(range(nkeys), keys, parts): if part is None: continue partdata = dict(list(zip(keys, parts))[:i + 1]) target = SongRecord(**partdata) pb, icon = None, None if key == 'album': # Album artwork, with self.alumbpb as a backup: cache_data = SongRecord(artist=self.config.wd.artist, album=self.config.wd.album, path=self.config.wd.path) pb = self.artwork.cache.get_pixbuf(cache_data, consts.LIB_COVER_SIZE) if pb is None: icon = 'album' elif key == 'artist': icon = 'sonata-artist' else: icon = Gtk.STOCK_ORIENTATION_PORTRAIT crumbs.append((part, icon, pb, target)) if not len(crumbs): self.crumb_section.set_active(True) context = self.crumb_section.get_style_context() context.add_class('last_crumb') else: self.crumb_section.set_active(False) context = self.crumb_section.get_style_context() context.remove_class('last_crumb') self.crumb_section_handler = self.crumb_section.connect('toggled', self.library_browse, SongRecord(path='/')) # add a button for each crumb for crumb in crumbs: text, icon, pb, target = crumb text = misc.escape_html(text) label = Gtk.Label(text, use_markup=True) if icon: image = Gtk.Image.new_from_stock(icon, Gtk.IconSize.MENU) elif pb: pb = pb.scale_simple(16, 16, GdkPixbuf.InterpType.HYPER) image = Gtk.Image.new_from_pixbuf(pb) b = breadcrumbs.CrumbButton(image, label) if crumb is crumbs[-1]: # FIXME makes the button request minimal space: b.set_active(True) context = b.get_style_context() context.add_class('last_crumb') b.set_tooltip_text(label.get_label()) b.connect('toggled', self.library_browse, target) self.breadcrumbs.pack_start(b, False, False, 0) b.show_all() def library_populate_filesystem_data(self, path): # List all dirs/files at path bd = [] if path == '/' and self.lib_view_filesystem_cache is not None: # Use cache if possible... bd = self.lib_view_filesystem_cache else: for item in self.mpd.lsinfo(path): if 'directory' in item: name = os.path.basename(item['directory']) data = SongRecord(path=item["directory"]) bd += [('d' + str(name).lower(), [self.openpb, data, misc.escape_html(name)])] elif 'file' in item: data = SongRecord(path=item['file']) bd += [('f' + item['file'].lower(), [self.sonatapb, data, formatting.parse(self.config.libraryformat, item, True)])] bd.sort(key=operator.itemgetter(0)) return bd def library_get_toplevel_cache(self, genreview=False, artistview=False, albumview=False): if genreview and self.lib_view_genre_cache is not None: bd = self.lib_view_genre_cache elif artistview and self.lib_view_artist_cache is not None: bd = self.lib_view_artist_cache elif albumview and self.lib_view_album_cache is not None: bd = self.lib_view_album_cache else: return None # Check if we can update any artwork: for _sort, info in bd: pb = info[0] if pb == self.albumpb: key = SongRecord(path=info[1].path, artist=info[1].artist, album=info[1].album) pb2 = self.artwork.cache.get_pixbuf(key, consts.LIB_COVER_SIZE) if pb2 is not None: info[0] = pb2 return bd def library_populate_toplevel_data(self, genreview=False, artistview=False, albumview=False): bd = self.library_get_toplevel_cache(genreview, artistview, albumview) if bd is not None: # We have our cached data, woot. return bd bd = [] if genreview or artistview: # Only for artist/genre views, album view is handled differently # since multiple artists can have the same album name if genreview: items = self.library_return_list_items('genre') pb = self.genrepb else: items = self.library_return_list_items('artist') pb = self.artistpb if not (self.NOTAG in items): items.append(self.NOTAG) for item in items: if genreview: playtime, num_songs = self.library_return_count(genre=item) data = SongRecord(genre=item) else: playtime, num_songs = self.library_return_count( artist=item) data = SongRecord(artist=item) if num_songs > 0: display = misc.escape_html(item) display += self.add_display_info(num_songs, playtime) bd += [(misc.lower_no_the(item), [pb, data, display])] elif albumview: albums = [] untagged_found = False for item in self.mpd.listallinfo('/'): if 'file' in item and 'album' in item: album = item['album'] artist = item.get('artist', self.NOTAG) year = item.get('date', self.NOTAG) path = get_multicd_album_root_dir( os.path.dirname(item['file'])) data = SongRecord(album=album, artist=artist, year=year, path=path) albums.append(data) if album == self.NOTAG: untagged_found = True if not untagged_found: albums.append(SongRecord(album=self.NOTAG)) albums = misc.remove_list_duplicates(albums, case=False) albums = list_mark_various_artists_albums(albums) for item in albums: album, artist, _genre, year, path = item playtime, num_songs = self.library_return_count(artist=artist, album=album, year=year) if num_songs > 0: data = SongRecord(artist=artist, album=album, year=year, path=path) display = misc.escape_html(album) if artist and year and len(artist) > 0 and len(year) > 0 \ and artist != self.NOTAG and year != self.NOTAG: display += " <span weight='light'>(%s, %s)</span>" \ % (misc.escape_html(artist), misc.escape_html(year)) elif artist and len(artist) > 0 and artist != self.NOTAG: display += " <span weight='light'>(%s)</span>" \ % misc.escape_html(artist) elif year and len(year) > 0 and year != self.NOTAG: display += " <span weight='light'>(%s)</span>" \ % misc.escape_html(year) display += self.add_display_info(num_songs, playtime) bd += [(misc.lower_no_the(album), [self.albumpb, data, display])] bd.sort(key=lambda key: locale.strxfrm(key[0])) if genreview: self.lib_view_genre_cache = bd elif artistview: self.lib_view_artist_cache = bd elif albumview: self.lib_view_album_cache = bd return bd def library_populate_data(self, genre=None, artist=None, album=None, year=None): # Create treeview model info bd = [] if genre is not None and artist is None and album is None: # Artists within a genre artists = self.library_return_list_items('artist', genre=genre) if len(artists) > 0: if not self.NOTAG in artists: artists.append(self.NOTAG) for artist in artists: playtime, num_songs = self.library_return_count( genre=genre, artist=artist) if num_songs > 0: display = misc.escape_html(artist) display += self.add_display_info(num_songs, playtime) data = SongRecord(genre=genre, artist=artist) bd += [(misc.lower_no_the(artist), [self.artistpb, data, display])] elif artist is not None and album is None: # Albums/songs within an artist and possibly genre # Albums first: if genre is not None: albums = self.library_return_list_items('album', genre=genre, artist=artist) else: albums = self.library_return_list_items('album', artist=artist) for album in albums: if genre is not None: years = self.library_return_list_items('date', genre=genre, artist=artist, album=album) else: years = self.library_return_list_items('date', artist=artist, album=album) if not self.NOTAG in years: years.append(self.NOTAG) for year in years: if genre is not None: playtime, num_songs = self.library_return_count( genre=genre, artist=artist, album=album, year=year) if num_songs > 0: files = self.library_return_list_items( 'file', genre=genre, artist=artist, album=album, year=year) path = os.path.dirname(files[0]) data = SongRecord(genre=genre, artist=artist, album=album, year=year, path=path) else: playtime, num_songs = self.library_return_count( artist=artist, album=album, year=year) if num_songs > 0: files = self.library_return_list_items( 'file', artist=artist, album=album, year=year) path = os.path.dirname(files[0]) cache_data = SongRecord(artist=artist, album=album, path=path) data = SongRecord(artist=artist, album=album, year=year, path=path) if num_songs > 0: cache_data = SongRecord(artist=artist, album=album, path=path) display = misc.escape_html(album) if year and len(year) > 0 and year != self.NOTAG: display += " <span weight='light'>(%s)</span>" \ % misc.escape_html(year) display += self.add_display_info(num_songs, playtime) ordered_year = year if ordered_year == self.NOTAG: ordered_year = '9999' pb = self.artwork.cache.get_pixbuf( cache_data, consts.LIB_COVER_SIZE, self.albumpb) bd += [(ordered_year + misc.lower_no_the(album), [pb, data, display])] # Now, songs not in albums: bd += self.library_populate_data_songs(genre, artist, self.NOTAG, None) else: # Songs within an album, artist, year, and possibly genre bd += self.library_populate_data_songs(genre, artist, album, year) bd.sort(key=lambda key: locale.strxfrm(key[0])) return bd def library_populate_data_songs(self, genre, artist, album, year): bd = [] if genre is not None: songs, _playtime, _num_songs = \ self.library_return_search_items(genre=genre, artist=artist, album=album, year=year) else: songs, _playtime, _num_songs = self.library_return_search_items( artist=artist, album=album, year=year) for song in songs: data = SongRecord(path=song.file) track = str(song.get('track', 99)).zfill(2) disc = str(song.get('disc', 99)).zfill(2) try: bd += [('f' + disc + track + misc.lower_no_the(song.title), [self.sonatapb, data, formatting.parse( self.config.libraryformat, song, True)])] except: bd += [('f' + disc + track + song.file.lower(), [self.sonatapb, data, formatting.parse(self.config.libraryformat, song, True)])] return bd def library_return_list_items(self, itemtype, genre=None, artist=None, album=None, year=None, ignore_case=True): # Returns all items of tag 'itemtype', in alphabetical order, # using mpd's 'list'. If searchtype is passed, use # a case insensitive search, via additional 'list' # queries, since using a single 'list' call will be # case sensitive. results = [] searches = self.library_compose_list_count_searchlist(genre, artist, album, year) if len(searches) > 0: for s in searches: # If we have untagged tags (''), use search instead # of list because list will not return anything. if '' in s: items = [] songs, playtime, num_songs = \ self.library_return_search_items(genre, artist, album, year) for song in songs: items.append(song.get(itemtype)) else: items = self.mpd.list(itemtype, *s) for item in items: if isinstance(item, dict): if itemtype in item: item = item[itemtype] else: continue if len(item) > 0: results.append(item) else: if genre is None and artist is None and album is None and year \ is None: for item in self.mpd.list(itemtype): if isinstance(item, dict): if itemtype in item: item = item[itemtype] else: continue if len(item) > 0: results.append(item) if ignore_case: results = misc.remove_list_duplicates(results, case=False) results.sort(key=locale.strxfrm) return results def library_return_count(self, genre=None, artist=None, album=None, year=None): # Because mpd's 'count' is case sensitive, we have to # determine all equivalent items (case insensitive) and # call 'count' for each of them. Using 'list' + 'count' # involves much less data to be transferred back and # forth than to use 'search' and count manually. searches = self.library_compose_list_count_searchlist(genre, artist, album, year) playtime = 0 num_songs = 0 for s in searches: count = self.mpd.count(*s) playtime += count.playtime num_songs += count.songs return (playtime, num_songs) def library_compose_list_count_searchlist_single(self, search, typename, cached_list, searchlist): s = [] skip_type = (typename == 'artist' and search == VARIOUS_ARTISTS) if search is not None and not skip_type: if search == self.NOTAG: itemlist = [search, ''] else: itemlist = [] if cached_list is None: cached_list = self.library_return_list_items(typename, ignore_case=False) # This allows us to match untagged items cached_list.append('') for item in cached_list: if str(item).lower() == str(search).lower(): itemlist.append(item) if len(itemlist) == 0: # There should be no results! return None, cached_list for item in itemlist: if len(searchlist) > 0: for item2 in searchlist: s.append(item2 + (typename, item)) else: s.append((typename, item)) else: s = searchlist return s, cached_list def library_compose_list_count_searchlist(self, genre=None, artist=None, album=None, year=None): s = [] s, self.lib_list_genres = \ self.library_compose_list_count_searchlist_single( genre, 'genre', self.lib_list_genres, s) if s is None: return [] s, self.lib_list_artists = \ self.library_compose_list_count_searchlist_single( artist, 'artist', self.lib_list_artists, s) if s is None: return [] s, self.lib_list_albums = \ self.library_compose_list_count_searchlist_single( album, 'album', self.lib_list_albums, s) if s is None: return [] s, self.lib_list_years = \ self.library_compose_list_count_searchlist_single( year, 'date', self.lib_list_years, s) if s is None: return [] return s def library_compose_search_searchlist_single(self, search, typename, searchlist): s = [] skip_type = (typename == 'artist' and search == VARIOUS_ARTISTS) if search is not None and not skip_type: if search == self.NOTAG: itemlist = [search, ''] else: itemlist = [search] for item in itemlist: if len(searchlist) > 0: for item2 in searchlist: s.append(item2 + (typename, item)) else: s.append((typename, item)) else: s = searchlist return s def library_compose_search_searchlist(self, genre=None, artist=None, album=None, year=None): s = [] s = self.library_compose_search_searchlist_single(genre, 'genre', s) s = self.library_compose_search_searchlist_single(album, 'album', s) s = self.library_compose_search_searchlist_single(artist, 'artist', s) s = self.library_compose_search_searchlist_single(year, 'date', s) return s def library_return_search_items(self, genre=None, artist=None, album=None, year=None): # Returns all mpd items, using mpd's 'search', along with # playtime and num_songs. searches = self.library_compose_search_searchlist(genre, artist, album, year) for s in searches: args_tuple = tuple(map(str, s)) playtime = 0 num_songs = 0 results = [] strip_type = None if len(args_tuple) == 0: return None, 0, 0 items = self.mpd.search(*args_tuple) if items is not None: for item in items: if strip_type is None or (strip_type is not None and not \ strip_type in item.keys()): match = True pos = 0 # Ensure that if, e.g., "foo" is searched, # "foobar" isn't returned too for arg in args_tuple[::2]: if arg in item and \ str(item.get(arg, '')).upper() != \ str(args_tuple[pos + 1]).upper(): match = False break pos += 2 if match: results.append(item) num_songs += 1 playtime += item.time return (results, int(playtime), num_songs) def add_display_info(self, num_songs, playtime): seconds = int(playtime) hours = seconds // 3600 seconds -= 3600 * hours minutes = seconds // 60 seconds -= 60 * minutes songs_text = ngettext('{count} song', '{count} songs', num_songs).format(count=num_songs) seconds_text = ngettext('{count} second', '{count} seconds', seconds).format(count=seconds) minutes_text = ngettext('{count} minute', '{count} minutes', minutes).format(count=minutes) hours_text = ngettext('{count} hour', '{count} hours', hours).format(count=hours) time_parts = [songs_text] if hours > 0: time_parts.extend([hours_text, minutes_text]) elif minutes > 0: time_parts.extend([minutes_text, seconds_text]) else: time_parts.extend([seconds_text]) display_markup = "\n<small><span weight='light'>{}</span></small>" display_text = ', '.join(time_parts) return display_markup.format(display_text) def library_retain_selection(self, prev_selection, prev_selection_root, prev_selection_parent): # Unselect everything: if len(self.librarydata) > 0: first = Gtk.TreePath.new_first() to = Gtk.TreePath.new() to.append_index(len(self.librarydata) - 1) self.library_selection.unselect_range(first, to) # Now attempt to retain the selection from before the update: for value in prev_selection: for row in self.librarydata: if value == row[1]: self.library_selection.select_path(row.path) break if prev_selection_root: self.library_selection.select_path((0,)) if prev_selection_parent: self.library_selection.select_path((1,)) def library_set_view(self, select_items=True): # select_items should be false if the same directory has merely # been refreshed (updated) try: if self.config.wd in self.libraryposition: self.library.scroll_to_point( -1, self.libraryposition[self.config.wd]) else: self.library.scroll_to_point(0, 0) except: self.library.scroll_to_point(0, 0) # Select and focus previously selected item if select_items: if self.config.wd in self.libraryselectedpath: try: if self.libraryselectedpath[self.config.wd]: self.library_selection.select_path( self.libraryselectedpath[self.config.wd]) self.library.grab_focus() except: pass def library_get_data_level(self, data): if self.config.lib_view == consts.VIEW_FILESYSTEM: # Returns the number of directories down: if data.path == '/': # Every other path doesn't start with "/", so # start the level numbering at -1 return -1 else: return data.path.count("/") else: # Returns the number of items stored in data, excluding # the path: level = 0 for item in data: if item is not None: level += 1 return level def on_library_key_press(self, widget, event): if event.keyval == Gdk.keyval_from_name('Return'): self.on_library_row_activated(widget, widget.get_cursor()[0]) return True def on_library_query_tooltip(self, widget, x, y, keyboard_mode, tooltip): if keyboard_mode or not self.search_visible(): widget.set_tooltip_text("") return False bin_x, bin_y = widget.convert_widget_to_bin_window_coords(x, y) pathinfo = widget.get_path_at_pos(bin_x, bin_y) if not pathinfo: widget.set_tooltip_text("") # If the user hovers over an empty row and then back to # a row with a search result, this will ensure the tooltip # shows up again: GLib.idle_add(self.library_search_tooltips_enable, widget, x, y, keyboard_mode, None) return False treepath, _col, _x2, _y2 = pathinfo i = self.librarydata.get_iter(treepath.get_indices()[0]) path = misc.escape_html(self.librarydata.get_value(i, 1).path) song = self.librarydata.get_value(i, 2) new_tooltip = "<b>%s:</b> %s\n<b>%s:</b> %s" \ % (_("Song"), song, _("Path"), path) if new_tooltip != self.libsearch_last_tooltip: self.libsearch_last_tooltip = new_tooltip self.library.set_property('has-tooltip', False) GLib.idle_add(self.library_search_tooltips_enable, widget, x, y, keyboard_mode, tooltip) GLib.idle_add(widget.set_tooltip_markup, new_tooltip) return self.libsearch_last_tooltip = new_tooltip return False #api says we should return True, but this doesn't work? def library_search_tooltips_enable(self, widget, x, y, keyboard_mode, tooltip): self.library.set_property('has-tooltip', True) if tooltip is not None: self.on_library_query_tooltip(widget, x, y, keyboard_mode, tooltip) def on_library_row_activated(self, _widget, path, _column=0): if path is None: # Default to last item in selection: _model, selected = self.library_selection.get_selected_rows() if len(selected) >= 1: path = selected[0] else: return value = self.librarydata.get_value(self.librarydata.get_iter(path), 1) icon = self.librarydata.get_value(self.librarydata.get_iter(path), 0) if icon == self.sonatapb: # Song found, add item self.on_add_item(self.library) elif value.path == "..": self.library_browse_parent(None) else: self.library_browse(None, value) def library_get_parent(self): wd = self.config.wd if self.config.lib_view == consts.VIEW_ALBUM: value = SongRecord(path="/") elif self.config.lib_view == consts.VIEW_ARTIST: if wd.album is None: value = SongRecord(path="/") else: value = SongRecord(artist = wd.artist) elif self.config.lib_view == consts.VIEW_GENRE: if wd.album is not None: value = SongRecord(genre=wd.genre, artist=wd.artist) elif wd.artist is not None: value = SongRecord(genre=wd.genre) else: value = SongRecord(path="/") else: newvalue = '/'.join(wd.path.split('/')[:-1]) or '/' value = SongRecord(path=newvalue) return value def library_browse_parent(self, _action): if not self.search_visible(): if self.library.is_focus(): value = self.library_get_parent() self.library_browse(None, value) return True def not_parent_is_selected(self): # Returns True if something is selected and it's not # ".." or "/": model, rows = self.library_selection.get_selected_rows() for path in rows: i = model.get_iter(path) value = model.get_value(i, 2) if value != ".." and value != "/": return True return False def get_path_child_filenames(self, return_root, selected_only=True): # If return_root=True, return main directories whenever possible # instead of individual songs in order to reduce the number of # mpd calls we need to make. We won't want this behavior in some # instances, like when we want all end files for editing tags items = [] if selected_only: model, rows = self.library_selection.get_selected_rows() else: model = self.librarydata rows = [(i,) for i in range(len(model))] for path in rows: i = model.get_iter(path) pb = model.get_value(i, 0) data = model.get_value(i, 1) value = model.get_value(i, 2) if value != ".." and value != "/": if data.path is not None and data.album is None and data.artist is None and \ data.year is None and data.genre is None: if pb == self.sonatapb: # File items.append(data.path) else: # Directory if not return_root: items += self.library_get_path_files_recursive( data.path) else: items.append(data.path) else: results, _playtime, _num_songs = \ self.library_return_search_items( genre=data.genre, artist=data.artist, album=data.album, year=data.year) for item in results: items.append(item.file) # Make sure we don't have any EXACT duplicates: items = misc.remove_list_duplicates(items, case=True) return items def library_get_path_files_recursive(self, path): results = [] for item in self.mpd.lsinfo(path): if 'directory' in item: results = results + self.library_get_path_files_recursive( item['directory']) elif 'file' in item: results.append(item['file']) return results def on_library_search_combo_change(self, _combo=None): self.config.last_search_num = self.searchcombo.get_active() if not self.search_visible(): return self.prevlibtodo = "" self.prevlibtodo_base = "__" self.libsearchfilter_feed_loop(self.searchtext) def on_search_end(self, _button, move_focus=True): if self.search_visible(): self.libsearchfilter_toggle(move_focus) def search_visible(self): return self.searchbutton.get_property('visible') def libsearchfilter_toggle(self, move_focus): if not self.search_visible() and self.connected(): self.library.set_property('has-tooltip', True) ui.show(self.searchbutton) self.prevlibtodo = 'foo' self.prevlibtodo_base = "__" self.prevlibtodo_base_results = [] # extra thread for background search work, # synchronized with a condition and its internal mutex self.libfilterbox_cond = threading.Condition() self.libfilterbox_cmd_buf = self.searchtext.get_text() qsearch_thread = threading.Thread(target=self.libsearchfilter_loop) qsearch_thread.name = "LibraryFilter" qsearch_thread.daemon = True qsearch_thread.start() elif self.search_visible(): ui.hide(self.searchbutton) self.searchtext.handler_block(self.libfilter_changed_handler) self.searchtext.set_text("") self.searchtext.handler_unblock(self.libfilter_changed_handler) self.libsearchfilter_stop_loop() # call library_browse from the main thread to avoid corruption # of treeview, fixes #1959 GLib.idle_add(self.library_browse, None, self.config.wd) if move_focus: self.library.grab_focus() def libsearchfilter_feed_loop(self, editable): if not self.search_visible(): self.libsearchfilter_toggle(None) # Lets only trigger the searchfilter_loop if 200ms pass # without a change in Gtk.Entry try: GLib.source_remove(self.libfilterbox_source) except: pass self.libfilterbox_source = GLib.timeout_add( 300, self.libsearchfilter_start_loop, editable) def libsearchfilter_start_loop(self, editable): self.libfilterbox_cond.acquire() self.libfilterbox_cmd_buf = editable.get_text() self.libfilterbox_cond.notifyAll() self.libfilterbox_cond.release() def libsearchfilter_stop_loop(self): self.libfilterbox_cond.acquire() self.libfilterbox_cmd_buf = '$$$QUIT###' self.libfilterbox_cond.notifyAll() self.libfilterbox_cond.release() def libsearchfilter_loop(self): while True: # copy the last command or pattern safely self.libfilterbox_cond.acquire() try: while(self.libfilterbox_cmd_buf == '$$$DONE###'): self.libfilterbox_cond.wait() todo = self.libfilterbox_cmd_buf self.libfilterbox_cond.release() except: todo = self.libfilterbox_cmd_buf searchby = self.search_terms_mpd[self.config.last_search_num] if self.prevlibtodo != todo: if todo == '$$$QUIT###': GLib.idle_add(ui.reset_entry_marking, self.searchtext) return elif len(todo) > 1: GLib.idle_add(self.libsearchfilter_do_search, searchby, todo) elif len(todo) == 0: GLib.idle_add(ui.reset_entry_marking, self.searchtext) self.libsearchfilter_toggle(False) else: GLib.idle_add(ui.reset_entry_marking, self.searchtext) self.libfilterbox_cond.acquire() self.libfilterbox_cmd_buf = '$$$DONE###' try: self.libfilterbox_cond.release() except Exception as e: # XXX add logger here in the future! raise e self.prevlibtodo = todo def libsearchfilter_do_search(self, searchby, todo): if not self.prevlibtodo_base in todo: # Do library search based on first two letters: self.prevlibtodo_base = todo[:2] self.prevlibtodo_base_results = self.mpd.search(searchby, self.prevlibtodo_base) subsearch = False else: subsearch = True # Now, use filtering similar to playlist filtering: # this make take some seconds... and we'll escape the search text # because we'll be searching for a match in items that are also escaped # # Note that the searching is not order specific. That is, "foo bar" # will match on "fools bar" and "barstool foo". todos = todo.split(" ") regexps = [] for i in range(len(todos)): todos[i] = misc.escape_html(todos[i]) todos[i] = re.escape(todos[i]) todos[i] = '.*' + todos[i].lower() regexps.append(re.compile(todos[i])) matches = [] if searchby != 'any': for row in self.prevlibtodo_base_results: is_match = True for regexp in regexps: if not regexp.match(row.get(searchby, '').lower()): is_match = False break if is_match: matches.append(row) else: for row in self.prevlibtodo_base_results: allstr = " ".join(row.values()) is_match = True for regexp in regexps: if not regexp.match(str(allstr).lower()): is_match = False break if is_match: matches.append(row) if subsearch and len(matches) == len(self.librarydata): # nothing changed.. return self.library.freeze_child_notify() currlen = len(self.librarydata) bd = [(self.sonatapb, SongRecord(path=item['file']), formatting.parse(self.config.libraryformat, item, True)) for item in matches if 'file' in item] bd.sort(key=lambda key: locale.strxfrm(key[2])) for i, item in enumerate(bd): if i < currlen: j = self.librarydata.get_iter((i, )) for index in range(len(item)): if item[index] != self.librarydata.get_value(j, index): self.librarydata.set_value(j, index, item[index]) else: self.librarydata.append(item) # Remove excess items... newlen = len(bd) if newlen == 0: self.librarydata.clear() else: for i in range(currlen - newlen): j = self.librarydata.get_iter((currlen - 1 - i,)) self.librarydata.remove(j) self.library.thaw_child_notify() if len(matches) == 0: GLib.idle_add(ui.set_entry_invalid, self.searchtext) else: GLib.idle_add(self.library.set_cursor, Gtk.TreePath.new_first(), None, False) GLib.idle_add(ui.reset_entry_marking, self.searchtext) def libsearchfilter_key_pressed(self, widget, event): self.filter_key_pressed(widget, event, self.library) def libsearchfilter_on_enter(self, _entry): self.on_library_row_activated(None, None) def libsearchfilter_set_focus(self): GLib.idle_add(self.searchtext.grab_focus) def libsearchfilter_get_style(self): return self.searchtext.get_style() ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/sonata/main.py�������������������������������������������������������������������������0000664�0000000�0000000�00000415441�13771420143�0015602�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> # Copyright 2009-2014 Jonathan Ballet <jon@multani.info> # # This file is part of Sonata. # # Sonata is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Sonata is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Sonata. If not, see <http://www.gnu.org/licenses/>. import collections import sys import gettext import locale import logging import os import operator import random import warnings import urllib.parse, urllib.request import re import gc import shutil import tempfile import threading from gi.repository import Gtk, Gdk, GdkPixbuf, Gio, GLib, Pango import pkg_resources import sonata.mpdhelper as mpdh from sonata import misc, ui, consts, img, tray, formatting from sonata.pluginsystem import pluginsystem from sonata.config import Config from sonata import preferences, tagedit, \ artwork, about, \ scrobbler, info, \ library, streams, \ playlists, current, \ dbus_plugin as dbus from sonata.song import SongRecord from sonata.version import version class Base: ### XXX Warning, a long __init__ ahead: def __init__(self, args): self.logger = logging.getLogger(__name__) # The following attributes were used but not defined here before: self.album_current_artist = None self.allow_art_search = None self.choose_dialog = None self.chooseimage_visible = None self.imagelist = None self.iterate_handler = None self.local_dest_filename = None self.notification_width = None self.remote_albumentry = None self.remote_artistentry = None self.remote_dest_filename = None self.remotefilelist = None self.seekidle = None self.artwork = None self.lyrics_search_dialog = None self.mpd = mpdh.MPDClient() self.conn = False # Anything != than self.conn, to actually refresh the UI at startup. self.prevconn = not self.conn # Constants self.TAB_CURRENT = _("Current") self.TAB_LIBRARY = _("Library") self.TAB_PLAYLISTS = _("Playlists") self.TAB_STREAMS = _("Streams") self.TAB_INFO = _("Info") # If the connection to MPD times out, this will cause the interface # to freeze while the socket.connect() calls are repeatedly executed. # Therefore, if we were not able to make a connection, slow down the # iteration check to once every 15 seconds. self.iterate_time_when_connected = 500 # Slow down polling when disconnected stopped self.iterate_time_when_disconnected_or_stopped = 1000 self.trying_connection = False self.traytips = tray.TrayIconTips() # better keep a reference around try: self.dbus_service = dbus.SonataDBus(self.dbus_show, self.dbus_toggle, self.dbus_popup, self.dbus_fullscreen) except Exception: pass misc.create_dir('~/.covers/') # Initialize vars for GUI self.current_tab = self.TAB_CURRENT self.prevstatus = None self.prevsonginfo = None self.popuptimes = ['2', '3', '5', '10', '15', '30', _('Entire song')] self.exit_now = False self.ignore_toggle_signal = False self.user_connect = False self.sonata_loaded = False self.call_gc_collect = False self.album_reset_artist() show_prefs = False self.merge_id = None self.actionGroupProfiles = None self.skip_on_profiles_click = False self.last_playlist_repeat = None self.last_song_repeat = None self.last_random = None self.last_consume = None self.last_title = None self.last_progress_frac = None self.last_progress_text = None self.last_status_text = "" self.img_clicked = False self.mpd_update_queued = False # XXX get rid of all of these: self.all_tab_names = [self.TAB_CURRENT, self.TAB_LIBRARY, self.TAB_PLAYLISTS, self.TAB_STREAMS, self.TAB_INFO] self.all_tab_ids = "current library playlists streams info".split() self.tabname2id = dict(zip(self.all_tab_names, self.all_tab_ids)) self.tabid2name = dict(zip(self.all_tab_ids, self.all_tab_names)) self.tabname2tab = dict() self.tabname2focus = dict() self.plugintabs = dict() self.config = Config(_('Default Profile'), _("by %A from %B")) self.preferences = preferences.Preferences(self.config, self.on_connectkey_pressed, self.on_currsong_notify, self.update_infofile, self.settings_save, self.populate_profiles_for_menu) self.settings_load() self.setup_prefs_callbacks() if args.start_visibility is not None: self.config.withdrawn = not args.start_visibility if self.config.autoconnect: self.user_connect = True args.apply_profile_arg(self.config) self.builder = ui.builder('sonata') self.provider = ui.css_provider('sonata') icon_factory_src = ui.builder_string('icons') icon_path = pkg_resources.resource_filename(__name__, "pixmaps") icon_factory_src = icon_factory_src.format(base_path=icon_path) self.builder.add_from_string(icon_factory_src) icon_factory = self.builder.get_object('sonata_iconfactory') Gtk.IconFactory.add_default(icon_factory) # Main window self.window = self.builder.get_object('main_window') self.fullscreen = FullscreenApp(self.config, self.get_fullscreen_info) if self.config.ontop: self.window.set_keep_above(True) if self.config.sticky: self.window.stick() if not self.config.decorated: self.window.set_decorated(False) self.preferences.window = self.window self.notebook = self.builder.get_object('main_notebook') self.album_image = self.builder.get_object('main_album_image') self.tray_album_image = self.builder.get_object('tray_album_image') # Artwork self.artwork = artwork.Artwork( self.config, misc.is_lang_rtl(self.window), self.schedule_gc_collect, self.imagelist_append, self.remotefilelist_append, self.set_allow_art_search, self.status_is_play_or_pause, self.album_image, self.tray_album_image) # Popup menus: actions = [ ('sortmenu', Gtk.STOCK_SORT_ASCENDING, _('_Sort List')), ('plmenu', Gtk.STOCK_SAVE, _('Sa_ve Selected to')), ('profilesmenu', Gtk.STOCK_CONNECT, _('_Connection')), ('playaftermenu', None, _('P_lay after')), ('playmodemenu', None, _('Play _Mode')), ('updatemenu', Gtk.STOCK_REFRESH, _('_Update')), ('chooseimage_menu', Gtk.STOCK_CONVERT, _('Use _Remote Image...'), None, None, self.image_remote), ('localimage_menu', Gtk.STOCK_OPEN, _('Use _Local Image...'), None, None, self.image_local), ('fullscreen_window_menu', Gtk.STOCK_FULLSCREEN, _('_Fullscreen Mode'), 'F11', None, self.on_fullscreen_change), ('resetimage_menu', Gtk.STOCK_CLEAR, _('Reset Image'), None, None, self.artwork.on_reset_image), ('playmenu', Gtk.STOCK_MEDIA_PLAY, _('_Play'), None, None, self.mpd_pp), ('pausemenu', Gtk.STOCK_MEDIA_PAUSE, _('Pa_use'), None, None, self.mpd_pp), ('stopmenu', Gtk.STOCK_MEDIA_STOP, _('_Stop'), None, None, self.mpd_stop), ('prevmenu', Gtk.STOCK_MEDIA_PREVIOUS, _('Pre_vious'), None, None, self.mpd_prev), ('nextmenu', Gtk.STOCK_MEDIA_NEXT, _('_Next'), None, None, self.mpd_next), ('quitmenu', Gtk.STOCK_QUIT, _('_Quit'), None, None, self.on_delete_event_yes), ('removemenu', Gtk.STOCK_REMOVE, _('_Remove'), None, None, self.on_remove), ('clearmenu', Gtk.STOCK_CLEAR, _('_Clear'), '<Ctrl>Delete', None, self.mpd_clear), ('updatefullmenu', None, _('_Entire Library'), '<Ctrl><Shift>u', None, self.on_updatedb), ('updateselectedmenu', None, _('_Selected Items'), '<Ctrl>u', None, self.on_updatedb_shortcut), ('preferencemenu', Gtk.STOCK_PREFERENCES, _('_Preferences...'), 'F5', None, self.on_prefs), ('aboutmenu', Gtk.STOCK_ABOUT, _('_About...'), 'F1', None, self.on_about), ('tagmenu', Gtk.STOCK_EDIT, _('_Edit Tags...'), '<Ctrl>t', None, self.on_tags_edit), ('addmenu', Gtk.STOCK_ADD, _('_Add'), '<Ctrl>d', None, self.on_add_item), ('replacemenu', Gtk.STOCK_REDO, _('_Replace'), '<Ctrl>r', None, self.on_replace_item), ('add2menu', None, _('Add'), '<Shift><Ctrl>d', None, self.on_add_item_play), ('replace2menu', None, _('Replace'), '<Shift><Ctrl>r', None, self.on_replace_item_play), ('rmmenu', None, _('_Delete...'), None, None, self.on_remove), ('sortshuffle', None, _('Shuffle'), '<Alt>r', None, self.mpd_shuffle), ('sortshufflealbums', None, _('Shuffle Albums'), None, None, self.mpd_shuffle_albums), ] keyactions = [ ('expandkey', None, 'Expand Key', '<Alt>Down', None, self.on_expand), ('collapsekey', None, 'Collapse Key', '<Alt>Up', None, self.on_collapse), ('ppkey', None, 'Play/Pause Key', '<Ctrl>p', None, self.mpd_pp), ('stopkey', None, 'Stop Key', '<Ctrl>s', None, self.mpd_stop), ('prevkey', None, 'Previous Key', '<Ctrl>Left', None, self.mpd_prev), ('nextkey', None, 'Next Key', '<Ctrl>Right', None, self.mpd_next), ('lowerkey', None, 'Lower Volume Key', '<Ctrl>minus', None, self.on_volume_lower), ('raisekey', None, 'Raise Volume Key', '<Ctrl>plus', None, self.on_volume_raise), ('raisekey2', None, 'Raise Volume Key 2', '<Ctrl>equal', None, self.on_volume_raise), ('quitkey', None, 'Quit Key', '<Ctrl>q', None, self.on_delete_event_yes), ('quitkey2', None, 'Quit Key 2', '<Ctrl>w', None, self.on_delete_event), ('connectkey', None, 'Connect Key', '<Alt>c', None, self.on_connectkey_pressed), ('disconnectkey', None, 'Disconnect Key', '<Alt>d', None, self.on_disconnectkey_pressed), ('searchkey', None, 'Search Key', '<Ctrl>h', None, self.on_library_search_shortcut), ('nexttabkey', None, 'Next Tab Key', '<Alt>Right', None, self.switch_to_next_tab), ('prevtabkey', None, 'Prev Tab Key', '<Alt>Left', None, self.switch_to_prev_tab), ] tabactions = [('tab%skey' % i, None, 'Tab%s Key' % i, '<Alt>%s' % i, None, lambda _a, i=i: self.switch_to_tab_num(i-1)) for i in range(1, 10)] toggle_actions = [ ('showmenu', None, _('S_how Sonata'), None, None, self.on_withdraw_app_toggle, not self.config.withdrawn), ('repeatplaylistmenu', None, _('_Repeat playlist'), None, None, self.on_repeat_playlist_clicked, False), ('repeatsongmenu', None, _('Repeat s_ong'), None, None, self.on_repeat_song_clicked, False), ('randommenu', None, _('Rando_m'), None, None, self.on_random_clicked, False), ('consumemenu', None, _('Consume'), None, None, self.on_consume_clicked, False), ] toggle_tabactions = [ (self.tabname2id[self.TAB_CURRENT], None, self.TAB_CURRENT, None, None, self.on_tab_toggle, self.config.current_tab_visible), (self.tabname2id[self.TAB_LIBRARY], None, self.TAB_LIBRARY, None, None, self.on_tab_toggle, self.config.library_tab_visible), (self.tabname2id[self.TAB_PLAYLISTS], None, self.TAB_PLAYLISTS, None, None, self.on_tab_toggle, self.config.playlists_tab_visible), (self.tabname2id[self.TAB_STREAMS], None, self.TAB_STREAMS, None, None, self.on_tab_toggle, self.config.streams_tab_visible), (self.tabname2id[self.TAB_INFO], None, self.TAB_INFO, None, None, self.on_tab_toggle, self.config.info_tab_visible), ] uiDescription = """ <ui> <popup name="imagemenu"> <menuitem action="chooseimage_menu"/> <menuitem action="localimage_menu"/> <menuitem action="fullscreen_window_menu"/> <separator name="FM1"/> <menuitem action="resetimage_menu"/> </popup> <popup name="traymenu"> <menuitem action="showmenu"/> <separator name="FM1"/> <menuitem action="playmenu"/> <menuitem action="pausemenu"/> <menuitem action="stopmenu"/> <menuitem action="prevmenu"/> <menuitem action="nextmenu"/> <separator name="FM2"/> <menu action="playmodemenu"> <menuitem action="repeatplaylistmenu"/> <menuitem action="repeatsongmenu"/> <menuitem action="randommenu"/> <menuitem action="consumemenu"/> </menu> <menuitem action="fullscreen_window_menu"/> <menuitem action="preferencemenu"/> <separator name="FM3"/> <menuitem action="quitmenu"/> </popup> <popup name="mainmenu"> <menuitem action="addmenu"/> <menuitem action="replacemenu"/> <menu action="playaftermenu"> <menuitem action="add2menu"/> <menuitem action="replace2menu"/> </menu> <menuitem action="newmenu"/> <menuitem action="editmenu"/> <menuitem action="removemenu"/> <menuitem action="clearmenu"/> <menuitem action="tagmenu"/> <menuitem action="renamemenu"/> <menuitem action="rmmenu"/> <menu action="sortmenu"> <menuitem action="sortbytitle"/> <menuitem action="sortbyartist"/> <menuitem action="sortbyalbum"/> <menuitem action="sortbyfile"/> <menuitem action="sortbydirfile"/> <separator name="FM3"/> <menuitem action="sortshuffle"/> <menuitem action="sortshufflealbums"/> <menuitem action="sortreverse"/> </menu> <menu action="plmenu"> <menuitem action="savemenu"/> <separator name="FM4"/> </menu> <separator name="FM1"/> <menuitem action="repeatplaylistmenu"/> <menuitem action="repeatsongmenu"/> <menuitem action="randommenu"/> <menuitem action="consumemenu"/> <menu action="updatemenu"> <menuitem action="updateselectedmenu"/> <menuitem action="updatefullmenu"/> </menu> <separator name="FM2"/> <menu action="profilesmenu"> </menu> <menuitem action="preferencemenu"/> <menuitem action="aboutmenu"/> <menuitem action="quitmenu"/> </popup> <popup name="librarymenu"> <menuitem action="filesystemview"/> <menuitem action="artistview"/> <menuitem action="genreview"/> <menuitem action="albumview"/> </popup> <popup name="hidden"> <menuitem action="centerplaylistkey"/> </popup> """ uiDescription += '<popup name="notebookmenu">' uiDescription += ''.join('<menuitem action="%s"/>' % name for name in self.all_tab_ids)#FIXME uiDescription += "</popup>" uiDescription += ''.join('<accelerator action="%s"/>' % a[0] for a in keyactions + tabactions) uiDescription += "</ui>\n" # Try to connect to MPD: self.mpd_connect() if self.conn: self.status = self.mpd.status() self.iterate_time = self.iterate_time_when_connected self.songinfo = self.mpd.currentsong() self.artwork.update_songinfo(self.songinfo) elif self.config.initial_run: show_prefs = True # Realizing self.window will allow us to retrieve the theme's # link-color; we can then apply to it various widgets: try: self.window.realize() linkcolor = \ self.window.style_get_property("link-color").to_string() except: linkcolor = None # Audioscrobbler self.scrobbler = scrobbler.Scrobbler(self.config) self.scrobbler.import_module() self.scrobbler.init() self.preferences.scrobbler = self.scrobbler # Current tab self.current = current.Current( self.config, self.mpd, self.TAB_CURRENT, self.on_current_button_press, self.connected, lambda: self.sonata_loaded, lambda: self.songinfo, self.update_statusbar, self.iterate_now, self.add_tab) self.current_treeview = self.current.get_treeview() self.current_selection = self.current.get_selection() currentactions = [ ('centerplaylistkey', None, 'Center Playlist Key', '<Ctrl>i', None, lambda event: self.current.center_song_in_list(True)), ('sortbyartist', None, _('By Artist'), None, None, self.current.on_sort_by_artist), ('sortbyalbum', None, _('By Album'), None, None, self.current.on_sort_by_album), ('sortbytitle', None, _('By Song Title'), None, None, self.current.on_sort_by_title), ('sortbyfile', None, _('By File Name'), None, None, self.current.on_sort_by_file), ('sortbydirfile', None, _('By Dir & File Name'), None, None, self.current.on_sort_by_dirfile), ('sortreverse', None, _('Reverse List'), None, None, self.current.on_sort_reverse), ] # Library tab self.library = library.Library( self.config, self.mpd, self.artwork, self.TAB_LIBRARY, self.settings_save, self.current.filter_key_pressed, self.on_add_item, self.connected, self.on_library_button_press, self.add_tab) self.library_treeview = self.library.get_treeview() self.library_selection = self.library.get_selection() libraryactions = self.library.get_libraryactions() # Info tab self.info = info.Info(self.config, linkcolor, self.on_link_click, self.get_playing_song, self.TAB_INFO, self.on_image_activate, self.on_image_motion_cb, self.on_image_drop_cb, self.album_return_artist_and_tracks, self.add_tab) self.artwork.connect('artwork-changed', self.info.on_artwork_changed) self.artwork.connect('artwork-reset', self.info.on_artwork_reset) self.info_imagebox = self.info.get_info_imagebox() # Streams tab self.streams = streams.Streams(self.config, self.window, self.on_streams_button_press, self.on_add_item, self.settings_save, self.TAB_STREAMS, self.add_tab) self.streams_treeview = self.streams.get_treeview() self.streams_selection = self.streams.get_selection() streamsactions = [ ('newmenu', None, _('_New...'), '<Ctrl>n', None, self.streams.on_streams_new), ('editmenu', None, _('_Edit...'), None, None, self.streams.on_streams_edit), ] # Playlists tab self.playlists = playlists.Playlists(self.config, self.window, self.mpd, lambda: self.UIManager, self.update_menu_visibility, self.iterate_now, self.on_add_item, self.on_playlists_button_press, self.connected, self.add_selected_to_playlist, self.TAB_PLAYLISTS, self.add_tab) self.playlists_treeview = self.playlists.get_treeview() self.playlists_selection = self.playlists.get_selection() playlistsactions = [ ('savemenu', None, _('_New Playlist...'), '<Ctrl><Shift>s', None, self.playlists.on_playlist_save), ('renamemenu', None, _('_Rename...'), None, None, self.playlists.on_playlist_rename), ] # Main app: self.UIManager = Gtk.UIManager() accel_group = self.UIManager.get_accel_group() self.fullscreen.add_accel_group(accel_group) actionGroup = Gtk.ActionGroup('Actions') actionGroup.add_actions(actions) actionGroup.add_actions(keyactions) actionGroup.add_actions(tabactions) actionGroup.add_actions(currentactions) actionGroup.add_actions(libraryactions) actionGroup.add_actions(streamsactions) actionGroup.add_actions(playlistsactions) actionGroup.add_toggle_actions(toggle_actions) actionGroup.add_toggle_actions(toggle_tabactions) self.UIManager.insert_action_group(actionGroup, 0) self.UIManager.add_ui_from_string(uiDescription) self.populate_profiles_for_menu() self.window.add_accel_group(self.UIManager.get_accel_group()) self.mainmenu = self.UIManager.get_widget('/mainmenu') self.randommenu = self.UIManager.get_widget('/mainmenu/randommenu') self.consumemenu = self.UIManager.get_widget('/mainmenu/consumemenu') self.repeatplaylistmenu = self.UIManager.get_widget('/mainmenu/repeatplaylistmenu') self.repeatsongmenu = self.UIManager.get_widget('/mainmenu/repeatsongmenu') self.imagemenu = self.UIManager.get_widget('/imagemenu') self.traymenu = self.UIManager.get_widget('/traymenu') self.librarymenu = self.UIManager.get_widget('/librarymenu') self.library.set_librarymenu(self.librarymenu) self.notebookmenu = self.UIManager.get_widget('/notebookmenu') # Autostart plugins for plugin in pluginsystem.get_info(): if plugin.name in self.config.autostart_plugins: pluginsystem.set_enabled(plugin, True) # New plugins for plugin in pluginsystem.get_info(): if plugin.name not in self.config.known_plugins: self.config.known_plugins.append(plugin.name) if plugin.name in consts.DEFAULT_PLUGINS: self.logger.info( _("Enabling new plug-in %s..." % plugin.name)) pluginsystem.set_enabled(plugin, True) else: self.logger.info(_("Found new plug-in %s." % plugin.name)) self.tray_icon = tray.TrayIcon(self.window, self.traymenu, self.traytips) self.imageeventbox = self.builder.get_object('image_event_box') self.imageeventbox.drag_dest_set(Gtk.DestDefaults.HIGHLIGHT | Gtk.DestDefaults.DROP, [Gtk.TargetEntry.new("text/uri-list", 0, 80), Gtk.TargetEntry.new("text/plain", 0, 80)], Gdk.DragAction.DEFAULT) if not self.config.show_covers: self.imageeventbox.hide() self.prevbutton = self.builder.get_object('prev_button') self.ppbutton = self.builder.get_object('playpause_button') self.ppbutton_image = self.builder.get_object('playpause_button_image') self.stopbutton = self.builder.get_object('stop_button') self.nextbutton = self.builder.get_object('next_button') for mediabutton in (self.prevbutton, self.ppbutton, self.stopbutton, self.nextbutton): if not self.config.show_playback: ui.hide(mediabutton) self.progressbox = self.builder.get_object('progress_box') self.progressbar = self.builder.get_object('progress_bar') self.progresseventbox = self.builder.get_object('progress_event_box') if not self.config.show_progress: ui.hide(self.progressbox) self.volumebutton = self.builder.get_object('volume_button') if not self.config.show_playback: ui.hide(self.volumebutton) self.expander = self.builder.get_object('expander') self.expander.set_expanded(self.config.expanded) self.cursonglabel1 = self.builder.get_object('current_label_1') self.cursonglabel2 = self.builder.get_object('current_label_2') expanderbox = self.builder.get_object('expander_label_widget') self.expander.set_label_widget(expanderbox) self.statusbar = self.builder.get_object('main_statusbar') if not self.config.show_statusbar or not self.config.expanded: ui.hide(self.statusbar) self.window.move(self.config.x, self.config.y) self.window.set_size_request(270, -1) songlabel1 = '<big>{}</big>'.format(_('Stopped')) self.cursonglabel1.set_markup(songlabel1) if not self.config.expanded: ui.hide(self.notebook) songlabel2 = _('Click to expand') self.window.set_default_size(self.config.w, 1) else: songlabel2 = _('Click to collapse') self.window.set_default_size(self.config.w, self.config.h) songlabel2 = '<small>{}</small>'.format(songlabel2) self.cursonglabel2.set_markup(songlabel2) self.expander.set_tooltip_text(self.cursonglabel1.get_text()) if not self.conn: self.progressbar.set_text(_('Not Connected')) elif not self.status: self.progressbar.set_text(_('No Read Permission')) # Update tab positions: self.notebook.reorder_child(self.current.get_widgets(), self.config.current_tab_pos) self.notebook.reorder_child(self.library.get_widgets(), self.config.library_tab_pos) self.notebook.reorder_child(self.playlists.get_widgets(), self.config.playlists_tab_pos) self.notebook.reorder_child(self.streams.get_widgets(), self.config.streams_tab_pos) self.notebook.reorder_child(self.info.get_widgets(), self.config.info_tab_pos) self.last_tab = self.notebook_get_tab_text(self.notebook, 0) # Song notification window: self.tray_v_box = self.builder.get_object('tray_v_box') if not self.config.show_covers: self.tray_album_image.hide() self.tray_current_label1 = self.builder.get_object('tray_label_1') self.tray_current_label2 = self.builder.get_object('tray_label_2') self.tray_progressbar = self.builder.get_object('tray_progressbar') if not self.config.show_progress: ui.hide(self.tray_progressbar) self.tray_v_box.show_all() self.traytips.add_widget(self.tray_v_box) self.tooltip_set_window_width() # Connect to signals self.window.add_events(Gdk.EventMask.BUTTON_PRESS_MASK) self.traytips.add_events(Gdk.EventMask.BUTTON_PRESS_MASK) self.traytips.connect('button_press_event', self.on_traytips_press) self.window.connect('delete_event', self.on_delete_event) self.window.connect('configure_event', self.on_window_configure) self.window.connect('key-press-event', self.on_topwindow_keypress) self.imageeventbox.connect('button_press_event', self.on_image_activate) self.imageeventbox.connect('drag_motion', self.on_image_motion_cb) self.imageeventbox.connect('drag_data_received', self.on_image_drop_cb) self.ppbutton.connect('clicked', self.mpd_pp) self.stopbutton.connect('clicked', self.mpd_stop) self.prevbutton.connect('clicked', self.mpd_prev) self.nextbutton.connect('clicked', self.mpd_next) self.progresseventbox.connect('button_press_event', self.on_progressbar_press) self.progresseventbox.connect('scroll_event', self.on_progressbar_scroll) self.volumebutton.connect('value-changed', self.on_volume_change) self.expander.connect('activate', self.on_expander_activate) self.randommenu.connect('toggled', self.on_random_clicked) self.repeatplaylistmenu.connect('toggled', self.on_repeat_playlist_clicked) self.repeatsongmenu.connect('toggled', self.on_repeat_song_clicked) self.cursonglabel1.connect('notify::label', self.on_currsong_notify) self.cursonglabel1.connect('notify::label', self.fullscreen.on_text_changed) self.progressbar.connect('notify::fraction', self.on_progressbar_notify_fraction) self.progressbar.connect('notify::text', self.on_progressbar_notify_text) self.mainwinhandler = self.window.connect('button_press_event', self.on_window_click) self.notebook.connect('size-allocate', self.on_notebook_resize) self.notebook.connect('switch-page', self.on_notebook_page_change) for treeview in [self.current_treeview, self.library_treeview, self.playlists_treeview, self.streams_treeview]: treeview.connect('popup_menu', self.on_menu_popup) for treeviewsel in [self.current_selection, self.library_selection, self.playlists_selection, self.streams_selection]: treeviewsel.connect('changed', self.on_treeview_selection_changed) for widget in [self.ppbutton, self.prevbutton, self.stopbutton, self.nextbutton, self.progresseventbox, self.expander]: widget.connect('button_press_event', self.menu_popup) self.artwork.connect('artwork-changed', self.fullscreen.on_artwork_changed) self.artwork.connect('artwork-reset', self.fullscreen.reset) self.systemtray_initialize() # This will ensure that "Not connected" is shown in the systray tooltip if not self.conn: self.update_cursong() # Ensure that the systemtray icon is added here. This is really only # important if we're starting in hidden (minimized-to-tray) mode: if self.config.withdrawn: while Gtk.events_pending(): Gtk.main_iteration() dbus.init_gnome_mediakeys(self.mpd_pp, self.mpd_stop, self.mpd_prev, self.mpd_next) # XXX find new multimedia key library here, in case we don't have gnome! #if not dbus.using_gnome_mediakeys(): # pass # Initialize playlist data and widget self.playlistsdata = self.playlists.get_model() # Initialize streams data and widget self.streamsdata = self.streams.get_model() # Initialize library data and widget self.librarydata = self.library.get_model() self.artwork.library_artwork_init(self.librarydata, consts.LIB_COVER_SIZE) icon = self.window.render_icon('sonata', Gtk.IconSize.DIALOG) self.window.set_icon(icon) self.streams.populate() self.iterate_now() if self.config.withdrawn and self.tray_icon.is_visible(): ui.hide(self.window) self.window.show_all() # Ensure that button images are displayed despite GTK+ theme self.window.get_settings().set_property("gtk-button-images", True) if self.config.update_on_start: self.on_updatedb(None) self.notebook.set_no_show_all(False) self.window.set_no_show_all(False) if show_prefs: self.on_prefs(None) self.config.initial_run = False # Ensure that sonata is loaded before we display the notif window self.sonata_loaded = True self.current.center_song_in_list(True) gc.disable() GLib.idle_add(self.header_save_column_widths) pluginsystem.notify_of('tab_construct', self.on_enable_tab, self.on_disable_tab) ### Tab system: def on_enable_tab(self, _plugin, tab): tab_parts = tab() name = tab_parts[2] self.plugintabs[name] = self.add_tab(*tab_parts) def on_disable_tab(self, _plugin, tab): name = tab()[2] tab = self.plugintabs.pop(name) self.notebook.remove(tab) def add_tab(self, page, label_widget, text, focus): label_widget.show_all() label_widget.connect("button_press_event", self.on_tab_click) self.notebook.append_page(page, label_widget) if (text in self.tabname2id and not getattr(self.config, self.tabname2id[text] + '_tab_visible')): ui.hide(page) self.notebook.set_tab_reorderable(page, True) if self.config.tabs_expanded: self.notebook.set_tab_label_packing(page, True, True, Gtk.PACK_START) self.tabname2tab[text] = page self.tabname2focus[text] = focus return page def connected(self): ### "Model, logic": return self.conn def status_is_play_or_pause(self): return (self.conn and self.status and self.status.get('state', None) in ['play', 'pause']) def get_playing_song(self): if self.status_is_play_or_pause() and self.songinfo: return self.songinfo return None def playing_song_change(self): self.artwork.artwork_update() for _plugin, cb in pluginsystem.get('playing_song_observers'): cb(self.get_playing_song()) def get_fullscreen_info(self): return (self.status_is_play_or_pause(), self.cursonglabel1.get_text(), self.cursonglabel2.get_text()) def set_allow_art_search(self): self.allow_art_search = True def populate_profiles_for_menu(self): host, port, _password = misc.mpd_env_vars() if self.merge_id: self.UIManager.remove_ui(self.merge_id) if self.actionGroupProfiles: self.UIManager.remove_action_group(self.actionGroupProfiles) self.actionGroupProfiles = Gtk.ActionGroup('MPDProfiles') self.UIManager.ensure_update() profile_names = [_("MPD_HOST/PORT")] if host \ or port else self.config.profile_names actions = [ (str(i), None, "[%d] %s" % (i + 1, ui.quote_label(name)), None, None, i) for i, name in enumerate(profile_names)] actions.append(( 'disconnect', Gtk.STOCK_DISCONNECT, _('Disconnect'), None, None, len(self.config.profile_names))) active_radio = 0 if host or port else self.config.profile_num if not self.conn: active_radio = len(self.config.profile_names) self.actionGroupProfiles.add_radio_actions(actions, active_radio, self.on_profiles_click) uiDescription = """ <ui> <popup name="mainmenu"> <menu action="profilesmenu"> """ uiDescription += "".join( '<menuitem action=\"%s\" position="top"/>' % action[0] for action in reversed(actions)) uiDescription += """</menu></popup></ui>""" self.merge_id = self.UIManager.add_ui_from_string(uiDescription) self.UIManager.insert_action_group(self.actionGroupProfiles, 0) self.UIManager.get_widget('/hidden').set_property('visible', False) def on_profiles_click(self, _radioaction, profile): if self.skip_on_profiles_click: return if profile.get_name() == 'disconnect': self.on_disconnectkey_pressed(None) else: # Clear sonata before we try to connect: self.mpd_disconnect() self.iterate_now() # Now connect to new profile: self.config.profile_num = profile.get_current_value() self.on_connectkey_pressed(None) def mpd_connect(self, force=False): if self.trying_connection: return self.trying_connection = True if self.user_connect or force: host, port, password = misc.mpd_env_vars() if not host: host = self.config.host[self.config.profile_num] if not port: port = self.config.port[self.config.profile_num] if not password: password = self.config.password[self.config.profile_num] self.mpd.connect(host, port) if len(password) > 0: self.mpd.password(password) test = self.mpd.status() if test: self.conn = True else: self.conn = False else: self.conn = False if not self.conn: self.status = None self.songinfo = None if self.artwork is not None: self.artwork.update_songinfo(self.songinfo) self.iterate_time = self.iterate_time_when_disconnected_or_stopped self.trying_connection = False def mpd_disconnect(self): if self.conn: self.mpd.close() self.mpd.disconnect() self.conn = False def on_connectkey_pressed(self, _event=None): self.user_connect = True # Update selected radio button in menu: self.skip_on_profiles_click = True host, port, _password = misc.mpd_env_vars() index = str(0 if host or port else self.config.profile_num) self.actionGroupProfiles.get_action(index).activate() self.skip_on_profiles_click = False # Connect: self.mpd_connect(force=True) self.iterate_now() def on_disconnectkey_pressed(self, _event): self.user_connect = False # Update selected radio button in menu: self.skip_on_profiles_click = True self.actionGroupProfiles.get_action('disconnect').activate() self.skip_on_profiles_click = False # Disconnect: self.mpd_disconnect() def update_status(self): try: if not self.conn: self.mpd_connect() if self.conn: self.iterate_time = self.iterate_time_when_connected self.status = self.mpd.status() if self.status: if self.status['state'] == 'stop': self.iterate_time = \ self.iterate_time_when_disconnected_or_stopped self.songinfo = self.mpd.currentsong() self.artwork.update_songinfo(self.songinfo) repeat_song = self.status['repeat'] == '1' \ and self.status['single'] == '1' repeat_playlist = self.status['repeat'] == '1' \ and self.status['single'] == '0' if not self.last_song_repeat \ or self.last_song_repeat != repeat_song: self.repeatsongmenu.set_active(repeat_song) if not self.last_playlist_repeat \ or self.last_playlist_repeat != repeat_playlist: self.repeatplaylistmenu.set_active(repeat_playlist) if not self.last_random \ or self.last_random != self.status['random']: self.randommenu.set_active( self.status['random'] == '1') if not self.last_consume or self.last_consume != self.status['consume']: self.consumemenu.set_active(self.status['consume'] == '1') self.config.xfade_enabled = False if 'xfade' in self.status: xfade = int(self.status['xfade']) if xfade != 0: self.config.xfade_enabled = True self.config.xfade = xfade if self.config.xfade > 30: self.config.xfade = 30 self.last_song_repeat = repeat_song self.last_playlist_repeat = repeat_playlist self.last_random = self.status['random'] self.last_consume = self.status['consume'] return except: self.logger.exception("Unhandled error while updating status:") self.prevstatus = self.status self.prevsonginfo = self.songinfo self.conn = False self.status = None self.songinfo = None self.artwork.update_songinfo(self.songinfo) def iterate(self): self.update_status() self.info_update(False) # XXX: this is subject to race condition, since self.conn can be # changed in another thread: # 1. self.conn == self.prevconn (stable state) # 2. This if is tested and self.handle_change_conn is not called # 3. The connection thread updates self.conn # 4. self.prevconn = self.conn and we never get into the connected # state (or maybe throught another way, but well). if self.conn != self.prevconn: self.handle_change_conn() if self.status != self.prevstatus: self.handle_change_status() if self.songinfo != self.prevsonginfo: self.handle_change_song() self.prevconn = self.conn self.prevstatus = self.status self.prevsonginfo = self.songinfo # Repeat ad infitum.. self.iterate_handler = GLib.timeout_add(self.iterate_time, self.iterate) if self.config.show_trayicon: if self.tray_icon.is_available() and \ not self.tray_icon.is_visible(): # Systemtray appears, add icon self.systemtray_initialize() elif not self.tray_icon.is_available() and self.config.withdrawn: # Systemtray gone, unwithdraw app self.withdraw_app_undo() if self.call_gc_collect: gc.collect() self.call_gc_collect = False def schedule_gc_collect(self): self.call_gc_collect = True def iterate_stop(self): try: GLib.source_remove(self.iterate_handler) except: pass def iterate_now(self): # Since self.iterate_time_when_connected has been # slowed down to 500ms, we'll call self.iterate_now() # whenever the user performs an action that requires # updating the client self.iterate_stop() self.iterate() def on_topwindow_keypress(self, _widget, event): shortcut = Gtk.accelerator_name(event.keyval, event.get_state()) shortcut = shortcut.replace("<Mod2>", "") # These shortcuts were moved here so that they don't interfere with # searching the library if shortcut == 'BackSpace' and self.current_tab == self.TAB_LIBRARY: return self.library.library_browse_parent(None) elif shortcut == 'Escape': if self.current_tab == self.TAB_LIBRARY \ and self.library.search_visible(): self.library.on_search_end(None) elif self.current_tab == self.TAB_CURRENT \ and self.current.filterbox_visible: self.current.searchfilter_toggle(None) elif self.config.minimize_to_systray and \ self.tray_icon.is_visible(): self.withdraw_app() return elif shortcut == 'Delete': return self.on_remove(None) if self.current_tab == self.TAB_CURRENT: if event.get_state() & (Gdk.ModifierType.CONTROL_MASK | Gdk.ModifierType.MOD1_MASK): return # XXX this isn't the right thing with GTK input methods: text = chr(Gdk.keyval_to_unicode(event.keyval)) # Filter out those keys and don't toggle the filter bar if they are # pressed. filter_out = set([ '\x00', # F5, Alt, etc. '\x08', # Backspace '\x7f', # Delete ]) if text not in filter_out and text.strip(): if not self.current.filterbox_visible: if text != "/": self.current.searchfilter_toggle(None, text) else: self.current.searchfilter_toggle(None) def settings_load(self): self.config.settings_load_real() def settings_save(self): self.header_save_column_widths() self.config.current_tab_pos = self.notebook_get_tab_num( self.notebook, self.TAB_CURRENT) self.config.library_tab_pos = self.notebook_get_tab_num( self.notebook, self.TAB_LIBRARY) self.config.playlists_tab_pos = self.notebook_get_tab_num( self.notebook, self.TAB_PLAYLISTS) self.config.streams_tab_pos = self.notebook_get_tab_num( self.notebook, self.TAB_STREAMS) self.config.info_tab_pos = self.notebook_get_tab_num(self.notebook, self.TAB_INFO) autostart_plugins = [] for plugin in pluginsystem.plugin_infos: if plugin._enabled: autostart_plugins.append(plugin.name) self.config.autostart_plugins = autostart_plugins self.config.settings_save_real() def handle_change_conn(self): if not self.conn: for mediabutton in (self.ppbutton, self.stopbutton, self.prevbutton, self.nextbutton, self.volumebutton): mediabutton.set_property('sensitive', False) self.current.clear() self.tray_icon.update_icon('sonata-disconnect') self.info_update(True) if self.current.filterbox_visible: GLib.idle_add(self.current.searchfilter_toggle, None) if self.library.search_visible(): self.library.on_search_end(None) self.handle_change_song() self.handle_change_status() else: for mediabutton in (self.ppbutton, self.stopbutton, self.prevbutton, self.nextbutton, self.volumebutton): mediabutton.set_property('sensitive', True) if self.sonata_loaded: self.library.library_browse(root=SongRecord(path="/")) self.playlists.populate() self.streams.populate() self.on_notebook_page_change(self.notebook, 0, self.notebook.get_current_page()) def info_update(self, update_all): playing_or_paused = self.status_is_play_or_pause() newbitrate = None if self.status: newbitrate = self.status.get('bitrate', '') if newbitrate: newbitrate += " kbps" self.info.update(playing_or_paused, newbitrate, self.songinfo, update_all) def on_treeview_selection_changed(self, treeselection): self.update_menu_visibility() if treeselection == self.current.get_selection(): # User previously clicked inside group of selected rows, re-select # rows so it doesn't look like anything changed: if self.current.sel_rows: for row in self.current.sel_rows: treeselection.select_path(row) def on_library_button_press(self, widget, event): if self.on_button_press(widget, event, False): return True def on_current_button_press(self, widget, event): if self.on_button_press(widget, event, True): return True def on_playlists_button_press(self, widget, event): if self.on_button_press(widget, event, False): return True def on_streams_button_press(self, widget, event): if self.on_button_press(widget, event, False): return True def on_button_press(self, widget, event, widget_is_current): ctrl_press = (event.get_state() & Gdk.ModifierType.CONTROL_MASK) self.current.sel_rows = None if event.button == 1 and widget_is_current and not ctrl_press: # If the user clicked inside a group of rows that were already # selected, we need to retain the selected rows in case the user # wants to DND the group of rows. If they release the mouse without # first moving it, then we revert to the single selected row. # This is similar to the behavior found in thunar. try: path, _col, _x, _y = widget.get_path_at_pos(int(event.x), int(event.y)) if widget.get_selection().path_is_selected(path): self.current.sel_rows = \ widget.get_selection().get_selected_rows()[1] except: pass elif event.button == 3: self.update_menu_visibility() # Calling the popup in idle_add is important. It allows the menu # items to have been shown/hidden before the menu is popped up. # Otherwise, if the menu pops up too quickly, it can result in # automatically clicking menu items for the user! GLib.idle_add(self.mainmenu.popup, None, None, None, None, event.button, event.time) # Don't change the selection for a right-click. This # will allow the user to select multiple rows and then # right-click (instead of right-clicking and having # the current selection change to the current row) if widget.get_selection().count_selected_rows() > 1: return True def on_add_item_play(self, widget): self.on_add_item(widget, True) def on_add_item(self, _widget, play_after=False): if self.conn: if play_after and self.status: playid = self.status['playlistlength'] if self.current_tab == self.TAB_LIBRARY: items = self.library.get_path_child_filenames(True) self.mpd.command_list_ok_begin() for item in items: self.mpd.add(item) self.mpd.command_list_end() elif self.current_tab == self.TAB_PLAYLISTS: model, selected = self.playlists_selection.get_selected_rows() for path in selected: self.mpd.load( misc.unescape_html( model.get_value(model.get_iter(path), 1))) elif self.current_tab == self.TAB_STREAMS: model, selected = self.streams_selection.get_selected_rows() for path in selected: item = model.get_value(model.get_iter(path), 2) self.stream_parse_and_add(item) self.iterate_now() if play_after: if self.status['random'] == '1': # If we are in random mode, we want to play a random song # instead: self.mpd.play() else: self.mpd.play(int(playid)) def add_selected_to_playlist(self, plname): if self.current_tab == self.TAB_LIBRARY: songs = self.library.get_path_child_filenames(True) elif self.current_tab == self.TAB_CURRENT: songs = self.current.get_selected_filenames(0) else: raise Exception("This tab doesn't support playlists") self.mpd.command_list_ok_begin() for song in songs: self.mpd.playlistadd(plname, song) self.mpd.command_list_end() def stream_parse_and_add(self, uri): # Try different URI, in case we don't have a good one. # XXX: we should build new URI only if it makes sense. If .open() fails # because a URI starting with "file://" doesn't exist anymore, it # doesn't really matter to add file:// in front of it to try again. for try_uri in [uri, "http://" + uri, "file://" + uri]: while Gtk.events_pending(): Gtk.main_iteration() try: request = urllib.request.Request(uri) opener = urllib.request.build_opener() fp = opener.open(request) except: # We fail, maybe we'll just add the URI to MPD as it. items = [uri] continue # URI openable! items = streams.parse_stream(try_uri, fp) break for item in items: self.mpd.add(item) def on_replace_item_play(self, widget): self.on_replace_item(widget, True) def on_replace_item(self, widget, play_after=False): if self.status and self.status['state'] == 'play': play_after = True # Only clear if an item is selected: if self.current_tab == self.TAB_LIBRARY: num_selected = self.library_selection.count_selected_rows() elif self.current_tab == self.TAB_PLAYLISTS: num_selected = self.playlists_selection.count_selected_rows() elif self.current_tab == self.TAB_STREAMS: num_selected = self.streams_selection.count_selected_rows() else: return if num_selected == 0: return self.mpd_clear(None) self.on_add_item(widget, play_after) self.iterate_now() def handle_change_status(self): # Called when one of the following items are changed: # 1. Current playlist (song added, removed, etc) # 2. Repeat/random/xfade/volume # 3. Currently selected song in playlist # 4. Status (playing/paused/stopped) if self.status is None: # clean up and bail out self.update_progressbar() self.update_cursong() self.update_wintitle() self.playing_song_change() self.update_statusbar() if not self.conn: self.librarydata.clear() self.playlistsdata.clear() self.streamsdata.clear() return # Display current playlist if self.prevstatus is None \ or self.prevstatus['playlist'] != self.status['playlist']: prevstatus_playlist = None if self.prevstatus: prevstatus_playlist = self.prevstatus['playlist'] self.current.current_update(prevstatus_playlist, self.status['playlistlength']) # Update progress frequently if we're playing if self.status_is_play_or_pause(): self.update_progressbar() # If elapsed time is shown in the window title, we need to update # more often: if "%E" in self.config.titleformat: self.update_wintitle() # If state changes if self.prevstatus is None \ or self.prevstatus['state'] != self.status['state']: self.album_get_artist() # Update progressbar if the state changes too self.update_progressbar() self.update_cursong() self.update_wintitle() self.info_update(True) if self.status['state'] == 'stop': self.ppbutton_image.set_from_stock(Gtk.STOCK_MEDIA_PLAY, Gtk.IconSize.BUTTON) self.UIManager.get_widget('/traymenu/playmenu').show() self.UIManager.get_widget('/traymenu/pausemenu').hide() icon = 'sonata' elif self.status['state'] == 'pause': self.ppbutton_image.set_from_stock(Gtk.STOCK_MEDIA_PLAY, Gtk.IconSize.BUTTON) self.UIManager.get_widget('/traymenu/playmenu').show() self.UIManager.get_widget('/traymenu/pausemenu').hide() icon = 'sonata-pause' elif self.status['state'] == 'play': self.ppbutton_image.set_from_stock(Gtk.STOCK_MEDIA_PAUSE, Gtk.IconSize.BUTTON) self.UIManager.get_widget('/traymenu/playmenu').hide() self.UIManager.get_widget('/traymenu/pausemenu').show() if self.prevstatus != None: if self.prevstatus['state'] == 'pause': # Forces the notification to popup if specified self.on_currsong_notify() icon = 'sonata-play' else: icon = 'sonata-disconnect' self.tray_icon.update_icon(icon) self.playing_song_change() if self.status_is_play_or_pause(): self.current.center_song_in_list() if self.prevstatus is None \ or self.status.get('volume') != self.prevstatus.get('volume'): self.volumebutton.set_value(int(self.status.get('volume', 0))) if self.conn: if mpdh.mpd_is_updating(self.status): # MPD library is being updated self.update_statusbar(True) elif self.prevstatus is None \ or mpdh.mpd_is_updating(self.prevstatus) \ != mpdh.mpd_is_updating(self.status): if not mpdh.mpd_is_updating(self.status): # Done updating, refresh interface self.mpd_updated_db() elif self.mpd_update_queued: # If the update happens too quickly, we won't catch it in # our polling. So let's force an update of the interface: self.mpd_updated_db() self.mpd_update_queued = False if self.config.as_enabled: if self.prevstatus: prevstate = self.prevstatus['state'] else: prevstate = 'stop' if self.status: state = self.status['state'] else: state = 'stop' if state in ('play', 'pause'): mpd_time_now = self.status['time'] self.scrobbler.handle_change_status(state, prevstate, self.prevsonginfo, self.songinfo, mpd_time_now) elif state == 'stop': self.scrobbler.handle_change_status(state, prevstate, self.prevsonginfo) def mpd_updated_db(self): self.library.view_caches_reset() self.update_statusbar(False) # We need to make sure that we update the artist in case tags # have changed: self.album_reset_artist() self.album_get_artist() # Now update the library and playlist tabs if self.library.search_visible(): self.library.on_library_search_combo_change() else: self.library.library_browse(root=self.config.wd) self.playlists.populate() # Update info if it's visible: self.info_update(True) return False def album_get_artist(self): if self.songinfo and 'album' in self.songinfo: self.album_return_artist_name() elif self.songinfo and 'artist' in self.songinfo: self.album_current_artist = [self.songinfo, self.songinfo.artist] else: self.album_current_artist = [self.songinfo, ""] def handle_change_song(self): # Called when one of the following items are changed for the current # mpd song in the playlist: # 1. Song tags or filename (e.g. if tags are edited) # 2. Position in playlist (e.g. if playlist is sorted) # Note that the song does not have to be playing; it can reflect the # next song that will be played. self.current.on_song_change(self.status) self.album_get_artist() self.update_cursong() self.update_wintitle() self.playing_song_change() self.info_update(True) def update_progressbar(self): if self.status_is_play_or_pause(): at, length = [float(c) for c in self.status['time'].split(':')] try: newfrac = at / length except: newfrac = 0 else: newfrac = 0 if not self.last_progress_frac or self.last_progress_frac != newfrac: if newfrac >= 0 and newfrac <= 1: self.progressbar.set_fraction(newfrac) if self.conn: if self.status_is_play_or_pause(): at, length = [int(c) for c in self.status['time'].split(':')] at_time = misc.convert_time(at) try: time = misc.convert_time(self.songinfo.time) newtime = at_time + " / " + time except: newtime = at_time elif self.status: newtime = ' ' else: newtime = _('No Read Permission') else: newtime = _('Not Connected') if not self.last_progress_text or self.last_progress_text != newtime: self.progressbar.set_text(newtime) def update_statusbar(self, updatingdb=False): if self.config.show_statusbar: if self.conn and self.status: days = None # FIXME _ is for localization, temporarily __ hours, mins, __ = misc.convert_time_raw(self.current.total_time) # Show text: songs_count = int(self.status['playlistlength']) songs_text = ngettext('{count} song', '{count} songs', songs_count).format(count=songs_count) time_parts = [] if hours >= 24: days = int(hours / 24) hours = hours - (days * 24) if days: days_text = ngettext('{count} day', '{count} days', days).format(count=days) time_parts.append(days_text) if hours: hours_text = ngettext('{count} hour', '{count} hours', hours).format(count=hours) time_parts.append(hours_text) if mins: mins_text = ngettext('{count} minute', '{count} minutes', mins).format(count=mins) time_parts.append(mins_text) time_text = ', '.join([part for part in time_parts if part]) if int(self.status['playlistlength']) > 0: status_text = "{}: {}".format(songs_text, time_text) else: status_text = '' if updatingdb: update_text = _('(updating mpd)') status_text = "{}: {}".format(status_text, update_text) else: status_text = '' if status_text != self.last_status_text: self.statusbar.push(self.statusbar.get_context_id(''), status_text) self.last_status_text = status_text def update_cursong(self): if self.status_is_play_or_pause(): # We must show the trayprogressbar and trayalbumeventbox # before changing self.cursonglabel (and consequently calling # self.on_currsong_notify()) in order to ensure that the # notification popup will have the correct height when being # displayed for the first time after a stopped state. if self.config.show_progress: self.tray_progressbar.show() self.tray_current_label2.show() if self.config.show_covers: self.tray_album_image.show() for label in (self.cursonglabel1, self.cursonglabel2, self.tray_current_label1, self.tray_current_label2): label.set_ellipsize(Pango.EllipsizeMode.END) if len(self.config.currsongformat1) > 0: newlabel1 = formatting.parse(self.config.currsongformat1, self.songinfo, True) else: newlabel1 = '' newlabel1 = '<big>{}</big>'.format(newlabel1) if len(self.config.currsongformat2) > 0: newlabel2 = formatting.parse(self.config.currsongformat2, self.songinfo, True) else: newlabel2 = '' newlabel2 = '<small>{}</small>'.format(newlabel2) if newlabel1 != self.cursonglabel1.get_label(): self.cursonglabel1.set_markup(newlabel1) if newlabel2 != self.cursonglabel2.get_label(): self.cursonglabel2.set_markup(newlabel2) if newlabel1 != self.tray_current_label1.get_label(): self.tray_current_label1.set_markup(newlabel1) if newlabel2 != self.tray_current_label2.get_label(): self.tray_current_label2.set_markup(newlabel2) self.expander.set_tooltip_text('%s\n%s' % \ (self.cursonglabel1.get_text(), self.cursonglabel2.get_text(),)) else: for label in (self.cursonglabel1, self.cursonglabel2, self.tray_current_label1, self.cursonglabel2): label.set_ellipsize(Pango.EllipsizeMode.NONE) newlabel1 = '<big>{}</big>'.format(_('Stopped')) self.cursonglabel1.set_markup(newlabel1) if self.config.expanded: newlabel2 = _('Click to collapse') else: newlabel2 = _('Click to expand') newlabel2 = '<small>{}</small>'.format(newlabel2) self.cursonglabel2.set_markup(newlabel2) self.expander.set_tooltip_text(self.cursonglabel1.get_text()) if not self.conn: traylabel1 = _('Not Connected') elif not self.status: traylabel1 = _('No Read Permission') else: traylabel1 = _('Stopped') traylabel1 = '<big>{}</big>'.format(traylabel1) self.tray_current_label1.set_markup(traylabel1) self.tray_progressbar.hide() self.tray_album_image.hide() self.tray_current_label2.hide() self.update_infofile() def update_wintitle(self): if self.status_is_play_or_pause(): newtitle = formatting.parse( self.config.titleformat, self.songinfo, False, True, self.status.get('time', None)) else: newtitle = '[Sonata]' if not self.last_title or self.last_title != newtitle: self.window.set_property('title', newtitle) self.last_title = newtitle def tooltip_set_window_width(self): screen = self.window.get_screen() _pscreen, px, py, _mods = screen.get_display().get_pointer() monitor_num = screen.get_monitor_at_point(px, py) monitor = screen.get_monitor_geometry(monitor_num) self.notification_width = int(monitor.width * 0.30) if self.notification_width > consts.NOTIFICATION_WIDTH_MAX: self.notification_width = consts.NOTIFICATION_WIDTH_MAX elif self.notification_width < consts.NOTIFICATION_WIDTH_MIN: self.notification_width = consts.NOTIFICATION_WIDTH_MIN def on_currsong_notify(self, _foo=None, _bar=None, force_popup=False): if self.fullscreen.on_fullscreen: return if self.sonata_loaded: if self.status_is_play_or_pause(): if self.config.show_covers: self.traytips.set_size_request(self.notification_width, -1) else: self.traytips.set_size_request( self.notification_width - 100, -1) else: self.traytips.set_size_request(-1, -1) if self.config.show_notification or force_popup: try: GLib.source_remove(self.traytips.notif_handler) except: pass if self.status_is_play_or_pause(): try: self.traytips.notifications_location = \ self.config.traytips_notifications_location self.traytips.use_notifications_location = True if self.tray_icon.is_visible(): self.traytips._real_display(self.tray_icon) else: self.traytips._real_display(None) if self.config.popup_option != len(self.popuptimes)-1: if force_popup and \ not self.config.show_notification: # Used -p argument and notification is disabled # in player; default to 3 seconds timeout = 3000 else: timeout = \ int(self.popuptimes[ self.config.popup_option]) * 1000 self.traytips.notif_handler = GLib.timeout_add( timeout, self.traytips.hide) else: # -1 indicates that the timeout should be forever. # We don't want to pass None, because then Sonata # would think that there is no current notification self.traytips.notif_handler = -1 except: pass else: self.traytips.hide() elif self.traytips.get_property('visible'): self.traytips._real_display(self.tray_icon) def on_progressbar_notify_fraction(self, *_args): self.tray_progressbar.set_fraction(self.progressbar.get_fraction()) def on_progressbar_notify_text(self, *_args): self.tray_progressbar.set_text(self.progressbar.get_text()) def update_infofile(self): if self.config.use_infofile is True: try: info_file = open(self.config.infofile_path, 'w', encoding="utf-8") if self.status['state'] in ['play']: info_file.write('Status: ' + 'Playing' + '\n') elif self.status['state'] in ['pause']: info_file.write('Status: ' + 'Paused' + '\n') elif self.status['state'] in ['stop']: info_file.write('Status: ' + 'Stopped' + '\n') if self.songinfo.artist: info_file.write('Title: %s - %s\n' % ( self.songinfo.artist, (self.songinfo.title or ''))) else: # No Artist in streams try: info_file.write('Title: %s\n' % (self.songinfo.title or '')) except: info_file.write('Title: No - ID Tag\n') info_file.write('Album: %s\n' % (self.songinfo.album or 'No Data')) info_file.write('Track: %s\n' % self.songinfo.track) info_file.write('File: %s\n' % (self.songinfo.file or 'No Data')) info_file.write('Time: %s\n' % self.songinfo.time) info_file.write('Volume: %s\n' % (self.status['volume'],)) info_file.write('Repeat: %s\n' % (self.status['repeat'],)) info_file.write('Single: %s\n' % (self.status['single'],)) info_file.write('Random: %s\n' % (self.status['random'],)) info_file.write('Consume: %s\n' % (self.status['consume'],)) info_file.close() except: pass ################# # Gui Callbacks # ################# def on_fullscreen_change(self, _widget=None): if self.fullscreen.on_fullscreen: self.traytips.show() else: self.traytips.hide() self.fullscreen.on_fullscreen_change() def on_delete_event_yes(self, _widget): self.exit_now = True self.on_delete_event(None, None) # This one makes sure the program exits when the window is closed def on_delete_event(self, _widget, _data=None): if not self.exit_now and self.config.minimize_to_systray: if self.tray_icon.is_visible(): self.withdraw_app() return True self.settings_save() self.artwork.cache.save() if self.config.as_enabled: self.scrobbler.save_cache() if self.conn and self.config.stop_on_exit: self.mpd_stop(None) sys.exit() def on_window_configure(self, window, _event): # When withdrawing an app, extra configure events (with wrong coords) # are fired (at least on Openbox). This prevents a user from moving # the window, withdrawing it, then unwithdrawing it and finding it in # an older position if not window.props.visible: return width, height = window.get_size() if self.config.expanded: self.config.w, self.config.h = width, height else: self.config.w = width self.config.x, self.config.y = window.get_position() def on_notebook_resize(self, _widget, _event): if not self.current.resizing_columns: GLib.idle_add(self.header_save_column_widths) def on_expand(self, _action): if not self.config.expanded: self.expander.set_expanded(False) self.on_expander_activate(None) self.expander.set_expanded(True) def on_collapse(self, _action): if self.config.expanded: self.expander.set_expanded(True) self.on_expander_activate(None) self.expander.set_expanded(False) def on_expander_activate(self, _expander): currheight = self.window.get_size()[1] self.config.expanded = False # Note that get_expanded() will return the state of the expander # before this current click window_about_to_be_expanded = not self.expander.get_expanded() if window_about_to_be_expanded: if self.window.get_size()[1] == self.config.h: # For WMs like ion3, the app will not actually resize # when in collapsed mode, so prevent the waiting # of the player to expand from happening: skip_size_check = True else: skip_size_check = False if self.config.show_statusbar: self.statusbar.show() self.notebook.show_all() if self.config.show_statusbar: ui.show(self.statusbar) else: ui.hide(self.statusbar) self.notebook.hide() if not self.status_is_play_or_pause(): if window_about_to_be_expanded: self.cursonglabel2.set_text(_('Click to collapse')) else: self.cursonglabel2.set_text(_('Click to expand')) # Now we wait for the height of the player to increase, so that # we know the list is visible. This is pretty hacky, but works. if window_about_to_be_expanded: if not skip_size_check: while self.window.get_size()[1] == currheight: while Gtk.events_pending(): Gtk.main_iteration() # Notebook is visible, now resize: self.window.resize(self.config.w, self.config.h) else: self.window.resize(self.config.w, 1) if window_about_to_be_expanded: self.config.expanded = True if self.status_is_play_or_pause(): GLib.idle_add(self.current.center_song_in_list) hints = Gdk.Geometry() hints.min_height = -1 hints.max_height = -1 hints.min_width = -1 hints.max_width = -1 self.window.set_geometry_hints(self.window, hints, Gdk.WindowHints.USER_SIZE) # Put focus to the notebook: self.on_notebook_page_change(self.notebook, 0, self.notebook.get_current_page()) # This callback allows the user to seek to a specific portion of the song def on_progressbar_press(self, _widget, event): if event.button == 1: if self.status_is_play_or_pause(): at, length = [int(c) for c in self.status['time'].split(':')] try: pbsize = self.progressbar.get_allocation() if misc.is_lang_rtl(self.window): seektime = int( ((pbsize.width - event.x) / pbsize.width) * length) else: seektime = int((event.x / pbsize.width) * length) self.seek(int(self.status['song']), seektime) except: pass return True def on_progressbar_scroll(self, _widget, event): if self.status_is_play_or_pause(): try: GLib.source_remove(self.seekidle) except: pass self.seekidle = GLib.idle_add(self._seek_when_idle, event.direction) return True def _seek_when_idle(self, direction): at, _length = [int(c) for c in self.status['time'].split(':')] try: if direction == Gdk.ScrollDirection.UP: seektime = max(0, at + 5) elif direction == Gdk.ScrollDirection.DOWN: seektime = min(self.songinfo.time, at - 5) self.seek(int(self.status['song']), seektime) except: pass def on_lyrics_search(self, _event): artist = self.songinfo.artist or '' title = self.songinfo.title or '' if not self.lyrics_search_dialog: self.lyrics_search_dialog = self.builder.get_object( 'lyrics_search_dialog') artist_entry = self.builder.get_object('lyrics_search_artist_entry') artist_entry.set_text(artist) title_entry = self.builder.get_object('lyrics_search_title_entry') title_entry.set_text(title) self.lyrics_search_dialog.show_all() response = self.lyrics_search_dialog.run() if response == Gtk.ResponseType.ACCEPT: # Search for new lyrics: self.info.get_lyrics_start( artist_entry.get_text(), title_entry.get_text(), artist, title, os.path.dirname(self.songinfo.file), force_fetch=True) self.lyrics_search_dialog.hide() def mpd_shuffle(self, _action): if self.conn: if not self.status or self.status['playlistlength'] == '0': return ui.change_cursor(Gdk.Cursor.new(Gdk.CursorType.WATCH)) while Gtk.events_pending(): Gtk.main_iteration() self.mpd.shuffle() def mpd_shuffle_albums(self, _action): """Shuffle by albums. Shuffle songs from the current playlist by their albums, while keeping the related songs together. """ if not self.conn or \ not self.status or \ self.status['playlistlength'] == '0': return albums = collections.defaultdict(lambda: []) # Fetch albums for song in self.mpd.playlistinfo(): if "album" in song: k = song.album else: # We consider a song without album info to be a one song # album and use the title as album name. if 'title' in song: k = song.title else: # If there is not even a title in the song we ignore it, # which which will cause it to end up at the end of the # playlist, during shuffling. continue albums[k].append(song) album_names = list(albums.keys()) random.shuffle(album_names) for album in album_names: for song in sorted(albums[album], key=operator.attrgetter('track'), reverse=True): self.mpd.moveid(song["id"], 0) def on_menu_popup(self, _widget): self.update_menu_visibility() GLib.idle_add(self.mainmenu.popup, None, None, None, None, 3, 0) def on_updatedb(self, _action): if self.conn: if self.library.search_visible(): self.library.on_search_end(None) self.mpd.update('/') # XXX we should pass a list here! self.mpd_update_queued = True def on_updatedb_shortcut(self, _action): # If no songs selected, update view. Otherwise update # selected items. if self.library.not_parent_is_selected(): self.on_updatedb_path(True) else: self.on_updatedb_path(False) def on_updatedb_path(self, selected_only): if self.conn and self.current_tab == self.TAB_LIBRARY: if self.library.search_visible(): self.library.on_search_end(None) filenames = self.library.get_path_child_filenames(True, selected_only) if len(filenames) > 0: self.mpd.update(filenames) self.mpd_update_queued = True def on_image_activate(self, widget, event): self.window.handler_block(self.mainwinhandler) if event.button == 1 and widget == self.info_imagebox and \ self.artwork.have_last(): if not self.config.info_art_enlarged: self.info_imagebox.set_size_request(-1, -1) self.artwork.artwork_set_image_last() self.config.info_art_enlarged = True else: self.info_imagebox.set_size_request(152, -1) self.artwork.artwork_set_image_last() self.config.info_art_enlarged = False # Force a resize of the info labels, if needed: GLib.idle_add(self.on_notebook_resize, self.notebook, None) elif event.button == 1 and widget != self.info_imagebox: if self.config.expanded: if self.current_tab != self.TAB_INFO: self.img_clicked = True self.switch_to_tab_name(self.TAB_INFO) self.img_clicked = False else: self.switch_to_tab_name(self.last_tab) elif event.button == 3: artist = None album = None stream = None path_chooseimage = '/imagemenu/chooseimage_menu/' path_localimage = '/imagemenu/localimage_menu/' path_resetimage = '/imagemenu/resetimage_menu/' if self.status_is_play_or_pause(): self.UIManager.get_widget(path_chooseimage).show() self.UIManager.get_widget(path_localimage).show() artist = self.songinfo.artist album = self.songinfo.album stream = self.songinfo.name if not (artist or album or stream): self.UIManager.get_widget(path_localimage).hide() self.UIManager.get_widget(path_resetimage).hide() self.UIManager.get_widget(path_chooseimage).hide() self.imagemenu.popup(None, None, None, None, event.button, event.time) GLib.timeout_add(50, self.on_image_activate_after) return False def on_image_motion_cb(self, _widget, context, _x, _y, time): Gdk.drag_status(context, Gdk.DragAction.COPY, time) return True def on_image_drop_cb(self, _widget, _context, _x, _y, selection, _info, _time): if not self.status_is_play_or_pause(): return data = selection.get_data().strip().decode('utf-8') for uri in data.rsplit('\n'): uri = uri.rstrip('\r') if not uri: continue extension = os.path.splitext( urllib.parse.urlparse(uri).path)[1][1:] if extension not in img.VALID_EXTENSIONS: self.logger.debug( "Hum, the URI at '%s' doesn't look like an image...", uri) continue destination = artwork.artwork_path(self.songinfo, self.config) self.logger.info("Trying to download '%s' (to '%s') ...", uri, destination) f = Gio.File.new_for_uri(uri) f.load_contents_async( None, self.on_image_drop_load_contents_async_end, destination) def on_image_drop_load_contents_async_end(self, file, result, destination): source = result.get_source_object().get_uri() try: success, contents, etag = file.load_contents_finish(result) except GLib.GError as e: self.logger.warning("Can't retrieve %s: %s", source, e) return misc.create_dir(artwork.COVERS_TEMP_DIR) with tempfile.NamedTemporaryFile(dir=artwork.COVERS_TEMP_DIR, delete=False) as t: t.write(contents) if not img.valid_image(t.name): self.logger.warning("Downloaded '%s', but it's not an image :(", source) misc.remove_file(t.name) return os.rename(t.name, destination) self.artwork.artwork_update(True) def album_return_artist_and_tracks(self): # Includes logic for Various Artists albums to determine # the tracks. datalist = [] album = self.songinfo.album or '' songs, _playtime, _num_songs = \ self.library.library_return_search_items(album=album) for song in songs: year = song.date or '' artist = song.artist or '' path = os.path.dirname(song.file) data = SongRecord(album=album, artist=artist, year=year, path=path) datalist.append(data) if len(datalist) > 0: datalist = misc.remove_list_duplicates(datalist, case=False) datalist = library.list_mark_various_artists_albums(datalist) if len(datalist) > 0: # Multiple albums with same name and year, choose the # right one. If we have a VA album, compare paths. Otherwise, # compare artists. for dataitem in datalist: if dataitem.artist.lower() == \ str(self.songinfo.artist or '').lower() \ or dataitem.artist == library.VARIOUS_ARTISTS \ and dataitem.path == \ os.path.dirname(self.songinfo.file): datalist = [dataitem] break # Find all songs in album: retsongs = [] for song in songs: if (song.album or '').lower() == datalist[0].album.lower() \ and song.date == datalist[0].year \ and (datalist[0].artist == library.VARIOUS_ARTISTS \ or datalist[0].artist.lower() == \ (song.artist or '').lower()): retsongs.append(song) return artist, retsongs else: return None, None def album_return_artist_name(self): # Determine if album_name is a various artists album. if self.album_current_artist[0] == self.songinfo: return artist, _tracks = self.album_return_artist_and_tracks() if artist is not None: self.album_current_artist = [self.songinfo, artist] else: self.album_current_artist = [self.songinfo, ""] def album_reset_artist(self): self.album_current_artist = [None, ""] def on_image_activate_after(self): self.window.handler_unblock(self.mainwinhandler) def update_preview(self, file_chooser, preview): filename = file_chooser.get_preview_filename() pixbuf = None try: pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size(filename, 128, 128) except: pass if pixbuf is None: try: pixbuf = GdkPixbuf.PixbufAnimation.new_from_file(filename) pixbuf = pixbuf.get_static_image() width = pixbuf.get_width() height = pixbuf.get_height() if width > height: pixbuf = pixbuf.scale_simple( 128, int(float(height) / width * 128), GdkPixbuf.InterpType.HYPER) else: pixbuf = pixbuf.scale_simple( int(float(width) / height * 128), 128, GdkPixbuf.InterpType.HYPER) except: pass if pixbuf is None: pixbuf = GdkPixbuf.Pixbuf.new(GdkPixbuf.Colorspace.RGB, 1, 8, 128, 128) pixbuf.fill(0x00000000) preview.set_from_pixbuf(pixbuf) have_preview = True file_chooser.set_preview_widget_active(have_preview) del pixbuf self.call_gc_collect = True def image_local(self, _widget): dialog = self.builder.get_object('local_artwork_dialog') filefilter = Gtk.FileFilter() filefilter.set_name(_("Images")) filefilter.add_pixbuf_formats() dialog.add_filter(filefilter) filefilter = Gtk.FileFilter() filefilter.set_name(_("All files")) filefilter.add_pattern("*") dialog.add_filter(filefilter) preview = self.builder.get_object('local_art_preview_image') dialog.connect("update-preview", self.update_preview, preview) stream = self.songinfo.name album = (self.songinfo.album or "").replace("/", "") artist = self.album_current_artist[1].replace("/", "") songdir = os.path.dirname(self.songinfo.file) currdir = os.path.join(self.config.current_musicdir, songdir) if self.config.art_location != consts.ART_LOCATION_HOMECOVERS: dialog.set_current_folder(currdir) self.local_dest_filename = artwork.artwork_path(self.songinfo, self.config) dialog.show_all() response = dialog.run() if response == Gtk.ResponseType.OK: filename = dialog.get_filenames()[0] # Copy file to covers dir: if self.local_dest_filename != filename: shutil.copyfile(filename, self.local_dest_filename) # And finally, set the image in the interface: self.artwork.artwork_update(True) # Force a resize of the info labels, if needed: GLib.idle_add(self.on_notebook_resize, self.notebook, None) dialog.hide() def imagelist_append(self, elem): self.imagelist.append(elem) def remotefilelist_append(self, elem): self.remotefilelist.append(elem) def _init_choose_dialog(self): self.choose_dialog = self.builder.get_object('artwork_dialog') self.imagelist = self.builder.get_object('artwork_liststore') self.remote_artistentry = self.builder.get_object('artwork_artist_entry') self.remote_albumentry = self.builder.get_object('artwork_album_entry') self.image_widget = self.builder.get_object('artwork_iconview') refresh_button = self.builder.get_object('artwork_update_button') refresh_button.connect('clicked', self.image_remote_refresh, self.image_widget) self.remotefilelist = [] def image_remote(self, _widget): if not self.choose_dialog: self._init_choose_dialog() stream = self.songinfo.name self.remote_dest_filename = artwork.artwork_path(self.songinfo, self.config) album = self.songinfo.album or '' artist = self.album_current_artist[1] self.image_widget.connect('item-activated', self.image_remote_replace_cover, artist.replace("/", ""), album.replace("/", ""), stream) self.choose_dialog.connect('response', self.image_remote_response, self.image_widget, artist, album, stream) self.remote_artistentry.set_text(artist) self.remote_albumentry.set_text(album) self.allow_art_search = True self.chooseimage_visible = True self.image_remote_refresh(None, self.image_widget) self.choose_dialog.show_all() self.choose_dialog.run() def image_remote_refresh(self, _entry, imagewidget): if not self.allow_art_search: return self.allow_art_search = False self.artwork.artwork_stop_update() while self.artwork.artwork_is_downloading_image(): while Gtk.events_pending(): Gtk.main_iteration() self.imagelist.clear() imagewidget.set_text_column(-1) imagewidget.set_model(self.imagelist) imagewidget.set_pixbuf_column(1) imagewidget.grab_focus() ui.change_cursor(Gdk.Cursor.new(Gdk.CursorType.WATCH)) thread = threading.Thread(target=self._image_remote_refresh, args=(imagewidget, None)) thread.name = "ImageRemoteRefresh" thread.daemon = True thread.start() def _image_remote_refresh(self, imagewidget, _ignore): self.artwork.stop_art_update = False # Retrieve all images from cover plugins artist_search = self.remote_artistentry.get_text() album_search = self.remote_albumentry.get_text() if len(artist_search) == 0 and len(album_search) == 0: GLib.idle_add(self.image_remote_no_tag_found, imagewidget) return filename = os.path.join(artwork.COVERS_TEMP_DIR, "<imagenum>.jpg") misc.remove_dir_recursive(os.path.dirname(filename)) misc.create_dir(os.path.dirname(filename)) imgfound = self.artwork.artwork_download_img_to_file(artist_search, album_search, filename, True) ui.change_cursor(None) if self.chooseimage_visible: if not imgfound: GLib.idle_add(self.image_remote_no_covers_found, imagewidget) self.call_gc_collect = True def image_remote_no_tag_found(self, imagewidget): self.image_remote_warning(imagewidget, _("No artist or album name found.")) def image_remote_no_covers_found(self, imagewidget): self.image_remote_warning(imagewidget, _("No cover art found.")) def image_remote_warning(self, imagewidget, msgstr): liststore = Gtk.ListStore(int, str) liststore.append([0, msgstr]) imagewidget.set_pixbuf_column(-1) imagewidget.set_model(liststore) imagewidget.set_text_column(1) ui.change_cursor(None) self.allow_art_search = True def image_remote_response(self, dialog, response_id, imagewidget, artist, album, stream): self.artwork.artwork_stop_update() if response_id == Gtk.ResponseType.ACCEPT: try: self.image_remote_replace_cover( imagewidget, imagewidget.get_selected_items()[0], artist, album, stream) # Force a resize of the info labels, if needed: GLib.idle_add(self.on_notebook_resize, self.notebook, None) except: dialog.hide() else: dialog.hide() ui.change_cursor(None) self.chooseimage_visible = False def image_remote_replace_cover(self, _iconview, path, _artist, _album, _stream): self.artwork.artwork_stop_update() image_num = path.get_indices()[0] if len(self.remotefilelist) > 0: filename = self.remotefilelist[image_num] if os.path.exists(filename): shutil.move(filename, self.remote_dest_filename) # And finally, set the image in the interface: self.artwork.artwork_update(True) # Clean up.. misc.remove_dir_recursive(os.path.dirname(filename)) self.chooseimage_visible = False self.choose_dialog.hide() while self.artwork.artwork_is_downloading_image(): while Gtk.events_pending(): Gtk.main_iteration() def header_save_column_widths(self): if not self.config.withdrawn and self.config.expanded: windowwidth = self.window.get_allocation().width if windowwidth <= 10 or self.current.columns[0].get_width() <= 10: # Make sure we only set self.config.columnwidths if # self.current has its normal allocated width: return notebookwidth = self.notebook.get_allocation().width treewidth = 0 for i, column in enumerate(self.current.columns): colwidth = column.get_width() treewidth += colwidth if i == len(self.current.columns)-1 \ and treewidth <= windowwidth: self.config.columnwidths[i] = min(colwidth, column.get_fixed_width()) else: self.config.columnwidths[i] = colwidth self.current.resizing_columns = False def on_tray_click(self, _widget, event): # Clicking on a system tray icon: # Left button shows/hides window(s) if event.button == 1 and not self.ignore_toggle_signal: # This prevents the user clicking twice in a row quickly # and having the second click not revert to the intial # state self.ignore_toggle_signal = True path_showmenu = '/traymenu/showmenu' prev_state = self.UIManager.get_widget(path_showmenu).get_active() self.UIManager.get_widget(path_showmenu).set_active(not prev_state) # For some reason, self.window.window is not defined if # mpd is not running and sonata is started with # self.config.withdrawn = True window = self.window.get_window() if window and not (window.get_state() & Gdk.WindowState.WITHDRAWN): # Window is not withdrawn and is active (has toplevel focus): self.withdraw_app() else: self.withdraw_app_undo() # This prevents the tooltip from popping up again until the user # leaves and enters the trayicon again # if self.traytips.notif_handler is None and # self.traytips.notif_handler != -1: # self.traytips._remove_timer() GLib.timeout_add(100, self.tooltip_set_ignore_toggle_signal_false) elif event.button == 2: # Middle button will play/pause if self.conn: self.mpd_pp(None) elif event.button == 3: # Right button pops up menu self.traymenu.popup(None, None, None, None, event.button, event.time) return False def on_traytips_press(self, _widget, _event): if self.traytips.get_property('visible'): self.traytips._remove_timer() def withdraw_app_undo(self): desktop = Gdk.get_default_root_window() # convert window coordinates to current workspace so sonata # will always appear on the current workspace with the same # position as it was before (may be on the other workspace) self.config.x %= desktop.get_width() self.config.y %= desktop.get_height() self.window.move(self.config.x, self.config.y) if not self.config.expanded: self.notebook.set_no_show_all(True) self.statusbar.set_no_show_all(True) self.window.show_all() self.notebook.set_no_show_all(False) self.config.withdrawn = False self.UIManager.get_widget('/traymenu/showmenu').set_active(True) self.withdraw_app_undo_present_and_focus() def withdraw_app_undo_present_and_focus(self): # Helps to raise the window (useful against focus stealing prevention) self.window.present() self.window.grab_focus() if self.config.sticky: self.window.stick() if self.config.ontop: self.window.set_keep_above(True) def withdraw_app(self): if self.tray_icon.is_available(): # Save the playlist column widths before withdrawing the app. # Otherwise we will not be able to correctly save the column # widths if the user quits sonata while it is withdrawn. self.header_save_column_widths() self.window.hide() self.config.withdrawn = True self.UIManager.get_widget('/traymenu/showmenu').set_active(False) def on_withdraw_app_toggle(self, _action): if self.ignore_toggle_signal: return self.ignore_toggle_signal = True if self.UIManager.get_widget('/traymenu/showmenu').get_active(): self.withdraw_app_undo() else: self.withdraw_app() GLib.timeout_add(500, self.tooltip_set_ignore_toggle_signal_false) def tooltip_set_ignore_toggle_signal_false(self): self.ignore_toggle_signal = False # Change volume on mousewheel over systray icon: def on_tray_scroll(self, widget, event): direction = event.get_scroll_direction()[1] if self.conn: if direction == Gdk.ScrollDirection.UP: self.on_volume_raise() elif direction == Gdk.ScrollDirection.DOWN: self.on_volume_lower() def switch_to_tab_name(self, tab_name): self.notebook.set_current_page(self.notebook_get_tab_num(self.notebook, tab_name)) def switch_to_tab_num(self, tab_num): vis_tabnum = self.notebook_get_visible_tab_num(self.notebook, tab_num) if vis_tabnum != -1: self.notebook.set_current_page(vis_tabnum) def switch_to_next_tab(self, _action): self.notebook.next_page() def switch_to_prev_tab(self, _action): self.notebook.prev_page() # Volume control def on_volume_lower(self, _action=None): new_volume = int(self.volumebutton.get_value()) - 5 self.volumebutton.set_value(new_volume) def on_volume_raise(self, _action=None): new_volume = int(self.volumebutton.get_value()) + 5 self.volumebutton.set_value(new_volume) def on_volume_change(self, _button, new_volume): self.mpd.setvol(int(new_volume)) def mpd_pp(self, _widget, _key=None): if self.conn and self.status: if self.status['state'] in ('stop', 'pause'): self.mpd.play() elif self.status['state'] == 'play': self.mpd.pause('1') self.iterate_now() def mpd_stop(self, _widget, _key=None): if self.conn: self.mpd.stop() self.iterate_now() def mpd_prev(self, _widget, _key=None): if self.conn: if self.status_is_play_or_pause(): # Try to rewind the song if we are advanced enough... at, length = [int(c) for c in self.status['time'].split(':')] if at >= consts.PREV_TRACK_RESTART: self.seek(int(self.status['song']), 0) return # otherwise, just go to the previous song self.mpd.previous() self.iterate_now() def mpd_next(self, _widget, _key=None): if self.conn: self.mpd.next() self.iterate_now() def on_remove(self, _widget): if self.conn: model = None while Gtk.events_pending(): Gtk.main_iteration() if self.current_tab == self.TAB_CURRENT: self.current.on_remove() elif self.current_tab == self.TAB_PLAYLISTS: treeviewsel = self.playlists_selection model, selected = treeviewsel.get_selected_rows() if ui.show_msg(self.window, ngettext("Delete the selected playlist?", "Delete the selected playlists?", int(len(selected))), ngettext("Delete Playlist", "Delete Playlists", int(len(selected))), 'deletePlaylist', Gtk.ButtonsType.YES_NO) == \ Gtk.ResponseType.YES: iters = [model.get_iter(path) for path in selected] for i in iters: self.mpd.rm(misc.unescape_html( self.playlistsdata.get_value(i, 1))) self.playlists.populate() elif self.current_tab == self.TAB_STREAMS: treeviewsel = self.streams_selection model, selected = treeviewsel.get_selected_rows() if ui.show_msg(self.window, ngettext("Delete the selected stream?", "Delete the selected streams?", int(len(selected))), ngettext("Delete Stream", "Delete Streams", int(len(selected))), 'deleteStreams', Gtk.ButtonsType.YES_NO) == \ Gtk.ResponseType.YES: iters = [model.get_iter(path) for path in selected] for i in iters: stream_removed = False for j in range(len(self.config.stream_names)): if not stream_removed: if self.streamsdata.get_value(i, 1) == \ misc.escape_html( self.config.stream_names[j]): self.config.stream_names.pop(j) self.config.stream_uris.pop(j) stream_removed = True self.streams.populate() self.iterate_now() # Attempt to retain selection in the vicinity.. if model and len(model) > 0: try: # Use top row in selection... selrow = 999999 for row in selected: if row[0] < selrow: selrow = row[0] if selrow >= len(model): selrow = len(model)-1 treeviewsel.select_path(selrow) except: pass def mpd_clear(self, _widget): if self.conn: self.mpd.clear() self.iterate_now() def on_repeat_playlist_clicked(self, widget): if self.conn: is_active = widget.get_active() self.mpd.repeat(int(is_active or self.repeatsongmenu.get_active())) self.mpd.single(1 - is_active) def on_repeat_song_clicked(self, widget): if self.conn: is_active = int(widget.get_active()) is_repeat_playlist_active = int(self.repeatplaylistmenu.get_active()) self.mpd.single(is_active) self.mpd.repeat(int(is_active or is_repeat_playlist_active)) def on_random_clicked(self, widget): if self.conn: self.mpd.random(int(widget.get_active())) def on_consume_clicked(self, widget): if self.conn: self.mpd.consume(int(widget.get_active())) def setup_prefs_callbacks(self): extras = preferences.Extras_cbs extras.popuptimes = self.popuptimes extras.notif_toggled = self.prefs_notif_toggled extras.crossfade_toggled = self.prefs_crossfade_toggled extras.crossfade_changed = self.prefs_crossfade_changed display = preferences.Display_cbs display.stylized_toggled = self.prefs_stylized_toggled display.art_toggled = self.prefs_art_toggled display.playback_toggled = self.prefs_playback_toggled display.progress_toggled = self.prefs_progress_toggled display.statusbar_toggled = self.prefs_statusbar_toggled display.lyrics_toggled = self.prefs_lyrics_toggled # TODO: the tray icon object has not been build yet, so we don't know # if the tray icon will be available at this time. # We should find a way to update this when the tray icon will be # initialized. display.trayicon_available = True behavior = preferences.Behavior_cbs behavior.trayicon_toggled = self.prefs_trayicon_toggled behavior.sticky_toggled = self.prefs_sticky_toggled behavior.ontop_toggled = self.prefs_ontop_toggled behavior.decorated_toggled = self.prefs_decorated_toggled behavior.infofile_changed = self.prefs_infofile_changed format = preferences.Format_cbs format.currentoptions_changed = self.prefs_currentoptions_changed format.libraryoptions_changed = self.prefs_libraryoptions_changed format.titleoptions_changed = self.prefs_titleoptions_changed format.currsongoptions1_changed = self.prefs_currsongoptions1_changed format.currsongoptions2_changed = self.prefs_currsongoptions2_changed def on_prefs(self, _widget): preferences.Behavior_cbs.trayicon_in_use = self.tray_icon.is_visible() self.preferences.on_prefs_real() def prefs_currentoptions_changed(self, entry, _event): if self.config.currentformat != entry.get_text(): self.config.currentformat = entry.get_text() self.current.initialize_columns() def prefs_libraryoptions_changed(self, entry, _event): if self.config.libraryformat != entry.get_text(): self.config.libraryformat = entry.get_text() self.library.library_browse(root=self.config.wd) def prefs_titleoptions_changed(self, entry, _event): if self.config.titleformat != entry.get_text(): self.config.titleformat = entry.get_text() self.update_wintitle() def prefs_currsongoptions1_changed(self, entry, _event): if self.config.currsongformat1 != entry.get_text(): self.config.currsongformat1 = entry.get_text() self.update_cursong() def prefs_currsongoptions2_changed(self, entry, _event): if self.config.currsongformat2 != entry.get_text(): self.config.currsongformat2 = entry.get_text() self.update_cursong() def prefs_ontop_toggled(self, button): self.config.ontop = button.get_active() self.window.set_keep_above(self.config.ontop) def prefs_sticky_toggled(self, button): self.config.sticky = button.get_active() if self.config.sticky: self.window.stick() else: self.window.unstick() def prefs_decorated_toggled(self, button, prefs_window): self.config.decorated = not button.get_active() if self.config.decorated != self.window.get_decorated(): self.withdraw_app() self.window.set_decorated(self.config.decorated) self.withdraw_app_undo() prefs_window.present() def prefs_infofile_changed(self, entry, _event): if self.config.infofile_path != entry.get_text(): self.config.infofile_path = os.path.expanduser(entry.get_text()) if self.config.use_infofile: self.update_infofile() def prefs_crossfade_changed(self, crossfade_spin): crossfade_value = crossfade_spin.get_value_as_int() self.mpd.crossfade(crossfade_value) def prefs_crossfade_toggled(self, button, crossfade_spin): crossfade_value = crossfade_spin.get_value_as_int() if button.get_active(): self.mpd.crossfade(crossfade_value) else: self.mpd.crossfade(0) def prefs_playback_toggled(self, button): self.config.show_playback = button.get_active() func = 'show' if self.config.show_playback else 'hide' for widget in [self.prevbutton, self.ppbutton, self.stopbutton, self.nextbutton, self.volumebutton]: getattr(ui, func)(widget) def prefs_progress_toggled(self, button): self.config.show_progress = button.get_active() func = ui.show if self.config.show_progress else ui.hide for widget in [self.progressbox, self.tray_progressbar]: func(widget) # FIXME move into prefs or elsewhere? def prefs_art_toggled(self, button, art_prefs): button_active = button.get_active() art_prefs.set_sensitive(button_active) #art_hbox2.set_sensitive(button_active) #art_stylized.set_sensitive(button_active) if button_active: self.traytips.set_size_request(self.notification_width, -1) self.artwork.artwork_set_default_icon() for widget in [self.imageeventbox, self.info_imagebox, self.tray_album_image]: widget.set_no_show_all(False) if widget is self.tray_album_image: if self.status_is_play_or_pause(): widget.show_all() else: widget.show_all() self.config.show_covers = True self.update_cursong() self.artwork.artwork_update() else: self.traytips.set_size_request(self.notification_width-100, -1) for widget in [self.imageeventbox, self.info_imagebox, self.tray_album_image]: widget.hide() self.config.show_covers = False self.update_cursong() # Force a resize of the info labels, if needed: GLib.idle_add(self.on_notebook_resize, self.notebook, None) def prefs_stylized_toggled(self, button): self.config.covers_type = button.get_active() self.library.library_browse(root=self.config.wd) self.artwork.artwork_update(True) def prefs_lyrics_toggled(self, button, lyrics_hbox): self.config.show_lyrics = button.get_active() lyrics_hbox.set_sensitive(self.config.show_lyrics) self.info.show_lyrics_updated() if self.config.show_lyrics: self.info_update(True) def prefs_statusbar_toggled(self, button): self.config.show_statusbar = button.get_active() if self.config.show_statusbar: self.statusbar.set_no_show_all(False) if self.config.expanded: self.statusbar.show_all() else: ui.hide(self.statusbar) self.update_statusbar() def prefs_notif_toggled(self, button, notifhbox): self.config.show_notification = button.get_active() notifhbox.set_sensitive(self.config.show_notification) if self.config.show_notification: self.on_currsong_notify() else: try: GLib.source_remove(self.traytips.notif_handler) except: pass self.traytips.hide() def prefs_trayicon_toggled(self, button, minimize): # Note that we update the sensitivity of the minimize # CheckButton to reflect if the trayicon is visible. if button.get_active(): self.config.show_trayicon = True self.tray_icon.show() minimize.set_sensitive(True) else: self.config.show_trayicon = False minimize.set_sensitive(False) self.tray_icon.hide() def seek(self, song, seektime): self.mpd.seek(song, seektime) self.iterate_now() def on_link_click(self, linktype): if linktype in ['artist', 'album']: query = getattr(self.songinfo, linktype) or '' try: wikipedia_locale = locale.getdefaultlocale()[0].split('_')[0] except Exception as e: self.logger.debug("Can't find locale for Wikipedia: %s", e) wikipedia_locale = 'en' url = "http://{locale}.wikipedia.org/wiki/Special:Search/{query}"\ .format(locale=wikipedia_locale, query=urllib.parse.quote(query)) browser_loaded = misc.browser_load( url, self.config.url_browser, self.window) if not browser_loaded: ui.show_msg(self.window, _('Unable to launch a suitable browser.'), _('Launch Browser'), 'browserLoadError', Gtk.ButtonsType.CLOSE) elif linktype == 'edit': if self.songinfo: self.on_tags_edit(None) elif linktype == 'search': self.on_lyrics_search(None) def on_tab_click(self, _widget, event): if event.button == 3: self.notebookmenu.popup(None, None, None, None, event.button, event.time) return True def notebook_get_tab_num(self, notebook, tabname): for tab in range(notebook.get_n_pages()): if self.notebook_get_tab_text(self.notebook, tab) == tabname: return tab def notebook_tab_is_visible(self, notebook, tabname): tab = self.notebook.get_children()[self.notebook_get_tab_num(notebook, tabname)] return tab.get_property('visible') def notebook_get_visible_tab_num(self, notebook, tab_num): # Get actual tab number for visible tab_num. If there is not # a visible tab for tab_num, return -1.\ curr_tab = -1 for tab in range(notebook.get_n_pages()): if notebook.get_children()[tab].get_property('visible'): curr_tab += 1 if curr_tab == tab_num: return tab return -1 def notebook_get_tab_text(self, notebook, tab_num): tab = notebook.get_children()[tab_num] # FIXME when new UI is done, the top branch expression wins if notebook.get_tab_label(tab).get_children and \ len(notebook.get_tab_label(tab).get_children()) == 2: child = notebook.get_tab_label(tab).get_children()[1] else: child = notebook.get_tab_label(tab).get_child().get_children()[1] return child.get_text() def on_notebook_page_change(self, _notebook, _page, page_num): self.current_tab = self.notebook_get_tab_text(self.notebook, page_num) to_focus = self.tabname2focus.get(self.current_tab, None) if to_focus: GLib.idle_add(to_focus.grab_focus) GLib.idle_add(self.update_menu_visibility) if not self.img_clicked: self.last_tab = self.current_tab def on_window_click(self, _widget, event): if event.button == 3: self.menu_popup(self.window, event) def menu_popup(self, widget, event): if widget == self.window: # Prevent the popup from statusbar (if present) height = event.get_coords()[1] if height > self.notebook.get_allocation().height: return if event.button == 3: self.update_menu_visibility(True) GLib.idle_add(self.mainmenu.popup, None, None, None, None, event.button, event.time) def on_tab_toggle(self, toggleAction): name = toggleAction.get_name() label = toggleAction.get_label() if not toggleAction.get_active(): # Make sure we aren't hiding the last visible tab: num_tabs_vis = 0 for tab in self.notebook.get_children(): if tab.get_property('visible'): num_tabs_vis += 1 if num_tabs_vis == 1: # Keep menu item checking and exit.. toggleAction.set_active(True) return # Store value: if label == self.TAB_CURRENT: self.config.current_tab_visible = toggleAction.get_active() elif label == self.TAB_LIBRARY: self.config.library_tab_visible = toggleAction.get_active() elif label == self.TAB_PLAYLISTS: self.config.playlists_tab_visible = toggleAction.get_active() elif label == self.TAB_STREAMS: self.config.streams_tab_visible = toggleAction.get_active() elif label == self.TAB_INFO: self.config.info_tab_visible = toggleAction.get_active() # Hide/show: tabnum = self.notebook_get_tab_num(self.notebook, self.tabid2name[name]) if toggleAction.get_active(): ui.show(self.notebook.get_children()[tabnum]) else: ui.hide(self.notebook.get_children()[tabnum]) def on_library_search_shortcut(self, _event): # Ensure library tab is visible if not self.notebook_tab_is_visible(self.notebook, self.TAB_LIBRARY): return if self.current_tab != self.TAB_LIBRARY: self.switch_to_tab_name(self.TAB_LIBRARY) if self.library.search_visible(): self.library.on_search_end(None) self.library.libsearchfilter_set_focus() def update_menu_visibility(self, show_songinfo_only=False): if show_songinfo_only or not self.config.expanded: for menu in ['add', 'replace', 'playafter', 'rename', 'rm', 'pl', \ 'remove', 'clear', 'update', 'new', 'edit', 'sort', 'tag']: self.UIManager.get_widget('/mainmenu/' + menu + 'menu/').hide() return elif self.current_tab == self.TAB_CURRENT: # XXX this should move to the current.py module if not self.current.is_empty(): if self.current_selection.count_selected_rows() > 0: for menu in ['remove', 'tag']: self.UIManager.get_widget('/mainmenu/%smenu/' % \ (menu,)).show() else: for menu in ['remove', 'tag']: self.UIManager.get_widget('/mainmenu/%smenu/' % \ (menu,)).hide() if not self.current.filterbox_visible: for menu in ['clear', 'pl', 'sort']: self.UIManager.get_widget('/mainmenu/%smenu/' % \ (menu,)).show() else: for menu in ['clear', 'pl', 'sort']: self.UIManager.get_widget('/mainmenu/%smenu/' % \ (menu,)).hide() else: for menu in ['clear', 'pl', 'sort', 'remove', 'tag']: self.UIManager.get_widget('/mainmenu/%smenu/' % \ (menu,)).hide() for menu in ['add', 'replace', 'playafter', 'rename', 'rm', \ 'update', 'new', 'edit']: self.UIManager.get_widget('/mainmenu/' + menu + 'menu/').hide() elif self.current_tab == self.TAB_LIBRARY: if len(self.librarydata) > 0: path_update = '/mainmenu/updatemenu/updateselectedmenu/' if self.library_selection.count_selected_rows() > 0: for menu in ['add', 'replace', 'playafter', 'tag', 'pl']: self.UIManager.get_widget('/mainmenu/%smenu/' % \ (menu,)).show() self.UIManager.get_widget(path_update).show() else: for menu in ['add', 'replace', 'playafter', 'tag', 'pl']: self.UIManager.get_widget('/mainmenu/%smenu/' % \ (menu,)).hide() self.UIManager.get_widget(path_update).hide() else: for menu in ['add', 'replace', 'playafter', 'tag', 'update', 'pl']: self.UIManager.get_widget('/mainmenu/%smenu/' \ % (menu,)).hide() for menu in ['remove', 'clear', 'rename', 'rm', 'new', 'edit', 'sort']: self.UIManager.get_widget('/mainmenu/' + menu + 'menu/').hide() if self.library.search_visible(): self.UIManager.get_widget('/mainmenu/updatemenu/').hide() else: self.UIManager.get_widget('/mainmenu/updatemenu/').show() path_update_full = '/mainmenu/updatemenu/updatefullmenu/' self.UIManager.get_widget(path_update_full).show() elif self.current_tab == self.TAB_PLAYLISTS: if self.playlists_selection.count_selected_rows() > 0: for menu in ['add', 'replace', 'playafter', 'rm']: self.UIManager.get_widget('/mainmenu/%smenu/' % \ (menu,)).show() if self.playlists_selection.count_selected_rows() == 1: self.UIManager.get_widget('/mainmenu/renamemenu/').show() else: self.UIManager.get_widget('/mainmenu/renamemenu/').hide() else: for menu in ['add', 'replace', 'playafter', 'rm', 'rename']: self.UIManager.get_widget('/mainmenu/%smenu/' % \ (menu,)).hide() for menu in ['remove', 'clear', 'pl', 'update', 'new', 'edit', 'sort', 'tag']: self.UIManager.get_widget('/mainmenu/' + menu + 'menu/').hide() elif self.current_tab == self.TAB_STREAMS: self.UIManager.get_widget('/mainmenu/newmenu/').show() if self.streams_selection.count_selected_rows() > 0: if self.streams_selection.count_selected_rows() == 1: self.UIManager.get_widget('/mainmenu/editmenu/').show() else: self.UIManager.get_widget('/mainmenu/editmenu/').hide() for menu in ['add', 'replace', 'playafter', 'rm']: self.UIManager.get_widget('/mainmenu/%smenu/' % \ (menu,)).show() else: for menu in ['add', 'replace', 'playafter', 'rm']: self.UIManager.get_widget('/mainmenu/%smenu/' % \ (menu,)).hide() for menu in ['rename', 'remove', 'clear', 'pl', 'update', 'sort', 'tag']: self.UIManager.get_widget('/mainmenu/' + menu + 'menu/').hide() def on_tags_edit(self, _widget): ui.change_cursor(Gdk.Cursor.new(Gdk.CursorType.WATCH)) while Gtk.events_pending(): Gtk.main_iteration() files = [] temp_mpdpaths = [] if self.current_tab == self.TAB_INFO: if self.status_is_play_or_pause(): # Use current file in songinfo: mpdpath = self.songinfo.file fullpath = os.path.join( self.config.current_musicdir, mpdpath) files.append(fullpath) temp_mpdpaths.append(mpdpath) elif self.current_tab == self.TAB_LIBRARY: # Populates files array with selected library items: items = self.library.get_path_child_filenames(False) for item in items: files.append(os.path.join(self.config.current_musicdir, item)) temp_mpdpaths.append(item) elif self.current_tab == self.TAB_CURRENT: # Populates files array with selected current playlist items: temp_mpdpaths = self.current.get_selected_filenames(False) files = self.current.get_selected_filenames(True) tageditor = tagedit.TagEditor(self.window, self.tags_mpd_update, self.tags_set_use_mpdpath) tageditor.set_use_mpdpaths(self.config.tags_use_mpdpath) tageditor.on_tags_edit(files, temp_mpdpaths, self.config.current_musicdir) def tags_set_use_mpdpath(self, use_mpdpath): self.config.tags_use_mpdpath = use_mpdpath def tags_mpd_update(self, tag_paths): self.mpd.update(list(tag_paths)) self.mpd_update_queued = True def on_about(self, _action): about_dialog = about.About(self.window, self.config, version) stats = None if self.conn: # Extract some MPD stats: mpdstats = self.mpd.stats() stats = {'artists': mpdstats['artists'], 'albums': mpdstats['albums'], 'songs': mpdstats['songs'], 'db_playtime': mpdstats['db_playtime'], } about_dialog.about_load(stats) def systemtray_initialize(self): # Make system tray 'icon' to sit in the system tray self.tray_icon.initialize( self.on_tray_click, self.on_tray_scroll, ) if self.config.show_trayicon: self.tray_icon.show() else: self.tray_icon.hide() self.tray_icon.update_icon('sonata') def dbus_show(self): self.window.hide() self.withdraw_app_undo() def dbus_toggle(self): if self.window.get_property('visible'): self.withdraw_app() else: self.withdraw_app_undo() def dbus_popup(self): self.on_currsong_notify(force_popup=True) def dbus_fullscreen(self): self.on_fullscreen_change() class FullscreenApp: def __init__(self, config, get_fullscreen_info): self.config = config self.get_fullscreen_info = get_fullscreen_info self.currentpb = None builder = ui.builder('sonata') self.window = builder.get_object("fullscreen_window") self.window.fullscreen() color = Gdk.RGBA() color.parse("black") self.window.override_background_color(Gtk.StateFlags.NORMAL, color) self.window.add_events(Gdk.EventMask.BUTTON_PRESS_MASK) self.window.connect("button-press-event", self.on_close, False) self.window.connect("key-press-event", self.on_close, True) self.image = builder.get_object("fullscreen_image") self.album_label_1 = builder.get_object("fullscreen_label_1") self.album_label_2 = builder.get_object("fullscreen_label_2") self.reset() if not config.show_covers: self.image.hide() def add_accel_group(self, group): self.window.add_accel_group(group) @property def on_fullscreen(self): return self.window.get_property('visible') def on_fullscreen_change(self, _widget=None): if self.on_fullscreen: self.window.hide() else: self.set_image(force_update=True) self.window.show_all() # setting up invisible cursor window = self.window.get_window() window.set_cursor(Gdk.Cursor.new(Gdk.CursorType.BLANK_CURSOR)) def on_close(self, _widget, event, key_press): if key_press: shortcut = Gtk.accelerator_name(event.keyval, event.get_state()) shortcut = shortcut.replace("<Mod2>", "") if shortcut != 'Escape': return self.window.hide() def on_artwork_changed(self, artwork_obj, pixbuf): self.currentpb = pixbuf self.set_image() def on_text_changed(self, line1, line2): self.set_text() def reset(self, *args, **kwargs): self.image.set_from_icon_set(ui.icon('sonata-cd'), -1) self.currentpb = None def set_image(self, force_update=False): if self.image.get_property('visible') or force_update: if self.currentpb is None: self.reset() else: # Artwork for fullscreen cover mode (pix3, w, h) = img.get_pixbuf_of_size( self.currentpb, consts.FULLSCREEN_COVER_SIZE) pix3 = img.do_style_cover(self.config, pix3, w, h) pix3 = img.pixbuf_pad(pix3, consts.FULLSCREEN_COVER_SIZE, consts.FULLSCREEN_COVER_SIZE) self.image.set_from_pixbuf(pix3) del pix3 self.set_text() def set_text(self): is_play_or_pause, line1, line2 = self.get_fullscreen_info() self.album_label_1.set_text(misc.escape_html(line1)) self.album_label_2.set_text(misc.escape_html(line2)) if is_play_or_pause: self.album_label_1.show() self.album_label_2.show() else: self.album_label_1.hide() self.album_label_2.hide() �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/sonata/misc.py�������������������������������������������������������������������������0000664�0000000�0000000�00000014615�13771420143�0015607�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> # Copyright 2009-2014 Jonathan Ballet <jon@multani.info> # # This file is part of Sonata. # # Sonata is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Sonata is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Sonata. If not, see <http://www.gnu.org/licenses/>. import os import subprocess import re import locale import logging import sys from gi.repository import GLib logger = logging.getLogger(__name__) def convert_time(seconds): """ Converts time in seconds to 'hh:mm:ss' format with leading zeros as appropriate and optional hours """ hours, minutes, seconds = convert_time_raw(seconds) if hours == 0: return "%02d:%02d" %(minutes, seconds) return "%02d:%02d:%02d" %(hours, minutes, seconds) def convert_time_raw(seconds): hours = seconds // 3600 seconds -= 3600 * hours minutes = seconds // 60 seconds -= 60 * minutes return hours, minutes, seconds def escape_html(s): if not s: # None or "" return "" # & needs to be escaped first, before more are introduced: s = s.replace('&', '&') s = s.replace('<', '<') s = s.replace('>', '>') s = s.replace('"', '"') return s def unescape_html(s): s = s.replace('<', '<') s = s.replace('>', '>') s = s.replace('"', '"') s = s.replace(' ', ' ') # & needs to be unescaped last, so it can't get unescaped twice s = s.replace('&', '&') # FIXME why did we have this too? s = s.replace('amp;', '&') return s def wiki_to_html(s): # XXX Should we depend on a library to do this or get # html from the services? s = re.sub(r"'''''(.*?)'''''", r"<i><b>\1</b></i>", s) s = re.sub(r"'''(.*?)'''", r"<b>\1</b>", s) s = re.sub(r"''(.*?)''", r"<i>\1</i>", s) return s def strip_all_slashes(s): if not s: # None or "" return "" s = s.replace("\\", "") s = s.replace("/", "") s = s.replace("\"", "") return s def _rmgeneric(path, __func__): try: __func__(path) except OSError: pass def link_markup(s, enclose_in_parentheses, small, linkcolor): if enclose_in_parentheses: s = "(%s)" % s if small: s = "<small>%s</small>" % s if linkcolor: color = linkcolor else: color = "blue" #no theme color, default to blue.. s = "<span color='%s'>%s</span>" % (color, s) return s def iunique(iterable, key=id): seen = set() for i in iterable: if key(i) not in seen: seen.add(key(i)) yield i def remove_list_duplicates(inputlist, case=True): # Note that we can't use list(set(inputlist)) # because we want the inputlist order preserved. if case: key = lambda x: x else: # repr() allows inputlist to be a list of tuples # FIXME: Doesn't correctly compare uppercase and # lowercase unicode key = lambda x: repr(x).lower() return list(iunique(inputlist, key)) the_re = re.compile('^the ') def lower_no_the(s): s = the_re.sub('', s.lower()) s = str(s) return s def create_dir(dirname): if not os.path.exists(os.path.expanduser(dirname)): try: os.makedirs(os.path.expanduser(dirname)) except (IOError, OSError): pass def remove_file(filename): if os.path.exists(filename): try: os.remove(filename) except: pass def remove_dir_recursive(path): if not os.path.isdir(path): return files = os.listdir(path) for x in files: fullpath = os.path.join(path, x) if os.path.isfile(fullpath): f = os.remove _rmgeneric(fullpath, f) elif os.path.isdir(fullpath): remove_dir_recursive(fullpath) f = os.rmdir _rmgeneric(fullpath, f) def file_exists_insensitive(filename): # Returns an updated filename that exists on the # user's filesystem; checks all possible combinations # of case. if os.path.exists(filename): return filename regexp = re.compile(re.escape(filename), re.IGNORECASE) path = os.path.dirname(filename) try: files = os.listdir(path) except OSError: return filename for x in files: fullpath = os.path.join(path, x) if regexp.match(fullpath): return fullpath return filename def browser_load(docslink, browser, window): logger.debug("Loading URL: %s", docslink) if browser and browser.strip(): browsers = [browser.strip()] else: browsers = ["xdg-open", # default, this respect the used DE "x-www-browser", # default on Debian-based systems "gnome-open", "kde-open", "exo-open", "firefox", "opera", "chromium"] for browser in browsers: try: subprocess.Popen(browser.split() + [docslink]) break # done except OSError: pass # try next else: # none worked return False return True def is_lang_rtl(window): from gi.repository import Pango # Check if a RTL (right-to-left) language: return window.get_pango_context().get_base_dir() == Pango.Direction.RTL def sanitize_musicdir(mdir): return os.path.expanduser(mdir) if mdir else '' def mpd_env_vars(): host = None port = None password = None if 'MPD_HOST' in os.environ: if '@' in os.environ['MPD_HOST']: password, host = os.environ['MPD_HOST'].split('@') else: host = os.environ['MPD_HOST'] if 'MPD_PORT' in os.environ: port = int(os.environ['MPD_PORT']) return (host, port, password) def get_files_recursively(dirname): filenames = [] os.walk(dirname, _get_files_recursively, filenames) return filenames def _get_files_recursively(filenames, dirname, files): filenames.extend([os.path.join(dirname, f) for f in files]) �������������������������������������������������������������������������������������������������������������������sonata-1.7.0/sonata/mpdhelper.py��������������������������������������������������������������������0000664�0000000�0000000�00000014035�13771420143�0016630�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> # Copyright 2009-2014 Jonathan Ballet <jon@multani.info> # # This file is part of Sonata. # # Sonata is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Sonata is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Sonata. If not, see <http://www.gnu.org/licenses/>. import functools import logging import operator import os import socket from gi.repository import GObject import mpd from sonata.misc import remove_list_duplicates class MPDClient: def __init__(self): self._client = mpd.MPDClient() self.logger = logging.getLogger(__name__) def __getattr__(self, attr): """ Wraps all calls from mpd client into a proper function, which catches all MPDClient related exceptions and log them. """ cmd = getattr(self._client, attr) # save result, so function have to be constructed only once wrapped_cmd = functools.partial(self._call, cmd, attr) setattr(self, attr, wrapped_cmd) return wrapped_cmd def _call(self, cmd, cmd_name, *args): try: retval = cmd(*args) except (socket.error, mpd.MPDError) as e: if cmd_name in ['lsinfo', 'list']: # return sane values, which could be used afterwards return [] elif cmd_name == 'status': return {} else: self.logger.error("%s", e) return None if cmd_name in ['songinfo', 'currentsong']: return MPDSong(retval) elif cmd_name in ['plchanges', 'search', 'playlistinfo']: return [MPDSong(s) for s in retval] elif cmd_name in ['count']: return MPDCount(retval) else: return retval @property def version(self): return tuple(int(part) for part in self._client.mpd_version.split(".")) def update(self, paths): if mpd_is_updating(self.status()): return # Updating paths seems to be faster than updating files for # some reason: dirs = [] for path in paths: dirs.append(os.path.dirname(path)) dirs = remove_list_duplicates(dirs, True) self._client.command_list_ok_begin() for directory in dirs: self._client.update(directory) self._client.command_list_end() class MPDCount: """Represent the result of the 'count' MPD command""" __slots__ = ['playtime', 'songs'] def __init__(self, m): self.playtime = int(m['playtime']) self.songs = int(m['songs']) # Inherits from GObject for to be stored in Gtk's ListStore class MPDSong(GObject.GObject): """Provide information about a song in a convenient format""" def __init__(self, mapping): self._mapping = {} for key, value in mapping.items(): # Some attributes may be present several times, which is translated # into a list of values by python-mpd. We keep only the first one, # since Sonata doesn't really support multi-valued attributes at the # moment. if isinstance(value, list): value = value[0] self._mapping[key] = value super().__init__() def __eq__(self, other): return isinstance(other, self.__class__) and \ self._mapping == other._mapping def __ne__(self, other): return not (self == other) def __contains__(self, key): return key in self._mapping def __getitem__(self, key): if key not in self: raise KeyError(key) return self.get(key) def get(self, key, alt=None): if key in self._mapping and hasattr(self, key): return getattr(self, key) else: return self._mapping.get(key, alt) def __getattr__(self, attr): # Get the attribute's value directly into the internal mapping. # This function is not called if the current object has a "real" # attribute set. return self._mapping.get(attr) def values(self): return self._mapping.values() @property def id(self): return int(self._mapping.get('id', 0)) @property def track(self): return cleanup_numeric(self._mapping.get('track', '0')) @property def pos(self): v = self._mapping.get('pos', '0') return int(v) if v.isdigit() else 0 @property def time(self): return int(self._mapping.get('time', 0)) @property def disc(self): return cleanup_numeric(self._mapping.get('disc', 0)) @property def file(self): return self._mapping.get('file', '') # XXX should be always here? def cleanup_numeric(value): """Return a integer value from some not-so-integer values For example, a track number can have the value ``4/10`` (the fourth track of on a 10 songs album), so we want in this case to get the value ``4``: >>> cleanup_numeric('4/10') 4 or: >>> cleanup_numeric('5,12') 5 Of course, a simple value is correctly retrieved: >>> cleanup_numeric('42') 42 All the other cases basically return 0: >>> cleanup_numeric('/') 0 >>> cleanup_numeric(',') 0 >>> cleanup_numeric('') 0 """ # track and disc can be oddly formatted (eg, '4/10') value = str(value).replace(',', ' ').replace('/', ' ').strip() if value: value = value.split()[0] return int(value) if value.isdigit() else 0 # XXX to be move when we can handle status change in the main interface def mpd_is_updating(status): return status and status.get('updating_db', 0) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/sonata/pixmaps/������������������������������������������������������������������������0000775�0000000�0000000�00000000000�13771420143�0015754�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/sonata/pixmaps/sonata-album.png��������������������������������������������������������0000664�0000000�0000000�00000002361�13771420143�0021047�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sRGB����bKGD������ pHYs�� �� ����tIME "\z���tEXtComment�Created with GIMPW��LIDATXýMlTUt:TX["`ԏ5n\(Ĩ$~ .4n\h 7nH4D(1m)) L˼. Nۙ)gs9Xv8[^ RQ KB@) 4Q16-}8sx`pIB(gHc=[__Ip�Cu׾9~a ͮNi͹g[x*)kw@>cN拣3řtzuE]5 <\q야OZ/n*;V#jغ& twT2d5ӿ#,(b鱶, syƒYۂgd tp�-A5+ P%[#L�H4p�/tw_-G:pG#<01x?[ܻnsU+A(Y i`H:Z,cb *l`cC vV-xNSX߅lV laWG\V_[grf"r%lorƺ)n.rz]`guL&0kk s159n FkŠ ߧ\,B`BHU=|O)z׮5F, p˹V^ Ԓ_]͞Nzڛև4# ^э7>Wd,X4ۃz# toA)zӅjEGQ7ɻo+/L.cߎRH B1ʤB2W$]-miHe-<;9zxZ=7ds@^_șiзeH4S j);wLƵ_N5{KHYVYIoGH]Z80D2 ώI_3.{?*R7ekŬ4)qJ#khaB ^1P#~x�L'J&Ἦ]􊗭ϟhk�w77^7:88Sl;s^>]ds 3C5-_=ӵA<tDB7.G_wl3VWxn{Cl_cԊ-=q����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/sonata/pixmaps/sonata-artist.png�������������������������������������������������������0000664�0000000�0000000�00000006653�13771420143�0021265�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���0���0���W���bKGD������tIME F b�� MIDATh{}?̝s{]zzm1RR`Tj"JPF4QDg(U[JiTjBIRJ^c^>>uc>6 ?ȣs{5~'8|S.NdO+ _# Ua5FǑa))^3=O]m=<zOi!y1Z+LOMjD)M%4[-5ݕ~dͿ^?UsˏesFN{%ldJ(ZP)a Dz+ʯw;͏~sV* Հ')\\őŨ4!Fclw~tVɟ÷U?zj)b@ \A<  i<@Jj7+|hZ'0W@^ɏJ6j##Ց2P"RHX\ܡG\d&,*Z++۶NM6:K+P,qI'hpR#!E7iԥ1^tz/`#M`-4>t<r/&[Ax �) XSYL:Wg)T .ayWRp2`x/y2IRX$ �Bfq0"`@0 �qbGS{KBQb9ͳJk!G>?^)R"2AR)4%M32PZt0,mҘ-UFX`TyۮkiWW{|WIE< V"NSD(t$=ˎ1͇(=~ 'EuHNi"fvRr~�\I^7;}c9B x8Ki$ Q }SjbM,nBbMd1q 7nu˜:Rq<�}lqQ zADEk˾\.QjĨ>+|׋c8AY %[D8>BQ),R^N{q[r ch7c%ESl"B@z ]tԧ|$}U�T$? n$i&%V&`L2+"<?D>w})-/WwN-u^{l-`q\0֤X1-cV%XU`5jk^Y&.ew;˵Z'"+fdo^abJ^_D z}9=䉪<>f Fa>6cU, ͻ<씨rVfau582>;Ƒ m t>ZJV:m!V#1*¤=LêVB4q1g3?WkJZa~M@±@P~Ź.0l05Bay`A!yIHDwYmE:ރ{v9pc4R. |B%%5ŪXTaiʎwC<pՠS08Fklߺ>|ڽ̡T`�C8.M 4Ksm2mhLZA ;7n^sD%u4V�.B<JZg5`-XkРR <_PzR|蝜8qm%nycLI:UcggOdo;,_[Kkk`0v_"Ϡ0Ŗ +U\΄DFx?/n['Tp{kO:W[Kaэր gk0~ų2O&_=2AXMT$Ksn->ǏvHʑSA\b]ΗLN"NYS Rg޽7QG8aq-Xe)zZ4Os8xJ~vޞ쎱B|z}?/zf3@iǬ8TGkWc/ clfFcY+ z[ko0q�~^wL̒jvJ*L[9BOl؜nvݸX2#FIk ak_Vغm3j ;JW)3ls3.. [!;K}nL/ؽkkE<q B*8J`9GvSR{6҅ͫ=zeRMqi49(UE-))ʩ[Pǎq2KSG:MN>o*V-`-֚ CY ,7WÐ0 9($I!5,6Z?@ǎ?Z^hwΝ{LOclt/!NzB?J1zphX0Fc\E/v=X3ڰ2XJ?R p$Sq, Om[N8l qmX#b_ƿ;PzuS%~rEů,A8TQ*Rc��+sc@s>G܍�G8Z8O57;-5lT:_sj1];{Ȯ`-v+Yp\4X-k � ]~<2cŲwpBk񬵮1ާk'K/Ѩtsa _xpt}SANHG,57&@\ ! B hzd|lbV<k;zM^8>|5z0&P&`I%6_WbCpj:2_hqA['qcbGƙ&�p.Z%t{qch<"r7&[jqnjn7ɻҵ:zeXat{5ໂFY2ֺ?2?pgl 7_FvlJ,vMIv^ج[%&,RZo}yb<rhP df_V)V+�8ZK(+(=|/m5V!F-~.L>B8#].kecNJVz,6ﺊ�VƨWhH镭5ָXXk% FH%̄IܚSsM�[$/ju6m "d8K~kV�p9@r>|i>byMP ����IENDB`�������������������������������������������������������������������������������������sonata-1.7.0/sonata/pixmaps/sonata-case.png���������������������������������������������������������0000664�0000000�0000000�00000033647�13771420143�0020675�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��X��X���f���sBIT|d��� pHYs�� �� B(x���tEXtSoftware�www.inkscape.org<�� �IDATxɎ$Iv(ث(\# ??л#Y,Ƭ)2=^Xz$*v@UKkͿ˿q︰ݶ 3w3M^G3>ϑ׍>gY{*f̘3<Iz_-gy9߻2?ls>{w-2-ubon綘U{]I}w~t}1ö<_Xv=<}-wxlkџYó>A%dqs5}}ßY朠n_<_>}Ob9u~Hcc)>"b_~I?8η5ߖc{tO51mcog16|G]ϩ ߓ21CC;Ʃ9x|t;亓}}4QOQ_Gyx:#_Ǿz>W_D]+Զ0 BPF[CyoJ_O%œUݡv]>92e0xƐ>9Zk C 1Ϧ&Fb$k}ro'3g[ư1|Ke Ɛ߮c^m3XC>1kRSǼlk n cse y#: KO_wŔ6K#*`a~sϖ1 ֖0x`͹jYI7a[Z5ml9ð-a~u$`hVlz~sv[C6axlζ1 aN}HZI[s75ir߲?)mua|+bjCz{o0ưrQsX_cƐ:~OEE9/_VfǢ[x1[9կ1 ٖ1Lk}W%$mOOuc s5f S{?CbCj_<=0羫mMښ_1x1KC7l_aBe.Rg2lp3<6g[[C~sql1<$R_b5R:4uoζwl[9s0c}DCBevFajeǎik97g[k;xT%B 2 j*LC959ۚk C؜mݯ1 =u~IY*ԺɽY959lkcLFĝ5X։+6g[0,6GcKBO:`u/u9p %59Jaro bs5t 'Tf(:X[q{ζM2WlζC<92c_h](Z`na K%{P{7KRʖY Ğӛd~<ml9[눸$`0K'6S9[xZ_cvs05]k !bza *+'v~axlζƌ!Ga~:Tq&(!Ykv,I5Cr5v_*Hʩmj7 Ο뛤1<~rϐXxlζa RI8[iX;i oO_ةmwmo pT]ona*s>9*M2W0Wsϖ1 V1bP]~*<4879/6g[Ɛo wO2 }bs#iKix|o51hc lo]D\Fh54:K5ۃklk~_l6 g[k{xaRRKJ^x7IcrQsX_c_٪7Q mKI7g[[]D\~.&0P2 ..PO؜m Cߜm1b0[zTfNVc_io ǯcT}Iyj79֖0mx0&鱻'U48 4==q7[Zi+GƐc}iROlζFR=j59lk~K0,v cX߶7O.ivx`Y44KUqU1hưVka$U׉k%K(M2w0<vj[PR[eD|}y iܳc>$Fo yڐ7g[%.">DG5\B%<}c3U›dXc-ܻ1 V1\GĻP^к+uYcoO_ô=g[Ɛ "}4U"(=X5RҎc荡olrNcEn騒g:7>\خKbF+k=m>`c 9s0^F0&kg2i-}<lk~inLC~i1 {~Ylk~Km ^uخel+Xx{c_{Ͽ1\>h%]kz7mp[xaJoi>'6s%%mO/87sC~=a:oZ:ej|oSbsv9V cJ8si()imїomc}?>cHi.LCصrcs` DZ xj2 k'Zb19s94[ e!i bKzk{c@pRԱfFih;V؜mrsx%"3Vs�G&i(u-{o[a c+޷K KJڢ79 !U"S2 R:4uyVۧsxƐXY$7oaj2 k}lk~KC6m Cbd2 m-|<~}cCIcT΃-$Z4֖>$kÜSs(cXZLˁ-Vcs5j}k[#]D<@64ؤLCaucX95ӱoCb,([RgFnpa5<6g[K!Gc/l^6LC؜mLZ1_ζUD|M1 0AejxV ֒,Vp/"M�`q=Xc5RPOôs~9Zs xZVĵ�:*ӰY?`r1hc ϡ1"MY&bVE ZcQ>$KC6j{9Zccv8iX{vix%% 0)!s*"(Y2 K5&i VsUj[uD|6^aYLXauncSڽoO. ƨ2 }bs3ikqNV5;9#ﳲʨ2 RMT>귆1y?5=."Աf ('v~a6l,/#[؁ڃ5I %~L֖Ɛ<Rۺ tiy9Tl7%ǐ%<%l`d2 k'm[ÜlkϿo["hD @Tf2is;${uw6a2 5%mQU-ahlI?xoZ6mR>9ʑ%4< oyu\?p)ml98*2944KuLCV[rP"WaO4MŕiX`9ѥ|H֘1hc ϡ1VgwC, CcKPVW_8 4Ժ@>sk d[k;L84,Be$<!xc~s܃U,՘1DyV[{ 9{_G8[:Xj8U՜mmi K7G[ëobKpֲiI[at9*_ cH\@d*P,Մ2 !%ǐ-<5ưo"M�_a~|?$7g[1hc a1&v? 2 }bs{v9&}N9bC6:ˁo�Тu{lp‡乌{Y+bTbd!g9*u C+k|e4͛D �=܃U,U^qnc_{NM+0Q%-RXaKK;Cc^׉k�(kۚEYk[<acz A|i(i*C>9An5Ga_Eċ8v-�TS!W4!'1侟ZÜcJ\D4VG:!76g[s!GK>C5窱̧uVXˁ=?p4pYOs�dԹkv;Plk1|_X2 Ru!|VWlrUՇD,�3YLCII[n)>\cxVy�f4K>s2 kr琳ϱzRaD=^O=}: f-PrSVcCWc!qM.'6g[S:o 9(9}47X2 %R=.Yo s9=ob.zz-P/֩1\G_�(S2 Rm}oζpkmDFvr%7oaj2 |o~P=X[LZ5ml9=Y+�*pS9he.'6g[~ЏƷ$[�XLCc~~1guD|eI.{RJP!Z?V~ob?k6q�VYK[W½Ǿu" *'6g[s'mQ؜mÔϐZ/L%%<i;G%{/ $*'uY4Ahc턧Ol>DE|NP2 [Tmhc ϡow%AmYLC9\OlζjJV漟C1Ei^'r%-,NX:c�4,֘-RҶTsG_iv8�6"{g2'Z~9X|h^,˅Cb4_ζ|#?i.A44K|r,o O~OC�Աf ('v~p/ opfzz~su6k4׉s�2 5/vsH} p&V)ӰvA?$vH[9(9LsDfv�Tf2iczo |ejJڢolq?CbK/fv�L*'6g[9DG-o1iH|_S4T6K-$ s;ofv�ZWaD+u%ᱫzi8TrҳcCĻ4Դp>srEDfv�<*ph T 'Z[KrQsH~MU<�g-_+Y2�` T'6ה,|9n3;�Ce)'6g[#g5zWڽ|bMA,Kf*Lr5ml!>lf`4oAd-<E|8� .'6g[g~*-:;3>?E|�i侅K{ >)/�0XԱZfNŶ(9ᙻv5]+MA�9Y^q椡ol6jN8oc_]z�ff` IÐZ=G[#_ո`Y4,Ԥ-J췄g)U"�&ZaYelkd%G>o4׉s�E5er;LC3]cFM쫳&lFicZJ6j}cmA2 5-&fgUR“SǾU_�ȩs%%mO/8V̐Kډ~M�0ej|)Iж~Į95�04EIжbjyh�f7K>s2 -!Y9~3D�,b2 %R ܋UR;Y)-;9�XLuere$<s~Ji>&EM.'6g[SgǞ8V̐m"F\&`q4{Pɽٙk'<Ccuω�XE=XSϗE]3SbKKr!M �Xͳ,U1DICخs ǐ\Pg%%<K&mQf7X>4c\I�(3Xk'<KۢaJ9ڨ%�{^³rK;Ֆlqk�h݃:Vr`Dd%G5<OO�@Q:K50*mvfL[9ڨ9\D'G f2lp!Y~JR%W�TcP>9ۚ;i2fg[=,(�U\"uj2 }b{:eA�9*ph T iX2Y}?kRI�؜2 [ThYT[WO1�PE4􉝣הhYTUD+�j\"rk%+&~2sfd/Ӱt[c/YF)Tc\]&b:4=K9*!YFɉ UOlζr&m-J:c~NOZ44Kc{3=5̰"+�6Աf ('gɤa"�܃U,UWlhY$W�l*eoy?k'm7_\iiX{v,NVJM>]D[4D�)~*g T4Vɉߔh7x�؜4(!Yߘ󿏦yMTOlζr&m~--2q�جIeJ9cLOJJ.ω�`Ӟmyj`:[T#?�yeJrbd%GkRbEĿGtf�E4Դp>mjJ~Msh�£2 p5m=KzP&q�O<K5f |,Um~* �ge2 %%mOOukiHLˁv4d)'6g[#g5zq?Ti_$:_,UDk'GkRC4͋5�pT%ZK,:hmY\OlζRirK&+9(miQv�8uVXT iH%+9(miQv�prjJǦ&+9(-ѺUQ% R= oyu~ V\ET�e-Ӱt[cMuTL ˁnb?su8�<qr뾱5,-|J6֚jkTi)0W7YFiK1�]OlζrΎ|JTmF|�N]$̝6Kzo#m��:`M=_RҎcCmxMK�:,P,Մ}W]$UcXr+v:�xg:��IDAT:4�==+)Y2iIRˁM}"�`2 &m-&+9Xk*S8�0Puerӓmx~�\OlζΎ==qlk$mD<�02 .'Yu*{�FkLi?F8�LЫLCT4)qh%�&Jnr,U2 m15-~K�yk -$+[X|89 �rԜh8?6Yi> D�@&i(iv,%+}+qi%�uJ+ajjHg^-y]� leJʴY"⏉X�`4VΤŜVζ) �,jPf&bY;$��fԱfzJyPrE\$�ftTa T7e74/�-'v~O\')}*1"~8�, DKRb"Tjd/Ӱt[c8NJjj{_]iX{j,VDTmG|�4LC؜mLڞ:,U*SDg<�QeJw}Ww6�܃:V,U2 Nx7v4<+!Y<éc%R~Mu]�`%i;W' SJJ%bRaٱS-_*i+3�yS9[\8Khw�f+PRvBTm&� 0LC؜mIN? iyu~hD8�PIeJ{m4u"�(Dʙz~-&Z<e4͏�@A:4hMm{nvO[{9K:�04԰ߢYhA�{TPmˁRg6s=�@=X5RMH5zYy� 5{%mIJTC}L� LC؜mm^Eˁ¾+�R2 k/-m#]<|hD<�PA?3J{"D �PelkvllQ,U*6"O�@3X.w5chi�ֺ+uomZTm- fTaY1K�GKʝh==qlYXK�Y4,V6JX<{`3N.>}7vƥ,m^xr뻈A�؎j4/j;'K�-4V6j;&"N�{Vr x7vh[`:`M=?5iBж, F,Ӱ,1矞8cA�ذ4 IJbYyK�qi$Z`f)Ӑai}`r!K�p+{oaxCc- h݃:DDwA�84MÅCz:6, k!b"?, UaY1m,1A�83MKi(,D̳xmD|h�ذ=XK'>ky_GFtn��r,*k}? x=6[4EW�Val4/*"l�ضleYLYk�ضle0mŅ4M"�Ae=?_]<<'b�32LC}Pk}[EDk{țh#ss}D|:�QfZPOlľb�@<[2ƘOOukj;6�2{m5gRv�@2 Ǵ~/M\M4Ǯ�LCiT7w{6�O*04vY?Eܦ�WrVo5K@<0�pNJ볩YI�=XS6he.pv�U2 .f*Zv�ler17 6ml�NyS9cm,ݳTmml�:M.v|Y4"6�]&i8:gmo~M!�Ie(Ѻ?.�xO:v꺒'~{v�2 m5jjK;GLj�iS,U2 �QCs֘-opMC�6=XSf֞4�@4)i*Ìhw`�SzixzY!|�W%gNm+3VǾ8j�2 6ıB�6K.v%mѾh�zJZg&i.��ٚwbin.�8%9Yen"I�!Z+?=^,2 k �W-Rulpo.�WKJ^~M �裳ډ\I[\]DċT��'DtNu�Zk T=EӼ �"k T=b�X=Xc5R !mI�`magW�,iX+њhG'�2Z/.�dp>9ʙED|>"�Lih}|v�{Rj:{qqww~�=XR}\\\]�=XcR+�`UiݻX�9ROU�0Y4W_}u�0yP,U[[o߾>�˳RŚ�ֹk5>ě7o�S=XR믏��xxy�%YX{�ZO^]]ŋ/�X¬e&�к+uY777��2LCi43�{_"iv�XR2 R>܏:�[LC>h��uY/_ϟ?�,-9Q_gq�R,Raٱׯ_ǧO�![>9:L^�%9^,UwŇ�2LC؜mI^�To^\\ě7oRC��XMrVܳTc�O夎MxQ��k܃,U/_n;�`miș=(�4۷o�LKq�R<+u-iׯ_�4ŋk��JQ\X˃�@zz>؛7o*5�bti( �@ N.T*~��SU,Uk{�Z<xlrzX.^x1�2<ǿWJ=~!nnn��P~*'x-�5yeixpyy޽k�@a~N~_KJf��js0ooovxUq��=XM\^6NPիWq{{c��)z/^|QT{*%*'ulzX?~?v��0?`U="�K~6�J.]իWW�JHln�jv`=Xև�Jպ+ulo~׍�5aI�ڝ܃:67 ߽{777o�DJa �؆e$Z.~7�PY4͛}��:Kò<�l2 9ix{{o߾t��܃5|O��k-�[ҺDT=x�(e^~<�PY4U �ؚY4tẼ?q�RM.'+�`#%�^\\�(_2 s2{�lUo� sTk2 ޽ �P Vļ+�`)p8;vo޼p��eCi۸y��;>Wv�Š2 }bOoN]�=[j{Dě7obMc�%`ؗe �8'*'ullu޽��܃kǏ.-�m2 sLC[ �84*�/[a�Qen<�4v�E=XSο> �Ueò<�K94�4DD|)nnn)�@%f+` �8W4tJ�strRn̷ �P4�ՠ=XCK�sջLÐzXw �P VĴ}Y?~\�P4{�Y4�,e]]]U֛�ɳ?cs;�@2 s7Lén?~}��U\7 ?|L��IO夎u �cB˃��{R^)��'&Zs�@ui<�L �`r Ir�2 4P �'{�`ubI��~1L}|i�2 >}n7�Tgr��\+�&i �ౣ%ˆetk��u+u+�c4ò<�ps, ��ǎ`ϟv�Nr+��l<K��:* � {D&nnn=� *�@Aelp�܃:vZQ�v?Ӗ\ϟ5�:J �b4H��N\r�2 f��NT.+� *ۃ��Z4Y�k �@2 G%X��N.>Ų �[2 ױ햻3�J.` �e�O`�Z"�Y��j֫L+�3X6�G�UA�_g3X��tTurv � ��ui<�0Lg �0{H��96+�܃e �`e$X��Ý\"Y��*wrP�0O<`�pL7�{noo!�{,�ӺDx}}��l%B��D�Yk �8R#h��+.V!�%`�/Y+�f"$X��SX"� �@f=Xf��Ki`�wT&Y�~^�Ls]�0, � �@f`�df� Gev]vUo�v^�L([>��6,˃��ә�L�%B�`I��D�ٳ"f��r � �`g$W��yH��2`�d&�L� � 4H��0� � 3 �@f~�`�df � gf��rz�?�  �@f,�̾\�e;�@f�23� � 3 �@f`�df � 3 �@f,�� �@f,�$X��ك�,�$X��I��2{f�@^f��2`�d&�L�M���L� � 3 �@f6�df � 3 �@f,�$X��I��2`�d&�L� � 3 �@f,�$X��I��2`�d&�L� � 3 �@f,�$X��I��2k~GD|2>WUD}D?+�/aYI7�l%B�$X��0l<����IENDB`�����������������������������������������������������������������������������������������sonata-1.7.0/sonata/pixmaps/sonata-disconnect.png���������������������������������������������������0000664�0000000�0000000�00000015362�13771420143�0022105�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������>a���sRGB����bKGD������ pHYs�� �� ����tIME*p1CZ���tEXtComment�Created with GIMPW��MIDATx}yxClKmݖmlK2@&1!y2{Llfd2dg&Ilfu2@bg7a 0%�}Ƈ,aݭ{nI-ɖaSUUw{Q/////r釔W/ʩqyEvO�38ާ}�|xƜ F�$(_( *Ͱ(0-Y{�WOnr si> |r@ (%ɰAT|J@y�Y[4D!a> V\EBQl]'��"b��BbZ�OΙo!Dy 55@@>�Z1��V`ESw̘, ?�!gV?f�TK}�dF)n@dgi;},[jn@c�s BU`( -^wgTc�J`sZf$ZYR]/gVYH +!d9$wZLp ?PTq>�2 M V%`i殔 W " p ѷuwPd篳Bʩ>�2" Q}`u.<WT`�rBN43sjv47�(E_V/N�P (5DNa5 1Z5soWj; cCfmm0-.k=/D�LnX+?vl0ML.f]/aJLbq@0:�Rԉ}i {4bQ ,0) �Xv�~9�ܴ@[di7 >\^�((^<0wuZ:Vgne`D!e}9*2��<?0�>j�#rqnK$ŢgL ��V`Z+�NG[)kJs`*YY[Zx+�t &!q� @u[Nbޙ^ !KEo?j >�.#aJ_"GC.֓T�GC uh0i.!Ǔ;|�\bgV/ P *0vXfI ģNen?tu h\" q>�.k/4`8P9� vS?{NvӐ�irz8}�)嬹 I.?h8~(�{H|:)55֊JVp ? SPVRr@hk@gL{-lGJB"qc��k9d(ѝGP>dxϏ=ArM>�.EkHI%{NS8FrTџ3D!X{MOpqLP ,)wz 5jU'Dq)A!ۉ>kQ@[!g삛o,K0v�$j- k@ 9O0pL3}=q/!�dꍲk�H7-$Ӫ N4"z>&HtQر<iasי\?}l&!r5:9 )0t3~J5|a 9'`,�]PFRVx:r?<7/֟1s4Abțsʬ|�^\l d(@ZN�C@_v11w|�\5dT#w::X~ת{Z7'Y`Usf"x0r&7 Bu꠭Nx N?M'`bS@!f7,KѠ?2o@_} G{vBDiYWo<gIQ((yxʿ ţMieZ<`뎳�LBUKj:$gbڬеCx`A 0O֎s� )r uɣ3f0h9[ObХwF Ø{|�L,�QvHLK �cl$Ow!}'$~`4[AD+>Zr)8p�Y>�&N7` 9:r1g�cCBJ9Q9DIN8T? +j$|��F 6ѓUKn;- @8-F`� .0DVuCG1i (wz)@Y�L`^]cgB1C@x6X&񃣞T}�L %sI%C�cag*g�֊ .�Q.sL5.`"g�WݿSJ6} Z |9[t'؉L"D |5:u Y`ÒjAŋI*vO8~`"M_M,UݬZ3@ׁͅuj{~^\&�eDBΚ;(Jh8fR):)K^ a,C=;n@�HdqIZ1L؉$$Sp׋)yN5oci``.T.V!gnϘ_Nu�zuHS|Fk ʡҬ�&8{;2�pW9Y½>x�LEҴ߃VAl+-a K9T?8}�L/6)U&�dV3L(Ǽ$fȖ{{tW+b &N5 9ǁrڝ}{bPo7H*ӌ�$Q8k ubNhz Ʈ/73`" � . aT 0nG3'|Yy? )]cp^ yWJeNv($�QT@$g:u뉶U>�.0׎pb:TlK p}y%._(}J5}0 n $B9w4uKPjnrƻPIp^<�>{$ʟ6ˤ`xՈ˱ (C_^k0~M: @]1@l#H,aҶgҕbWr\(G[/J7,້pӘ{$x�Mrd�)DHPN4%7Α3gC + " };}ƻCov>٭N:pbkuU�ų ҆y_}Ya!+ 5{׶Q*p5?2& ??" �(-آ42t=E|\Y0s-` Isnb86� -�(m0{טU J{?zWMo^~:N30CN�Eq#soߍi>w4�afqx='RJ |A�Lu�0/�HBX*˨Z2ͨX|țf`91O4MB2 k\_5}̱߫/<~W:%)Yy>O3C{4ߑ6@`  @5 ȝ ޾ #ĔdD(b{\EDzcc/gV}@V-_`IBLk5Ev9 ?G?}F8YT9LAىQH<7DXT! DD!G?r/p? Dd��UwuN%�zX}K즫ea:듊I^ԋI;{c/<rVW!!Z?3?rךBԏ�0D%�.w7<^.5@,?B#h]kz|wT�@ʸz�¹Vh1}B9a,JIC7Yˬߋsv,Lf#m5W3�!)4\ p531u4q�* o1C7nXpն tڗ�mߝoT/,Lڲ)8bY_0-bvo"f (oDz)S(0E"xthEC&3�p4nXQm7O�U~7v,]dZ+zS EV-T�hu=$p9I � -Z2�* d1%%Őr'ֱn J RB g[Y2YvO OꜳoW\Y" U95$�NyN(I la"<ʭGOG0F?o̙}2̥K禸8C}N<tۭ>2xo`VyК&0Q~h `&}�yOMv)x ^qQVj_*i&/i'1\/\h 0f?ֿA}iPd� <P5Fg�˩fm ŸQWn؞�' ~ߣӡkɤ;1t__#⿬ܺ牋Cb?1B-"p- Y+G:uXJh>�{~ɘ?䱣8lG@Cy%kpu<eSʭ{D%� LI�̜} <YmOlJiHP~̑.rnE |`_P  q}f$ o ~rnRRc��9ƠPv)a5.gp}lGO1>NϤ=Az@ ) %�3${tc=M� Q+H$qў׹ýh\gjZ?Do0{rTŠ�(*�ivYhW@&l\g(굢CHwSkM� �iűH3X_1u˱&icv VZSk"։ wM`Q{DtoㆺO%P殶V(+ѮV0{c @iU.hMzge{ CaHSB\1SG7is]��?ўqfޥZt дN6mK;C*փ~} tNZui_:ԔvZ27.NJ}Ӧ@ʒ'ǯGUs+;1\Oj]m\DM#+kuVىl>0wp; xҊfRэ��tsZ54uG͋a5ubE)| aD7=!o[erhv蛬kud� e9Tbۯ>Gկ.wra罗{0*?hNnɪߠR F@x =\ xHiX{D13]8ɩٞ'w^x]7}I_a"#M ":iڛ/ɀ4#ZZGF@XH9q~N^=%{`أ=vrڬ6X+V]eK[<u;}@4)Ro.$:HK5,ka+~jϽKZS3Ia5Qh˷%i-LN;o%i\w&;s/E)a11G7jz[d//`XT '*Pܱ{xDb)4R?/apX<d1�/[j.je$fc==~߽I Yʡ-q+AxS|@K[YϪH8~O]Y_ri9Y OsVnQ&N FW*ul+AsCspocu' 4nl#7&nQ.e'( cfH?(-H#\?7+wcuðtK G}b?Q�~ϐQ6+(R<YdL>;G::g~ԣt4Lpw}k8qq 4VH G>%m}nTj6CwR  !e``YR=¹ ȴ` DE(kuZ5q='{ Ïxݢw2P& Tϖ=ڨG6m1εWeۅG\�F HCW}*db (NVL$B ʅ4@ WpJ9h.d;H;vsOlsy[wLӬ=s'ǾV W<{V<VjO$$a80@VPP8Oʲڀ(e4$ SR0$# A,X);sښӭ'*:'D////2ey27����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/sonata/pixmaps/sonata-large.png��������������������������������������������������������0000664�0000000�0000000�00000026160�13771420143�0021044�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������>a���sRGB����bKGD������ pHYs�� �� ����tIME:2 ���tEXtComment�Created with GIMPW�� �IDATx}{\Uo}NUuuw:ݝL$PQ #8quq\0s3A3r3"D@(y@HMGүs^ϩsN~dIu{{89N89NM7h"/pBz`ǎaIG>+> AǙ"Y3:Y�fq&<E.8e|F�QB�n*ϸ2#v-3��2G4{ի̙snkkl6۔f'uoTݯ}w}��M'#8?v=W .miiw#ͳ>[n�� Z7F1@gqWZf:$k===6mÛo{=Fǒ h>k%[nl7M:uIlumذa 7=�F`#⻖ ^z鼛n%K\vc3_{o{#>k�;0%~`�4|_쪫V>o>IbaÆo_wu1� hƀy�~o}Bq\7^}>}b7=|04}݅}#=Ǽ�@T'A%b08 בXL<mj̛1!ȑ\߾}>w֭[Xߠ0Rs@# O~[9眏 <m{۸?^bqHG,$1HZz@ %VeB !@Z15 V(~ѻ`Zֹ+iYhAK×}]vLPc8\//zonozhπl},や �$)$0J@`К0I(H+_{Ax4*/8NMftO_qy^g'a& &vmꪫI_>9[_O<LB8�$$@Bh~oCt:f! *�V;v?+؆|I6?kiW(yoY]x絗;ӧr?7oWt[&c h? +<oE6u샏?vC[g&5RN&uH$jjڞB`QkgfPP~~}8z++dt'<_c�G-VP) iii{477M;}}wx/:'7S\=l0 )_� ""MD3 U41�[ٽ0K"bN!$iZ:L;ٍuiMuϟ{qKK F�? fŊפyҠu $"!%i1FC(eh(Ypa a^D$ ~~ƃYhRCέannѢEP7ம.5Xw�Lo|_2L]ʋ^4rܜ#4Gm W%_c8||p!#$tx=,kɦSV,ظq�*E a};-i_=M,  M3\/Wd?Խg$ H!7д/Sk:|5PPϸ[|mޮn76!t2,!- jL&бM#嚌�C%ow<:""u:k=u{ӞSN_f͵E�wqeCCCkǟ_~r2H'ko zo*VM#%aCcY@B:S]cӗ΃irW~2 @ x+P<5i'S=s,+)[W7qB_k4W&eDz S*K}AB@ 44?ߓvz;\׭tCiQw[[[̙s~uS7ulN&$](2y"$ecNScQt7KS~@!p^.;Wy}kdc0@%87tӥizloP"Y/d a'į2&ܷ oih;aA_1dHp(SpӮsg_fMf@ ;ŋA̦NdruNIJM˙/'"֡_95Ae$h&|([&,]|w}4-"1chLL:uYR|r,KW` >^/}(Sk-g̞q-OID4FykSZ8$e WSmօfPL4ivv?xK$kIbTfM|fcw \>=rqђvКK։@J}:uC2zHHKn6=Ǫ=8ε^p4>@h\u¿=!$dԺnت(nȞ<K;Kjnd>2�2 <[PVĜ4߉AB ;^;48`N VJ{c�NF B p}T$yC̸hTΞ, P�|4qIdl}3It mhhhQZrejGGO(IL}C5޲`�9_�"P0 L!=p6(y_0iR$ޢJ۵u*k.9Uhix~^m4�(\y�o?&h�僔xpPRc1bg`*rƱ�CY$69G;^dAj>qFQ\pz偕gT?'\ C DO :5z:Q=OO?cA?<I@|fƅfƜOi'F"}VChG�@9rL&J)DzDdH`˝~!X!�px4LL1P~C/_p�$~03q>*ag4tDPa֜YSbMkj6}`V~hc#cN 72q~7q&{-% +;b|sy*1BV0a5#ZCj'yi�{CŸپ)�/Y3p6=9v¹- @t`jXNvk'067V:?j88&BHsqQb`0y`僼N$ 0lqHq>S\YNkƞۯ !b�߄| �ap4?>,} ^DUf՗u<2Hs ">;7ށ)֬<W̒xk!,dgKOL'iNG؄O iXw�w>dk.B}RgBèHbDv4 LگO C@>b  ~}On;3ZU̘k@L~M@@Ij�Mb\%?eW'5NVh�\ga9S&�̣8u4vuo Ι }(/41&-}gqx{DT"X;3Z*i|< ;{�i`}Ob2}+P7c~!4ф2 ='棶$^˥?+�:BHOV9ktx^+)30({W ?a5@Dݏ I) fUP"[β`T~ �B\y{lc윟|%58`�) 3 Jt$k&R{0 ::.> 9Kȭ5>�a҅;.HP]u{߇7eqeKL?�H?|I*/E.o00E$?-(&a 0Vϫu `I!T} v37Ѝڊ{Ǽ%X3)av46IOqR?ґ6 %a�;:JZȘ=! #Hp2<UʹZ+SNY)7!�nr LȊSK hC $`7nW__s.ъ?]d4̧ t'*0裔sB�T0~-/(팦ΛV࡭ Z@h[% +Vw7y<df-+\Ek �8&AQ12}=0@E:VG=u6gܒD*AВIM8`?[7v�nmUsa~탅2Gu{ kjQ�MQPY32$A M f[Ql4> zo ;}epZJ< hkWIE1$ۘ&E_kD}N63C=]D*$|$Ld f<\d.f䅝!�Bx/؉W1x5I!mЩZ%`fXWR$Pjj2tf#.�+iUexƀĸ' _ч@%Y@.cKLHh@p#)%.o/`[a�ŧ3dSȃIhհQ$`a- gWV/ERk`Nh˺_O_L$C ]v�ΞbtUQ'A�|B2@�CZ{׊,>aFPC8g~wcaD $.6�\d{yUJ`=JjS"x|~rln"T`ma(겥wB"^@a8D|8* x "hI(LTS2Lג aeˆa?ۤ}+p~'b-7!mf~%*` r:)~ s�2bplW^M $v˪ez}_Fᜂ"Y} kN0�7y.#{C!Ӳ2 w16]]]Uk]Y3!@vB,JԵ-[Д;�̥kcD�q՛o v;JJE/v":qg T>GýB^C?ٗw Lh:1+U68L ӏ+q%X8w$�|Ȭ"'D<HJ` jnV Fe^a<yB9!>8jթ3ʔ+Œac~i<d‰(i5H8x٧bӞx2 ;c�Z'i\)-[f,ϖeImQJCKSI ƪsb;݋MF46&P@R5 7:P}8K~0^&`Ht*蜝^DRn fƎ@B=jI8B<2 3%'tδxp ^K> e"R_GĿա٠p4\MѠ8c/HEƀI.w؎C9k%l҅J ,wtQ.fᘄDR], HR[853f�_dJ4I%$Щ,'lg9"@`qBGOQeI�03 5DG#>!"0h;VUk%@8k8ox>>]P*hxkGX@kEV+Ҍz-[}AgLJ($`#Bjp)yۼ"lz+qԚdžFbI</[vAw߃Wy A$J c\ad�>_=#2TP 7/eL̘X8�0pC`iM<d:& kNJ%ɗv]fh"ZQdÎG1a�HԉUO $7/>a'{Vb*sq _(z40AqIMݞɶBB*PD"x2h�ec (#@Z~HX6l,k!}\SaeY�m=PbڮAO,Vf~ggc%!s ^=?8>&`vqCJ~a 7w3:_*ҙ3 FmD!S \\ woG7mxYi-֤X;2NhPlYA$�^/s\u!+T]@9}2⛉ @ɗSN .߄Lǂ܈ysh1X׏G!{  S hKX0IbnuX}�@P|LN >Vg6hlp!WxʉoA  g6gss`%$ee0u2b�:x>?m^.}לH=]) ? 7!JsV#9.A Ⱥ4ʹZae%Ugahŧx_K'R&-c`)6ͼt[O*}ׇHbH_Wwݯ_0˃s AO@_z�\ $H)ӺV͏!0x}@j~:obg`2g+A~]B%P.>2RB]WMMN@_& >7)Om覥`q߇»/D(L�.PH#k&E) '߬l:ۘ>X:-b�ؒT6cs':QQ5oRr:3:)_e%>U`gDGM6 %)^T6IT&<%c89@<ܖ,I>bN(DP[JְfQ5:7?忑EKO8=_aK1! T*Kd[>l_@rlǒ8ѥL̉@*՛7e3�3c[g)wߕj` * #�dq3Ddt 4WĢ2.>3@]P) !s'~“L`v(>CN%Լ``d:|aFc{WaI&z˴5k06*;ِ>&dxh}u`I.Xjd Za=�Oޮm˳ !Ry(#RՂuNoooGD3:X?Smi;4(_A�롺WV |m�}d-! U<)L%=Jƒ577KXAk=!Htuu[n=vsgց�]G7x�1ٿƋ w?̄\oAH ӵHH[/R,H 'z5 b)F 嫳Y(P\ �TgggUќ7cZ= >k5ĕ?P^<ǝv;^x^X:~H~! G%ih'4e' {x̺=[]cǎ̩IyEM 0QL mϟv܈g_5=oK :H ď( 8`V7P8kтj}G4|;vp:5-Y+B>ֱ!JveACAN�� IDAT܊xq'?<>ӭ^{xנ4(sDebMIB{23`gЬ`qyS뫝tנ�oͿJ;ɚKVMCAh߳@9R!J5Q爵auE=uA?Ϟ}a /m>7k�7 Yi%syr'FY@+"{\<uEDpң��7箹|>-7鲙zk`'J ljxA�0\;m '׍DWge|YC]_߇x^,9.�n];8U,Ai/5@sAyF姦sP ja3@h� ݻK_{f?=vlIPIhhŠ_�+󢝌a{iǖAŶpI 8c 2jRc}WmtpkKcSi@fM!Jp5pt3C ~QY2 _ raޱiRcC5zzz]v�z`ǎp€>迦1eM m1R.+XU\&@+@  6lcH3 wޒ*Dmñ i XG|,qJ*wlw؅#f#~4 W(W=538x{.[v[>`m)Te…2I@O?iӦ-|tutmn Yu# %Er 4QP ZyW+toErrm״RN J ?9# kFX%vbɪ>?8qϾkʳϘZbq׭[{��;vs _~mS' r[$}02&XHH&!`oq Dց2 \Aټ2y Sr@TWeAn֙q"W!yP!,D&g$_V'~d8ďzIq~9ܫlz(`/O#>�?[n>k}jjGhzcڴi#O^|S FȬ&�V$fs$ӀК!Xٞ~T*a "PLFV%ې.%$0_MrRO 7p7~G^pO(Pkk+V| e 7M:~a_DBAD}2ᾩ!$aalkvmE&u�5˷,5xpAYDc6rA8.B8yA/H> 0aj? ` -Y qoOG[4uSs=/ַê~¨ --- 1:.9ӧOO>oso_ ^f"0D5|)HSZ@dLf2Ҕ!&Ȃ8N.RB !-# #q!JOf*i]c$A!`f61vu3ܿçe2Tⷷf͚k`Z7,( �O>5k\YWWהvܢy'YuټЁ>h b 4vcY1XX㰷2\5]a[Y8{K`�KhIIuP +fChf &rLfD4T۠:( i'SZk+R^H= u7==?Nէ}׮]{n'H `@Z)ʕ+8vl5x٪t}偕b4k2]}A8e>a7O+0+rȇ�]FL J@+bXA89H  ^9 iuRTY(|"+0~ޣ&{xe4BGyooևUkr89�]Gu]-t3m;] 7c( IDB(!~"!6BHMs �NZվPCxE2!M/;+(cQ(|v솫dܙk3<G�~Oy@;~osnGZk~]]ҳa. # !/9&,P:U뽤~*붎aE4~ZfZMh^5gRfՂ)3Of-j˖-W-?"L Lp}L&7əb{z =dJeߪjqwWJjlw[&5dJ6nW&j$0A@7W_}]-yy,` ?;?OmcQf'0) ֯_W_kll9҇LW~Kچ|\D===}+_%h?b 8�IXv'./rƱxu"<sR/O/ݺk׮+1e2&K~ҥKߗdrjeݻ=ܳ:zQ( ee/|u]w駟oQ,wC=wXRL ǔʴAdi7qɊ+3{MMMOیoڹsnXZU$w"0@ -3!2�2~˚5k.7o|95744LR昙hD&"Z}}}G|ݳgϖM6m|V%౔qg*A1D|35A# ^6a:xEGȔ�ILx3@3 oT1Bx}B`xӌ qr'qr'qr��?M^����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/sonata/pixmaps/sonata-pause.png��������������������������������������������������������0000664�0000000�0000000�00000012331�13771420143�0021062�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������>a���sRGB����bKGD������ pHYs�� �� ����tIME)\l���tEXtComment�Created with GIMPW��4IDATx]ypu{{vɒ%YK$o1񊁐� YBiH44id2tdZ&mRBSZЙ&@I`l yvIo{Oг i=3K}9w90f̘1cƌ3f̘1cƌ3f̘1ci5Kr>0V[x1C+�&uoC+$T�WbQ�uޞ0W2xaQoւP[g}F*X {\9$Im j �am CZA^}}(K\ $p6BB4Qs, C+�l�%�"jI!%+@T ]G+d@S@gjRB�,8M�y7 d/۸k!@~DQrX|QI%UU +)i9ik*`io^ ^삤&k[-F !BQ�i YQ:M*@š+n հʦhI3 Q $�},VYtlXrM M1K 㣏lZ) Q dMsYNS:2XGNFiVY *`/7 $QqE%@RD(yGM&PՀ O}�VC%+ZI*hC]s`N9ɶ7mXY$0 0~y±�ltb ~^z8TT{-1C�yh�i*\ �Plp@:u0:>͟Ψ�yJeus- @Vw�Wϼn�9JC;nlhQ� Dy:y�Ɂ�@W>|+ V7*C�]�`=@D罹=Ns?I{i;t}fC  M!Φap?.0L x_S^�3p.ڭ6pFBC'Iau:�AO۝7@B6_'ȉ؆�ò(ޔwf!'<`?F/!C[\�٭ׄ(2 UGx $ܔ{:s]KDs6ؔF\!e*jHk)�YM/%~y=1$*eUW7W5`Yt Q1'ủM@ >|7'tjq0.j;9n,9 30{2rXXz3@TWDzzT<@EF?\AT2lrE2%t 瑬�P&Գ:u/ge!Ww6() \;oh!i5g@398&r<=9(QD"n[EuSH0w&(TR Dՙ5R0QA!|O=CVgF^졂!?�lls(] � {VM�)Aw~ Ṅ�`f5^%\^}CNg(ݳNqdJ0]_y^zWVZXMђڛcpQVY\a5eFSGA=|X#yZbge Ff r"I<P~~ᑃzAfN X$J~^9V8`_Wo+Pl@e#HjիN8=M!:w  ^zg;ZzM}!�CK U a~e?J`zK>ZwdT`[v# 0>`0,@B,WV'UG{�q#A:sS}BE>AB2PEJHQ)Su85Zw-K-_2 0$VEtmV0rn[xYVy;`u �V˺60Yl̃\$vQ��٢b=e,k(ĘST.�\�;`7Xs`f ƫ@rt�}y�?ׅhvH ?(2 0{?AZBJ7@Xn\x@8 D`6I'rݘo8'Lm `zLH q`RЍ,&i}l H{ݤSZ_+' I�uVr@iN qe[T��4{91L'Ǿ3N` (FTR�P @;[e *>[ ^>&btb}/SBzXRM6AX떒j@'8HgΦW9} DՠQ]6d:r6iN{Snf_VEј<=S˿8簶UPy}oy&?|IM#:T 7?�oBׂu~ۻs7dpI-HȺ+HKuA>AW^+eê zr_];�4B'k>fS $컽SeSxj(R^9g9o0SD|l{ݼegR/=Xo�׾sGV i7dCyJ��OiPکBo0PT5L�jC q_{8Jhd/!LVBF8 bS'}'H.P .FfZwTQ(D8P~t> I?8NV!D* $JX27u/n{.K_BcL`N�$J,**Z9n7ϾyƷ7iD2GDKQ_SBG�DuSBTGuש !Gd�vh*VOuN?_b˝ӼȸV o:^OAygT!@o!$Mp:v*usRKxPGu0ުWN"u6[&6 NJ|�D{ajgOq*5-ҳow "Aj\ݲD/aXN19E D{=>A7y>O+1{ iMD9sf�`4�u�|@4O\#�[٠Wp2reӪ| pHKcS�|y�3VݲDЯUGW~tL< 3RKy֋�k �\p�_P< s�4N�$9iZUZk6E;`6E 8� s[xla9[( DYMjNNyXp!upt.IE嶈~b8CAT{$_%�2ξN%\g%\q ,�+C[*-eMg(8n_-,d;[ɮ*ʾj-YWo'px:umL-8/~}(XOLӾ5gz mT}ͭWˊEwd IITneCS}{һi^BBNrb=B`Ժz�%NdWX|"weICp·kXˢjɓ+�LL>ǻQhA W%�;zWX3Eh"!*e5^:OVӺ(4/ˆUK {?CF@g�ZN[Zẻ7ˆoeZD?LX^\(.@ !+z� G8ޓ[ F@�]?�M[(?zimmۄP6E0u2ގy>Xh0\POH&,#FdZ8밀&2Dp>CJEJT81/ 1�_fQ@ 쥲G'L$Һ<(eY^|h  Q��sVq:ֽ o&!G@?Zc�&P9N 5ybxυzF&�~d)*nq=9dj!$ �@#:_U<|iZws*PZ= )Uwz/ʼnGW~NǼ=,_~�doS޾]?d<0OЏw;N|||?P~U9�@~Љٰŕ99GU;ޞϸ>ћ>/4 ElprGuϙC7s^T=@Z "9Z˾s+U"|K`0=7pa�{v xv=}$s7aIgp3Oe`[L BOzo# ‰!-^ u';{MN3K L (:}H =nίm 'i-Uq:5W:;|z6ۗRbʙU s:uP >d7Cw-YI+Sih=A;{}=W _h<^̀wp_e3�s�j$>VC[iA8VNh9FҪ'T7X@X<^D/gw^:^[6Ȯ*P1|o*ʜ F--$*eK d$+>OSӺ^JC̴3f̘1cƌ3f̘1cƌ36s{g<E����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/sonata/pixmaps/sonata-play.png���������������������������������������������������������0000664�0000000�0000000�00000013067�13771420143�0020721�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������>a���sRGB����bKGD������ pHYs�� �� ����tIME!]X���tEXtComment�Created with GIMPW��IDATx]ip\ՙ=߽oEjIւM666`H B$,5EMfT*S35S)jH&f& cblc e[־{jƶՒ*UKݯ9|}gygygygygygJU>U .Ҕk=\~F�ΨRVLp|Ħ{g ;^TU�+g2u)%S? ˮR<p/I3V9|JD�0u\[b-k4r fb %jT<\`% 𳊙.Ϝk ,Q1L,YC"-M뫈k�2h0_* ?�g47ug&S-GVP:fʩb ooN57 1>wL3+yd<T#@t] 4}Fq״3 GKExYLbZ+*(P|/56U܀G,Z|EM( ҏ%Xkg4W|#@ɠY Mw #X+(Yg,4ru(ѓyZU7T#@�DeBTث 7�+e%U_3VNy =dշj*2%OcޤKwA74x 0n|e�t(٫с?{MىEoBh:GC00VX�͸� )nѶ/&:>Ƽr튅nrUJxRȫj&�BIy7 z~fn^k,35= dL/�JJ u:Ul:vPO`e,3q%ff,@'{��Cv+_ڣOAO\_Ȫ2o2* YnB7' R2o,F(egT ޡ^դW'% 0q0ߍ_J/@W'��q9!{X�1^Jg|w_&ï{FYITr{(0 TlȎ=cAcB"ݼVkXp´ $0OoYbXL9J)ϐ Xq'*{OR\ 5V_R\G *~ U,� m`4 { 21b弢[�` ^;k>1V|JX'\x~^3OxI(ePXc,N2&{#rh:`b S@B ӉpF \{NjwQvQ�Ls9S� B9 򧞋g_ gPV̎?UzZf@`|ec\G ȿfZS $("·;Ne�"O|}уuv+fVhR<\5cd8UQUy )D8νTPv>>89^XAmHuD<\� ٠�Ѕ9`<%pEU|I%� s0>w/WG}ue-_A(:Q9?$۞w* ӯaFO{ o%Mu`ZchtT|PC74cn*fi�� ?)uWF:?FMl|tzP)O�d"py[ dI)zEH1$-M/^#;YKrx2huK0HQ;/ ,E%]tɡ)kgE<\huJ+^qqP qA8y'cm>S "'_9CH&7dR`q-10 A:|a\m2׮ OLqN+&G/rHqb-N %PXּի9 `~cx}YP"(%7=$g?� -�3+i G!T\vuah&Hgϖ8P/h32G%� WX�=&NG�~ ʊB4MX� \c,XFDrʒ H_;b�=Uh0kƼ:GTt\�FJkA\b Hu\Y1?Z +&<\ ū@df'T<">7+*He[f# J5,Y;9%rp#*((Wv̶x8__}g94}ΘKFcg1 3P{RM`I,ELC�Sh #g[}d恨Z&c#9p(=d#:KdqTsm|(){|<d;gU:U +9.{cY#=5-Jʱ~|0F`2_#7b]\Ct羚Jvˁ/E0&�5"5+_Nw&(k8L[,ֶgޓ}n@�+t X2P+;EF&!L|VMuq/$2#dA_x}F31+ ;1ʚ_6Yk�Ddo'ؗ|Vk ޝC?p m ഌd)�\Q_Fn[p) +h �U(Fq H@=+;)�kZt2 q@n8w0W}Xq.#};7$Sx 0oL 29Ɓpz�ݻMŀ~NDt<M'VV[MZUաxf �S?AcL#8E�Ċ*4*(ӚLAe{'^xnų)__{r{ȓ `U2W#8/ں+>&`Eͥg9V(!Dt%hﻺs hA8}R}? pvtfN!D8Ps9`UtE�u,$V'_`YϣTD%m ;#0R(1$sEe<7w`k*>5ƽ7;257E73QHCɘrV\7\k=됳gˠ>Iމc3fZZ__!s4Fp8y�� B#X=7ΟKg\7>+�@@�ʆjgG>ާ?o'x8N3C �YuӲsfHJE]|~@p8Pr&�3�NkVEZ¥r=ts�5<E&4c%.+k-K>Tމ۹8,XsiG�� �w�< x(R Fm4 |X7WQʛ5ϑ/xq=sk�i H7V^|G9o\vohm]w3W|o+:%w?@ @5ox" B=:2:@3W}H_rUfwDbdn`e5Ya^{xĦNꦙX9-c_d�X/� B"F)Pdkֲ/4mAʗ' !jYg8wr`Dm�!o�- ]*Ȕ}@Z'ݼ>!FX9|; tϵR*!:Y�B�>`s8~*5ϳ/f-} V1EOAL2@n۾,V�_KA_Pbż~ ~J8{!>�-�� �s5~w\mO "�j5�p8\2\�}7[5KɻjO(+~WJ�c8^ };*]o]fpi�dup8 |]G71)N8L�oℷB3\�S\KT)uӇ�:_�xx"YC.!0 ˑ7~F#l�M�nM~ `?�|O�fk/'tV�ޫx "~�@ %W�1Ki݁R*b굂K�' `�;=cR1KC*6 !'b�^*?B|� �d)( ◆;Qe!@' �^9 uM PA8R twaF\ iR np>c|` �vB<=7�kc;oh}4ӼkoǶ8vp@�JFaca8nG7p M`8"xуnFMa�;�< 6g,W �@Ɵ}%QLiV'~U:d#{d #$B�9 SBwn2~q&%%ƪ*>Kמw8e2Fߧ͹U>rmPQSƒu>CD�Akc?֙_w@O i2%6t]? kD;^zto_9Ѩ~*)GJx9Ӭ> Sh[ʱ^Gb.g[.F/)qlp?�(3Lwowozv *|2o8RJP[|yk3}ig{ �}��? m7ﵜ_w0 <n~s#n`W6v!eA|9GO`ji�I��P(2OQ6N@/"ܷ׷˩Z2|ksxMJ9, e?8\)m=|}l$k=BFy8ߘ yb} iKy̅x-HWRGXۧ"}=ӗ;(NEBR9 aqZ}kn/XJf F=ATUXiRTBtCHʊPvKY^qOvv:(]=]pxt S 20j�2|Ŝ7 qh:'_NA)!츫זNn۾jsn:mX=3<3<3<3<,g*t'����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/sonata/pixmaps/sonata.png��������������������������������������������������������������0000664�0000000�0000000�00000012013�13771420143�0017744�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������>a���sRGB����bKGD������ pHYs�� �� ����tIME8=���tEXtComment�Created with GIMPW��fIDATx]Yl\ys2 }$JR%rdתmY%5 RMA %hi8NְDvUXǒlY]2%Js3s.}93R8et~,νw92eʔ)SL2eʔ)SL2eʔ)X7b? .s�!� +!;&n#,~+sE|V�zȫX@SxaaBeLO1,XDM̔ }H-|\LDP}g�>f@֮LQ� -!c-XllSpUw@ �YղNE(V`6b) ,X%Z P@S@cr�4@6Ũ�9d{dE�|�> nV%U;xjsE�ʭ>4mXGÿٷmMr<M{AӗCz!:y}v^f@ze ExE2dZ'ͪ0Pz/�2mEZj%X=�@7,›V)��9$;f4rc e8VbPE*m-CD KÙǡۥtm㵭Š�r#WT׺hLOc}�[& rTК:5V\юU +Q|II膖B�KZW �:x4d_?*w@9,`qH �m)͸ ��]:1$zO@S@4>d*;5IXx@ Gi iG[@#ޅQ�w_>Lv8nm35 dJ �+]@X�=s4,>}<*0X󵨛�*, O4;��8g'@Ptq{c=$2?rն>f~z!T@ 6A71A s>{@}Gλ �s';rT 1�@zO]N>Is(674"j霕t'GH2$CI'H@q'>OAͻ5_W�sL& %)GI௓ ؖ߼-G+Hq5w5(~ز; E9*nw pm9�0 pAxޅK?|]FF<>W5}ݷ,@EEyXE#k_&ʜx�<E{AZNQat?4!E9 e�8ɱ3O%u%#x=ERZ<gEݵ) o*02[)F\gQ9ii"+�d}*zO[)x/[[ ƚmȵ$H@Dt"vo$?!yJgs=jZ|"=3fcIU $? Š=eӂBpzߕgH+2Ȋ~99z(/*p��ysfp"�s/ʑbȦ`oeƟXB�� sּzr/_"-ʿfgF'W)YLJ(o35(٣]JZ xmk#0%5d)Oz?.}O$ąki6^ۺU-S2� �s,*oF[Sd44p9I!Y `լ[f\`�X6#$wp%C0j76#P2heh+Q7ͮ$ 7+$eRxC.C"f\g:[^=^܌+ ŕ3|}p__/^g"Vk,m@ƛtHfۗ?R&J\[+UJZ K)&[lٲ).r@<�2VTuXe )|($I=��ꬸb,'VkMJCȒ09h&@C˼E%�kYez�]ע9�?ӅHc V`1,F@H^;G. ->��cAE%US  y0>cB4�&KƊ� X\c H}QOW)' )sI.E$־a Cu|mVR��$9'cXT`ٮό,HCT5`<8kQoB%h)QN.�F@ =ޅ>MI5I`I_LB�]x4#{  |hVb e >;ÿJ6X<r�V9 r 7SuJkt0w<<O9ogX^ۅk=}<LP1|ڈ\oxNh2� 4w!z9Z٤pK-+ک/ȱ5/i&`i[Or�*"w(dS42D="DZ&Bb8|E{@ _uϐE"uO F O4N< 3ll~� "G> sZkP;zz+�jY2k22Q��goSd'ћ/fߓ#BjjTh)o]" H`>}f0K�H$Hx}҉p.Yi.#GO}s\!#P 0oly M:@4pGswygţJGSNGVP ن^!',`9~x<"@" � +Ұ֖00H}o+J;0ut#+<(]`\�i _?HZ+ `%UE9Vbrt)u;XCbl\=Y�<DHrlFfvoÌ)?âwv"@Y83fxӐd}^(Bh/䦥4 Ob7�: (Y{`KgwRk +ּ߿5>Ќb4|x r #ϋgs?>C]pWֵzLkj�1+K9.\q�7Shzb Y oYׁ\_~�`� p=#jQp|({ދ|tI3B �Ym3$Jn 4smֶ֠RkJnnFdՀ`� 6ϼDF 4c++)yK ^z;yܱr&u8ǢrK! >󱳔$@KKusm}+m<#ϲܯ>ԍmWlcEe-[uTn~''zO@ퟯedwȵٮx[ 3�>[o|N^Q$a"b4|YEvV\q7uH_㵭ː} &@ڼz�(1{Lk9?&& AởU4l4eoeU�LRx(42ex[+ yOr\�J՚׬!gZrP)M_lMuc @z F'.�p @k^B�? 2#':av2a#1x{P\�cgZ౿]-[,̵Rx8s1RH'�D&v^�B&@v5޹0p,|Ă w}WD[pL+g* +0w@ <%QܱQE%T"JXPyɛNS4J��xc&,+j,epX=�*Ç4? Ҽ"k0EF=�< *ȉ]K�X8_ B�*(#crb1p#WRhhqM'oQj \4* 5~ C#T 0 #oӇ-kCU |!.x,/u\S0/p'"+?{"+sz7H FA��"\ ,#+_=c|~� �i\rj"u[)?ikT4 C`1c˵ŕyDhλ/`١\Gޅ6§yMi4"j6qٛCIW Nả �h}I_s2�Y#,"Ixgi|?{~gh �$H$eLCն~]xs@aY_sy%+ 'M | : riF7܍orm0^T\ޟ�)ǀEO5~T<{>M=-dSI" eܲ׷@*ԍ6.dEnApҎys;F={AK_H^3 a\{ZSg m_@fԍ&@Z $K�EA! 9 RFdrdGG(26]93~fXM,.3Z{A] TL2aNU45Wfr@b$�ȉ9^KRζhm2eʔ)SL2eʔ)SL'1����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/sonata/pixmaps/sonatacd-large.png������������������������������������������������������0000664�0000000�0000000�00000011562�13771420143�0021353�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������3���sRGB����bKGD������ pHYs�� �� B(x���tIME @4|)��IDATx]vH.fI&gcf&37ح>-6 ޠP>t_��v">v>޶ھxt0 hG 0 H7��qu]nPtL?1aJ}_wy]C[{�~mׂ(TO^j�@QPB,˔/޶A|iEQ-$Tُ3Ǟ�qCY)0ƔZLn3U*SUZ$yzNxyAm@,!2`5X{1wM6u`%⽊&sp] À,(͠jXM' 8n5sh ǠI٪e]hj+˒0 ! C8Psפ!mܣ"6i יjBo2JċX(29E1vMYb@Q1 0M}2QQ,ys, sV6ŭօ>\OXAnB i *QvcYL$,1fUp&^.Ωȫ* A`2 q84syl6Z1p2M'Ž*'\Rʟ1eC.s`IFaeY\6CO1 R qbHǒ4M,KceUi YeYPdYv0ɽ¦ QqjyTp`7p$Ii^5kŸ#,3U %ܩzLmY삣849DR;'YG̈́&Rz2S(˒s\`J)AEPJ1YݦW؇W IE/Rzp!xUY$4%dYQie`IymQcom) ,ګÝ G@iz¶m, 8B#m#mX 1d]4{msp'q_ $<mk4M/:{m*Y}j)Bfwj$r$I I#! F-VS ! 9Ҕuٖ$ AeYa)zyM!_g&f3”u94M!c00fi)9XNS2w)-0X!b1Mӓ*H64YGME)Iv;hp,b I9VWRߕy~:Uܩn[eM=qWbyUxmBPՑ:6Y/UNɻAUxMK *�kufiz�;;*'Xd]%؅>dl9ԔR LaP-MS}Z){(BOUzW msHZ*cͅkPR)Fe C *Xfssu\cs]+0:…8ťN!m�_cYgP2 (&C:f<A*E'ӧb 4Cu|}}iS9W_Oq\J�yi'%If^buGs,5yud]U"A𘌖=Eu{&}sdWМv;XT8`Yf%]& AMu*^U%|||h~BU]y BM.U1}E%u6DoTց{IYLJd6)kR"Mh LM^]=3yu"]sM]kI8xڂ]F_ zșO@l!4$Y}_ȫj-F֛�%EU[qmTׯB6OUo6 +դ< Ǣo6^m\tiQ$3gipZ'ؕWAu\ (i:TMJe>d]'oGkՍʞc]F躒(tHFZVSا:oB$'DtZ;$CTb^$ |~~uCd$WX} T_u]E47zk@S@d}A۸SE7KCrSiKX]^pÂM"FڻIuy9Ӑ eK츋 ng<ZQc8, 8ֱC1X6qd[SMMr9"]k�k~~jp ^j͠j=;>l6DX*di͠*HW+օJf0YՉuvbPS KFTW58! CH(t]EkYbh5 U1n{ f'qCQi VԹ9DeC�J4xd.<<<C㾞 ��O*]aV hUPG!^$ <<+a=p1d+"="Md5joZvtjiB<9|||LY F4Eh= 1$I§:cDʲ*0`Z뺓hcmI}˂3 RF,˽aG`oSX,%xO XT}'A0 1dYVxBEsX.�_aJ)n;r1!jҘ<Gl Mi\bbpR ߿�,ځy*rfMz{'}V8#}Vz"ʲTv H;NxBVVsliF`uP2)r<"u,}{ h8v?yJi4Ma5`.Z N|XŁ17\.MS>E<n{&]'W_[$߿gmcoTG2fooo<8\.gNXudnx|+mK8Pkx{{,<(=ň|_,[c1чmi1ڪ7~~}}흓z ///\.!"pS,B^$%Y>\.~XI8n@ȻLӜ[d73ux|| shuזeVCMDMzc^P۶fB`ƤD9 'S_)l"2އL\J 8w0 &U,..iV&N,bH%8Q^Q|>W936`,P ,Ihmk0<Nzh,MYNSeYyM,;Z˸']jĀ(N8ע8AA+n{@B~E ,BԼb�jd@{0IiТ(&WED�@h .iUJD;7'5mɲ� Z+H9ԤVcU%qŰii e6/Bs-m^o욬Rv<LkiAT,i,_~Aezz r`@yCj?A]\a[\zt$MZ3^adh?`5]kiRY'um<Uc-ܪH&w5/2^IOv bv 6*HwZ%[,qLL*2F,qc5t$9*Z9rJE[I!BqF Tk`v;`͝r]U[xC&QmKY$I'ohdYs-#aԴ+!͠(hDMJT)D 3i Y8!M\w8Un&R:&"cq|M\p&0^Bң� M"Ku R>&c#.%^`'crTsm$8[u ɚ18z$7F\Y?WBlu[6Z. !B+?/AcrKBN5dy\UVBO58@M/(!ۭ&gT� "K6nO *�K 뺓w-Aoֵ }&<o0,N ktkXFG)ԉ!sjU?\zC1~ND98E˲`ہm0ϵiTQuV 7Qu pФ^r56Mo۶ eYmy^˴.nNcUћ88ΤceE 3Ra\F)( MS>*wJ�cAǼU*XհD`YEIL`1ct,'10۶qp0\턝PK]WOOfX˲m,&j,xk2yX&4MvB8,˺zC^=]}Qs1PpdҋKEmïp-VNfY2^404ͽ@iUڦit"}0N[ɭwv6M!0 0 c5ۛ {>x/+>|#4@PUT5u5Thc_@rq`i:J�S1\?3@/ j!Lf^_%, W\~#˟B`>ARx~~3Rxxx��\gTi/6ZQNgGMϟz `/0 <@K'����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/sonata/pixmaps/sonatacd.png������������������������������������������������������������0000664�0000000�0000000�00000004504�13771420143�0020261�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���M���M��� ���sRGB����bKGD������ pHYs�� �� B(x���tIME<q��IDATx\v$%"oIJbgGnsI>G!a~,CUUih#�IYR }ʲDUU�ڦ}s<e_0)yxxQ'm#z_a*EQEC37S�9~ EQ��p8M47B'n~קiBJ ,CQv3Pce y}w]e뾚oX)%8TCrCUU!cǶfH+RE-iy.^tQRՕ(&ihC5=)s} c B98`|yB#Mʲ q# CE1 ׈h P@UU(EQNݧqt^Ҳ(*6 5YAJ<hCڼ1:nH�Ly1]QȲG$0MY!"$I(xbH`1p ,UU[`7UV$|҃1Ơ:4MCeqU6^$8PU0E#T3 A M˘\8_EE(e"&eY4 á榋shiu 7Yi fUUq8ubwvV61Ҫ&Y`sJǁ(}6Fϩ&caD22ũb&Enum>b0 ~V21^^^X3Km!AJ\SƜ{{.EMִ))Sӏ5\ Ͳ աiuuҧU^UUPUa"eY"A(i( `4D`SDY<Fbv89<|I%n$ ޺0h`S+MTUuvfYӠ[s>r%^:qibݢ( ܛYE4(2ɏ%Iv{qvi3틦|j"NU>=�5ZiZ3SUN'ߋض]WkܲYJē$kXS5Q6j~%Y;ufO>iY#kJt]o|Փq[6VLjp2Q>֙n9v{W5VwOqfoK`}߿h@LJ4}$ |GEQjdž<Q+O'.65R )H-.U"eYHӴ5DՕ[(c-ٽiN8PU?@UU ۶oEc}ZSn4M^[}0 oE7i,zv%%IE z͏ǩGI,O ?hXVXVHsV+vsk#І*eY^^Pҟ),znUq$I˅\;Fftׯ�0 ocl<)V1y\ׅ5(t~(*Nc0My#YymQOcW])}~~veY<eYböm͓Lo0 y=ؘ|80 z 'n 1KfG' l67/Md驞تiBh~LC+oŅ(0 5lo!4 5Th囟Oȿr4f<Oic˲mQ_�OgUnO)MxhJQ %]nQ:NCi~shw|J$iDxn ij[GΛ6;)ױc7i~8mRƖO;ёۂ Ϳ9JSx/sO-MϹT hl.(*Q= F'[ûLh}g㴾ܴ"rq%~ket{o4]q<yw r5| Jݛ}b)O7 87Me�9ŒAJYGl".d8hU)gs]a 5KTvZ۶g{qEb i]0MeM^b)8zZJAĵ"sq ]a&4MvZ2MSDQ48ݛ ^EМ5.IxI4$.I \5'y47K)c}׷v�1WfCx~~^'-)yxxiթxzz]&mj"̀!VU^' btPjr@����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/sonata/playlists.py��������������������������������������������������������������������0000664�0000000�0000000�00000024274�13771420143�0016702�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> # Copyright 2009-2014 Jonathan Ballet <jon@multani.info> # # This file is part of Sonata. # # Sonata is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Sonata is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Sonata. If not, see <http://www.gnu.org/licenses/>. """ This module implements a user interface for mpd playlists. Example usage: import playlists self.playlists = playlists.Playlists(self.config, self.window, self.client, lambda:self.UIManager, self.update_menu_visibility, self.iterate_now, self.on_add_item, self.on_playlists_button_press, self.connected, self.TAB_PLAYLISTS) playlistswindow, playlistsevbox = self.playlists.get_widgets() ... self.playlists.populate() ... """ import os from gi.repository import Gtk, Pango, Gdk from sonata import ui, misc, mpdhelper as mpdh from sonata.pluginsystem import pluginsystem, BuiltinPlugin class Playlists: def __init__(self, config, window, mpd, UIManager, update_menu_visibility, iterate_now, on_add_item, on_playlists_button_press, connected, add_selected_to_playlist, TAB_PLAYLISTS, add_tab): self.config = config self.window = window self.mpd = mpd self.UIManager = UIManager self.update_menu_visibility = update_menu_visibility self.iterate_now = iterate_now # XXX Do we really need this? self.on_add_item = on_add_item self.on_playlists_button_press = on_playlists_button_press self.add_selected_to_playlist = add_selected_to_playlist self.connected = connected self.mergepl_id = None self.actionGroupPlaylists = None self.playlist_name_dialog = None self.builder = ui.builder('playlists') # Playlists tab self.playlists = self.builder.get_object('playlists_page_treeview') self.playlists_selection = self.playlists.get_selection() self.playlistswindow = self.builder.get_object('playlists_page_scrolledwindow') self.tab_label = self.builder.get_object('playlists_tab_label') self.tab_label.set_text(TAB_PLAYLISTS) self.tab_widget = self.builder.get_object('playlists_tab_eventbox') self.tab = add_tab(self.playlistswindow, self.tab_widget, TAB_PLAYLISTS, self.playlists) self.playlists.connect('button_press_event', self.on_playlists_button_press) self.playlists.connect('row_activated', self.playlists_activated) self.playlists.connect('key-press-event', self.playlists_key_press) # Initialize playlist data and widget self.playlistsdata = self.builder.get_object('playlists_liststore') self.playlists.set_search_column(1) def get_model(self): return self.playlistsdata def get_widgets(self): return self.playlistswindow def get_treeview(self): return self.playlists def get_selection(self): return self.playlists_selection def populate_playlists_for_menu(self, playlistinfo): if self.mergepl_id: self.UIManager().remove_ui(self.mergepl_id) if self.actionGroupPlaylists: self.UIManager().remove_action_group(self.actionGroupPlaylists) self.actionGroupPlaylists = None self.actionGroupPlaylists = Gtk.ActionGroup('MPDPlaylists') self.UIManager().ensure_update() actions = [ ("Playlist: %s" % playlist.replace("&", ""), Gtk.STOCK_JUSTIFY_CENTER, ui.quote_label(misc.unescape_html(playlist)), None, None, self.on_playlist_menu_click) for playlist in playlistinfo] self.actionGroupPlaylists.add_actions(actions) uiDescription = """ <ui> <popup name="mainmenu"> <menu action="plmenu"> """ uiDescription += "".join('<menuitem action=\"%s\"/>' % action[0] for action in actions) uiDescription += '</menu></popup></ui>' self.mergepl_id = self.UIManager().add_ui_from_string(uiDescription) self.UIManager().insert_action_group(self.actionGroupPlaylists, 0) self.UIManager().get_widget('/hidden').set_property('visible', False) # If we're not on the Current tab, prevent additional menu items # from displaying: self.update_menu_visibility() def on_playlist_save(self, _action): plname = self.prompt_for_playlist_name(_("Save Playlist"), 'savePlaylist') if plname: if self.playlist_name_exists(_("Save Playlist"), 'savePlaylistError', plname): return self.playlist_create(plname) self.mpd.playlistclear(plname) self.add_selected_to_playlist(plname) def playlist_create(self, playlistname, oldname=None): self.mpd.rm(playlistname) if oldname is not None: self.mpd.rename(oldname, playlistname) else: self.mpd.save(playlistname) self.populate() self.iterate_now() def on_playlist_menu_click(self, action): plname = misc.unescape_html(action.get_name().replace("Playlist: ", "")) text = ('Would you like to replace the existing playlist or append' 'these songs?') response = ui.show_msg(self.window, _(text), _("Existing Playlist"), "existingPlaylist", (_("Replace playlist"), 1, _("Append songs"), 2), default=self.config.existing_playlist_option) if response == 1: # Overwrite self.config.existing_playlist_option = response self.mpd.playlistclear(plname) self.add_selected_to_playlist(plname) elif response == 2: # Append songs: self.config.existing_playlist_option = response self.add_selected_to_playlist(plname) def playlist_name_exists(self, title, role, plname, skip_plname=""): # If the playlist already exists, and the user does not want to # replace it, return True; In all other cases, return False playlists = self.mpd.listplaylists() if playlists is None: playlists = self.mpd.lsinfo() for item in playlists: if 'playlist' in item: if item['playlist'] == plname and \ plname != skip_plname: if ui.show_msg(self.window, _(('A playlist with this name already ' 'exists. Would you like to replace it?')), title, role, Gtk.ButtonsType.YES_NO) == \ Gtk.ResponseType.YES: return False else: return True return False def prompt_for_playlist_name(self, title, role, oldname=None): """Prompt user for playlist name""" plname = None if self.connected(): if not self.playlist_name_dialog: self.playlist_name_dialog = self.builder.get_object( 'playlist_name_dialog') self.playlist_name_dialog.set_transient_for(self.window) self.playlist_name_dialog.set_title(title) self.playlist_name_dialog.set_role(role) entry = self.builder.get_object('playlist_name_entry') if oldname: entry.set_text(oldname) else: entry.set_text("") self.playlist_name_dialog.show_all() response = self.playlist_name_dialog.run() if response == Gtk.ResponseType.ACCEPT: plname = misc.strip_all_slashes(entry.get_text()) self.playlist_name_dialog.hide() return plname def populate(self): if self.connected(): self.playlistsdata.clear() playlistinfo = [] playlists = self.mpd.listplaylists() if playlists is None: playlists = self.mpd.lsinfo() for item in playlists: if 'playlist' in item: playlistinfo.append(misc.escape_html(item['playlist'])) # Remove case sensitivity playlistinfo.sort(key=lambda x: x.lower()) for item in playlistinfo: self.playlistsdata.append([Gtk.STOCK_DIRECTORY, item]) self.populate_playlists_for_menu(playlistinfo) def on_playlist_rename(self, _action): model, selected = self.playlists_selection.get_selected_rows() oldname = misc.unescape_html( model.get_value(model.get_iter(selected[0]), 1)) plname = self.prompt_for_playlist_name(_("Rename Playlist"), 'renamePlaylist', oldname) if plname: if self.playlist_name_exists(_("Rename Playlist"), 'renamePlaylistError', plname, oldname): return self.playlist_create(plname, oldname) # Re-select item: row = 0 for pl in self.playlistsdata: if pl[1] == plname: self.playlists_selection.select_path((row,)) return row = row + 1 def playlists_key_press(self, widget, event): if event.keyval == Gdk.keyval_from_name('Return'): self.playlists_activated(widget, widget.get_cursor()[0]) return True def playlists_activated(self, _treeview, _path, _column=0): self.on_add_item(None) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/sonata/plugins/������������������������������������������������������������������������0000775�0000000�0000000�00000000000�13771420143�0015754�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/sonata/plugins/README������������������������������������������������������������������0000664�0000000�0000000�00000001330�13771420143�0016631�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # Information fetching interfaces # lyric_fetching(artist, title) -> Lyrics cover_fetching(artist, album) -> ?? # # Ui interfaces # button_construst() -> Gtk.Button tab_construct() -> (tab content, icon name, tab name, the widget to focus on tab switch) # # Other # # Called when one of the following items are changed: # 1. Current playlist (song added, removed, etc) # 2. Repeat/random/xfade/volume # 3. Currently selected song in playlist # 4. Status (playing/paused/stopped) handle_change_status(state, prevstate, prevsonginfo, songinfo, mpd_time_now) # Called when song changes: playing_song_observers(songinfo) # This gets called when the plugin is loaded, enabled, or disabled: on_enable(state): ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/sonata/plugins/__init__.py�������������������������������������������������������������0000664�0000000�0000000�00000000000�13771420143�0020053�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/sonata/plugins/covers_lastfm.py��������������������������������������������������������0000664�0000000�0000000�00000005142�13771420143�0021177�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������### BEGIN PLUGIN INFO # [plugin] # name: Last.fm covers # plugin_format: 0, 0 # version: 1, 0, 0 # description: Fetch album covers from www.last.fm # author: Jonathan Ballet # author_email: jon@multani.info # url: https://github.com/multani/sonata # license: GPL v3 or later # [capabilities] # cover_fetching: on_cover_fetch ### END PLUGIN INFO import json import logging import shutil import urllib from urllib import error, request, parse from sonata.version import version API_KEY = "41a1b04ed273fe997d2fddc3823dfb0f" logger = logging.getLogger(__name__) def make_user_agent(): return "Sonata/%s +https://github.com/multani/sonata/" % version def on_cover_fetch(artist, album, on_save_cb, on_err_cb): handler = urllib.request.HTTPHandler() opener = urllib.request.build_opener(handler) opener.addheaders = [("User-Agent", make_user_agent())] # First, find the link to the master release of this album search_url = "http://ws.audioscrobbler.com/2.0/?%s" % ( urllib.parse.urlencode({ "method": "album.getInfo", "artist": artist, "album": album, "api_key": API_KEY, "format": "json", })) logger.debug("Querying %r...", search_url) response = opener.open(search_url) lastfm = json.loads(response.read().decode('utf-8')) if 'error' in lastfm: logger.warning("Can't find cover on Last.fm: %s (err=%d)", lastfm['message'], lastfm['error']) return for image in lastfm['album']['image']: if image['size'] != 'mega': continue url = image['#text'] if url == '': logger.info("Found an album on Last.fm, but no cover :( %s", lastfm['album']['url']) continue logger.debug("Downloading %r", url) try: response = opener.open(url) except urllib.error.URLError as e: logger.warning("Can't download %r: %s", url, e) if on_err_cb("Can't download %r: %s" % (url, e)): break else: continue if not on_save_cb(response): break if __name__ == '__main__': import os import subprocess import tempfile logging.basicConfig(level=logging.DEBUG) fp, dest = tempfile.mkstemp(".png") def on_save(data): os.write(fp, data.read()) os.close(fp) return False def on_err(): print("Error!") return True result = on_cover_fetch("Metallica", "Ride the lightning", on_save, on_err) print(dest) subprocess.call(['xdg-open', dest]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/sonata/plugins/gajim_tune.py�����������������������������������������������������������0000664�0000000�0000000�00000003756�13771420143�0020463�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python ### BEGIN PLUGIN INFO # [plugin] # plugin_format: 0, 0 # name: Gajim tune # version: 0, 0, 1 # description: Update the MPRIS (in Gajim etc.) tune information. # author: Fomin Denis # author_email: fominde@gmail.com # url: http://www.nongnu.org/sonata/ # license: GPL v3 or later # [capabilities] # enablables: on_enable # playing_song_observers: on_song_change ### END PLUGIN INFO import dbus.service songlabel = None lasttune = '' tune = None # this gets called when the plugin is loaded, enabled, or disabled: def on_enable(state): global tune if state and not tune: tune = mpdtune() else: if tune: title = artist = album = '' tune.TrackChange(dbus.Dictionary( {'title' : title, 'artist' : artist, 'album' : album} )) def on_song_change(songinfo): global tune, lasttune if lasttune == songinfo: return lasttune = songinfo title = artist = album = '' if not songinfo: # mpd stopped if tune: tune.TrackChange(dbus.Dictionary( {'title' : title, 'artist' : artist, 'album' : album})) return if 'title' in songinfo: title = songinfo['title'] if 'artist' in songinfo: artist = songinfo['artist'] if 'album' in songinfo: album = songinfo['album'] if 'name' in songinfo and artist =='': artist = songinfo['name'] if 'file' in songinfo and title =='': album = songinfo['file'] if not album.startswith('http:'): title = album.rpartition('/')[2] if tune: tune.TrackChange(dbus.Dictionary( {'title' : title, 'artist' : artist, 'album' : album} )) class mpdtune(dbus.service.Object): def __init__(self): super().__init__(dbus.SessionBus(), '/Player') @dbus.service.signal(dbus_interface = 'org.freedesktop.MediaPlayer') def TrackChange(self, trackinfo): return ������������������sonata-1.7.0/sonata/plugins/localmpd.py�������������������������������������������������������������0000664�0000000�0000000�00000011371�13771420143�0020124�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ # this is the magic interpreted by Sonata, referring to tab_construct below: ### BEGIN PLUGIN INFO # [plugin] # plugin_format: 0, 0 # name: Local MPD # version: 0, 0, 1 # description: A tab for controlling local MPD. # author: Tuukka Hastrup # author_email: Tuukka.Hastrup@iki.fi # url: http://www.nongnu.org/sonata/ # license: GPL v3 or later # [capabilities] # tab_construct: tab_construct ### END PLUGIN INFO import subprocess, locale, os from pwd import getpwuid from gi.repository import GLib, Gtk from sonata.misc import escape_html from sonata import ui class Netstat: TCP_STATE_NAMES = ("ESTABLISHED SYN_SENT SYN_RECV FIN_WAIT1 FIN_WAIT2 " "TIME_WAIT CLOSE CLOSE_WAIT LAST_ACK LISTEN CLOSING" .split()) def __init__(self): self.connections = None def _addr(self, part): host, port = part.split(':') port = str(int(port, 16)) if len(host) == 8: parts = [host[0:2], host[2:4], host[4:6], host[6:8]] parts = [str(int(x, 16)) for x in parts] host = '.'.join(reversed(parts)) else: host = "IPV6" # FIXME if host == '0.0.0.0': host = '*' elif host == '127.0.0.1': host = 'localhost' if port == '0': port = '*' return (host, port) def read_connections(self): def fromhex(x): return int(x, 16) self.connections = [] for name in '/proc/net/tcp', '/proc/net/tcp6': f = open(name,'rt') headings = f.readline() for line in f: parts = line.split() if len(parts) < 10: continue # broken line local = self._addr(parts[1]) remote = self._addr(parts[2]) state = self.TCP_STATE_NAMES[ fromhex(parts[3])-1] queueparts = parts[4].split(':') queues = tuple(map(fromhex,queueparts)) uid, _timeout, inode = map(int, parts[7:10]) if len(parts[1].split(":")[0]) == 8: proto = "tcp" else: proto = "tcp6" self.connections += [(proto, local, remote, state, queues, uid, inode)] def format_connections(self): t = "%-5s %6s %6s %15s:%-5s %15s:%-5s %-11s %s" headings = "Proto Send-Q Recv-Q Local Port Remote Port State User".split() return (t % tuple(headings) + '\n' + '\n'.join([t % (proto, rxq, txq, localh, localp, remoteh, remotep, state, getpwuid(uid)[0]) for proto, (localh, localp), (remoteh, remotep), state, (txq, rxq), uid, inode in self.connections if localp == '6600' or remotep == '6600' or getpwuid(uid)[0] == 'mpd'])) def update(label): # schedule next update GLib.timeout_add(1000, update, label) # don't update if not visible if not hasattr(label, "window") or not label.get_window().is_viewable(): return netstat = Netstat() netstat.read_connections() netstats = netstat.format_connections() # XXX replace the shell commands with python code commands = [ (_("Processes"), "ps wwu -C mpd".split()), (_("Files"), ["sh", "-c", "ls -ldh /etc/mpd.conf /var/lib/mpd " "/var/lib/mpd/* /var/lib/mpd/*/*"]), ] outputs = [(title, subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE ).communicate()) for title, command in commands] sections = [outputs[0], (_("Networking"), (netstats, "")), outputs[1]] text = '\n'.join(["<b>%s</b>\n<tt>%s</tt><i>%s</i>\n" % (title, escape_html(stdout), escape_html(stderr)) for title, (stdout, stderr) in sections]) label.set_markup(text.decode(locale.getpreferredencoding(), 'replace')) # nothing magical here, this constructs the parts of the tab when called: def tab_construct(): builder = ui.builder('localmpd', 'plugins') editbutton = builder.get_object('localmpd_edit_button') editbutton.connect('clicked', lambda *args: subprocess.Popen( ["gksu", "xdg-open", "/etc/mpd.conf"])) restartbutton = builder.get_object('localmpd_restart_button') restartbutton.connect('clicked', lambda *args:subprocess.Popen( ["gksu", "service", "mpd", "restart"])) label = builder.get_object('localmpd_data_label') update(label) window = builder.get_object('localmpd_scrolledwindow') window.show_all() tab_widget = builder.get_object('localmpd_tab_eventbox') # (tab content, icon name, tab name, the widget to focus on tab switch) return (window, tab_widget, "Local MPD", None) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/sonata/plugins/lyricwiki.py������������������������������������������������������������0000664�0000000�0000000�00000004526�13771420143�0020343�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ ### BEGIN PLUGIN INFO # [plugin] # plugin_format: 0, 0 # name: LyricWiki # version: 0, 2, 0 # description: Fetch lyrics from lyrics.wikia.com. # author: Anton Lashkov # author_email: Lenton_91@mail.ru # url: # license: GPL v3 or later # [capabilities] # lyrics_fetching: get_lyrics ### END PLUGIN INFO import html import logging import re from urllib.request import quote, urlopen from urllib.error import HTTPError logger = logging.getLogger(__name__) BASE_URL = 'http://lyrics.wikia.com/index.php?' EMPTY_LYRICS = "<!-- PUT LYRICS HERE (and delete this entire line) -->" START_MARK = "<div class='lyricbox'>" END_MARK = "<div class='lyricsbreak'>" # Redirect marker such as "#REDIRECT [[The Clash:Police And Thieves]]" RE_REDIRECT = re.compile(r"#REDIRECT \[\[(.*):(.*)\]\]") def get_lyrics(artist, title, recurse_count=0): url = BASE_URL + 'title=%s:%s' % (quote(artist), quote(title)) logger.info("Downloading lyrics from %r", url) try: content = urlopen(url).read().decode('utf-8') except HTTPError as exc: logger.warning("Unable to download lyrics from %r: %s", url, exc) return None if RE_REDIRECT.search(content): if recurse_count >= 10: # OK, we looped a bit too much, just suppose we couldn't find any # lyrics logger.info("Too many redirects to find lyrics for %r: %r", artist, title) return None new_artist, new_title = RE_REDIRECT.search(content).groups() logger.debug("Lyrics for '%s: %s' redirects to '%s: %s'", artist, title, new_artist, new_title) return get_lyrics(new_artist, new_title, recurse_count + 1) if START_MARK in content and END_MARK in content: lyrics = content.split(START_MARK)[1].split(END_MARK)[0].strip() lyrics = html.unescape(lyrics) lyrics = lyrics.replace("<br />", "\n") if lyrics != "" and lyrics != EMPTY_LYRICS: return lyrics else: logger.warning("Unable to find LyricsWiki lyrics markers delimitations") return None if __name__ == "__main__": import argparse parser = argparse.ArgumentParser() parser.add_argument("artist") parser.add_argument("title") args = parser.parse_args() logging.basicConfig(level=logging.DEBUG) print(get_lyrics(args.artist, args.title)) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/sonata/plugins/test.py�����������������������������������������������������������������0000664�0000000�0000000�00000004465�13771420143�0017316�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ # this is the magic interpreted by Sonata, referring to on_enable etc. below: ### BEGIN PLUGIN INFO # [plugin] # plugin_format: 0, 0 # name: Test plugin # version: 0, 0, 1 # description: A simple test plugin. # author: Tuukka Hastrup # author_email: Tuukka.Hastrup@iki.fi # url: http://www.nongnu.org/sonata/ # license: GPL v3 or later # [capabilities] # enablables: on_enable # tab_construct: tab_construct # playing_song_observers: on_song_change # lyrics_fetching: on_lyrics_fetch ### END PLUGIN INFO # nothing magical from here on from gi.repository import Gtk, Gdk, GdkPixbuf, GObject, Pango from sonata.misc import escape_html songlabel = None lyricslabel = None # this gets called when the plugin is loaded, enabled, or disabled: def on_enable(state): global songlabel, lyricslabel if state: songlabel = Gtk.Label("No song info received yet.") songlabel.props.ellipsize = Pango.ELLIPSIZE_END lyricslabel = Gtk.Label("No lyrics requests yet.") lyricslabel.props.ellipsize = Pango.ELLIPSIZE_END else: songlabel = None lyricslabel = None # this constructs the parts of the tab when called: def tab_construct(): vbox = Gtk.VBox() vbox.pack_start(Gtk.Label("Hello world!"), True, True, 0) vbox.pack_start(songlabel, True, True, 0) vbox.pack_start(lyricslabel, True, True, 0) vbox.pack_start(Gtk.Label("(You can modify me at %s)" % __file__.rstrip("c")), True, True, 0) vbox.show_all() # the return value goes off to Base.add_tab(page, stock, text, focus): # (tab content, icon name, tab name, the widget to focus on tab switch) return (vbox, None, "Test plugin", None) # this gets called when a new song is playing: def on_song_change(songinfo): if songinfo: songlabel.set_markup("<b>Info for currently playing song:</b>"+ "\n%s" % escape_html(repr(songinfo))) else: songlabel.set_text("Currently not playing any song.") songlabel.show() # this gets requests for lyrics: def on_lyrics_fetch(callback, artist, title): lyricslabel.set_markup( "Got request for lyrics for artist %r title %r." % (artist, title)) # callback(lyrics, error) GLib.timeout_add( 0, callback, None, "%s doesn't have lyrics for %r." % (__name__, (artist, title))) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/sonata/plugins/ui/���������������������������������������������������������������������0000775�0000000�0000000�00000000000�13771420143�0016371�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/sonata/plugins/ui/localmpd.glade�������������������������������������������������������0000664�0000000�0000000�00000011520�13771420143�0021161�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <interface> <!-- interface-requires gtk+ 3.0 --> <object class="GtkEventBox" id="localmpd_tab_eventbox"> <property name="visible">False</property> <property name="visible_window">False</property> <property name="can_focus">False</property> <child> <object class="GtkBox" id="localmpd_tab_h_box"> <property name="can_focus">False</property> <property name="orientation">horizontal</property> <child> <object class="GtkImage" id="localmpd_tab_image"> <property name="can_focus">False</property> <property name="stock">gtk-home</property> <property name="icon-size">1</property> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="padding">2</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkLabel" id="localmpd_tab_label"> <property name="can_focus">False</property> <property name="label" translatable="yes">Local MPD</property> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="padding">2</property> <property name="position">1</property> </packing> </child> </object> </child> </object> <object class="GtkScrolledWindow" id="localmpd_scrolledwindow"> <property name="can_focus">False</property> <child> <object class="GtkViewport" id="viewport1"> <property name="visible">True</property> <property name="can_focus">False</property> <child> <object class="GtkBox" id="box1"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="border_width">2</property> <property name="orientation">vertical</property> <child> <object class="GtkBox" id="box2"> <property name="visible">True</property> <property name="can_focus">False</property> <child> <object class="GtkButton" id="localmpd_edit_button"> <property name="label" translatable="yes">Edit /etc/mpd.conf</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="use_action_appearance">False</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkButton" id="localmpd_restart_button"> <property name="label" translatable="yes">Restart the mpd service</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="use_action_appearance">False</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkLabel" id="localmpd_data_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="yalign">0</property> <property name="xpad">5</property> <property name="ypad">5</property> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="position">1</property> </packing> </child> </object> </child> </object> </child> </object> </interface> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/sonata/pluginsystem.py�����������������������������������������������������������������0000664�0000000�0000000�00000016626�13771420143�0017423�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> # Copyright 2009-2014 Jonathan Ballet <jon@multani.info> # # This file is part of Sonata. # # Sonata is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Sonata is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Sonata. If not, see <http://www.gnu.org/licenses/>. import configparser from io import StringIO import logging import os import pkgutil import re import sonata.plugins def find_plugin_dirs(): return [ os.path.expanduser('~/.config/sonata/plugins'), '/usr/local/lib/sonata/plugins'] # add dirs from sys.path: sonata.plugins.__path__ = pkgutil.extend_path(sonata.plugins.__path__, sonata.plugins.__name__) # add dirs specific to sonata: sonata.plugins.__path__ = find_plugin_dirs() + sonata.plugins.__path__ class Plugin: def __init__(self, path, name, info, load): self.logger = logging.getLogger(__name__) self.path = path self.name = name self._info = info self._load = load # obligatory plugin info: format_value = info.get('plugin', 'plugin_format') self.plugin_format = tuple(map(int, format_value.split(','))) self.longname = info.get('plugin', 'name') versionvalue = info.get('plugin', 'version') self.version = tuple(map(int, versionvalue.split(','))) self.version_string = '.'.join(map(str, self.version)) self._capabilities = dict(info.items('capabilities')) # optional plugin info: try: self.description = info.get('plugin', 'description') except configparser.NoOptionError: self.description = "" try: self.author = info.get('plugin', 'author') except: self.author = "" try: self.author_email = info.get('plugin', 'author_email') except: self.author_email = "" try: self.iconurl = info.get('plugin', 'icon') except configparser.NoOptionError: self.iconurl = None try: self.url = info.get('plugin', 'url') except: self.url = "" # state: self._module = None # lazy loading self._enabled = False def get_enabled(self): return self._enabled def get_features(self, capability): if not self._enabled or not capability in self._capabilities: return [] module = self._get_module() if not module: return [] features = self._capabilities[capability] try: return [self.get_feature(module, f) for f in features.split(', ')] except KeyboardInterrupt: raise except: self.logger.exception("Failed to access features in plugin %s.", self.name) return [] def get_feature(self, module, feature): obj = module for name in feature.split('.'): obj = getattr(obj, name) return obj def _get_module(self): if not self._module: try: self._module = self._load() except Exception: self.logger.exception("Failed to load plugin %s.", self.name) return None return self._module def force_loaded(self): return bool(self._get_module()) class BuiltinPlugin(Plugin): def __init__(self, name, longname, description, capabilities, object): self.name = name self.longname = longname self.description = description self._capabilities = capabilities self._module = object self.version_string = "Built-in" self.author = self.author_email = self.url = "" self.iconurl = None self._enabled = False def _get_module(self): return self._module class PluginSystem: def __init__(self): self.logger = logging.getLogger(__name__) self.plugin_infos = [] self.notifys = [] def get_info(self): return self.plugin_infos def get(self, capability): return [(plugin, feature) for plugin in self.plugin_infos for feature in plugin.get_features(capability)] def get_from_name(self, name): for plugin in self.plugin_infos: if plugin.longname == name: return plugin return None def notify_of(self, capability, enable_cb, disable_cb): self.notifys.append((capability, enable_cb, disable_cb)) for plugin, feature in self.get(capability): enable_cb(plugin, feature) def set_enabled(self, plugin, state): if plugin._enabled != state: # make notify callbacks for each feature of the plugin: plugin._enabled = True # XXX for plugin.get_features # process the notifys in the order they were registered: order = (lambda x:x) if state else reversed for capability, enable, disable in order(self.notifys): callback = enable if state else disable for feature in plugin.get_features(capability): callback(plugin, feature) plugin._enabled = state def find_plugins(self): for path in sonata.plugins.__path__: if not os.path.isdir(path): continue for entry in os.listdir(path): if entry.startswith('_'): continue # __init__.py etc. if entry.endswith('.py'): try: self.load_info(path, entry[:-3]) except: self.logger.exception("Failed to load info: %s", os.path.join(path, entry)) def load_info(self, path, name): f = open(os.path.join(path, name+".py"), "rt", encoding="utf-8") text = f.read() f.close() pat = r'^### BEGIN PLUGIN INFO.*((\n#.*)*)\n### END PLUGIN INFO' infotext = re.search(pat, text, re.MULTILINE).group(1) uncommented = '\n'.join(line[1:].strip() for line in infotext.split('\n')) info = configparser.SafeConfigParser() info.readfp(StringIO(uncommented)) plugin = Plugin(path, name, info, lambda:self.import_plugin(name)) # add only newest version of each name old_plugin = self.get_from_name(plugin.longname) if old_plugin: if plugin.version > old_plugin.version: self.plugin_infos.remove(old_plugin) self.plugin_infos.append(plugin) else: self.plugin_infos.append(plugin) if not info.options('capabilities'): self.logger.warning("No capabilities in plugin %s.", name) def import_plugin(self, name): # XXX load from a .py file - no .pyc etc. __import__('sonata.plugins', {}, {}, [name], 0) plugin = getattr(sonata.plugins, name) return plugin pluginsystem = PluginSystem() ����������������������������������������������������������������������������������������������������������sonata-1.7.0/sonata/preferences.py������������������������������������������������������������������0000664�0000000�0000000�00000074212�13771420143�0017154�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> # Copyright 2009-2014 Jonathan Ballet <jon@multani.info> # # This file is part of Sonata. # # Sonata is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Sonata is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Sonata. If not, see <http://www.gnu.org/licenses/>. """ This module provides a user interface for changing configuration variables. Example usage: import preferences ... prefs = preferences.Preferences() prefs.on_prefs_real(self.window, self.prefs_window_response, tab callbacks...) """ import gettext, hashlib from gi.repository import Gtk, Gdk, GdkPixbuf from sonata.config import Config from sonata.pluginsystem import pluginsystem from sonata import ui, misc, consts, formatting import os class Extras_cbs: """Callbacks and data specific to the extras tab""" popuptimes = [] notif_toggled = None crossfade_changed = None crossfade_toggled = None class Display_cbs: """Callbacks specific to the display tab""" stylized_toggled = None art_toggled = None playback_toggled = None progress_toggled = None statusbar_toggled = None lyrics_toggled = None trayicon_available = None class Behavior_cbs: """Callbacks and data specific to the behavior tab""" trayicon_toggled = None trayicon_in_use = None sticky_toggled = None ontop_toggled = None decorated_toggled = None infofile_changed = None class Format_cbs: """Callbacks specific to the format tab""" currentoptions_changed = None libraryoptions_changed = None titleoptions_changed = None currsongoptions1_changed = None currsongoptions2_changed = None class Preferences(): """This class implements a preferences dialog for changing configuration variables. Many changes are applied instantly with respective callbacks. Closing the dialog causes a response callback. """ def __init__(self, config, reconnect, renotify, reinfofile, settings_save, populate_profiles_for_menu): self.config = config # These are callbacks to Main self.reconnect = reconnect self.renotify = renotify self.reinfofile = reinfofile self.settings_save = settings_save self.populate_profiles_for_menu = populate_profiles_for_menu # Temporary flag: self.updating_nameentry = False self.prev_host = None self.prev_password = None self.prev_port = None self.window = None self.last_tab = 0 self.display_trayicon = None self.direntry = None self.using_mpd_env_vars = False def on_prefs_real(self): """Display the preferences dialog""" self.builder = ui.builder('preferences') self.provider = ui.css_provider('preferences') self.prefswindow = self.builder.get_object('preferences_dialog') self.prefswindow.set_transient_for(self.window) self.prefsnotebook = self.builder.get_object('preferences_notebook') tabs = ('mpd', 'display', 'behavior', 'format', 'extras', 'plugins') for name in tabs: func = getattr(self, '%s_tab' % name) cbs = globals().get('%s_cbs' % name.capitalize()) func(cbs) close_button = self.builder.get_object('preferences_closebutton') self.prefswindow.show_all() self.prefsnotebook.set_current_page(self.last_tab) close_button.grab_focus() self.prefswindow.connect('response', self._window_response) # Save previous connection properties to determine if we should try to # connect to MPD after prefs are closed: self.prev_host = self.config.host[self.config.profile_num] self.prev_port = self.config.port[self.config.profile_num] self.prev_password = self.config.password[self.config.profile_num] def mpd_tab(self, cbs=None): """Construct and layout the MPD tab""" #frame.set_shadow_type(Gtk.ShadowType.NONE) controlbox = self.builder.get_object('connection_frame_label_widget') profiles = self.builder.get_object('connection_profiles') add_profile = self.builder.get_object('connection_add_profile') remove_profile = self.builder.get_object('connection_remove_profile') self._populate_profile_combo(profiles, self.config.profile_num, remove_profile) nameentry = self.builder.get_object('connection_name') hostentry = self.builder.get_object('connection_host') portentry = self.builder.get_object('connection_port') direntry = self.builder.get_object('connection_dir') self.direntry = direntry direntry.connect('selection-changed', self._direntry_changed, profiles) passwordentry = self.builder.get_object('connection_password') autoconnect = self.builder.get_object('connection_autoconnect') autoconnect.set_active(self.config.autoconnect) autoconnect.connect('toggled', self._config_widget_active, 'autoconnect') # Fill in entries with current profile: self._profile_chosen(profiles, nameentry, hostentry, portentry, passwordentry, direntry) # Update display if $MPD_HOST or $MPD_PORT is set: host, port, password = misc.mpd_env_vars() if host or port: self.using_mpd_env_vars = True if not host: host = "" if not port: port = 0 if not password: password = "" hostentry.set_text(str(host)) portentry.set_value(port) passwordentry.set_text(str(password)) nameentry.set_text(_("Using MPD_HOST/PORT")) for widget in [hostentry, portentry, passwordentry, nameentry, profiles, add_profile, remove_profile]: widget.set_sensitive(False) else: self.using_mpd_env_vars = False nameentry.connect('changed', self._nameentry_changed, profiles, remove_profile) hostentry.connect('changed', self._hostentry_changed, profiles) portentry.connect('value-changed', self._portentry_changed, profiles) passwordentry.connect('changed', self._passwordentry_changed, profiles) profiles.connect('changed', self._profile_chosen, nameentry, hostentry, portentry, passwordentry, direntry) add_profile.connect('clicked', self._add_profile, nameentry, profiles, remove_profile) remove_profile.connect('clicked', self._remove_profile, profiles, remove_profile) def extras_tab(self, cbs): """Construct and layout the extras tab""" if not self.scrobbler.imported(): self.config.as_enabled = False as_checkbox = self.builder.get_object('scrobbler_check') as_checkbox.set_active(self.config.as_enabled) as_user_label = self.builder.get_object('scrobbler_username_label') as_user_entry = self.builder.get_object('scrobbler_username_entry') as_user_entry.set_text(self.config.as_username) as_user_entry.connect('changed', self._as_username_changed) as_pass_label = self.builder.get_object('scrobbler_password_label') as_pass_entry = self.builder.get_object('scrobbler_password_entry') as_pass_entry.set_text(self.config.as_password_md5) as_pass_entry.connect('changed', self._as_password_changed) display_notification = self.builder.get_object('notification_check') display_notification.set_active(self.config.show_notification) time_names = ["%s %s" % (i , ngettext('second', 'seconds', int(i))) for i in cbs.popuptimes if i != _('Entire song')] notification_options = self.builder.get_object('notification_time_combo') for time in time_names: notification_options.append_text(time) notification_options.connect('changed', self._notiftime_changed) notification_options.set_active(self.config.popup_option) notification_locs = self.builder.get_object('notification_loc_combo') notification_locs.set_active(self.config.traytips_notifications_location) notification_locs.connect('changed', self._notiflocation_changed) notifhbox = self.builder.get_object('notification_box') display_notification.connect('toggled', cbs.notif_toggled, notifhbox) if not self.config.show_notification: notifhbox.set_sensitive(False) crossfadespin = self.builder.get_object('crossfade_time') crossfadespin.set_value(self.config.xfade) crossfadespin.connect('value-changed', cbs.crossfade_changed) crossfadelabel2 = self.builder.get_object('crossfade_label') crossfadelabel3 = self.builder.get_object('crossfade_extra_label') crossfadecheck = self.builder.get_object('crossfade_check') crossfadecheck.connect('toggled', self._crossfadecheck_toggled, crossfadespin, crossfadelabel2, crossfadelabel3) crossfadecheck.connect('toggled', cbs.crossfade_toggled, crossfadespin) crossfadecheck.set_active(self.config.xfade_enabled) crossfadecheck.toggled() # Force the toggled callback as_checkbox.connect('toggled', self._as_enabled_toggled, as_user_entry, as_pass_entry, as_user_label, as_pass_label) if not self.config.as_enabled or not self.scrobbler.imported(): for widget in (as_user_entry, as_pass_entry, as_user_label, as_pass_label): widget.set_sensitive(False) def display_tab(self, cbs): """Construct and layout the display tab""" art = self.builder.get_object('art_check') art.set_active(self.config.show_covers) stylized_combo = self.builder.get_object('art_style_combo') stylized_combo.set_active(self.config.covers_type) stylized_combo.connect('changed', cbs.stylized_toggled) art_prefs = self.builder.get_object('art_preferences') art_prefs.set_sensitive(self.config.show_covers) art_combo = self.builder.get_object('art_search_combo') art_combo.set_active(self.config.covers_pref) art_combo.connect('changed', self._config_widget_active, 'covers_pref') #FIXME move into preferences_display.ui? art_location = self.builder.get_object('art_save_combo') for item in ["%s/%s" % (_("SONG_DIR"), item) for item in ("cover.jpg", "album.jpg", "folder.jpg", self.config.art_location_custom_filename or _("custom"))]: art_location.append_text(item) art_location.set_active(self.config.art_location) art_location.connect('changed', self._art_location_changed) art.connect('toggled', cbs.art_toggled, art_prefs) playback = self.builder.get_object('playback_buttons_check') playback.set_active(self.config.show_playback) playback.connect('toggled', cbs.playback_toggled) progress = self.builder.get_object('progressbar_check') progress.set_active(self.config.show_progress) progress.connect('toggled', cbs.progress_toggled) statusbar = self.builder.get_object('statusbar_check') statusbar.set_active(self.config.show_statusbar) statusbar.connect('toggled', cbs.statusbar_toggled) lyrics = self.builder.get_object('lyrics_check') lyrics.set_active(self.config.show_lyrics) lyrics_location = self.builder.get_object('lyrics_save_combo') lyrics_location.set_active(self.config.lyrics_location) lyrics_location.connect('changed', self._lyrics_location_changed) lyrics_location_hbox = self.builder.get_object('lyrics_preferences') lyrics_location_hbox.set_sensitive(self.config.show_lyrics) lyrics.connect('toggled', cbs.lyrics_toggled, lyrics_location_hbox) trayicon = self.builder.get_object('tray_icon_check') self.display_trayicon = trayicon trayicon.set_active(self.config.show_trayicon) trayicon.set_sensitive(cbs.trayicon_available) def behavior_tab(self, cbs): """Construct and layout the behavior tab""" frame = self.builder.get_object('behavior_frame') sticky = self.builder.get_object('behavior_sticky_check') sticky.set_active(self.config.sticky) sticky.connect('toggled', cbs.sticky_toggled) ontop = self.builder.get_object('behavior_ontop_check') ontop.set_active(self.config.ontop) ontop.connect('toggled', cbs.ontop_toggled) decor = self.builder.get_object('behavior_decor_check') decor.set_active(not self.config.decorated) decor.connect('toggled', cbs.decorated_toggled, self.prefswindow) minimize = self.builder.get_object('behavior_minimize_check') minimize.set_active(self.config.minimize_to_systray) minimize.connect('toggled', self._config_widget_active, 'minimize_to_systray') self.display_trayicon.connect('toggled', cbs.trayicon_toggled, minimize) minimize.set_sensitive(cbs.trayicon_in_use) update_start = self.builder.get_object('misc_updatestart_check') update_start.set_active(self.config.update_on_start) update_start.connect('toggled', self._config_widget_active, 'update_on_start') exit_stop = self.builder.get_object('misc_exit_stop_check') exit_stop.set_active(self.config.stop_on_exit) exit_stop.connect('toggled', self._config_widget_active, 'stop_on_exit') infofile_usage = self.builder.get_object('misc_infofile_usage_check') infofile_usage.set_active(self.config.use_infofile) infopath_options = self.builder.get_object('misc_infofile_entry') infopath_options.set_text(self.config.infofile_path) infopath_options.connect('focus_out_event', cbs.infofile_changed) infopath_options.connect('activate', cbs.infofile_changed, None) if not self.config.use_infofile: infopath_options.set_sensitive(False) infofile_usage.connect('toggled', self._infofile_toggled, infopath_options) def format_tab(self, cbs): """Construct and layout the format tab""" playlist_entry = self.builder.get_object('format_playlist_entry') playlist_entry.set_text(self.config.currentformat) library_entry = self.builder.get_object('format_library_entry') library_entry.set_text(self.config.libraryformat) window_entry = self.builder.get_object('format_window_entry') window_entry.set_text(self.config.titleformat) current1_entry = self.builder.get_object('format_current1_entry') current1_entry.set_text(self.config.currsongformat1) current2_entry = self.builder.get_object('format_current2_entry') current2_entry.set_text(self.config.currsongformat2) entries = [playlist_entry, library_entry, window_entry, current1_entry, current2_entry] entry_cbs = (cbs.currentoptions_changed, cbs.libraryoptions_changed, cbs.titleoptions_changed, cbs.currsongoptions1_changed, cbs.currsongoptions2_changed) for entry, cb, next in zip(entries, entry_cbs, entries[1:] + entries[:1]): entry.connect('focus_out_event', cb) entry.connect('activate', lambda _, n: n.grab_focus(), next) format_grid = self.builder.get_object('format_avail_descs') codeset = formatting.formatcodes codes = (codeset[:len(codeset) // 2], codeset[len(codeset) // 2:]) def make_label(content): return Gtk.Label('<small>{}</small>'.format(content), use_markup=True, xalign=0, yalign=0) for column_base, codegroup in enumerate(codes): column = column_base * 2 for row, code in enumerate(codegroup): format_code = make_label("%{}".format(code.code)) format_code.get_style_context().add_class('format_code') format_desc = make_label(code.description) format_grid.attach(format_code, column, row, 1, 1) format_grid.attach(format_desc, column + 1, row, 1, 1) additionalinfo = self.builder.get_object('format_additional_label') # FIXME need to either separate markup from localized strings OR # include markup in the strings and let the translators work around them row = len(codes[0]) enclosed_code = make_label('{ }') enclosed_code.get_style_context().add_class('format_code') enclosed_desc = make_label( _('Info displayed only if all enclosed tags are defined')) enclosed_desc.set_line_wrap(True) enclosed_desc.set_max_width_chars(40) column_code = make_label('|') column_code.get_style_context().add_class('format_code') column_desc = make_label(_('Creates columns in the current playlist')) column_desc.set_line_wrap(True) column_desc.set_max_width_chars(40) for widget in (enclosed_code, enclosed_desc): widget.get_style_context().add_class('additional_format') format_grid.attach(enclosed_code, 0, row, 1, 1) format_grid.attach(enclosed_desc, 1, row, 3, 1) row += 1 format_grid.attach(column_code, 0, row, 1, 1) format_grid.attach(column_desc, 1, row, 3, 1) def plugins_tab(self, cbs=None): """Construct and layout the plugins tab""" self.plugin_UIManager = self.builder.get_object('plugins_ui_manager') menu_handlers = { "plugin_configure": self.plugin_configure, "plugin_about": self.plugin_about } self.builder.connect_signals(menu_handlers) self.pluginview = self.builder.get_object('plugins_treeview') self.pluginselection = self.pluginview.get_selection() plugindata = self.builder.get_object('plugins_store') self.pluginview.connect('button-press-event', self.plugin_click) plugincheckcell = self.builder.get_object('plugins_check_renderer') plugincheckcell.connect('toggled', self.plugin_toggled, (plugindata, 0)) plugindata.clear() for plugin in pluginsystem.get_info(): pb = self.plugin_get_icon_pixbuf(plugin) plugin_text = "<b>" + plugin.longname + "</b> " + plugin.version_string plugin_text += "\n" + plugin.description enabled = plugin.get_enabled() plugindata.append((enabled, pb, plugin_text)) def _window_response(self, window, response): if response == Gtk.ResponseType.CLOSE: self.last_tab = self.prefsnotebook.get_current_page() #XXX: These two are probably never triggered if self.config.show_lyrics and self.config.lyrics_location != consts.LYRICS_LOCATION_HOME: if not os.path.isdir(self.config.current_musicdir): ui.show_msg(self.window, _("To save lyrics to the music file's directory, you must specify a valid music directory."), _("Music Dir Verification"), 'musicdirVerificationError', Gtk.ButtonsType.CLOSE) # Set music_dir entry focused: self.prefsnotebook.set_current_page(0) self.direntry.grab_focus() return if self.config.show_covers and self.config.art_location != consts.ART_LOCATION_HOMECOVERS: if not os.path.isdir(self.config.current_musicdir): ui.show_msg(self.window, _("To save artwork to the music file's directory, you must specify a valid music directory."), _("Music Dir Verification"), 'musicdirVerificationError', Gtk.ButtonsType.CLOSE) # Set music_dir entry focused: self.prefsnotebook.set_current_page(0) self.direntry.grab_focus() return if not self.using_mpd_env_vars: if self.prev_host != self.config.host[self.config.profile_num] or self.prev_port != self.config.port[self.config.profile_num] or self.prev_password != self.config.password[self.config.profile_num]: # Try to connect if mpd connection info has been updated: ui.change_cursor(Gdk.Cursor.new(Gdk.CursorType.WATCH)) self.reconnect() self.settings_save() self.populate_profiles_for_menu() ui.change_cursor(None) window.destroy() def _config_widget_active(self, widget, member): """Sets a config attribute to the widget's active value""" setattr(self.config, member, widget.get_active()) def _as_enabled_toggled(self, checkbox, *widgets): if checkbox.get_active(): self.scrobbler.import_module(True) if self.scrobbler.imported(): self.config.as_enabled = checkbox.get_active() self.scrobbler.init() for widget in widgets: widget.set_sensitive(self.config.as_enabled) elif checkbox.get_active(): checkbox.set_active(False) def _as_username_changed(self, entry): if self.scrobbler.imported(): self.config.as_username = entry.get_text() self.scrobbler.auth_changed() def _as_password_changed(self, entry): if self.scrobbler.imported(): self.config.as_password_md5 = hashlib.md5( entry.get_text().encode('utf-8')).hexdigest() self.scrobbler.auth_changed() def _nameentry_changed(self, entry, profile_combo, remove_profiles): if not self.updating_nameentry: profile_num = profile_combo.get_active() self.config.profile_names[profile_num] = entry.get_text() self._populate_profile_combo(profile_combo, profile_num, remove_profiles) def _hostentry_changed(self, entry, profile_combo): profile_num = profile_combo.get_active() self.config.host[profile_num] = entry.get_text() def _portentry_changed(self, entry, profile_combo): profile_num = profile_combo.get_active() self.config.port[profile_num] = entry.get_value_as_int() def _passwordentry_changed(self, entry, profile_combo): profile_num = profile_combo.get_active() self.config.password[profile_num] = entry.get_text() def _direntry_changed(self, entry, profile_combo): profile_num = profile_combo.get_active() self.config.musicdir[profile_num] = misc.sanitize_musicdir(entry.get_filename()) def _add_profile(self, _button, nameentry, profile_combo, remove_profiles): self.updating_nameentry = True profile_num = profile_combo.get_active() self.config.profile_names.append(_("New Profile")) nameentry.set_text(self.config.profile_names[-1]) self.updating_nameentry = False self.config.host.append(self.config.host[profile_num]) self.config.port.append(self.config.port[profile_num]) self.config.password.append(self.config.password[profile_num]) self.config.musicdir.append(self.config.musicdir[profile_num]) self._populate_profile_combo(profile_combo, len(self.config.profile_names)-1, remove_profiles) self.populate_profiles_for_menu() def _remove_profile(self, _button, profile_combo, remove_profiles): profile_num = profile_combo.get_active() if profile_num == self.config.profile_num: # Profile deleted, revert to first profile: self.config.profile_num = 0 self.reconnect(None) self.config.profile_names.pop(profile_num) self.config.host.pop(profile_num) self.config.port.pop(profile_num) self.config.password.pop(profile_num) self.config.musicdir.pop(profile_num) self.populate_profiles_for_menu() if profile_num > 0: self._populate_profile_combo(profile_combo, profile_num-1, remove_profiles) else: self._populate_profile_combo(profile_combo, 0, remove_profiles) def _profile_chosen(self, profile_combo, nameentry, hostentry, portentry, passwordentry, direntry): profile_num = profile_combo.get_active() self.updating_nameentry = True nameentry.set_text(str(self.config.profile_names[profile_num])) self.updating_nameentry = False hostentry.set_text(str(self.config.host[profile_num])) portentry.set_value(self.config.port[profile_num]) passwordentry.set_text(str(self.config.password[profile_num])) direntry.set_current_folder(misc.sanitize_musicdir(self.config.musicdir[profile_num])) def _populate_profile_combo(self, profile_combo, active_index, remove_profiles): new_model = Gtk.ListStore(str) new_model.clear() profile_combo.set_model(new_model) for i, profile_name in enumerate(self.config.profile_names): combo_text = "[%s] %s" % (i+1, profile_name[:15]) if len(profile_name) > 15: combo_text += "..." profile_combo.append_text(combo_text) profile_combo.set_active(active_index) # Enable remove button if there is more than one profile remove_profiles.set_sensitive(len(self.config.profile_names) > 1) def _lyrics_location_changed(self, combobox): self.config.lyrics_location = combobox.get_active() def _art_location_changed(self, combobox): if combobox.get_active() == consts.ART_LOCATION_CUSTOM: dialog = self.builder.get_object('custom_art_dialog') # Prompt user for playlist name: entry = self.builder.get_object('custom_art_entry') dialog.vbox.show_all() response = dialog.run() if response == Gtk.ResponseType.ACCEPT: self.config.art_location_custom_filename = entry.get_text().replace("/", "") iter = combobox.get_active_iter() model = combobox.get_model() model.set(iter, 0, "SONG_DIR/" + (self.config.art_location_custom_filename or _("custom"))) else: # Revert to non-custom item in combobox: combobox.set_active(self.config.art_location) dialog.hide() self.config.art_location = combobox.get_active() def _crossfadecheck_toggled(self, button, *widgets): button_active = button.get_active() for widget in widgets: widget.set_sensitive(button_active) def _notiflocation_changed(self, combobox): self.config.traytips_notifications_location = combobox.get_active() self.renotify() def _notiftime_changed(self, combobox): self.config.popup_option = combobox.get_active() self.renotify() def _infofile_toggled(self, button, infofileformatbox): self.config.use_infofile = button.get_active() infofileformatbox.set_sensitive(self.config.use_infofile) if self.config.use_infofile: self.reinfofile() def plugin_click(self, _widget, event): if event.button == 3: self.plugin_UIManager.get_widget('/pluginmenu').popup(None, None, None, None, event.button, event.time) def plugin_toggled(self, _renderer, path, user_data): model, column = user_data enabled = not model[path][column] plugin = pluginsystem.get_info()[int(path)] pluginsystem.set_enabled(plugin, enabled) if enabled: # test that the plugin loads or already was loaded if not plugin.force_loaded(): enabled = False pluginsystem.set_enabled(plugin, enabled) model[path][column] = enabled def plugin_about(self, _widget): plugin = self.plugin_get_selected() iconpb = self.plugin_get_icon_pixbuf(plugin) about_text = plugin.longname + "\n" + plugin.author + "\n" if len(plugin.author_email) > 0: about_text += "<" + plugin.author_email + ">" self.about_dialog = Gtk.AboutDialog() self.about_dialog.set_name(plugin.longname) self.about_dialog.set_role('about') self.about_dialog.set_version(plugin.version_string) if len(plugin.description.strip()) > 0: self.about_dialog.set_comments(plugin.description) if len(plugin.author.strip()) > 0: author = plugin.author if len(plugin.author.strip()) > 0: author += ' <' + plugin.author_email + '>' self.about_dialog.set_authors([author]) if len(plugin.url.strip()) > 0: self.about_dialog.connect("activate-link", self.plugin_show_website) self.about_dialog.set_website(plugin.url) self.about_dialog.set_logo(iconpb) self.about_dialog.connect('response', self.plugin_about_close) self.about_dialog.connect('delete_event', self.plugin_about_close) self.about_dialog.show_all() def plugin_about_close(self, _event, _data=None): self.about_dialog.hide() return True def plugin_show_website(self, _dialog, link): return misc.browser_load(link, self.config.url_browser, \ self.window) def plugin_configure(self, _widget): plugin = self.plugin_get_selected() ui.show_msg(self.prefswindow, "Nothing yet implemented.", "Configure", "pluginConfigure", Gtk.ButtonsType.CLOSE) def plugin_get_selected(self): model, i = self.pluginselection.get_selected() plugin_num = model.get_path(i).get_indices()[0] return pluginsystem.get_info()[plugin_num] def plugin_get_icon_pixbuf(self, plugin): pb = plugin.iconurl try: pb = GdkPixbuf.Pixbuf.new_from_file(pb) except: pb = self.pluginview.render_icon(Gtk.STOCK_EXECUTE, Gtk.IconSize.LARGE_TOOLBAR) return pb ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/sonata/scrobbler.py��������������������������������������������������������������������0000664�0000000�0000000�00000022544�13771420143�0016631�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> # Copyright 2009-2014 Jonathan Ballet <jon@multani.info> # # This file is part of Sonata. # # Sonata is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Sonata is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Sonata. If not, see <http://www.gnu.org/licenses/>. """ This module makes Sonata submit the songs played to a Last.fm account. Example usage: import scrobbler self.scrobbler = scrobbler.Scrobbler(self.config) self.scrobbler.import_module() self.scrobbler.init() ... self.scrobbler.handle_change_status(False, self.prevsonginfo) """ import logging import os import sys import threading # init, np, post start threads init_thread, do_np, do_post import time audioscrobbler = None # imported when first needed from sonata import mpdhelper as mpdh class Scrobbler: def __init__(self, config): self.logger = logging.getLogger(__name__) self.config = config self.scrob = None self.scrob_post = None self.scrob_start_time = "" self.scrob_playing_duration = 0 self.scrob_last_prepared = "" self.elapsed_now = None def import_module(self, _show_error=False): """Import the audioscrobbler module""" # We need to try to import audioscrobbler either when the app starts # (if as_enabled=True) or if the user enables it in prefs. global audioscrobbler if audioscrobbler is None: from sonata import audioscrobbler def imported(self): """Return True if the audioscrobbler module has been imported""" return audioscrobbler is not None def init(self): """Initialize the Audioscrobbler support if enabled and configured""" if audioscrobbler is not None and self.config.as_enabled and \ len(self.config.as_username) > 0 and \ len(self.config.as_password_md5) > 0: thread = threading.Thread(target=self.init_thread) thread.name = "Scrobbler" thread.daemon = True thread.start() def init_thread(self): if self.scrob is None: self.scrob = audioscrobbler.AudioScrobbler() if self.scrob_post is None: self.scrob_post = self.scrob.post(self.config.as_username, self.config.as_password_md5, verbose=True) else: if self.scrob_post.authenticated: return # We are authenticated else: self.scrob_post = self.scrob.post(self.config.as_username, self.config.as_password_md5, verbose=True) try: self.scrob_post.auth() except Exception as e: self.logger.error("Error authenticating audioscrobbler: %r", e) self.scrob_post = None if self.scrob_post: self.retrieve_cache() def handle_change_status(self, state, prevstate, prevsonginfo, songinfo=None, mpd_time_now=None): """Handle changes to play status, submitting info as appropriate""" if prevsonginfo and 'time' in prevsonginfo: prevsong_time = prevsonginfo.time else: prevsong_time = None if state in ('play', 'pause'): elapsed_prev = self.elapsed_now self.elapsed_now, length = [float(c) for c in mpd_time_now.split(':')] current_file = songinfo.file if prevstate == 'stop': # Switched from stop to play, prepare current track: self.prepare(songinfo) elif (prevsong_time and (self.scrob_last_prepared != current_file or (self.scrob_last_prepared == current_file and elapsed_prev and self.elapsed_now <= 1 and self.elapsed_now < elapsed_prev and length > 0))): # New song is playing, post previous track if time criteria is # met. In order to account for the situation where the same # song is played twice in a row, we will check if previous # elapsed time was larger than current and we're at the # beginning of the same song now if self.scrob_playing_duration > 4 * 60 or \ self.scrob_playing_duration > int(prevsong_time) / 2: if self.scrob_start_time != "": self.post(prevsonginfo) # Prepare current track: self.prepare(songinfo) # Keep track of the total amount of time that the current song # has been playing: now = time.time() if prevstate != 'pause': self.scrob_playing_duration += now - self.scrob_prev_time self.scrob_prev_time = now else: # stopped: self.elapsed_now = 0 if prevsong_time: if self.scrob_playing_duration > 4 * 60 or \ self.scrob_playing_duration > int(prevsong_time) / 2: # User stopped the client, post previous track if time # criteria is met: if self.scrob_start_time != "": self.post(prevsonginfo) def auth_changed(self): """Try to re-authenticate""" if self.scrob_post: if self.scrob_post.authenticated: self.scrob_post = None def prepare(self, songinfo): if audioscrobbler is not None: self.scrob_start_time = "" self.scrob_last_prepared = "" self.scrob_playing_duration = 0 self.scrob_prev_time = time.time() if self.config.as_enabled and songinfo: # No need to check if the song is 30 seconds or longer, # audioscrobbler.py takes care of that. if 'time' in songinfo: self.np(songinfo) self.scrob_start_time = str(int(time.time())) self.scrob_last_prepared = songinfo.file def np(self, songinfo): thread = threading.Thread(target=self.do_np, args=(songinfo,)) thread.name = "ScrobblerNowPlaying" thread.daemon = True thread.start() def do_np(self, songinfo): self.init() if self.config.as_enabled and self.scrob_post and songinfo: if 'artist' in songinfo and \ 'title' in songinfo and \ 'time' in songinfo: album = songinfo.get('album', '') tracknumber = songinfo.get('track', '') try: self.scrob_post.nowplaying(songinfo.artist, songinfo.title, songinfo.time, tracknumber, album) except: self.logger.exception( "Unable to send 'now playing' data to the scrobbler") time.sleep(10) def post(self, prevsonginfo): self.init() if self.config.as_enabled and self.scrob_post and prevsonginfo: if 'artist' in prevsonginfo and \ 'title' in prevsonginfo and \ 'time' in prevsonginfo: album = prevsonginfo.get('album', '') tracknumber = prevsonginfo.get('track', '') try: self.scrob_post.addtrack( prevsonginfo.artist, prevsonginfo.title, prevsonginfo.time, self.scrob_start_time, tracknumber, album) except: self.logger.critical("Unable to add track to scrobbler") thread = threading.Thread(target=self.do_post) thread.name = "ScrobblerPost" thread.daemon = True thread.start() self.scrob_start_time = "" def do_post(self): for _i in range(0, 3): if not self.scrob_post: return if len(self.scrob_post.cache) == 0: return try: self.scrob_post.post() except audioscrobbler.AudioScrobblerConnectionError as e: self.logger.exception( "Error while posting data to the scrobbler") time.sleep(10) def save_cache(self): """Save the cache in a file""" filename = os.path.expanduser('~/.config/sonata/ascache') if self.scrob_post: self.scrob_post.savecache(filename) def retrieve_cache(self): filename = os.path.expanduser('~/.config/sonata/ascache') if self.scrob_post: self.scrob_post.retrievecache(filename) ������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/sonata/song.py�������������������������������������������������������������������������0000664�0000000�0000000�00000002027�13771420143�0015614�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> # Copyright 2009-2014 Jonathan Ballet <jon@multani.info> # # This file is part of Sonata. # # Sonata is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Sonata is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Sonata. If not, see <http://www.gnu.org/licenses/>. from collections import namedtuple _SongRecord = namedtuple('SongRecord', ['album', 'artist', 'genre', 'year', 'path']) def SongRecord(album=None, artist=None, genre=None, year=None, path=None): return _SongRecord(album, artist, genre, year, path) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/sonata/streams.py����������������������������������������������������������������������0000664�0000000�0000000�00000017774�13771420143�0016343�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> # Copyright 2009-2014 Jonathan Ballet <jon@multani.info> # # This file is part of Sonata. # # Sonata is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Sonata is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Sonata. If not, see <http://www.gnu.org/licenses/>. """ This module implements a user interface for bookmarking remote music streams. Example usage: import streams self.streams = streams.Streams(self.config, self.window, self.on_streams_button_press, self.on_add_item, self.settings_save, self.TAB_STREAMS) streamswindow, streamsevbox = self.streams.get_widgets() ... self.streams.populate() ... """ import logging import os from gi.repository import Gtk, Gdk, Pango from sonata import misc, ui logger = logging.getLogger(__name__) def parse_stream(stream_uri, fp): default = [stream_uri] # We only download the first 4k bytes, which should be sufficient to get an # idea if the stream is a M3U/PLS/etc. playlist or a binary file. content = fp.read(4000) try: content = content.decode() # If we can decode the first bytes, then read up to 64k bytes to parse # this as a playlist. content = content + fp.read(60000).decode() except UnicodeDecodeError: # Looks a binary content... logger.info("Adding binary stream from %s", stream_uri) return default if "[playlist]" in content: # pls: return parse_pls(content) elif "#EXTM3U" in content: # extended m3u: return parse_m3u(content) elif "http://" in content: # m3u or generic list: return parse_m3u(content) else: return default def parse_pls(f): lines = f.split("\n") for line in lines: line = line.replace('\r', '') delim = line.find("=") + 1 if delim > 0: line = line[delim:] if len(line) > 7 and line[0:7] == 'http://': yield line elif len(line) > 6 and line[0:6] == 'ftp://': yield line def parse_m3u(f): lines = f.split("\n") for line in lines: line = line.replace('\r', '') if len(line) > 7 and line[0:7] == 'http://': yield line elif len(line) > 6 and line[0:6] == 'ftp://': yield line class Streams: def __init__(self, config, window, on_streams_button_press, on_add_item, settings_save, TAB_STREAMS, add_tab): self.config = config self.window = window self.on_streams_button_press = on_streams_button_press self.on_add_item = on_add_item self.settings_save = settings_save self.stream_edit_dialog = None self.builder = ui.builder('streams') # Streams tab self.streams = self.builder.get_object('streams_page_treeview') self.streams_selection = self.streams.get_selection() self.streamswindow = self.builder.get_object('streams_page_scrolledwindow') self.tab_widget = self.builder.get_object('streams_tab_eventbox') self.tab_label = self.builder.get_object('streams_tab_label') self.tab_label.set_text(TAB_STREAMS) self.tab = add_tab(self.streamswindow, self.tab_widget, TAB_STREAMS, self.streams) self.streams.connect('button_press_event', self.on_streams_button_press) self.streams.connect('row_activated', self.on_streams_activated) self.streams.connect('key-press-event', self.on_streams_key_press) # Initialize streams data and widget self.streamsdata = self.builder.get_object('streams_liststore') self.streams.set_search_column(1) def get_model(self): return self.streamsdata def get_widgets(self): return self.streamswindow def get_treeview(self): return self.streams def get_selection(self): return self.streams_selection def populate(self): self.streamsdata.clear() streamsinfo = [{'name' : misc.escape_html(name), 'uri' : misc.escape_html(uri)} for name, uri in zip(self.config.stream_names, self.config.stream_uris)] streamsinfo.sort(key=lambda x: x["name"].lower()) # Remove case sensitivity for item in streamsinfo: self.streamsdata.append([Gtk.STOCK_NETWORK, item["name"], item["uri"]]) def on_streams_key_press(self, widget, event): if event.keyval == Gdk.keyval_from_name('Return'): self.on_streams_activated(widget, widget.get_cursor()[0]) return True def on_streams_activated(self, _treeview, _path, _column=0): self.on_add_item(None) def on_streams_edit(self, action): model, selected = self.streams_selection.get_selected_rows() try: streamname = misc.unescape_html(model.get_value(model.get_iter(selected[0]), 1)) for i, name in enumerate(self.config.stream_names): if name == streamname: self.on_streams_new(action, i) return except: pass def on_streams_new(self, _action, stream_num=-1): if stream_num > -1: edit_mode = True else: edit_mode = False if not self.stream_edit_dialog: self.stream_edit_dialog = self.builder.get_object( 'stream_edit_dialog') self.stream_edit_dialog.set_transient_for(self.window) if edit_mode: self.stream_edit_dialog.set_title(_("Edit Stream")) else: self.stream_edit_dialog.set_title(_("New Stream")) nameentry = self.builder.get_object('stream_edit_name_entry') if edit_mode: nameentry.set_text(self.config.stream_names[stream_num]) else: nameentry.set_text("") urlentry = self.builder.get_object('stream_edit_url_entry') if edit_mode: urlentry.set_text(self.config.stream_uris[stream_num]) else: urlentry.set_text("") self.stream_edit_dialog.show_all() response = self.stream_edit_dialog.run() if response == Gtk.ResponseType.ACCEPT: name = nameentry.get_text() uri = urlentry.get_text() if len(name) > 0 and len(uri) > 0: # Make sure this stream name doesn't already exit: i = 0 for item in self.config.stream_names: # Prevent a name collision in edit_mode.. if not edit_mode or (edit_mode and i != stream_num): if item == name: self.stream_edit_dialog.hide() if self._prompt_replace(): # Pop existing stream: self.config.stream_names.pop(i) self.config.stream_uris.pop(i) else: return i = i + 1 if edit_mode: self.config.stream_names.pop(stream_num) self.config.stream_uris.pop(stream_num) self.config.stream_names.append(name) self.config.stream_uris.append(uri) self.populate() self.settings_save() self.stream_edit_dialog.hide() def _prompt_replace(self): prompt = _("A stream with this name already exists. Would you like to replace it?") return ui.show_msg(self.window, prompt, _("New Stream"), 'newStreamError', Gtk.ButtonsType.YES_NO) == Gtk.ResponseType.YES ����sonata-1.7.0/sonata/tagedit.py����������������������������������������������������������������������0000664�0000000�0000000�00000037244�13771420143�0016300�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> # Copyright 2009-2014 Jonathan Ballet <jon@multani.info> # # This file is part of Sonata. # # Sonata is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Sonata is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Sonata. If not, see <http://www.gnu.org/licenses/>. """ This module provides a user interface for editing the metadata tags of local music files. Example usage: import tagedit tageditor = tagedit.TagEditor(self.window, self.tags_mpd_update) tageditor.on_tags_edit(files, temp_mpdpaths, self.musicdir[self.profile_num]) """ import os import re from gi.repository import Gtk, GLib tagpy = None # module loaded when needed from sonata import ui, misc class TagEditor: """This class implements a dialog for editing music metadata tags. When the dialog closes, the callback gets the list of updates made. """ def __init__(self, window, tags_mpd_update, tags_set_use_mpdpath): self.window = window self.tags_mpd_update = tags_mpd_update self.tags_set_use_mpdpath = tags_set_use_mpdpath self.file_label = None self.curr_mpdpath = None self.tagnum = None self.use_mpdpaths = None self.edit_window = None self.entries = None self.tags = None self.builder = ui.builder('tagedit') self.css_provider = ui.css_provider('tagedit') def _init_edit_window(self): self.edit_window = self.builder.get_object('tags_dialog') self.edit_window.set_transient_for(self.window) self.file_label = self.builder.get_object('tags_file_label') genre_combo = self.builder.get_object('tags_genre_comboboxtext') for genre in self.tags_win_genres(): genre_combo.append_text(genre) expand_arrow = self.builder.get_object('tags_expand_arrow') expand_button = self.builder.get_object('tags_expand_file_button') self.set_expandbutton_state(expand_button, expand_arrow) expand_button.connect('clicked', self.toggle_path, expand_arrow) year_entry = self.builder.get_object('tags_year_entry') year_entry.connect('insert_text', self.tags_win_entry_constraint, True) track_entry = self.builder.get_object('tags_track_entry') track_entry.connect('insert_text', self.tags_win_entry_constraint, False) artist_entry = self.builder.get_object('tags_artist_entry') album_entry = self.builder.get_object('tags_album_entry') title_entry = self.builder.get_object('tags_title_entry') genre_entry = self.builder.get_object('tags_genre_entry') comment_entry = self.builder.get_object('tags_comment_entry') self.entries = { 'title': title_entry, 'artist': artist_entry, 'album': album_entry, 'year': year_entry, 'track': track_entry, 'genre': genre_entry, 'comment': comment_entry,} year_button = self.builder.get_object('tags_save_year_button') track_button = self.builder.get_object('tags_save_track_button') artist_button = self.builder.get_object('tags_save_artist_button') album_button = self.builder.get_object('tags_save_album_button') title_button = self.builder.get_object('tags_save_title_button') genre_button = self.builder.get_object('tags_save_genre_button') comment_button = self.builder.get_object('tags_save_comment_button') buttons = (title_button, artist_button, album_button, year_button, track_button, genre_button, comment_button) names = ('title', 'artist', 'album', 'year', 'track', 'genre', 'comment') for name, button in zip(names, buttons): entry = self.entries[name] entry.connect('changed', self.tags_win_entry_changed) button.connect('clicked', self.tags_win_apply_all, name, entry) def on_tags_edit(self, files, temp_mpdpaths, music_dir): """Display the editing dialog""" # Try loading module global tagpy if tagpy is None: try: import tagpy except ImportError: ui.show_msg(self.window, _("Taglib and/or tagpy not found, tag editing support disabled."), _("Edit Tags"), 'editTagsError', Gtk.ButtonsType.CLOSE, response_cb=ui.dialog_destroy) ui.change_cursor(None) return # Set default tag encoding to utf8.. fixes some reported bugs. import tagpy.id3v2 as id3v2 id3v2.FrameFactory.instance().setDefaultTextEncoding(tagpy.StringType.UTF8) # Make sure tagpy is at least 0.91 if hasattr(tagpy.Tag.title, '__call__'): ui.show_msg(self.window, _("Tagpy version < 0.91. Please upgrade to a newer version, tag editing support disabled."), _("Edit Tags"), 'editTagsError', Gtk.ButtonsType.CLOSE, response_cb=ui.dialog_destroy) ui.change_cursor(None) return if not os.path.isdir(music_dir): ui.show_msg(self.window, _("The path %s does not exist. Please specify a valid music directory in preferences.") % music_dir, _("Edit Tags"), 'editTagsError', Gtk.ButtonsType.CLOSE, response_cb=ui.dialog_destroy) ui.change_cursor(None) return # XXX file list was created here if len(files) == 0: ui.change_cursor(None) return # Initialize: self.tagnum = -1 self.tags = [{ 'title': '', 'artist': '', 'album': '', 'year': '', 'track': '', 'genre': '', 'comment': '', 'title-changed': False, 'artist-changed': False, 'album-changed': False, 'year-changed': False, 'track-changed': False, 'genre-changed': False, 'comment-changed': False, 'fullpath': filename, 'mpdpath': path,} for filename, path in zip(files, temp_mpdpaths)] if not os.path.exists(self.tags[0]['fullpath']): ui.change_cursor(None) ui.show_msg(self.window, _("File '%s' not found. Please specify a valid music directory in preferences.") % self.tags[0]['fullpath'], _("Edit Tags"), 'editTagsError', Gtk.ButtonsType.CLOSE, response_cb=ui.dialog_destroy) return if not self.tags_next_tag(): ui.change_cursor(None) ui.show_msg(self.window, _("No music files with editable tags found."), _("Edit Tags"), 'editTagsError', Gtk.ButtonsType.CLOSE, response_cb=ui.dialog_destroy) return if not self.edit_window: self._init_edit_window() saveall_button = self.builder.get_object('tags_saveall_button') if len(files) > 1: # Only show save all button if more than one song being edited. saveall_button.show() saveall_button.set_property("visible", True) else: saveall_button.hide() saveall_button.set_property("visible", False) self.tags_win_update() self.edit_window.show_all() SAVE_ALL = -12 done = False while not done: # Next file: self.tags_win_update() response = self.edit_window.run() if response == SAVE_ALL: self.save_tag() while self.tags_next_tag(): self.tags_win_update() self.save_tag() done = True elif response == Gtk.ResponseType.ACCEPT: self.save_tag() done = not self.tags_next_tag() if done: # To ensure we update the last file in tags_mpd_update self.tagnum = self.tagnum + 1 elif response == Gtk.ResponseType.REJECT: done = True tag_paths = (tag['mpdpath'] for tag in self.tags[:self.tagnum]) GLib.idle_add(self.tags_mpd_update, tag_paths) self.tags_set_use_mpdpath(self.use_mpdpaths) self.tags = None ui.change_cursor(None) self.edit_window.hide() def tags_next_tag(self): # Returns true if next tag found (and self.tagnum is updated). # If no next tag found, returns False. while self.tagnum < len(self.tags) - 1: self.tagnum = self.tagnum + 1 if os.path.exists(self.tags[self.tagnum]['fullpath']): fileref = tagpy.FileRef(self.tags[self.tagnum]['fullpath']) if not fileref.isNull(): return True return False def tags_win_entry_changed(self, entry): style_context = entry.get_style_context() style_context.add_class('modified') def tags_win_entry_revert_color(self, entry): style_context = entry.get_style_context() style_context.remove_class('modified') def tags_win_apply_all(self, _button, item, entry): for tagnum, tag in enumerate(self.tags): tagnum = tagnum + 1 if item in ("title", "album", "artist", "genre", "comment"): tag[item] = entry.get_text() tag[item + '-changed'] = True elif item == "year": if len(entry.get_text()) > 0: tag['year'] = int(entry.get_text()) else: tag['year'] = 0 tag['year-changed'] = True elif item == "track": if tagnum >= self.tagnum - 1: # Start the current song at track 1, as opposed to the first # song in the list. tag['track'] = tagnum - self.tagnum tag['track-changed'] = True if item == "track": # Update the entry for the current song: entry.set_text(str(self.tags[self.tagnum]['track'])) def tags_win_update(self): current_tag = self.tags[self.tagnum] tag = tagpy.FileRef(current_tag['fullpath']).tag() # Update interface: for entry_name, entry in self.entries.items(): # Only retrieve info from the file if the info hasn't changed if not current_tag[entry_name + "-changed"]: current_tag[entry_name] = getattr(tag, entry_name, '') tag_value = current_tag[entry_name] if tag_value == 0: tag_value = '' try: entry.set_text(str(tag_value).strip()) except AttributeError: pass # Revert text color if this tag wasn't changed by the user if not current_tag[entry_name + "-changed"]: self.tags_win_entry_revert_color(entry) self.curr_mpdpath = GLib.filename_display_name(current_tag['mpdpath']) filename = self.curr_mpdpath if not self.use_mpdpaths: filename = os.path.basename(filename) self.file_label.set_text(filename) self.entries['title'].grab_focus() self.edit_window.set_title(_("Edit Tags - %s of %s") % (self.tagnum + 1, len(self.tags))) def save_tag(self): filetag = tagpy.FileRef(self.tags[self.tagnum]['fullpath']) tag = filetag.tag() # Set tag fields according to entry text for field, entry in self.entries.items(): tag_value = entry.get_text().strip() if field in ('year', 'track'): if len(tag_value) == 0: tag_value = '0' tag_value = int(tag_value) if field == 'comment': if len(tag_value) == 0: tag_value = ' ' setattr(tag, field, tag_value) save_success = filetag.save() if not (save_success): # FIXME: was (save_success and self.conn and self.status): ui.show_msg(self.window, _("Unable to save tag to music file."), _("Edit Tags"), 'editTagsError', Gtk.ButtonsType.CLOSE, response_cb=ui.dialog_destroy) def tags_win_genres(self): return ["", "A Cappella", "Acid", "Acid Jazz", "Acid Punk", "Acoustic", "Alt. Rock", "Alternative", "Ambient", "Anime", "Avantgarde", "Ballad", "Bass", "Beat", "Bebob", "Big Band", "Black Metal", "Bluegrass", "Blues", "Booty Bass", "BritPop", "Cabaret", "Celtic", "Chamber music", "Chanson", "Chorus", "Christian Gangsta Rap", "Christian Rap", "Christian Rock", "Classic Rock", "Classical", "Club", "Club-House", "Comedy", "Contemporary Christian", "Country", "Crossover", "Cult", "Dance", "Dance Hall", "Darkwave", "Death Metal", "Disco", "Dream", "Drum & Bass", "Drum Solo", "Duet", "Easy Listening", "Electronic", "Ethnic", "Euro-House", "Euro-Techno", "Eurodance", "Fast Fusion", "Folk", "Folk-Rock", "Folklore", "Freestyle", "Funk", "Fusion", "Game", "Gangsta", "Goa", "Gospel", "Gothic", "Gothic Rock", "Grunge", "Hard Rock", "Hardcore", "Heavy Metal", "Hip-Hop", "House", "Humour", "Indie", "Industrial", "Instrumental", "Instrumental pop", "Instrumental rock", "JPop", "Jazz", "Jazz+Funk", "Jungle", "Latin", "Lo-Fi", "Meditative", "Merengue", "Metal", "Musical", "National Folk", "Native American", "Negerpunk", "New Age", "New Wave", "Noise", "Oldies", "Opera", "Other", "Polka", "Polsk Punk", "Pop", "Pop-Folk", "Pop/Funk", "Porn Groove", "Power Ballad", "Pranks", "Primus", "Progressive Rock", "Psychedelic", "Psychedelic Rock", "Punk", "Punk Rock", "R&B", "Rap", "Rave", "Reggae", "Retro", "Revival", "Rhythmic soul", "Rock", "Rock & Roll", "Salsa", "Samba", "Satire", "Showtunes", "Ska", "Slow Jam", "Slow Rock", "Sonata", "Soul", "Sound Clip", "Soundtrack", "Southern Rock", "Space", "Speech", "Swing", "Symphonic Rock", "Symphony", "Synthpop", "Tango", "Techno", "Techno-Industrial", "Terror", "Thrash Metal", "Top 40", "Trailer"] def tags_win_entry_constraint(self, entry, new_text, _new_text_length, _broken_position, isyearlabel): entry_chars = entry.get_text() pos = entry.get_position() proposed_text = entry_chars[:pos] + new_text + entry_chars[pos:] # get the correct regular expression expr = r'(0|[1-9][0-9]{0,3})$' if isyearlabel else r'(0|[1-9][0-9]*)$' expr = re.compile(expr) if not expr.match(proposed_text): # deny entry.stop_emission("insert-text") def toggle_path(self, button, arrow): self.use_mpdpaths = not self.use_mpdpaths if self.use_mpdpaths: self.file_label.set_text(self.curr_mpdpath) else: self.file_label.set_text(os.path.basename(self.curr_mpdpath)) self.set_expandbutton_state(button, arrow) def set_expandbutton_state(self, button, arrow): if self.use_mpdpaths: arrow.set_property("arrow-type", Gtk.ArrowType.LEFT) button.set_tooltip_text(_("Hide file path")) else: arrow.set_property("arrow-type", Gtk.ArrowType.RIGHT) button.set_tooltip_text(_("Show file path")) def set_use_mpdpaths(self, use_mpdpaths): self.use_mpdpaths = use_mpdpaths ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/sonata/tests/��������������������������������������������������������������������������0000775�0000000�0000000�00000000000�13771420143�0015435�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/sonata/tests/__init__.py���������������������������������������������������������������0000664�0000000�0000000�00000013050�13771420143�0017545�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/python # Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> # Copyright 2009-2014 Jonathan Ballet <jon@multani.info> # # This file is part of Sonata. # # Sonata is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Sonata is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Sonata. If not, see <http://www.gnu.org/licenses/>. import doctest import unittest import gettext import os import sys import operator # This currently needed, because gettext is used in some module, i want to test try: gettext.install('sonata', os.path.join(sonata.__file__.split('/lib')[0], 'share', 'locale')) except: gettext.install('sonata', '/usr/share/locale') gettext.textdomain('sonata') from sonata import misc, song, library from sonata.mpdhelper import MPDSong DOCTEST_FLAGS = ( doctest.ELLIPSIS | doctest.NORMALIZE_WHITESPACE | doctest.REPORT_NDIFF ) DOCTEST_MODULES = [ 'artwork', 'mpdhelper', ] class TestSonata(unittest.TestCase): def test_convert_time(self): self.assertEqual(misc.convert_time(60*4+4), "04:04") self.assertEqual(misc.convert_time(3600*3+60*2), "03:02:00") def test_song_record(self): record_first = song.SongRecord("a", "a", "a", "a", "a") record_equal = song.SongRecord(artist="a", path="b") record_equal2 = song.SongRecord(artist="a", path="b") record_last = song.SongRecord("z", "z", "z", "z", "z") self.assertEqual(record_equal.artist, "a") self.assertEqual(record_equal2.path, "b") # test comparision self.assertEqual(record_equal, record_equal2) self.assertNotEqual(record_first, record_last) self.assertGreater(record_last, record_first) self.assertGreaterEqual(record_last, record_first) self.assertLess(record_first, record_last) self.assertLessEqual(record_first, record_last) # test hashing d = {} d[record_equal] = True self.assertIn(record_equal, d) self.assertIn(record_equal2, d) # record_equal == record_equal2 # test sorting lst = [record_equal, record_equal2, record_last, record_first] lst.sort(key=operator.attrgetter("path")) self.assertEqual(lst, [record_first, record_equal, record_equal2, record_last]) # test unpacking a, b, c, d, e = record_equal self.assertEqual(record_equal.album, a) self.assertEqual(record_equal.artist, b) self.assertEqual(record_equal.genre, c) self.assertEqual(record_equal.path, e) def test_list_identfy_VA_albums(self): # Test multiple arguments data = [("artist1", "album1", "/", 2006), ("artist2", "album1", "/", 2006), ("artist1", "album1", "test",1992), ("artist3", "album1", "/", 2006)] albums = [song.SongRecord(artist=item[0], album=item[1], path=item[2], year=item[3]) for item in data] various_albums = library.list_mark_various_artists_albums(albums) album = albums[0]._asdict() album['artist'] = library.VARIOUS_ARTISTS albums[0] = song.SongRecord(**album) self.assertEqual(various_albums, albums) # Test single argument albums2 = [song.SongRecord(artist="Tim Pritlove, Holger Klein", album="Not Safe For Work", path="podcasts/Not Save For Work", year=2012)] various_albums2 = library.list_mark_various_artists_albums(albums2) self.assertEqual(various_albums2, albums2) class TestMPDSong(unittest.TestCase): def test_get_track_number(self): self.assertEqual(1, MPDSong({'track': '1'}).track) self.assertEqual(1, MPDSong({'track': '1/10'}).track) self.assertEqual(1, MPDSong({'track': '1,10'}).track) self.assertEqual(0, MPDSong({'track': '/'}).track) self.assertEqual(0, MPDSong({'track': ','}).track) def test_get_disc_number(self): self.assertEqual(1, MPDSong({'disc': '1'}).disc) self.assertEqual(1, MPDSong({'disc': '1/10'}).disc) self.assertEqual(1, MPDSong({'disc': '1,10'}).disc) self.assertEqual(0, MPDSong({'disc': '/'}).disc) self.assertEqual(0, MPDSong({'disc': ','}).disc) def test_access_attributes(self): song = MPDSong({'foo': 'zz', 'id': '5'}) self.assertEqual(5, song.id) self.assertEqual("zz", song.foo) self.assertIsInstance(song.foo, str) self.assertEqual(song.foo, song.get("foo")) def test_get_unknown_attribute(self): song = MPDSong({}) self.assertRaises(KeyError, lambda: song['bla']) self.assertEqual(None, song.get('bla')) self.assertEqual('foo', song.get('bla', 'foo')) self.assertEqual(None, song.bla) def test_access_list_attribute(self): song = MPDSong({'genre': ['a', 'b'], 'foo': ['c', 'd']}) self.assertEqual('a', song.genre) self.assertEqual('c', song.foo) def load_tests(loader, tests, ignore): for sub_module in DOCTEST_MODULES: test = doctest.DocTestSuite('sonata.%s' % sub_module, optionflags=DOCTEST_FLAGS) tests.addTests(test) return tests ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/sonata/tests/test_artwork.py�����������������������������������������������������������0000664�0000000�0000000�00000024057�13771420143�0020547�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> # Copyright 2009-2014 Jonathan Ballet <jon@multani.info> # # This file is part of Sonata. # # Sonata is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Sonata is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Sonata. If not, see <http://www.gnu.org/licenses/>. from os.path import expanduser import unittest try: from unittest.mock import Mock, patch, call except ImportError: # pragma: nocover from mock import Mock, patch, call import os import shutil import tempfile from sonata.artwork import artwork_path from sonata.artwork import ArtworkLocator from sonata import consts class _MixinTestDirectory: def mkdir(self, *paths): path = os.path.join(self.music_dir, *paths) os.makedirs(path, exist_ok=True) return path def touch(self, *paths): path = os.path.join(self.music_dir, *paths) with open(path, 'wb') as fp: pass return path def assertDirEqual(self, expected, got): expected = expected.replace('/TMP', self.music_dir) self.assertEqual(expected, got) def setUp(self): super().setUp() self.music_dir = tempfile.mkdtemp(prefix="sonata-tests-") self.config = Mock('Config', current_musicdir=self.music_dir) def tearDown(self): super().tearDown() shutil.rmtree(self.music_dir) class TestArtworkPathFinder(unittest.TestCase): def setUp(self): self.config = Mock('Config', current_musicdir="/foo", art_location=1, art_location_custom_filename="bla") self.locator = ArtworkLocator(self.config) # artwork_path_from_data def _call_artwork_path_from_data(self, location_type=None, artist="Toto", album="Tata", song_dir="To/Ta"): return self.locator.path(artist, album, song_dir, location_type) def test_find_path_from_data_in_home_covers(self): self.config.art_location = consts.ART_LOCATION_HOMECOVERS res = self._call_artwork_path_from_data() self.assertEqual(expanduser('~/.covers/Toto-Tata.jpg'), res) def test_find_path_from_data_as_cover_dot_jpg(self): self.config.art_location = consts.ART_LOCATION_COVER res = self._call_artwork_path_from_data() self.assertEqual('/foo/To/Ta/cover.jpg', res) def test_find_path_from_data_as_folder_dot_jpg(self): self.config.art_location = consts.ART_LOCATION_FOLDER res = self._call_artwork_path_from_data() self.assertEqual('/foo/To/Ta/folder.jpg', res) def test_find_path_from_data_as_album_dot_jpg(self): self.config.art_location = consts.ART_LOCATION_ALBUM res = self._call_artwork_path_from_data() self.assertEqual('/foo/To/Ta/album.jpg', res) def test_find_path_from_data_as_custom_dot_jpg(self): self.config.art_location_custom_filename = "bar.png" self.config.art_location = consts.ART_LOCATION_CUSTOM res = self._call_artwork_path_from_data() self.assertEqual('/foo/To/Ta/bar.png', res) def test_find_path_from_data_as_custom_without_filename(self): self.config.art_location_custom_filename = "" self.config.art_location = consts.ART_LOCATION_CUSTOM res = self._call_artwork_path_from_data() # We tried CUSTOM without a valid custom filename :/ self.assertEqual(None, res) def test_find_path_from_data_force_location_type(self): self.config.art_location = "foo bar" # Should not be used res = self._call_artwork_path_from_data(consts.ART_LOCATION_COVER) self.assertEqual('/foo/To/Ta/cover.jpg', res) # artwork_path_from_song def test_find_path_from_song(self): self.config.art_location = consts.ART_LOCATION_COVER song = Mock('Song', artist='', album='', file='Foo/Bar/1.ogg') res = self.locator.path_from_song(song) self.assertEqual('/foo/Foo/Bar/cover.jpg', res) def test_find_path_from_song_with_home_cover(self): song = Mock('Song', artist='Toto', album='Tata', file='Foo/Bar/1.ogg') res = self.locator.path_from_song(song, consts.ART_LOCATION_HOMECOVERS) self.assertEqual(expanduser('~/.covers/Toto-Tata.jpg'), res) # artwork_path def test_artwork_path_with_song_name(self): song = Mock('Song') song.configure_mock(name="plop", artist='Toto', album='Tata', file='F/B/1.ogg') res = artwork_path(song, self.config) self.assertEqual(expanduser("~/.covers/plop.jpg"), res) class TestArtworkLookupSingleImage(_MixinTestDirectory, unittest.TestCase): def setUp(self): super().setUp() self.locator = ArtworkLocator(self.config) def func(self, path): path = os.path.join(self.music_dir, path) return self.locator._lookup_single_image(path) def test_path_doesnt_exists(self): res = list(self.func("bar/baz")) self.assertEqual(0, len(res)) def test_no_images(self): self.mkdir("bar", "baz") res = list(self.func("bar/baz")) self.assertEqual(0, len(res)) def test_one_image(self): self.mkdir("bar", "baz") self.touch("bar", "baz", "loc2.jpg") res = list(self.func("bar/baz")) self.assertEqual(1, len(res)) self.assertDirEqual("/TMP/bar/baz/loc2.jpg", res[0]) def test_several_images_no_artwork(self): self.mkdir("bar", "baz") self.touch("bar", "baz", "loc1.jpg") self.touch("bar", "baz", "loc2.jpg") res = list(self.func("bar/baz")) self.assertEqual(0, len(res)) class TestArtworkLocator(unittest.TestCase): def setUp(self): self.music_dir = "/foo" self.config = Mock('Config', current_musicdir=self.music_dir, art_location_custom_filename="") self.locator = ArtworkLocator(self.config) def get_locations(self, artist="Toto", album="Tata", song_dir="To/Ta", default_kind=None): return self.locator._get_locations(artist, album, song_dir, default_kind) def test_simple_locations(self): l = self.get_locations() for key in dir(consts): if not key.startswith('ART_LOCATION_'): continue self.assertIn(getattr(consts, key), l) def test_home_covers(self): l = self.get_locations()[consts.ART_LOCATION_HOMECOVERS] self.assertEqual(1, len(l)) self.assertEqual(os.path.expanduser("~/.covers/Toto-Tata.jpg"), l[0]) def test_cover_jpg(self): l = self.get_locations()[consts.ART_LOCATION_COVER] self.assertEqual(1, len(l)) self.assertEqual("/foo/To/Ta/cover.jpg", l[0]) def test_folder_jpg(self): l = self.get_locations()[consts.ART_LOCATION_FOLDER] self.assertEqual(1, len(l)) self.assertEqual("/foo/To/Ta/folder.jpg", l[0]) def test_album_jpg(self): l = self.get_locations()[consts.ART_LOCATION_ALBUM] self.assertEqual(1, len(l)) self.assertEqual("/foo/To/Ta/album.jpg", l[0]) def test_custom_valid(self): self.config.art_location_custom_filename = "pouet.jpg" l = self.get_locations()[consts.ART_LOCATION_CUSTOM] self.assertEqual(1, len(l)) self.assertEqual("/foo/To/Ta/pouet.jpg", l[0]) def test_custom_but_empty_custom_file(self): self.config.art_location_custom_filename = "" l = self.get_locations()[consts.ART_LOCATION_CUSTOM] self.assertEqual(0, len(l)) def test_misc_location(self): old_misc = consts.ART_LOCATIONS_MISC consts.ART_LOCATIONS_MISC = files = ['1.jpg', '2.jpg', '3.jpg'] try: l = list(self.get_locations()[consts.ART_LOCATION_MISC]) finally: consts.ART_LOCATIONS_MISC = old_misc expected = ["/foo/To/Ta/%s" % f for f in files] self.assertEqual(expected, l) class TestArtworkLocatorPathChecks(_MixinTestDirectory, unittest.TestCase): def setUp(self): super().setUp() self.config = Mock('Config', current_musicdir=self.music_dir, art_location_custom_filename="") self.locator = ArtworkLocator(self.config) def test_locate_existing(self): self.mkdir('To', 'Ta') cover_path = self.touch('To', 'Ta', 'cover.jpg') self.config.art_location = consts.ART_LOCATION_COVER res = self.locator.locate('Toto', 'Tata', 'To/Ta') self.assertEqual((self.config.art_location, cover_path), res) def test_locate_config_has_priority(self): self.mkdir('To', 'Ta') cover_path = self.touch('To', 'Ta', 'cover.jpg') folder_path = self.touch('To', 'Ta', 'folder.jpg') # We request "cover.jpg", it exists, we got it self.config.art_location = consts.ART_LOCATION_COVER res = self.locator.locate('Toto', 'Tata', 'To/Ta') self.assertEqual((self.config.art_location, cover_path), res) # If we request now "folder.jpg", we get it before "cover.jpg" self.config.art_location = consts.ART_LOCATION_FOLDER res = self.locator.locate('Toto', 'Tata', 'To/Ta') self.assertEqual((self.config.art_location, folder_path), res) def test_locate_nothing_valid(self): self.mkdir('To', 'Ta') self.config.art_location = consts.ART_LOCATION_COVER res = self.locator.locate('Toto', 'Tata', 'To/Ta') self.assertEqual((None, None), res) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/sonata/tray.py�������������������������������������������������������������������������0000664�0000000�0000000�00000016010�13771420143�0015622�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> # Copyright 2009-2014 Jonathan Ballet <jon@multani.info> # # This file is part of Sonata. # # Sonata is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Sonata is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Sonata. If not, see <http://www.gnu.org/licenses/>. import os from gi.repository import Gtk, GLib from sonata import ui, img class TrayIconTips(Gtk.Window): """Custom tooltips derived from Gtk.Window() that allow for markup text and multiple widgets, e.g. a progress bar. ;)""" MARGIN = 4 def __init__(self): super().__init__(type=Gtk.WindowType.POPUP) # from gtktooltips.c:gtk_tooltips_force_window self.set_app_paintable(True) self.set_resizable(False) self.set_name("gtk-tooltips") self.timer_tag = None self.notif_handler = None self.use_notifications_location = False self.notifications_location = 0 def _calculate_pos(self, tray_icon): if tray_icon is not None: x, y, _, height = tray_icon.compute_pos() size = self.size_request() w = size.width h = size.height screen = self.get_screen() pointer_screen, px, py, _ = screen.get_display().get_pointer() if pointer_screen != screen: px = x py = y try: # Use the monitor that the systemtray icon is on monitor_num = screen.get_monitor_at_point(x, y) except: # No systemtray icon, use the monitor that the pointer is on monitor_num = screen.get_monitor_at_point(px, py) monitor = screen.get_monitor_geometry(monitor_num) try: # If the tooltip goes off the screen horizontally, realign it so # that it all displays. if (x + w) > monitor.x + monitor.width: x = monitor.x + monitor.width - w # If the tooltip goes off the screen vertically (i.e. the system # tray icon is on the bottom of the screen), realign the icon so # that it shows above the icon. if ((y + h + height + self.MARGIN) > monitor.y + monitor.height): y = y - h - self.MARGIN else: y = y + height + self.MARGIN except: pass if not self.use_notifications_location: try: return x, y except: #Fallback to top-left: return monitor.x, monitor.y elif self.notifications_location == 0: try: return x, y except: #Fallback to top-left: return monitor.x, monitor.y elif self.notifications_location == 1: return monitor.x, monitor.y elif self.notifications_location == 2: return monitor.x + monitor.width - w, monitor.y elif self.notifications_location == 3: return monitor.x, monitor.y + monitor.height - h elif self.notifications_location == 4: return monitor.x + monitor.width - w, \ monitor.y + monitor.height - h elif self.notifications_location == 5: return monitor.x + (monitor.width - w) / 2, \ monitor.y + (monitor.height - h) / 2 def _start_delay(self, tray_icon): self.timer_tag = GLib.timeout_add(500, self._tips_timeout, tray_icon) def _tips_timeout(self, tray_icon): self.use_notifications_location = False self._real_display(tray_icon) def _remove_timer(self): self.hide() if self.timer_tag: GLib.source_remove(self.timer_tag) self.timer_tag = None def _real_display(self, tray_icon): x, y = self._calculate_pos(tray_icon) self.move(x, y) self.show() # Public API def hide(self): Gtk.Window.hide(self) self.notif_handler = None def add_widget(self, widget_to_add): self.add(widget_to_add) class TrayIcon: """Tray icon which use Gtk.StatusIcon""" def __init__(self, window, traymenu, traytips): self.statusicon = None self.window = window self.traymenu = traymenu self.traytips = traytips def compute_pos(self): _ok, _screen, rect, _orient = self.statusicon.get_geometry() return (rect.x, rect.y, rect.height, rect.width) def initialize(self, on_click, on_scroll): self.statusicon = Gtk.StatusIcon() self.statusicon.connect('button-press-event', on_click) self.statusicon.connect('scroll-event', on_scroll) GLib.timeout_add(250, self._iterate_status_icon) def is_visible(self): """Visible and/or notification activated""" return self.statusicon.is_embedded() and \ self.statusicon.get_visible() def update_icon(self, icon_name): # FIXME (why doesn't this work instead?): # self.statusicon.set_from_stock(icon_name) context = self.traymenu.get_style_context() icon = Gtk.IconFactory.lookup_default(icon_name) icon_pb = icon.render_icon_pixbuf(context, -1) self.statusicon.set_from_pixbuf(icon_pb) def show(self): self.statusicon.set_visible(True) def hide(self): self.statusicon.set_visible(False) def is_available(self): return self.statusicon.is_embedded() def _iterate_status_icon(self): if self.is_visible(): self._tooltip_show_manually() GLib.timeout_add(250, self._iterate_status_icon) def _tooltip_show_manually(self): # Since there is no signal to connect to when the user puts their # mouse over the trayicon, we will check the mouse position # manually and show/hide the window as appropriate. This is called # every iteration. Note: This should not occur if self.traytips.notif_ # handler has a value, because that means that the tooltip is already # visible, and we don't want to override that setting simply because # the user's cursor is not over the tooltip. if self.traymenu.get_property('visible') and \ self.traytips.notif_handler != -1: self.traytips._remove_timer() elif not self.traytips.notif_handler: _pscreen, px, py, _mods = \ self.window.get_screen().get_display().get_pointer() x, y, width, height = self.compute_pos() if px >= x and px <= x + width and py >= y and py <= y + height: self.traytips._start_delay(self) else: self.traytips._remove_timer() ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/sonata/ui.py���������������������������������������������������������������������������0000664�0000000�0000000�00000007616�13771420143�0015274�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> # Copyright 2009-2014 Jonathan Ballet <jon@multani.info> # # This file is part of Sonata. # # Sonata is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Sonata is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Sonata. If not, see <http://www.gnu.org/licenses/>. import logging import os import pkg_resources import sys from gi.repository import Gtk, Gdk logger = logging.getLogger(__name__) def builder(ui_file, relative_to='.'): builder = Gtk.Builder() builder.set_translation_domain('sonata') ui_path = pkg_resources.resource_filename( 'sonata', os.path.join(relative_to, 'ui', ui_file + ".glade")) logger.debug('Loading %s', ui_path) builder.add_from_file(ui_path) return builder def css_provider(css_file, relative_to='.'): provider = Gtk.CssProvider() css_path = pkg_resources.resource_filename( 'sonata', os.path.join(relative_to, 'ui', css_file + ".css")) logger.debug('Loading %s', css_path) provider.load_from_path(css_path) screen = Gdk.Screen.get_default() context = Gtk.StyleContext() context.add_provider_for_screen(screen, provider, Gtk.STYLE_PROVIDER_PRIORITY_USER) return provider def builder_string(ui_file, relative_to='.'): ui_path = pkg_resources.resource_filename( 'sonata', os.path.join(relative_to, 'ui', ui_file + ".glade")) logger.debug('Loading %s', ui_path) with open(ui_path, 'r') as builder_file: string = builder_file.read() return string def show_msg(owner, message, title, role, buttons, default=None, response_cb=None): is_button_list = hasattr(buttons, '__getitem__') if not is_button_list: messagedialog = Gtk.MessageDialog(owner, Gtk.DialogFlags.MODAL|Gtk.DialogFlags.DESTROY_WITH_PARENT, Gtk.MessageType.WARNING, buttons, message) else: messagedialog = Gtk.MessageDialog(owner, Gtk.DialogFlags.MODAL|Gtk.DialogFlags.DESTROY_WITH_PARENT, Gtk.MessageType.WARNING, message_format=message) i = 0 while i < len(buttons): messagedialog.add_button(buttons[i], buttons[i+1]) i += 2 messagedialog.set_title(title) messagedialog.set_role(role) if default is not None: messagedialog.set_default_response(default) if response_cb: messagedialog.connect("response", response_cb) response = messagedialog.run() value = response messagedialog.destroy() return value def dialog_destroy(dialog_widget, _response_id): dialog_widget.destroy() def show(widget): widget.set_no_show_all(False) widget.show_all() def hide(widget): #widget.hide_all() widget.hide() widget.set_no_show_all(True) def quote_label(label_value): """Quote the content of a label so that it's safe to display.""" # Don't inadvertently create accelerators if the value contains a "_" result = label_value.replace("_", "__") return result def change_cursor(cursortype): for w in Gtk.Window.list_toplevels(): gdk_window = w.get_window() # some toplevel windows have no drawing area if gdk_window != None: gdk_window.set_cursor(cursortype) def set_entry_invalid(editable): color = Gdk.RGBA() color.parse("red") editable.override_color(Gtk.StateFlags.NORMAL, color) def reset_entry_marking(editable): editable.override_color(Gtk.StateFlags.NORMAL, None) def icon(name): return Gtk.IconFactory.lookup_default(name) ������������������������������������������������������������������������������������������������������������������sonata-1.7.0/sonata/ui/�����������������������������������������������������������������������������0000775�0000000�0000000�00000000000�13771420143�0014710�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/sonata/ui/about.css��������������������������������������������������������������������0000664�0000000�0000000�00000000075�13771420143�0016536�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������GtkLabel.heading, GtkLabel.shortcut { font-weight: bold; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/sonata/ui/about.glade������������������������������������������������������������������0000664�0000000�0000000�00000020530�13771420143�0017020�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <interface> <!-- interface-requires gtk+ 3.0 --> <object class="GtkAboutDialog" id="about_dialog"> <property name="can_focus">False</property> <property name="border_width">5</property> <property name="role">about</property> <property name="modal">True</property> <property name="type_hint">dialog</property> <property name="program_name">Sonata</property> <property name="copyright" translatable="yes">Sonata, an elegant GTK+ client for the Music Player Daemon Copyright 2006-2008 Scott Horowitz <stonecrest@gmail.com></property> <property name="comments" translatable="yes">An elegant music client for MPD.</property> <property name="website">http://www.nongnu.org/sonata/</property> <property name="website_label">www.nongnu.org/sonata/</property> <property name="license">Sonata is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. Sonata is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>.</property> <property name="authors">Scott Horowitz <stonecrest@gmail.com> Tuukka Hastrup <Tuukka.Hastrup@iki.fi> Stephen Boyd <bebarino@gmail.com></property> <property name="translator_credits">ar - Ahmad Farghal <ahmad.farghal@gmail.com> be@latin - Ihar Hrachyshka <ihar.hrachyshka@gmail.com> ca - Franc Rodriguez <franc.rodriguez@tecob.com> cs - Jakub Adler <jakubadler@gmail.com> da - Martin Dybdal <dybber@dybber.dk> de - Paul Johnson <thrillerator@googlemail.com> el_GR - Lazaros Koromilas <koromilaz@gmail.com> es - Xoan Sampaiño <xoansampainho@gmail.com> et - Mihkel <turakas@gmail.com> fi - Ilkka Tuohela <hile@hack.fi> fr - Floreal M <florealm@gmail.com> it - Gianni Vialetto <forgottencrow@gmail.com> ja - Masato Hashimoto <cabezon.hashimoto@gmail.com> ko - Jaesung BANG <jaesung@liberotown.com> nl - Olivier Keun <litemotiv@gmail.com> pl - Tomasz Dominikowski <dominikowski@gmail.com> pt_BR - Alex Tercete Matos <alextercete@gmail.com> ru - Ivan <bkb.box@bk.ru> sk - Robert Hartl <hartl.robert@gmail.com> sl - Alan Pepelko <alan.pepelko@gmail.com> sv - Daniel Nylander <po@danielnylander.se> tr - Gökmen Görgen <gkmngrgn@gmail.com> uk - Господарисько Тарас <dogmaton@gmail.com> zh_CN - Desmond Chang <dochang@gmail.com> zh_TW - Ian-Xue Li <da.mi.spirit@gmail></property> <property name="artists">Adrian Chromenko <adrian@rest0re.org> oss.rest0re.org <http://oss.rest0re.org/></property> <property name="wrap_license">True</property> <child internal-child="vbox"> <object class="GtkBox" id="aboutdialog-vbox1"> <property name="can_focus">False</property> <property name="orientation">vertical</property> <property name="spacing">2</property> <child internal-child="action_area"> <object class="GtkButtonBox" id="aboutdialog-action_area1"> <property name="can_focus">False</property> <property name="layout_style">end</property> <child> <object class="GtkButton" id="shortcut_button"> <property name="label" translatable="yes">_Shortcuts</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="use_action_appearance">False</property> <property name="use_underline">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">3</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="pack_type">end</property> <property name="position">0</property> </packing> </child> <child> <placeholder/> </child> </object> </child> <action-widgets> <action-widget response="0">shortcut_button</action-widget> </action-widgets> </object> <object class="GtkDialog" id="shortcuts_dialog"> <property name="can_focus">False</property> <property name="border_width">5</property> <property name="title" translatable="yes">Shortcuts</property> <property name="role">shortcuts</property> <property name="modal">True</property> <property name="window_position">center-on-parent</property> <property name="default_height">340</property> <property name="destroy_with_parent">True</property> <property name="type_hint">dialog</property> <property name="transient_for">about_dialog</property> <child internal-child="vbox"> <object class="GtkBox" id="shortcuts_dialog_v_box"> <property name="can_focus">False</property> <property name="orientation">vertical</property> <property name="spacing">2</property> <child> <object class="GtkScrolledWindow" id="shortcuts_dialog_scrollwindow"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="hscrollbar_policy">never</property> <property name="shadow_type">in</property> <child> <object class="GtkViewport" id="shortcuts_dialog_viewport"> <property name="visible">True</property> <property name="can_focus">False</property> <child> <object class="GtkBox" id="shortcuts_dialog_content_box"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="orientation">vertical</property> <child> <placeholder/> </child> </object> </child> </object> </child> </object> <packing> <property name="expand">True</property> <property name="fill">True</property> <property name="padding">2</property> <property name="position">0</property> </packing> </child> <child internal-child="action_area"> <object class="GtkButtonBox" id="shortcuts_dialog_action"> <property name="can_focus">False</property> <property name="layout_style">end</property> <child> <object class="GtkButton" id="shortcuts_dialog_closebutton"> <property name="label">gtk-close</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="use_action_appearance">False</property> <property name="use_stock">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="pack_type">end</property> <property name="position">1</property> </packing> </child> </object> </child> <action-widgets> <action-widget response="0">shortcuts_dialog_closebutton</action-widget> </action-widgets> </object> </interface> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/sonata/ui/current.glade����������������������������������������������������������������0000664�0000000�0000000�00000011344�13771420143�0017373�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <interface> <!-- interface-requires gtk+ 3.0 --> <object class="GtkBox" id="current_page_v_box"> <property name="can_focus">False</property> <property name="orientation">vertical</property> <property name="margin">3</property> <child> <object class="GtkScrolledWindow" id="current_page_scrolledwindow"> <property name="can_focus">True</property> <property name="shadow_type">in</property> <child> <object class="GtkTreeView" id="current_page_treeview"> <property name="can_focus">True</property> <property name="reorderable">True</property> <property name="rules_hint">True</property> <property name="enable_search">False</property> <child internal-child="selection"> <object class="GtkTreeSelection" id="current_page_treeview_selection"> <property name="mode">multiple</property> </object> </child> </object> </child> </object> <packing> <property name="expand">True</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkBox" id="current_page_filterbox"> <property name="can_focus">True</property> <property name="no_show_all">True</property> <child> <object class="GtkLabel" id="current_page_filterbox_label"> <property name="can_focus">True</property> <property name="label" translatable="yes">Filter:</property> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="padding">5</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkEntry" id="current_page_filterbox_entry"> <property name="can_focus">True</property> </object> <packing> <property name="expand">True</property> <property name="fill">True</property> <property name="padding">5</property> <property name="position">1</property> </packing> </child> <child> <object class="GtkButton" id="current_page_filterbox_closebutton"> <property name="use_action_appearance">False</property> <property name="can_focus">True</property> <property name="receives_default">False</property> <property name="use_action_appearance">False</property> <property name="relief">none</property> <child> <object class="GtkImage" id="current_page_filterbox_closebutton_image"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="stock">gtk-close</property> </object> </child> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="position">2</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="padding">5</property> <property name="position">1</property> </packing> </child> </object> <object class="GtkEventBox" id="current_tab_eventbox"> <property name="can_focus">False</property> <property name="visible_window">False</property> <child> <object class="GtkBox" id="current_tab_h_box"> <property name="can_focus">False</property> <child> <object class="GtkImage" id="current_tab_image"> <property name="can_focus">False</property> <property name="stock">gtk-cdrom</property> <property name="icon-size">1</property> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="padding">2</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkLabel" id="current_tab_label"> <property name="can_focus">False</property> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="padding">2</property> <property name="position">1</property> </packing> </child> </object> </child> </object> </interface> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/sonata/ui/icons.glade������������������������������������������������������������������0000664�0000000�0000000�00000001744�13771420143�0017027�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <interface> <!-- interface-requires gtk+ 3.0 --> <object class="GtkIconFactory" id="sonata_iconfactory"> <sources> <source stock-id="sonata-play" filename="{base_path}/sonata-play.png"/> <source stock-id="sonata-artist" filename="{base_path}/sonata-artist.png"/> <source stock-id="sonata-cd-large" filename="{base_path}/sonatacd-large.png"/> <source stock-id="sonata-disconnect" filename="{base_path}/sonata-disconnect.png"/> <source stock-id="sonata-large" filename="{base_path}/sonata-large.png"/> <source stock-id="sonata-cd" filename="{base_path}/sonatacd.png"/> <source stock-id="sonata" filename="{base_path}/sonata.png"/> <source stock-id="sonata-case" filename="{base_path}/sonata-case.png"/> <source stock-id="sonata-album" filename="{base_path}/sonata-album.png"/> <source stock-id="sonata-pause" filename="{base_path}/sonata-pause.png"/> </sources> </object> </interface> ����������������������������sonata-1.7.0/sonata/ui/info.css���������������������������������������������������������������������0000664�0000000�0000000�00000000041�13771420143�0016350�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.link { color: @link_color; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/sonata/ui/info.glade�������������������������������������������������������������������0000664�0000000�0000000�00000110470�13771420143�0016644�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <interface> <!-- interface-requires gtk+ 3.0 --> <object class="GtkScrolledWindow" id="info_page_scrolledwindow"> <property name="can_focus">True</property> <child> <object class="GtkViewport" id="info_page_viewport"> <property name="visible">True</property> <property name="can_focus">False</property> <child> <object class="GtkBox" id="info_page_v_box"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="orientation">vertical</property> <property name="margin">3</property> <child> <object class="GtkExpander" id="info_page_song_expander"> <property name="visible">True</property> <property name="can_focus">True</property> <child> <object class="GtkBox" id="info_page_song_box"> <property name="visible">True</property> <property name="can_focus">False</property> <child> <object class="GtkEventBox" id="info_page_song_eventbox"> <property name="can_focus">False</property> <child> <object class="GtkImage" id="info_page_song_image"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="halign">start</property> <property name="valign">start</property> <property name="xalign">0</property> <property name="yalign">0</property> </object> </child> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkGrid" id="info_page_song_grid"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="margin_left">12</property> <property name="orientation">vertical</property> <property name="column_spacing">6</property> <child> <object class="GtkLabel" id="info_song_title_label_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="yalign">0</property> <property name="label" translatable="yes">Title:</property> <attributes> <attribute name="weight" value="bold"/> </attributes> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">0</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkLabel" id="info_song_artist_label_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="yalign">0</property> <property name="label" translatable="yes">Artist:</property> <attributes> <attribute name="weight" value="bold"/> </attributes> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">1</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkLabel" id="info_song_album_label_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="yalign">0</property> <property name="label" translatable="yes">Album:</property> <attributes> <attribute name="weight" value="bold"/> </attributes> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">2</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkLabel" id="info_song_date_label_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="yalign">0</property> <property name="label" translatable="yes">Date:</property> <attributes> <attribute name="weight" value="bold"/> </attributes> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">3</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkLabel" id="info_song_track_label_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="yalign">0</property> <property name="label" translatable="yes">Track:</property> <attributes> <attribute name="weight" value="bold"/> </attributes> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">4</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkLabel" id="info_song_genre_label_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="yalign">0</property> <property name="label" translatable="yes">Genre:</property> <attributes> <attribute name="weight" value="bold"/> </attributes> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">5</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkLabel" id="info_song_file_label_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="yalign">0</property> <property name="label" translatable="yes">File:</property> <attributes> <attribute name="weight" value="bold"/> </attributes> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">6</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkLabel" id="info_song_bitrate_label_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="yalign">0</property> <property name="label" translatable="yes">Bitrate:</property> <attributes> <attribute name="weight" value="bold"/> </attributes> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">7</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkBox" id="info_song_artist_h_box"> <property name="visible">True</property> <property name="can_focus">False</property> <child> <object class="GtkEventBox" id="info_song_artist_eventbox"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="tooltip_text" translatable="yes">Launch artist in Wikipedia</property> <property name="visible_window">False</property> <child> <object class="GtkLabel" id="info_song_artist_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="wrap">True</property> <property name="wrap_mode">word-char</property> <style> <class name="link"/> </style> </object> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">1</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkBox" id="info_song_album_h_box"> <property name="visible">True</property> <property name="can_focus">False</property> <child> <object class="GtkEventBox" id="info_song_album_eventbox"> <property name="can_focus">False</property> <property name="tooltip_text" translatable="yes">Launch album in Wikipedia</property> <property name="visible_window">False</property> <child> <object class="GtkLabel" id="info_song_album_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="wrap">True</property> <property name="wrap_mode">word-char</property> <style> <class name="link"/> </style> </object> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">2</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkBox" id="info_song_title_h_box"> <property name="visible">True</property> <property name="can_focus">False</property> <child> <object class="GtkLabel" id="info_song_title_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="wrap">True</property> <property name="wrap_mode">word-char</property> <property name="selectable">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">0</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkBox" id="info_song_date_h_box"> <property name="visible">True</property> <property name="can_focus">False</property> <child> <object class="GtkLabel" id="info_song_date_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="wrap">True</property> <property name="wrap_mode">word-char</property> <property name="selectable">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">3</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkBox" id="info_song_track_h_box"> <property name="visible">True</property> <property name="can_focus">False</property> <child> <object class="GtkLabel" id="info_song_track_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="wrap">True</property> <property name="wrap_mode">word-char</property> <property name="selectable">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">4</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkBox" id="info_song_genre_h_box"> <property name="visible">True</property> <property name="can_focus">False</property> <child> <object class="GtkLabel" id="info_song_genre_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="wrap">True</property> <property name="wrap_mode">word-char</property> <property name="selectable">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">5</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkBox" id="info_song_file_h_box"> <property name="visible">True</property> <property name="can_focus">False</property> <child> <object class="GtkLabel" id="info_song_file_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="wrap">True</property> <property name="wrap_mode">word-char</property> <property name="selectable">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">6</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkBox" id="info_song_bitrate_h_box"> <property name="visible">True</property> <property name="can_focus">False</property> <child> <object class="GtkLabel" id="info_song_bitrate_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="wrap">True</property> <property name="wrap_mode">word-char</property> <property name="selectable">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">7</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkBox" id="info_song_links_box"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="spacing">6</property> <child> <object class="GtkEventBox" id="info_song_links_more_eventbox"> <property name="can_focus">False</property> <property name="tooltip_text" translatable="yes">Toggle extra tags</property> <property name="visible_window">False</property> <child> <object class="GtkLabel" id="info_song_links_more_label"> <property name="visible">True</property> <property name="can_focus">False</property> <style> <class name="link"/> </style> </object> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkEventBox" id="info_song_links_edit_eventbox"> <property name="can_focus">False</property> <property name="tooltip_text" translatable="yes">Edit song tags</property> <property name="visible_window">False</property> <child> <object class="GtkLabel" id="info_song_links_edit_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">(edit tags)</property> <style> <class name="link"/> </style> </object> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">8</property> <property name="width">2</property> <property name="height">1</property> </packing> </child> </object> <packing> <property name="expand">True</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> </child> <child type="label"> <object class="GtkLabel" id="info_page_song_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">Song Info</property> <attributes> <attribute name="weight" value="bold"/> </attributes> </object> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkExpander" id="info_page_lyrics_expander"> <property name="visible">True</property> <property name="can_focus">True</property> <child> <object class="GtkBox" id="info_page_lyrics_box"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="orientation">vertical</property> <child> <object class="GtkScrolledWindow" id="info_page_lyrics_scrolledwindow"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="vscrollbar_policy">never</property> <property name="shadow_type">in</property> <child> <object class="GtkTextView" id="info_page_lyrics_textview"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="editable">False</property> <property name="wrap_mode">word</property> <property name="left_margin">6</property> </object> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkBox" id="info_page_lyrics_bottom_box"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="spacing">5</property> <child> <object class="GtkEventBox" id="info_page_lyrics_search_eventbox"> <property name="can_focus">False</property> <property name="tooltip_text" translatable="yes">Search Lyricwiki.org for lyrics</property> <property name="visible_window">False</property> <child> <object class="GtkLabel" id="info_page_lyrics_search"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="label" translatable="yes">(search)</property> <style> <class name="link"/> </style> </object> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> </child> <child type="label"> <object class="GtkLabel" id="info_page_lyrics_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">Lyrics</property> <attributes> <attribute name="weight" value="bold"/> </attributes> </object> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> <child> <object class="GtkExpander" id="info_page_album_expander"> <property name="visible">True</property> <property name="can_focus">True</property> <child> <object class="GtkScrolledWindow" id="info_page_album_scrolledwindow"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="vscrollbar_policy">never</property> <property name="shadow_type">in</property> <child> <object class="GtkTextView" id="info_page_album_textview"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="editable">False</property> <property name="wrap_mode">word</property> <property name="left_margin">6</property> </object> </child> </object> </child> <child type="label"> <object class="GtkLabel" id="info_page_album_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">Album Info</property> <attributes> <attribute name="weight" value="bold"/> </attributes> </object> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">2</property> </packing> </child> </object> </child> </object> </child> </object> <object class="GtkEventBox" id="info_tab_eventbox"> <property name="can_focus">False</property> <property name="visible_window">False</property> <child> <object class="GtkBox" id="info_tab_h_box"> <property name="can_focus">False</property> <child> <object class="GtkImage" id="info_tab_image"> <property name="can_focus">False</property> <property name="stock">gtk-file</property> <property name="icon-size">1</property> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="padding">2</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkLabel" id="info_tab_label"> <property name="can_focus">False</property> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="padding">2</property> <property name="position">1</property> </packing> </child> </object> </child> </object> </interface> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/sonata/ui/library.css������������������������������������������������������������������0000664�0000000�0000000�00000000065�13771420143�0017067�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������GtkToggleButton.last_crumb { font-weight: bold; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/sonata/ui/library.glade����������������������������������������������������������������0000664�0000000�0000000�00000024757�13771420143�0017371�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <interface> <!-- interface-requires gtk+ 3.0 --> <object class="GtkImage" id="library_crumb_section_image"> <property name="visible">True</property> <property name="can_focus">False</property> </object> <object class="GtkListStore" id="library_liststore"/> <object class="GtkBox" id="library_page_v_box"> <property name="can_focus">False</property> <property name="margin_left">3</property> <property name="margin_right">3</property> <property name="orientation">vertical</property> <child> <object class="GtkBox" id="library_page_crumbbox"> <property name="can_focus">False</property> <child> <object class="GtkButton" id="library_crumb_button"> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">False</property> <property name="receives_default">True</property> <property name="use_action_appearance">False</property> <child> <object class="GtkArrow" id="library_crumb_arrow"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="halign">center</property> <property name="valign">center</property> <property name="arrow_type">down</property> </object> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkBox" id="library_crumb_box"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="margin_left">12</property> <property name="spacing">6</property> <child> <object class="GtkToggleButton" id="library_crumb_section_togglebutton"> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="use_action_appearance">False</property> <property name="image">library_crumb_section_image</property> <property name="relief">none</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkBox" id="library_crumb_break_box"> <property name="visible">True</property> <property name="can_focus">False</property> <child> <object class="GtkLabel" id="library_crumb_break_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label">...</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> <child> <object class="CrumbBox" id="library_crumbs_box"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="orientation">horizontal</property> <property name="spacing">6</property> <child> <placeholder/> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">2</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="padding">2</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkScrolledWindow" id="library_page_scrolledwindow"> <property name="can_focus">True</property> <property name="shadow_type">in</property> <child> <object class="GtkTreeView" id="library_page_treeview"> <property name="can_focus">True</property> <property name="model">library_liststore</property> <property name="headers_visible">False</property> <property name="headers_clickable">False</property> <property name="rules_hint">True</property> <child internal-child="selection"> <object class="GtkTreeSelection" id="library_page_treeview_selection"> <property name="mode">multiple</property> </object> </child> </object> </child> </object> <packing> <property name="expand">True</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> <child> <object class="GtkBox" id="library_page_searchbox"> <property name="can_focus">True</property> <child> <object class="GtkLabel" id="library_page_searchbox_label"> <property name="can_focus">True</property> <property name="label" translatable="yes">Search:</property> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="padding">3</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkEntry" id="library_page_searchbox_entry"> <property name="can_focus">True</property> <property name="tooltip_text" translatable="yes">Search library</property> </object> <packing> <property name="expand">True</property> <property name="fill">True</property> <property name="padding">2</property> <property name="position">1</property> </packing> </child> <child> <object class="GtkComboBoxText" id="library_page_searchbox_combo"> <property name="can_focus">True</property> <property name="tooltip_text" translatable="yes">Search terms</property> <items> <item translatable="yes">Artist</item> <item translatable="yes">Title</item> <item translatable="yes">Album</item> <item translatable="yes">Genre</item> <item translatable="yes">Filename</item> <item translatable="yes">Everything</item> </items> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="padding">2</property> <property name="position">2</property> </packing> </child> <child> <object class="GtkButton" id="library_page_searchbox_button"> <property name="use_action_appearance">False</property> <property name="can_focus">True</property> <property name="receives_default">False</property> <property name="no_show_all">True</property> <property name="tooltip_text" translatable="yes">End Search</property> <property name="use_action_appearance">False</property> <property name="relief">none</property> <child> <object class="GtkImage" id="library_page_searchbox_button_image"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="stock">gtk-clear</property> </object> </child> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="padding">2</property> <property name="position">3</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="padding">5</property> <property name="position">2</property> </packing> </child> </object> <object class="GtkEventBox" id="library_tab_eventbox"> <property name="can_focus">False</property> <property name="visible_window">False</property> <child> <object class="GtkBox" id="library_tab_h_box"> <property name="can_focus">False</property> <child> <object class="GtkImage" id="library_tab_image"> <property name="can_focus">False</property> <property name="stock">gtk-harddisk</property> <property name="icon-size">1</property> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="padding">2</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkLabel" id="library_tab_label"> <property name="can_focus">False</property> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="padding">2</property> <property name="position">1</property> </packing> </child> </object> </child> </object> </interface> �����������������sonata-1.7.0/sonata/ui/playlists.glade��������������������������������������������������������������0000664�0000000�0000000�00000016760�13771420143�0017744�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <interface> <!-- interface-requires gtk+ 3.0 --> <object class="GtkDialog" id="playlist_name_dialog"> <property name="can_focus">False</property> <property name="border_width">5</property> <property name="resizable">False</property> <property name="modal">True</property> <property name="window_position">center-on-parent</property> <property name="destroy_with_parent">True</property> <property name="type_hint">dialog</property> <child internal-child="vbox"> <object class="GtkBox" id="playlist_name_v_box"> <property name="can_focus">False</property> <property name="orientation">vertical</property> <property name="spacing">2</property> <child> <object class="GtkBox" id="playlist_name_h_box"> <property name="visible">True</property> <property name="can_focus">False</property> <child> <object class="GtkLabel" id="playlist_name_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="label" translatable="yes">Playlist name:</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkEntry" id="playlist_name_entry"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="activates_default">True</property> <property name="truncate_multiline">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child internal-child="action_area"> <object class="GtkButtonBox" id="playlist_name_button_box"> <property name="can_focus">False</property> <property name="layout_style">end</property> <child> <object class="GtkButton" id="playlist_name_cancel_button"> <property name="label">gtk-cancel</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> <property name="use_action_appearance">False</property> <property name="use_stock">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkButton" id="playlist_name_save_button"> <property name="label">gtk-save</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="use_action_appearance">False</property> <property name="use_stock">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="pack_type">end</property> <property name="position">0</property> </packing> </child> </object> </child> <action-widgets> <action-widget response="-2">playlist_name_cancel_button</action-widget> <action-widget response="-3">playlist_name_save_button</action-widget> </action-widgets> </object> <object class="GtkListStore" id="playlists_liststore"> <columns> <!-- column-name gchararray1 --> <column type="gchararray"/> <!-- column-name gchararray2 --> <column type="gchararray"/> </columns> </object> <object class="GtkScrolledWindow" id="playlists_page_scrolledwindow"> <property name="can_focus">True</property> <property name="shadow_type">in</property> <property name="margin">3</property> <child> <object class="GtkTreeView" id="playlists_page_treeview"> <property name="can_focus">True</property> <property name="model">playlists_liststore</property> <property name="headers_visible">False</property> <property name="rules_hint">True</property> <child internal-child="selection"> <object class="GtkTreeSelection" id="playlists_page_treeview_selection"> <property name="mode">multiple</property> </object> </child> <child> <object class="GtkTreeViewColumn" id="playlists_column"> <child> <object class="GtkCellRendererPixbuf" id="playlists_pixbuf_renderer"/> <attributes> <attribute name="stock_id">0</attribute> </attributes> </child> <child> <object class="GtkCellRendererText" id="playlists_text_renderer"> <property name="ellipsize">end</property> </object> <attributes> <attribute name="markup">1</attribute> </attributes> </child> </object> </child> </object> </child> </object> <object class="GtkEventBox" id="playlists_tab_eventbox"> <property name="can_focus">False</property> <property name="visible_window">False</property> <child> <object class="GtkBox" id="playlists_tab_h_box"> <property name="can_focus">False</property> <child> <object class="GtkImage" id="playlists_tab_image"> <property name="can_focus">False</property> <property name="stock">gtk-directory</property> <property name="icon-size">1</property> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="padding">2</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkLabel" id="playlists_tab_label"> <property name="can_focus">False</property> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="padding">2</property> <property name="position">1</property> </packing> </child> </object> </child> </object> </interface> ����������������sonata-1.7.0/sonata/ui/preferences.css��������������������������������������������������������������0000664�0000000�0000000�00000000150�13771420143�0017717�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������GtkLabel.format_code { font-family: Monospace; } GtkLabel.additional_format { padding-top: 6px; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/sonata/ui/preferences.glade������������������������������������������������������������0000664�0000000�0000000�00000344205�13771420143�0020217�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <interface> <!-- interface-requires gtk+ 3.0 --> <object class="GtkAdjustment" id="crossfade_adjustment"> <property name="lower">1</property> <property name="upper">30</property> <property name="step_increment">1</property> <property name="page_increment">5</property> </object> <object class="GtkDialog" id="custom_art_dialog"> <property name="can_focus">False</property> <property name="border_width">5</property> <property name="title" translatable="yes">Custom Artwork</property> <property name="role">custom_art</property> <property name="resizable">False</property> <property name="modal">True</property> <property name="window_position">center-on-parent</property> <property name="destroy_with_parent">True</property> <property name="type_hint">dialog</property> <property name="transient_for">preferences_dialog</property> <child internal-child="vbox"> <object class="GtkBox" id="custom_art_v_box"> <property name="can_focus">False</property> <property name="orientation">vertical</property> <property name="spacing">2</property> <child internal-child="action_area"> <object class="GtkButtonBox" id="custom_art_buttonbox"> <property name="can_focus">False</property> <property name="layout_style">end</property> <child> <object class="GtkButton" id="custom_art_cancel_button"> <property name="label">gtk-cancel</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="use_action_appearance">False</property> <property name="use_stock">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkButton" id="custom_art_accept_button"> <property name="label">gtk-ok</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="can_default">True</property> <property name="has_default">True</property> <property name="receives_default">True</property> <property name="use_action_appearance">False</property> <property name="use_stock">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="pack_type">end</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkBox" id="custom_art_box"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="spacing">6</property> <child> <object class="GtkLabel" id="custom_art_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="label" translatable="yes">Artwork filename:</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkEntry" id="custom_art_entry"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="activates_default">True</property> <property name="truncate_multiline">True</property> </object> <packing> <property name="expand">True</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> </child> <action-widgets> <action-widget response="-2">custom_art_cancel_button</action-widget> <action-widget response="-3">custom_art_accept_button</action-widget> </action-widgets> </object> <object class="GtkListStore" id="plugins_store"> <columns> <!-- column-name gboolean1 --> <column type="gboolean"/> <!-- column-name GdkPixbuf.Pixbuf1 --> <column type="GdkPixbuf"/> <!-- column-name gchararray1 --> <column type="gchararray"/> </columns> </object> <object class="GtkUIManager" id="plugins_ui_manager"> <child> <object class="GtkActionGroup" id="plugin_actions"> <child> <object class="GtkAction" id="plugin_about"> <property name="label" translatable="yes">_About</property> <property name="stock_id">gtk-about</property> <signal handler="plugin_about" name="activate"/> </object> </child> <child> <object class="GtkAction" id="plugin_configure"> <property name="label" translatable="yes">_Configure...</property> <property name="stock_id">gtk-preferences</property> <signal handler="plugin_configure" name="activate"/> </object> </child> </object> </child> <ui> <popup name="pluginmenu"> <menuitem action="plugin_configure"/> <menuitem action="plugin_about"/> </popup> </ui> </object> <object class="GtkAdjustment" id="port_adjustment"> <property name="upper">65535</property> <property name="step_increment">1</property> <property name="page_increment">1</property> </object> <object class="GtkDialog" id="preferences_dialog"> <property name="can_focus">False</property> <property name="border_width">5</property> <property name="title" translatable="yes">Preferences</property> <property name="role">preferences</property> <property name="resizable">False</property> <property name="destroy_with_parent">True</property> <property name="type_hint">dialog</property> <child internal-child="vbox"> <object class="GtkBox" id="preferences_v_box"> <property name="can_focus">False</property> <property name="orientation">vertical</property> <child> <object class="GtkBox" id="preferences_h_box"> <property name="visible">True</property> <property name="can_focus">False</property> <child> <object class="GtkNotebook" id="preferences_notebook"> <property name="visible">True</property> <property name="can_focus">True</property> <child> <object class="GtkAlignment" id="preferences_mpd"> <property name="can_focus">False</property> <property name="margin_left">6</property> <property name="margin_right">6</property> <property name="margin_top">12</property> <property name="margin_bottom">6</property> <child> <object class="GtkFrame" id="preferences_mpd_frame"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label_xalign">0</property> <child> <object class="GtkAlignment" id="preferences_mpd_frame_alignment"> <property name="can_focus">False</property> <property name="margin_left">6</property> <property name="margin_right">6</property> <property name="margin_top">12</property> <property name="margin_bottom">6</property> <child> <object class="GtkBox" id="preferences_mpd_v_box"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="orientation">vertical</property> <property name="spacing">12</property> <child> <object class="GtkFrame" id="connection_frame"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="hexpand">True</property> <property name="label_xalign">0</property> <property name="shadow_type">in</property> <child> <object class="GtkGrid" id="connection_grid"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="margin">12</property> <property name="row_spacing">6</property> <property name="column_spacing">6</property> <property name="row_homogeneous">True</property> <child> <object class="GtkEntry" id="connection_name"> <property name="can_focus">True</property> <property name="hexpand">True</property> <property name="invisible_char">•</property> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">0</property> <property name="width">3</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkLabel" id="connection_name_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="label" translatable="yes">_Name:</property> <property name="use_markup">True</property> <property name="use_underline">True</property> <property name="mnemonic_widget">connection_name</property> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">0</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkEntry" id="connection_host"> <property name="can_focus">True</property> <property name="invisible_char">•</property> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">1</property> <property name="width">3</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkLabel" id="connection_host_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="label" translatable="yes">_Host:</property> <property name="use_markup">True</property> <property name="use_underline">True</property> <property name="mnemonic_widget">connection_host</property> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">1</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkSpinButton" id="connection_port"> <property name="can_focus">True</property> <property name="invisible_char">•</property> <property name="adjustment">port_adjustment</property> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">2</property> <property name="width">3</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkLabel" id="connection_port_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="label" translatable="yes">_Port:</property> <property name="use_markup">True</property> <property name="use_underline">True</property> <property name="mnemonic_widget">connection_port</property> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">2</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkEntry" id="connection_password"> <property name="can_focus">True</property> <property name="has_tooltip">True</property> <property name="tooltip_markup" translatable="yes">Leave blank if no password is required.</property> <property name="tooltip_text" translatable="yes">Leave blank if no password is required.</property> <property name="visibility">False</property> <property name="invisible_char">•</property> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">3</property> <property name="width">3</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkLabel" id="connection_password_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="label" translatable="yes">Pa_ssword:</property> <property name="use_markup">True</property> <property name="use_underline">True</property> <property name="mnemonic_widget">connection_password</property> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">3</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkFileChooserButton" id="connection_dir"> <property name="can_focus">True</property> <property name="action">select-folder</property> <property name="show_hidden">True</property> <property name="title" translatable="yes">Select a Music Directory</property> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">4</property> <property name="width">3</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkLabel" id="connection_dir_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="label" translatable="yes">_Music dir:</property> <property name="use_markup">True</property> <property name="use_underline">True</property> <property name="mnemonic_widget">connection_dir</property> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">4</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> </object> </child> <child type="label"> <object class="GtkBox" id="connection_frame_label_widget"> <property name="visible">True</property> <property name="can_focus">False</property> <child> <object class="GtkComboBoxText" id="connection_profiles"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="entry_text_column">0</property> <property name="id_column">1</property> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="padding">2</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkButton" id="connection_add_profile"> <property name="use_action_appearance">False</property> <property name="can_focus">False</property> <property name="receives_default">False</property> <property name="use_action_appearance">False</property> <child> <object class="GtkImage" id="add_profile_image"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="stock">gtk-add</property> </object> </child> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="padding">2</property> <property name="position">1</property> </packing> </child> <child> <object class="GtkButton" id="connection_remove_profile"> <property name="use_action_appearance">False</property> <property name="can_focus">False</property> <property name="receives_default">False</property> <property name="use_action_appearance">False</property> <child> <object class="GtkImage" id="remove_profile_image"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="stock">gtk-delete</property> </object> </child> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="padding">2</property> <property name="position">2</property> </packing> </child> </object> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkCheckButton" id="connection_autoconnect"> <property name="label" translatable="yes">_Autoconnect on start</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> <property name="use_action_appearance">False</property> <property name="use_underline">True</property> <property name="xalign">0</property> <property name="draw_indicator">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> </child> </object> </child> <child type="label"> <object class="GtkLabel" id="mpd_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="label" translatable="yes">MPD Connection</property> <attributes> <attribute name="weight" value="bold"/> </attributes> </object> </child> </object> </child> </object> </child> <child type="tab"> <object class="GtkLabel" id="preferences_tab_mpd"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">MPD</property> </object> <packing> <property name="tab_fill">False</property> </packing> </child> <child> <object class="GtkAlignment" id="preferences_display"> <property name="can_focus">False</property> <property name="margin_left">6</property> <property name="margin_right">6</property> <property name="margin_top">12</property> <property name="margin_bottom">6</property> <child> <object class="GtkFrame" id="preferences_display_frame"> <property name="can_focus">False</property> <property name="label_xalign">0</property> <child> <object class="GtkBox" id="display_box"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="orientation">vertical</property> <property name="margin">12</property> <child> <object class="GtkCheckButton" id="playback_buttons_check"> <property name="label" translatable="yes">_Playback/volume buttons</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> <property name="use_action_appearance">False</property> <property name="use_underline">True</property> <property name="xalign">0</property> <property name="draw_indicator">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkCheckButton" id="progressbar_check"> <property name="label" translatable="yes">Pr_ogressbar</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> <property name="use_action_appearance">False</property> <property name="use_underline">True</property> <property name="xalign">0</property> <property name="draw_indicator">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> <child> <object class="GtkCheckButton" id="statusbar_check"> <property name="label" translatable="yes">_Statusbar</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> <property name="use_action_appearance">False</property> <property name="use_underline">True</property> <property name="xalign">0</property> <property name="draw_indicator">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">2</property> </packing> </child> <child> <object class="GtkCheckButton" id="tray_icon_check"> <property name="label" translatable="yes">System _tray icon</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> <property name="use_action_appearance">False</property> <property name="use_underline">True</property> <property name="xalign">0</property> <property name="draw_indicator">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">3</property> </packing> </child> <child> <object class="GtkCheckButton" id="lyrics_check"> <property name="label" translatable="yes">Song Ly_rics</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> <property name="use_action_appearance">False</property> <property name="use_underline">True</property> <property name="xalign">0</property> <property name="draw_indicator">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">4</property> </packing> </child> <child> <object class="GtkBox" id="lyrics_preferences"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="halign">end</property> <property name="spacing">6</property> <child> <object class="GtkLabel" id="lyrics_save_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">Save lyrics to:</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkComboBoxText" id="lyrics_save_combo"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="entry_text_column">0</property> <property name="id_column">1</property> <items> <item>~/.lyrics/</item> <item translatable="yes">SONG_DIR</item> </items> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">5</property> </packing> </child> <child> <object class="GtkCheckButton" id="art_check"> <property name="label" translatable="yes">_Album art</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> <property name="use_action_appearance">False</property> <property name="use_underline">True</property> <property name="xalign">0</property> <property name="draw_indicator">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">6</property> </packing> </child> <child> <object class="GtkBox" id="art_preferences"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="halign">end</property> <property name="orientation">vertical</property> <property name="spacing">6</property> <child> <object class="GtkBox" id="art_style_preferences"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="halign">end</property> <property name="spacing">6</property> <child> <object class="GtkLabel" id="art_style_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">Artwork style:</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkComboBoxText" id="art_style_combo"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="entry_text_column">0</property> <property name="id_column">1</property> <items> <item translatable="yes">Standard</item> <item translatable="yes">Stylized</item> </items> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkBox" id="art_search_preferences"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="halign">end</property> <property name="spacing">6</property> <child> <object class="GtkLabel" id="art_search_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">Search locations:</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkComboBoxText" id="art_search_combo"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="entry_text_column">0</property> <property name="id_column">1</property> <items> <item translatable="yes">Local only</item> <item translatable="yes">Local and remote</item> </items> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> <child> <object class="GtkBox" id="art_save_preferences"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="halign">end</property> <property name="spacing">6</property> <child> <object class="GtkLabel" id="art_save_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">Save art to:</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkComboBoxText" id="art_save_combo"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="entry_text_column">0</property> <property name="id_column">1</property> <items> <item>~/.covers/</item> </items> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">2</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">7</property> </packing> </child> </object> </child> <child type="label"> <object class="GtkLabel" id="display_frame_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">Display</property> <attributes> <attribute name="weight" value="bold"/> </attributes> </object> </child> </object> </child> </object> <packing> <property name="position">1</property> </packing> </child> <child type="tab"> <object class="GtkLabel" id="preferences_tab_display"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">Display</property> </object> <packing> <property name="position">1</property> <property name="tab_fill">False</property> </packing> </child> <child> <object class="GtkAlignment" id="preferences_behavior"> <property name="can_focus">False</property> <property name="margin_left">6</property> <property name="margin_right">6</property> <property name="margin_top">12</property> <property name="margin_bottom">6</property> <child> <object class="GtkFrame" id="behavior_frame"> <property name="can_focus">False</property> <property name="label_xalign">0</property> <child> <object class="GtkAlignment" id="behavior_frame_alignment"> <property name="can_focus">False</property> <property name="top_padding">12</property> <property name="left_padding">12</property> <child> <object class="GtkBox" id="behavior_box"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="orientation">vertical</property> <child> <object class="GtkFrame" id="behavior_window_frame"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label_xalign">0</property> <property name="shadow_type">none</property> <child> <object class="GtkAlignment" id="behavior_window_alignment"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="margin">12</property> <child> <object class="GtkBox" id="behavior_window_prefs"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="orientation">vertical</property> <child> <object class="GtkCheckButton" id="behavior_sticky_check"> <property name="label" translatable="yes">_Show window on all workspaces</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> <property name="use_action_appearance">False</property> <property name="use_underline">True</property> <property name="xalign">0</property> <property name="draw_indicator">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkCheckButton" id="behavior_ontop_check"> <property name="label" translatable="yes">_Keep window above other windows</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> <property name="use_action_appearance">False</property> <property name="use_underline">True</property> <property name="xalign">0</property> <property name="draw_indicator">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> <child> <object class="GtkCheckButton" id="behavior_decor_check"> <property name="label" translatable="yes">_Hide window titlebar</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> <property name="use_action_appearance">False</property> <property name="use_underline">True</property> <property name="xalign">0</property> <property name="draw_indicator">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">2</property> </packing> </child> <child> <object class="GtkCheckButton" id="behavior_minimize_check"> <property name="label" translatable="yes">_Minimize to system tray on close/escape</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> <property name="has_tooltip">True</property> <property name="tooltip_markup" translatable="yes">If enabled, closing Sonata will minimize it to the system tray. Note that it&apos;s currently impossible to detect if there actually is a system tray, so only check this if you have one.</property> <property name="tooltip_text" translatable="yes">If enabled, closing Sonata will minimize it to the system tray. Note that it's currently impossible to detect if there actually is a system tray, so only check this if you have one.</property> <property name="use_action_appearance">False</property> <property name="use_underline">True</property> <property name="xalign">0</property> <property name="draw_indicator">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">3</property> </packing> </child> </object> </child> </object> </child> <child type="label"> <object class="GtkLabel" id="behavior_window_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">Window Behavior</property> <attributes> <attribute name="weight" value="bold"/> </attributes> </object> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkFrame" id="behavior_misc_frame"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label_xalign">0</property> <property name="shadow_type">none</property> <child> <object class="GtkAlignment" id="behavior_misc_alignment"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="margin">12</property> <child> <object class="GtkBox" id="behavior_misc_prefs"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="orientation">vertical</property> <child> <object class="GtkCheckButton" id="misc_updatestart_check"> <property name="label" translatable="yes">_Update MPD library on start</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> <property name="has_tooltip">True</property> <property name="tooltip_markup" translatable="yes">If enabled, Sonata will automatically update your MPD library when it starts up.</property> <property name="tooltip_text" translatable="yes">If enabled, Sonata will automatically update your MPD library when it starts up.</property> <property name="use_action_appearance">False</property> <property name="use_underline">True</property> <property name="xalign">0</property> <property name="draw_indicator">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkCheckButton" id="misc_exit_stop_check"> <property name="label" translatable="yes">S_top playback on exit</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> <property name="has_tooltip">True</property> <property name="tooltip_markup" translatable="yes">MPD allows playback even when the client is not open. If enabled, Sonata will behave like a more conventional music player and, instead, stop playback upon exit.</property> <property name="tooltip_text" translatable="yes">MPD allows playback even when the client is not open. If enabled, Sonata will behave like a more conventional music player and, instead, stop playback upon exit.</property> <property name="use_action_appearance">False</property> <property name="use_underline">True</property> <property name="xalign">0</property> <property name="draw_indicator">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> <child> <object class="GtkBox" id="misc_infofile_box"> <property name="visible">True</property> <property name="can_focus">False</property> <child> <object class="GtkCheckButton" id="misc_infofile_usage_check"> <property name="label" translatable="yes">_Write status file:</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> <property name="has_tooltip">True</property> <property name="tooltip_markup" translatable="yes">If enabled, Sonata will create a xmms-infopipe like file containing information about the current song. Many applications support the xmms-info file (Instant Messengers, IRC Clients...)</property> <property name="tooltip_text" translatable="yes">If enabled, Sonata will create a xmms-infopipe like file containing information about the current song. Many applications support the xmms-info file (Instant Messengers, IRC Clients...)</property> <property name="use_action_appearance">False</property> <property name="use_underline">True</property> <property name="xalign">0</property> <property name="draw_indicator">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkEntry" id="misc_infofile_entry"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="has_tooltip">True</property> <property name="tooltip_markup" translatable="yes">If enabled, Sonata will create a xmms-infopipe like file containing information about the current song. Many applications support the xmms-info file (Instant Messengers, IRC Clients...)</property> <property name="tooltip_text" translatable="yes">If enabled, Sonata will create a xmms-infopipe like file containing information about the current song. Many applications support the xmms-info file (Instant Messengers, IRC Clients...)</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">2</property> </packing> </child> </object> </child> </object> </child> <child type="label"> <object class="GtkLabel" id="behavior_misc_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">Miscellaneous</property> <attributes> <attribute name="weight" value="bold"/> </attributes> </object> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> </child> </object> </child> </object> </child> </object> <packing> <property name="position">2</property> </packing> </child> <child type="tab"> <object class="GtkLabel" id="preferences_tab_behavior"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">Behavior</property> </object> <packing> <property name="position">2</property> <property name="tab_fill">False</property> </packing> </child> <child> <object class="GtkAlignment" id="preferences_format"> <property name="can_focus">False</property> <property name="margin_left">6</property> <property name="margin_right">6</property> <property name="margin_top">12</property> <property name="margin_bottom">6</property> <child> <object class="GtkFrame" id="format_frame"> <property name="can_focus">False</property> <property name="label_xalign">0</property> <child> <object class="GtkAlignment" id="format_frame_alignment"> <property name="can_focus">False</property> <property name="margin">12</property> <child> <object class="GtkBox" id="format_box"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="orientation">vertical</property> <property name="spacing">6</property> <child> <object class="GtkGrid" id="format_grid"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="column_spacing">12</property> <child> <object class="GtkLabel" id="format_playlist_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="label" translatable="yes">C_urrent playlist:</property> <property name="use_underline">True</property> <property name="mnemonic_widget">format_playlist_entry</property> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">0</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkEntry" id="format_playlist_entry"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="hexpand">True</property> <property name="invisible_char">•</property> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">0</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkLabel" id="format_library_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="label" translatable="yes">_Library:</property> <property name="use_underline">True</property> <property name="mnemonic_widget">format_library_entry</property> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">1</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkEntry" id="format_library_entry"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="invisible_char">•</property> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">1</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkLabel" id="format_window_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="label" translatable="yes">_Window title:</property> <property name="use_underline">True</property> <property name="mnemonic_widget">format_window_entry</property> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">2</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkEntry" id="format_window_entry"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="invisible_char">•</property> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">2</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkLabel" id="format_current1_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="label" translatable="yes">Current _song line 1:</property> <property name="use_underline">True</property> <property name="mnemonic_widget">format_current1_entry</property> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">3</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkEntry" id="format_current1_entry"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="invisible_char">•</property> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">3</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkLabel" id="format_current2_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="label" translatable="yes">Current s_ong line 2:</property> <property name="use_underline">True</property> <property name="mnemonic_widget">format_current2_entry</property> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">4</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkEntry" id="format_current2_entry"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="invisible_char">•</property> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">4</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkBox" id="format_avail_box"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="orientation">vertical</property> <child> <object class="GtkLabel" id="format_avail_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="label" translatable="yes"><small>Available options:</small></property> <property name="use_markup">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkGrid" id="format_avail_descs"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="column_spacing">12</property> <property name="margin">6</property> <child> <placeholder/> </child> <child> <placeholder/> </child> <child> <placeholder/> </child> <child> <placeholder/> </child> </object> <packing> <property name="expand">True</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> </child> </object> </child> <child type="label"> <object class="GtkLabel" id="format_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">Song Formatting</property> <attributes> <attribute name="weight" value="bold"/> </attributes> </object> </child> </object> </child> </object> <packing> <property name="position">3</property> </packing> </child> <child type="tab"> <object class="GtkLabel" id="preferences_tab_format"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">Format</property> </object> <packing> <property name="position">3</property> <property name="tab_fill">False</property> </packing> </child> <child> <object class="GtkAlignment" id="preferences_extras"> <property name="can_focus">False</property> <property name="margin_left">6</property> <property name="margin_right">6</property> <property name="margin_top">12</property> <property name="margin_bottom">6</property> <child> <object class="GtkFrame" id="preferences_extras_frame"> <property name="can_focus">False</property> <property name="label_xalign">0</property> <child> <object class="GtkAlignment" id="extras_frame_alignment"> <property name="can_focus">False</property> <property name="margin">12</property> <child> <object class="GtkBox" id="scrobbler_box"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="orientation">vertical</property> <property name="spacing">6</property> <child> <object class="GtkCheckButton" id="scrobbler_check"> <property name="label" translatable="yes">_Audioscrobbling (Last.fm)</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> <property name="use_action_appearance">False</property> <property name="use_underline">True</property> <property name="xalign">0</property> <property name="draw_indicator">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkBox" id="scrobbler_username_box"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="halign">end</property> <property name="spacing">6</property> <child> <object class="GtkLabel" id="scrobbler_username_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">_Username:</property> <property name="use_underline">True</property> <property name="mnemonic_widget">scrobbler_username_entry</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkEntry" id="scrobbler_username_entry"> <property name="visible">True</property> <property name="can_focus">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> <child> <object class="GtkBox" id="scrobbler_password_box"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="halign">end</property> <property name="spacing">6</property> <child> <object class="GtkLabel" id="scrobbler_password_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">_Password:</property> <property name="use_underline">True</property> <property name="mnemonic_widget">scrobbler_password_entry</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkEntry" id="scrobbler_password_entry"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="visibility">False</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">2</property> </packing> </child> <child> <object class="GtkCheckButton" id="notification_check"> <property name="label" translatable="yes">Popup _notification on song changes</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> <property name="use_action_appearance">False</property> <property name="use_underline">True</property> <property name="xalign">0</property> <property name="draw_indicator">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">3</property> </packing> </child> <child> <object class="GtkBox" id="notification_box"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="halign">end</property> <property name="spacing">6</property> <child> <object class="GtkComboBoxText" id="notification_time_combo"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="entry_text_column">0</property> <property name="id_column">1</property> <items> <item translatable="yes">Entire song</item> </items> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkComboBoxText" id="notification_loc_combo"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="entry_text_column">0</property> <property name="id_column">1</property> <items> <item translatable="yes">System tray</item> <item translatable="yes">Top Left</item> <item translatable="yes">Top Right</item> <item translatable="yes">Bottom Left</item> <item translatable="yes">Bottom Right</item> <item translatable="yes">Screen Center</item> </items> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">4</property> </packing> </child> <child> <object class="GtkCheckButton" id="crossfade_check"> <property name="label" translatable="yes">C_rossfade</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> <property name="use_action_appearance">False</property> <property name="use_underline">True</property> <property name="xalign">0</property> <property name="draw_indicator">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">5</property> </packing> </child> <child> <object class="GtkBox" id="crossfade_box"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="halign">end</property> <property name="spacing">6</property> <child> <object class="GtkLabel" id="crossfade_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">_Fade length:</property> <property name="use_underline">True</property> <property name="mnemonic_widget">crossfade_time</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkSpinButton" id="crossfade_time"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="adjustment">crossfade_adjustment</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> <child> <object class="GtkLabel" id="crossfade_extra_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">sec</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">2</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">6</property> </packing> </child> </object> </child> </object> </child> <child type="label"> <object class="GtkLabel" id="extras_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">Extras</property> <attributes> <attribute name="weight" value="bold"/> </attributes> </object> </child> </object> </child> </object> <packing> <property name="position">4</property> </packing> </child> <child type="tab"> <object class="GtkLabel" id="preferences_tab_extras"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">Extras</property> </object> <packing> <property name="position">4</property> <property name="tab_fill">False</property> </packing> </child> <child> <object class="GtkScrolledWindow" id="preferences_plugins"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="shadow_type">in</property> <property name="margin">6</property> <child> <object class="GtkTreeView" id="plugins_treeview"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="model">plugins_store</property> <property name="headers_clickable">False</property> <property name="rules_hint">True</property> <property name="search_column">0</property> <child internal-child="selection"> <object class="GtkTreeSelection" id="plugins_treeview_selection"/> </child> <child> <object class="GtkTreeViewColumn" id="plugins_check_column"> <property name="title" translatable="yes">Enabled</property> <child> <object class="GtkCellRendererToggle" id="plugins_check_renderer"/> <attributes> <attribute name="active">0</attribute> </attributes> </child> </object> </child> <child> <object class="GtkTreeViewColumn" id="plugins_info_column"> <property name="spacing">10</property> <property name="max_width">0</property> <property name="title" translatable="yes">Description</property> <child> <object class="GtkCellRendererPixbuf" id="plugins_pixbuf_renderer"/> <attributes> <attribute name="pixbuf">1</attribute> </attributes> </child> <child> <object class="GtkCellRendererText" id="plugins_text_renderer"> <property name="width_chars">30</property> <property name="wrap_mode">word</property> <property name="wrap_width">10</property> <property name="max_width_chars">30</property> </object> <attributes> <attribute name="markup">2</attribute> </attributes> </child> </object> </child> </object> </child> </object> <packing> <property name="position">5</property> </packing> </child> <child type="tab"> <object class="GtkLabel" id="preferences_tab_plugins"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">Plugins</property> </object> <packing> <property name="position">5</property> <property name="tab_fill">False</property> </packing> </child> </object> <packing> <property name="expand">True</property> <property name="fill">True</property> <property name="padding">10</property> <property name="position">0</property> </packing> </child> </object> <packing> <property name="expand">True</property> <property name="fill">True</property> <property name="padding">10</property> <property name="position">0</property> </packing> </child> <child internal-child="action_area"> <object class="GtkButtonBox" id="preferences_action"> <property name="can_focus">False</property> <property name="layout_style">end</property> <child> <object class="GtkButton" id="preferences_closebutton"> <property name="label">gtk-close</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="use_action_appearance">False</property> <property name="use_stock">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="pack_type">end</property> <property name="position">1</property> </packing> </child> </object> </child> <action-widgets> <action-widget response="0">preferences_closebutton</action-widget> </action-widgets> </object> </interface> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/sonata/ui/sonata.css�������������������������������������������������������������������0000664�0000000�0000000�00000000436�13771420143�0016712�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������GtkLabel.tray_label, GtkLabel.current_label { font-weight: bold; } GtkLabel.fullscreen_label { font-size: 19.5px;/*= 20000 / 1024 */ } GtkLabel.fullscreen_label2 { font-size: 11.7px;/*= 12000/1024 */ } GtkLabel.fullscreen_label, GtkLabel.fullscreen_label2 { color: white; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/sonata/ui/sonata.glade�����������������������������������������������������������������0000664�0000000�0000000�00000115474�13771420143�0017207�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <interface> <!-- interface-requires gtk+ 3.0 --> <object class="GtkListStore" id="artwork_liststore"> <columns> <!-- column-name gint1 --> <column type="gint"/> <!-- column-name GdkPixbuf1 --> <column type="GdkPixbuf"/> </columns> </object> <object class="GtkDialog" id="artwork_dialog"> <property name="can_focus">False</property> <property name="title" translatable="yes">Choose Cover Art</property> <property name="role">artwork_chooser</property> <property name="resizable">False</property> <property name="modal">True</property> <property name="window_position">center-on-parent</property> <property name="destroy_with_parent">True</property> <property name="type_hint">normal</property> <property name="transient_for">main_window</property> <child internal-child="vbox"> <object class="GtkBox" id="artwork_v_box"> <property name="can_focus">False</property> <property name="orientation">vertical</property> <child> <object class="GtkScrolledWindow" id="artwork_scrolledwindow"> <property name="width_request">360</property> <property name="height_request">325</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="hscrollbar_policy">never</property> <property name="shadow_type">in</property> <child> <object class="GtkIconView" id="artwork_iconview"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="model">artwork_liststore</property> <property name="columns">2</property> <property name="item_width">162</property> </object> </child> </object> <packing> <property name="expand">True</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkExpander" id="artwork_expander"> <property name="visible">True</property> <property name="can_focus">True</property> <child> <object class="GtkBox" id="artwork_expander_h_box"> <property name="visible">True</property> <property name="can_focus">False</property> <child> <object class="GtkGrid" id="artwork_expander_grid"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="column_spacing">6</property> <child> <object class="GtkLabel" id="artwork_artist_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">Artist:</property> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">0</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkLabel" id="artwork_album_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">Album:</property> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">1</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkEntry" id="artwork_artist_entry"> <property name="visible">True</property> <property name="can_focus">True</property> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">0</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkEntry" id="artwork_album_entry"> <property name="visible">True</property> <property name="can_focus">True</property> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">1</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkButton" id="artwork_update_button"> <property name="label">gtk-refresh</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="halign">center</property> <property name="valign">center</property> <property name="use_action_appearance">False</property> <property name="use_stock">True</property> </object> <packing> <property name="expand">True</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> </child> <child type="label"> <object class="GtkLabel" id="artwork_expander_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">Edit search terms</property> </object> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> <child internal-child="action_area"> <object class="GtkButtonBox" id="artwork_button_box"> <property name="can_focus">False</property> <child> <object class="GtkButton" id="artwork_cancel_button"> <property name="label">gtk-cancel</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="use_action_appearance">False</property> <property name="use_stock">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkButton" id="artwork_choose_button"> <property name="label">gtk-ok</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="use_action_appearance">False</property> <property name="use_stock">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="pack_type">end</property> <property name="position">2</property> </packing> </child> </object> </child> <action-widgets> <action-widget response="-6">artwork_cancel_button</action-widget> <action-widget response="-3">artwork_choose_button</action-widget> </action-widgets> </object> <object class="GtkBox" id="expander_label_widget"> <property name="can_focus">False</property> <property name="orientation">vertical</property> <child> <object class="GtkLabel" id="current_label_1"> <property name="can_focus">False</property> <property name="xalign">0</property> <style> <class name="current_label"/> </style> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkLabel" id="current_label_2"> <property name="can_focus">False</property> <property name="xalign">0</property> <style> <class name="current_label2"/> </style> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="position">1</property> </packing> </child> </object> <object class="GtkWindow" id="fullscreen_window"> <property name="can_focus">False</property> <property name="title" translatable="yes">Cover Art</property> <property name="role">fullscreenWindow</property> <child> <object class="GtkBox" id="fullscreen_v_box"> <property name="can_focus">False</property> <property name="halign">center</property> <property name="valign">center</property> <property name="orientation">vertical</property> <child> <object class="GtkBox" id="fullscreen_h_box"> <property name="can_focus">False</property> <child> <object class="GtkImage" id="fullscreen_image"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="halign">center</property> <property name="hexpand">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> </object> <packing> <property name="expand">True</property> <property name="fill">True</property> <property name="padding">3</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkLabel" id="fullscreen_label_1"> <property name="can_focus">False</property> <property name="halign">center</property> <style> <class name="fullscreen_label"/> </style> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="position">1</property> </packing> </child> <child> <object class="GtkLabel" id="fullscreen_label_2"> <property name="can_focus">False</property> <property name="halign">center</property> <style> <class name="fullscreen_label2"/> </style> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="position">2</property> </packing> </child> </object> </child> </object> <object class="GtkImage" id="local_art_preview_image"> <property name="visible">True</property> <property name="can_focus">False</property> </object> <object class="GtkFileChooserDialog" id="local_artwork_dialog"> <property name="can_focus">False</property> <property name="border_width">5</property> <property name="title" translatable="yes">Open Image</property> <property name="role">local_art_dialog</property> <property name="modal">True</property> <property name="window_position">center-on-parent</property> <property name="default_width">600</property> <property name="default_height">400</property> <property name="destroy_with_parent">True</property> <property name="type_hint">dialog</property> <property name="transient_for">main_window</property> <property name="preview_widget">local_art_preview_image</property> <property name="use_preview_label">False</property> <child internal-child="vbox"> <object class="GtkBox" id="local_artwork_v_box"> <property name="can_focus">False</property> <property name="orientation">vertical</property> <property name="spacing">2</property> <child internal-child="action_area"> <object class="GtkButtonBox" id="local_artwork_buttonbox"> <property name="can_focus">False</property> <property name="layout_style">end</property> <child> <object class="GtkButton" id="local_art_cancel_button"> <property name="label">gtk-cancel</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">False</property> <property name="receives_default">True</property> <property name="use_action_appearance">False</property> <property name="use_stock">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkButton" id="local_art_open_button"> <property name="label">gtk-open</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="can_default">True</property> <property name="has_default">True</property> <property name="receives_default">True</property> <property name="use_action_appearance">False</property> <property name="use_stock">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="pack_type">end</property> <property name="position">0</property> </packing> </child> <child> <placeholder/> </child> </object> </child> <action-widgets> <action-widget response="-6">local_art_cancel_button</action-widget> <action-widget response="-5">local_art_open_button</action-widget> </action-widgets> </object> <object class="GtkDialog" id="lyrics_search_dialog"> <property name="can_focus">False</property> <property name="border_width">5</property> <property name="title" translatable="yes">Lyrics Search</property> <property name="role">lyrics_search</property> <property name="resizable">False</property> <property name="modal">True</property> <property name="window_position">center-on-parent</property> <property name="destroy_with_parent">True</property> <property name="type_hint">dialog</property> <property name="transient_for">main_window</property> <child internal-child="vbox"> <object class="GtkBox" id="lyrics_search_v_box"> <property name="can_focus">False</property> <property name="orientation">vertical</property> <property name="spacing">2</property> <child internal-child="action_area"> <object class="GtkButtonBox" id="lyrics_search_button_box"> <property name="can_focus">False</property> <property name="layout_style">end</property> <child> <object class="GtkButton" id="lyrics_search_cancel_button"> <property name="label">gtk-cancel</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> <property name="use_action_appearance">False</property> <property name="use_stock">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkButton" id="lyrics_search_find_button"> <property name="label">gtk-find</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="use_action_appearance">False</property> <property name="use_stock">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="pack_type">end</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkGrid" id="lyrics_search_grid"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="column_spacing">6</property> <child> <object class="GtkLabel" id="lyrics_search_artist_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="label" translatable="yes">Artist Name:</property> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">0</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkLabel" id="lyrics_search_title_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="label" translatable="yes">Song Title:</property> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">1</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkEntry" id="lyrics_search_artist_entry"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="truncate_multiline">True</property> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">0</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkEntry" id="lyrics_search_title_entry"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="truncate_multiline">True</property> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">1</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> </child> <action-widgets> <action-widget response="-2">lyrics_search_cancel_button</action-widget> <action-widget response="-3">lyrics_search_find_button</action-widget> </action-widgets> </object> <object class="GtkBox" id="tray_v_box"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="orientation">vertical</property> <property name="margin">6</property> <child> <object class="GtkBox" id="tray_h_box"> <property name="visible">True</property> <property name="can_focus">False</property> <child> <object class="GtkImage" id="tray_album_image"> <property name="width_request">26</property> <property name="height_request">77</property> <property name="visible">True</property> <property name="can_focus">False</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkBox" id="tray_inner_v_box"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="orientation">vertical</property> <child> <object class="GtkLabel" id="tray_label_1"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="xpad">6</property> <property name="label" translatable="yes">Playlist</property> <style> <class name="tray_label"/> </style> </object> <packing> <property name="expand">True</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkLabel" id="tray_label_2"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="xpad">6</property> <property name="label" translatable="yes">Playlist</property> <style> <class name="tray_label2"/> </style> </object> <packing> <property name="expand">True</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> <child> <object class="GtkProgressBar" id="tray_progressbar"> <property name="can_focus">False</property> <property name="pulse_step">0.050000000000000003</property> <property name="show_text">True</property> <property name="margin">6</property> </object> <packing> <property name="expand">True</property> <property name="fill">True</property> <property name="position">2</property> </packing> </child> </object> <packing> <property name="expand">True</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> <packing> <property name="expand">True</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> </object> <object class="GtkAdjustment" id="volume_button_adjustment"> <property name="upper">100</property> <property name="step_increment">5</property> <property name="page_increment">10</property> </object> <object class="GtkWindow" id="main_window"> <property name="can_focus">True</property> <property name="title">Sonata</property> <property name="role">mainWindow</property> <child> <object class="GtkBox" id="main_h_box"> <property name="can_focus">False</property> <child> <object class="GtkBox" id="main_v_box"> <property name="can_focus">False</property> <property name="orientation">vertical</property> <child> <object class="GtkBox" id="top_h_box"> <property name="can_focus">False</property> <child> <object class="GtkEventBox" id="image_event_box"> <property name="can_focus">False</property> <child> <object class="GtkImage" id="main_album_image"> <property name="visible">True</property> <property name="can_focus">False</property> </object> </child> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="padding">6</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkBox" id="top_v_box"> <property name="can_focus">False</property> <property name="orientation">vertical</property> <child> <object class="GtkBox" id="toptop_h_box"> <property name="can_focus">False</property> <child> <object class="GtkButton" id="prev_button"> <property name="use_action_appearance">False</property> <property name="can_focus">False</property> <property name="receives_default">False</property> <property name="margin_right">5</property> <property name="use_action_appearance">False</property> <property name="relief">none</property> <child> <object class="GtkImage" id="prev_button_image"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="stock">gtk-media-previous</property> </object> </child> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkButton" id="playpause_button"> <property name="use_action_appearance">False</property> <property name="can_focus">False</property> <property name="receives_default">False</property> <property name="margin_right">5</property> <property name="use_action_appearance">False</property> <property name="relief">none</property> <child> <object class="GtkImage" id="playpause_button_image"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="stock">gtk-media-play</property> </object> </child> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="position">1</property> </packing> </child> <child> <object class="GtkButton" id="stop_button"> <property name="use_action_appearance">False</property> <property name="can_focus">False</property> <property name="receives_default">False</property> <property name="margin_right">5</property> <property name="use_action_appearance">False</property> <property name="relief">none</property> <child> <object class="GtkImage" id="stop_button_image"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="stock">gtk-media-stop</property> </object> </child> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="position">2</property> </packing> </child> <child> <object class="GtkButton" id="next_button"> <property name="use_action_appearance">False</property> <property name="can_focus">False</property> <property name="receives_default">False</property> <property name="margin_right">5</property> <property name="use_action_appearance">False</property> <property name="relief">none</property> <child> <object class="GtkImage" id="next_button_image"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="stock">gtk-media-next</property> </object> </child> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="position">3</property> </packing> </child> <child> <object class="GtkBox" id="progress_box"> <property name="can_focus">False</property> <property name="valign">center</property> <property name="margin_right">5</property> <property name="orientation">vertical</property> <child> <object class="GtkEventBox" id="progress_event_box"> <property name="can_focus">False</property> <child> <object class="GtkProgressBar" id="progress_bar"> <property name="can_focus">False</property> <property name="pulse_step">0.050000000000000003</property> <property name="show_text">True</property> </object> </child> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="padding">6</property> <property name="position">0</property> </packing> </child> </object> <packing> <property name="expand">True</property> <property name="fill">True</property> <property name="position">4</property> </packing> </child> <child> <object class="GtkVolumeButton" id="volume_button"> <property name="use_action_appearance">False</property> <property name="can_focus">False</property> <property name="receives_default">False</property> <property name="use_action_appearance">False</property> <property name="adjustment">volume_button_adjustment</property> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="position">5</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="padding">2</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkExpander" id="expander"> <property name="can_focus">False</property> <property name="label" translatable="yes">Playlist</property> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="padding">2</property> <property name="position">1</property> </packing> </child> </object> <packing> <property name="expand">True</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="padding">5</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkNotebook" id="main_notebook"> <property name="can_focus">False</property> <property name="scrollable">True</property> <child> <placeholder/> </child> </object> <packing> <property name="expand">True</property> <property name="fill">True</property> <property name="padding">5</property> <property name="position">1</property> </packing> </child> <child> <object class="GtkStatusbar" id="main_statusbar"> <property name="can_focus">False</property> <child> <placeholder/> </child> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="position">2</property> </packing> </child> </object> <packing> <property name="expand">True</property> <property name="fill">True</property> <property name="padding">3</property> <property name="position">0</property> </packing> </child> </object> </child> </object> </interface> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/sonata/ui/streams.glade����������������������������������������������������������������0000664�0000000�0000000�00000021573�13771420143�0017374�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <interface> <!-- interface-requires gtk+ 3.0 --> <object class="GtkDialog" id="stream_edit_dialog"> <property name="can_focus">False</property> <property name="border_width">5</property> <property name="role">stream_edit</property> <property name="resizable">False</property> <property name="modal">True</property> <property name="window_position">center-on-parent</property> <property name="destroy_with_parent">True</property> <property name="type_hint">dialog</property> <child internal-child="vbox"> <object class="GtkBox" id="stream_edit_v_box"> <property name="can_focus">False</property> <property name="orientation">vertical</property> <property name="spacing">2</property> <child internal-child="action_area"> <object class="GtkButtonBox" id="stream_edit_button_box"> <property name="can_focus">False</property> <property name="layout_style">end</property> <child> <object class="GtkButton" id="stream_edit_cancel_button"> <property name="label">gtk-cancel</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> <property name="use_action_appearance">False</property> <property name="use_stock">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkButton" id="stream_edit_save_button"> <property name="label">gtk-save</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="use_action_appearance">False</property> <property name="use_stock">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="pack_type">end</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkGrid" id="stream_edit_grid"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="column_spacing">6</property> <child> <object class="GtkLabel" id="stream_edit_name_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="label" translatable="yes">Stream name:</property> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">0</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkLabel" id="stream_edit_url_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="label" translatable="yes">Stream URL:</property> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">1</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkEntry" id="stream_edit_name_entry"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="truncate_multiline">True</property> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">0</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkEntry" id="stream_edit_url_entry"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="truncate_multiline">True</property> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">1</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> </child> <action-widgets> <action-widget response="-2">stream_edit_cancel_button</action-widget> <action-widget response="-3">stream_edit_save_button</action-widget> </action-widgets> </object> <object class="GtkListStore" id="streams_liststore"> <columns> <!-- column-name gchararray1 --> <column type="gchararray"/> <!-- column-name gchararray2 --> <column type="gchararray"/> <!-- column-name gchararray3 --> <column type="gchararray"/> </columns> </object> <object class="GtkScrolledWindow" id="streams_page_scrolledwindow"> <property name="can_focus">True</property> <property name="shadow_type">in</property> <property name="margin">3</property> <child> <object class="GtkTreeView" id="streams_page_treeview"> <property name="can_focus">True</property> <property name="model">streams_liststore</property> <property name="headers_visible">False</property> <property name="rules_hint">True</property> <child internal-child="selection"> <object class="GtkTreeSelection" id="streams_page_treeview_selection"> <property name="mode">multiple</property> </object> </child> <child> <object class="GtkTreeViewColumn" id="streams_column"> <child> <object class="GtkCellRendererPixbuf" id="streams_pixbuf_renderer"/> <attributes> <attribute name="stock_id">0</attribute> </attributes> </child> <child> <object class="GtkCellRendererText" id="streams_text_renderer"> <property name="ellipsize">end</property> </object> <attributes> <attribute name="markup">1</attribute> </attributes> </child> </object> </child> </object> </child> </object> <object class="GtkEventBox" id="streams_tab_eventbox"> <property name="can_focus">False</property> <property name="visible_window">False</property> <child> <object class="GtkBox" id="streams_tab_h_box"> <property name="can_focus">False</property> <child> <object class="GtkImage" id="streams_tab_image"> <property name="can_focus">False</property> <property name="stock">gtk-network</property> <property name="icon-size">1</property> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="padding">2</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkLabel" id="streams_tab_label"> <property name="can_focus">False</property> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="padding">2</property> <property name="position">1</property> </packing> </child> </object> </child> </object> </interface> �������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/sonata/ui/tagedit.css������������������������������������������������������������������0000664�0000000�0000000�00000000051�13771420143�0017037�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������GtkEntry.modified { color: #FF0000; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/sonata/ui/tagedit.glade����������������������������������������������������������������0000664�0000000�0000000�00000057114�13771420143�0017337�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <interface> <!-- interface-requires gtk+ 3.0 --> <object class="GtkDialog" id="tags_dialog"> <property name="width_request">375</property> <property name="can_focus">False</property> <property name="role">edit_tags</property> <property name="resizable">False</property> <property name="modal">True</property> <property name="window_position">center-on-parent</property> <property name="destroy_with_parent">True</property> <property name="type_hint">dialog</property> <child internal-child="vbox"> <object class="GtkBox" id="tags_v_box"> <property name="can_focus">False</property> <property name="orientation">vertical</property> <property name="spacing">2</property> <child internal-child="action_area"> <object class="GtkButtonBox" id="tags_button_box"> <property name="can_focus">False</property> <property name="layout_style">end</property> <child> <object class="GtkButton" id="tags_saveall_button"> <property name="label" translatable="yes">Save _All</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="no_show_all">True</property> <property name="use_action_appearance">False</property> <property name="image">tags_saveall_image</property> <property name="use_underline">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkButton" id="tags_cancel_button"> <property name="label">gtk-cancel</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="use_action_appearance">False</property> <property name="use_stock">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> <child> <object class="GtkButton" id="tags_save_button"> <property name="label">gtk-save</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="use_action_appearance">False</property> <property name="use_stock">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">2</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="pack_type">end</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkGrid" id="tags_grid"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="halign">center</property> <property name="margin">12</property> <property name="orientation">vertical</property> <property name="row_spacing">3</property> <property name="column_spacing">6</property> <property name="row_homogeneous">True</property> <child> <object class="GtkImage" id="tags_sonata_image"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="halign">end</property> <property name="valign">center</property> <property name="stock">sonata</property> <property name="icon-size">5</property> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">0</property> <property name="width">1</property> <property name="height">2</property> </packing> </child> <child> <object class="GtkLabel" id="tags_title_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="label" translatable="yes">Title:</property> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">2</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkLabel" id="tags_artist_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="label" translatable="yes">Artist:</property> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">3</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkLabel" id="tags_album_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="label" translatable="yes">Album:</property> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">4</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkLabel" id="tags_year_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="label" translatable="yes">Year:</property> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">5</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkLabel" id="tags_genre_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="label" translatable="yes">Genre:</property> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">6</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkLabel" id="tags_comment_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="label" translatable="yes">Comment:</property> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">7</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkLabel" id="tags_track_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="label" translatable="yes">Track:</property> </object> <packing> <property name="left_attach">3</property> <property name="top_attach">5</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkEntry" id="tags_title_entry"> <property name="visible">True</property> <property name="can_focus">True</property> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">2</property> <property name="width">4</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkEntry" id="tags_artist_entry"> <property name="visible">True</property> <property name="can_focus">True</property> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">3</property> <property name="width">4</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkEntry" id="tags_album_entry"> <property name="visible">True</property> <property name="can_focus">True</property> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">4</property> <property name="width">4</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkEntry" id="tags_year_entry"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="max_length">4</property> <property name="width_chars">4</property> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">5</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkEntry" id="tags_comment_entry"> <property name="visible">True</property> <property name="can_focus">True</property> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">7</property> <property name="width">4</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkEntry" id="tags_track_entry"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="max_length">4</property> <property name="width_chars">4</property> </object> <packing> <property name="left_attach">4</property> <property name="top_attach">5</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkButton" id="tags_save_title_button"> <property name="use_action_appearance">False</property> <property name="width_request">12</property> <property name="height_request">12</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="halign">center</property> <property name="valign">center</property> <property name="use_action_appearance">False</property> </object> <packing> <property name="left_attach">5</property> <property name="top_attach">2</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkButton" id="tags_save_artist_button"> <property name="use_action_appearance">False</property> <property name="width_request">12</property> <property name="height_request">12</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="halign">center</property> <property name="valign">center</property> <property name="use_action_appearance">False</property> </object> <packing> <property name="left_attach">5</property> <property name="top_attach">3</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkButton" id="tags_save_album_button"> <property name="use_action_appearance">False</property> <property name="width_request">12</property> <property name="height_request">12</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="halign">center</property> <property name="valign">center</property> <property name="use_action_appearance">False</property> </object> <packing> <property name="left_attach">5</property> <property name="top_attach">4</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkButton" id="tags_save_year_button"> <property name="use_action_appearance">False</property> <property name="width_request">12</property> <property name="height_request">12</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="halign">center</property> <property name="valign">center</property> <property name="use_action_appearance">False</property> </object> <packing> <property name="left_attach">2</property> <property name="top_attach">5</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkButton" id="tags_save_genre_button"> <property name="use_action_appearance">False</property> <property name="width_request">12</property> <property name="height_request">12</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="halign">center</property> <property name="valign">center</property> <property name="use_action_appearance">False</property> </object> <packing> <property name="left_attach">5</property> <property name="top_attach">6</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkButton" id="tags_save_comment_button"> <property name="use_action_appearance">False</property> <property name="width_request">12</property> <property name="height_request">12</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="halign">center</property> <property name="valign">center</property> <property name="use_action_appearance">False</property> </object> <packing> <property name="left_attach">5</property> <property name="top_attach">7</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkButton" id="tags_save_track_button"> <property name="use_action_appearance">False</property> <property name="width_request">12</property> <property name="height_request">12</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="halign">center</property> <property name="valign">center</property> <property name="use_action_appearance">False</property> </object> <packing> <property name="left_attach">5</property> <property name="top_attach">5</property> <property name="width">1</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkButton" id="tags_expand_file_button"> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="halign">center</property> <property name="valign">center</property> <property name="use_action_appearance">False</property> <child> <object class="GtkArrow" id="tags_expand_arrow"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="halign">center</property> <property name="valign">center</property> </object> </child> </object> <packing> <property name="left_attach">4</property> <property name="top_attach">0</property> <property name="width">2</property> <property name="height">2</property> </packing> </child> <child> <object class="GtkComboBoxText" id="tags_genre_comboboxtext"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="has_entry">True</property> <property name="entry_text_column">0</property> <property name="id_column">1</property> <child internal-child="entry"> <object class="GtkEntry" id="tags_genre_entry"> <property name="can_focus">True</property> </object> </child> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">6</property> <property name="width">4</property> <property name="height">1</property> </packing> </child> <child> <object class="GtkBox" id="tags_file_box"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="orientation">vertical</property> <child> <object class="GtkLabel" id="tags_file_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="halign">start</property> <property name="valign">center</property> <property name="xalign">0</property> <property name="wrap">True</property> <property name="wrap_mode">word-char</property> <property name="selectable">True</property> <property name="width_chars">23</property> <property name="max_width_chars">23</property> </object> <packing> <property name="expand">True</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">0</property> <property name="width">3</property> <property name="height">2</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> </child> <action-widgets> <action-widget response="-12">tags_saveall_button</action-widget> <action-widget response="-2">tags_cancel_button</action-widget> <action-widget response="-3">tags_save_button</action-widget> </action-widgets> </object> <object class="GtkImage" id="tags_saveall_image"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="icon_name">document-save-as</property> </object> </interface> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/sonata/version.py����������������������������������������������������������������������0000664�0000000�0000000�00000003235�13771420143�0016335�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2006-2009 Scott Horowitz <stonecrest@gmail.com> # Copyright 2009-2014 Jonathan Ballet <jon@multani.info> # # This file is part of Sonata. # # Sonata is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Sonata is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Sonata. If not, see <http://www.gnu.org/licenses/>. import os from subprocess import Popen, PIPE try: from sonata.genversion import VERSION build_ver = VERSION except ImportError: build_ver = None # Should be the most recent release default_version = "v1.7b1" def _version(): '''Get the version number of the sources First check the build generated file, fallback to git describe if this is not a build, finally fallback to the default most recent release. ''' if build_ver: version = build_ver else: try: dir = os.path.dirname(__file__) version = Popen(["git", "describe", "--abbrev=4", "HEAD"], cwd=dir, stdout=PIPE, stderr=PIPE).communicate()[0].decode('utf-8') if not version: raise OSError except OSError: version = default_version return version.strip()[1:] version = _version() �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/website/�������������������������������������������������������������������������������0000775�0000000�0000000�00000000000�13771420143�0014450�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������sonata-1.7.0/website/changelog.html�����������������������������������������������������������������0000664�0000000�0000000�00000072733�13771420143�0017301�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Sonata Music Client for MPD - Changelog

Sonata

An elegant music client for MPD

Changelog

September 21, 2009 (Version 1.6.2.1):

  • Library artwork caching/displaying improvements
  • Lyricwiki screen scraping workaround
  • Replace Amazon.com cover art fetching with Rhapsody.com
  • Bug: Fix library sorting when adding, e.g., albums to playlist
  • Bug: Fix window positioning weirdness when unwithdrawing from systray
  • Bug: Fix album being labeled various artists when a duplicate exists
  • Bug: Fix album tracks in the info tab being out of order sometimes
  • Bug: Show songs with a missing date in info album listing
  • Bug: Library icons change after adding stream to playlist
  • Bug: Cpu spike, tooltips missing in library search results with gtk 2.16.2

April 13, 2009 (Version 1.6.2):

  • Bug: Fix cli options (e.g. 'sonata play')

April 11, 2009 (Version 1.6.1):

  • Reduce library's filesystem view row height
  • More auto-applying of preferences (e.g. format tab)
  • Bug: Fix python version check for Ubuntu Jaunty
  • Bug: Traceback if track has multiple date tags
  • Bug: Fix infinite loop when format strings end in '{'
  • Bug: Fix music directory chooser selecting the wrong folder sometimes
  • Bug: Catch OSErrors from os.listdir, e.g. flac files with cue sheets
  • Bug: Fix --profile option

March 29, 2009 (Version 1.6):

  • Album browsing mode, additional details in library views
  • Real-time searching of library (search as you type)
  • Fullscreen album art mode (via right-click on artwork) (mips)
  • Improve library searching across meta tags
  • Sort library search results
  • Show file path in tooltip for library search results
  • Improved support for updating less than entire library
  • Drag-and-drop to copy files from Sonata to a file manager (Kamil)
  • Ability to show file paths in tag editing window
  • Use plchanges for faster performance (e.g. add to playlist)
  • Allow manually fetching remote art when using local art pref (Erik)
  • Swap mousewheel behavior for progressbar
  • Only minimize to trayicon on click if focused; raise if not focused
  • Use new 'listplaylists' command for retrieving playlists
  • Allow hiding the application's titlebar in preferences
  • Better error trapping
  • Make process name 'sonata' for linux (himdel)
  • Look for <artist> - <title>.txt lyrics files by other clients
  • Add Traditional Chinese translation (b4283)
  • Add Japanese translation (Masato)
  • Add Slovenian translation (Alan)
  • Code modernisation, modularisation, overall cleanup, documentation
  • A prototype of a plug-in system
  • Unicode fixes
  • Some helpful error messages if startup fails
  • Useless code removed, various code cleanups and refactorings (Stephen)
  • Bug: Bad profiles prevent Sonata from starting
  • Bug: Error for CLI arguments when Sonata can't connect to MPD (Juan)
  • Bug: Files may not update in interface after tag editing
  • Bug: Traceback with Turkish locale
  • Bug: Lyrics don't work with python-zsi 2.0 on Ubuntu
  • Bug: Bell sound when going to parent folder using backspace

September 13, 2008 (Version 1.5.3):

  • Quick link to edit lyrics through LyricWiki
  • Unicode lyrics and better searching with LyricWiki (orivej)
  • Store audioscrobbler password as md5 hash
  • Add Greek translation (Lazaros)
  • Bug: Fix lost connection when hard drive is spun down
  • Bug: Fix non-ascii characters when scrobbling with non-utf8 locale
  • Bug: Selected item changed on double-click
  • Bug: Use consistent behavior for titlebar
  • Bug: Prevent bad cover image files from causing problems
  • Bug: Don't sort library search results
  • Bug: Ensure image filenames are escaped in search routine

June 5, 2008 (Version 1.5.2):

  • Improved artwork/lyrics caching through case-insenstive searching
  • Add Turkish translation (Gökmen)
  • Bug: Fix artwork for files with unicode characters
  • Bug: Fix crash if mpd library is empty
  • Bug: Fix regression where dbus-python became required
  • Bug: Bold titles lose sync if song changes with visible filterbar
  • Bug: Doesn't scrobble when same song is repeated
  • Bug: Python conflict when installed with sugar (OLPC)
  • Bug: Fix artwork display in song notification window for RTL languages
  • Bug: Fix progressbar seeking for RTL languages
  • Bug: No play/pause indicator in egg tray icon if started while mpd is active

May 3, 2008 (Version 1.5.1):

  • Swap 'shuffle' and 'random' to be consistent with MPD
  • "Save list to">"foo" can now either replace playlist or append songs
  • Add Catalan translation (Franc)
  • Add Arabic translation (Ahmad)
  • Bug: Fix play/pause with multimedia keys (Vinay)
  • Bug: Prevent possible traceback from gobject.filename_from_utf8
  • Bug: 'play after replace' when in shuffle mode plays 1st song, not random
  • Bug: Fix random, repeat, and toggle commands from console
  • Bug: Songs not tagged with the album name don't show up
  • Bug: Cannot disconnect when MPD_HOST and MPD_PORT are set
  • Bug: Fix %D and %N formats within brackets

April 3, 2008 (Version 1.5):

  • Replace album view with genre view for library
  • Display covers for albums in artist/genre views
  • Add menu items and shortcuts for playing library items after add/replace
  • Allow setting artwork for streams
  • Optional stylized album art with cases (Aidan)
  • New, faster python mpd interface (jat)
  • --popup argument to popup song notification (requires D-Bus) (Oleg)
  • Show 'Untagged' artists/genres in their respective library views
  • Allow DND of cover art from a web browser (Артем)
  • Allow DND of music from a file manager into playlist (requires mpd 0.14)
  • Preserve column percentages for current tab across window resizing
  • Speed up mpd-related commandline arguments
  • Switch back to last tab on second cover art click
  • Retain selection in lists after removing items
  • Hidden config option to expand notebook tabs (tabs_expanded)
  • Set ServiceProxy cachedir for lyrics to work around ZSI bug
  • Add Estonian translation (Mihkel)
  • Bug: Fix multimedia keys for gnome 2.22
  • Bug: Fix artwork for artists/albums with "/" in them (e.g. AC/DC)
  • Bug: Fix egg trayicon with vertical system tray
  • Bug: Weird bug in library-view
  • Bug: Prevent failure to load if tab positions are saved as None
  • Bug: Fix non-ascii characters in files for non-utf8 filesystems (zap)
  • Bug: Prevent crash with certain locales like turkish (jat)
  • Bug: Using filter causes playlist to jump to the top
  • Bug: Fix AudioScrobblerQuery (kigurai)

February 9, 2008 (Version 1.4.2):

  • Add %D for disc tag in display formatting options
  • Better handling if no read permission (e.g. no/bad mpd password supplied)
  • Bug: Fix seeking in progress bar
  • Bug: Fix blank album info when there is an ampersand
  • Bug: Missing color in notification window
  • Bug: Notebook arrow clicks are ignored due to gtk bug
  • Bug: Potential ordering bug when sorting via column heading click
  • Bug: Make desktop file compliant
  • Bug: Column widths can collapse when exiting while minimized to the tray

February 2, 2008 (Version 1.4.1):

  • Remove queue support (it was removed from mpd-svn, complain to them)
  • Improved re-ordering of playlist songs (including multiple selected songs)
  • Add album info into info tab
  • Use hand2 instead of hand1 for song info links
  • Bug: Traceback can occur after enabling audioscrobbler
  • Bug: Text background color on tabs (ecik)
  • Bug: Visible background of eventboxes for info tab links, etc.
  • Bug: Can't click (more) link in non-English locales
  • Bug: Crash when using libegg with system tray icon disabled
  • Bug: Disable tag editing link in info tab for streams/remote files
  • Bug: Unescape common html codes from lyrics fetching, enable formatting
  • Bug: The main notebook should be scrollable

January 15, 2008 (Version 1.4):

  • Integrate info window into main player
  • Update to audioscrobbler protocol 1.2 and scrobbling bug fixes (mveers)
  • Implemented caching of scrobbles across client restarts
  • Vertically center currently playing song
  • Updated artwork (Adrian Chromenko)
  • IPv6 support for the mpd connection (Shane Kerr)
  • Allow screen center for notification popup
  • Preference for saving lyrics to music file's directory (like artwork)
  • Allow hiding and reordering notebook tabs (e.g. playlists, streams, info)
  • Retain library path when re-opening Sonata
  • Remove confusing 'remote only' and 'remote, then local' artwork options
  • Ability to hide progress bar (can create very minimal player)
  • Skip fallback artwork search of just album name if primary searches fail
  • Make system tray icon scalable
  • Shortcuts to search library (ctrl-h), randomize current playlist (alt-r)
  • Use gtk theme's link-color if available (only for gtk 2.12 and above)
  • Bug: Right-click menu can cause accidental actions with some gtk themes
  • Bug: Prevent crash on negative disc/track numbers
  • Bug: Filter + Edit Tags edits a different song than selected
  • Bug: Prevent possible exception regarding cover art on first load
  • Bug: Fix retrieving some non-English lyrics (ecik)
  • Bug: Allow MPD_HOST to override GUI
  • Bug: {} displays in the Current column title
  • Bug: Fix manpage path to be FHS compliant
  • Bug: Ensure that the version of ZSI is compatible with sonata

October 29, 2007 (Version 1.3):

  • Playlist queue support (requires mpd 0.14 - currently mpd-svn)
  • Use-configurable columns in playlist by using "|" in prefs > format (xsdnyd)
  • Switch from SOAPpy to newer ZSI library for lyrics fetching
  • Use xmms-like search filter by default when user types (no more ctrl-j)
  • Ctrl-i shortcut to center currently playing song
  • Use case insensitive sorting for library (holy_robot)
  • Ignore "the" when sorting library in artist/album views (holy_robot)
  • Better logic when sorting playlists and new "dir+file" sort option (sed)
  • Allow saving/overwriting existing playlists and streams
  • Hidden config options to set browser, hide column headers
  • Update license to GNU GPLv3
  • Added Brazilian translation (Alex Tercete Matos)
  • Added Danish translation (Martin Dybdal)
  • Bug: Fix nl.po translation causing crash
  • Bug: Remember playlist position when adding from library
  • Bug: Fixed tracebacks with certain encodings
  • Bug: MPD_HOST with password doesn't work on first install
  • Bug: Fix desktop file to match current XDG standard (nigel)
  • Bug: Search Amazon artwork using latin1 since it no longer supports utf8
  • Bug: Possible tag editing issues w/non-latin encoding (requires tagpy 0.93)
  • Bug: Fix czech translation to use cs.po

August 23, 2007 (Version 1.2.3):

  • Incorporate disc tag in album sorting (Emmanuel Viaud)
  • Significantly reduced wakeups/sec according to powertop
  • Add stream name as a formatting option
  • Added Italian translation (Gianni Vialetto)
  • Added Swedish translation (Daniel Nylander)
  • Added Dutch translation (Olivier)
  • Bug: Stupid parsing of amazon URLs, reduced success of cover art fetching
  • Bug: Default cover remains after refetching when not using ~/.covers
  • Bug: Czech translation incorrectly labeled Swedish
  • Bug: Song played after a replace is first in list, even in shuffle mode
  • Bug: Collapsed view doesn't work properly in some WMs (e.g. Fluxbox)
  • Bug: Display 'update library' menu item even when library is empty

July 22, 2007 (Version 1.2.2):

  • Bug: Fix artwork fetching (Amazon gzip'ed xml returns garbage)
  • Bug: Prevent connection error if the interface hasn't yet been run
  • Bug: Prevent possibility of deleting image file when choosing local art file
  • Bug: Don't load gnome-settings-daemon if it's not running (kinote)

July 16, 2007 (Version 1.2.1):

  • Bug: Using MPD with a password causes error

July 15, 2007 (Version 1.2):

  • Audioscrobbler support (requires python 2.5 or python-elementtree) (Owen)
  • Support for multiple profiles (and, e.g., "sonata --profile=2")
  • Ability to set search terms for lyrics
  • Ability to rename playlists (requires mpd >= 0.13)
  • Prevent continually searching for artwork/lyrics if not found the first time
  • Search for additional artwork filenames
  • Allows resetting artwork to the default image
  • 'Save All' button for tag editing window
  • Display MPD status in systray icon
  • Prevent GUI blocking when connecting to MPD, where possible
  • Added Finnish translation (lkka Tuohela)
  • Bug: Multimedia keys no longer work in Gnome 2.18 (Florian)
  • Bug: Hide statusbar in collapse mode when showing from systray
  • Bug: Cover artwork filename doesn't use system's locale charset
  • Bug: MPD_HOST variable doesn't work when it includes password

May 18, 2007 (Version 1.1.1):

  • Add Swedish translation (Daniel Nylander)
  • Bug: Incorrect artist can sometimes be set for album art/info (vEX)
  • Bug: Artwork isn't set when there is a single image in the song's dir
  • Bug: Improve handling under tiling WMs like ion3
  • Bug: A 2nd instance isn't prevented with dbus/python 2.4 (Sebastian)

May 7, 2007 (Version 1.1):

  • Ctrl-J for xmms-like search filter (vEX/Eduard)
  • Implemented logic for Various Artists albums
  • Cover art pref: save to ~/.covers or file's respective dir
  • Support for GNOME session management
  • Allow searching through ALL metadata in library
  • Link artist and album name in song info window to wikipedia entry
  • Add shuffle, repeat, --visible, and --hidden commandline arguments
  • Show if mpd is updating in statusbar
  • Save last used option in library search
  • Update code for dbus-python 0.80 API (Jordan)
  • Ellipsize text in treeviews, current playing song (Jordan)
  • Add button for listing of shortcuts to About dialog
  • Resize cover art to fit song info window
  • Added Simplified Chinese translation (Desmond Chang)
  • Bug: Prevent tracebacks between withdrawing app & gtk.StatusIcon
  • Bug: Fix error if mpd is not running and sonata starts hidden
  • Bug: Can't manually set artwork across filesystems
  • Bug: Can't use find-as-you-type in the current playlist
  • Bug: Right-click menu closes right away for some users

February 13, 2007 (Version 1.0.1):

  • Make lyrics fetching optional
  • Allow editing of stream name/url
  • Hide the notification window when it is clicked
  • Small usability improvements to gtk.StatusIcon
  • Improvements to reordering the current playlist with drag-n-drop
  • Bug: Info window freezes when editing currently playing song's tags
  • Bug: Tag editing doesn't work with older version (0.90.1) of tagpy
  • Bug: Prevent strange potential freeze with gc.collect()
  • Bug: Cover art doesn't update correctly if Local Only artwork set
  • Bug: Lyrics occassionally don't stay synced with current playing song

January 21, 2007 (Version 1.0):

  • Multiple views for library: filesystem, artists, albums
  • Editing of song tags (requires optional taglib & tagpy)
  • Auto-fetching of song lyrics (requires optional soappy)
  • Improved song info window and access to it
  • Allow pls/m3u/extm3u's as stream inputs
  • Sort current playlist (by metadata, random, reverse)
  • Optional statusbar (playlist length, time)
  • Revert to gtk's StatusIcon if gnome-python-extras isn't installed
  • Make system tray icon optional
  • Pref to write xmms-info like status file to use with IM, IRC.. (Tim)
  • Allow drag-n-drop of images to set album art
  • If there is only one image in the song's dir, set as art (Ivan)
  • Album art priority preference (local vs remove)
  • Formatting options (genre, song length, elapsed time, year) (Ivan)
  • Pref to play enqueued items on activate (i.e. enter/double-click)
  • Play friendler with other clients for shuffle/repeat/crossfade
  • Reduced startup time/memory usage
  • Use curly brackets {} to have formatting appear only if all enclosed tags are available
  • Ability to run on OLPC's Sugar user environment (Owen)
  • Added Ukranian translation (Господарисько Тарас)
  • Bug: No more freezes due to threading! Finally! Seriously!
  • Bug: Cannot set album art for album/artist with "/" in name
  • Bug: Prevent interface jumping because of progress bar font
  • Bug: Notification window isn't positioned correctly for dual-head

November 19, 2006 (Version 0.9):

  • Added stream support
  • Use local artwork (cover.jpg, folder.jpg) first, if it exists (requires music_directory to be specified in preferences)
  • Allow crossfading (mixing) between songs
  • Fetch higher-resolution cover art
  • Allow specifying search terms for remote album art
  • Improved song info viewer
  • Make remote images window non-blocking
  • Popup song notification on un-pause
  • Pick up tooltip album background color from gtk theme
  • Store cover art in ~/.covers for consistency with gmpc
  • Add German translation (Paul Johnson)
  • Bug: Prevent infrequent crash when fetching album art
  • Bug: Intermittent interface freezes due to threading
  • Bug: Unable to delete playlists with ampersand, etc.
  • Bug: Player can become the wrong height on expand
  • Bug: Ensure local art is correctly applied on song changes
  • Bug: Searching library doesn't work for non-english locale

October 19, 2006 (Version 0.8.1):

  • Add Polish translation (Tomasz Dominikowski)
  • Bug: Correctly send mpd password when using manual connect
  • Bug: Prevent certain keys from causing events
  • Bug: Prevent potential crash if not able to obtain mpd status

October 7, 2006 (Version 0.8):

  • Allow user formatting of current playlist, library, and title
  • Pref for song notification location
  • Allow song notification for users without gnome-python-extras
  • Pref to hide playback buttons
  • Pref to update MPD library on start
  • --info, --status displays current song info or MPD status
  • Pref to autoconnect on start, connect/disconnect buttons
  • Fetch album art in background (non-blocking)
  • Correctly retain previous library state when ending search
  • Add russian translation [Andrew Lukoshko]
  • Bug: Display path when filename is empty or http/ftp prefixes
  • Bug: Fix crash if changing connection w/o gnome-python-extras
  • Bug: Prevent --help, --toggle, etc. from happening twice if dbus is installed
  • Bug: Some shortcuts don't work with numslock enabled

September 27, 2006 (Version 0.7.1):

  • Bug: Fix crash if dbus is not installed
  • Bug: Fix crash if song does not have some id3 info specified

September 27, 2006 (Version 0.7):

  • Ability to search library by type (can be disabled in prefs)
  • Optional notification popup on song changes
  • Show larger image on left-click of cover art
  • Reduce (pygmy's) default polling time
  • Retain selection of browsed directories in library
  • Retain selection after drag-n-drop
  • Keep width of tooltip fixed
  • Show previous instance of app if user tries to open a second instance [Mike Massonnet patch]
  • Add --version, --help; print usage
  • --toggle argument to minimize to tray or show (requires D-Bus)
  • Add french translation [Floréal M]
  • Additional shortcuts (see docs)
  • Bug: repeat/shuffle isn't updated if mpd is restarted
  • Bug: Unable to delete multiple playlists at once
  • Bug: Crash when playing ogg streams [patch]

September 18, 2006 (Version 0.6):

  • Add support for playlists (save, load, queue, delete)
  • Ability to use local image for album cover
  • Support for multimedia keys
  • Fetch cover art if an artist, but not album, is specified
  • Add Ctrl-U and Ctrl-Shift-U for updating library (see docs)
  • (Re-)display systray icon if tray is (re-)opened
  • Fix mpdclient3.py to return all playlist objects
  • Bug: Delete key doesn't remove songs from playlist

September 15, 2006 (Version 0.5.2):

  • Correctly update interface after updating MPD library
  • Interface prefs: show album art, show volume, sticky, above
  • Behavior prefs: minimize to systray, stop playback on exit
  • Increase iter time if connection timesout (to make gui responsive)
  • Use gtk.STOCK_JUSTIFY_FILL instead of custom playlist icon
  • Try gnome-open/exo-open first for opening help, then fallback
  • Ability to set translations (see TRANSLATIONS file)
  • Use dbus to prevent multiple instances
  • More shortcuts (see documentation)
  • Minor bugfixes

September 13, 2006 (Version 0.5.1):

  • Increment to mpdclient3 to prevent incompatibility issues
  • Bug: Running Sonata without systray causes crash

September 12, 2006 (Version 0.5):

  • Added album art (and ability to choose from alternatives if the one automatically selected is incorrect, via right-click)
  • Integrate playlist and library into one app
  • Change song progress with mousewheel over progressbar
  • Change volume with mousewheel over volume button, systray icon
  • Change volume icon based on volume level
  • Added playback, etc, shortcuts
  • Added Replace menu and dir/file icons to library browser
  • Removed toolbar, cleaned up interface
  • Removed horizontal scrollbar
  • Don't update systray icon based on playback status
  • Moved config to freedesktop.org standard
  • Keep app width constant when (un)expanding
  • Keep currently playing song visible in list
  • Removed python-empy, glade
  • Bug: mpdclient2/app doesn't accept passwords (crash)
  • Bug: mdpclient2 - lsinfo skips the first file found after dirs
  • Bug: Cannot remove multiple rows from right-click
  • Bug: Crash if user has MPD connection but no read access
  • Bug: GTK+ treeview search does not work
  • Bug: Right-Click checkbox doesnt set value on start
  • Bug: Doesn't properly retain view when browsing playlist
  • Added documentation
  • Other bugfixes, tweaks
sonata-1.7.0/website/documentation.html000066400000000000000000000243111377142014300202100ustar00rootroot00000000000000 Sonata Music Client for MPD - Documentation

Sonata

An elegant music client for MPD

Documentation

Overview
     Main parts of the interface
FAQ
Shortcuts

Overview

Sonata is designed to be an elegant and intuitive interface for your music collection via the Music Player Daemon (MPD). Most actions are accessed through right-click popup menus. The main window can be collapsed into a mini view or expanded by clicking on the current song (with the > sign next to it).

In the expanded view, the tabbed interface includes your current playlist, info about the current song, your library (browse by folders, genres, artists, or albums), your saved playlists, and any streams (pls/m3u supported). You can reorder the tabs by drag-and-dropping, and hide any of them via a popup menu.

Main parts of the interface

For the quickest access, see the keyboard shortcuts.

Album art
Via a popup menu here, you can choose a remote or local image file, or go to a fullscreen album art view.
Playback controls
Sonata relays your playback commands to MPD. You can seek within the current track by clicking on the progress bar. The target of the volume control is set in the MPD configuration file.
Preferences
You can go through the settings here to customize Sonata to your liking. You can also add connection profiles for remote MPD servers, as well as activate audioscrobbling (Last.fm) support, track cross-fading in MPD, and a now-playing status file.
Current tab
MPD plays the songs from this current playlist. You can add tracks from the library, playlists, or streams. You can save the tracks into a playlist as well. Pressing / (or simply starting to type) brings up a text filter for the tracks.
Info tab
Info about the currently playing track contains song tags, album info, and lyrics.
Library tab
This is the library of your music files that MPD knows about. The top folder is set in the MPD configuration file, and you can use the Update command in the popup menu to make MPD check for changes. If the files are local, you can open the tag editor here.
      By clicking the icon on the bottom-left, you can choose to browse the library starting from the top folder, or from a list of genres, artists, or albums. By choosing the type of search on the bottom-center and typing into the text field on the bottom-right, you can search for tracks.
Playlists tab
MPD has a folder of playlists. You can rename and delete existing playlists here.
Streams tab
Sonata keeps a list of Internet streams for you. You can manage the entries here. The name you can choose freely, the stream URL should either point directly to a stream that MPD can play or to an m3u/pls document that lists such streams.
Tray status icon
The status icon on the system tray (if your desktop environment provides one in its panels) lets you show and hide the main window of Sonata with a mouse click. The scroll wheel controls volume here. The popup menu includes playback controls as well as the command for quitting Sonata.
Tag editor
You can select single or multiple files in the Current and Library tabs and edit their metadata tags within Sonata, if they are local files.

FAQ

Frequently asked questions and answers about Sonata are kept at the MPD wiki page Client:Sonata/FAQ.

Shortcuts

Note: This list can also be found by going to About > Shortcuts.

     Main Shortcuts:
     F1: About Sonata
     F5: Preferences
     F11: Fullscreen Artwork Mode
     Alt-[1-5]: Switch to [1st-5th] tab
     Alt-C: Connect to MPD
     Alt-D: Disconnect from MPD
     Alt-R: Randomize current playlist
     Alt-Down: Expand player
     Alt-Left: Switch to previous tab
     Alt-Right: Switch to next tab
     Alt-Up: Collapse player
     Ctrl-H: Search library
     Ctrl-Q: Quit
     Ctrl-Shift-U: Update entire library
     Menu: Display popup menu
     Escape: Minimize to system tray (if enabled)

     Playback Shortcuts:
     Ctrl-Left: Previous track
     Ctrl-Right: Next track
     Ctrl-P: Play/Pause
     Ctrl-S: Stop
     Ctrl-Minus: Lower the volume
     Ctrl-Plus: Raise the volume

     Current Shortcuts:
     Alt-R: Randomize list
     Enter/Space: Play selected song
     Delete: Remove selected song(s)
     Ctrl-I: Center currently playing song
     Ctrl-T: Edit selected song's tags
     Ctrl-Shift-S: Save playlist
     Ctrl-Delete: Clear list

     Library Shortcuts:
     Enter/Space: Add selected song(s) or enter directory
     Backspace: Go to parent directory
     Ctrl-D: Add selected song(s) or directory(s)
     Ctrl-R: Replace with selected song(s) or directory(s)
     Ctrl-T: Edit selected song's tags
     Ctrl-Shift-D: Add selected item(s) and play
     Ctrl-Shift-R: Replace with selected item(s) and play
     Ctrl-U: Update selected item(s)/path(s)

     Playlist Shortcuts:
     Enter/Space: Add selected playlist(s)
     Delete: Remove selected playlist(s)
     Ctrl-D: Add selected playlist(s)
     Ctrl-R: Replace with selected playlist(s)
     Ctrl-Shift-D: Add selected playlist(s) and play
     Ctrl-Shift-R: Replace with selected playlist(s) and play

     Stream Shortcuts:
     Enter/Space: Add selected stream(s)
     Delete: Remove selected stream(s)
     Ctrl-D: Add selected stream(s)
     Ctrl-R: Replace with selected stream(s)
     Ctrl-Shift-D: Add selected stream(s) and play
     Ctrl-Shift-R: Replace with selected stream(s) and play

     Info Shortcuts:
     Ctrl-T: Edit playing song's tags

sonata-1.7.0/website/download.html000066400000000000000000000100501377142014300171410ustar00rootroot00000000000000 Sonata Music Client for MPD - Download

Sonata

An elegant music client for MPD

Download

Sonata source code is available here:  sonata-1.6.2.1.tar.gz

     Archlinux: pacman -S sonata (James Rayner)
     Debian: Available in unstable (Michal Čihař)
     Fedora: yum install sonata (Luis Bazan)
     FreeBSD: In ports here (nivit)
     Frugalware: Package available here (Christian Hamar)
     Gentoo: Package is available in Portage (Andrej Kacian)
     OLPC: Bundle available here (Owen Williams)
     OpenBSD: In ports here (Vlad Glagolev)
     Pardus: Package available here (Gökmen Görgen)
     Slackware: Package available here (Wim Speekenbrink)
     Ubuntu: Package available here (João Pinto)

Sonata uses git for its development version control. You can clone the repository with:
     git clone git://github.com/multani/sonata
You can also browse the latest code on Github

Requirements

PyGTK 2.12 or newer
GTK+ 2.12 or newer
python-mpd 0.2 or newer
Python 2.5 or newer
MPD 0.12 or newer (possibly on another computer)
gnome-python-extras for enhanced system tray support (optional)
taglib and tagpy for editing metadata (optional)
dbus-python for mmkeys, single instance support (optional)
GCC (building only)
python-dev (on some distros; building only)

sonata-1.7.0/website/favicon.ico000066400000000000000000000102761377142014300165770ustar00rootroot00000000000000  ( @ /" m /|`y|}dp 6J5 vUμڭ{nF2 }fHm 0~zZ h 'gJ zgo ;p <n Pļy`lM sCx]y`tHzW ~~uOuS źV=vT z%~` #y9v4sIs E=, Q:{k~8( }tKr AdHѤuHaEY?0"/!i ,||j 1~xuPs N}r 8x~۹[AV=ļtN/! |q|rt.w9[Az|??sonata-1.7.0/website/images/000077500000000000000000000000001377142014300157155ustar00rootroot00000000000000sonata-1.7.0/website/images/logo.png000066400000000000000000000240651377142014300173720ustar00rootroot00000000000000PNG  IHDRxnTsRGBbKGD pHYs  tIME' ,tEXtCommentCreated with GIMPW IDATx}{p\y;޻O,A|/ QH%,[-MGr$ZlLc$3Mx'U#Kq#VG$ۡ%H֋ԃ$&@}sw@b6 v{q~44Ŀr y^_y5TR?DAW8z(2^ 6 4 ڻwoH&I4d23 C2.3E_'NLǟ7'|r@AK744.*kH۷oיLZ˲D$+|}===߿Ʈ3Y.㩩)g>sۧ?06"W@K)cT즛n≉gΜqA\@;XÃJ/=U*zJd@JAaӐ2MI%w]x<_}GyА5$>'?/~7L-b03_MLΔs3Ewbnޙ/z3r /Eebbf0{PmΘ!om{_zƾܹsC=t ܥL-WK_wyDS-JӯM>m`I )HHfScDK@5ŏ#ыh[_"wa)0A1y.v) 3>/7ZәM,ѣG''_~B69{~[ ſ/?zs޵ٖe& JثA$0XbrL5j (+7v 3TX*,?3?84r9l4޶mG?.Ĺ,:7oҗ===7QP#<g9CIF BBH! A 01 `jLT}=>5yADB )i!c0cS%̡SkBmZKFmRZ֭~bbLJ-Y\.'f}_;w~0dk85<{fJp<+i@BJ!LQvpq-"[k'3_T6$  aLgMJod3 #iӦ /ppbbyK}ݷ{tzGM#RHu'! S)|]L.0\#Y  &d!o _Fxə]Iڲ;UDDt+ɼSOP Ihi2t:+*1//tRXKg`!(ČHmX\%&5/7YK+> CF V"=TCg"IanܿNs(Zxӷ|#}rQqd5zV*~.=Yqp@mrʙSM|F.4`1$R7"BXrV!{z1b ,XߙJvGI祝G_==7VV<0Z[{ 6Wj aYcIRC' _ .jBJH3dۏ{ϾDԽ񾁁6RLdgggbÆ RF֬o}~8/،XHfKqUZRІ FOBV(Uf_D5IހAv##t"?AJhywiooR6#Sg(aXH'3/(asp#5R~7X]2kW\ц Xȴzelb]wmNPܰaCW23W<V4Us+ry\ 2ֲh'p]w8#L u *^Ѝb´٩*BMYKDJ, l&*츮:6OI@&]4"ܪt !Z ( nXA V Gf%LimWi :6:L͕_nYVgTDD2L&x{=a$IIn 8[:@!*sؔ$ 琔(pVötEE% !$ISs75i Wde2ò6!D(;w~z΁0 $duݠfqR1lMKc x/j])5j 4䅼3%;2,tttLRQٮSE,GHx\)p B&Baw_'R17 E)Sa%.'HL=^"Xrt:- hXDf&"PcrSsjЄ` f7MܾkX)]+ +Ҩ hVz!&!& N4+B$񸹀^@"c13PXI<%\&\FZ V3f?y\%P5 հ3 ݎl2>;cWw9`OFQTx-%zzjKI.Z .G-\b5. 6B +n]Ҍyֹ8H6 \rY0Jz\ŕPazPߑl | Np:ݸBIgCTtt{Q²E,t5#T-%UMa)Zs6dqݱ)q~Kap О rʀ%j?? RhI%*Xج[jdnY΍+ `Ggabo=JX2 {v{6;6sz u[u#(Am%h1\jΨ u&MNab)1|Tu:=.3j\y!OMZ q%D4I$j1Jr4| b֒Ȧ֛\RIGqvbLJ\3sX5GmV@F]*zIӲwR%\Y^)MہkfFDkcUܤ smj/9Aӌ5׆/5q1K. @4^:3< vepȥQ 6j  Tg'i.{0MyR!-;%"@'&Ɵ0f%$b&xW~}Z _ rPG[@A-@Np|PIp͑eѢ2XH@H@ icz5(nD_lY^KÉqE֐/P-ɞiwİ6O1F >,@ )AJrOzxuؽc+ $v x۲vd~+Q2LTQ2%}0WG"SR9DJPP€&XZ8?9? :;L ܚEwR.(ĵXK-տZ61Wj+o߼<:_ ~W `5@pa^q" AP>&_߼rǺ|s} *^ch]U8?xy*.~\r#H #́(H 3麬2A exvh@_g]?쏤0bzNhA~uڻDej = dadO$}%i"4Cy׍eB1c2o CQ d]+'ٯ́ p:~%B+JW*RbCU b{"$26u!q=gBJ[V>)S6#f'OM+iO,jKZxrhNUn8MK/*&XT5JՓpnt*?wdՌD]!V`փ#_*)DUzV\Xm⿑s(p*"6b*܀ lYE6?JadjʔrHpE ԷYA8~aTgO0ԩjRѴ| 4GˠP8TU,NR!dۉ+a[.3hc.^!J&1Ou]T]tI"nRUuQ .i:+CfAy\ ַDZ#Q04V%3`A#\.aKO?>9G &۝[. &D$"Rx ̸ajI/d*dSy*gUO+`Z%dmzC%ץ YrzoќAz@^E3InulՎډ5'c'<* pBAZ!F]it*O3z&LaD`Oo7_xޭ-~x]Xv]VSUVniAbqUbx2HT}^ @4e%YГcSط,D1% ՝SG'Q?IAF x +JEW EFY WLv}:GĤk|@.3*U :rwȦR[;LU˰}V_C`| ?~PaKW  &&k* =RWsu~UEAFo[;jLB'}́ULP=89M-$f/|gZ7ypk:TC EթbTl4t],a{bHƬ\i2nP>D( l`CC%xzfG+oug]*Te5D*T^~҇'PwBH2UT=;k{tzSg%&Dgp8svv(l2)UP 130 ؟՞p=!DXɱ)8#C`tEʱ?:IE YdB+/`N(5l{B g,lH$vmdhO&`\Clcb.yn /.cA)Ƶ1tfRkt L.M quqvX#V!=CD4PFr$fFR2vvޭkpnk}2xgH  ڂONpۦl'&F(̡@5py #IpfOT vS{ݏapHqtː߃=] ؽuoMJ͕1A *һ2s(+5Tۊ$>7?-go݊;woD&ouv;;zQei[]ĢݢsG(ز@~$i Pߓ˪6_J ԗ;7 f YJ06G^Oǻ@{ZJ  gj',ӭf.{?:5V?=,i>yf,p@XKiLI A5@cE/1YWIiiPM-߲.۹axbhwVǠE 7UM[PX2'툕5"]nC{ׯ*̌ج*e@ftVcA4xY5g]hTv(ܽvÚUX)Ʊi%>R7#c(6A!/}|ղҢ@F}bi2_{ Hc+`=8F0Tqc7)"ew/5A\S͂׼ (;}1/:{5H)<[(:<):5HlI_h6b GF~3i1ٜ(;55J&AʥLQ:;XY)wkVUJ^G@2 SBٶ=y^N%&<³c_dG>ϑNxSѡPpj_HpOUe. J]<7MT L[6|Ph8-nΌc{lcn( jEB8^>o-Ϯ=v\?}4ǯ3Ee5,iUK3Xyv_.#:Rf^T~饗bڗ >^o:S,GRJҙf `;:t#HKT(zui972H8i '\:a^:ϥI OByN̤m{nfffl||^HH{ѱB_yM.~VIzAv8TH-Ls|xudYe,o͡S#xcgqq뀤 2,0j\îEVap]~bfbk:M=â0tJ*wLӬI3۶&|kIHa#(8^?Tha)+x1ө1=`M&C MTP)W/ǁ3pl2 d+14B\*ߥQc'`Pd{={Ůk3Q^.>sG55H* Ǐٴi񎎎]:n=|:cJZ]YML>|_X7rb`cs3ȷB`1VϤӃLu680tug3jO`33yXؔv%˶׿^^ -[(~7n_d2ug;ۿ5'OJyJ&$+X՞L xDR{NJkczlF\x{ 2?1͌'Plٰnϻa do9Ks5I`V V.\$ nyl{œ/sʨk,rN_Lz[Vӕ{xWۗCmK}[%?tflU#&nF#\m)H ]!dni·0caAJSgkA\Qu]%BV$7ffP<CʵspEإ9ٍ 7Y?WGcl{[w\{W}Ӂ]Lz[*ZY|[nl&XLq>;t ،wj&l"`!@u'j'5j..K/S-)b^|B0I 47 WyiՆ%6vŎu]M:7؜YX đ#G׿ "Y`cE,įO}SwݻwFƧgc3XN])ݹBs\OT_3F!Vk ID,&:R ٞ0eWʒmI;Obb1r<~رoC?  H}x- /byq]Ū$NM$b~ AA!Țb8v}ѿy'ju.dkڵ{gG>º${A}^(y/fVsss|裏^ Ed @@ۃ>x߾}~7{he7:mO:u_'?mޥRHDhMqt,˲I!E-{y],O?O??_|qKѫjIosWW`2ܙL&י/yS,K񙙙|os=7]0 xYN{|[Nb͖euJ)Se ! c."bfV̻;L\>](N;rЃ>xdff&VGk:u*86/ŬԵ^fX,KR 0 0 rP(cǦ_~ .5#+8<=ʼԖ{ l5_W E@VЫuz]^h6]IENDB`sonata-1.7.0/website/images/sonata-queue.png000066400000000000000000001670001377142014300210360ustar00rootroot00000000000000PNG  IHDR=SsRGBbKGD pHYs+tIME 4i~tEXtCommentCreated with GIMPW IDATxw]Gy9嶽ݾժȶ, C)!ɗb K `C0Ÿ&jVھ{{=e]%۲-i%8o{^{Ϝs)yyF^{& qu׉|9%A R ā )HA R |KwΝ|^`+|4Owe"7ˣ?Rͅ|/c-|?߳b=Z/h.4Ǻ>xh< )j ny B|wBL@oy #=ߋ}RQ3>:hܻ/~8PW_WBCΝ~_z~vŎs<^j`jݽ78q8>{& )HXӢ#uՌG׵b.CbwoUu8Vs$ub;r3QG}?{ӀW&{)#,thD!݃h/ ޟgOyt*{~3pe!ImEzЧ|, R r)K+?=c8c<倀r!'Ht]GBC#p"D羟OyR =c-Z)}3[1瀀AYzWt@@@@@@;v2h"dP QD9 倀W /y-!򖷼%e_yE-4B4h=e 4B?|@Ը`d\@o8`ʎilsUL+)'EXHj2aBh<}Iz{{)K<ݛn}l@Z֤ܶ$m%M_qk<bpZG+=p4w靈sB1(k >() V-족!į7nEz@ DY#@hx_e 0O6Hţ65G48{Xcɭtxr>iŘ7o>_z y%JQVb"=Ik{T [dNk;c<a6&Ϲ 8_|'5 TpD4Z)쐍Su@{2\zkBRF )Bf͉ aU%@,5J=%*’6TX?8=&vehp~G\&Q(C ! ysJޝiL5M)kxSxDQ(Si7 L c%u|DcJMw[;RQwwpA듌9nbN^ǷrJc0&jXs>Ұd+>֭Csϼ *0O?NKY )-0#W^HO[6Â7z5B",Y@~d ]G یcxba)VmwBaqzr.ił]>M-gqO7EJmEOӤubϫ=t`-#֜vi߃>T^@K\ʥ2Pp8e5(Żx=w^?o}W 'ouhaHڬׯ{7h3BDS8JW,B\JB8 U.5u 4C{+8vv B.B @ ;fٲ׏SխaJiIi('J  ;7\*P.LUk/bxlBa¡0#(Aju|R֔ y"CIq L4#Lju Z{L]]qv؎! $ lPbd"iG?y5-(W-(6ȌY|I|0LI$ϛRN,kj.sg20MMMGTIn㴴0::J\~fXSƦ t|#ZP(ۯx<~.t;?05kt.Lg} bT~rm?{hiiR8ijn˯:*8#rK'mWcFΟe3<& >`~ŋ`C=t?fPǸo=|*dY|qRFa 4s-"uKK\启8F bx :i9d=ژ' |#IUhf|6 K -04!RոkŝWh=wRpT6;Zc\d]KRaB&HfM(z4WvHi3ZCs_[{y>xZ"@ LZdYD&Tq ch($ZM-X1uHE+1Il.ͩ$^MKĠ`8R)(- 6KWIqèXT 2__xoR.jM Z3y3N­)Fe7Њd*LkW JDmص7ngKlѥ)}+3Rgl t[6i&>񉏳xRDdP`^֭uۿ[:;{fLѿ!sj< ֚C);{Ey{Lh뱨=~30575O{W歛85>/'ַũ%ԄmuъjZpu?A߬񵏝[oܸ/{o2=B?zNB >~AGkWyעrjau\o=|\Mmzg3フ٩(Hòbոb<,i1oL>&bo)D3֞yX0>{=3ز'O2l 3.^>KY H-YlU)=I9EխaUԡM81@{aeE."j4DC๼X>_\1mlAs,D"f-Li!-PV!UkMT`з2CK.$`DCCсaYm8S?,Ƀpeߛ!˯~Y,˞:~O6峟;[(h-~o~ZF:=~@pE'& 9!Hgt mR.Z# h4:#WBP?KM󹖲aY]QwzL߆qD" Aͩ!_F."n4Z3'WuwzۭuH$@7{C|ÿ3?/gwm5XW֏]7->rW>54Z.$JbLI2j2RF oFr|eiS,qj5ܩ%=Ei5 )5XSg4f8Z@*>!%2dJjx9CB,bqPїȩ5-CL{&s*oÉ_xD1 {v h ,A sݮpμn.?mWZ+' ?w)~C뚷vy]׶O2t_?}yD@U=_+ej\|i)6@68q^#Ѱmi4?c&bu*!MLTdҥ|@f|/NJTbxd-OoGghht:Su}|}|ilaG0CQPgh` a *h4ʂ $r'Q.ݹjxb!'I53^C Y K!1M+V]CWCt.K(+X0k6KqS[x xG `RFR˱\`񇩍3/&a7bh9l]Vs0H`dm|CL_ .y 3>/ϯy$I/_O׻ czXYw ;zwd# nx۰c4lB4՘ϑ´ ar#TƹlOnSKF7BTddǮ Z `a2c} eA\ c,,3Lγ-Bbl葊>džM[yg2f' '2ؽu(CX l5ǭ(KOf98Fׅ_)<'e*4T[G#i]8xLc.f"W_g2W%]pXLa(Ggy9r~{ GnpNR`BZ[|n)kSH!(zw!lk%vr21]B*dj==v_1,lmDL#[+̙=CF1Ym,]6+gRdQS#C4FkkS}.y^6l8P@@3>aߣW#$cVC[%JףHJ!iJQVhLi5002}[v0,5W]Fxb)zM68ĕg1w^U_ɝG&X<'J/J5ҹ4]IJyly>rF{G cCn |(3̜9sJ#B 4 ,;A§.K_=lz1ZS8IFGBSJj0$- M\pe$[0MHKa@Ă a(ac)t馹sf=? XKeEV ɕ9)Hgs8C8la`Y&J}P5(2lGX mW1glihӴ1L!L9\,Ca;6 mI! CS5M. 嚘H>u{^zt!ah10% Xuմ ̐DϺ"%k o@{> Q.qT Qv}G虷 ^:Vx bm!F=d)%F vQRFd<"S&3ѺO兩ۥi,=9>cc#ĺ"ضbd})OY}@߱妘ӱD;+ X0 l0BT rJV< 4OJv{#HYD.;}% M,jXU=Ujl-3kO8ል<Q!aJ f0_7KUv ):9}#} Ph/@,`i7PdSI}Og|tqF<ߥT-S,)rJ488괠 .L71~ Wy9vs(\ҌTIkGT)׹D !̨%mvp ՊK]_H𥏡 \>!ؿOGE5!!#2lw _Gp&fdx!*jBL\Rqpr!>%'f㏁M[!s9*[&Fړ1v䪌t4b4̕`dƖV"7>4!8x 6<[A̶N58%chFR+WUJI\,.W_JZadhdzYx&(V_!<)rUf8FB 3Y((AR88 pJ0l%B &*Zulyr㎟MFYj-M2 ݭd]> sմdɊ&D?R_KM> (UVJBCc¦26(PH2H. /&,1X{h 6JWxw/B3NX(޳QJSq}F2 Ca imD, >Z*(#35>oaEMv THdbo+[qbf-[2A\,k$fSu@@@@qHp % D(R&hE%YaExf:JjRpʴ#v<9^ٗ+'bkXBcL8' Hk_{l|~N: i*j=/t+jI.KWsVgyKXrR רr֍i4F8*E9S&7YǷa×H * c!ԥ-!,0b6Blmw':8>a!L#dƐ!O<"B_-M2w|S*L)0SL1CzZ"boov K("%fq|G eJF2eEJ$(0<'A.qz.S !z7ikN"  ay& wסo}*sw#q 7m'py;hڲFcC#!ړ |놛M E$w5U]̙L&9k>p]ݝk!2M38iXI?B$׾g0YLI_w|+1s9Sx>A1$":a>@icjZWб|\uU\uUAEf>Zh BA7 3HWU"Qppɦ[Y{b +m3ZpN6eӶY Y)ӽv+@CC o%%ԝ{hޤ޶RVN떧xM*8 V+!薉iZ-r L'%k!J}!,)(. ѦvM!I.ie:LÆ Ts3F:іvp9MKj[k}`{o.y{,W( I) @"$`CZ&z0h\;_WmY \VoMBQд.S3Ϩ ! +'.vpXSxJK`* (RCz5ڮ9lXԨHڮ |6 ڭc$®}27iyqvk'ȮY۰d K'\9$ 42v-'?>:3l/a-8tL.ޘE.7JYJfWl.!WvAG砗ĭ3_HWJTR.z)ܪYDžS 6"+*u!WhӪts圅ܓD2{G-}7/,bOn)$:͗u⓫BP]26K[!Na8u'SXjg.mhm*C~pw^nKp:\Xػ;ݻٛI51)`ۮ\v$-}/ql: 3hM||?|bȀY2BA 'h@ G~n15MԑxoOe,xR⶛w̱9#gסL/W; lϽ&Nٱ_ŏR^{w">9}aCzk{-&O1C:jLƾJK<3q& hjd~Qv(Z:g@߬4>f\Ֆ|@V)0֌GoX ;…fyXKtxթ<8yɘ; \0`47\q fyD#}Rɭ_T=B8DY!7!B.a DX#a 4.-&H=D7HvGG L)ф,S'p`钐M т~BbK ]HBRRXR&q{!tS 7R!pG3FDAZĎ! hYHjGF#D ZG_O4ʕ+y>|Q $_a>\8zU*9\#͏w{ k$sew'}@}5>|7c8`*ţx6/~o#6ݯ\}F>9)`a6tK( 1b9n8RSSq~V^57\O4)ZXx5MC&~ vgݑ:q옟/3nv/nr),%HKLCV4ӘN_{^sXRhFB$Y% ucض; qh&XϞͮTN߅4R#^Mh6@C]ؕD݉\HMt=r"l,8S$!>R}{ LNmt.6xg߿=# dBPs4k֌#FTmu@ _PDa^.b, r).̣(tAYLLLQtDGRV2A"56٫UV >|+W*AV(UvXA$!!}” =DxSuHn]Xl6W4A !.DvefTs QdqVԯ߀MM1K|jl#+8[814\C g+OIQK%16g$١"lIOz|Z*3Db !m85({ع3uٓO0RGq( 3' X9TzJ Brm+! D4"ccqDEGI\n7t1?u'[o.rxbXQOgI(Z_:tkn@.NoShABMj9 hphƸ$֭΢ o77 a>r34N' }DMdtoQRkr \K30CN#V veY`%Q 5\g}YP(( *&AlT;X/|9c00E$y,e!9viV  5"Ȗ -=E(߅d2!B:qMYylٝttA]$F7B@i$q H,9D:kۢزsiUa;vlfY+ ?)]7 ܑXh/-7'6>ŋv |aZԎěE~^r7;ZIG~$apfԭa';Z`MȀ${-1ؾLZ@HAՉ ԏs"G#kI/ < A1M<"@0 f8Ձibű2[HeM_*s65jۅ Ȱq]G3BxfGr+,ˠnwT^6oOSPPȞ=Yt"'/&0IL_O~X)̧$$ ( RGBhih޲% ,_ &BVh:K p!rzxkLahgٰb9{Y5"B O,4 tMh@h]NĔ恳 #̽פ!o8Qh"݉8{sUm'4b:_ i2l ӟV~Ȼe"9ўk-cyrQye j` ݠ|_F0lԋ:NHM+mQWbG,Ȯwִ?i2t`'C <~ey{imƦ>ZpÂ`o\<u~^W=BQMTřRŞ$xr38sXq]؛ډqt hܒ"^z[A,6.Ş? K sVB`AʥIm76kQ?mHݑFNڜ0(*614C,DtnfM|HKKH&؃B`7t4$BDAZ;RZM L s Fԉte>+ʙГo#e2v2sJ+X)S9( CqO.>&V~}j'?Ur&cWØܪnruܿ+2$Q>o˥9\WkFȥ8\rsSF#UuPc|A J z6F38dX>w_G;=2zuMQV}iv1-U *vȁQTPl +3{` .FƎxR=BQMT- ѬٰACoSJ&'{n6y9Om6^/ݻunݗ_&1 DYlE:Ɏ+-&>-OIq˦~ekWåtaj&e'w3}IghH֯Y6!5ł[I i_F ~/Aa5B^m`:]vj4h@mطB-;v_ pP(S<֭ L3Y*!IVf&AU. qH MȐKd[xMr {o&H$ժI:l,ZKjAV)XEdD)!wo1Q.\; 4,Sq[)QMzaݡ!^όDjPb<n=$2"wxZ ً9E) BqEY &^M3x?`),e  @ $Pf&_@Ϛ-$֫fjHa`&8xk(fDۢ4jԬ'{+ɍ\䑙 ʩѧOgl ?HHY.").܀D Ba#`"(((bϺlXڍcUDa ;6DCS¬P(c) &.Bx )އSOm{ vÆXVxP822RhBG:~;_k/EL@]9;)  -KUt<35!;;Y44 lvh)pCCigBJ$wBK.%EcVmKCJ0L"]ځM& + oe!~&dx╔!bu)#$2 h)%=)m %?/\ĶHUƵ"$ -0)^hNo=+m{⊒lK7_6cJO @jn#$pxwLM6aM'h R&m ڍhyv"ke6 DJ5KP(N6QTnBP<)+Q( * BDYP( eBP((+ BPP( eBP(J BPP( BBP(')U\\̶m۔u&M P(m۶Ѽysed֭\.e '//OBiӦ 8EYQu8 e Xb?jÖ-[*C(N~QP֩@@vee܆ SbdddPTT@tt ֧,P( )?xݻIIIn<{5k.z(++cELQs%7s7o)))֭(KuNuVRSS, FDD >+W0/+s],Z=.ujL9/^͛W_4Ϗ?ȼy0+Q3.AF̟?)%6 ݎ4|rm0M)?߲, R eO#NNLN6!#SL=nxT iZQThm}<Δ)Sx1ei<~ݻwO?cꪫh׮]惉Y)FݦmkCPkEyݛl4MCQAdd$ei]=f IDATL.`rIJC?0QugEdz|iLxlڃFcyݛD1`2x.awʎ1[2-!RaA)bmۤj5[scpZ,C]҅8cG!ѝ4aX^6Jr4>R=>ÞGB墢B\.v M\\K-kr<# AAdddْ?0zǾ&&<ҍĹm F'u.0[^y 6~ɃGc6m_R˾}*lllW{1OɆ㍧`K)Ov3+,2;roG+țy{m.wK`7)l1/wҤ# _XA,{d?v˷wLm;#Vi9c~N 32:Az_UġC˖3sһwJyUghzj ԬEgrˉGx}bGe=.=':{gޝm=όuwڄ;[?Qyӆ ſBrP ""]ʖD$ &xT\b i_(G7%v85AR+ ynPf?5kRRRR-^`5OF'_1W&fgv>!K"D}} {^ta1 |y_A7V*>v@huqWKۮ֚'˚ɜک+d=ߵ^˧~zرCc$Nʟm|pa&6`]̟$/oX9o/̬7gؽ};ma_rOqj'PWrtt >Lcbb\qU|4Ct]w>c;!())! ]c%޲&pV:|4KsNbsjՐҪ6ZEiiiBxwqq1QQQn4MR^) Qߟ0|ﱺlPkD^zdeeѠAj%/'֭[sk.R~Fɍ n^s8ikܙ|hxhK본U~|ٿi4oNC_˟ɬO&pհ?ʎ14h}l9իW̘bbb:@ /uݫf';ҐtaHK|O=/o*ѮUj __wݵf#m{or{IcڜR;FO;Ew*o߾B#82}_vm*ao_;mKE\<&囏ߥ]=v,V(|JS/o8N à/'mR)--0l4Jne_y]PapL~I^.""!.Tv[.ې˫nawy`dnHk=mxczzj`P(T& U n^=Cox[G,Axx[t`GԽK7*&&TOdP{qVm&0S+} m=7P1cVƏiSNp}*ٳ˼GC>dol hT"yqo1 !}cBoA1B7ԲUVѾ} O3m۶s3,P(㡰WW\\LӦMYn-Y_kUVѩSri"78֭[%**ateZjŦMhժ1u$F3l8˟ngŊicNG=pw/kOo*c=Ƙ1c`٘0a>_+{v[.?30W nѭQw`QT޽{ˆsrr֭al۶MI0HNN&99YYBa=_(1/|Ω_2\t!)(+ΝR>}ai_LP( eBP(K*#((۝ZJAqBR~ ٳ B8T:鈞%\,P( E5r$O6m,P( E5g{;咒eIBP(3jBP(J BPa"##5Q( ):+OYP(8q֭2BPEyq Ea/W+{3);~wϭHnx7vW[n)Y+{ҋyq/n!UF9Ǿ%o0<8l^KxᑼY ,e/O:u7~gI◷Vr Uܔznݺ-T(>f {վZ0볗w|lL.{ڪ6Fċ3UI[n\w4O֭gbk ƪ"k$/dşУ{Z92\ܳ_w ~\nXCӻwN~71yQ8E;o+GțSC4+P(F?)^x>g&iChLxwAzSy[ nsAIOӯ\z@&u~He8Vc˥E%cˊm4)))<ݾ'lGJJJzyk `(csKC7V;>%|?ϝ[v0ꥏ7ǟbR'tߡܹsL{F=NAۙχ#Pdž>Laop[dK*#rC#l37^)ك_cz0OYY%].?J8"gn+aDHI+&?3*uM95n&!>H/&0?B4W6 2{7prL}30k=?ѱyzd1=.}yFQ؀hl1>Kv^N70޶<:dkz*7 5K6S0V]W nSc'7wWe 8GZgKC'wdf>AKwvF1}H囘>%)vO+JHQP`֗P( 8Oz7 9ߴwP/ j<6[=UgY'rRB1B7ԲUV%\BӦM"J7 ye/oذΝ;hSu BCRm۶1{lh߾}f͚1bĈ%7H+ BP3jMBP((+ BESN[( ꇔGP( SV( B%K(+) BQ $$$5QܹBP(mێx\ _+ BqDYP( % BP((+ BDYqB PPS^-Kk>/|Q7&E"`̶mcB4TqǔKYS6Q(nͰQ?1C]_qR; O:˚qIm:g㚼? !!ap 8⬶=n֪0j:nPZWDQuT^VE2ʆ$'zޯW^/yιs>ksg1wkT4U5w+uŔnlaS5誦@D1sfAMfΨ=^,@fz[ce2m0U.! S_.#+/ ^z[1g5] S}GV!Kܿ=bn{姻S֓x|;owQx:6NAW_ݤhSZLՋst"bkʂg QCu=>RK01v>>Voeg~eJ `W>Nab WXBTr@њOdd$Rtt4U66b@j"R2۔.~Jɦ U;ucOp^BǑ㘝$Vt*>?Hty35!3I%w@Y_B؟nTVf\\1mR/o\~]UOM@]lZK^xVG 9G@7V GX{Q @.> Q!]E/jZe]Zs,`MVZf~,;EeMJ u"r%]^EH$,DGGShh(EFFj]$˩%JK1;jM֎P1DDԡq-05LJ~TRo[+i:@RgAX&uA: K YOjʊxZB"j5ӗЙ2,k_M*~?>*akTRSieHQ(օB1ߠs Q!]E2m&$jDGb3d6.VzsG~BȾdMyڍdjbJ՛]L^ݤ<ȩpr3 nrd\7YMȾWU{2[DDZB(TR+]Y#^gVuBeGҘ~5kiܤ\qT_P4<Hʷzu)/P ՕouQGg,)mp *ْАc:+" (.'TZRן)9) [YFcjM46O4 , []{[3\>ɨz "uJ+W_WX`lw 1=Ri:^1ڤȡZϴ+]=AJ rTU<Ƹ] gcH}Fy>uf4E{]aP#x 3`#嚏IE~rq#9=bj|ZR2;f~WZM%Ws2qk=c(4})u:vЩ";e}uYH>-Zҁ: L7 *S~~4jJu[r)mRg%FQF22J2M$zxW{Suuo;XHdB\;uXZRg٫A fBIq-}1ȃ$&&d#wйԜ2D"ٹxE+4v"\N!!!$+W )) z'/oaܽ{QQQdhѢ rыaa a20 0a20 0act0 Naa8)3 0 Iaa8)3 0 IyJ/-a?LRV _[mSj[>>]a߰zCSiA 4O*K<`twb+>:2@nCZOYlēopyG0zm |"WX[NhԦ7\N{5zWw4/A=|Ze{%φr鈉0tMݔ} ?X1}?)|SzXkm1Z1`' ,L֗=)Hٟ1ҪT\\o% ati>/ڒyyxt&|`R^&&UK_^OKKCjlN6X>=ĸhyɝv2սI94*| QmDn0X̼Z.o-Zkh'EWf%Z bx/aM7TjEYSqO>7$Fty2g2'Srt (XVĭ%n.l[0XWY%7c`䮝Vf[~nXqwiI>v !s2n@HfltTKc0/fL~=anj 0-$̱"wBu}7/,FuѠHl7 7A>Y0CceT7ab"9̪5yRPu  ǺC!Ȋ4N3 `f JbX:K־yW ]RڳB T(RpfgX5Q{a=cqb` 3?bRnY]K6_~1 ꓁1i/}FB!XYL^M6Bu_BlIe^ufMCAbcWYdɆ`C0̋ o NJ|E@$Vʞyr`<#$?/"FtzFFq IDATT*;:_QkK=) Uf!;#Ѧ9<3r Attʕ+HJJB^X ;)49pvFj,QX`BvBC~2U #ƥ(`-PQ"Eau8ݥ)Nє3N%'DKfieE~oSܹ:}/:.NS닷YmNɢʄdN&ޮ8 p*&Ch Ej8ZB ŋ? Ŋ _ n&6ɶv_D\6nz]R)X1,Ql]_7OpwsaqmRT魫( QQQdhѢ r)|@ض֪?AԖr'd==˱.,OY W.{q?1 ~p1TzXWJ_ [< 1l^0`mly-.OYսדWǂ)cʏ08~>ff5sU @_jʞ(հD+FUXlS1ժDw5Lpy<P!]Ð abqP  4]l>"~yJ* їt^/dm^7(3 $y81`rbRA{++B~gONm #QAmp{v]w_8=Fvi#' 6=t06n8^|ITOVoGG],v꠩p?EZ2͊QܺU~'|4l {iPt()1mT3Obڦ_$77l<2LDU~v{L6T,<|; @oߊ>ʯ/kZ׽r@њOdd$Rtt4U6,h"r¡Gkt*qT.9Ʊ5ԚdD"skH~>ٚS=Nht-;}$⏌&Zpl N>F[%3m՟%gk0hyٓH$XVčs;ɱfS >ټ?|H 9ѡ8M?f3hBg}P:QX{urJ{*,80Ɛx1$Nb_e-{(C=Zr d>ʠyF|WT{^.Yo2;s2r ^b"o#?o %/l)7u7DD?xXlUj5`"RH$KZRϹ=ɵ͒A,S|PZ^HZ'IuRS+kvvu)kncFaoRvT)rQTpiŤP Qd^,K{Cwee8&J!_8ԴhnG{,O!Nߖq!l4xu$9x֔;Jt-3ckCE(Nb_Ťo`R&"V%y[WzAK>Z@鷤JQdW]zg=E̹GNt+hmI/j⿍hyyž) [AW"VHW!d){?CmaJ[.=$ecvPypS'0/K%7T()=a9 ZI"[tU$)@n]i;TRʽ˴h[uږId'J_Hi7pU_Jdy lpr ב=9)5d-?ɥ )pd(L)KMB/Tu|ܙ:_Q~E򔾡Q%H^/޹O6nbZ4lj-!dҮ%ȶ8э\ Ov$vA_ԤtCW嫲&N&5$6g+WtU$)nv#)mIs;-([%^)|,7B u.u7's[l(ȺIﵣjP%-~3 c I(^J9N~>uI"inFol_EL&[ٷy n3Æf lTFRr Att+W )) z'?_9Vg0 a,wETTd2Zh)\.ob6"b. aWS6SwURa*)3 0 'eaa8)3 0 'eaatEt0 Naa8)3 0 Iaa8)3 0 IaJGN.k 7W7{y9j[~ q?OU 7@Lhp.W*)l.7Lox CѪrg;g \M-a hl m0Գ0t6E_LJt핖Vљ Ϧu_B_kO©v3L 2>E`847$Xg^_Gx~ހպHl7 7ΝB좯ΐ벓¯]C9x/^Jۥ67 žP]qK;Q} s2lXZ< ŷ>Y0Cceܜ2>.%܋@o3>̫yt7wBAƹ¼>0dg$T3Ǚya.텹a‰<<\=}-4@"gv|UZFXŘx8k̏T[Vת8p |q?>d`̀uZKsPiW"`!&& p`]e?dAgvlřcq|{X9l:?Nzޮyt(%$!5tƩpeCl5D_C-mn}:!]j.xo!yi1h060RsTqOOl3͠ac!hD$)$$њ+W )) zZeQ wS`i"sԔ8l:G`zfn.z X+D @hG/dm:ESޮ8 73Z#Rc4 W3-a{fNcp&*K%TT E|HeZ;:yhU_挔Dbl[/"G7{o!3D3N%Cffu~"d5C_%I(˯Sqp7 Y([|Tn.Vp 9ozT2`Mj?~<^/xm3Y9 mk@2GA\B}ռgb9v݅]1Aju%z/' 59D/~N Jq߱8b\ {'_"-ߋ條->~i> k>^ CdVRp*>Y] xb.a9|y"*Lv1fB׉ bH!47 žy4$U"L#cqqhk'`njVC#7g7>ڢI_O^ # z%AQBb.+Ԕ=Qaec:WpdV%a҆SLD5 Im 7qXX҅!o4\AJEu6z;lOyL cPCq3 N܃ mR}}B={o:[tz3EMW7ցFoLJ?CGŏh_viץ'nsc[!9#kOT_)jh`bjY5C_Ghn}|;QQSI(ɯ;5<ٸas jUǨX31x~dεdSGjr*2üvpn ^b7 )a^R"NuZ`; hIa^"50Bw_3 0 'eaa8)3 0 'eaatE/0 E)c;eapRfaN 0 pRfaNH?O03JA@4#a7eFR$|bB_\h2z`{]aڠVu/rPttIMP+r(G,zEnqrRc/*P?+PPO5IDd֐W9Y;գٻ `t-;}$⏌&Z|Kfb3۪?Kֺ`8v'H+/w27cͦ4cIu/C)m=L4%+\6/ׄK_;d"5Ȏ&V.xFe-{(C=Zr d>ʠq%Aաc+Z֦V($kGFk:)kVcUOPn=i7ɩR"" nDso((vv'3٪T_"RH$k%]ܞfI 8K*G& wNn4zqut_E$e]z\ZޜP_Ɣ!o8/Ip n..\$ '!#)K`iG(Om;KLU^|ve&];VIʢvvM 떔 LBs/P\Y.̚>[VоB95ۯOR.y|]QBؤ<c6fv&eHR1!,|DbR~hohY5 T-+.c<&0vZfAv.; vۈh[;7h -z/~E\hoN)|(dOȿtԒj5nGb_7|7Z{Ĕ\궤9ߝ.uZhl^J9N~>uI"inF_EL&[ԆHf[j(-.K"yLH"\N!!!ּ}$%%W^w:* հZS׼jxʃ0wETTd2Zh)\.)yUD* |A,a2 0̿50 pRfa20 pRfaFz_JOOg+1 0 a20 0a20 0aT}̍A@psuC~Ԫ?n7񄳣cS~J\To\-xVY;`UshTZ0n.FM svAbQ*Ɩ˩UھAvðc\ٽ=[ׇ;z$ӟ  /a3؟'`X>diiieojQk}m-FB3;>êr{#bLU? Ch< X)]BsP gj)ƇA jC߳1($zqdE{FNV~a453enPMy[en:l aGRz; u=b_ͰcUM]?drQ!z Mkl]8 {Vؓ?R:n&X잆n5ؼg|jZ]GgkV.}[׶8=鍱ßG_MôR=S0("lauXV c,X=s|z|_tuC{)mXBsP ᰏ.N%nsc[Ơ>u}xg4^Ys-fNzU]uZ`orhsX kWucQQ _ϔF20K 053eѷ wr˽6sBfǔMTeHy20 pRfa20 pRfaFz_rpp`+1 0P;Sfa*'ea0 0 'ea0"?-yIY/ʜhfhy4*GbY\mq/W7U1pqCth6CGC6}~J2= iksH,mѨmo2OP1DF5`n*g+LNEqc"6GÎXjScH̬PM_3(I'&Ņ&s9MΣ:"|/kZוY6w{49 ʢ%%it{Q 1*Lwd>/GgAo(i?wTq̓W<#`uvKާyo`ZUƟ瑕oG;a;+8w4r9h'22BCC)::*_CDD9dУTGjIk2ʥ#'u8uZӞlBkH$";4X}hW9Y;գٻFײG≈(h5 ǵcԿU]2QVXrƑ=DeE:Zyk6N~x{Yt5jYH{KWN'Z󉈨 :HlϬI)׸H_ ُ'ΆP4KSHų?Hs]VBumFf;m{Y۞K6~ƛaK_^O5_uMB/TW\~N)֋LD~LX4_4~DbN ʊh H r9IFlBY*"Mko mJ rriDp1,k ;GEw7|vBjM j fNeAϦ:S%Z>[Vv^*Ju4X2$)Hr`tM,,<@MtkC'퍷HHf5HYqyCD4>:]~TQX{urJ{*,m!ϡஂ[Ԅ2%ef؛PZL&+.Y gz{h=\:}ٸ2h%Aաc+ާK5zl.W@2;s2r ^b >)нu|BznSDDԉPQ jNfbѳU֠d(JI"X.iJ=$6KJDLy2/L$RT%dVVޥ:m艟SZU~OfB*?7yMPۆXSdJ6}(YGg#ʈ_ITh\JpjK;Lo@RV  7j$t$BuK%&,ۮeP,zˬ/oDjҍgm?UOz$ݵ9neTXh;qk;ٺԔ517)@E .62RCDiHBy,y tGKWE&U+3J-Զýkѻ璕0""lE_nnOG^q)MixJ>?;})wZf~oJOR}vqY}o_~!BsP ս LDDي$oJS>0(u@Q ѹ=])v>2jKO*4ZBk^{^eg6&5v";[+YҀϟAֶ0-21E{IY<u_vr r%K*ߞUJWw̭\tOylNbK1-Tѓr%d6f՗W5d-?ɥ )pduڮ:d%mC~9Os H̥rR~?ݺw(W{iطJoI(괎;SQRmpg\$Ot٢U(u/ w@Ǔ $! ;v-G5ƽI oS275>,#aC3VeA̠2z\I';sX;Ӡ/vVjRN:JZ!XBuZ+UYoSRHͳ͋\*5ϓMͩnqU!([mYdbZn?TԄ"S=.=S.b,ɬ^;fiJ5[/!4Ģ]nB=[7 k31I,I{_ sk̙Pko7Kݖ4ӥ$BuZ/z'?$4\ׇj^7u/"&[tQ[Z'>ͿSt5{g(zRH.SHH5od_rIIIի<==10$A6 =a5l T:wETTd2Zh)\.ob^OD"\迓20US6ZK;Naa8)3 0 Iaa8)3 0 /zaw 0 IaaN 0 IaaNT*1p3`VG-m*e|Jl:d\<,"L{C3fW_'g}ؿ1%L|71>kk bR Apeoâ8eԥFc/ƒ,n%h| c,0",r?u١)&}ems瞙D V^Jc]ՃD%,j9AL{Glz~%n^r|g# I њ~NmI=oPE6u4*0!-=pcY|\rb-D 0XnT[f듙tg_ETM޵ O_~ĬW)H$bMh-c]hnҴ& p1ZknZ4u67x-`tk:hnۄbyjΎX*k)xI,"~5̋qRDDD BXpYV2ݳSY7ѤmiScS43m.r9r)DҤvV#nur/'")!D/~N `9#C3: cж<ʼnu3}ƃV.Kl* ٩W0Zu'ܙ?^d*G"EZzq3c3T!|gZ~Rp:6A7da&4n ,:J CBsеoh^;qї1w쿑,:}iB80KB2#b4y~?|[J$ c;apg#|uIdc{"[+a3`jӹXeM]fWmT9*Y /ZX8A|bt5MۉCfZG(qxY igK00kEWű埡oc?&olrvk VŒcNJ%֒Apb;XӢbv&Vi- IDATl;s{åj#e +նܳf{&s%LoMaߴ ޹.h7t%&[je$xu G'sqc;Rؐ0Xt+~>u+]Y-f$WrDEƘ9بӧۇVʟТzEkvݶ-n"lFc hs2$t ig3GLIelo1xʿ,ߒ2H篇K_ ;7GѦ&qVNcWϔc12c1A1cc1ʌ1cqE c1V~Rf1 ʌ1ecqPf18(DD OGk r1#ۦMQ/2^gwm7XAG?T)+=V g+gDJl ;Pg#J|-H~XJ*❼H/nM\`jl &:!]ltEj\>-jU rF\yב5[a텲/-k8Afb* pcvYyb'bHzu.S  <-B1 '6l=6óp!ӡ„!;K ~"|}YcvZm/폞oS|8z))8: ''&sϳ0C =bkȭh3.Nl6/h3&l8gqx,OyCQSg`Ϭutr2^L9/7dS'[K KL#$HsM?Fs'lmJh{z@ˑX""=K*RxΕp>nTL&Tt,!M$/d$nscLjBRT|wJtYb%vĔڶYdќXT3T'w撥|`_hD.ޓf7k 7' 4s_7՚&_Iٖxu Y)4j$`ߚ&^h͍dQcejM_]O=f71$zi̓L$W;-G$F}?+ JS(NkVKrZ53Vt>Ik.  l%5TN%#&mܒFl=OL:IE.'s'hE=tRN@>KPJEf>IWfeܒ\MS?SZV׆-9 imyM?RS?iVۮe}儴p/RJEQCܾv gN9d$_qS*wjlN[>/8تwZ{MIDDCE?l$3@=&q"|3/&"EizTX=H" ȩN$oോA&LunnHfs|4C|Uiڞ|GOCWu3TVa%f((+DvPPA+<9}/}ꔙ#~pP.DdPoBcH(M;[=Tp\՞t&6Uҗ?dIǔj_g)i߲>TSQ`jnklf\|uA낗bZvNί0XPȉ&uVb,b&Ԕǽ(0(?9 $mzF^ݗpU{;қv: _"9rgҵd:/~BcD*Js3r ._O@` 7CcH_Z+2()HLN/j D!;tQZwr CBTf6:9kK7Y]wUV́~ddNl̘\~ḨkBճKQzv:#XAg9*u7IMTkZ9S)Y=NCjqQӝ{ek`/X{^~d؆^,u6ݽ>[߁BcM3u4TY/(bKHLY:=PJEwy/ 71$||RU9MV%K_޸ !}K*ВN$l`0;L4%/C*}Q루A9;ou 256?[i:$HƵ,?XwM)©1=$WBFk9SY:P/wjPN{t7B24.bm'Du*ڒHFhV_E*mԛߣ9U07&J i%t;a#cs\9M`/X{ rntj!'TFrF4}oE:#wFU,ڙ\mAMIfdLUҌg z^b{zTdMƦEÅ)͠,Q(HW\Gйsgxxx10c% ** prrf' F/ccqPf1ec2c18(3ce?%cc1ʌ1cqPf1ecFo}ʈF@fp;YT:UF4jĽLvu?VkGxm'J|ǎEجQGz,R#o~V.GRMC:pl=+ѩIu8]Xk&-zb^bw#(07[ONNFrrrig'5'!A4&ռ:cjXcm-]CP̸:3PoH_ Wo#Sxc"&>gwůye ^/E?p[tÐU1XJ6y, K^@Hlf Xo)| 2zA9/^i*Bg,Gb֗>0ϗ_#6"H?o͟0]E ;;;T phjVrgC;@f0dr8fS'=#}NNx`J)Hx4{;;mynZkZ!po*L~aѽLa^"^q׿WhTwW;rY(sXisv}4#3] %{ĕYp%j?3B`%ScxTqvBƝd[[[9͠XZpVl;4e|#cDP((((W\Gйsgi=5sOEJVEkVwan$AĢ=<[ T[y"uLaCA|Zy/YjDb NJag2Q+UٶpxK>2N]^r|g# I њ~NmI=oPE6u4*0ƒ7Կۧo{A"Tg1PnQb琱fzѾƵе/5=N?HܜڽvM 3򷵵E{G ǚn%kU?MFL^+xLv473TEʤ]Xԫ.=ZŹŮRDDD BQ'3ܣGib-égYg nR*xME'RڍI0F 0`^܋ODRB$t_ʝ@ "rFÙg0?tdwAj'my,݋f5, ]v}}[1O?£菁rR9C׋kG74/#qї1w쿑,:}iB80KJr2Ʀho>2^5A/-my} {ߍSGʓqe s#=; b7uE[w @e_i=Sªd9/lhl2`h1N"S_׌F-L AFw,y?|.G#S2:+ Vaոt ^j琱bz{-]BiװŨHWl`vN7Ӳ 3BZ`H˞8[yledpi0wVY[$'8n,\h:٘aƞVgJ t~7Trre?rvk VŒcNJŪkUXdu 5T;{ 03+a~Kl UN΍ wpA+1qR+KK61VJrg9MܿB˛-A'Im,i&+琱Ҽ^^ B׾P{6|t;ڋQ)elo18ʿ,ߒ2K[, F;ǡ}su⍶1м:\4)6Gwɮd\荌L1cgʌ1+c1ʌ1cqPf1ec3'lllc,2c1VqPf18(3c2c1A1Ƙ>Aퟠ¤J f]uF4*v ;Pg#J|}@U2=asez?=SJys5[a2ō?~Zֵ]!3@ݰ'÷M-V_DenD:n05D~Yre":M,csOle7~g/{lqe 9iRa_eɃ_f)Lp2q:XR/J*qq?uu "RgV]L:LP$uC?7~p $HŒ:u)Mڄ}OxofØS%BA(22Rk. HzSrib'#+ΔrCN6u4M9פct'lmJh{u\|Qa_*WWi FUDjBU}LtyHr.OF<7ΤF.dj,%JhwD%]ZWד^۞\pIY9娞QrVNh17!Z(".`_B:1[Ǘ̙<fjfԛ`HӲ)4m=ѣ9~PM"4n ƼPvIO3O21s/Hbd.jїRnЀ:4e7S^l(\e8tԤK%y9='3Ik.  '2Qp9).N~/*ȱъ_ \dYdV#:&]M~Φ~rKs5IS?SZV׆-9 imyM?RS?iV.CQrvNi3jghgwOM/>HY_,݅b'DDہz@zWk)U齏BZ8)C!dnST? W(O&t^ƼPvKa"Pcv?r*jї?JOTBżBDtvGT&VR#JU T2Zi-iʤ_DjAoj&Ei %ń/^.d"+5)7nHE`4SHtkuwI)6S[22ж<}DU'ѓ)U Uv}d蹨oϽIɝXɭiǣTMKRv[Zǎ#"SCȮbzL54uSy9SM:}WB(T_<ٿ?(?&1/̈dDy_3}.NixLPcC7V l$3@=&q9EZvNC4XPȉ&uVb,㋇TjJ_NC@)=@^W%E*8jM_df;~,.#ꔙW?uA9?DB*2s-+"\JD#yM!Gc)9N&k/D/5P߿|-thИח?(NJ DDi(R4gb"搝C :(ǔAC\tY/_DxşGqP.ɜz}ٟ1mTOi׬/gOteGdWwA~K%sTtn8oLY:=PJEwyzZ^@V΃hZu[Z?E̼E,jG ֧M3u4TY/(bǢA5:~]ZܤSè|)a/ִr#VS zw4ՏBʓ^lj$4t8PoQ*Gܜr-tht{jPí3T%֎:O,kZl}Sjsi$Ĵc:6'GTo^(1o~V.GRBqElɟsFPNNNFrrri)1}1Fa`;QͪaEl!fVr;PJgRaa_ |;ᑩ <1{Wot-qI uJ-L?s^\1^Ǚ9 QFP@ 4WKRsGdgg5aX;_@JplyƟ}?9zg$ S:e 5aog'-ϭ] жq-8;:^+nMtYiWaP 7wB+>]g*z]s2z}lAZ6 IDAT\3}Aծwfy NvjmF&056{}L }E'E3N-k#pR .`ΊM3. S"kj3ݯa :,\wvf;"2vLĊ cC-Rt,N䕓mNÐaa N m$)4erl8\:6.0*ͻ[վs5Twzk~p ݸ8\O(9P}"؟Ÿ_4>e ,EG[S}S("Q?A/B=47 ]Bi96 D3Bg&_֟C]Feg8VE~MFAb̳%8#.odH !22Rʕ+x:w OhoF_]6/Eo?yіY-y*<հA |>c-,5A"1RXSJXJ%԰sR(Xlz~%n./N>HYqWlh?JH'ςXt7]o: Uv h *^? H|ΞY:>ޭM0;^}_P}& p1rrwǵD7Bs;6ŎE9ڽvM ^򷵵E{G ǚnXLU ./W(Ƅ-bߠj%R/R899[ ?)_"d5K'j7&ôw/{q/>I }+w):gБ |t/N834ZtYb%B_9jN&h/ 9gc)L<+3qs6z9j7{ p(q/ MB0cSXLNNF\e o$C_ڲ i=[3qRb~(rQg`ʹT,]2- }CcPԷ6)v~SWYի U,Aˆ >OGoki^0fId2ѨYecI!c0ZY`"夌"/Bjd_}LHE~u6c1mm?Q}/T5l1*0?y?|.G#S2:+$4Ҋ3l`vN7Ӳ ^BZ`H˞8[JYaܿ1&fx4^|!/h/أhSI8+e]zUZK&[paYJ#lٞ \ [bSبb7vwn ]ZYŵbS~'^øbջ8:P j);bfwG{~?ȭRh-zCFƟPZqǢ̲tCϷ _gkOZoI%S\xcq3l98O'M*"-nFHLr2v0_x\-Cc\űw?:o{# +cM'ec2c18(3cc1lllc,2c1VqPf18(3c2c1A1cc1ʌ1cqPf1ec2c18(3cc1A1c1ʌ1ecqPf18(3cM26CTTc1rDDc1c17 c1^1ecqPf18(3cL_}6 c1VW..(wڕ{1+Er.c;2cx?.Fu_:At8T?n|i9.09 h{$|K6`1V|||r$?PS0` T[ 6/ـAE n+6oQ'1k 4ZXj1w,*( EYz;Flb L+ѧ' +??Ml԰6 i# LDr{'V/w*` Y nBGK2jO5ŶcW!AOǣ=q*Ҍʡq}מrڜi8ׯ_u}f3.݉;z֥?1^d]k^ 5M_ j>l,l0l/UXV|Ysfr[㽉c+6BrVpMdybL ËST}?ϗ7 }9_Ϝm90of s=^9^DcoP/Yǜ[ BO(A*I) ci/YkZg#)iwޭ;ܨ\5ӐWP|fu;"u WAyD:05@^t?#uZI%dQزҞj_#|:4oGh6޼Fv􆙑5|@9?cD03NwF/)k%cTlhX<$f,ٟ~p1џUA1sDx95ND S#D9z<1L,*IH:v"1 V14폴ēy]"}{mf#yQN`9.[D1Ƙ~ǏK4([JcPL*mD*G61``_$8IlMGFvN6: ΝDNn-sf剕6Ԧf[=Kv^u1vAfd/sc9,ulNZ9I|ߣ5<*di#,;^5DEE5gJJm[c0իw=fME4Mu"""i2ל:יt]97A}x]ip/T߾k2ר\ĉԳ*}M`""S暳0~#D"\GHٓH$=D"HI$D"e!oD#ӿmeIRo;oyo|4HZaH| 'M4hкu~Ŵ??X:|CZyɟ}zJ)u3ڍ;OeF&t޷[kZ4_z-xp7x][ zȵ^~eɓv燕ܚXŒCƍ)޷c-C~ԙ_o2lĠ߹Zs-55Tt]y&AõS7WS Wy}/|ӻ =7vY G*K>zmYem1}H gɣn\9ǥ7yHCH4n9-ZmTWƛ]|kWHsO PC{/׼s?oXs^VafpglXȹl FDIR nm%Wѩn93X sH񵜟ܵcՒGκԪMzZX%gEkyٷ~l-rtwhJDl>k+yq׷]GJ4%UG2#G^t߰l%M8 +  ~:r^W[u uܠ3Wzlu܈wn]p4] le}S '/4H[.{JNq־nkbQWkQ*_*>md۳%3}%%Q>=SP (>˨7,3u<_~^:٧}čkwAM:KC3d*3ve/6o^JBsݜ`Uf3{.!CG86\!בOG'^Je:Eim9ly#co.BUMWY-Mکk9o3wyݭ-_깔VW"~}_p- U+ƺ;&mXrƥ7*>c 3M>g=_1pT{a(li*G!&' eG6[sN.{*W0ou haiwe֤rUTq3LYԢ>W}etE>sՐ!qU jKܐ` EzͫTCrW_ﬦkgz?;F3x8ώrҲO)y> ]M9㶤(moy|heXu׻T٢*V}W%qnzvkzɎB9 /^Һ8>д'#ojZ韶|OG;='/h-qղ.Ms\*] -fѢ-EeDzqnڦP#.KW[Bf5%[ޯM?4UsRi6]e\n:mMfʲk ^աdG/o癷$G^QPQ;ߒ3ԽsJÒڎüzM,}7D@L9WTm%%=75߯sX:\{o9-a ˆwM^{N&!ɦ?(pEs[],0qV.n0'|PU߄ z}޾p82FO3W)p5[h o0{+ 8$p'J4߲Au5z>`ǚe|_챇t5]MNC&]pH lٹ?Z~ʲ*tݥL4-}!~lʲ>jUeo ϸS*ӦMkӦl{1&鷿gϾ3Ƀ(129k7ScS?d\JV~d2YmVfL&Ӫarqk [&Ʒu,u-{YA9zMD65q 2+I$eL_]>uLR$Dr}S?}{D".d1}M74DEE5g?c PSF^pea5j|BHLk~UQEaPhaZl6拊4^FẍHLk~դT0]=''GQՋ7n9!5j|BHLA6 [%DRaa!`t'"ʑD"inOnNi9 9oO"H$ M 20)"JٓH$IC:׈'H$D1&9%DG$H$IC=D "" "9S"H$ c){D"'H$){D"HٓH$DʞD"H$R$D"'H$=D"HI$D"eO"H$){D"HٓH$DʞD"HI$D"eO"H$){D"HٓH$DʞD"H$R$D"'H$=D"HI$D"eO"H$){D"'H$=D"HI$D"eO"H$){D"Wp&~7"Zl^#+0)!%PȦTosUM}G.{CDRc ]Ydt$^MvsY|LYI-r~KiH$gL?x~rZ%D=5/W~vsnP"uஐ.Q_},:OgRG~О 5 Oe\L/Q;9nRO7"Rd-ٍ4{Dvz)`@r3ëIJ-qmZ*ǾBΙamޫkA~FYF5i=ܷv />87r)SNݽ[j͉G=~5tRܫf2C8MY}:H"&eNYԨ?9zhg-Z˚]R 1AsM Z5ũQ!oo}y}?ߙ @z;N۔m|Y_rZF jڿ_1uy˹FKihg{SX3E}%jq1zlUq黇4)qjkLȪ՞!RWw<@PhS X0=;4^J霷>5LxI)Zg>:񴱵_}e?5,bˊʜrfԡmoo;g|ۻݦ>1p5Ǝ/ ?ѓqw6Yj񬚆v=`4nR^孻 9$0w {kX.ԡM<1fA[MIOuYzof4[Qa,4*䡗|?y~UQ/WY7#w2 xy }КR4Qa`āȓ{~YK꼑V;hLg.g, ه˯Xivqk4W֊&?MƯ_$"*=hd uUGr.8JOxolZ{t6[-EfyG66 k|+ubQmB.:ٹ&˕%{3KTz<(q+T{b]}N=u%df^P4J硄xUJ1kn/.jܑm2h;}m#֭W7sb e2L͚a9wV1 O|1bD@{og,fщ!Mxr^CM9>VW6u#~%u= 3_/@ZWlv&@Smn,]?8K=j`ȸ:ʪO]XGgypxOuv_i23o=UwlEvzĿ,<͝ZE+/U hkZ+c lgNp+O׋'ןH?:[6U} YQXW:u%v),5,++kx_m5k˹Ѩͻ=mzoJQv.^CΓv84Zŧk@$a-{EB;޲,E%km:Jz(\gnz^\_ 0}eb63zc{;iH҇Ǟ ?(*Gf3yr]١sRnk nkZN%ůi2Q(}x}IZeMBkK6rJ3* E?m~?*3ڣZWOߟCnWuyPBM}3h G.Sh1{qzrS 3f?[Y/*toi W\/7vPѡS75ʵ\U(d{V='}h P >G7yv32ՙSsN^xdQu{`yd9 22+).jbxl⻺NڥEYBкѹbpOɡgsD0kKC [-x?>jJ@Q@{۪5Q:m~˿PZ B?=7#ޘ!J뻛v%\'*=yIjKOy8hEY1 -$C&ܨ,.|hgg)v3ݿֻt@y5uޘ{cz%N]$az)n +@?H`pSq8{,ڕJj9OE={"kH#2^WO@]sٿ-H~y ev~E_@܄3N`['{MFfKwfN|m" bޮj/ h _=;:i?~Ĭ Iϵ3({]JHYr@.!7E3{gR] oгg=K<=!ݼe?9fsOMf@m1$iV]n%?:@N+Gѩ?̨fz3XkroU=ɞד+ Yd|{oԾ_QΏX|}i5M=?sQ}9JzMJ6Ŝk[iScKޫ&aw">~2| Itf)Nk^Q}H[O5.BOodyueJ߿T*Rsxk%ՀSN}dB\Z\`|7dHjǛ~4੶z: UfMJ o0ɕs Y)Z>AiӦE0fl6LL+ԼSӟX3[eHjs^D#އ?s@@ HAuBh@rCD$A85R2}Wd$IjY'r`DȀ"q@BzH`3@dhHe L}t!0$DP1 GF( 101oRD!(Hq*(3`F;*"1CiW7+k>?N^d-95$u^\eђ%Rjɉs@"$0"ԍQ'L:UA=y* L#CH\4L ]j8/D(SA΍0#@8qD 0Nh-e3B!2Ybb 7]84U+M9!Gd)W7;_\n!/܁ݫkM27U[0F"ߋkrz9"GR h\ e!rщĘNBߐpU-ё#}" pP @H}͜7H1(z%pTFģs3wѤ1z9"bܔ/?a.Cf:s}~~)Nwxz < kl(p# 9c 4 D@/hxbvk3˿Of.X)ө@l~y7hɄQ;; 8Rɻ 2Ƶu0+{F ⢒2%0qUSi0jkwxiœtǘf&L6>4cו}_ԷhAa]Cj 6՟~YLwRyᯬ\EtIߛgi=Us'/KeϛXWő;[TyYq1#O3:qu"1s3䓐3Øm'(Ɉr@$P  8` T" d@L HL !312DJ{(^F]n\IwQ, 7Dݐc84@\)f0&&BəWnݟ]CJ0иlݹonsX>û4 ԘJKaeۺ7#qoy%V}ťgr=<Ѣx.{VT| gekdQG*-+sHw[BKC;қX)pޥ76Οgj&݁\+pQiBfPXK@b{W ?obUoibi.=ɈEl1IhE #1d w )(FBM+FsI,E97q΍HbEup7>I=Ia&=<&!GN&2( dPU #ppᵉy$&r.V]#䄢e]F(^@Nt\NĞ&d ^9~}AUM;S+.r W}+nRn2e-Ҩ<̼&Lnd2Ǒg*ʽZlZȥi]+7Uyظ"~^1UnZ{4uK \oTUoY*,% :\=s?&V]M,6ck6HoRdR]ozK#$b1@FO(f#R(0Z<\yDao 6 U X)qj`hRd:RO˝]q# -|k!cޖOf,$ ( b6bk2bm<>:n✇B-Շ0oelYT|wLݱ{_:z`xlF;~Ʀf졍z#NxW4^ը޻6]0nߥ5a7 b.=yǾKj(fê f<)^83&w7F3p 3֝R +*W;y,m4z68Пyz㮘~Z]1oO\7ήNcyu8 h0f 1Bİ|6)|$KC31FVs K sʑ\@eErI/ XVqu"ryHso\;oOtzb Lwnj) BHDu Utlٲ.FG" g_Xe'j\H$R$u"{LQ*nTl1{[* hj (eeN]TviVIIAlbjRp"fG.7x<Ŭ0fy99%\y:ThYm&(+ X)T Hyą/jȻ א@&S%_;;]B+ yem4|>X*֧dLO$䚕=@ڥ=t|U=Ĺ{a-VFڲkŷ=amIaڶ*.rDDEݮQNYYNnN?Ѻ}kȍk7s l޵s22uӧO[%L3dq.l-=Od< 3J4f2Qc̻{b5Bss%ŭ۶ mYPP`=C#ed%)сyn{H?X;w~޷65<2ƱCK KN)H!733d*"b{ Ŭ7q@ĉ*Len03Jɮ(Jn{t D/Dڎy2].hb keN%tG2GI}*+DdJ@Px)٣iPռݟ~O}W,:9ϛ7*^pџ>)&KLӎwp.3LF z ȢE֬M=+Mҳ6< 9TU5'+k{Ǘ,XأGwOKN=G:,gN?v6\#"PXHP`V'5;[PBOg\?nS]GQ¢@{@|dXl{n鱅¹|=hࠄ}Gw%b )-R,6fqj 21E9K5 w17NI䦷pf啸2U1a񙢂X=1Լ~E:4N*̙3<7y wʱؿ<#kI {3v? &JGw^&bOz72ܡ ]Snw n]x׵L&]省sgOd'"}ݺI8`YmfKtHZLa\CYV9@ MӜz2Oܧ- eg?v\uř[&ĔyBڴv?_d kZTXHl[TpD$DDQM*s ,VDJ+fkLQt^qG!2270TAq3Me.UeEnE9>"ʋKF1HDͭ9uf*LG` !cuW&'41Dq[#,}RMiܶc|4ν遧̞rѫ3+k|usEסO?yWZ7C=3dH(>9{on[[,!|V".(9!s_wo4{ƻ}&~9d2~ؕʈcqgΞ+<9q_j,ƶ3^Z]f}_}\oZ5\^Z3^6jrυƌpac;2C;ܘa1G&Oڴ~Q% -_.ڑe=Nݝ-[~{kdqCQ+|i@++_=j'a½: $~ߤq~Z/lꎻslpfi,I%u{ %ջ2ik:8qA5霈 6L;'6"NII纮s"4wN2[N,9{ʡs@1PŦ9CBݎb"S Bcq҈/b8So֤J0h7c@٤;J]]':q"{4\jŜ=Yxƻ/ihUb{bG>^S=1̦XBlί*:£oTY)7LJ٘jK38Y=It:wj/:$`X[XjH?T0a;ӟZ^m.< %(涧lK ܔSfF#2q8{puw;ciR^g]ϯ)%|3hTUf{OWj)n~Tj>3ON=gF`e\&+MxxE}yWiKtw[7f 20uֽ9.c#3^m2e \gnX;Ǥ;@^ͬ-\ lL})h< wl,9_nX\O$rϊߐ+K#*"C"h SAQN$ywE@N:k|)$#IE?{Eu}ιwf~mR b5*1(60Xbbo}R|W5*bAl$#XDH[`پk3s9 +M~?33;3;ߜ9{ gY| &A)D][x"ɂDV3Rb6xa۶q-13XkHbč dh"hDF˄HbYR!oϞO<=ŗ.|4oQKp"yTIfޙqZ} SݿO*m8ge@N׉cS_x)|( ]63G@'Ϭzs W:T>ɬpho_KNWiEth+*JqXX؊ f1۽H"WrgF_@bXDm y`-MMK֭|gG-ٸxa麚|CP7(H]t'SJe6![AA.ö=_K# +, [61ҋi/f¼@٤,Cּ 0Fwp4jB1gקsu>?w}<,'bN)7l9u褑+g>2cʑ\_Wnjc1 k?ru|\}C{gWGeuuhanGбnUuýǴ?uXZdi~WEC;g}mf0][vގ9郞tkǻuVQG3_K<~o:9[n/>:g:kgmq\L sx,%>mk|`Ӫz~K^yq~D^}nNÿB (AH"Dl7 o0yd'kE6hr]REE]{,HZc 0$_V,"QAn~>F +:`Iiy?/-ZfS442Za# (M1 1q!Rߠ.-uk G{7J{ /Iüi3eL睌=rzs9_w?Σ+?K`ow/mwɯOć__VQG_3mlY1_|fk>Of?tϖ#^zYvhQ;"\=b̠5= k^h'mj>~vP! $ff\H@rݲtH/WϴYbF"vA % Xf&$v\TP1˜9~Ùf.>lpIY6"3v]WChgƳUٳO=e&wqaL~}|8y/;\u]q0NpUR Dַ]0T ,`QYrdH?O6kaں$6.)%kAAň @$ IrH@D(Dºes.-9߾.br&`PZOtz1h#P  @۵,;R1dIk9D@ˡV mP 6sq^QqHi6aCsXfa+ ZD$q;PBEfOD,K:C:JоX]PtP GRR^cѱgmi0R/;aQFftQR^[Tƈ P"L6m\׼feqYP@{ȷ9kӯo߲g/dDh=Ũe02!hQ9XZM3y3᯿B`-BA+P@h ?}0#*AbE(,b@"'(S5>|mGKÏ%]!ݰf땭k]ļR&m!\ƶ<$@ bݫVaԊeݥŭyCXj_-B&Fh: "A PUT?X@ȥsj׮\& L,b1aa (klQ ڽw7q{ #Ea= @#B`7Zּj)Y,bV. d[MQܔq,ib@@ qQH -܋x(+e Uԣ A&j~e מl[9Z`}/Q׃C, ҞG ,lD-". EBD -ehU; "HZH?c}Ff\wMƪ _ޅ_"^YE00 /"M ZKGׯXlnty-pq|i-%eK@ĀyR!` kU!I"Uְm|ࢊPTi,u8o-VxP oj*C@ZWom{&a!@!AFA۳( 6@kXhNP)cEݞ^Tqֹ-^uˑ֕Oc'7n'|fw'x0WN&afS|s6p>޻rwOQp%S+b twCcQRLk- 1֮W$Է_79cT"__ 1!bPT GdaC-qn pm,X0a`ANkYx1m,XkI;QͪQfmbyn6{؉N[?S װhU֨9]Vz^xO7[.i/karoK~UW@58ۖ7oo ntLﱗj^L5GFm4n65e^?w\mo]|wmݼ'o}p ^ǟ9i‰C:)&uh~rmw?KW"4wo=$Vċu تʦgo-6^^_gw#vNWfU1_ާdw`Ԙ=`K,XuGyԐOCf7^{IS&LW~J\7ʫ+ʫʱExsqk??C'Jt7+yu RtA tDg:oLe. 1`Q LOxBA  %2 ӛl!ܸ~k/7GUĢm'unxmrh[p}}N'm}n:]Rvn{XGN}';vU"*N7g==QYOh7ԵfYW1vY.4<8WWY\y%'\tMݻlNs|t⦖eJyxѧߛ-kGpg(xʕ[^R{AkXf}rF9?v lВMVs:!ƍwι9|^YVyEξ;_&>~{%{=mĆ\0i?"b^YM!W9vxkxjC0a`Sw\珿#М<*庩c?u{L{2M:"8{~~f']e$nu{xJli1'+i+9䤝ȭ4xON=lˑo{PiErz|Y%rtl'g7,zǩVn;{K.|Y5o?:g͖4|Pܡ>GN:Te#'-0\)i^Wh2; 0^sc.33[ "k򹌗* )u&S:jM7444=ϦrykAE `ɘ@d(ҭAZ6YC+1T=C?t- ji} "V@!/@*]= 0gVXˎvrn{s\ w@_µ/Pmh0<]?*^u\|~_7܎'yfm']Tn ;*p9]٫fw\vE=51g[e]=pKo,X(!v~p{y#nj*>=m6TB!^[{8|+d @QZaen>FDBpH`eBXC$$`tJ%=df ҞS(= GyY\>Ig⮏_>;ebD5<1-4rGf\9rAёMm,aGnؙy{:h#tg^|iӪߺc[f,iwRS_thh;y#OLk~ۻ榻Y:rk~?ʏntD,W Ό[9?j)zbl>w>7e02Mtݥ3u<|9Ͽ[}~c,x9Y;k Ўjf_g3|w64Y$V?*s>GᕭϹ1~ <+ "$WABbhqC@`ӡ_nhcvt,PI[~[X -jTk¼#J< (DVb 1=Y< @M&d4D28Z@1dQ&ySV@ Xa*Bl0&TbABaf$BFH:)w)q)^\oAúGLnrt.hL8g0Ox\ӣ'p_{|Us=r%;ˡ.=}ﯼ0n8xtFV O}_|yG7fʺp;{DTҟsa߉:GW~l]]5j>rekȰ󛋶[W;߰.ve/5 ϕsq3ol$oOT &jowfÿq>:*6y/1o[X<8z5}.G;o,ݳȅ^رѠFˏɒT,qL_1ċ{#Jp1^|vX'$y1C^/{ƌ)~W\q}С4%qQ1L0R^Zk9\.s~Ïڰn}{?[$Hii[ޫa$fU " R]&' O!ì6 035V\oyH Q~Orj 7D;9߲7 k8sΦs(ޑXe@"̬Q,0"oc}]>.qݟ{ONJq޺{>r➽{{Ξ=SO]f~nɯ'OetwU뺮F^hjR)hEZ+]uw(hbI)U׬xq 146|v\u Ar]QnދBq2i TIux|2ҬtdyKr-J8ˊ!Ke&si6$r4#d_|OJ ా-@5ejlB$B,@PlUbM)/HB H4PURp& -s@ Jb~!C qQq |F'z_v/.٧Ђ&62=a'(V1YѬh& 9?Q!w.44E)Q\U_0 GA@$ &LX1"Qzss-m_ymSwu{U0D!Vx<"P)( D$4&Fh@Y6c$몲73# !Xˢ J ! Mt7AT-tv{*ӿShv =<ٳv2'BeAE",ݫm~h l.2g3mE?A6)LW}&&S01!0G)YR%#_y6H+B8xn>fL$uDv5(fM)?jȓDHi ʓŜ5`1Ɛ"Վ֞^Bkk8DH45F (: B"n/^jC0ɨ+8/@Hڄkvn*ե a+֒6̀F[4,:ZNh B eʥXzs=ߚ{ Lـq= -VBy*B.\4)hLHT92hC0BJIZ˜ ˞"GR{6dˎVI62*QM "*AΏ? (`Oza""@D~h6 m$ˀJ,JbBAb`lj|TڥS\b1$􃰫e6S^#%[2Ib*8(uܩмlFb4@E˵з\+ڀ+<(fE4笃EuQ0pSL&/ ,6fФ(wB_H! ! Z EWLN<0~" &d @#JWQ"V6$?UE$ [Ca$E@) Jq>t4#HJAho{ٗ_w@HyX"tq20TR߻@ KɔM9VVQK V"l,kC+BHlAkHB'+ =,]趬Œe$J! #߂o9dJۏe%N$<lj萐+Ȍ>CS@"K*s.[J$Ͱhy!z.ٔuhly˸&+(b& BYq! ( ;0WZg<) (ED8 ACRIGbBYPTUVTѥeFcUBj$v}DԤ@DE3xL+EhB`B ` 77Z7ڒs8kJf}ݧ?g&n E' dP ¼N%|l&Vtа~Tus)G&2V)@VsE18lm>j)t ($&amm(-J& U |ٔ5qH݊Gu @`"QXRDX-c1ET%"`HZR&=JUJy 'HnLMm1 C+NM^;E1Wd>{:C!*.ʊpsF< k5bI1QYa#`.N6k39P Edg3P@b粴h +W{Ahl` 3 X@$aZc9+5CWVhDqҊH)"jBd ,"A 4A 0Mp>n6|V5똳1G^=`w^؃LvKmN*vNjكguiG_fc#x9¡s}j<0c H6CJ)Z*r?I8YvkbFy/E)BT Ɗ r AE#;-hZ}AXɂQg/ C&L: }cXɴ&9a6τE+7kkk:X٬(sR&CAaO&RFvyf͚ ٖy}GuR^O <"oqFAf)eh*?bD`gzn]g}{9ÿ 繇͞B⪢[Y-@k$rBt0[ hmM9h0a&!""A|2CŰhDHeŀA0K^ 2Z9V!Xʜ>Pj&kCwMuj7Y..g3$r(5hmC 7lZ% Apׄ%U8g3w@aS}cѪQ{s?:xn\;Oӎ-V/z+?򴉻f1O\ľGc ;!?ݑƍwy̙3;)2k^/O.?uix{C ̂X'p>mL 99<nNj>|4eTy'k^}Fm*UskW=TsO׮X:#-.eLV&U^QX pe9?! 7W>sgv3sfƩ!~]qcWϿ 8yc׽fxǶ>y22c_;~H}FvoMny:O{6w777ZWoGϐΌ;KaۣiFzԎ]/N_Yt,Xp߲G ,au\)xS3Owg?O҉;Jq_y/~_;[\uW>WZm=Vsx߼~W]ym>smuPA[rܾ޿->`1wwǺdlR"SO8bCH:6_7{L= gy!{wݶjp]GJ5# ^g_kf٘ӓ?!t-lC>L_h#aBt"*4l9oqv˂N(*xJ,1(Yl$Bjn;7kycR(A;H{Aoʸcظ O=Զz*290?`WJBʝ弫`XZLDu9r%q석"f>E!;+ IcM;`.,7WN/#cc|%J&sζWkY@Xq*SOwenWmѺz@{?Rpw;lT܀a%ٌWlsre\8 ᗧyOnrsԄM䮃8yoTš!g۔~ن]$tzNK7/{C'{oA~sb}pz߿KZ쫞^*7ϹY;M9v޺q`@Ƭ===i05|- )0pCɛ"|ϱ ܒ7{3C8y4u{ /8rݾ0``G3JY@P_ Ya\K9%q&k rάk"$NX*-m{L=|\`TO["[~ۓ Fz:ܨ[z;O {|~??M_<]NW)Ҷ{h)ǎn=>)n.^[gِD7Z݂9hhYu/#!$a肜qH[ܯb1穬PrǫFEXbk3>ĉ}5jQd2F~mo"k T B 65u@ k x[}}[ճ&mw911Nն8{hkY8 sKeT]tj1v6!ON+W Mдۧ믚S;7 KFt{De y7ŧx.Yw9aτY?l?9˾{iȌП9'|nwF~7?}ǎؿ]zXz?h)>i/΍7my0zRN= Y }؁<<yQ;pFId25G=zϑ]wx)~ x+gOAWtW7yc0XĎ, ;QcOc̜YW1I @@Jb;;~}#aROu[ [*qEq KŎuQ7-+DZtFTPMD-/OhaO]DI[˥78J\ ˝:*$Tg0V9)A+>S劊#EḐosJOUy{vw]/=TapX@:]8mUjJ*B0Fp1ص]dv 0Y'%NtþMP^e2}[=/"AP,FpNʼnIbe-&)02Ql.ˡ)+'R[c3g;èXN! (K,b<i [ι)>RaKϩ@=R7=2л-W*UT[ik Q!V1bR",rOV&1숐D bE8GϮTõ<{4AƎ<2*!V,|62`zT~пe֠-CeQI{[}9ELB A@RžqP`چ^bД~-.v鰂"w@% 0 !(09G.]ZLv5ko{a5O8w«Yz㶖e ;:S1p陻~_>u&a6\S΋~ulȴ_t՘+%MK_6aq*UT<(B`a@A8 n .Uy"(d"ҭ#X*e H7\BdQ2 9F]CYOl֔2lc[,D͞  (\,`ɉEpX$@P8 HBeUd+Ğuu:(02vJ&Hd-+EA:a8Q?6U|~&óOBp=[:=BH2cWpHd8^ Э?𾙪i*UjoS"R5(vF%C'nՊ5+#cA"c Qr9;O˿fӚ6*ED1#!(ǪqJgH",\ *n%|bP X-F@") P̄ 0#pB$V30(ֈH6 >dQ α3 *B`!Rwv=|W2/_w MGUu^*Ujo3YED߷oX9c+0Q1 W*z-wvQr!8ST긽w׷{}+CbǏfG!iEU=bh B23,9}=YPȁ6Fk9@"☜(+}k* I$"I8Gs=}V,(gfEرw\]Oė'4]we0䤞/J*Ug@r: #!L6$%b@<:M<|T(:bYU#> (bE ꜓u&Iyy}T"eUmT3R{c&U%ˆ(t$1ja@Gd]j@YLb ;Ŭ)nG )º2S%NmQ"(Q)pLH@Q4q"H=SM?~C.7{a-,ӎyo3'i[w/UTw. 4&1ġ# + 8`@ Y |r8Q^,T)er&;Ҏ*ບ&̰c'bZ-~+s@c&c-o3 JJ#mQ9m22C3.-%v Ŗ""eVu9,tt0 Z!; eFDQ3êN5// ~G?nS^Fm_J*-p?D: b)""7tbP Z?~X_ @k457 bD0Ɓ(B19N1qQ :;NYjl jt#\m.دX[jL>R&lXiF@FbE $rs%NMUR(*l*!% +%뺒8f6ݝMԜC$$"t"08}Vʇ1C5F'Y@HkE@%rD bֈQl-D-r/-kr6 ;" EU"?I:FO;Hշ1`r`c⠭ *!3iɔ*i/5Ԇ55I>"3Ɖ/LHik %XC`qt EJb cR ʡ,bsQDQ",(zʡXq!*$R|@-mu*U|2Btڑlc1<ŠYM[Y4̾&H&EY@jXIPT K+ +lY N*JKuE^҅Des~qƳ,Ȁ cAg 1IP 2kČILa"(&JR:d, , wrW'FVVRJc+ڤc+ !="D(P-ϖERꤦhWJA+R"JQu"d4hFA H&D A^4&lrExYf02Sh"Q$:m֎PؑK&F^h)d&:r,$ t  #0TzUTV{ Y P!! uB29.daEMlELVd|f\{I,hŁ"&--Ρ$@PFa6rd5)Yu A> \Ib,3az~%%Ql4kb"dB`dGXȚJb]J0a (A ZDX!D@ iT&@rVRGWE1ǖ E+ X !Bp CJ6Eo ~ؚO/=801,Z6"1ÊJbXāsI”$b4*TXk3|jBQw3<1#h팱cX20Y(Lc2ﳗ J%]PЊ(1D@m_XbWj/,$YH, }|)W YkRӦd3X͟5/bN:;j!:8F i (NYHXlY'HB$7F+&Me1 QHZQ*2xFY 5Ԁr ΂$l 8feBԍ utScUTU{ ;H ,뷠@|Ve ȡn`$NJB$Κ(F謄!HP08KqhJ$EMgTX*1wRf 2:L@EXXcEhDqtŊ`A (@D@Dd$Q@ TRGV@""Bϒ0sM ^:}YӒv#r(8X*r+u鮢)ub+%l#9+'" slS3*qb'}f,( ,qL$R"ͤ 0uJM7DD@A"R Z(@2@J! `" SI,{J*U|4՞r$)F 3 55muɂ^{%38J *LTKRpsXvαdq΁VY+*cXB"@@""N D!"q2HP("DBaFDdI, 0/FD"ңPS?+TRmQn:k BjB1*B.rq$a$;qZUs5UB?NcD(MDQEpE4F}48A0RFkCd *J(cH)RiD(@ ZDDF",αKX( BTR'N8f9T]3 }2o4{>MQk ~8[{Ϸeԉ_ V@'mHs:g -?ӂ<0{[5`vy~6.ig+?/vw={o}+npUkP?d8c6Rˍ;37#y*Egvلw]˿>}5q;&Kil_x W΍aw~?̏'}+@[xin[)7 Gyo)< WĬ} xq)mȳ+KG16 ?v!*=]F?űM-=9{aD]:rǷ lJ`|y*ֹ5U/G/< V v?HKZBN(;N9?v9z_~޼?(8oZMum7]10뢫^G} yӷy'N>`ß)+\p5wv4qL8snʩ;_n93O}ۄӾݱd7#k7]p6?v/A׿}xG6uQoovJ^vKv ̹׍n-^x㜞7mv϶x?I{WW9N8"-*[Y=˫۾ǜtS z?g}'ll/eun ܆A y͋N9}}1zSL^O37x)g5kѓ?SsIStTSל{Cdm5ds.""i|]=)i{Հ"E@D$kQisl܋K/dl%i)BD'$J9aIB;(h"ROBHgsb ,0(HWSz*OmuUɚ+.\\ &q\ ?^O 2cWpHd8^ Onr;|79}ﳹ*Ѻz#=r`!_ pƦzԎ~v~y> &e Y®:4rΏ7ZWϼ;Jq_y~O)T޴҆m-͎{|S.\uvWϺY::=V>QjymN>W4˂q{Ͻ9|;i!<= `[L=vJ0j׃=[olod6m/Ị gǜ@3+9hm2 3~]G {$^ ̼}N_+w7I'-'ͺYṫEqbQ[tOTzmsЭ]!bTOt}O¿v|>o;_СC#F 5k< Et\%0*P{j{i@@A^BŨ$una Dj5"_{D*,߲=/#cc|%Jiɾmֲh/Uϧaszfo^aF 2wF 8_"n̝x'=.w_Vr~yڝ˙!G?GM֏ȅ=~/.+N޼mqvș6_7}lwdS՛V'~['$ŵOԷg[q=mK{A[`_~Ҭ瓴sNS*滷5ݘu8g7G653pe@6|=f>'4)ƑyӾ/ހ@X\nIxЛ ɿ.!=N>[<ޤ[ {3{t@LkvTJc$A+n`ß}=cιJԔfW\9} VX91et1t8"08@%Z)#7tz:q Q2 _j$5Wӵ J!E`XA? _{L=|\`TO[g޹C>7ޞen^Íʃ*TݪG_9:oG5936>Z{~{Ȋ93/䒣n&ag7@\JvHJhW]ӛh+SL>Ǟg"5&U0O*IS{MGn+_H;ߢf?7xnyeCJ?tCNͮghM dhEv Hfe֝Lw[A@ZIr0ݼ XA :@"t};~OZt2TW{=YǟϢ;oEcr#?-Zb-{˿{k7z/x˛rSu3r[bS?jȴkt؎0^s)ݗ a6R.40~o'{V˯ߛ[5mt?N*Aä9q~7\vbWo׉oNXmUZ}ϕ }'~3r.|76bw=|R6*)_ߵlrϭj-Hص/ +Mʱx͒Wtޟ~74xѵ?:+G0ɇ^茬:_D?D֞:{o;IP3zXz?h)>i/΍7޽OГr9_atWjG& 7O?֒ 9=G~s{ zq#]4ڦ8q6>8}ڿXFn',}[S<ݷ7`)}}W]uyC Ng64fef/Ibgfi۔/4iL&S,ә|>oaAQyUzKr&NVHpQ0)$AJutKt2I$%ݫX:IcThh D,;\ n7lRlU3>ϼ_j=.l`E7S']}uDyyƘ-&"`ݓvDd5K.RJSzfN: gR-K<䰃B6ϯmiYyf:蠓VX.6lX߾}+ʐ!CVZ瘭,[ P1nHݳl"̈,H.lݞ7HȂ0#!Cd"4F"?q l~PJ*3:o^zˆI[Q+EDιTu D=kmZ}? C $tT;}? Ȗb"?~/SK\,֊ȭޚ$̙3Edܹ/2=@qqL "]:tjH f0- rFL]WDDH)Ba\?K* BwYUѫTR%e|/>eUac&OP{U98 Cϳ籣$!0 > aX*23T:qsZtx "MМBv\*E "4 aaA,@⢙3M}?{>*,˞;l;fg{~԰YDHii( PX ǒ꾝UM:qܤ fs2Ddv|rjӦM+?{1.I&]|x2cAo[{SOW~vȚ5k4 j"HW /W)jAAtD_rպ#=jmeKg%5O0( AP03!."Hwc"jnn.dhRv1(JW8N#2"KuJ*U>DlKU'O9s,x=Ib"!T_WH]vO5r49gL2e={{9DGcix$II,(oIp3G,phLB1^6N#!;"("L@i>VD@ VX5 H@D R.ܲ꯿zvREh1z#'"=RJs6}_*"f '=f,o}뗿E9 2Zi8Sy}$?\hApBN/_Y_[s̙̜;}ߙ}1!GTYv6 d0F!H)P"?b )p2/Յ&g3 1[") #q6rU67ⶥ'XN`fBR(i7, ݍ$#P~ӯ2mT&G"9I NHXMy29o8Oؖ=]Lq0H ,xdK[VkWYCM`Aq@`enC&@ "cH~  ,RHۃ<ɉ0mı9fBQ ȞDCoߟDupsc];)۾9+Z=o{ӟz5$gl( gǽNŽ:B9&'B=(H2m0,nb#H0 gn[ETdb{ut1p.8"& hͶmLc0p!Ia4Qpa^RH!oN]F %LQӃUU5,&j.J$'zbY) F%CpnZz/'4j7FXS4L(hn"BdYv{rͯzȹ%Lb5jT[1u1 k{O8~%J $s8䘸&ȹy4Eͱí c`$˓6gw,8)|pmTo^iiWīи.$J PJ)M}ܙ;޼|\ةw #_&qKOBVHchu (&AܴUU9DB0!sy`D+ 6BSDJD 3VJvUd2P5/Jԧt6WdAN Q@ 0l$1cqB0&%sN3У.RHۃSRKF6 n˾2I &Kթj*MDaʴl(= =E~{UUAw%Xs!-vFSc6c~?-p$I$B8Ap6$,ɔ@Q!0*rZp@;V-R],:eBI^kRqx]Ѧsq.  !aIEfdqJθx\7Вq!DoᷪNL+-d"Q][pI6He wnAe0lRJa6K|! z߽y5a"ԓP3Sa12+++rWܩӆ ,t\XHs@F&X 妅 H Jj|ezv)ႇn0Ƙca †c`$9$IHwLU$BmNSY&. IDATo{ߋnPh5<Χ5,$R6o|TTo0HcjN$%ğ682C>zZj~ȳS:x` [kB iYJos5+@sˌ) L꒞YG eFm஘~c5TU蒭QjS$cCo4vyz~UU5;K bMz|8PMLWU2 m5D"z\p!6I,F4Ul I̶lT5_/*dT ‡ !`GYr Rl3&1(XaDaf\p!H붬~ysO_#RM|rw=v$.3?~f~,+޸'9$w;uMU3kOtC <;V,7 yvcNӠ9*ֈ8.\N-}{iE(9w s40aϟ]?{e;{h]5jF?z'S'_}QM/8.Hw sM0wx>8s<泏jv*s&i.x&gr澻Ѥ=^W:hҤ[eJ9%N3~/J8u9';e{fWew'7d̅Xe+J+MNyνhTPŽ07o+mOۚ-3rI{ERyO r~|/if#9#ڹE}dt|Ugy\ @^ɐzԊ3;KGzIJW7tSS]Z 0B #D>׮]kv,/~riFS'僰 i1Y%u`Vnz2iq؜wpqc}Ll% uM+]ԉqӓq,l86cOA16g\0t-۶ea "8?;{Y'+sgng~yWf]֥/|Gw"TNy(Ϻ9_zrwӃlh杯a+#ҧ}ٶp–#?:{ó̟;\u8?c04~O&oln3?hʽ/_C?-hg Z0o0ϳN)ͬ }Y50L^ؑ/Λy1u ??ֶ9ӋOޖȹr)/uU.?qm#/V/r-3.}N+Yag̘>VE{o{Bܒ5 ϖ˂ V 7Lbd޺E`^}-^u*?{{w ӧ\7WiKO˼|Ҵi.Fi72w'&$ 2B̲ƹ0$PW")I5⹲g|K ҃x=*48 E,4TNJ-ڿnVYiZff$z8L$x6m; (&"s Muh+ÃmY╼b'yw_1{f}t SE顏V^ޯaQ,{cy(ZWN3 V0a„ n_xo9&ֹ-+s͹ΛOn&pOSɤ+︹NnT v??) V `_T9xc+Ϛ5ks/v}[ //%#,>׊zi/- Hav>D۞uKvYxdɘ4  sVBHPK/=~bv6'Ze7AYm o__~s̓g*:ۖTz_+C(39>ɍC;6NpL GƁ>~{v ZLHaX&v֓Om[RYõ/A7\ v-T /h)W w@ !2W-8uz"&K Nېh<2#쭬 1$H[#" ^NqE$\sfčתj*uIVUWk fffX)1UU)ƱX>$dJD,ALNZ6ajRq/hM麦PHRzvGONOD} m^ܴlm$ %IYѢB%4- i//7km~lo~{X"V/s<ۿ}msz&nYxjݦ%[[>5o?5'oDtn@}zїPK-}9ʉLz '!]Ӗ1b0fDH3ft]MS a&#;.Vz_*I2%VƓ@S{J:u~`c6mpf1v(y'H&QBt$Ԑ #@P$**ܢN2tI#1ƅ CB2,$R jY$`@q{&L@k@nnrOR+=o)ͧ.t6B? ~lLw芛NC[}rn1f2G:c^|2K> 8g h%8}_:y]c{DD*y?ky[5yW7ɔKnM9oFa0knhC~C'&>n9=wm-w-}X=IOb̹h9/Z8o=}Áۿ9d7Dq\vŠ03??+ws6گܾXyOep"7||?X8oGĆl[5A-9codNO,&g p,+d>|$'HVm_)!.P]@zFLAKK_qMc /O &$8Dy]{`Fzٞ.U^BKKKeYfMo#>Y.]9_>c`Ae!g H TS(gs@+*lFll` hæ1 dJ R))ݲ3.ܸ@{^Z;RhKZҔpcrΚ5ۿgo1m7ETcr2B-PA~k;hF   LlYtv[.@]hha4E]uUh dLqիx&piI K!JUW]zUV1p aؚv8cܟHzѺFQgń"#SOb*놉P[[ c 9m A0_%e  !^ )CAJ9xggvSXtGy;vbbAO8humM +&bcFT/Y2Ҍwɛ#=ϸ~_ >w 7p_ye߁WmZœ9D`u55#庮s&>U?.K3G2læĵk4i : \B0EHPY޻o0inBF#BƔ76i^r"Q˒1`K0BF<…McMϰ'Q #mXK!~pkEmSc܈ ` 1 A"n@nLBpWX٨88٘84a7u?x͹as8˗V)3o5|u'TYY`1csF OKKM~_QPP 0ƚr8p@XHJ*?`͓e"19k2ܲlWaIw  @gdf`dNutDŘ P|i  !Da$RRh) g Wt;#N$'B@@Q#a@(F9c0d̰BV}ݻ݀XI]SBm >DBw@: U۞{~ѣ%I4dy$ɲ,'lXF H(Zec5e=#y3m .m˗ÑPAI7 BV|'3Œs#N !F1a:clL1E6F!Ƙo 'RH!wHR"̠@BpdW̱8&w[n@%4C1zʪn" lH9p_yf̘ܜ9 ݻuMDO?lE$@F"f{crV73L 8Hq GBP!8"ե;ٹB*. iLwR#0P@"Cm/SpDe';ض # asA:n#ݻSc )|SH}[cgs0Gk[DH,_}5|(L&q}?ejJt],Sx7YwPMGkeUS~.@eS p.0&13o@ !lc鄢d,B (R_Nْ۷LT.8&LAQP0,˄]F "H}}}2,˶m! 5?UϓQRRұc.]t- &ɖ*S-j>*.* E6jK?l颵o*ZY4Z{2B {[oE$µr{Xpo\08q9sAp$8@8u%RH[R۶c4eY7BVUM>2ϛ7o袋$r??mBWiB7͛7޳ꫯ5۶)-Lux 8MwS᪛gEbUSq3ї9WZ~˔\Jɦc"iYU23s&Q(|JГz Vߪ.~ڞ?B1.,옛",YcԲ9g 0d92:&8" DzZE")NWdwb ;EFzzYƚDS=涤(l5 ̛m N Ӱ&!AqZz730+TSչ p(E7"TOqQC}/A;հ얒Hwݾ3Q$-?>r<7˄*n&:_P=0a;碗S]guׄ@Ҳ: 9$K!߆:xzn19%9st׮]^7j$eM2LZ&ӖH۶\y&ݭă5L/(JXza'D$aEv2$X4s@ν&օسqeMmSЄ*J+}ҟJ/#+iƥ)۷`,8tJ9/ IDATϜpݖ5=O#>s~ɂ^K{C擫[ﱳ|33}`~21uy_o([f@ Gڝ~}bVm;Z9s9HT.qmcJ hJi n)B -41%FinsNdYsr 4Ͳ,i[cBmG9Q0v8/Dpd1txf5VUqŢu W ^Q$T' "4n"mݵ׌kxM|}W R+{3*3<$ Mn[i2\AL,P {^ʭ6s_8\1g7:zi|So-Р.ϿMkXǀ 4hN55ο .n+??z|~(]cV8UcQW^Ŗn[@ސ1vN;:]lEieI ӹ Jm r[QלӢ^tf_5KkV|Qj`ϙc.5#J[Āk~Swg\Yrc70AoIytGQקOߟ޹sFV,"X׏|.]ٳ{'Ȑe\Y322:u|>_VVVnn.c,---###(RTTAB̴sf<2-!a2mكd'ԛHSHIڶaPhdOMX@V&|@=I;fܭNTdmJfcª~T2k8N0"Y'+sgng~yWf]֥/|Gw"TNy(Ϻ9_zrwӃlh杯a+L񷏮?վZ \޻`窳)lϸw7ycs#4m]Oޖȹr)/uU.?qm-%˫ tˌi#KӊwVw0z3Oyў۞dgóò`a ӯnѿ6XW8muW?a]u)׍~Rӷ2/4mڤ˃ѭoZI=G"I`ΝWZzͮ;֬ZuBL8VW ::k/SFѱckǏ_)Iܹk<t֐!҃sm12P"'L#aݻ|(}vZWq%#j-o3G_"iTBH2MDUM{`֔ٵ7q@$Y1 Y-d ]f N_(j"pֹ~(P)&ѴMtrs;?q{{gyuAFyS[zbw2=5sCo[/O0^t)lO[ uȲ76w_^.u ;p-okj„ \7/n7yܖU|Ǖ9^E\u'6a„70cNwU-x3n,#˞?q vF\0ЯRs1g͚5[Y;- zkw|մ$0U;uaz}mOۺ%;,n9O98K]b&c iZ@ƭ-5Z*766.}Ji19;_,`BslYwO/6op^ye/`!}Եgʃʌj@dK/\>* $3E2-!P!T` %IV\H&Z|faR7ݹld(ieq٠PB3N Mgf9Ow-;;U E<~r<~Lؙ2mGo=ox_=sdy}fšs*wpazQ=iMQv*\7{xVpٍ?|PV[;jׇۗmC%վo%'=)|pWS%OxCgR\p;j6l]۫]wSֲdh-x}fҕ_T7V?d祮k_^oi[<0),^Rp^˚xB>XXUU]׵t(bV75pS9ϯ-^z -Y1c{Snz =e\eqmF2c P9Di3``L(@ Jdz²-U":=۵wcȖm;0MYnf\<險5 //7km~lo~{X"]+3o ϝ5qˊռkvLc6?#}fgͯ?'繧Sxz{!]Ӗ1b0fDH3ft]MS a&#;.Vz_*I2%VJ6v @Kw5|wvuooO?xGec2-EWtK>vۍ19 Q1`\??(?3n@/=Γ#"RVa[YBịM^rl(O3g{yڒc55#~7)!OF>hcE˹swxy9uw;})$+Y';+?'Y5ds~Œ]Λx*}y8u>j&6||eKzu rn#sy晙3ggGQJ,iZ8U6v4>q9~:_ M)Z"8ʅ@4e\.!r*>BaD@QTp` 1B$8pܑ\ s1Aa!G`B $ !@B4+%A B )|aF?r{GKLc ^6-3r!$z=j]8gɤE`BC.[rퟹ8WdY(:DBQV!I-jBŐGr10p윎q: 8qA@59F(?X yO;? #=V|9km9&R2;+>¢?o{9SQOs Z~me׀U" !#h:?#zA 㙎0m6rp8iQQ$˻vA !@p @ضdūcXd A R$ h{c 1 !FV=E3sfBsl w>0zvx7L H ljY&9E=ƍ͛6t1-N#\r3ܜNo'TZRH!~@!tO!RH$ޢE222 ;;;l۶4Mp $xw' q$kD BBeH&MMM,X,o߾L˲ ð,DUU۶cΞ(]4/+_qopa!@ B:ω8  u@9'@q/@$`Ϛ|B )|^"ҥK]]]iiYYYD"##CQd2鈴d2iv"֭ /++038z۶m={llltJ۶U__1NKKkllT%HDQUU^i@RQι$I~!:;ͧ6H`H@N829I:pj NҌq3,޷wVIƄ~?gSkG}wUI{3ta)BJƘ`C,\.I\.W,s\ht~?77&++4͆˕gYVjkk].W u]QEQ!wD`(zBD"z$IrbZZZ<w\1BQj4Bv1.(S.:;\p(#{k Hئ,YF4JtRuݻIpC}}vڪ]u2 /wo@DYEDea),DDժ(PU:"`}#$I*)))--m֬h%;;v+QZZvdYe9..c,ju\ؒ,`DkX~i!( 吏ڰqCӦN3|t ۶x*{ĉ~ߔR' NjO \eHlAcZLŘRD)qЮJO\bkN "TG'k/Wy/{ϣy5444bƍmB)++s\<ocǎǥE"pmm`5M& )))(8βX,fXx8#"I-f+C&.UPJ3 x#(䏖,RAⲭG{|]Cb lLL&h٘',˂ $%%o߾#G|>N'f>S|0Ft:s0 l`0d  ~yuEFaYvqF(&KQiu3[:kjbX8kܐ;njKKdM`LfNod"ފs鏠v!s[\UQz9khhhP IDATh`016fYljFFb)+++((B&) q,bdFoFnnĉ^/B:ZvUU5 HS+ f@Oi{qu3)c)NCaxLznc:}2Ջd6 $͸EN46y{VuJUJ8`,xJRAbJv:)c`JMzgǔ<PUyN1bHd2 pرÇ3h4j6SN8pn)pLEQJngqX. <ORR[d (i(!*cY7l+/}$EQUHFj4/ERW}iiIСeeWk DHO,u0''GraŪZwÜ:cmʄpESE9.)PD.c?뻇B@1 @O)Bl 8NfXJP LV{ӧ`ҋ]Xg([|2w푅vnܱ"DecBU(B( <81qT4444~bdYfj_, B xPn2 ߫؋ble.AdYNKLLkFH$2iҤN: S֭[|SL9p}@YY^'D"vTcBeYE&ni!R@aD(") x)58(`(^g\'* L=jk}{^eǟ?+ ''g…;v[n7!p\.!h,@fav{MMM4efϐreKxrH#a>^gĪ|~Ŝ.d1<>ϧ~п-# A<)qTtBcҕ`qlm۱RF\+b~g7?~/t&-ě:s.etWTorY~IaG3ZZ|͸{\>7{poH;wp!˞3g^r8}JgVs:Ly{, 1D[c322:v 555EEEla۶mr}۶m۶m[IIIuuqnw4lXRj4kkkX( l' J)FF* uzE&fEUԠ?H1xV&9PTQ"D TZDJ:P4mڂ1Yf(E@/88Yz'|3FJ}߿?~y.] @þV?_=,x$ +Vv:``r"GGv~g'aQV)ҹ^SՒkiļ?pTUUUeeǣѨ(yyy,y0`())1͹lʆ ׷o?VM6l'`S260 VD*I`c}tPy88G)uYޚЁm6G Fu RK TL9ra( NB"!9\޲5.O,>˴^gkvFqVa31ɕjy| };cCL>63Tl֫Zkk W!cN"!L]{%`)zYO1儇gϹʉWΐޛvzz2 tgLQ?6^ l|{3r?;~17Chst񿿴nW)n3}j~̟=mR#/R[p޻+\}fΖR{yӈ'?s^"Tڹfr›Zu1pߴaw'$Rs]<ڼv}aYD!WJ0#:nvȡRyAVcg2xDBͶ{ cQ]0@b׬WTNxSf~$sw \i;]Kz~_,B9YtEQt:s'g !:thݺNh۶mVX{.[g)))q:({-/...n)BEE8 0Y,jB}@$@(%>֮vR ȁ`jwYm2+*k0υ¾yJ98H,XmETUr(UBp5jc$ ,/2g[xzΒ%`Ǐ--v>_˳yljxUOΞ?5}@ 6YyŽnEKZw@zϪ]w=a2ڷsX#ד.]>M{?L=M|בH#3DvPيsU d9,d5Ǘ䌞5K>3*76C }o_ZBrh>mXv0<4Xb]Wjܤ;fLNaY,omm-Sg̘:ʂW(J'v?{}kނyXm~%7ԱSwd1)Rw|.۸,_J֩٢Ywzō7ؔgňQ6g_g-#:ݜxCߑ[Lcs-y'^#VƏͷ?wC'dRe!Zzl>KhFZn|".p6e7UTqK֚y;YoisȟmskN-&<=t{m{M}/7'y Б͇=n5؍"Bz!r(Sn*%N= Wln6gΜobSՠk:[8o2]~D}+{58EJ"Wl㸄>r|;pHWu֮C֗|{W ry(,pr{']EQUUY6PUUzY=v5װŒ$m۶Y,ɓ'ckkkY~P(|qdZvv&t){ I1AucYT׺kEg$I۬j1]F$\ZZ1ctð_] 4 ,2g]2(*%.O(*GT 6PRpDyv$8LGΦQjlJų޽㯞հ!}m<<τfs:u!B!)˲t,UUǂ@||b)g !wk((IR~~~bbb0dE#cN?|RD)B@& |T"vړŀTE}{ /J4,s5ֺæ"@(%`fGE':`D萨q?Q^ Zm znoHa@-*E5`t(a{#}7MkcȂTǍcos3%ΤzsڵTBҔvyk* :'?ula֋T;/R Gy -Ou\S8P_+m9tf:˟W0kq`lθpӣ 7 vԌzi $;^ y,$I,~ ^ѣGy)mFsWTTm۶cǎy^dzcBje^ mtLef * JRBV!4"ZNkk"E  Gހ$PP%}+v9r{a#BER!l1_ >K/TT T-9=~IiePvRMl\XcL֗K<*%(z΢E>.)둗x/]I DKƯgyNe6:&}ivצn8ct[ٙj~7CqGۿ[򏷎t_ƫw:|\4pj&iH^x]_}ﴼy/ rW/=?]W:d¸2r}S՘w /}/"!Ϟշ|fG7L("NY~ݶrwP To+K~ùYa۽zm)J̿u|ْb4YXֱU@ HDeNgۙ^CTU>|xbb".[QQQXXt:- V+ϞPZZDG(bY)0Q1(E!)IpTUT(,,9Ok$ŀ;hg F3`*0W⪊EI ~Z/QBF(f!@B$!# P(-筟c#N;@δ'}o3o!;'5uǹ*؝/#mqv|jwRPr; `jO?S{绶xƯuۂʔn##?3W$"oggN; GqmL{^ƫnhG&LMy s[P4:R^{;S0_gOU]\g/b;GnN#FiG~; oj9N|x;}8/'kX1dkݩWoJgptVb6}y;$Z.ڹ:7.AxS}^g ߓ@Li3:/S4{Yf54[cRMjѣny,:3nNv9b1\iiiYY޽{wY=sC5j̘1jZ]]$_,ĉCUVV#dY0n6_BV"b l ag}|îک[>Y1Q6jn޴}t2[tm|SFun_X\q1EUsQJzBH.F b #W~ IP9иYb/ISs]h{1e/}7|xpئz" K\_ǖXpjN4-..޸qU>M6߿f1kjBB Hfۋ1ĉ#O]QZo¥@RE\Im6߾mo߮ FVb&5oTUS+BT RaN5 `4,-29@RD]b?Z4N 9487 Jn%o҇{L1ĶhÇG"DT8vݵC1, [E1>>IG* YCuuu,F>'lR$UU[h$Ic FPB B![F]-^1hM{􈏳غ(8[v6nqмfIՕ:uڥ !J$Buu WQ*Q8cDNC1-F=]M5_,z݅GH=>})RQQo>Eh4x\.#ֲ$BJKK^o$a"ƸR􂂂M6ǏAD"IIIlomCl QPA"ּ#F _2 @ضuw0EkIb̘ctՕ:*l##`1/< @($"]LQe@%8E&N~)c¿ ۴ic2t:]JJʰaڷovzj-//D":.AZW[[($\.Bn|LZN.\p˖-c&''|h4WQQQQQa6~!PB @ǽG ʛ7og?zGʫx`cۏ=gVZZfN9Yi !DMTJ8J,"M fCG#nB%?@l  ]X4@ ТE Y: f8 IDAT,l!$@eWg@ ⼰흡PRFX-['Oԩ ,o{bbbUUU8S%  xBBQD B4Jw߷=۷msp86f57_u`jݝgCz|am6A?kuӃ**UALL(a_T/D(Exr ⭉i 9Tp 1HmQ7^#C{544~'Iۊv].Wbb"4???##l6o޼!LAh4"Bh4*K h4u듕yS8ݳj+%IE3E Ǐƶmfdd0?7fff&''@ 0:ݮY\1SQ2&jlXf͚QJ C\\\II S2QP)B}VXx>A2SJHЦm&BfjۮD[NL0Ɗ*A#G@1=X x^$8t:f_.X6Q7zᅴ߾ug<PdO}mX 24=#ds=W M]J}f3)!%5n˶CG"zѩԕL pêRb7NS1Du:Nz̲å̹oa;)ϥi ~E0eN`Ư}k5R<y-yјp'2۽Dg:˙r2j|>gXt:۷o߭[7Ib=zNv LPUmڴFVW xanoρáԦMz~ݾvmZ i"iȠn6JI `H/cggZ[VIV"ƼWk0bf0~6ӷll?MkPϹ7Xsy5R|hhhhF1fQ$Ib2OUrlA0 ffűhJ2,Ь~zƌ7p'OܣGZUUzY^Y˶ v{ɰaRJ(U ! 1I<ii !Do ֩CG A(n?8 YƌzU}R9!Xa j& ,EL}9^QI ҋ,~p4[&?Ty&5ҷs MϼPqT&rĻ7q{y4444m'^"bll6f4u:^X,,XZZX> yqDz}4u8>`vv6pX,nEH$’y;w۟tpFZzΕ)cgX>|%77S7^|hhh9 /C&)%%%33EQUU}>_mmmUUU `z$Vbbɓ{e؞ʌ 𳤤$!!Ap8\RRbZnwUUU-C^e~X 3_ B)|vl1'}7"u:wN85M55ٚ,uQÞ,s,AD A*ulM?RYP)PX84T~.j&ࢭKDqp 30h\n=Nd!yftlf$bi0X^=J l'u,$ILvVb0f04 <>>d2`0hْdY|IIIqqq?5<:Uzz3-,TdG}[cD֣g$QURURQyyԪUsQfdM iO~ Ԕ8< 'bہY!%cJB1/hdBI:رc=f9N!B֭)EQ4 >_8Ԩ?0;~$D=8Rtf2(@ƻvo6lկ_-)i :j}~ueINb-SdY*OnB@-,[R(%Rg!LK8NUU?Y,Y;搠(J ƘEr:>رcUUUz^QÓY,S7:ti޼lf,,,'U= PJAh`2! x}b(۴iu@n~=zwщ?HNM,sUm*-GeNk3 c^PD0[ { )@'-Y85444\OHTճwJP({k`0lڴСC(&%b6Rɔ:tУGRQQQSSìQ=j7(4BZU~*U^$*z D9fD}ސ*`8t9!T͚8,+(BX(JƋCG`#v{ihhhO|)e%"0<8g555W6yyy]v|`0=== B!x}ؙLeN~ 0ƇZzuϞ=tb2M҅R QjDl.>EQtRsHfPAV*NZ) @]I6P~ FS@@ѣGQCB{_deeJb-`pڵ,ᨮfh4zt씛C>9p !)#…h g̙ø'nߵ٬U\7>R-;ڻ/A],=irW?_n)׶zy󼽵 ?sM@ |s2TVfKpD9M''q' |k? .~;tGQĕ{+[tpOXg/3g^&jOyF7O::'ZE9iS&qw[״=ߞ+lOo?z럭UY݇w8'P5WVl>c>1!(<63W P0޵+ zGS']}|sw=WpWp=ua<">m9sz^̽0: EilՂ7Xǧ͜9KS.xʐk/zADP{v Tf׉_㏛8Ff!`6c7[X?ܖp$lCֿY1Ĥ̱w>Gj {wӁak޾Ϭ5e.[n1Gsv~\J;׬[XNxSN/6ds\jWU׮/,9A fȼgۄ4rhhq<R35csNֹۗ\WZ13w<"f1lq.gL: $}ͪ}E7evwxʺ?Hl$Zw64mǼÖd{3k ;XcK8o,{Z{tUm擳ϟdfͪG;xMxV|iq%?gsђi}]s>P)/ i߅jײ~]ϟߟV*|V>xYM1:k~[kfo P6Qh|'y eώmടW/^\6dEYh|_3z/`ΨgwArh>mXv0<4Xb]Wjܤ;fLNaY,omm-Sg̘:ʂW(J'6}*ZR"쒛u؁;V~KΘp۔y;m\/^oipJoXv 8fҔ)$,Ҍ?ᑙ:_}W=;pűMHw8mToq}{Ot^~q 6Y1bMYN7'|wd\x18U:kסo>=+xlь?!U{ lDH"ʳS&#MB1wV/4`S*ć nL/Y9tSyC/.횇ZZz6uŎӵhsx{3-*]*]pH99?+r9P[ȿmmPi|M]3^{ ن$ ZΝp`P݉$T$.ȫ4A9'{C{9}&|"BBz*2JX2H_:O?=fgm֜~cW^y}#seax<βջ{ZݔF^YQBпW¼@z6>Ʀ @p3ېOt?3Ou¬Z{Mw.Oe?}}V);A1U*E;bږCGix o-ly 60Ȼzl,nh'S3:v֊pILmQw S}D^*@R[rWzZyʠ$+?y~*ӿǘJ#/WvyTJ0FˣYES0e=Ͼ|g{V7_xO mK)DԈO63roXR _t "g!yg?!jgslaBuzQ/D/>x\{t] <mc_nLUc߭kh6U <'<{~ϖ?W0T;flnOXTu|WW%pnm{Xv^owcf-+W4][?)sGiYWvZiO fCv5OLkp7=v/5yAHp8)9ըމUK?F!.9F.ڹ:7.AxS}^g ߓ@Li3:/S4{YfibCCC+V >45gΜ?ESF'z7x(( 95444.k%Uxw}ђ7fjbƀ%9 U{du0߶SCCCCM]oyG&Oƛoo^d!SƹЌ/ڍ?;fM~Wʎn\ve44444d ZĘ~,/߬MV+:_e4444hF˗e7H8Og HzRFCCCC4~*SY䘸Z،7n Co)/Ю&~$dV&_SkhhhhhbĈtGk{= 0˹hJ ?*K'11Wԋ $}X6i(~{ѻK_/.wP}ưH 6IT.!mW)VJkRkmoە." nB"*¢ʭh\g3 if˔yqyy9gk_ {Ƈ}:< OHc@ +p2 @F40A =@`ڃ@ >9\a xBF7"d΃NrB =@`ڃ@ =@`ڃC22U}P}jIO7/vrrfj>FXV-[a_8:~ՏԸmçe^tI\&PX"ckEijAy%kJJjRUeaݬƓ6OWVxڽ)&go,"<\q690l/'Rpa$$(ag] f_hH& _}*mQ[n e-G]Z\U੺SgfOr>,wrU4L}Dex]UFp*:$joi(tP^;/l]\N{.v0`'<}7e?zOYOvq +o2owD H{\]:Q&*Ⱥ zsI}zD+ %V^ #⢎Y*U3Y'(4**4H)mgddTIБQ:^J°<.^1y:_&8g{P9iWMχ-5?/V?£Mtq QqfaF/<@Pq>qu_ /e]duO7}ݲvHjHZ?ہ0n,"*&2WrwY"W5Y oWnp'YGlqmxy{{nZ)ڞg/֦Eiy3irkr;y:Xj<'ຜ2Z/U_۝&tZL$nL#L{>K5)XMʦy^CUmK|S'F<0U GV4zw niFCIⵢ}fYQk0Ε3"@Fe M-,.·\Wm9 \č{|||.$3=* ~#m'&-LShA$-oI{BɸN<,Ƒ,"a"(ݓ :%7[,ҭJ#l(F[a:weW0%~&1wd"ke#|"3] <=r-i5zJƃlf[Y {C"ؔ^vfm,.Vp#Kf G{)F{rD7L%MzLY."0I&90[ o( pprr`/jňt56SַҀi ;3Zmhq5IN ho @ HFioDE2Ȝ/@ L{@ L{r> ,eO $ԛȟ$;99hwNNN3Nl5#,iږQ~pa!"7O3fn=Ku@tQE]BUr$'{ L{XLwx.c@xP±0 Z}aTJݬ6jI/|uY՟:`xQKgjMvo!(v]X\ͫU|'EyW"BRJ@k?y/0}t+b !0XLJUr/o?uO>l<] ZS jLΚ]Otp`?dg6WD-y&L6Ɖl=.Klnz ,@U;u`vQ$2z'G^Et޷zJ^WyUuMlc;O"J ^'" I6Q|Zgl4%jMdW&N{J  c`Q*Ȳ Z6 j̵2&Q/,>.ۖ;_Xy1F:fPZثVIδfШ %JSQ$AGfo?M8l ?>l)qG"eW&2WrwY"W5Y oWnp'YGlqmxy{{nZ)ڞg/rfcK51=ft 9z-xW!gƃy I,ck8r_eū݉nbIǨeK<´TSS v1)ϼ)8 bvH$uǟgIv(MEa1[Tv!PUz)"uq0:F|=Gm;jnmQvkXQ疊G얪kӭ1V$dEyz9Ӕ,AYݱ*,'P 4ح% ĩzpz|ϒy&QXm3aΛKt8]U +o5Ǔ0Ut ƪ䄼Q0RP.gr{PͮgH%!dTɎxmυ R-fifcg5t:/&di.j9QAܤeaq2+ba˞w ȁPxh9AAƑ Gs% \Q↦I+k.=fX;Ta;@^A4u/A$-o)~5m2c"Op:qdm)=H`JbGJf (L#-IAɍj^:_*ezXmz!F@ qNzѝ'>=>՜_Hr4"3{g,hcqY4S8ڃH1s}핳'7׽a*i/_`ʺ=v!;|ܙo`:iW%p#<ʚ6 w˘uʆNz;{ In sٹ &hkX:LJOSu Am`K̛c"ـ8VwL)&44tӦMqC KJJ… UB8]Ցx{zG'OTRVbD"H$8 @ CyI-`8̖[9 :E@ ˆt56SַҀi@ 3 VZ}\ ct0 IENDB`sonata-1.7.0/website/images/sonata1.png000066400000000000000000001356001377142014300177760ustar00rootroot00000000000000PNG  IHDR sRGB pHYsď-;tIME6 ИttEXtCommentCreated with GIMPW IDATx]w]E?gI6AH^AT,HQ(4Q+RD CA@)Az^BIH/o_9?clnΛ{g/D!BOD"D1r"D9B6Ffh"Dg漉V##~G4BMлf5~Y}Y¡o?p+ÓnjU}|?u;Ч7!yI٥s_|ݽOf+rӳFag)Vο+zaUL&SQQQ|>A#DE,QEA9sf&8ᰃs^{SC8|Xm[~C9p1s̙3g}4{ɚS/sF?8 tUg~\vɏ !(#"}mwl /,eM“rU8wQ!dEn{{}?ό.-θ??IIdr%snfۏs׿=}zؾg{L\*^cs)F.]?ȣ~㉇Ey|}q!NgϻcCWm{yk.:."|xއ" 2rP~խiF܃ms薣e~ņyځwp[~Mįg/7}Z+_}/{f/ڃhZڳv۸lOse?teOhkeD%g]we}VaX+.γ{\ut_) W uK#_3ɧ{1>K{txuFN'c~Ԁ+xOѢۿ>WӪ<~~-W]%P;.M'"wc.y׉CB_Ћ/~lWNkn۰fX‰}H/ʧۗDYʩ i>īP8Xd] \3C\\1xqM*c#}=I_|̻2|Ƌ<)O^O|>~~M?Cjf[0ĉ =D&W7]yAwȱ^?au'3@") (bL V=s~Zc03]k!v K/j͡|y,O\G']TC9?ʼn8򪓧qooۺBk<-4ccO1a '*\X=~I."lf#Q0] (8@g~ߺmyYlQTblGSXlc3\z]no>`k)3,`+;JsY?ؘN)q {9 㚻4V#=_hm=Gu- #.Ϟ87rwvd Ʊ|^A_u>o>A#DaX;ևrn>D9)r$D pӥ1cB^v#)t=ʤOO:c߼UO(7p2 T7aV߾U!Txn1n|b?=*FKw.:lfLdݘ#~|p/.{ݢ\_?*8 `^QmJxwoݪŕ_vN!k2wλRUU;an_~]>A#DW{uw<\+ e^8,9[眳x3zkN\ | 's-wUO{+lUwp=W{Y_a o^{#?Ow~ u<糮uF_ \5yǾ7~ո~vV-+̙wtu?S^1K}ܔ\WaГϻ?nP*xS;h48ۆuq|' 0Zª!3g,9U#J'z}?ԚNj=ۼV(AOҡQ8^LnBAifpfzf8`&Mz>l}WQQLmpxm DCS+pyY|}at!B 彥ҋKGi;@i*U2vls\~ /M{eq}u"D11r`B5H&1V$Bja]H/^E!BQ"D9B" nh!"DI'"DiA"D1r"D9B"F!B#G!¦ q K=D|Aee "b`2DL@Dl`fCDD`f"CLDD"&&60D @LLa`g%&5cZk"VF3#,P "Q!–aDP_[ikF!&===\Rj cƌFjM RJ"`~=N1 6V"1 cH 20hf& "bP;W( 8kl!7fD&6Sk/A6 F֥Y ]@!&/3aD$˅FR.2FZcIkJ+)ښ̬FbF3@jm4QJeD!ZLJ۹ZSYPp!&ȴ!MR:af2F a.ц5!b&6Fe01*P@Q #X2P 0 @X QYH鸎D R1 PX,%GabdKk1 E&@b`c`` I^f !Z+)&cafkMF t 0*y4cAr9?j\4 b㸎( &t6L 1H0TƄQm"lj6ښEI&6RQ%EDfCd Z D   2hQ )0!? 2lۭ9!ր@q(8 @dV* ("˖-!‡cn3Z[/dFA@KD.L @D,Fa1ȄxC*emR*8cOeVw~z,`RLd=>a4 /C-º ~oCOK&sQf ZCQ:@Hƈ dWN3ZJ`FDcȐI29#fkPHv~vΎ! t@}6'0;##RR;;seƞ9o-X@l_=i!mOSrܖ;~诎/s6W . /+++M,mΫT06^w>F^ 梆 h~&UUW~Ig L:{o*Yʆaرu C8l {SR"aC`RJbB84XUzDTwKgwf~3Μ2yG}ݶXŗ^0Z{yM#|ꩍGuRDhla3X F4l_X(5 `L88FeW^u9X[o;m1uZ|)K/^wܪ_vu-y/Svi\zgL'J-=Ic<~}WA瞭o~_r ([CuYxG~cR~/K\9͚ƮdɒYo1s3wW_^t3<e& X#b(ul Sc,,TcR!a̤|?XuuG|1Z)#t6ߺ|E}]mCm:B~ ~v\ D(@FhQD=o%q6{kmii~Gy\ry"?e8|qûE,`AznLuMUW^}A۟~橒0u-淎#_ .谻C 41<{ܽXň~w<3y;~wƋm?7jnWsX^.9{n;2 79}c֧0{߽{'}>2FoW45Ⱥޠ';İPf| !x<2RA(Q(K./Vpž@B! MMMerK:뺮b !"tR)em0Df`͌R aW^{ .Wɦsv]>}pرzz:0(qF3r?3Z6r-j>y(F.3ߓj F| kfdsg</jll |^ʆ{6u{WN8a`Y\[yVz;OzCm77}zʿ>fNf|);6>2r/b摕MMM ֠J300r#Xܰyk0 "2F5m"!8?@+}uwWBbC*Q.3 嫶f˚JWPC1z #"dR2d Wz(ؐ&T$"Zy.?Nur 3 )Kx"AJ \]K%R2lπR:Dvxܽ&Pˈ@/}=[nDY]]}Օy'ND%@JsGֽHOݲx_7zZgkݬ/pJ|9)'xUߩ-{e wnˏ̬l}R?)1*sWQI>F4C($_YD&TDdB:%2pʶT*Z+!@Ah])Jfjb[ycYR$2d4¬8*@Ds[Zn8Jʪ/}ޔgD7$5\ Eƶup ,(,zE<[ > =+NZGV%9эt˶BӰYCcaPj΄b檤Qk[Xs؍6X92Z+6a6WXpi.WRa&AuU1{6+Wrd` h(@ u'hUȄh!pxLsjkk汓'N1De?JDtqk 1\w[& 3mw_{ 4c>zӥ=ܒ~ǃ}uYțИ0#yq7_}tכ=z!/ HAV bv|UcUlygkˇuFhf  [0 U*7ѦXtI`kR8cC@ LdKgB䑅J lv?flB$VBCLy'DDՌ)>~y_[S &MS~zQG}c]v+>\w"!'[4\3Dz^:pQ>lwSC~>wNf_ IDAT ]]?gӧ8Y߷@.'zݯ9-{~]~w<\wc借ʇf5sy {~rBFNq܎qe Wdv[t0 H!D,Z " =Jjy;gbt]0Iύ lZd[Ծn l.9icBJ_ʲe.=ܫg[m5ŗ^vI'njUWr teB ,=7r=,www7Λ;8ttkc{~ȰO յW9lۘ?w֎ $˒&N.KmͶ|~E~ -O8M)w7EH6T\^y!Hd؟#l8=8aڌBD$( c8՗3v  aH-V5fKYю,Q糷9?Ͱ(/+?渣+kl3f駝O?ὧv}w|'Ǐ@uUڦz?uԮ˧Fʊ!b؂ óK9F^^^L&O9~vD/|GGSC\12o*J6LxK_ c( 3F&f"F@C7k;)rB[Q`"Ң} nI𵢈 !D|<8ֆ%jRx1lV%ш8>@!9 8\:' 4."~k-y/)euu,1B{jhhP(jkk8(jkJnÂy| h?{?+Vx< /^%?K#M֕Uӷ1ol6C)?r)ddVJS1v3abe[c] Me,dUJGDT+Zdl6Z  Jb-]7P]XWSW_#WututL&aV&(]a\B@&2qoj/}O?Ag"('9Ygx΍|=v}":QIJ%euƆ_~q#Bm`c4@CBe,X |^խ !MRfZc؀#$JLѕ` ؤ*-HP (3vāݿϵx.\ޛ60ؘ"B|eS6|q[׾(mM0ijAD9)Wj%F:j+0 hJHda 7>3R!Q:B0 [ 6sܚ}soz#3n/\bf 0R:,ESqEtfdcg H$l Ï[(~+oՐ.Y!fk*Sl1&J)$ B: 2zA@k-e4b,]61QWM<#H*X6S:2D61MJd3# G7|sXh"l|٨=2X԰1ڬhM\:ә K +=V!1b~-)%h P@.HLƐ@@d3eQ#ڲvLolxY]S@Xr$m"R:(fvm|R%#DHffbF&d=}2t\pH+T CMDa`a`yik?PJ'pyYAbK2xDD$%6D a#mƎ-B͜K~ Q_e:!&!ZZ}P)?I){qRicƝBHBGb2 ZwuøqRTEEʕfϞ)j"R )jQGӄXbbNhqF"JZk azzs. 'N=a\׵^u=GJ?tscL(([r_~Us̩bTomR @BF6r61F.G@)Mљ En̓K@& L *նh,K)F) ’ݻt @lQ Lb1yNjbIωAWOÏ<Jn1cƐ28B DG W I:"&!¦g#R @H7Wh= Q62]]=;1Mu5@LB 3"q;?`+b.Vū*UeIsE2+K&*ʒdL._/8q 'O2rd9(q1HCJ)ER)JGS[71+epvc&TBJ m ,8.j;n+iU 9 Y3#BsjkZF\wUF1.vt~cǴ=uyeUuee% CqP)e҄ƑR2b"lb}K6&yxg9m4v=jR"l""BlAOo/(A( HfҚR+%#gD&ݗOeAU#(+ >8R2 u[M6g)'Κ֊+;:OVSS=bDSSZeKL?y{z 00`1jmB"A!Dd!GaSW-r\Ow.&& 5U]Y+ֆ2UmM uhbر|Er~6ZܱG2k[dlE5 M_: M -l_zwho_KuvtھґJ)Zi)2("lr6@F^|Q BzkK@Q8B35 $uI&<"uŖ[Nd+0\jUyyy~U+>[tglM:}z2|AiB p]H<lV#D"Dl^;::uDa7Ɩ=/nK!(ֵdGbUE+cBfRt]ݽahdy2^U(/3v>Dsի|]mMxl3k/wttӡưI)],*\!iBd (9Bj B60Vwv,5a4C$Z WVbtP!9fLS&NXUUYQY&С~و0iҤѣ3e+{SB:Qkeb-P AD"D؄=Ykn9W8Blx?1ؔLj66uqk] hՙ?o~hujjTd2iƏol7뺕 ,lkkoi#>y ӹ2V`` (P0Fp򧃑:(>UߌO"Dfd3R+B~:E ZR ]nj>{f2ٶUsahֶIZt+++ŋE "\/vuukcֱXX A@DesYvSR;}?O ܺ1#:{|:g!BCU- wl5x8N63S11XYY2}jl9/+~:˙;m?ytZHQ]S=݅ aXQQs"رc\oo*O03hHHZ3)*.[w-׿«v'EYEa}Oӥf#%4ĖDZߘ]!0 QNyErt,Y6iDGzVLvll+KM.S컽sYDI{rw8Pdoﶶ+͑;aFmlSU2rIX0)m)jWb1%1!$p%(p=[޺rٲ坝]2jd&kl5:Ww{駟['UV\/\f&|W!O @02JR( $a ?z./2~`/|>кv/{y!߿覛osھ¾Y|0lyU읿g~˾o~|Oo݄f!BYXX)Ux>SD00}}i"jm]ye(HK.(5zdMm%3wvv/\4))S'a!˖%#G6N#G 0HD c S6u.*ZFF|;PLe GdU6. =15IUs- RZl ;>'B`B1 )j̙3K.RӦM[Ϗ{yɮGM-5.>=W11,EW<p<Pgu̷&T~UT4 l,@6AXX+`t&,]Լ瞻74zzz)S&I `ugEo3oūۻ@JL2R*)e" 8X\' D &<bڴi~eeu]`*++ch9O\oytu~/ʉ}p˺Ϻ^ӝe<ط:+q!uo/O1L7}W9"mၔD ,ZJe"rXDF/e⦦ƭڢP)7Z 1'[3c.s9s ujj&L'h[Ammm&cP@)0ո (!8DjӦM;S>+bx>SO=uP:ķ.zw>_O[vĸa[?ȽqQO6N(V~sqmw?|g *Q0i6{~F\O"D 70{wq+ꫯ2)Dŀ=2OmQ%&BdD!]WhaO/t8Rf'@s]Z붘:%&tIU soo_[[-<󽩬6l lx)%2@@-]v~ZSs׿Ԝ9sځt!BCI'"BaÑ* m\q\EB"`fc 9FB6SMe/o;w^mmMSsCRwޞƬƎmijhھyl&ITU2qUUUooԩ;zzS}/8yѺVu0 !F00u >03:R0CZrD"DT e p6̄ԟ(jVϚ5oeʪʊ -\'Dy1/VV(++K&Ksn 4˖Ο7\׭Z|RIJOJ k[q]O)e41@FD(NKʇ~?񏈎#D2uF^pֺ͊ m6zbgGDpGԊ\6\Lcd>ttFswOud<=,lT__3v9s̙nSSSKKK===#|@2)uVP@)ZJa# Jb`&RZ w,)_r%ʋ!Bץ~23D@fDו: X,СM]o !-) !r: h/Y/AAhCD>P2+O=Q__?ztʕ+njљMIѡB0G )fB0HJ`=iӦtMXaYr.E"D2#an#<X @$b aXV#@0!l].f0} lt3&~\.WSS5bD+VrABGJRQ Aa#:J)Dd6Z1Ah6:^!~"$lA @ 2@ a\Z+1dtB!ֺP(9%HēfBؼB ]PU Awvuah[|R+f•1aFD!6!B&?dϰmfW=uwaQ+]dK[zQEڻ  JQT***(Pz;vWJXzْ#w]\tgw239s&$q1ipbJPQ BAR@y 8 @\@AT*NW`  pEq۷\NfN7N1cBP)(BA@)4 Ag(!_~p ZDGx:y^^}mv^[b۳"*4-#1%Pҷ 啥Y#$1"zq-L{hˌ@ (<9~*0Q;9k 7,p_r#tdSʀG{__;Gԓx.7`YumAV 2HyphÆ^/?9{Ÿ~]O+"_[!{攧^[vوY~y$^]iM O?wNsJb\Wbcc<^` pߢbL"(rVSJbHtoG[twP> -=F8Qϴ  BI h4:9'BѨBmG222t:B!@  Bt: a8N 9y#NqJ`<> (3R " p 0@@FAPr&[f4v/y 3Ş >5{hN3nڽuͨPMOKyRQHL磊Hl9rke]'%V/u" FS(*FIM \ c59q F`ɏi }t^%}``ݡ#11G2(U=ۏM~b^83G-$P)(A@i4*@BACVVL/RUcF*#F##((《R0KNKL;ArdA  ǯp A(p AQ)ceuI:={[TYmyuuysoܹvD/MV7s&e.6%L-PT2*8xq,&gC3T~J7!3s^>3tVm}4Y>6^4v pA ':d֠.\jòM~pAׁk7^>|kwF'Ǽn;ZDžzwttDDFAsw2! u/$`ǏI,fJy% TAT? #(a8 4cJ@h4*ǧh(x>B'_P  R(A |i:A J o!oM qlCr_FC'r m.|9Gtn( sIVq|'_@AVU!Rrb{E!,Aɱ0N'W"Br-8(@T0 N @ee@FT*ռP(dm p+Q*ǎʫ:/ gn36icϟ?报wڝ@ (9%) L0Dc8A88(E~%p 2Ȍ8a(% .w[ d P Rԩh0 Eȸ4PP 56124|llllll =@ -@} Ғɷ *2@"C Td@E@  @ P!@"C *2@E@ HsLC%%%IIIN;t蠠9))SNNdee˦lfPۍT*H z-ŋߵim/^ܹ3(2~Fߵim&#d1##DSS @ZNoUT[[ԔTTTdgg]tQNinn]yqJj;i;wk>"ŝ17,!!˗/8h4&qqg&Nmx<2ԆZdl m;wTVVtڵ;wޢGܻw F0[7S om%M+Wd;;'O6rUl jIWLJ=zT4K.˖-MBrF[=qіS䜜슊=z{F#hj:FEQw>ɮS~qik9\occcTb # $ޣ5GE9z4Zbӌzdpa0rCfrN?zט_~zj2}=z++(O:wɥ\md:fz[ocxAC mQE8\EQaT*b0L&3[*x< Æ 1E.ϸb=EKu|uКA6W0@p@ T˳Tѡȶ _Yy?iF80-I\aӧ1s8k9[d|ys-. Ox|r򊜑SPP@>)cTi_*@SS+##] U@W7 q*ǹŕ11b_!}|OܝUYxϵW"d.Vfqٺ| Вstt$7)c8@pL1A8 $Yt)QLX/,"d3FE^z[T~HPۙt E4[va~] /Bi<`Ҽ|ȵ-oOɛ/f92ʺgBuG9+;o_ߜA kkkooo1E[1eEz]yt'J6NV3_T{vdSQ.vR!.=x;pq9Eeu(Lۛ`B.[iѢrbN 3®'ʵ]dPT-jLzɧOvY%ǿa^y~a-ZC'lÉ;]ccc BYY۷oQRR"G^ '5;(³׬4 iBNQ_-Bx=6k^&W36NTdtl\GE~vqq&BAeѳ+C%Z>wKT= -fͫ 3n>'O]5#}ֺb<{ ЫWM6Z[[.;J].[NSGDE;1DTm9~u;]瞩ϫ!~Fn[{~p L%Q Q}۸GKyw}gȺcO ^g}bePx&,`mAmmEpRL&BArM<O 7jMf4JMs-}J]& 3|"=CVųkQ96#eeeuzYYY# &khhN^q(Lm^;Vd4u. f<3kwz$xm],*[?Tdr@D3u&UR* r Z*zf5>O]E FԞN$Mv7eg yxOYq+YYQA咊rm'M HYYYY{ihi(w~%5J&qU %ƿxyy9R%%% `V4fww0H% Ï\75+ Z; <]J߃>J?7Ƈ}%Z.+Ώ:qiݱ2&.Gqyj񴵵.\Jvt}p\^C/h'~ϜQ(sU(AD?8g=.D8BP'W*3ެ7 ks)nl===淼\^6~!ϗX1rg?3e\P dkue}Ab0 )****g/ǫlߖbw<#zkڞŠX4wΛ\:v|vGFXҞ \S [6"E7Nw={(.eH{Ԇ>32bP#tuJٹRIM"" r~ l酾eddT-/71Kyy9J37DqUUs &V| 6_4gț{Õ{ /ɺzt:[nqrlafҍiɯNC>q*59ׯ_¦9U@ |5;Ϯ;#͗  9(FLnQKusHvKc#A88?V"p AriL]딱PP;ACV*ԓ޽ð4mmEj1F%MNӣ./y~%&61ܬ;lRj_9QΕ? btZcӉ&5v]`ӡ5σ\%R?R22leNԪJKKutt}$+3SEU5:6j%7'MQV: SSS'b('@ԩvdv[&v׮]+zùO>Ϟ=x>}llli\GGH,5eʔqփT1ىmo݊i;i"*))IIM9w.9Eےc()))**jii\.и1Ɲ;8%hypAD] YM!Uz%B^Zԟ' בV^-$%%ݡCK]EǧM*'"ƢN:tXFFw3335ro3&}_bRl"ۘ t4^h1ȟ[*-RdATo򱁾aȶfkL'((=i!E;t淌K@ *2@OZH|6 x]1D9W+W@A HC$?IS}?# @ 4eF÷h4۷%G-!Dj?^YYYUUU) SG.++@ F g- @wÇ,-ZBBB޼yB\@~8ܹsN{"C H  /^DFF֓}g<>>19s̙30E^9u%n2W5Tk'BU@d~U"H߹4)Ҵ䷤q{/;:;;_^mv6#-,1p0+䄷Q#':NI4s~{T|7tx1#G[y,RY4WŅu`5zꖿWZ+Ko4- #'Yk6" UܞƏ9}6^IqdvofG37[}2UtGL0 IDAT`sM.G9-'R2<#g:Щ˫Wrrr,--Ç~N]ɹrp4mmmYYGΞ'@Z P!*2@"C 6G׮][P!*2@GO<@ iPQQi^Eԩ2HCAAASUZ @ P!@"C QdB6lƖT=n SNݩ]ir ܢW\l:kqv ƻ]I)n:o%p/$y]|ՄO@Y@9յL 1=50nJqt4 yې"btEBׄ?^p4M%<]2eߒ683iBL}Zʳ|-@ZgnF.uz+Z0Y4布Mͽi)}6ȇR#(tHl,F gO051wea`M4v>]U뾢gYw@ziiyo-Tf~}ՀZjF݇|Lc5fc!7 _ώԵ\y Vr4 CMU ݡ-KaPMMǐIgKO@,DМ;V &u~hGћu E-ѷEvm)SzQG˭cJK?i\ԣOu_s.Բ:ivur+=2Y'Lv[7n񔬜W#߬ong5@Ut .Wl߷?cfs;-qM38tw)9io{::?>eGz:]gC mo] ʢijKOY~'ŗ2TQ䀛g\wGxj;i[O{ee{ISgD؜ʲĆ݃\=bC,pɁkɜ W'R#PRiD3j}oCu֐ɪ:mLN,Ħ%=;;q@g&BaE=CQCBg]t-PwJ/|>lj.grه\1^NQdY矒pb7V\>ޕ(23+ οXzcCotɺ?B~%s~{{հE襴zdjD3j2cG]555UUU ~b%6-Y؁:l6[U*4X!6G5՗MTB%Y954| /5DeAϙ*۱(ҬgdIanLڃ30]EJPK S5 <}46ucn_Ocv\I.ymYnYM̞L̼cHlE}x95 px6B Q׵5:9é2*)赔o_^,tOgXZ*E\[/4_iE\nQ9d=pB&lP}כ/V֔ª”-ַ]Mf\.@QTN&lFn37I+p^ֿgYeشee L" f7T8jX8>#!㖾zp꼗ی"G8XOC]^ uigk|:_yn{ŶZ=,\95¾!rIǼv22FnZ&,<uRM̞K+cO[CoceشVSinoA `̈{QpUBa]5w]`{6r9}/^ɱ .>{H3!)((r劥%5--M[[[YYYgϞWOO&{vUTf)"?i۬zC @ZoB|Z7P6n_H3!/T ՜fB =F@ TdMB@ HRRR MNMMMYYY@Aۜݻ  wFF*#C H3"JJ3-#C Hk*2@E@ TdM &^B7o8i-|=e2`u<1»'rS'wǭj(wG-M/j&l8;Q~i_rt_f\O/GRjt"|mdd&/܏I+I2u[U^D Wç/L ȦbIumm}$0omȕ yeey e̫KOj'Ă[j7ONl3'( Bgvb{!q2WT]ם5BDrD߃'0RSAFFA=PPߴK[tm/K~Z n GwjLAUSSEs^aRxW+x~ .X\S$q}L2/lY+K iJCf05s:"r$5&T]YsZgddl:5mFg(:DO˯kH|g/3 ΗN:Wƅd8n'׃'__ 3f9/c/raˤ> S2FQlɯE kJ:2W@f·r#Vg0|ᯅⴥO:.D}<  Uw, HP](+υ(q,(cy=*k -wX"`|- 3u-UefO&RYPUxY=LfIW&1#Lgu{#t}Sm2%OZl=j5aF o::~k(C!SE7r8P4H{ô ^(&-\T2X_UX8?OFiz<@2\IfiJ @PYNm2}m@ TpU7 RbHJqAHLL]Cƍ&&&ҼGE5Dʽ6>%S$r JKs(KSD9`We\~_xS\Sh~kG2χ6e"Qy%И='./Pg|تx}fR(䕽$?{|fP7e&A ]]P)ՊԏJyXT*BЙ]!Y7toe\nٷ:jҌ`40N2)tТ=`;-N+nƢ."?W eQ&*A)mvLփE^XSuY״ wSr n]tOG. S"{l.-Vϒ[4f͘SᄀNī'}X0q@BN[a+;O+%?Swh3e\$fXMF.[R S6;fQ.K?oqt̊fKd!(SYIZo~S@rEy|rq\"~\Q]3XdSpraUUarӜNNdb1FȱO!c;Pne5laVLp^Ƈ+"=ZLs|~Em,-C wOyyO;<ȣ(r,#+kӕm|]wYzj˫HAn/;4KE׮`Fgtݵ h~SYG[w[3O)CgY̎tz\gsp짅)>Qqۭ$yJ]R͍Tuzeϼ}x%zupY*Ͱm>EL5Rb_2yxgYi @gXUʲhj}IT;: 2al8"b'"5ᕅn7'Ll@ ?I% OYvqZlﺿq@ZcBfVwWm:j4X4"#}$iB a @ @ M8raa!t 12@E@ Td@E@ iۊL¦rwYtw8H~fٿВ?muTjEt6Uh9Տwhk66JJp97}G/'0>ݎ2a`8 kSxFgxδ<}T%K.HԵLS{YOKKuH*E59拄 W8Ns8氉p8KF㳬683=Lʎb~=Ąݶ̱{2ZS:2>'R+$jɧnF.upHxWˤTs9fPjq";].u Aa F=n\xS4v>]UUT)6nΊBPXOKK{k?nݵՌYilj/N0T:i2~m̢ub3l|$.Y_ǘK|:dНi N=_PPg,ҞL-{}?CfW^''#㐕_Z֍p<%+75f..%3'wTG3'{E*"Z3^Wr*-U~SZ6ۆV|o̓/Xu" gmhʒ>foQV~Ni2{gVd@ݭo͢K;]P˪vsek|?t޴r[dO\m]olmH%[tCp. t0ܿXCtfO/ ђ\&m2\ioa8AKm&ZVOk/1RǧvSq otɺ?B~%s~{{հE襴@Ig1chlUNdiTP/CUJcsQqq1Q1@( ݚέ]'pa(畿I;']J+{2Ky7Hfal ]D-fe=%KRwcW=ܒ{t) 40%]G]myX7&vQM4fj5~/v:ne_55N^{%_e|m]p41zVא,M_ܥə O{YfH"=j^"{$.8":(`(bovx1eb#-J>g0}&s;47a\džG޴xնݷVUoj2ŬO pee [ ݜZ7BPV [uh0F]'Ql\ZL4e".(5l Ox@0 f7TaP וKȯOXrxVdTbw,c= .w=V:z-H\7_g֥afne1 :hipƆL{sHe'ctBrrkUӇjiT@ԙu}KhpJ7aؙJMlɽ<̤}{ayMjc/(ubmq{y/kl>a;g\8'l(e/ݨno6gFL]OaR,i8ʡlz45 fĵTT r.adM+Zcu҄wlSUQ;+s3N~9p*?]N$(nрQOE7惡}?į%[$"I*񟮧¤Й݇^lE8k̕,U}ub?闃=(u_35&,= A 22 Aj?]:k{YU}}Q*^bPY; =fJ/*Jac|TN;w'N K5Ff(t,NIW$ˁ+2*+U/,h.M}iƆ0NګY2./)V_y45#F lK>x?<,8Ak߄ ˰VfܾQkǁ-͠nL (q׏JyXT*BЙ].փ+ΪNhQaeRBm,ٺ gr {w^[W,݌E]TE~*ˢH VA 2LYl뵳Fg,šj^R5-ԼG[ 2q[%y\ȸm8 Tq+G(3{_r0pӥY^ +a88_KMKغIF8!jrJϥi/;CCB "Jjo˸XUI.,'ȋ˖ª”s3Yo Onj]a6Y6wrJTVrR IDAT{uT=4l%dZkz\X9-umds{OEb%!ǒWd2J?xi:m˔| e|bz\*Jʭ6l;q@gVSʫ|AǑ=G,rK2j ju3Ȋt%n[+yMJ|]g֭*F#zmA!gЭef l/2"핕x3~rnk=e,ٱN]oP͊zʜ>-㹰SWQP4\^1\J3kfѻvȠ"e+X7yO=\KEj,nt'=mUu]{^_R)nW/:(7'ޙ#yM4'?7Үom=Wt}lvwǣzs1?zZv( {OqV+1i,uѸ-3s.{t)q_lyO֍Ʒڜي{T<̈V[}NJyݶ#E 1kG0FEݑxL`۽'wVg &A2f+[ 05RSUЭOIAR,bWOKC]b rʍٳ?2:=d+9Fu ohOc 5 #B/l6[EUk?˃Z3 Vٜ I=TuH |e98mPљsw*ϵE6Fw2oϑ3r$_<[g6v;CsM%o_w|ʫgM`7*}ɔ!<6aڇ}Nn<9~KoNZvAfʇ~_0d0Ecb@ڙ׻퓝⟐lÁ.w-hKVӓ_j̀@Z-+kVǽ7qZCW^@Jf%w,Z-hyo©XF)r3Bnt&Ȩ`l{_sz輲zl6 s3MG:Jx[lP4: 1N_q 7>=׌I㗿hgPz UK-W ӵsWv R9pVD)yb׵/3)/[M+CqhvJnr4TQAJAA^4i4zJ" cn=8AF\ITT0pPl5|ާ^h-Ւ\{w=UUНIЙk=(B8NFE׫}%h\W)j"Z>m€F|!M*,K$U D:>@\5bj]]* LOZHeҙofˉ?^|Z.(\P uE%7+XĪc~YڧTQ=xd*^v W|hrKw/!1c+:^d~ލs S_m;Ay+L}v5@˩Vbj {j=& ͵ ?빉f((z (rCqwKq@tQl\:Yů]JtC'i49 3Uns뜍K_W][ 1{=sݏE71 4n!bFm̤]9dttVk_x.)q9/OzOР3 V6 >.xwqmjs HkUkۂqie\[i|rym@1[5HMM{ǾSŝ-A.>qƹT;z;|l2wǍU}Ν^?D_KCIV^׶H;{g\I HD **('X r*{E=Eņ;H~渐?Nɬdy7O~=M^R\j(!iHױq?);kQж0k"`UW@;qDdsL`h@0G Dd "2ef?w {g,Fmem;}S\G$ ])"7c'RGM?p61L7 Qf2rڿ|TYuT]u`żxh+W#o0'iw #ez:D,ZT_]tj˻p9+C\.˭*J^?dnYUKUVɘ;YU?m2<'IGTLÅ'[O+lHe엧eu|0'-,AkIs4.,ٜ&M(x.jڈ`/0TJl2}_EgB\VyI$A嬦aͺb[)joSϟDYOf";̸>$ontogtґpGo9m'g]&"{9J*5%{ttd/tHR7o$9K%Ewͥh /1=3qFYYM屴]5}2FCʓ5m8{?c~h?yQULGL}\}Uͨ>磳ty}o},};3ztUCd7T=XVGҏr}W| 2#d,|PW1>a \Tl]aT9' ]ejpOY }S\ c|]ai5"V>j4R8ke + !ĮOQux$6yx}I {5TV (,{"-cщ|~oiϸ^;}u0C "NJ 'DpX,/m~&6?f3O]5e3B(?aI{C{F:nB1BpO+s łv]PU6vBM9"QNs;7ȶ7"]epzv}=~:Y SmAHnShZCn^"G*V~-<o[a]ԕŵO8MNOc%g&hu gKmӑi])g4:f9EFgmwdG𸔵;CPZQ޳ Ӛ,KJ !Ėش^ʓ7zZdT8l}i Bn}bF ya0/Own~o7˪}rrYU{bqw}C;}`$/'嘿=trNIf:ZSBy-f.ȫjh _:S4D}W;R !OC2ЅrD?6m`0F5G=H!6">+|6=߬H'K6J 4BOk;Iӗ Ftտf5Y+'+++>e !JH޽0'ł ?lϞ=%ə_VV<9ryy9 d0G "Dd"rv;|7N[k"rCkW랺ʪ#&ߨ뎞v=ҚIo93rWWw7]7T_d8ⲢָRS& Fϝ6ZKMYS jLD4aVW_ ^o!iTmQʲ$Xp<}d-#Zs`,,0r @ו}kg\7=TxIF׳t/&. }xkiۻLD>YyF.%H>%S92U}4]uM~w>޳|p/EQ)J_@qY!^6ZjjZ6^!_ɹjx_5e%iS3ZF)6̱vQnٌZ|jN?vj?RG`7r Qݢ  7Eҟ5H&5fe"mۢ>唊9'CVKZ~nO%"Jj\"f:7q/o܆/9*[Aݻ;m;8o執<'99*Odl¬w^3 #a o Rw9Q W?uo;%IJd?йzM o(9ײ{tpq-gj ,mx&-RmDY*Iv/Ҧ#iߞ}VBhCLzȑzt2sdgz^NY,,'=J^]$ZCuV{s#^\> #gE'#aü TXep#W}za1yl5%^xŕ]&";Szֻ=3l&nTؔYV_y@w]{TJm+|y$ 4g2n׵,Q%;mm|*b1>dZk!J^t8BWCN+`է #a!}Ro`T..:Z].oc2At?,T39{i>~Ò˷,U]&"iZ>2#ҍe+& U$)L5)mjfM玟36߯V~=qS?Wߦ sa/" ܁l{TzaFo^6q4)#[c0'NzS&bB,sfIiYqaiq 's{jg]B,rtn o&7=FFs4uIG9χvCK{=e5]7"k"o~lUGԱ8E_,vlk!T.~!;ԙa愔"%%bKXlffNMTA80o:)YiBMї}˄0O*n>5nK Qek䨵.Gy?|DљMZ*:FG 㪽̣ѽ #FK{jN.뮦oܜahĝv 3Ҳn_Wq;My{wZJs2SS6mEl@y q˨)79&(mP3sz8#!wD5 IE5jmkb]ZZ\U=bX'41BC]&"گt*Gs%*K ۆ9rUNC2D,Ս ywpD~|(`إ B^/^C!cn!eIa9&U!T<+)tB쪼gQ 44KǦ*-e3s>=G?ϳUnSSS3Dɸu/mj"Gd KPf1}(5/ 0XY.Xi+YVx%:OWVw.5jaڲg{h!V3*Qp8%b}8U5ӒFjYlG}6!#G4IDAT; ߪ&ɏg${FI$<~\.YWӑ\Xٮ+q6O/~wNu_jmL_:-9RXpY 9\n5㤍 9f#fh uDFxAj0_^bl6>>JY^߾s,4y#yå x7JydסCͦ\.yVC]:OG$vg?q󨬎i8MuT Nw˶6qVyBs!oƇNڽbČ6!~cyڮPPXwĪ%3Yn:a/*"۝pF;O]ȹ}.`r8U_#li^1x^C.)L\g?YkJ(WH4G_EdC'l\x+yOrC'?Q!QBzƞ]9eLO2:nǎjiJBJ3Ǎw ɫlRxcdƖyL]0' K|~ږ+.lvODw@{FngYV-@D` " r92@DDd Ed:. oCghaGS ;'E=f뮩m޶?F,2Ԍoz4]knPjԜ@ 0p5.=ԴzfkΏZ1yrVAfrVM(++u]ZȖ׼ȢG̽:k/ꜰ ̃j岯x`7릇/)GK\a7NOCUQElw5 ׎0SRRg:Bj@ z^Z{vlx;!ĩ_u97IqtSVӱPrӷ{75^{+^cF[мB.jLBwٯ o Zi>Kݐ>޾ˁ2Dmw 0TV4 r-4"}_ff?}ٲ3 y tt>ߵ"uma^.'$ʚz*lXJ̰ JLD~ܐd,6I?҆~zm0yW֙>XOz};bW*r9StBŌ3 /R2 eiwz'yN~׽|c')NBJ]4)m c-QPPhIYA߮%tzqKtxxϽVT5,-ȟqnhf:oj<';w-vכ D>UCߥ(i-ՖδVRsx! Ɂa*bʔ.1;FD5鿳 6B՞7DS9Çv1 8ͷ JJqqY jbmҎzNtI <Kܒ'}z%`BBrBjk՟S3ʤQڳ)i7f~Qs&B(h=:ok-[W;ml3 =_t1c2[rcMOm~-8']Z]1/[eTݍEXc-";>U}u|41_Iո #5ߪi5Es~w3Ld>d D.Pw+ȒX>0~F R7׹w_Sc2mKx/ܝYP{ww@ {'yNcT/s֎t(5rZvLrxr?o?=55nKՕM9mnkUFlS",ӖEi/!m4ih"*Zs7S-C1ΫgƬaZ'$*QSor|5Es f4)mխ#%sds@.zWk]]:sk%@kDd "2@DG`h@0G Dd "2@DS"2ķ3:Y Vd0V>U6]$Tv5{)$e&̾]ӱWZ2ZE}m#\۠+|Ue82jc훷st$hh;ޔln^ws,ߡSgZT!6!$b.}rc+e/AO+G_Vʻ/N 7̉(ᩯַ:U>5Dz%PUÕ$ZhHyrFLbssφq؉ v+KL |QVx@A%ZvC#euq$([G^zŗ*>2xAfV>8` ' ]<&aèhJA2,K`ssoΞ=wޔ09$ͱ_҆ um%̟zjS\.w,52*;ay6厖#^+cr6%ez T=Lx!P$l)Ռ*1B%:tsni B^y[8D%\.m:X 'W<֗ߢ es\mNtew8^ZRAˁjzpX>vy}ORRRx'&&$5%%%111gϞhnn.Yg'z1M`e#ː,hyݕ,K+B+;r0mٳ=SBOS(8dz> iI#,z[(j+}dݏλۢ&]o֋bsVHD5ߺ@Y4ּi:2Y}7|)BD MG3RfXKr̺M]VSh,AlוOQ ;VܱMb2a2\6iw-9RXpY 9\.GcqFAZ3B3ֆ:"m:B/cXl6p8%n׷K# <,}z-iD$%BYҏ ~M RoHneq O1sSe١CCpA'ӭU sY(jKDWݙOƇ<*cq>=mSl4*'C.ݲMbܳB`xvlk>1a~_4DF?T7VA(C`XON +4=d1ḻ׾!fp1k >094CCg}!d&5%}`$/"2U OԡHrj~{.'G!zCffi(zr!y= Ycψ/ڃ9eLO2:nǎjiJB "r @Զ[b{ ~4 cyAwP tؔ=)`0Yuw֡ۇK/~vta{'W Ǟw-*aO0n-W]hN#yDDI&6Ū`(Nׯ_4;7oFY[[:z;wg?~ܹsB222OHJejSٚaZ=|A`^ңKq?#UנYHQxF޽{ּ?nOlk|vH˻g >;p>YoTz6tg=S=Eu)42qS/TG'B7ݻűCJtkkkți"MX|b/B3B>Y]J@Hm1~a[_1w3*&;afrj2Id>JF 񴰲cEU!.J),O/w{g5Fd,KwwNyСC˯/ˌ=q:6V 7O-V8p"y҈ `ߦlm`<ε>!ǖ3Y)CO}]YYsWuX"K9N mA}meǟ+}G{ϔb~ 3U_'m?f)ydESf#.X$Bϧv<(3ICW8}잼'(٦BAD^!O/E7_x1C~],Vó^^ۿ@ŽTrzǣwxUŕYEum'w-ˮm%ظnp H.pKۿ +Y DW{, ܩ"LhQ ~?Й+Z(z<)l. tc4.!$)T[R\VŐiLtn=/` /gu`!m.QPZ=;lşCW 3/VaբQ~kjJR %!FIJoQ*Xj,MT L=K`Bf$E}d[/M"q=Z'Fc?Z>E\` }93b}5?lB:DM->~ ,VHj|;2䧹j4O7a |AuccuZJBMYCOF1u"N(%3*YRX[rqh?Ryí,~l$EsD"U7v^0Gn66>!4OБl.4b^z_[^cWҋ*\n}uKd18A Iwmoq1e\8P:b!g"/ ?$Ũ sՒZ$tBc?3ʩZhguhR"hd(醎#: O8%o+\#-'ʩ8iF-%ɩ oОVvq&l ;P_YK*-Fş vFiU<<}zKo?o*%7@o]Ñ U⟟T,EX2d/AB?20*V>~9IkP7 U:m|l~W0JR,_c3dťd5'i% A,BOlekB>V/~~RA֬YXpڶѨ.6f`3_0'c(@01)%//{.˘[\0^D'ʹ†NcgdC;o5<~*MᮯqQ%Jأ^ Ƹx`:Y#)H<]_D, TL"Ÿ 0}W:&E177gAD[AWIyُϗ-+ qya3 <R5+Rxug8ʞ3YF6ޒ6F : ]$:ȹ_ٟq>(x|Cv;upAf<>[jҸ5 5j 'L ux6|eq5l\&]L#xmtluwr.0L^茂J5437aЧ~ꨋKGwA*^=ZfҸXh2 W䮄x H=yӿF ,Cqi5|꣓ tk4#ӂBT衳i9ґH*Q>%e5w[Qe_F p_[D? ?~~ȗ^6ǃAtO?v¸}9;l:rەC,D\ F_sbqL@ m' CA OAPo<:Ł3g%C)#nnn->Ah>rJt`㉰~ۢYLRRRv AQ|}W],NW[t×=܇Ea^6l5OsxZrh _}U.u7>ҕ1X6 ^vVxrLƭ IW`770mb+ngx[gFWˮ8{Ӗ yJ xHi9Bf1ܐ͝ ww=~qu [iu5! KTU^ oDXK7֤T\+Yρp׍^`ב\Tay|PYxץƿb p .ƪfpCߤ$p)_F]{E*ϠK HMRO(f5HFڦ8w#/D/_HU` bb$%H 4 E!)\aya*?9Ap==s~~~=1|SsQc11a n$ؘƖO0Yߌ^bTcW06s(*Ef`aЗmԗ{zuE8M2TϰD߸3ԕun+*8!6>N+uݏu7a_c ;c厸(Xw٬-&IIIƆSŕc|CEecϟ)oE$bc8NJc VXTOBO{IJW#:[#*6Vc,HGiphWrMxٔ`weLl|gkEo:E[s7.ޗbt*D3@ygNQ.=s@ Cu֟>z :8H*Ma9^wAwi3  iu;%89s"tT^cs_̝w tt?2pZ-S-偲0H5-u>`$[>Q-lboOPt+_rl.b^Y{bQvD Q7 G@@ OvbUSXnȻ8*~TCdg"z!&a/g@ ೸X3+ZRy:S㯊QmW>[Qux ջa,u׳a9v\1m5>ko@`v_a7roGe5Ie ~?t{57ΣZRߎ쀡G.DOZRLJ&1a ro?BT]V>,q)0^l>HO˫QQxv|:G2`l")) ~f8H::]MYW|J?`bj~tzy">10>k;CQ]^H\^߇I>jG4_/#go2v|!_y 3d?7f=;`$+oovǮil;bQ X}'V>LNEGo5Mo<hxvv-Lu|A!KDY0-IóY}"qVAqxwj5)3@Gu-$bПEuzwbT'x"FZ:gՙ~.kLwlpwv0\(ds}[ڼTŚyyظD%w~8 ׏K6xrJ Jup_m/Fs+`:3|y+7Kd0FR|\كy_$*I3o_XRBe cE7^0|N#f6ؖ+Vamķg*fE:ّ*6.9x]Uhl Ψ@M| W: f4a(--Պfg$6M 21 `O.00B)ljYsb`S1'D@ԼP\-&9'cE@(Uq֢^X"tO"m}k6x|^|e  @^\"ymϤ7&h%`1XB;njUp^.+!>#l5W(JxQU[$ 9ŦIN`R#Mcݦ! Wհ<tD $ܭ}g玔4L0M?+6E]$Dꄴ-4Oouzn޼W^yE%t66;wзoFY޹K'TOa¥k<׃zW:::x_X ?AD3q]5 EڊpUӇ ?AD[EEE-{A cA  ?AA OAP' AT *A~  ?AA h_-THh%7',~^dKN-Ɋdu=بY]`ѡ mK/k8E7mum2$̳/kmҶ DhohE˼ E7rEߝ{Fwʤި. Q j ^쇩KQΜ}' c.x|i.pAoAhjI!pzl2-c'-_VVڼjkӇ؜se]07 }nbkI0i FGAP_3L^콃 Kak&86s(kl]A#_NzOZꩰמ.μXYYY5Rv#v؛ ,1v"@JUkQHK# @mToKCG`T>@AU8W"wwX N>8+釠N(Bativ2n^X{nEKnYI>[2꾻2}4ty- ^2G˸MIз *CIy%` *ۣ"oں]ux0 F pT:@TǤ)u =HƯ֌K nWz4%ソ{f",n0/r.]oX@b;Խ"R@'XbeFΎ8uNdDcϷcvJmUk6vnB Ϥ^#KuϠפO}qqw'~ƾ ^̠R !trH\-S]\/jTۗmڋ|s73=~eE=sbV7m%zMQd4鹾s)`lH1k+x&1G+q{>X/q\UǃRT;z\z?Ś&}tY41pQmUyV :&<+++111ّOؑơg ,A{? <ݧʦ;v #F@QQ'[W^jʢEK A *AT *5C<d!DwKE2^tR Ff.,q~+7QBZhDGAWOU*hLLO^]@!fRL\֮L?Q02֬\˫C1gBm'ș&t<O۪G219E!x/K0/#-bp޸mۧ4f ;ps FtWG>IJŻ9/Rmo[^`OQ\Y^*Cdz\{3bS_+U >PÔhYaݼ{ 0*,S^-aMc]3 2ncdS_n>d)S&3i) ;;;&4ÔV{RGPV&U72ScO|:mQ{e1-D33>G Z0};3H GoF2狷fV/eVu3ܙ0 r[?}F1(\1ewOVk?`Sk50VVVV{Tq89j4qTe)w`WXۡ0nw`/VlG^aw+~>U<ݔ^YlAv<s-`禋 VGG# Kq gnBLk3Q97弾H>){[KU}&9$hQ&hJL4S%V䌫lT#eŧ8W1*Unr,6a

l1X]Q;>t~_.)ka Q4R_.2nlb3a Bw:`{Ws>#sk_7ͅEۂcUo =8|U ˏ朓(킉as;[sNoIsWexC"Df'H*5ѩ_>N$) TV&n?¶_i9XV/U䗩>O!2l==c'pf_l*?ls5A"a11驘n9brX h.xvXⷥ!v{ȈYn{* V荋ZmqWc/t`x/<߰hk*DV0b~4 :!m7 КEti꨹eSahP'B}D#i-z3{C#*T@{.\F'¯n6%6Z /#2˅UJ{t{6`tWV"1*%{t$.@Lqp4`TwB 89LǬ@R_0X|S{ONpEGJ{"HiW$Ԯ8puN)>u]UmeooH?Sli2?eU<9PAW …(" Շ2 plZށe=J -DZz"at+Uo#JԵWȜZ_U=ަ>S%,Vesubp\l9urA(Fks6FMp"tB UؘyNs3)po n {ULlp=2uU&2Ǖ>S'6V.bp`Grh(e }vHZl&&c'pWo: 9;oԹ 8=~کmC{"s\i 3ujlc"טZ*A4P*Qs m2Xt7&4挓MW%l^86s(kl]AmO-++9"c]gI)CMLM?QHK#A Zynt@(:Y;ni{n0:YϾxIf!&nZʀsWCaKQ](~)&XBr?ӛr@9hD)DX6@q2ۀv50vYVaa_} tx ֙Sr@4ÁnC;QBq 0um;eb%J/00B)lj5[NH8x b$R(M0^rGԌXkEb [E0$?tu u}kF2>CqpqBΣ e} <+++111ّOؑơg)Fߏ&!bW'mu; @aBycAxOM;vF"N^ kkkYՔE!77e"<:ee;R(A5PAPo}rFmDg;`ܥϢ6uW^C d6[aQDvv623va+H^$Y|6w^r"{KY[ tDUY^eDq#|"qYaʂ êSR&Hܫ$/S-t _ ;?(/P,yQ(g͑3 6D;!,)B?<Cy(ˮ3%|Oo`sPuh]MsYAp<K7C\|`d뒟t#k?姪W-O9ǟ|'*]_lW2-e^F=&ö6]y W^fEJ} Kx" ! xˤyż(gA=~gdipfJܩz!!"1rèܸ dq;폘2ZaΟ!x1VjQyQ(g͑3 VRX=`|.N.?!'Ȗ xxѬ}2a A耱] X;#?E(g3MsF"m SыYwڶ(gm7gDDZa-> f:ۺm KrFoH  ]rqoAAtkF k7rd9 Sgpm,.LJmq*eW\ caէŰ(PC=݆8!w곗cOL9N?hK r@9 U%+wDUaV$V)~U`1H]'w_Zm?4 BIhb A"mm. F9nAr@'H  ]Ki:  2H$H$d)=/;o}Bg &+/UBcێID}్#Y,Zn?_D+* 8NvOP$.?{4\g$w@N9gkOGv.̀dx ﯱjS-%y |#-C ]QPUOQ\XG{zۯ,09A2M3[5HɫaPP˶S_yQ 3;?cq`BVHBpD/JbP1b&RS1rĄ]C$ Ua`$Oq 8^XbE"-=I0ʪMt},t _ +¢P8)_gQ6o#ɔ儋3lKKH`mķDݶSaq,:UgZzaH܎,V6噟$G¿v( :>+AP0nj +FTq2nBLi|3rV{c"eS6nىyRb&ylpb]^?.#`ʶs%N1߁nLS+K vsYAp<K7C\|Z y%DݶS`x}g~.l[O4 l;F*ƃg.4 :4z'cE@(A_e#\\BOo$sk_% -:i䋫=Of/&;apȯQ{LBjslq,&SSh9 [Nar¾M|H x;s\Up^..XwkuۉD"LvrCLy!!8BP{|Q. AP' AT *A~  ?AA OAh zr  C ѵkW9jݺuO100{yw6i4OOAuG?n¼4Gh{~V":_LD۫iŒ2v*Ak!}8#A_;DR2P>hc/m{4x<M-07NԽmIRqkDC<>[_~c) ^1g2SH$2-fx|;%=>mTOp؜|z/ GOzȦ}$T v!o&cV v~ӻc1}\<}zlzUeDq#|"qك[;:+Yy..[);TXVٮ2_\[V$~Q^H$R(֘k ޚ> 7*nK H"*~0FRn.{?z0,#f"5=3-GLX@e5G1#GQDTkP'@fP+:arQu1ץnx(0{*Q%@Ŏe 5ulx "EAC=5h*@f'//F={[XjbMLq돬a1F1TS%ilg!HX>S"*ϩ sşg zl 6O y#`n E'bT嫩>prů6u )RTEu2UrANH B HAjOA h?y۪AZ,.T Zy hDž_\B1q"e`gsA0 A.8LMI4gO{&{t$ VtpCpbW]1NΫsY0g+k ſ%~pH$6 ~edʄG#[WnQOؚ^DzN@c\z/o ɖ;0?W& oKCG`T>̫֫<"q;¢P8)_g";;[6 mҬzʄ(Bat}jGAv<s-`禋 鄘Pe 16oulYh.:< r#a`8d K浖`0}yk߁4ml :PW&,&e]mPWIҨdv+*܋,3b?(ˀHݾj gyNp§`㾓(tZ+p|T3LxNU<;}9'Q}v*D 殀u /c81:s-&z2[ǓWcw >b=eKD3닞AxGZ6ؘiX)X/l&*Af)N툙 $6[ h23u{q,!`9h#S&HL:`+NY~OGIv<_: ^12Uk[ᵆ-WA4P*3U脄 q@bG12efBl; h¯JLƇC|(..^y4 .H=H6],ptv }u?+̣G0a&5?lQa/{旛D{LZԷew*˰Of;|c~6';ۓ=߃ >>"sFu|.SJ Ѹ+A8Unc"eS.AíaJo.@hUw\i@\c+j\6X_)DX6i:q6u(DjWș28Un#gG`x :w'2ۏSŐ˲}gcwu~UD):EԮumReՍק'D@ԼP\}6vJ>:^T"yuU)w[i/1rdD}J}ZM{bϥJ*P%|GS ĩm;l쪲A?d厨-Xe D IoLrQǃRTC\ڄDžx1f6/۽`r YՈ\z?Ś&}Էeٴw-Bc]m|fƇ#74._U#O(]Vtѵϰbt}]U"6EZBܭw"n%9Hݴ%|G KC/)@}h;=cATiA6ԣ- Og/#'%.xc 룫Eo<= &$Cw%euL/7+]&cNαǽ1:| !FR-Kw1JnSy%5%tx3PUx_/6q1- k``݈]!&>2p AJz:uFpǫ_{O B?m;j5>Eh"ѬsjK KlFݛv*Rx<]5Xqy B[bXT@j^ ğMO?'*-eBx8AA9㮶İm0{gl);;ˬ`O.F*ƃg.4 :DZjEܿ?6$o/OZ*'hhmgw?"30]eC2w5oh]ca/ ;]PcUAAX7oEE!>z F A&p̋<"kUU_%x>t|?g.jt;`BG|R;=X?vX+,Nk$-[8!<۶mDGX֠\k@T,b '΂4Nq% c31y| ~rVo/9K{z@"ky$k[ &LCز%S! H../ߏbn@~{{E A<O<eX8L34!vX1jv,Vg [Z;xU <+:-5` ʵDf~8'ZΜ?aR`bQ.X >'ʪ .8p b+krԀ4 N>_\Ch߾/MQ4|6EmCٮFCϬ.d QQn%c>8ĉN+zb19oooc־pT9oj "uň?1N7c tjU 2|Xր^&_&֌5#*?$bԬ熁ƶџ?y\~&&kƚݛf.22G ̋5c*fT-d2e˖ L&NE7ci=!KѺ$>5oBOH5u\,gߍw\D)ؿ?:{J_\O7f8by\8q.Ic_rq=֌55SNMlB߻w/4Yw5CFWJJ(a*np/kmP}X?5?z ӄ1w,\)U`^kV5#3?TZŻ~eFnǔ6iv98+˼5/-݌ˎb䎥+#Lig̋5c*fT5gY,*d""Bcx{{?z\g|Ǐ?Ϲ~k#NTBTV~p""3'"bˬB{.Yr^- D/_o\jNb1DT(Ay(HR 1eV7[?t^Zeݚ;|L9߼iSfiم1Y1 nS^◩6l_UDĎIx/LӦM_hݹ"js %DVz.g>DDU:mڳ AֽvrXCZNǭՀ>DDթq:/_Fv]+B^!qWZ(Ӻh5- {1ϽK7d1 $]lذar;t1~Id"** ڬXg"`-[%f5"A&1mJ#"v:Fbe+Vh뮄BI`׬|}mԫWuOss78(kqq GMkW~vq~AxpI/~]Lg|h8jZ<;vRdzxA&~OdX~/v_iDĎQ ׼q5S7Z.A^X Ӣ؆K]wX%/]Ý;I8ύ`/@552~<~o;~ OSur@G԰x&ealgBwkH@~y2"2RӦM v χNg@FZ2ܸ\A˶uѥkG;rO 6Ѝ`=4ef4vY4O~id% U圅P&Z$b8ֲDeG"!& 72wŚGq?G$ĬmPoLn C.Y^z;Zc݁s*""IA@~~SVj:r\d"}/w!pbB}2c>~83T}ǏĤ nh7yy(džToIP݊Aevr}ODTTD"]{·éJɀbNCF =}/CY*b^.X%v>yŎ149K^x'/i^q!"2wsk/"?uuN̈́Kґ/€T7p~dC.-ħStCwg/g k(q7- .ήXl &OeR[ֵ3oXךii|Aߑge=2D3z,)""sODD95 Q5RpqVDT_TBTDD1ODD ~""2Mm&!$""?1ODD ~""bDD'""? w"11Ѭk^n7bQweBәňcyth4fإRi,^ج-oB ૉ'NSNh4Xx1̮?z(záRi1ЯOD C3;1ahf9^CD&?%GoGVov舎ou,qUaOn(.L?{(ѲeKQb>LGo':~?\_Z^GFFZhyUp&{bv]vP3!a! 6?QUt}zJL*+͡:OHǞ]xס̄Bax޳]=ONĻA ~?QUw7v<!ɑfM,} kNxyz!#=V :u ynjE_BQȍX8=HVީ.|..7v<֮[ Hx&M38!xAFf:6Hڶi[ⶾx ]/ ڍYE.#QQ+ fC-:b~DRZd5v q^ƥpR2d.6ƃ\E?;~"2pT ڣ522![/g?``2нLm 蕃 -rzL/#7a(n4q"ĺH-+gK?Uso$N\ns"ڶ}ʸ܁l R-{EV㼀M_#rs4'k'y1ؿl&:fRܿS=Ddri៖ z|drv e;H<^W[8D|7'r?ӧOapum`kk[[;ՙhذ!N_?{7/X+)P^Ǿl l8:-.ZEW }yEuoo ]mfQ"7= 1f'"*kIܵ.HH.]` 23pj'w@e%oie\JQCtB>E.igFq41UsCq~.lk7D=unGAuB 9,3U{O\ЏS#<|++kܼy׬S' II7Rÿ:{XfvDdbb"wl#233`ek֞0 ;&k׭FzCzϰAN>lOnٲ+'"*& =TJaѽ5z)))0 PX)0xPldegnݺ>.ௌ`\yDdra5klHRܺ ξhiiiHMM5~)999xIDĎ@Rifh4CNN^6%$$$$$cf45`d=d͚5~DkJ;ݫ>FfCI6Fx,}Oawf4312 u&VJ`M<]c2yCv:HԮx1ټǮؽ9߽#b^|Gōt]F{zG{ca,Hx"-Zdw4zɼ񃈆6lye K_R@?!!!ƢEv$Bm_M4 K?-k%$$$}7ce0V>cS'Xz^@9mNHHHx%[1GIVM f{_٘[^0Ėo_X} L3[j#!!!!!a̟?H<%$$$$$bpYBBBBO"f <%$$$$$bpYBBBBOy-v,9s F5d\C"zIZ6g0Ure=r%%JbIPC5R)Fh9eqDiBej Z #a(hm1J(aіΠL @X\,V` `Ap4))0FV)A"Q:`)Yp18ܰPB`d~9saQcU H&-b1O 6JhiQV H@"  H -& A :h| F[ Ƣ@ZEekhp$-J(VXR%@ k!05x`C "^oG߫y |b&T*&Om[ĭ*E. =\$^J#XoBJ5 ,"m>44 OH`kce 6&ZG⧍A!<|8%%X|b}#@\!@bܪ aY)^Bsc MǤmm˰uM`@(KS^d^G)R& + 0&Z4Qף J0ZTL:?hBڄюւ뺄ac "u#F A iQbR1wT5!aXn6!Y {ĨZ]c8XhjI!8q4HQ6de\9 [!u1|*6:>wF*"0X,-$td ]hрD"B 0dEU8T`"%؅Q"EŨ@sKH<#;ɚ$̣ 'Z1H}`T񼀪 H[ 9׉ƫHK``#uthE[ 1ڀX"D⒲ %T[Hc@Şǰ_oH!1X!לSe[ %6xHGXk9/^x?Z (ʤi2̋~QOh RI7K@Cc\6K#8@]TJ`O:Ab&.@5jXyLkFb@JA76BYMRD"X1(}ſiw3J E 1vٴaNJK(q<cpeA:0 5c1ں(ݤ #w'Ԯkr^NY˖o8cز 4 U?*1P-m A>m9|~+VTIg %th)AH 䅄*0Z#daAH)w j! `tYX`_` D]~AHUjgM +eAZKhu E-]~SU<a-ʘ ?fl޼6$f{ VMm$㎏JJM5DbV0' i VYbHPj+UV X)hkq-`0QhCM(,~5HE`lU+AD56=XCa[!DK8ʉ0+06!P"ʱYoo/?z<#Ns8m=z{{Yj7lN 㩧d˖͜vk,$Rխ 9s8hkkC)1R`{аJtvv[o<݉% ,yZ[ۢH0U} g4FQcdTbIsIUAC"^R R,)d &`BʀjX`-HkBE@Kho,=FS餰FGDA%&ǗBbeݨ9C|l6C ZXt)硤BXCh"%$pl݌ayW^y%-" a"](dËiK9S˟{n ,~9gV1^BBk-7:lCF)EXg߄{͹Sغu M◷pI2{l>7maYr'p&M~Og|_>| ZL} \B&~k-[׻dͶf. ?s#ZO]%=ή+=3|ݟnӣ_]Zw]}yfV*yPNSSB31B9cBsr,Y[`bK ]4_АH4\JCrL.G} %PTLQ,Ne/ge;.5jADIB 3p0P>hmAX]D l&E1Rd:m+Eݚ-MK465?@80 V E0arj/B+S[HaAz{{Y2-['? _yGeٸi#<0aO'&O=;. G8aJL[ZQI^T1qӺN371hok3,7[˟YƉǟTloK_2O>?B[[T c jc 2dWǏ_W]~p.׭ʎbp_9b,WǵE#wogiqXrbsGoB.W(You{ Q*X N9{9X'p'<ѝƲr }EcrYD{S:gj]A[P)֮ࣵbLZ%VDۀfZL،H(K P(P$먨sBjU 8@H@`$:_SP\RZ زk7Q*z8*r aB00^F1445\E1Gh5FB"l2:;;Yj%V&MȕW^3!~rߟWdq $ݾT)1LtƓT lgc4--|[oo{,\x߻{8_իٶm[оxRwOwgCIsYv%Z#x' 4 ^.]׏tqSFm6:}\m[|3Zs uq3F} wqMMMzʩ̙3u}ӧD߯j`xzW1->PeE!cdTWa"8!%J1: 0.- 45S: e0HEC6搾Ah 䕃FMJ@(Qiq,Vw=V#mLm!L4MUB9V`uԇɐ5(:V _,aZH``7nn-<)H{{HTrͼ]$u/uiӣ_`ZtPb7I=k-aCRX,s3A91Aב4LJԶ,߽;k养\ '!7v> q /I3xϻ/`G!8m }CDm{c(X([.hxٓ#]k)R"JS*w-׾I6U.tJW 7Ņ}??=ٛlw18.e;ߵWWzهfg?0 vkq S;wز={nҧZ&ϻh u1c&hʕ21?@ MUͤGi!Q<!- .>Sfbs: #@ 5Y_&i{=VcBA%tI4/X(ZQhJZ qP֠4KyDH h 8PJEܨ B T]yoX\%b,N91rT6.%XzwSX;~n&>_'!ϛ7t9K>.^N:i8c]*Bj]<+uS4;;xS~EJ\HLM`xEz=w)w̷/bHEww7_ʿpGO|>(zxNჟ](=kynlkלGv475s; 7^ʕ+ܺ-7rJΙ X  .>0jjHϑq/X@`qAI:8JaZqdC RJ<477jk1c{3gymSN>c_uwgP6-ͭ\64m7CŠ%79*?==,[?n!d6Ȧn 'F>=>i(ۋ8x(JR8)3x$F@J dBH #DCfq/BKCBmE4ߘexZ{&-EFJ ҉DԻʆ1Ԯ1 H8 -,f}}ІqgBN?~wu]7[-^qF:uw'bֶ]uc!JT*G>|GBp2 ]#ޢ}455saGrճQ.F.*3KG" kxD_*AI[,T5{Xq"3F Qg4Hڊad#2JʳVQQ`"qx>LT#oq8~'v{,)%_\cx!ӟ쨷/[j3^huDCەuf1i$~!_ӶZ~E332 D*fe=WèTx^PQ_?DJ*_h,(6&9E j)!4iCe֒e=I1䲊0p0#l=Ǭ^|8pPN0"HR My$#%CXRchyFy3ce_]])N,a +3t~ȃcBǤoF99gt;(YP+lh ʅxJc56)*0 [GPcR)QT`!R2HǂLw缑$9ow>;Ko~ T/ b{X!(Ldj%JHdAHAl-Ft&$#|߯ڎ / ^Yg D}f!JcMX~a*^9(8(z5{?i'qC'B8(Gb!ʑqW\TyMNH5SLZ_{9XnSLaڴ>L^6l L8kׂ` Ӧ੧!ܹyG9c>J9#<):){U|J#m"O}dJuXtww3sL6n& VA>x!kKu m )*%D!0&\}&&$$$9R{>8y!b4L'λs!wq"y.'T*`H+2c.v(+W<33grӦ㏧3vsx~Mϯg΂ض3f2e-[ʺus's!>t+]A>C9{L:F9⸣I;kViS/oëT1Ja@ba/]|e%$$$$;F7f%o9bJf1h ==ds9<_I9L)ٔCUBۨT+to0e>qdA4*JE9h 1`t(lXLT|h̬ŕkf604hh*G1k<3mںL,+F`E ƊPRRXI*E9U1!!!a_2*1D UY#y *eDB$x.2TR)(֊( QȸLUٸ|p8Q"8&Ds6*@-alDMq~1E:H-#+,-)ttM/q)( T_K/ Ƣɰv]'LUVɦH`N `A)OS( *pڜdO0c,H2'Gol)c"} bm/x|bZ5h &I>ʐUS83!!!!ax:JX_o(t$JFc\JJdif‚SJ \2$Y!heNb`s hZZf=;]`bIhim €VDctq]F))dl|"f QY4ko|T-V-Y*)Gv]hn͓(Upr`6zqEH@9%ԉ,]'DKk [ŗ+7Ӛ4=? X+9iw8l GR5L| A8B˴&*lMZ̘}sB m ^z>ϭ+sW*|K-}l޸7vUi<9N\{]|T$bX8!%kQ/rY֯d_!M~׿*]tu3r_nbάYly~3|N~ӫظd5]Cl&m*URJ6p g,BKr|f;K?w{c\k'U_aa;u^7m|p;w<9sA ˞p/1qwvsPX~- ?&$B0.ѐN88"DӈD +Ƃ7M6#v:O-y;x Z;< :qmY*~ Qv4g#W,O.;G>O(l:sz#yhΚOtw!g~Lņ`0mєEX~į([d[&sEw*w?_憟lz>y,gV?tt=މZlP/ ݒAwaiAM.ߌP։-T9Q4ǜz4"/( txUA&Kq<'1\`l܂@&(0[/gяJvMI 2yߴ64Sɇ @X^Z_v+x{^Cu9Mwk'?yh%(uwq/޽g VcLc` h"O稳fʖwWNjLa>~Q+ÑgŚWJj82Q uwF^EZxY`l}ݺ /9|T3/x瓐rdTnS.ZT)$=5#L*.Fe֭/r ]ݚɓ[hJkl6xè(|_CS$}2j<Qާ{H3]kO?.LqσO_`_P-  #hif/R+ VI[p& Ӳm)SNgVҥZpJ?dZJ7H|7 Svff:t) ;$ee%6 &,?[;Z#_)uoesuYFn9)m 랥_[.\qo)#e-{kHVZɣlE:͜7U,h9vk?{E?p3mk64+Vv'*Tbņbwg9O`9rgvz6T, A:6[=?BBKل":)e<{}wśi``N#0]#I5mCUm@FC58@ lGDzŶMq ??7?-&7?XB~cϏN]UPVp] E2ӽ)N-k*PXI-f^v ~?/?](+@T'GxUë $qIe[M("P[YNYRh~}+e8 Uj'q~WpB!jqS;ua?v\k#?3֭rFrPA3&l mO%w[]׳oy3PISUǸ<QE-V&z4diN׻1 ,Z,Y쵩[&Im:&RQIrTQ(5k ǩ3"l3ZDV`*XHF,$!iFQg}B9rOũ#2~:7E~\ U8|4 -"2AE]T1~~Q^6WRS[Gm$ ؖ'-kjT#!.!_뗭.aܶ}x.Z6?-jej>_۵Ys5K.ۯM1}8kSz%i=OgV} @[ǚJ,ɨ[K3$4U!3we{]ckPo?\LdkOsD;nuL-*V7r$鷨M-3 ޠb&C.Nu5$RPb Ƽ,Y?`ѳwF]u CvA&AFU:6 q.˪87L$q,]P +br}{ѵ]X E =r<+ܟ[ߡr#~͏f=To@]I0;.B"1P4qt/ZCqV7rKodڴiyͮ2ydJzFp>F^z?0F$e?s }-ۨ?Gyޛ\u3I{6ꪖs\m-eסsօ#<X8\: >z-qe9[B,sɇ09S-uQexy:z)ٸ,8|$\ottaq\1?|Г.S26Lrf;opI'^_$F)))SNgΜɘc֣c*:$YL(TTT~"$iIK#X1H4^K^W)]SB8bh.׬f. IDATy~z%E$qTe>t)%U핋& J9 Pxe)6O|C ?.Pl -|JVN&AMS1PFic&0Tk׏.^,tvZƢEZLh&2IE߾})))i[ \2BmMx, .hZ/?]Nڲ*"V I(Ax}:,)J鞗F|1gIfF&hzl*:H$J@3KKMmUS)0Ĵm2;QUQ`( e5k޻5k8֗2l|/ٰ~X]ZWP[Շ'%H"Ptx+iXCMe xKEq,VTzF 3}dxǒ.)GU< C؉TSԱr* Y \EV- 6mZCB[e"$IjAz3j>=$qD ^\!PTHF< _Gbuf rh Oز_:Aid2k <^/a:#\cOjDu3;¬XQQJDmXRGWt&(D ITA@SP\ ֡*9j_rC8I HTGHf 9AP]/ݟʩ5Gz/rYl%$S',-,㻯ײli9n2MkRTP W0#Q̤Aph p耦&Id;twM8ܟm3n4(n/Ko$XQTyz CZ٪|s?4};oȴ>x_Kn7zYW398Ԡ7~6m^.L1\c6rl\~Hq tr#dtҰb~51CAj1BA/@<钕Dj8XY$3w}RK~qtx]8 鐝[qE+CqtqsGuMxM#G!"'?prjbxlqF̲b;E؀P42:e`~{,>,H=};{&* ݌' Ͷp^}.~UEi;SYsvQog=s VύS Ld25iWnLqU@.hH,XXVEQPd!\bC5P4>/>AfL@J>)I9׉G'z еgzӧo. y0+jXGb^O0;̂Nઈd ]AD` zTԀҩ wb17 t@Tt]E@EQ@?XUUK$#L3w 3܈k1qqL8VG֛˱_D_\\Y\ȃo,5˸ Ntp%.%o. 66Eyjx[e}  -7r5 òCtKy֙<'sοċ۪hoT|_ib\!珞U?HW4a<'L[mcs7Ca9Sڧƺ;xvt_eͽidyoo6%3'AX$b6:5p.xhx< '; DqBidӽo/$ EAje'?7@v^rld]eXG$Q47 PAZZ.Q4ç.Ǐy Bdu.r8i9t?Gwp階(b!2{?)d| XQ)|3k Fx|J sKx!V(.УSŰk;Y=l{?n|7Lu˶q vLwkTLGf.bcpԕps `[_q7̳=fe['mo)'x7ϵ#26X9<5cF0ڡE?/^yxDmǻ^;>h빥IA͜qiuoJs?w\wv`xtjk*qmŵtxvQAmM`ztmĢ1H&[A8j}Q*" ֐ǧc(PlTO,%4Q5ӬzC%ytןi%P4x[PMs@S<tP,E<K(3H^Oee%(ʫXO~ DS \¶]b8FWY8+5~4OLsn=GˡLmq{;^|Σ6n(߃;5W=Jx5v_GLrOw1qfŹ|X4U_FB'\5Ssxn7,/cCƳqˍ v>yG|n; lSPSQΚVo*Eqk63~t~̢dV­럋B.µv/;rwx6>h빥^b61 \K{SqYb$BJJkRchuDu۲Db*vqlDc$ l!M EKhp\PI3A00Pu"u1?m*.1IKKrjtDFn!iա P0-0AL3j8nEK8_M#=+zA j<g7KY2*ך`=^jud迂a󁷗prsh>˴~@fۚ t8o}å.fyS9?btpwJNoEUTƝ܍wԏȱ\ɼt\^MR,k5Y8;(`o/zm#;ٚ\C嫍 zmt쎼4yWĘ =~^4WIJ7c2Mlv4cc e*#HE<A41<`q~ЫgUf ʊ2Ƕu1H$b(ŶU̘J 5+]j;h=sP /x |%A,CU\\ 844MIi\TCZ^:\%ibǫD,B 2'S|5p:Zf7J_y#4ij01|(7\>x{2ډ60f^?8p7:\!u 7\:U=}i*&ص_rQ7-|x#r}@>3K870bQ9\0n)Rv;e=v`k6۾=ީb0joz=oS9mu[ϹO>-W]LB'_{s?~7RgAtOƻ;j@çE3 ,!E]]-MJ:$ ^l ͣccB(;׳g|Z"q8>NFFX,W/4M +4*k 3F+"RgeYFY ܷ{d e+qQ5UXTCSn WBöX0 Uu([gkp"yl@;YCL?oNSeoO=z/.] kIA.#3`'bIנ22 LLŇBM-u: k,AB$RC8DjE#\H$jPd5vR GA34"QŵYS- BCG gj: 3YYk <>a:LJ8nb#X&B󒖓bTH6ℌ XGөE^A|'pynJ$WՓ1KiS2MDq8&Mm<{&?K0MGS2I4>iFL?͍p]r $MG8($8i!*ku hTU1%~HA!e4(x GXvW,Mؖ7ŴhV 2Qu%ݏNWzf{?%Iү<~mJf~Ç E1j<Ú؎֡2s;ohUU1zd9Bu= 'эQAɤK4jS!@rXi.xqAhꐙDIeZ|T,b˿{>C` J"^.L|>`.Gӥ:Bԏha^4Փ4-I$mlFo 4_EuL+ČX(8{u$ 2B!bIb!*4Ӧwgb'T*7qQB8ag@ߵ)PT S(h_LEF! x_:_{oat$můi\q҂`+~K#K IRdI$iC'ʘ{V^Mmm tڕMaaa+rvm{9;8_/|ڴM8CvRD$ڝ}(G@~~>@QV7x`ZcaJ|S{EQ||2[bsgʝ2IԤv%^ɰaG^dJKKq]0dgp%̝-/<1q\ץ!( r S_)..ۡ2~Nd"<oԷԻK0s)S_^ٻð#G|!0 ǃ(8C"=8;-Ж~"O_'ϸawh:رcy۽p?q PPpR4D%m=̌}Yzx["&I%mJfeeeD#Q{oϟaõjQ0 \7QUx<駟PVV5ogVqu7q@|W+O[;l')pqeSBlJ^B'9V\ʉ xV׏q[d"ߜ6f{= 6*"/7=zӻW_ :SU]I2j?H/2w5ҿ3ߋS.ٜƎ[>;v,߾W^|.vZr: .z[ު^gsW;vv1JAVV&in6mYmv%⭞Ϟqwj[7'f⅜u[?3`ۍM_\\K"<ƹ4MkV-SW^]q?łog;iSlRYY-҂!~'90viًҥKm Xzue~TkpQZw>|xFG'?5?'k\aL} j5≠‹/ç"yyy^^^H](~;;o\Jmonx[v.?gm9e\.b*.;o!o_S9͸T[#?q_{Ojs}$ڔjkkx<\YVVs<ϓO=nʍ2PƮ3 KW[70{ȫ+_y~U>ccwu](PbuuuB!FB04F\J_6'Ig %sfי6mVlvv͖w\~ .~JT'sw8s=BG[zL_[ţ{Df^ d&IvflHf 4uQ0LĶN!}uQumu* .C}ϷmYS{yn[=~Ui !ܦmKQQV222ᛦI<:[ks/2;r]?DF_ 9?ɕpK[&GYT_6%Ldc2kx~I2uʕ+xX(D"27}o넋r ٯ ~S.1f,5];yF {pQxG9Z_]4l7}͛eY[ͳmqZ۶&++]um鑷QX?v9uGw|=xs1piqzrB4zkXuAQU]4=hB֮%S'fF$I-uD}`0axYq"&k \CPB 6[^UUU%I$)mJf*3oEͦ&@!fά9y $IvJ9:ߵضbKzxd{b$Iv;3I$Ij7ysNI$i'$I˓L$Iz,++U$I$ilqlI$I<$I]^]_}V\A(N2uD2ddSz1m\އpa}$Ivs)'3O^^^˲p |^lxI6B+l$Iv8~T1M۶QUӴ 0<6e!:(G$ir|wx>[?ضib1/Z[oB2|>4>U8jP^O}U[Ҳ-lܶhn-#br(.9;%]$IҎH9sTH]ǃa:D sO+3 6[4(qS& ׽H8V?M㔖mYkkU!p:}^L:n.[$IR{228qxP>UU.+W`ɒ Qu0^gߑҲ(%X۱EY12}z<=Zi(dtރ[^_8aj Mrwzq^K1f9S&ꈗICzսr%*?e!jj[WfĐ~]:G?I).I*,\0O>~h4xj4M4MqqO3N&=?1u$ß 0Ç7́->\;QipQ㼅'mtu1OP3 -WS_^8ajkMտ#Xpz㬖bxh(=Em:&?N7QǃǜN00ySyIg_pҾ9nO_p׽Igϒ%In/ D adff(*x@ AS5 u{yi=v4iZw-(ҲxZ}>t25K5Yǖ:<ꁛ8m~86_!Xl9޸Ӯܟ06sdޞ3q~K1ܽ%*ïz&V3wʈk *Ѥۿ Nt4/c5λċyg ;L&?vI$5%QG;Nt),boȢg|,Zp-HUUʡk ,g]ZfK? 7}[VZN(-Daa֬^c;XǶz{d-sˎ vraї}K<3gEՋ[g;ZW?UH<_xAit?x<{/#{Ls랂NΈn~` ۺqieo?乤 yh\W<.!ݗe/1u/E2_LCk2>3z1|R3}~s;?~qI{SJJJԩS)--m9w\֯_ȑ#ӧ|M ֱ~!b6D"A"NEcx)+[GfF#GK$ItRf͚EAA_}RRRzݷ%?P]QLkSa_U$ݒ$IR6׷ddfʢWtT@MM-~c=}B]$ҥ?)*g|!;3~I$IJ= 6.B A"sa`?iv|>?ejC@(-3$IԓYQX$I$]Y$I]Lf$I.ӌ?G$Ine&I$d2$Ivywu7l3 !k(Z¦p]*/P$I:Hibdyëy 4 04!PPqc6$Iz2vXRq5 BB PDSIΦC$iԮkfDYIṈ~&#Q<)54n|l+N:tO 0kXtRZGġdmwr(ͣa}Ɯ*O$Ix'3Qep'8p0Eђǒ{w|YUUUOW<ʵ˸w)Ni.VrgrZ;kߛgsٴWYY^Wiwy$I料Kj|G.8対!_@WVݸ'_qiսp~MO~y;U󁫞Wu:؇ISg5.潩W3d`:l5?''殷4_dntN>Y`9Ta":wPf-tLMu8}^2g緿eBEe]yXfUU~f'_9+eo[5#8ZGW;nIM/ q+=xlHX0k!޸\VJC;H$IkeزFFqh}W?+ce((;9ߥSqeJˮՕ? cŸ{Jk|iy㛟H:+gJɨ]in=oe}uFθjnfVv&I$mֆMovqԏ1Nv~Cp Z7^ lE#]O8V6ۻ(ʿ wM%*F "  RBP䵡b*%"JQJQDRTP }?B6&YHNӞ3;͔bP4|4tMŒ8xfzct5hI;bQbF1 .|U2FlӉylӗ}Uڈ#">>6رcHJJBϞ=p*/(7'`X*_WEw2Q "\ӱc"**6<<<1113+OF%,(D)/9Evآ HB% KT'gD5&T@Фu44 ʞ[sIDDDҜ≯I}U IDD0#""sx_ބDDD7ZzWgFDD0#""sj{ZU%W}GZA(5LpA* qqDDD%*woFQ"P%2QF0XE䚭H7)@n3*J*jhhh5*D<Ź|.[ݦߜ>E{C#RuuG$N6oc1?97CIzhC- joPn<tPJ| `W^еu=h5x\2X-$M›[N;E4y1>jruЩe}hUj4k钪-Nu/B|=z}7moM-Qmt%'%_#+ u?v Iwp^v)"D;w"h49r 2#S?9c|< .JhKŗ +vj9F mTQ\_z,]~2zL[B1IMF/trq0.Uc` yf\< })Py>Z"rsM8w:uSWM}#*-:>ԸnE^-*_ =hTif=SAHx'j"e S=MUi؛RXf0?۞eWYCf㞈pSذ-^\ߩ{w:L9tJ&wտJ޺:;~ [Eg{UP[A7Gv-ۀ#C;OIO?K^Xj*lvt) sO9@ J(jb $\JE~J=i~bgߩqk~󺷀JB *_CC]Jz1L8L5K B^e*~9=L;o%O'`vX޲C8cbȑ``tG_uj>I -tv޺< q0 P(bƳsa\CfEg!<W1!2mI.5_y|]5E'cW%WVWOZ*mIWD l֬gNE (_BNy*tG ( (`6[`}Eu}×M5-|d&,l^hClpmAƩv-VauYMyi ! )FK镰Z)X±<#jj 16Uu4%[H-2Q䚭R ,P(HɄuT?1Ci[J\(4OUy. 6AXU$nz!k*m=z]jS_nH1_{\mK"U9sF᜕Z0$]F75jQ*ъ ] 0MU*<Α8>Gƽ& tVE!}v6*s~IB>6"mp6JUeR ŒH6G7FH|9?"xJ {2%+w.+wVK6-c[_~9j7_E܂~K?燣%{\u,^.3/JhFnfX*O Z@;P;n"|}(ϊ~ƨ>ol*Gd1ϦMx5/!q`4 {c0LÕraB Xz?.3$̲۫J',D)M~K.ٝT +P<  ÜΒuI#o3 ?hbfFm3XaKî@UbFCKEj\eKWD **磄 $h *Bh  @hUZᦂj ҇ABAnpV|:SV?o>;UjثQK."nj۸{PBÎ#r& nzav+5 IDAT쪒j;Шa\*֠NG5nh-ΗKj]UC> &C٦SX>:X4̲j cW"[ ) ljlw<[2zZƕ_{Etpِ>CR"J& V4m膶=FrJH 7.DE%|wy/'""r93ogɈfw!R U!9gBO@4(UF{CoH/I1jὌr:̲sM` '[upɊoePX85 TJޭn,,9%^Jey ]@JY9 "N FZ,Z@*%̈r:~ʸDDD0#""sx13S DDD5{fDD${ 3""=ɞӗ?T-Y!okQ1[fLPFB7;[] "۝{fWdd0 PFf /,@FV if#X 8[PcI7N'̚RZ#NٿgqLdXɄF#Λ,H-8o(B"`"BȓkN+/6 !uѥt$,WY>@oRG FcojDts:N_wR8y5.O؛ 0[X0Y,Њ͘ ǽ?c\r 䌃*j]":Kī8bFMEDl5 b^kij(JP ]cEj=Z힚.8Wt0"2, Kl.Nڠ^H4l6weVhԸ9Q'(6DѾIp7sǫ_b/_1J*XW ;7ݗ x A#իع)8ƜPpGXh&{f٩,njN;"Zƽjt_Hlnw#奁Y-VeCLɅ)}j RtmC_ϟ򪻷2gb$< CB<؟Vôs1l/C3hLW.P ,DK=mϝSBK.qGA68d*&ߜÌK=>膸otmv5VB$&fPhZBѰ㪢*#hk3[ݎ!önG)>> n ;ǣ֤G1M} @*qilލrVzUGExfރ%zAHt7l|n_NC: 0kO|m9Qحax,oU CvY_bbbX;v IIIٳ']OxVvEAz ,<)Y&7^*I^:|C/jtph K't5DTMرcBCCeϙ ?#h&utD+ PˆmCѭwZ"s~1"{t:AQ.nf"7_l#kaaB9F3L/!08]zG?-tl|^1F7Ntq:5/R""=Ìd93wn ""̈HfDD${7$LX,Q\fSsp&-Ջ%""a{BHtbeIdRKDL!Zqj.Φ8V[w‹vṵ+F9\~a^AR&w_eQmU˫ }?>~# UioykLdKd6#Ђ5{.ju|LE ÚpA+Krg\|-ьiޚ7Eh]OAtIש V7CMxpx/cߌ1ygK!-\f'SrBo<<.;wWA厈/bkˎ( [\4Bׇĝ* Zɩgg[0?( 0Wo[}y/z&Ovh J&aIX^:OlĈxۿ-[K.X~\(h2^@VsPzW0Etx(cmcAl(SzY<Oco!O&I|*S|ϴꪨuwsf􏯋n~٫Ӭ$MVQ/(V'Zƭh6Ry`tg N\x4>Âb;Bcc~7;9bk+Y-bZfŔ.*T~v,$>>^\te˖2y@]f6f剢(Y龎W^c{}yb0QD DQżkEϽb*Z->Zqբv52܂t!⣯=*t{]]j^皋?Pejsh%@)e3tHmmuw.0C\ßvX.1WÑ_ N^J1`)cH,WG5굶Q }aѭQ0dƩz=SRM=%r>~SOsCxsuPLߕQ}=̟x V {%Zu*d фIsSB,zGA >~6Q_n#ņg,c+Ɖu}3Hge}Xbg_,KM1+N{- ɏ~nJ۰/k:׋ xT4m)Oئ b:QPu__d?KֵVlt(Շ;Į-BE{j3*Z/(׼*k"j1Y;Wf_xZ:Y%m0#">>pǎCRRzf͚ KyZu]tbx+Q-'BZѭ̙3رcBCCefyhPG{p7%lRjdAFT8b/7 ~v7>:rG`E⅑QPsNDDD7Z ҃J<3""=Ìd9̛QQqόdaFDDwCdqPN"""WqyW/.ّ\|u:Ջ%NW%T[z:#r B⯔Bs8NNCPH]٩fvu9۟sba?Ovtx=t:!XbMeS*uLu!lFAcdXϝedd Y|t N/g?9ʒ6U+m7%##h]_>O| o|L7Iqm.?+ڻֱ3mިn. *=HbS *74mlO-:bgӅ%O5FDX$0I:nH"imsۃM~MSa?KEߣ~~4Z4zwcmՙ}u4jZE8yw[=-Q'8YjPң}*cp{}(Lރ~@hX SWNîةE#؆!hÞB9ӿ]eSE븲{fRqU{[K췫yh[x!!P}EC]aHOOMӱxB TnM'&>mTDxv_n*|:)\sWbim~bޙhl҆7| ÊVWQl@>}bɶ  C:Em) h{~&ى83# ,kQ a \xK_U R7N!-BFŋX40nǕfqCQ9ZǕ!W'8|8g1Әݥ>Bݑ7!!Gvte>EKAZJѹb1b* E h~Ο -xq ,x 24FKI%S%_-ށއS^ _˩T ,"Uzxp_3Y5&OѪg.9]vj=[Mߖ-h!Aw9u4 X mePYikt8lɧWzRr2B5 Xt?u\MGKmyn}8=g2 йB2*sa5:z./ SQ,:21uOC|$ XD`Bm^6flWY?qjpVч$(!%NRu3k^G+,޻LW95.{.wC=G}GWfK{cǔeX6ez/mJ@D%;l#tSZ &UCF#izH>L^_{ ̻;"6MncbμYgSUJړ꣔~?|T}Ns[=*ZǕ%}T'U'bd*F#_ `C+ 6k?›JNγxXslB:VwBa[Ԙ ֘F J*K=m#`AFFuHp`X<SB Mrdب5/J|  Zv’/K(e֕x4m#ϩ\iHb mNX}1vrw,mCϽ qeIm}n>gU7.>*S:Կ%)qf5Ц)8Ns2R3uԸg*3O@f'Zt:AQ.tyj_6H_"Zch ߈*$媽2~Ht,SN$"Z3#""c1̈H3uٕnŸgFDD0#""c1̈HfDD${ 3""=ÌdaFDD0#""c1̈HfDD${ 3""=ÌdaFDD0#""c1̈HfDD${ 3""=ÌdaFDD0#""c1̈HfDD${ 3""=ÌdaFDD0#""c1̈HfDD${ 3""=ÌdaFDD0#""c1̈HfDD${ 3""=ÌdaFDD0#""c1̈HfDD${ 3""=ÌdaFDD0#""c1̈HfDD${ 3""=ÌdaFDD0#""c1̈HfDD${ 3""=ÌdaFDD0#""c1̈HfDD${ 3""=ÌdaFDD0#""c1̈HfDD${ 3""=ÌdaFDD0#""c1̈HfDD${ 3""=ÌdaFDD0#""c1̈HfDD${ 3""=ÌdaFDD0#""c1̈HfDD${ 3""=ÌdaFDD0#""c1̈HfDD${ 3""=ÌdaFDD0#""c1̈HfDD${ 3""=ÌdaFDD0#""c1̈HfDD${ 3""=ÌdaFDD0#""c1̈HfDD${ 3""=ÌdaFDD0#""c1̈HfDD${ 3""=ÌdaFDD0#""c1̈HfDD${ 3""=ÌdaFDD0#""c1̈HfDD${ 3""=ÌdaFDD0#""c1̈HfDD${ 3""=ÌdaFDD0#""c1̈HfDD${ 3""=ÌdaFDD0#""c1̈HfDD${ 3""=ÌdaFDD0#""c1̈HfDD${ 3""=ÌdaFDD0#""c1̈HfDD${ 3""=ÌdaFDD0#""c1̈HfDD${*G9sfADDTeacǎUQ ={::vXyΌdaFDD0#""٫uav)4k֬ ""qxi~mWt0xyytDDNE]zݺu`RnyZwFDDDMBD4YFt|!!!5]QqYYXW-i>h6JˬUIDATKQp7&x7섻{MJEL&@Vp%DDW=G$Z5 BPO/?w.wEmZ%صvZ] "!g&Z-9B ,># Aa΁Em~Tn$))醴UQζUi]رcζU#u(>h0 \X-&tnn9a:'˾B2jƔ|w3f ..uEpppCDt#T0PBԵ@Rj&.\4 ]sAr Wfhݨ % ѪQk՛a;qh}oo|z,6]hh(,F 44[I,YhE=2{;Iˎ}BtI{0K[oaUХdƍѫW/#88zƍmЈn C7+VP{Z s^",tXͅ B4dJ?[S,托mӜ0 ԅ v6tF-L#)) bωq ;cv<۞VRRRqy?>:np$(/\Цj0jʃIp׿>!At<B<{]U%&^)3oqo/HDڟ{7<E߻N7""a 0 }IlJ돋^O"6Y| wARF+kwhĢ^axhmwb둘kD^I71]=_M|q`lÃJM׻M|00 eT.VU0kҰ# o@Tdz =Q7"#-.Թg8H|#2Mݦ9b!E:jyKn歸/ <ئ ~,J.7|2vcw yچ;<}WS~lX?fM+PyWyYسguكwf9-ڣp=| f}>*3R 30ZL(4UDQtxgʐ]`K Vco1V=F tFmү^GGՈ߷LoAOU5gxyyt@;ǏK.U^.QmS0S*pOu(((@JZvV3 Z:| S!D0C RpEhh(R{e7MAFwZ!Cؾ[3֊n%ҴZ/1>\\%lݑ\ 7MB<`6coNż w\Wy-!Hq biG>; 0iڛ m$쵱lG7^47@Rrgw9WێGBj.~a 0KL7hG@ч>~Q{W@|DZ|:N7C׮ն8*KjTϯWW\~p.:::v=*ݿhO(z<;lXcyoFGGcBذJt6 .}M{D'J^z뇽u[?W^ >y-N6FODFEur"">XÌ1~VA`ěλ19>*~Z #HaV-ڃoF߻,}X-v/_NW먟Rio@Wa."xz/%Bot2O3otɸô5wF 7xmhHh$N~>O,V|aOqK§$Ni̳`VztY<ۦȾ҇uإt/uoWX>GKBwW8b'8Ѱ>ZDuģϖ|Xi R@#,%[CҲ̅mw%n-V hm$uSUuPzSWYr2{'VnٍK9XEBٯJ{m,~+CP.m%pv# n @~mq &؝^?* }6v^{]z]݈m stᗦŻ_a\?R;Ga~˸wtuq1seKG** V;S]*:p^{TƗ2r[: BL9 MRФ V\~?ҬXW[em*w^xzzJ^Or1͉h,3n_V`X{Ar#2! Մ~uu[BޢNYt{%*C*|s2V*ӿTGj[NjC˪ uT|oodg'ƹr""ZamGoOg8*Nק#9k^dw9}`iwP}<6|CS ~'e&Ƹi]% .mp &oegjAeHsXM촸G*ӿOuw_'Vwu;eY&o7ՃC;mK_PCe+0 vĒ'dիet$Y7oU?c֕gТÌBLLV %q'e *>gGDD1<<111_X]rWP# z""#g-jڊ_%"?g-VjF""ζgλ< &盈Hs$~IENDB`sonata-1.7.0/website/images/sonata2.png000066400000000000000000001416061377142014300200020ustar00rootroot00000000000000PNG  IHDR sRGB pHYsď-;tIME8s䥞tEXtCommentCreated with GIMPW IDATxwU-_^+"%T?*J"07l>o.6 !}w={;g܂;0HHHHHx$$$$$(rBBBNJe yEwy;퇝z|W$$<:Yo1V-˙߻zo?8)9iҨ_={'8oZZ{{g;lp{,j.~}|x3ۦ.m'N R`6|4kd0y5c:nuNPd0i=SK6v!}=uɍI H=o|6Mp ױ_;}ѿ?1bw=C7^6ϟ?Zm,i[%\kdp N{_w0z6SU_z_K}w 13n})-|#'cOpPiMr?}TWҎ>GKNmww_K8l&# ~#+w7-ñ&`6__-qa 9|!l{"a:UcUzKN9v 5„{}Ӵ<~iqG:}Ɵ5sS?yszR-b/>v>죿[Kj(Emjc5i}Rb^W9}+:m-!<ғ+~7>TWSO~x4\s Ə1+L(8}͋ozƟ^|?=38 z1{=!w~IAFF|ވZ_pk['bx~>ћZ)/)'} '_<1\m Ə1ª/_}3z솖&s6wiqE/5?h}i~ku.􎵥rRtz MiOya/_={1>gWH#hKniXr'l3ͫ |~Kkߣ~cXHeE1*9銋bd7 . 9F`E)b_ "m d$0r>|j)RJ@tcysy{O-,|N#d[JSc{@I|ݪ .#ׂ߼X'<̘o/2Rz'9>'~+Okog<= m$ji+7mj ~g:fv?L83"e74,!ɘYJ5MV# C0-y_'M9@_QVo+Oy3kE/76ƬnH](^ۢsC{`HG?+>{Y׮Bc4~slr~<i5y3VV +KI)'1|lUuS- vv0 ~D7|rs0ퟻ'nDЎC-B&%.~֛VۍÜ7[?9}GƖ#;zGN~sC>qg^R@cHz#}~v䷘"ƈ 4gJM Ql_޽KOsl~}٭zԦ^C'//޳i?7ūl Oo3L}NX ߞ=WiW"L՝w{?'B;߾֋s[^~৵+e~98 c Jukjud5W0Ta, j" ƕ-WĪ=ԏx MS $BТKBukcm"1!aЍip͟tF> V~s8b!D3,] <#P5Cd3&!Xz&jIanLHx2" !_;8oܙO^cS4FEޞ{ۗ$z#E~'Z7}]$ osџLS!dmXҔ_iҭWUȻ\)ug|W 'eJHH"'7pL=Y5!!aShw$H-!!!!Q䄄CnHNKb䄄w "'$$$$(rBBBB [bK3D|ӟNABB»]`޼yBz"X*PJJ8(%`BRJ)+7~w!RRɍe ]Q֊j@Iȇqk1#Fa燘]u]u>Rt ^(Nc(ko1̦.8e:q@ McDJmAm܊B SljPR @GR K^]ťR*l /T|k34̋=lK9LccBhdg[N.MJ RR 9) ac1c, j#E`) a P @PH!@H!$R͚=kA:M NhՍ0хPJ2bdsc=X|2􀄄FUxd9gnjK4JPA9 Tb|W 5mb@I@) JJH TR"H:@@(A--ДSI@ekHu( DUO=hm$`&$$@Y 9J) )D6u(&dRL6bJ-\8eLGQH V+qE |]˴7 k֬-z> 斶Ӛ 83j:e/$Hg .BX'!e&5̴mW}mW_[i2*K@BB B5jjI)1qcF˕N"!9R6mG #M$[ҠF 7(yX]  u M 2(5;4HSGFTjJ*8b\Ľ/, Y|ܼlSO9!!aQy[ȉ'r˥Vꅐ䑥[ByAhPM\C$J RKY G!!H m2.J%.EШrLxaJ (BB*vfMn5m4苜(:s^{RJ>lCs>萚Jիܳflkߡ[WðB}3k/1Bgi_9e;߳!꺿MR}Rm۝ɦxɓl|Æ.Ԋ{@KKK6E ![/ӾzbcqԩS2HD偮K^sGn?~l82mxwFM?m~6>QmyQ߷~3O<?1šv_]!c܌?qg;ABJL&S.atZgtL()RJRʘR蚐*_rS1Tv $Ï#S)J qV X׾ tH!q//05:-XtOlMi.1k=$]ע"2t_(V isSL 4eu"CT)Wahl}=vT5tI*,Bd%Ksι3gr wmzg^֖'|rk-BVsWJu2~Tڇ 넔CO4#0qd6EƆfg+b5KW_}ž.TO*!s19~͚ˊe{.O>}mZ*sR\o~6.\1 VhQmcJ?xҫ~"lS^u]y'=,.qgUd^yes;w4uP+6TK^:K5u]AcTq2i(PDZ|/W”$c\JYQ("ps˟ZUKDзt|-þ?T¨T 6`պyn JƂcR!X\NF cBpCӧk5mBCHm9jX7 @|ѨQgF645)E.{WuQwuSO?9:q]wk)?pߪU[p!|qA` )Xнl>MM -S{ [+;yܨ6;.wsvӼd72_~uڌa͞3h#ߓ6(5{y2+󦌫o&9CL2u'2t-L.:ioQ9[5%B(!Ŝ#I *V|% #@., kVj(yɊ//xkjúJژ1RP̙ڢQm͆Ҋ֧4RPT -MRPv#/aR6%,ƺ}ܐ nZ4>?^|^t?ɪ[|V{0gΜ뮻aҤɅ@G͊Qaycޒy,mhTٳq|~R(N9s|_|qgyZt5Sqg5MWUJaB?1B@55NBHm[ȵB( 񺮰j}h!F8ˆs?[n*Ł\.w?⩿}Am`6pcwے< Cc ;>m= A0ƅe(\=3WѦ6P{Ӌojؗe zW.;Vr=g@KM:CaE)+^໮1FqJѸF[țkqJuL L*Rq0mlʬ!M9ܳ\r+ m锪lƈStR N1R1)6mc ޮ Y=,f 4+{BS BHJ ^M4Bb¢hhm:vglbd *'YǶ+n%Cm ؂~ Z}Ur3" >u8gApΤlX2!F !DV?oK!UbS)Iql۠TYXEqT):;"{ jzt"b24Ss%/zAW !MluZX/HTz+;.N )2)N)B}F#y59@XxyCGwV-6aD!QUʕrűTC- 5%ۜ5Vw΢D=I8~%TBJ4yǞ]ζ PBIG~3U?fP949ciK"&T+1*fԱzȘXIq"?ꩰHI- )Qui``EX6kSs! Sw}oyGu]q떹!4g3g_;ϜE^8xAÇop!Ci:ᄆBʑb= a!e-j o{bdBǘ<=\E`p`?9{Ʊ%C?Vpn=~x䩿ݯ5y>i2!yPZz(^]cUG }ِ{i |/~M7.ߺvVEf'o+V]r)T̘R@0K(ŌTz#4TE 521Wè eRb:X(T锉Rq!c(cV*z@ ,60`!T<HBq.1FX)Zg\ "D)eVmL0b~!(k0J!dcÆbi%۶p"6\Ӵcu.}u}9ϿmvinsZ˺ҡ!w@[8c B1TKrg[8ȳ: ~|ٲ}֍)2ѥmw0b [o0wlv=rpæټ=O`Ovf ^Z:BE3.- U7#q̘(mjkj68bP0NX.Yڱ k\h%b~DҪcis|ƥ0C#)lՊϤEi4mjI_Hl™J !_*a$msW]Z bJRLZ}L9\6W[6G8qgSOL2uupЁO>ĔSMkrٺMCYWWng tf5.i\I)Jl>㌯\:FӴ0駶۹ذS)eyćjAR*\dQ"K|K'W̢ek~W]MY +1jgW'WȏDAsT=}%BX)VBVq1(T# 2R$X ndžiDÄJ$`k׭1 8A(!@$X0`X#n=зHG!>0o~6"ruyÊV143jdE}}3J]c!67_RnDRu`F@QT$F@zNA8?I [BH!TY0(ᜲm>qRaBpMLCSP:A9GИN#k]oIv*~26uU#z֗*s(HU%-ސ/H(s Q"+LrE,XCCn\{Sƚow[S!^Y! ;R\K3XFg_q?Tabc"gi:$@}LYBaԖMIԆ`7L)ilHM_WpA}4I-ôgv R@00L+ %ò$1`CCL]K$B+]jmRG] {ՊFAȊ>Iz@BBțE]0۴ `}A0AvαBe?C,J(W8E\J)t$C zK3YW^fC5LG7҈n*򺠿R0`+0))T[_0AF0 tC'$mO}/9,]I8Bj?hfէ\ vy7{Mh2YO_(K0MnG0 *cC#ul S:m0XXԝQzONvKH’J <@1VHd8baBj:&Jh)(F m0um|s `R[s]vuiۤ!5a(rBBRʶDž7eBnhi_zm=KLMMPjQaΘP,UB,Jp=ng2vM DX3x"!ERJk*! P_pC`!oP-Tӵ= aBPiD!57vIHHHykv 8JY 41}YCO/zEQvG))Ji͆m0wr^,dHReT&'uKӍ؋JEW.'!J͗Xx!cP@!%O>d'5I~\t &As Avy<|aE_O)eN0~Ҹ豗;ׯ!{^{h#ϸ~5Eɗ)zQL  xPfy$"T(j{"@eLJS;P,4V=Ðn[Ra&RZqSؐkwرh6m鵩zқ1y\o>J:ABBŽȣ΢m,)BzCO>cڞ.-'~.Ux9X"dZR5lG~`eweE1040eraʹ#5F~Y<}02)3vZۛkf].drxh hlHި7ߗt,Fc0( X!A08X˜Oh46uO-.T!Tc jʱ4aI!VJRR)&̩KA(ksB BR4JLשPgIN3{j1MX8ٶcAHHAHz@BBŽț,psLX X#ifP: P{+@T=s] 0Atv2QB̔(sƆ^SJSPI`ִCή8N Dԧr Y`aQT RIHHH!c. &mMoKLk$Bbr&7V FĖz{JAFR1HB(LakF(bVٕTX ê@!kgd AHkքmMU/T ϗ=jh6%P *$ !!aPȝSwuY QJr+xrɆ|}n52VC FR Lf1P`X)J֦B5tH3,DQ aB R,׵4OϢSH)04][=!g1}Rqp)*^D!I>RjZTΥ PR{AE(&Vէ)3Mئ&!3PJw 0 5:#(1u-Tm(0N6+mSΜ6vld V I=87MN\z3J(Ww]s]!7Uol~Vza Sݭ_t2dݑίo$DG+@mIvG@! XIbfh%$y! 1eL^ +1(N Nz]@8(RBI - J25)Vt竭s/8La_$,05%PbΣKRq;R7x wJ.6ufv%^noJ-@as_J8!Q1DRdp#QrJ~%2,R(T--m) /Еst_"1Hmerbz6e1PBua`$U3FQh0_,뵮 3L4N״HBC$D`"XtVn5MN{'<ɠ޸wroэ Ԙģu#gC#ⲧo篋Ww 7N3WvL~o?H+G퍁Nx^#B)%_Sw,@쾴ZxғzSS$Wr"+j \wh]8fד@J_wRP !3Km\DZR2Y~I::zzT].ЀAQ5B F*fC,HI (ut0DR)Ƶ؆U=sѢ%/(4۱- apm{1HqvCSCR,`=mz|q3ϿyM7/LYǟw珬s%?;szk;sս+㯹 }l08Ÿ6k\wK7׾ѝ]tw9[///W~u.ܯ]4;(6l{BB ]:H J"-t HoRE)ҫRPPPzH @zrmKr#fggg)gqsD +`+cwO'eVsY; ӿRaFQ!.dP3~@hۈᅰ]WoavV`0oDpu:@KN(`wuH/{!l1uG2d'Z6Iӳt@idV&2i 6_#1MץdEьZ)HV,{y+$Id +czN1de2̬ }.'GB"M .-hMeTqq+NgP-iѧSwk7w;Od "o>u&-In! 43pv˖yzOW>^E:a1~]qNЄ!9Pg)Cyzc$d6d8 NMVN#|ܔǥ݉8.Km7[ _Oo;/Y8+IҒ(,+1j UVQ2u*Bv>1--G# ZY=*žPSQׇI&{{gM9&brIl0q]VhB$ JhaX(:!9)/U, ^Ư/-TpسmڰjCs%7kedZOUDTڪS2jhi,/o"owй˲{<V IDAT>qcpi)+UR7S8LJgpu^ع g-/W]I!N[-,"qfW)0!A4#cI&I$5 d[2r֘NϢBR(dD~8.ǿEZ7d\KDB}$] ј T3m!DQBH%Z睚7Mz!#5χsV u$Exyk4$ MS~~^ M<˲|,"~ddۻuƒ:[Of{ PL^5ںs^aـB}ru g+pޓI >h={%B۸!N[E>rNNND7͔lf]g@l[&Mf9M* *J妩c0pfըjU+\{_׉o7oޜ3g+]9mڴd>Qgn9Bx&.ƽB ،oh-|MxKSCc2:Li=ͽJ7@Fmל wC0ZB2Ag[3IQTj5n4ILI_vㅺ* RʙCT@QP&$ @SƉ6 9 $APHͰ k6o,Ui+kյ̆tkp?OpP|,=5`ȨjM*"χ{._Ol g|Va'o%޵;&uH%+SKE! ^f}vtRll۷wC >w`0x{j" QhȩNT$ CB$A"QB.U^El &)9@)o?4zazzhi[~ H(@; P$Ba8Y9ò!$%&}[#+GDVڵ+=u|c  2E>@R[VrfA|= I0M,#9I($e2IIBJKvNl6fD$ H2e?Re,OFy!В(J y@BydZ6!Q}$޼Y2O1yQ I,^($ $) ThBN$@DI  < AR@Rf]+nwnYW&SP\$h H U"-J"D1 BxlZHZ-@!NDERB )q)jDQ4,"Lg[d/WusN, U+f逈eB$)g)%(HB$f b(j8LF$BHbQ*/HPjZwMFAPJzlxl<!Ҵ$h :4E,sj% 8xD(I< APEfB(H0 %nѴZaƒʗ rS((|E׭̒{Q^^F^R_Gpy}}d'P.MtlưDMcX$,MXf$JrSTTV$KKx|y;D| +PDhFS$ _9KF=HJiEN$w7Jn2&/]VPfK+IIHSD! -P~^߬ۨA%+ ww߫S#niy+@8q~TWRk>И4j!N}y1MgxO14U+4*-c Pid*9ID^H$h6[sL$ E)d(Ifj@V^Dr-c Qh#S*X,]]&"T!g%.pvc1-Umy;B[m6h2-v8bDgHC)Z.)HDPyWU޺pPCL?lN97O~$Ss'ݫN4,IX R!Mx|Jcbbz{/e:6/v؀Ϥ|~P_˩111v>_J;4rˉ*_+?׷Wcf73S)􉷉GzY?E *g 2ИW=&j2J,Či/ܼ06.1~J܃div.WnnJ_/$)fYF%$B (I-驖Tkf Hw=T9HK j==9QE.:q݇Wc݉ ^z'~rZBIaM:oҿune?'uW%cbbbbz!n;jFZ;ﻂeV/.r +ݾ}m[qu}Z~~ݲ>igj[fVVNb_ȦEUZ~-[Ta)xTfZecGF[s7]ihCV,/:4Z8Udq# R*!@@&2ԟnj Ͱ CRP %Q 22M IXVPV'R</3FPFۇ_3O0r΁ˇn;r\7׺)nͻpk0`NWH&wae_Ϧf$ AܿQyWD"ճfM HҖ+@˷|3(_'iDQ\{ U0L]N S E[bƼF{4(JQ Zx8QNpӄx$IB`FD^3tFÃH 4xye\aɖe0$XlZ$iF1DD4!]J*d11 R9t]6$ $(77s()">rĥiq1bcǎ[nK5;$$14e8H4$II7v*ce IhX=UrF&7Y4Eiq/9a՞n3\\^O7i”b-\9?Oպdɒ~?p E>vhtt'N hfB(ft+WEرS>}%ߺl6O6uEҥˏ?:nag*z]qر%Kdddlٲ%ozŊ'Oƻ/|sIg܍v2955b1WVڵk4M 9cioɇ) VkZdjjJrŃvoצg],]V >(5e˖N{U>.2;1 >Ew΋:al2eTm[G9r0}tGzΝUXO_g*>ުVk;/|ċnʵ](H5*͛7[iFA@JMQJbYVTxq(6mŋٜxxʊM\!{xt׹;DIrhc(!@RiyӣG9™~]pڦ->sDQ|+ݼ#ϝ;W0i?3$޽۾o@ť$/وMU+rb@N0 /*:>>]wG)b|b;6 `|; {݌أçr[m˷ p|Ǫ}^Ȳ49GMz󁿒ڠ =F﯈q)KHD B-;!B.Ir^Gž~9Ȩm #gZn>OZu]V]ֵ`z' y-ZVuA,@>Oߒ I%w9;f R䂖 6Kn9%S^d n={OB V+?Λ8m7g ^c7v_o%Z <<Ӌ𼞉_G}OHKS{^߫7ɗUV8%G_Lo>!W.355G|N-Pix[_}^9'g=~|w>n1Ο Yڗ_o۶mc[(yw˺^jǵ/xGww1!jµ f|Tw5ò4~ȶqa狶~~X˚Xڑ g`:ϏjY9~3(rn0N$J%I "wq 8<0gшy70p % YQ,"ޟ!UZ o~%S(L8FwSu=a[QCBrr5H IDATlJ̾}䕭b2l1rMU@hLOek=C>\>ieUunzd_ )f(RVr5Uw\rSeeɐE.ڧu~׿m\F." od+?{ZW\y 8>U%B>Y;zQ ~Z6ɧNXbYىo+[d^O[Q޸oIPݟ$I!ȅZ-G u—&mUo{5u=c xǎAG/DDz=A;iA֞%|e)Z9sL:u)Z(Fc``ٳg< j=nWkJ:һNud1 bkNܷyq)Y6:/&tۺ͜LAs玻Zd!LPb[nUX1%%"No˘9*kœz:34)<ŒliOf'lW@By<ǫ|rkZƯ&ĥ=#{{lڶLFy\!99955bdddpwܹ:uL0!_s+pbM}IԮ]{ܹE}q+Rd@:.kK p`0 Vd <p"*nn5nKXv|aA |?z\9$444!!9\ B^_͚5+W 4M?~<_Edd$b q[VVQ2OG6L1  uy `^.a+2yqJ*sp«W.\2 @˗;-_<=X1 y/n^xqE}1v lsdM_,h? ~y0jp Яro7,آc `޸?,S1(Z 2w|`8ٶ3#_jʕ+.ķjw|{جŠ_.r a݇ψiWl8Gtڳoժ]L6cb yga9`$nXZ?GOc$HT3(T+9Glqks~3l"e,lQ[Mf5=)\d);IQX dh͑^NN7q 5E͋7[1n8d!џx JN&GNc{Y0? gK:'_6wÍ:Q  QX\֬MM&ttVypͤtZUq%柦~c `Dr_t75Gk+uM(G޹KMFm'93{7څ|Nd *?hWEg.1 h̪43YaLvWۊyw6Hꖽ's*?{G}.Nݻ.L#Zǎ+gm雘aСרR"f˗SSS?H}d pƍu뾞z՗>ZBq'v/㭦LLr;rذj-w>3osQys^ -R>$\3f~>ÑA mSGdIFUEy;wvPrVCW[3)o|ppQJr 6iI|b0D[\G6+udcVuJF}[KK})M-$eYlv\Kџ]'3~q5Iݝ6w(wS%-kH<1ڴeմF]z(I)c~zi :풵waS'ozsL{}kw\~]9;U:,%j6ƼaI鿶U~+#_S9d% 6!%CPlBK"1d$њ7g]6~vk@*;sCn[r DIPW~V+ز~{~kYWGM|[!Oٳ {#|s7IqC˹9|Uցu5lE;nR.P^Fe?7J>uj8՟ԟg_)%t<IŬ0]XXkﭢ($IFYQ0$5H>x22V+yyf1iS9UbN N?]JBH2>nѵ5pց7UҖ=}|c$ƶBb=Vת;yyZXjz (J$98CXm[>{_6fRhmVCLX75[`䢋 C]"_񱝂vYwJ0F϶ƼIl{_NŮiUZ/yBjߌݵK3EKqrJ:EWOz/ٲIљ7-Io[D!?=5d[yDPݔ1A !#.$6VA~+~7 !ւ:="HAD|c$ݿZ9_G7_=۳"iK_0O rF]TMەEoD? P{~pEљu]gJ'p9} j*2u:=c׎i5ңo1C)go}]s3m)ctѽ\V9C j>ts|w3m5gq*'e}yb~?&!>Ae*u4:?vl޴IסE~fϳƢ!,36hyŘgo?HIA{G۫c IY"??=_E1K{G+_QCIQϻےIgmJ{+:FUQJYyp~YqQ']:‡Z==zw~\s&qUKW2w1ny58' V1+iZ.y>DoϰN֠rooj:̉K!YeZ-~ga{QX_drmq>aHJFaڊB*/O|UMz6$ijcj m3({t6oE]mb#+ZׯYͧ Vt`Sk?tso2#W,$קk%5=qg6 VHω3{1ibAB]ʇ2rQPd.[X}z]kz({`[vn]1a^mG\)1_2c^];niڬ -_ۆ9‘8ktqQ{;;EsKj#eF/|%xzt]?V{W9Ps4k?JBKw #%r5. 4o3Ic !N[Z LҞ_?BSXiy7 E_9cZ6wpgb.wϟ_6T}WF\)Nmycf!lTwV41 +ب!C&\} g0Q 3q!%H\X6y2K^Ҳv`93Oh+sζrjkx[2t:+ZC$/yS>|řkrmmG _CHh+X{ Qr*wFNVnMW>d&>sOk}L\L dĢ-ZETTa,o]-uzKzu_,WJ.]?`uك8MhC]ϟ w-W]s #OWƫzC{K?஠ ~QD9EGjI/j >Pc:lZ٠|e4>y@-rm+ݤߖ|9dzϚ>^~YXu@O++ Z1?]'@AsW f8Օ YNe%}<>3Д¯G)CH#E}sv]3бխ_i8>vEi#;16)|D$W4 Ɣvѝ ;W̙JK`hǍ3b)Ux3?k*x@ziH?F>Љ|_A.k}[vA=wXTK--YSeږ{)"Hƴ;KkysM$ N4?X?Ű6?3Wb g7Z#e6R9is3Sm64g9+lWTŐgn's{xu݂Z-9jx 8G(vUXuHgyJߏJ";5vjSyGQs ^nr]ź˺UH~|njeC+c0tGNNx\c?ϮI! ntq *uɟm5/AѶ:3eX2vZZ0j"~o흶ije[\ [)>7ñg|yTG\r偢V}۩Cw}z} AKm7Vy NhPo Wmu1ɼ҈߭K"E^zV>~ǿP0O?uW}m9#ϫ^}jyʓ{<ԼZMukވc)%lQu{G]:D{?2 IDAT)_OװR?wXEj`:9ROͼC\Zy/Kb0W`E`0 Vd y=qG]`0q`0  `0X1 +2`Ku1E!eGg903iigF{W:ȟZjaoly5zvb0tn\U*m`tN2!aNLy:T*}It"Vgٹzlw5oG{*{7b'cek^qm<8.u<*QOyO^[Mud"O#?]gL\0کLJ2GrS֕@}ʗ~~F/7ɢצRڀ]XdžE;ѪG5uwjbKzs%s+kTM9M/%d9~Ӓh>~&bjM{΃u#7+^O% ЪgegܻšYX c03v;K~Ȱ U;V:7",oZ.(hʿed#]6~vk@*;s빇#[ۇ]я'ܫN+t?ϱ<6o-|ycuIPW| `k۸~WwIqC˹#2F#YWGx)ߺZ7)-hšb󋶳/vZ"'"Y@M( e$vk\v-55ՕYE}nһH# `!<QET P@ŧ扂<[1B1"I+ cqE]A̜qw93;W]\CZPdM..g[Ímt)gL&HTٮ8Kx,~{2&](3Gp^כ]BƯq-h)$Y>42h1<9b;)K#$*R"w w<ʮ=Yf[.'ZR3|z֋£9f0 TsƠU"wG%bt|N:ѣQ}hkku {diĔ{hQ +x<Lk52*ʫnQL "Dj}z)GWRܙ""7hF@qbRs/;U`rvgRM>X7MG>YCLlX1Bz 7VJ4趆]H(ok)kQTJG}YlZUlDUY78+ck'x,$YؼCk5B$Hi=$)7" >2EiG>Eeiѷ5fo2BqܡJ4d-w7+!$y_rrIu;@(p˟]b#ഀ~["j%26PL%uդtz|(Şn9ώLٽZ#L޹3кZ԰ߌ><33-RÓsssqESDY*BƲ{EeRdt"T}U|R+$("aKIZrI4~Y?* MY$O?]09xyiLdRs-ѻOuyd"=.$[_Qʦ>smhp,oJX;kѡCi (;@CdKA3p5ه56F 5WKMϠ.uT28- }䁾^]z*M8<Ԫ^/ ϡnq+SGtpEEv}(32Z~*uуIURRҤ'{m dX3@QWW Δ摽4ߌ*jn|ٯ? Z.]IQ+~ys̅+m'xd<2@D|diЌ92@k<2xd<2xdydhUibߘ8DA La })}\`Zp㗩Ȩ{-K S6. ]Ψa@-ƒQXZ>/`K9py)ǭ$ ED^ nePՖ+|)`zI;*^!7o q LE*+!^%;4.>B(/K+Ar^XB%}Rro%$?~$泋"Sw@ۅ)}_+W8{l```||<#>쵞Qb% hr^e݌x+8*Gy 0@=+Pd:Kb"zA2܊nnBk 0/$y0 e}6QUݞlx?]zc{SWWF7XnZ2h)m4ew,$ ">>^9ܹs=>ܹsYQFKKkA55neأ+X3u7:2Q܊wdh\L3LY@ QUyR.U#$*ەW_nW񓅉YWgvP&-+qҀ1:Ԡ) enBқ[Vtnk)qd>42h1qvazJ$ͣBLNLW,foyªww𻇧˫]"㱿b@JfrԨ @ Yȧ`ڎ:BS1 vf1+J]\UM(٪EDZQ(N[K Jyv͠0X 'SթɬGl\N=7swe#>W;qm)ܔk~sf|LFN^QVo*v-6tur6㑫S-يиs5kָp᫼2JS8k~{% KW *}\MDZB!"0sժdߦnP΄kwܝ% Pd3$D49Ɩ=+:t?m _|C˛|*fw12Z$[D2ðX-u'5sw1~?+Z1H@3}?Kj6nџO&c-b/kǰ'/KN~ʹ-dڟ _ve.PŬ w̴K7[eכzȭ ??|cP򵐧ŚKV^U4Z2lCa*e+5 1e:sYE>9ADe[uQ©t5*.Ze/JjH݃wN/_zqOC>Ib^\2pOfLڙ/r~Nԕz|(EoO4 yÕrCgtZ_|'p?F_׵j ;GH8eMN,ڑ!þ- )O:vM)%`܌ͷ[:TAFHy7عls¸)BFB7bN`w$~0+)#DRR԰M>h؆DDg[:SAFfC"hDb-SwO.bu:v;R[,+v^&.'P_Wd!voBd-m#mmf x"1*$c%grj C'!D<T:@Nr$ D)]YdBW tʢ ȥQCngԐ/-Q}\ 8<~l5NS89bxEo=p{͢QbR}yr`wxݽuCN* 4_adȽUh{"Ut4ҿhBHT8s|%+-LNC4QcMn93G9+-jđ}Ȍ^3AbCκr~A%WYptԯOMlS(XXU>8۰8rw딋ťTrWkZRCFLdfa9KSn/EsLNft%%O4+إQNx },~f`*+-I AWS׊933\x+p?<@3iKQ&ArZ)ǡg D5>,G3*WwC1]ݳ}X߀82MtʍrUESo$mC;|J$]FIjЙ^;w( -׮}!cD`D8)d3Džw'"AvaO6S}yڏ ve-%9:I$Ya ɗ.~?"4ݦ5`ii,܉5jn=Q{dj m: F5:'cFFFAAiG|] ]OhtZk֬!HmԲz)YykNvQ%Qe{XLWkC .sRW׫ggȫv{Ur^ϬQ tY>[QrAA򣿾췘OqN)슼`7yUl0SO0aͶ:buZmȗ vqwOy6I<L):'o5hAlpMzEgGC\›[|vQy Α%n=y帝 *O^*;MNkz "eXYq,}|6o7۔:/;GV#QtJPWbiigc?RUr*:'KR0L+B~&WsUQD?Vp^17R}Ư蛹&T0 >vL ܃MPd:=+Լs]buF=!k4dWj߯O0fʫ28~$~MK9cUd2DvUR ߼Lidؕc~XR_56Kldɡ7~AjlYq,}|6F}V,dG\UxΫ#oQﮙ7}mhqRPC1*UE( Y57!#[n}%q{CŬڹĘ6Bl_v0>/xV- H(W+#UU<<{LLUX|@ GA3TURʽ %<:1RSM7 "ݒcFtЪxvMwQ/]LX8!x#ͯ*:msCu0XPYY^kmޥK2dWM9a&S73[Zm?'V|xt^t+J3?[MSer$Vױn&\_{-oZl6yWy|']*G+|j1CyNU%n:c&O#B<Ţ*ѳhvXj# "€N(7s5o/nZ;]̋<̱;S ӚG8A^ʫF!]o7XB*q;LJS6e&2eC/=C@q"LW3zO. ) &zrbEwyP0op)V(OT@diuQoðOH$vE֛E.'o10L=٣2Df%ESD2Mt ڟF"QZo7ﭷ&wWg1(gp3m|-ͯ/lҽ=HRR74[/]kKK`acbbbFehh_<$$$DDDU}󚚚'cFFFAApE Z    i`  G bϧw)엚ۭp2G[]= E%jhvP .Y1öKmUuxN–Ѱ 55 kJ:oiɎhs3FVW7s]-5zon\2|&xj]i}}9dû#@ú~}0b"2Bm)5z{y:s/)gMGR5.o[Z9,뺯fNf[o4پ)t%KU7tD"dKޭUHC/q}{sbLӎU5l\ere3|q:gO}wWRov951[t{>=$Vd~{y> '1ੋ,ccufs+v8!/?!sܦA MNJ}W4狢dEf't_cN .5EΫR\J*Y\li=VO-oZ|boR#VUm*c9wR_T^Ƕ֎s6?TǢFIJj_CDYbBWcaL V\6V[=S+B-iM|J  y=x:(k5ۮF>M+[[ccoeX|KNp4lӟ =1Bz 7VJ4趆)mi %,I^d?K“~v>WVIkG4$n95sITk& !.0pn[K1~xNaʐ>Nk rX}r !oۘ-%\(?9F)%ǖq)ʷ40.L먍~\:8dKyDT%lsݞu \ Z:i>bUy85O&WrB{@Hz}\ fIoK-XwV&" ݟ-%U&$!*{@ k!߆MOK% s ^9zSLn!jј)$҉RUd=娑Eb4',SVcPށFzU!)W c)P˲?Yh_o-&vXZf]Ro[%%rnT]q.EJcjlq-o`+ߙ;93K]7Yɜ])Elvaʎ -+B0nJ]F2!#楄*z#KyddJE3뮋5aeh s)C|c.};tJ=OEsMwʦ>smhp,o]thQZ k{`љM;u҉# /;ej:kwmklJύ"޶4QCI%KK*mi)iZRPԤOW4(55xaĦ~!]Kg4t4WP/]ګv7W[+%u-O$stYo֬dUe&_ dhի+{N&s,]cJK`i'"6+OmzisUZ_Fx޽ÓR^^ȭn Eh󔖖:HOFRݻzdᔗ7"#| >jd24xh?aBgq;w~ YK۫W/)#,D B'~ T*uҥ&&&K.Rđ~. ˗/5n^ntEq4@wSq+wץ)jjx$Yl.k'#N9 H(6i>߸4 = _|uϞ=z5ah_ƙ2%%G 2@S`2\#om]P*ZiӦG",, `bbMll쯪>;y-A@P/v-ɳH$uZB߽4urVV@S~;wrq}>\G#br[yÆ BwqFX pكyOi޵:0 d`o蛙>jȍ[yÇfff)+ߵgE-j͈Erw^N3fmRzh,'G&ZfW=e9 jƦb>&=|}vW0,&ys0h 322=UQQimY^Vr[(+"nF*)1gΘ<thhht~Ӆe[ 1P>vcP(T~N:XǼGw>}}/Ţ8sX7dClo+?;* @$x-w>b2ssF6";'KAA)]&hD".g+Q8r2kDU!g٨Rn ed W|l9\_^MC":k++a<tK!ybNnNvv|HS ;F#*ku!`@'5ؚ g҅t%+NK9cUZR )` \.afDLаB_Ե4C?/w FHi ")!^GLVO Y\R\"@53K4gԢ^T)wEltsɹ+Htf?!q֤ª¤s;9ouMSer$Vױ"f}pEr4@qaQaFy e2yyLssswfmzZ8Ka'رr%ӝfrmv+bi,AZG}"CVS' >G^{@!]T~SV+ t`~~Qg:sUr4z~Aq쬃G7XZZWSSVP;;;-@lllXXΛi.nfuI4Ojjj0,pܼݺpظ'Z4JJ-0>333##~ C^}JH9 Ôfq:vt>UUUUTTlu~ߧäIxJ#A @8x<.r1 # kd2BrLL {qd?ZG#GÓO>EZΝ;ȣG$ =r@ qt&@Hf+7% h LqE'8]ذFZyHHHTzڛ4$6n C[9'^xF4-.F,گU)=aXwI.ߵD=?eZn[xFf3wږN=ٹ[A?+֏u!BwEnqƭ\aB˥on6s=dPEl}[BZߌ9|cW=y"Ó;6 ZJ>R2țToQY睜PGƸ9{sgw+,{*#UfBl俽u\dJvUIsiuDaXdl#K$g%KFtVqSfj &zdxECt^i&p"~6ǗdI^g Sl&֌u!H,S/ڍJxP&B!a\IbB;V4,jc-#>)xԳnر! !0Z!9}Mdu!e}z>0fFP{]%DV'Kok,KAq+>I/w+GA!T#?TrW+A$u۵,TOz<jdaqꑨ2=9WFoU=B %){|)50p[k^$Y!G#Mc[IMoxϩnWі5Aj<*KO_C.%f 0""'檧s+87XJ}IDAT'U7uBGnsy7^8Go.ܲ׷ꦱvr."71Yk^$YIBX}0Cp/ye/̈o!+F-F/P}P1v\ r ލ9j, ;;.8v`W%bteܱB:OheWfaoK)ݏRQ4ݽF;O]Mˮ)#Q\5vqtE5s) s3_^UF7՘z.߄B,S[eo${_<=(BzNv}$ )3ĩ'\oBzMQ!&5}Gz_N5,zoMvQӚ8>X!6jA m){p}KZnI/%M[?MEÂ*4+"r$Wpt8]ڊw M V4]H/~p=,%3Jd6ea'?CuӖN0MC+ `*IENDB`sonata-1.7.0/website/images/sonata3.png000066400000000000000000001516441377142014300200060ustar00rootroot00000000000000PNG  IHDR sRGB pHYsď-;tIMEw tEXtCommentCreated with GIMPW IDATxwUwN޽;KPAQT%jX5Q4D5hlT@QP:[eDžͲЌBy8;wΜwޙsq59&pppppQd@1WYܱwy1c[GvD GnO/芿᚟ +'OJUZ qn1扻jOR_TL;==OVH7^}{o;ifbw~0E:84w|t1)S?]g7co~oc]W!̜9s93g΋sk97OR՜-ǽt GΘyzn'SL2eʌcN}q}WقVŷ~{< |}ᷜ7=q#(r[~E?n FŶ֐-}d}⽮L=kl 6JjWѤf:׿i)=f (23[Dk) -LU/z{7S\q>[h1޹]Wsdj,)W^~)cI&.&}w(^ӏ9KtU4Q}]qG|ƻ/{XOϞթG8oi/n.h~턻}4SW^?~r\zi'߆<^L{m嗟z1_=E} 1m|R/Ak<<ΚSӪ}!܊ q9nobh(A.&S3`!5MtBq~T嫺eAY2;^~04T9jNk$>kA6Pݷ]ӿy-uֆ)OHlRiz @7]᫿Tr~_~ޟ~wlPͧ_>[nN̺wUG_7\!ckz+^D=g)}X?([=lϏjoz?{)JԠO 4s6{ _͑}YE2}e\(|[lGW{ΧM7z߼;O,vj圮˭nO+Tim mVAFŶѐKo+E&o_u,ow0V>8Zչ_}ʇ_$T62<Ŕ}höCmywpne{tՄ6۩VjͣgDOɑgW_|EKninLwy |&&l= DFBcgQd "Me3^"edjFt07y;_y7(ni^T~6Y|v]ߺZ9?ۅCKtVz7)5nbhfv@+nVzџ ߮]/Ysޥg}߿kWf_kKu^Pr5׵K]{w]q9^5֛]7_<9k-uDbYa)M1"84Dçu۷f粿y?.!;皀Vv;a죕L罜׎!eűnZ=}}cBИ7g!%Z7tȧ립{oaS8@?ȶQm7dS; :{ϝtYh;O}O.^>ܾMύֿg8[+@yonZ^&%׼eVSw%u og.l*LY[d-!ƌ,C;Pݿq}z3q-qIOz]{J(+A:9+wH4EϮ՝WNY sz|_TSU\Cjn_5LJ-';wGR$f#O5dnl[`iNM_/p)o=$m;ԧQ_X'Wn*.WO_wgk[;?_[Dֿ7w}_띀&o8[˶uOxU?њbomгkK͖og/Q9cqۙo¬|ow,e;unՄVUw76>k:lq{H%aK5baBci,md9bL\޼YI|u;ӿ$Us ^-7dv adrvjfՁ?+f~o>Ng|Dc&p4 o[q-upE\z(vQsȸ+//H4D~xg'}^g2k SJ~=뛟ѫIALr ݱ8%}*R)dv+;w/Jt--Ѽ>9K𵺕*ץ:ou8|qS8~"C=+t|d ";8888(b[O̚5gy 3g䜋M)ÒH q" @H:DD@@ )'Hj+&I8aPl67>x$nq I0gp1MKj@4YlPx$*D ĸJ%+*Pv{'_f(I,\ru- Am¥x $P%x9Les p dKq{"р@6b r4<L%20A`LR 9(b !SrB`\iWu1Xܦ%qNt@)rBfQ!""d"d" yÞȃ \8 DD aKPYDJtb>a ,W^j"meEiY )TJ[T75"סǙ+*DAXيʙ.&]T8@dvaOUH`s q "cB@b`" ,9̙A5nR deMroD%ŪKx:-,M2:5mr4yP.@n70C΄ @ـ9 -sOI9888|yHBI0%2e2$# 2h#V̖ 9 Yȼրie $nեηJ'DKJIs] D7kkĂ󜰺U\(<ȑ2む  pF͂Tv18a%?7`3UrG&@$ @[❲RJ\?l$q5 OM d UE\W 6~?jBLdӪ8$mɖ@ L0 l`'`BRuDFHB=:Fp؍Q ""4 Le #QL&, ƈIH!hW,QVDJDQ2V)(d65 ۮYBmb"%0 "wчQL+Y:&uVZ-q@dDD$ % 3,l(i̡W$@R8/D{X`ܾ+GGDv鑫'KG&!r, l@ ƙFRlsy) CD B#|B)Z 4U( 0sG(f"זSe$"]4?Ib([0XQV*@\)@ $a@~E2C5"Gޫ NZ%M\^3?#&K>+*5lT,| b0.QC1NLJ$%")HNpأmۙLZ\.׮:y;Gɐd !Zq"F $`R`I. 4g.\}bkZ =ڌ [P %O(:(ԬtnAJ܄$ 3d6"=v #"DĽwvȱîشv/B#<꿤ț/`\$D`Z8 @&!ʀ C \xT$KhDhD'IɭY% "n4sQ_(~v#pŚeU4&&K^eK(BH$ $nGT$ Q!c%H$9$0 ɐѨ(%%,u=\p8CGD"drH/**fC~ ;zg?G<Oii鎖9/((4mvww@AA^F<bsY^#_խasRdgGǟ#7yZ!IX!d @ N  e0Ms3PB`[h/h#-ACO%l8pP$#X`$RULY ) `p& #. "1F;dh4Si^.˲蚵v-}ήrdH$2.H?9\>swQM|vDby瞿'>>vp8,IR^3G9rT|~fS }9K9VQ䯐D"xgt ngE{Ǜ~6rL !dq$@ b`3@ ["XRzW UX岖$CRJ%" EiuyFb^Bt3ѫPWUDȁ:0S-fQ ;-2 lΏx{G KW,;y;v̪+gz؎X*~gO38糞=o_s IR*~EF3>](4ͮ@g6}ذa`0NHk֬>p`0s2+*n+s|㣎۰j^ڎa C~F:۱lI>/GFn_/6gyK'ac&viuޭ_zg7ޞ(kه/޲RxVj*\n'#"D"A5MAda%fEbb=,j7`3 "B HHM6G@\D RbkM P+$N$HIDЇM¢kdC -Q&%n Ԝ %"E/"`\WE!dÆ ]&'c,h4|Ų˗pÍF6}|mo)+-oΜF[:D().kOD U?"7;Zo!T Sd(*,~zϽ,_,PXXtO~K?L|1p8zwPWغde-T>挋j*IhE=$79F$kw8wˑE~ȧ}l:Q/?_tOO[9,Yxڴi---K.r)O6q8H3~Xe;:G Rq>q";vިs' sq`tb1{Yf/Bcccoo/톛^ɢhDŽuTvl9=˛.=dҨKag̋[v?긓u@&KGl<$s_XAGu͍ō9i}%[]Er? DBK p[@5w̽UMhnn3flYYE]ׅe3V[o$uDrUPw"Y'hH 8pA @XXa ! K:S *Q* :W$k<+!g 7.Z z9gҩCM_qYȳ<̊Иr%D[dU0N 0NL:.I@0퐱n"}%^2eԜM&1$껊"g2)"b$ظ?/T$i;6tJD]W| I2 $qkG{S1ț0 'zQ쳈_X6ܛu8#x?}<BDv#}D5:UJ'o-P{<<7Wo5ڽXro"-+drt:iYmYe"WEHy 7D&I8_֌`\&H3o5:^Sx$t/z1R2PiK T+{Z|{8uL~c G6)(^P Ɉ+!7HbEL)!@6 +' `L_ⒼLJy$s9$I%ۉ%IO$6񑳹,VTJnለeΏrlxH} friy3cV0<@@۲%[Z~qWrwao#S wm݃G!rrY߽~=5/ԝ|֎' IDAT#p+Ŝ{gnvʊR !d*U=REVa N}Cd wE9o~r@7n >?qŕWǚ @D;qclD HX3J$};c8 "_U?²|gXd"}R570$_}2>c-f7M>vo΃ӷg^Q??'NfMM[50z} |Në8YRIF%ՠ @$g{  Y*- @iK]v' PNPx`Vmk @2KW":+TjЙld/1 }Vʍ{Θ^ZK3O!c d"vM2> /  1' Ӫ^]~^ݰ;C   =ۓsb񪦹kʲ6D/[ie LUɭ䕸3Q I) HQD fL_6[lfzٗU}'w@:1V?tSoڰk,Hh͐Bw 3v);Г ˋmΦvFHv,eRyKPĐ*pȿH( 4A/[;ȃ G>g1}$IPA9E˯e)r9g T\\[ÃE B=~TU;~w [zkm?2@qS7m;굫4LN~@6MĉKD4l2|>rQ.jQgmB#CʱG/}+7ezxTSRrcݔc_Z*UH9 bllZb+fwFYD$FV.۱#=mJ@2L{gmKJלy䉵5K~ !\H0 4@VwЂۖy\y$s>ްŚ0tj+=wnvΝlwE;|IleVFAAO>5KW䁻p$8 $ H0䈜$VLsn |nO0?G0ׯ4R#ŅJʹϗl#kj&j'7Xbd2pa[=ձ.Q0zfs<߽j' ޭ=_uqkv҉'{BKsRiU̚kn7 IR&Twݮ_;q{ib$8r_160XcGnz/G2!ioMRŒIqOݷnl`Z<#)&od 1nT9`\I-k?x>wM0qI1OFSFi%%spUW敭c'M*c̛ۙz:VZmy/Џ=Rԫ 3e+kkӽ !#_"3O$+ H`0D2$9hm8UGSOk2@%}tAgأԌ>z|͉հOȖW{eK3YaXu)PY[Q[֧\}IŴV_25;RaWZB:QURktV-N;,;%A^'zc`YNXt鮌Iw]Cf;u]`rovW! ""cb-)2͢=.>孚̒B=ֵ*qOTݶ?A[G+V$]Ĕ"HҶvS53a@nS9qd%U5rF篯ZHeۗUʥF9\n;ڙL $7}V_ZW#{_w:͆UNv yw 9 pO#\ݸ`])7mKS*rpdc*S%6ITdM@H@hOڂ)nLBmWl~g|AՊܡ@A%`t=W/ୁd7*"&􀽆ZC'2dMIV}wI(ĊO4ʽZ6Jt 蓾Yח%[ ˅g-Q&A eA s pKd ah R6>AV])]ͩ!oκ]"!t(xeQh(jZ*AT*\N'ppp3y!!qp,DΊhyz h14 [fFkGq0gdի"  3IXd\au@ $dYTN@#B0`d 埫۾uGc0HE"G+PVU OB6Z~neGA,;l"NzZZ. +b)+:Z> ninr@#C$hT JIP,7g` !Ca3N3W56wf&3f_KsqneRvXך\,4?ӗ0h3Rq:Þ@0I.#BAZb]桏_hl{Rh9TW"Z1bRE?1m- l$6"O:yℵima8"|Sov,ol\t8JYaFb$*,ܟ<ЗJ|DQO]*_:˃ Ȗ>#H;GE-.IdD.XUѴmRLXgKLȂ"xkG;Ҙҹ#EOoyk$4@ &hnWٸ}jCEMYu{"9=<kkaNQC jh 岍GV|0/4S, 8YF"iiD2 Ie M&_;o( Q@bAݑv ;˭njJ%:KZ_'=TwŸ3Teўe=fa 5ͫv^pA:!gG1P(r:>@(9ťlD +RkuKsK>悖ʑj?G2i)]w;oŵ>pÎ5t3q$5PzӱEz9LŒ`Enm+yMRy UUgl4O. D^?(z qOuNc C'`߉Ԇp5>Vt6ovUˑǏ}I~[\["76q|Hw4tּ/wwt4%;V7V',&Sc-w8<ױP5[\>^M57xs(T,[i==J,z{{z@ _חժ%)=myX*^3#TU]& E$cX^[ﱌqVVV3 y+*G<| [SO}'%U"m$'۱':v\Y,ݮQcV]>.Qj+m@rc"mqno-uuoH>泑,]fPSڟZ{:L{"#n{Dpx]]{6EɩVŚ~B(«ok0<@Vwuv66L;Њué\L$v,_ "׽]S3.d~ ݚMDžշΥReâ=#W z] ZgH_ L8IRhhn\h4(! O>׼_y=JEGb3M 5edzX qՂ1li\鲘\"7Slbqzb_}juw[XZ|@DWrLwau|Zd.ɶLT"Unt,b æUAH[|]iuD&YQ諘ǖw #_-<&ve$9ʖQEAo/Dܗg;oq[Of߃8/y$WP?]r> OG^zO֎7Ϋ,t.J}*8ѥ+wl^ ˲}zUVT%gdnţ=_2ǣ$UW|wش 8$L2Z${mJ-\܅-i\ScHEIȝT50m,}=;s}#!w"d~_b/}fջjJԜt Yߺ#o?z}mGN<;V}ח5,VT=bƉzp:2jξWl A{@dnao]vFCۨ]{yGQqv.\zoH-Ҥ tן  E4 KC:Hg>ϓ<{s33~oٙBKߏY1eo9(ߥͦգK[mFu%/ +wLtm1iH=wʺ#m^1ZEx:viVӫ8G+JW5+Zh}e%ůG$"2!F*t|;~3.,ii2л6Ig%J ɣ4ސk0<%<\Ona ɽjIao<ux,U(SX\rCW[E\)\TWLw _5HP g\M06tHR20GOHX%{~u\XpÃÓMd"-_z|7o>`[n~k,\~喧{|4z_qܗA{!g d= Y' IDAT=lmlڲeiϪc+5Wo*8Ȑٴ\A"ĔĹzO/O-apr163N^Ϭ#kI(P bBc÷8 yr2 +Urr^ QqU [LjX9_e&MB:(۴41±wd=t MxNm0L&8.rע+c+5Z8 U%$. )*֬Yic_ Tir湳Hi f,6fLR΁@G@Zfa`@i*K.0R,8&ppNY.aA:5U)Po#$i ^nѬgMLH5whkAkj;xnrW<5Mىcx[wc 8q~ _/aQIV%5myxs!/EͲVQIKf ؗFYK*N&J]Zs0Zi{`yrYmsTV_)fᔁXlQ[&qw+yʋ́lP6׮R|cM2k2D~(zOAlM{\3Rg4՘f蟵}JߵkFGs)_=5^J*p `ՖduOPe&^|zyZ{+Ω,oA;8*\h;?EҎt@3תL}ٰ.YO%rKPrS-Fn;p;@oIOIO۸jDնB ^{E8N>"#=D<\'x|tt+3t!5pcJfq1|?FN) P#Y3mp8lfvDčapm.6<$&A "7Zv 6)_VOh ec-x[b'ONRze9#ZI8"H}{YƑu [bSohHRI0 ha2u\&LjS,WPz-_xy{t|OY1]J9FeNS`b9)b֋O\ciJX7lXGM;ݦ8:48;v@u+P;g%;<.٤ *7ǽ;y)j/qӬZE `111k׮-ݻw_rƍ%'[9~пUz קQӽ=eH|Gp j?0&YmÍy\m?wXPҾwŮɼIFswnI(i`8KF ~ŬM<"MY2 L.YXLV|s)!L1\/mx`ML!ŒI PKݽ{wժU%EJ9~<:oƶxr"OQFU=l6 ,>"JF9SPnoKjW߽Q?E sDvn4dݢ :Я~˿_s`6Y+H`wb@ _>.,z%.F9{pq[ %8c8 9p2.|I+*p:H"1)Ԑ/8)PFu?NsM47VH9!! c6ݺ#kaXJǚ) -Hdz0B&35^Æ]j oQm/"A&W]M=:^ eA­b؂܄ڀm6_#1|v K0qXvD҉'d&P]H<Ԭ2S$gC|$=O ur¶Wf!E.)ܵkכ)G?6?O(6T;Z[+ӬzV&d}m]gJ=]{:ar"7ED<\B0 /F`yx<XdDBDTf!'>MYHwpC-;n8b_W,R{,6!B2äD3Ž2rŋ+zuA ^"4Mt@;k]SCGi \M70AlM[0?{$Yz#Tปo>[Y[kЪ5"Z7׍dǷf͢ƀ IRlvl:__H9lZztv*2b Ak L J̬axK`Vc.0r`<ɢ6m磅Ud.j;xU'tq5xVw [lkJZ~RZZDfUB|CgLW[}"j~f %ANsp2j9BJQI1psHM,L2`Z 'TkD5z+sO<4 d>/v7IoWeaD7s}n3XAke8)´|Y 1xTdn@ bPȚ -U߷F8stAɬHn^ӿM7P)W>"כAѥa 9%ɦ:El> 73^zvIgB\,ERps Mi!Ѓd͌6 a2ؤɒ5|s&ےhNU=Rn$[Brھ%_h~,'ȶ:'JgTc'8\$p&[8:9.dD|?>bM"fJvg@LD~oCY1sV\ZLÌ'u(1-NFHIt]{fHO~hiCسz%[,>9oa]ll약ߍ ~t!o}?rsտ^_>aqq'/-Poǎ6|-gynQCG.vxX\\0s(}Jr\q/,1~Hܐ 3>eFЦ[{5Q[.lg{cGkdfg,_;V||g iY52wb_g|gǕSNMtvoY)0vin*^>#i')bN,lYjZ&8%=͞2$~cVFmm6n6C5_Aa5+)w=[H1U(r\w~ )lP)*)UWB3n~#wf[sAqsi,R[j,X.Aob?)"`O%@l(82Ƽ?>x4kѐ)f4v`poN`eètaeV#£HcsAW:ϊ `Xs8Xtgh?Ol.2&, 1(L9uCU/ϝg11I1fT3G/9V=t6aE@[ktbl޾a!au4n:rڶد7+}O8%}mp[0:5XӺ3ʜcO;G{!_qkM6h`J\ӊ-iRڸ+*[ET9;T`cojm:B EJ1 0u2ﳝ,V+/Cϗ+" Z&bn0$G Z]  2k.GZ<(F[e 0DXpK+_7? \˵YXM"-LϜ2-1F nu{.n:yPm Giknzg~U,>Up\}Z]fwo&xQ2^q!g=ct]_QbT6-ڝҒݻyswB\=- 4lQ"ke=eV9ORs 4pwu "jDW }^K\tEYVn^;uJdԨQO6(1<(TgpU'4ije00 s'4hM+7mn0*=MI|fie \JvpO&MD;t,c(WiAH%iաΘ\=SVZc! DgkLbsAJMvRU%66'.- 7L7~Z<  8:L !/4޳4m- EC.==O& Eaa BN#kldP]KPҁoEss24"d5$_IVʥ*Cȕ'b(7+ i3"%d"7er@\0[TFH]N2E$QZ[uފn߾ EQ"7h߿;N>nB50)Δ~r廁ՒMQYHha.ST]dw',:ZB\\,7L:s :5g|?>i36ZE<Ңm^.:RgY5VpG&Gb"+F< *K~6'Q:&ʞ1:oMD "GDDDDD 6eY v!4&;v/TpTrΑWy@P\ =slKAW>-.]U3r͚6iJbjڃ*6mgϞ=}t𘘘vڽo":ud2vK$l=rX,رk`od2͞;RԴ3ͮ2ڲ埿6ٳg-ˊ+~uĉgϾޢ{퉉ynt'%%,KQX,vss0aҵkWn9Xtcq=bnA٬|+ٳY'ybN>bŊ[ 9sk?L~-^Lۖp"`۽{7ȧNy;8(ܹsQ0 cjTڵ0 srG+8z?K# gĠϭnOps,ǰST8 +dH\%,.|q`cFs?yZn:{۷?>33ɓ0|gx~իW*-mJٲf[ 6 ΍ lm/E\Y1u޺u(^70 (`=)qb4l -T IDAT(9|ʦ#ӿ>;b9Q~S7A̢ẕ,bSuGN18`1zTn\9nM[׌x>0 ۝{bnY~/_.>kQ^K?&'F_ŋZr-B$_o߾ݵ[<qH$IJ$>/8ni׶ݵkJ)~n ;zQ?+#i-v.8|ʂhqX7w78G "?qrk~~~%q\]]c9+%lѽE0}[]YmnQaŻl:z`Q2Rke~SF^jr |)73~(Em?Yh2 ٸ飃1۸ޟ,m\ zZ A\ȲmW6NP9&M&ubt}ĉdyݻ8MGF6-.UɲU5Qp&޿#̤i;6h"N]+xu..5v w ❏Fu 9#3WRx<퐈)))._&%w+hAtO1wZ7Pv->Vt]9=<?5xŚ:ղݺT릮9G,qKaC9h>/o]*|';>3v4?5]__3g-=f@A9v[|{_̫do²mW6Nb914lXϖv޽lڎ~ұi+1/ۯK53ϖ֎4uٌÿZ?y_ma{m]MEIlwRxSyyj.g:V(x9y`s1`{m]/ʋkʑP~4RD5˲$IbnilB/ ϱ#J~Lҟ+w1B}7|G0LvbkHpDAgϘ"Z~boߚ%eE5:{ؗwMgPt-*9[k\XiRT p'"##HRIQz)͡7Sn ۱;#o$ ޣc%e `8>_ Sm֩_(;]? p4v+q`mrTӧ;a}}}?c(رcɧ~~@jcnmӯ*J%<8S[n޷bWHX"שSgLX $CyI&$P Yuww?t@Lۥ1[ZGPǾ#~#~T~z NY2.pxy,ˊ"kg؇]؊'Z_`Gd&]+qqV_$tn+:Q1-'.M-~98(9qnbcBHӢ[<⯺Mh=fQ6 A#_LK5}>Wnە:悂~&ML6T˗/M;CΟ&)AN[2:^Z*^8hܢ0ا""uF.YrΘx #uY4={rk:?ܻwaÆV:ud:M7eYi٬1 nԩ+T˗/ׯ_d7߭4aJqߵlPzZcO?Nы*|ޟ_}닡EvZ&MJܽ}ƴf㸒?wV|ѿ{O|EJ5Mx<^BBBtttq'|RFƍ7nܸGe\%[|۶zwEW^Hg%5jlǎc9ZlI$aNv>88ܹ߳ןa2ӤqY^/]aK+[W|ڿN~8҅k7'6jG&̟?RRR6}WW+o?+@"y-~K?u3E"Դԝ~ t.jJ14m ,d5OHT VB1l9H˲mDI'Ϗ$xǵoq? Fa"8 .]_8_ e?2Z*˶Cƍ,YRɷYWy-xNaI!!!!d@7|=z~ h@@ GykaX^ʝcjbv6KQrni?rnnccǎހ@ ^ ;LϵGB gGѓ=xY@@ H@ ^N޳٣1}i*^۽gg~XΜ= )2@ER+a]\ꂬ@ JeNTdmANcY֩hahZ䞟/D-/Q׵S" ^*Zy{{K$fCcM80l/t% ^ ,ELLc#O2FNL7|Pи\jժyơqJri VWI,F@HEJU6=<>>5* !!!%+Jd_@֞)طKc8xJ=?p=o>lJF$6~yǺ91+a\:R 7O1KǾ4wFھdn⠩'O>@56oӻu;&{Ŧ?~ и \Eyf@<2d 0 s܎(Ql=LxjG7tq1"s|3 ^߬޿dA϶5?'Oٱ rܢmON=h-LdV|P~' V>oBd<Q_]>*X,faTW 1U3k_/%#0p!t4[xW)PGfy6-~9P]pӻ[爤۞6pXJ{wN6Zp?$Y%Wr>Vt*41X5sƕYsk{ G2*!+|5Ԙ=Jl{z䇗vf T*]Сsd!R(WrJ \d.@*u1 ;"VAĈɢ?b&ص8;9Χ?nZ~!o|OnJձ ֆ%cXCiۍKWwtI8/E᣻}4Y;XYolV+;Y˶Z 9gYpaaD|"1Чeݲ3O 1]* ֵhQU3wܹbUK'*kwӉQyS.m_:g]y¿}EjzwNOJ;9FZYo"GDD$I<sv+paq3MB "sA&FXjy un(+)ʕLt+Iwd!h7}[Mo7L[ŭmW~h2,7Wnݾ6Ja_80s 2pavqfXrPȈgMиl{jFuTigixal|h tYp1x ld_ uS_E`]'O0@F ^"|Z{#_p paEq4Gy,#ċCر G<[EH$ 4un3 &6LR@ "KҚ5kt6L&SuV=0ǫ% ) ͣD |\.gY/8^{xrE.)^@"@ H@̬Y]|?rNND%_?]z~޼yk Z UpӧOڽi`=&}Lup1… 3g4HD{LݠY_Kﭘ=g:u9$ stac8׵[oƍ'O~#{jLhì>s@QZMX8ȜN<OwF0eh D@V .q!$'醽n(s&:SRR.]H26t"^Kծ'_ۃ[l,p/k?Pw̄m,5צ:*gS VHkױ \_܏yK_OkXXجY"?TY4s}I2yF$|J=7k8Z|^S/aowϞ0g111:el@I #NqnڡC:tҋ%|=׫WoŊnnno"?9[dj^H D2f:E"$Oֱ߻Q8\Yx*<ܹsK/Sff nN uW3UIJ mڢE7pSPdal[ŋ8Qnu+L6V<;[\zhbZT³zQ %73=~AqЫOooƬ~*kE(g| 7-40Sʸwp| S.]3)r9<%+o<9yd;5 lzke}cx8/ւ9|=iN1~߯%lX@w.5=#K/졝xSe/Zu^㽳?mn۷9frOqKvۧueڴaOL\B]yРh稿"isB=OѰMM+\%k9wp۩Vi>W!U^֤嗧J=5bf9PfoVAӒK+U1q= 6puFz3| |^ӕf^_L3Ys׶?ZP(nT/۹di󎓍0}D_q ڰ=C+ /K婨Rk óB*zGLΘr*JUt_xc7B}"=z4<* ÅɅq(NpRT7&֘qZvz0!Հ.e1^R>Nvw"ܹso$u֡8jz hQHn@/յN}J~Ao{_ָL:?v1ެݐPy8fѪtFP٦G.tN!'nz l_dT7NT^rSQ)9e"XGW%Ns#i&PVC/t>F=K5e^t` ڽ9z@,z|2̶ _U.H_?mƓ;;) {81I:(<իeUCNKW^{ NZu}mc$J;^la8k[*xMҘ b|-B; ";h&D+&uv)xIG #7[#[`{Pw WkGa f)@rLa6sY7@[<߇j^D6I#ڴ7Uhu H"~C˫lm`㚮$>< ~ =kww |ͬSdwX|G yXǁQkt}ԯg(oǮߔ1S{VWv&֑q()(ۆR޾R,g3okɯ=дEsnA:W~wzkWN[xR0d֋vZ"kF8$:дE}fAN '#+yEuqL/Ы ("͆ b[ f mT׆3}~a`af p&7wn9I9Il{R- .<.Ŧj4 d:Cϰiͫo~VS4k^ӝn^8}hgQ9[Q`1c1KLO\ZNR԰هś\ Jm[W%8HvCRNݹ 6-Z7?nOTkIEiMrF7+SQH)M2]C:[&<%d^kIKo z;;JVVVAA-j/8U; dJ%33١`aazOPRSSuttͅ)MsodbķU+ 0DaHV$@ ~HL)2@ "#-9AOI?J-RdB.$fghϡHTl^yF6a3vn=YTAfhw82 P Ƿ?!T=*!zKD >]+_E}|dQoW(>S"M IǷ,2llr ps矜H^|MT+/Ri‚h!EO8dPDCW*Y[/}viSOr*Y\*,joܾt3Uь&Y3H#}9/:PA.Tbf%8U 3?!(]Ĭ*odTg3Ll>6OѰ_-(}wظq>EcgFaz5uw*ڌvRK}_T. ;<<cWy yԿV GcܿjلVo*w7DdJb*!?GP|۔%C֏[*diQPi+Ov͌s=&(ҖBߔqI8=%/GSNGQTSĉ,9]|>MOs&ẝ٫VՌa֭1 Za?=HߍwqO`rqq%',,Xwyƹ <): m#_bƽzﬗϰўCm0HTu!R!cNoQ{Na;\w|@0o&- zYwJkl0[r¢#¸ {u.Eq28TH0@[է?W5u`% G=F;h1fvF\L%S-,~ak")j!1M8bڔN~Ϙ7N:i]XǴțSNag^? P%/oFf+I$+*zz࿕=f.Ā'%*- wz/G^0tnO`zi3ekP$XmxYW$uf49.K+OeM&Dzo;0Q?30ËLÏ]xg/N1Q96݋DAUzp-@aX9NNSFl vÎI^;ˮ^.e6~{¥eH{Te+Jr/~NHqI)闒w ﹐]_BU/ xqD5rs/fqPZO^BnoM(:˛;!1Ë13EK)rTc>;V,<6_k}?+#Kڷ'x Gx%xN}4Krei]8t "syOU<)_qH@Bh5e@rѤcGw֡ (]pDQD1tU%⠉!qx ;a=H &&#nz♈޿jOr(WL^z}NIҮ#g:ϑ?..J'뢓uG-s<|Q2fGzg_Ʈ.߿WFxXL&N嗿vewJpji5EQl 1a:MH%ykD|!k}&yL,^=ץ5,Ca&WC֕s p1]Gwnd|D &ښ|F[۳)C@b rW1rfoxp { oǏ.""BUPPf%2Y# jLAD\233===  %55UGG\4iI@@@[:1D-m 3Q&zҵ@ =jj44Sd8DƍmaÆ!EF Z7...mJ##LF ~(+ @@ @ H)2@ ~"&@|E~_PFD ˹6f\?_kioY c9ˀASpxr:8j("NdYܴo X|v}<5^¯&H vl ignd(c [y Hc'Һw] &;X~\\ ]}q?OʹNf}F#?ƗX5q咽;e%F3l琮u,>ki-wqcdfd*lh1= a1q.V;>Yl4WZӗͨa;;;hأߔE~[z0؈֪șEn*$MKϭjjsUSVB<z$ccfg=^2‚x& ~ Z)F\+7M*ACgwVcɼ@V\WpӃ1CS:s1kQy3xʼ?)gj#8j+Uk:YTQqi$m[cI (q2ڏ_8gjg-n'hXuA(\fARN/ENb"|30~py)HmS!9g&fxi8Ro{xi+Q$~%/K,<$$$$$$tu <5*>FN"mƻg Uzp-@aX9Gԣ3c9sn؈n8!'1D5㥬ھLpov*,-.dZCgH4AK20n0OkqbVfowg'EįJ_ݜG;8/{vvvb|dy*Ԧ }ՄU3ϥ>0ZO^BnoM(:˛;E>p1zZacgXSSE!RXᲴ4 iGʭc=HscfJ>zJHSßKX>~K<}l[Gb;OC*\fT xq4XNMQg9lZmgu(]wԼ>2{/:xɬ5IʌАk':\v Z Enʡ 0LODBsȟt|KM% [5܂Po4js<|Q2fGzgf^J%|f 02D#8_J<*uy+]E'Taݕe$~xBIO|NW+u637K<$#eWO ]~?hI54u;&F]ؕO:Kfb#p9\q6iCuq_nJjO(`P%V~vڵkGurmrȯl{R- .<.Ŧj4 d:Cϰiͫo~VS4k^MNwyElE 6n2px4/j5#.>q]j9IQb;dor5(=m]9`k #U8I9}tF&ڌkej@=Q&h+|, t ,Lw=0&O tYF[۳)C@b rW1֍t!foWzS$V|E.3xLnTҬM%=ȬW"*H9/_}XtVR~m#]DDp%++ɉ͖It5QϪ?e`@UCe 2%璙)m#Gy"tӂ݆{ykы?af~ۗ{CqK%svp ;nޑ]{>ru:XsBv ,,,Zo)Jjj8 i-Le|(= 5iDz'>3v׆`/LՎ=|M L(͆1W4mO^g u}1D-k׭CШE#HLUzp$oop} ]^ 1`߈^̧Mlh4#io#&7_A Z @ H)2@ "#Rd 0dMZ}l묂>Gȧv*̶-Ĩe#!۸J-/IJxYEfLE&E~SQ$(zbVM9=EQoZO' I5^¯foغ5fA+,zQt7A:7HߍwqX&;X~\\ zuWgϓr.@6G%VaܻgzYQ 9k60 D%zZw&kIp34LKi5.<qP|` OK]G7d뺈˗jm8q mKQ`t%nBUgK7~Nǻq +r^f0fҩIKވ"FΙYyĎ]Tz[PeqS?5zj`+OQ4lέ&2v[xB*Pk`"','lγU4l5y}xǩDM;z!jD,""h Mm#靇^zEC Jb-,~atD ER޵ksXbA_Cg_:y7'ZS.. ݶB4`(?EW<ų[N˛#.3?}f-Zj%9eMR:R(M+{ŦM@UaZ`# D1n*R˱ N>y;ez WXߡN䅷Sil-esz0)x/:dTRjz| z߉˩ h[&>t灓oUC䢮㓒wwxS,GЙ]}9d )LE.+:3HMnQ %ƺ䨟$ə VOR]ɐ.rJkm$]f{qV0QZթ?zbPc#wwz4rFnmC4(8ˀ1T~#\[_y#}r.>1O \?Hb|KnRoi.ek8V"=*vY˽QڷTZi-[<ٍtv |lab-6fFT@a)y+οnфt2e8 IDATI2?/=RiՌ*Tܒ)6dЙ $[hB*]_BUɯ[xqD]Xj==x { 5|.oUlX 5: 8^9a,^ORdLهH5E|}kQȌ,Mk>R9^A`&E ܡbR?UE׋~,OIzS1X) Lذ؞cO;b5s]upВVZ"8͑K0נ@KzWW{DtL ū6 cg)NWV7 Hpx˘d )oxOU<)_qH@Bh]2MspYb{Qu!9A;$Q ]U8ЧFFdCsvzLñ1L8F,gЖ3z'ը;P&4-zב_]3y'iЀS_U{*'} /sДC+WtpK%ҺRKƿf,Om2V}7Y7 /-h4Pufֽ߯XHШEH)F䛥E{U(:cW+Qy#DȤź:[ڗqeC?ak,;ݺb/ _عtd;5ׯ֤xuP\?jl?Ο<`Zr!hca  'vxvG謏:=qoٰaCo 4H)QlxŬ>t~(^)D՜0F&ẝ٫V)[cB?̍elAw+q#qLDZnĞdۏ+9aaa2b?8w'\B'>mqKøwS6sH׺m`fJеpԘy3'oY@zP~u!t"qui'D&d^?w{sKֵXMIp34LAm'RXWӒWLT*/eQPtL ~⫧D >0 Q">1llr  )γW\`nxٲeH@f hs4窦xHhG-"Έ{d/L{M0?_@S$]VoTރÇ.Ux7ȪV┋jS6:=cz28}`Jy.Fw-Jb"oO:y,@"yVsZ$ wz/a@Q :1QҴJt<S>T=efTbT&?w"u:wđf]yp~"͌зwqI<aG#]$ŀ$X`ܺAN3V 9,.O΢ڰv S>}"7Eic&D-/+\1JM2ٰ}9Jza?/H4p=Mצ(ϯ.cLWp Z N1HUpmiDu.2NuZt"ʱv6ww߻iيןi6K{ɗ\z8r.4Ԗ*-J#~mq&CR IhG$D=H;>b8'474;<~]HPCkoq3"RDA 9,^nTҬMi$h 8044Bi_U9< *$*%xqD5j==x { 5|.oUlXۨQsyb `QR}\(Tc>;V,<6_24}ɱXKF"U|]+Ƃ;|VJ`Amt@:?,Bm xQO܃ۣcwAzvx=ΐGuk.E[u=k͵}CPa(ԞXq u\%N%3Y=5wʵGƒ'b_{cGGE(2T`uG<(是e@8(CrbwHqO!8-5/O64wa')c׿aLDQz5j.+&I'Mu$kpFQt,^wQ^ɺӆ*?xЈa*إwK64|3„.Z&VA C^:tvNgH9'غfĂR&ME3@=8DwI r*-X±֫}*<ýnόݵ!/ ScwߠJǏhVȉ9eQ/e\EtR(e;]])y#nƨ{9^(sQW!_tc2Cɫ\P+>{3uĸYRkp?}m77ݎW̜9i_ZP\x\Mhpx2g?T]4T$-F=MH%ykbwtC;يld D#i^NzzWC֕s p1]Gwndh v +hke[9@65Mz+ a4UVsCLWEQ߳麀e{yFߺg'˹巃w8=d|MB!`gg!\*((prrb5QϪc`@UCe 2e[W4|!~vfffzzz.D,,,Zo)Jjj0% i-Le|(= 5/ G.;֜/qJ MFrF#M3UAk UʏښR%tn5͵2+*2`-ږtʕ+l6RdQK3Ks.R- O#~`طnZti{+ )2!q֫68Zt*]'.%L1[qqtttKL%Yyۏ*qSx:pt \s+U}kݝGr_Glgg'v MmLkѣG_~E@ }Ga]E]w'%%9pCOu!/Yu&5)zwOŽY{{{׮]k71 6 EF 8| aIz 7)d~^zxӺE:$RVQ^/3R)*γW}GT VOA'4G,hLkxٲexC3#%r D9ųT$ Ɋ}*O4 <ߥK޽{#!"#߅gϞy{{Ǒ"#"# >O">~ᄺ,^#qMOO Kqqq6sx}ߩO"I/c_zRd`ƌ娨(<OP)25Rzh6Uz7mO}G HZJJ@UUxQ!6n_<0~eU3dDE/,\d$é̏߰]waOlvŧvI1/.y ]2>%^EAH[Uufffiiiiiiff`|@8 pp#ܶb^՛ػOߔAlѩҺ8y>uSf9 < @iႉE;抲^@mk~_a?YǾ/d Ba±֫}*2|YF>-]zs&K7ӥs3b֯=m\ ظuzpKs%ۭex -/2u:R `U\\\=ݗV$6 (>t{M]3~YKza^AwT YM[l%,Ή?|LAG bۅe̘X c_9p2}G﮽>K9zƧR~wֺCE>L.f+#b_fn̨#]?aWqiڣf2E~433鉅EIIIeee6Ji);ܐشw3doPуtWsqYU}_^R{fK&4aءlXkcNŝf̚=g,$\u4ow,r`Gk \-`Ovu)ܺ'k-ݲ/&6^ƭI~xC{Ì/z8?|Wу3lhO Noe~lL(usɿ.[3/xgvZޤƨ>nÛ]Q @P+**@IIN*%%%4:p0U앋}&e=LIADFr),,1U82t9mIDAT&6X _~:축LI }(D! $oрx+ZY!35Zԝk IkE`6r&;ft"<6؄%Jt|c*lZmA agrUc?8m$Ob6-i) EvS54`K– ,g٫" 'ϕXZg*QRFb*-ZwO?l[e +noKJJ233\\z{#xgϞ}0 (Jnnoeeeee巘Љ]N4m~"_rj?re'M]u;h8AQ߹ߎ3#Ҫhqn9|G62K& _v:K8'T0 Jey"7H pdRUr-nC##'hѦZ`D!UPhelvه=s4鷊א333̓>2a@AN"dG\.`aa/Z4n=Y{Nk=*,6t|p:RV,YPZZRZZRRV߾|&> 0G片<&jsTL2^?#@=jf,v5Y:'Ql74c=]]\AGG[]CMM]ג>>8kj[/Mֆ,,,lb"#2utvhkϷ:4ZBQO=%xԥg7'lШE;VݻRw$ƢTU |A'r?WzT먡qdHuV!h@BoZwuAwPTSRdDSqrrjc=}tݻoqD"`梯|܏c<|LJ+4ī~amP#! )2+*b>y":55$ x0—4ei?Rj!;9ȪZzzzHݺu{5ï[[-}`™>RUҔ[]2=ߩF2/ @ Zox>gZnιyf/YS"x,hp(븢Ჴ`bPTSDSAZ 2 +*X^Qrrii[_}/>–]~~Ⱦ|]L҂hh{d O^=/ x*\ߴ}џlҚcc EyI fZ{=@QM3mOh#Z)޵21!hPض#GOݩxF9*ei0k /H\8>S+-XE5E8mO82]`4tpaP>_UU],p^ݨA EF oݍhr Ș #"#?$/^@A !Yݺu...h#Z)퍶!Yu?%Jۀ@:mO8r`]3yѦ9䴌'q^<;P~ф]|)Sw\kۺO=8b}Jc1S&Q~nLJ'*ua9fX#z{]׀6pC\]ZorN g+o\'Mڑ-s1j=[3}-ZiS}a՟2ca2m>=|no:T?z|߆=[&O{8{b#%<͘mvi?ǮD}}KU.9,xh6d윘YKDq?9tZ= k8éK'מץ8WU0AUJtԵϫn$g_ ]p Щx!sBw-ׅX%"nsW?6V l3^]?&Gqڊ,ȁm V|e[1,-jÄq68k y^|́FvnߔqstIwo)ܱT&=Ʉf5Wĭ#Þ҈O :f}mfz,S04̭ǻXpxuIa:i}:9x:QgG9MI)-?_U--!VH5'{N_8fFp۾g*K[w#;]x*򵜩q`={7EKDRosu8n*TTљ;SGjdI Y3D̟3sԯ3g4sV΢Fw/G!d+Y9)uw~J4W8?z k3:o #ÞR+d/㦶SbeMߖ{#Y>{1Odx9ZL;F/͊N"˭/wSHJC,~xBDwBHw]rY[Ytfܕ2iI8ܬ 6$Ym"#]/~2ʎ(Ua||d zD~q~Q1G-A&py8eۆ#raǪnGTH8"矣/XXC͜D鄎G?/C993׼H>ɍㇷ._}SFu6/m֡׼väM2zq@førZONrX B,~"`EF-'n>9Ꮠtq?hva 2篋մyVXwr޻ (Ln: gxvWs{)[BvW\<| q1@}E6䚉?qӖL@!"T[/u/m^dzᓘg;*͞daTi?oR;u_F$Q..K;ZiVĈBe1-C yG-_9.V/ﯯPAuRs,UqruYSP&a@VlDʗjňZGҊܪѲ +e+|>#ey Ў˭#Ng B($Vy~ڱC(w_UF%fo ƪr+)m'ws ||}\Ir'.t`Ds6y_>0s^G]+DYo|D#g͗v{6 (ĎZ:0".3c?Qt'sZV˪cYcE+WLm+bpF!DP=v jN Q*;t_VAcPN (O]0o}X%tR˰F#˭Mk.U- 4N_ԽW~q3pp-IfqH3<}-mRZ@wpg`Q܌Wg痰a8K|xm8pqv>-PSW(źL/Sm~I(9zGQG:j4sa__T6x)S{5F(Q3T QariC~+#[Al<~eC-G(pC x<._7m1QiQ222Wp0Q0 F+!2TkLkhrQ0#{kF(`h!TfsIENDB`sonata-1.7.0/website/images/sonata4.png000066400000000000000000001611261377142014300200030ustar00rootroot00000000000000PNG  IHDR sRGB pHYsď-;tIMEG"ltEXtCommentCreated with GIMPW IDATx]w]E?g׷dw j"E)*MtE"JQ(AE:JIBzHds~ܷM M@oy3~߹9g"D_p B"d!B2r!Blᔅ":2^x;ΐB,ai>R}{MfrOs-"tிh2Epiͷv7}~n\.LL:i?|} !|?|@uSOH>/zC- ڲs[N2%ɿU'Oo~bA?pr hhm-M񃉩56mZ_:_<4uC~κ|oc#Evɮ'>-#w틚Q_oJ\~-y|_\Gx'IJqv=s={=45lyշqNG{C2U.A^>ϧ~֙ٛcߺG5 Sglzu쉍('\tSwqI.^xᅞ:^_}?sI!;K}:j)\~a[  `9};iƀpƄ =S۞]x_kO?}w#.[SL6_3 XNѭ?:bG843^I?u[(SrѮS>.8;O=. ?so>ٱuo֊dq])V$}|+W3oZwox}|0 bs:@ 8^$dzn?G vw?㫬)ӆ\ҞPqӋNο+Ma'詷hELz끟N<=]wuvU<?d`r|'_<?8XĒ븄r? &/4Ed2ayG?i+{7>訾w0QM_T{X7+$77m.MV1nz(ٺvBGlͽKzk_s9v0:*_r"@ 6WrbdL0PL>]=kWc$l`v>6.?[|ǜ55^,ӎO=ŏwر)pݗ0k. 3*'ck^bB̸|ERjXy&Z·xz-;8ޗc7ꏉ7ӎ/~2BuDB$#Qr=pM|a JzDD;`11\sgo4m)Sw=j[M^[`Cj˄-kpv\:_(gWu {K)S}ԩ;uc8mڴbΚI Xsjyu]%m~ J_ĉAG&⢢ODT !ܢ@>gw4*j +VڟcΗ/Ćm'{/G|:hQ?tIr٣뢟۬O::k߾|,5ӇƌXyI$yG&0Vݸ!'pVw^ K9\=}!UU&r5ꋖFߏm=’jИcϿi: nտe%sBwb5`G$^1ҹj[؏ޯzrq߿ #-K_n:\tš+7YG?]}e?YU/={2-^2:WdD]~ł'sV$k?;>t_< ѥ/Ğ} Q4kXl>SLV|&FҰ#uS ÊDj?IyibDaX-| nڨVU>[|̀ 6>{T,Zj=gҲmcmkWD,4m2d?L<5 iZm;"Dz_U/qV]+mWO{od"zad铩'{In~7 ##oo$9W>lxEcU߾D"NK FO#KC'3btyc="ʁa_% )D߱ݷ9;5F7첛ZpZB0r_5hq L j1Wa?Ң*ೳgmpV:g̘~B0r{{{XԫbEUeĬYk&5& D@DDDLL Dĺ̩DLD885b"Ь53f`bКfE@Ф<  4kMt:mC"Ħ̬3{} 4+A3u3/fA011W0!+ 01i f$ Zc@D5|V 'OBOY10i.!6%FIs`&*e,+ ] T.oY꠩fIZ&hKUNʬvu lJ6")dsJ]NG۩@##@(0P/a!BjA{he-Cm`hŬ_"͠tgFqXw[PeW N nL6%k#Q_;.Vm ;]R"uȤ,40|Ǹ[PFdfD"26iI!6 Fff2v110 kRāL h'"V\!eRQ6f".^o̧bSjTbTjHҌ iԔ%Z7h 3IH0 @1Q?v%+ (\!BlzŚ:2o(:P2 $=$Vq53hR{~@ l0H4U5tCnHn3dmcL^ufI@jDcTФ;H u#]ƪTo򳋻>etÅxpBlD >km&T~]f*+ȁY3+:j @ki$l`|`f_LŒ%ɺļE A[k-)[+3:W:cbɔU8C'P,8y4xy-v1ߋ?Z!dV04foEw{CjF!ED{{WFV{D}[y!``fv1sbK11!͸ MɆT%t n if|m \Ql)bf,**v功vd%Uј2ffwE #pwi~yri4-kjl1Wb3T-z1Q˟tj31i*v@L&@]\/108J.ZdO_0Yj&MAi7^@d$RYnDQbs_&RB޶#H g|\yĄ}[eew[LX7tI@l3gREDNJ1a[G4]vCN0,X2v9#kˆb.SJK&"}ߖ늚60!mn̈rz= ͘quf}l*0>4}@Cׂu9`#9Fff`WNG{&(wGKg  Cm 䖍[NXɈƂRİM%A܊Z;&Y=y!ݏfZk)Rj JRggi =;DjkklvdnŊbqkg\/-c׷6uMMm= jjjִ2tWW0x<qH_r9qۗȫk P&\v(D1 |.KPH@D4p{Sgɐ[k*w}Mİ!ٌ5u09,nDJ.73~0gH\ֺZw2d4Ku]׶{|2lwvvΝ7gɒ%k룏>lnis֗. _rIJpR]]8w{Wϛv@>vy ɬY2αGL6r[R\(|덱cǍ5r<>@KƏ1C:d|VSۧjM=4 @C@;,{#"(EfϿX~sY,"xz3E5Բ( 5 ʉ[CHUu$%L9wŜN3 j/uvAπ=7tg (N4Μ5c]v $N/X075~V|{\E?L::} ܜi]Y!@!j"D Z Q#ٮ,Ιf̜9s7v=28l~S+8pK/?~ ^,Y)"4 3/k^ X|&*K cdP/\du_7s֌`/G}nvrjkk!&qp##k.pvW8fn러湧cx?_8zm]%{ץknqx[Gr}+#>;hѢ>ϔLqw{gMtntXO'~A9Es9/yQA0u,Zs܊ Pُ5ef Df @PD4f B"VA5׀ Q#b 5"D(---s}Gl馛 RzG_y5hQ~\p^ b'g9@V7#<W_l'nV7[o_r% |o._Kͳ16~_Wlj ڼO<`ۤmvrN3oq?Jvu#G9j2d{i֒lĒM+μޏ`d8Wdr11VDEciɣ"Іh3+8h A1Sq h"Adւd*3{0^ ' …aH0M+0N_k%^z峅b>h#N8[n>|Dgg7#w3#f#wۭQl(*迼p̎t&L[n<ɧY1S.qw+/+69ج WS*=v{aǝF duzqޛSMjO9msظ}X>wWja+#{p˶RRD|邿deLa?Q@D<ܽe8زHZfSXP! B `w 16Tfb 1"3!#2a9= [2 dQAY?D1D lG'8e%ͦBH~<㇦i 9fRQ~ȈRrҺnҬPކ3r"HiU_/w:QiDt=W衇{ ]m_wK#BXҏ9D؈7ݠ1% v,4zw۵NņnaV|­uIkiיߺsL ?`3+(|}i"@0Z;[fS(f n~nsqIҊnik]l jd(h( beyDeJ$bv|B"1L)I0 0!QdJY°x4fi+IcjT@31$$?:p ldo,> x=;X,:64lЁutUuy@EddDē=[]]}igĢ1s:w݆J)byz4@ 6ݯ7jBɂY3>+r-˲""@4eYvP[Z~k)Mێ+aZz qEA[8q^i0@[-+5j֯u~=Ŋ5-ͅ뾶] '9#Fp]W+Eó|nz͕ :t&],]fL4 bV)Ywv"bm\ ʫT@y,xtMhL,dw @df\~g9^w1o!' F̠f0,u@yŞ`dĂ OZsq4d̊%+bIRQY&DD8aҸ[K]ҫس~E玡-P<7ƌ'OަX,_q+Oo蚚D<Ga Ttʚ;[:V"Acl1(1fm%wˁ"WueyyEO)E^ "EQ15*IJtUU2j4X)miY _B$w\uUȬ6l9g+/9λn/!TWլnwSgMM|62>\?-޲=oa7۶D,;SZH$ZrJqjS͛1ę7!6Z 0sGG{|d?FF(׊fr3 +\e`!"v"j%mRH&D+W츮m#b шQtL!DFSj"b!5/X $ $`Lژ5qԠҙcw,fދ%j$DCċ~ӞrωB}V@˲k/)euuMXa'WaQ|V}}F y^QS]#iaY֙zD~vW{@ 8ėJ@UJRU'L3ov>(9~?_襪rFH{nNФWZB* O3ld !@)@ VJ''7 %D$"8E4G*VUۘJčtrF4nG :fGoqf4#dMu:AJH(հn:jMd쟍|Y:!D>Ⱦ\pޏk;ޏO,P}.d ^6|띷ƍ gdZ3CP5#C+-ɴJ)2aaCڀxhX@ZF\߳>-,$1Pʕ4'NVJ+?IfӐLD}"O 03䐆{f6V?bDM)}Pť]m!Տ~ 1!*["=jLC5~I 4`CX;iGK IRiC Ȥ}Z[ӝ/=ˣ4ݮ0S5ק3z~2L*-fܜ sD*96ՠW,9TFH[@!<{DʔaDFCu0",FA /{,fIʎ ZEnj\S!2%P2( 4aJamF|e>뙭\5%[]WS󳎗Hw V1RAmc5% BHa.TľPif?pCI7Fj 1lL!e yg C# 噎u;+$ `6Z:5|_1B)ͮ(󹮕ÆmQ{P"FW+ F{Qt(.+$!x!?)XoT7a 3\lWȶmtvepzUP9kEݝ"0n>(Ar82HE-4fV始,"KX]b4d"Ό"]՞I,S Z2<[tr<9#5p9x[Ƅ,A`d H45\'k0B>jM2`lI9Y[n9rцUA뭷1o9  8;F-RbߝX+f9D_9|~~UJPtPϔXiK2m^"0B4O&,Ӱ A +Zn)fHi00fDhy﭅]VݘTDu%xA;tЉSY&.]ޕ/tK.D @NK܌ IFmmdA5R!&팙4"HҲ, 4T%FJ@fwUܴ% ʊ&]ʹ k >`(]WYFdۖiib 2#Bi0 ˖99D$#W㊱U^k.(dLY#VԎ-Ś+?uʕ"{@à(Zm+Nj%(#0jWt$ CHbA|bf6(_t+O(& dQk@4a` DڇbS-zGf@Фeq&q}?HˌF !$#Cw&\(Nuw{LiF`BH "(JV+?t"&f#s eIfL\iډx.eZ| 2镯2vٮ*Q%= '0"kh@ 9s08@ +* H@10Y=hBDizbT-֨ԚK3TiQ|Z"Ҍ 1j9MGRՍ&* KLLHSӶc$kҬ#@"  R )ahfSH0BigHLV 4d?>Yo?7>lMAxWW,BYϼzVN0DdXb͈R`uR;Ɏ&2Kz ??bQ?a~k^}/m~ݯ4+2Ym"Ħ=V&PL^QPmʘmNi5 AԌ3"# [Gem66rE-\ۮGT]]]mZ"B@$$j-0P@IƗ]l[Ov8)~nŽLqJٯ33,+n=9]GnϭǞiF;ioASQ{m^}*>?'KZ} ;OTk ȝ>j׏{J녾~+ ^833HHODae DRʧcKDȬ[/FӴ*b Gʷ@PĬI?C҅q_~<[,11rO̐08*oO>|kk[ĹW6Gou7cL_zk6=]{Btoﮞ {a^{x?I]]o~w珏7n_κ?<֑Wye矻>BȌ\XLkR @A%&` LXdeJ@B$`8uG L@( <Rb"6WYj\>3/?v;zniI0 y?T l}rsn3ޜ^s_}W1_[jq<;jXMLZ?޾!??m%yON>!jd??zu8/E-UIiO=p:_*ݔTQ]!Bl|"@:P>t;W`m!2,Ff_3 a& Y0ʮ` G$0hr.d@ #DDdNĒ.ycҮm!mdid;:͘_?zb6r,#1%~-owy/|N;]أLVnr;_8fƃw?[07_}>y{+o}jF2ܝoNv>׮ bc2r8NTq0nt B`ήR.aZU1;(rES<|PS>컾{iZR$#BϕsYĨ9H.Ȉq+hhg`vjG rSQ9Nanh4- *dKG޵gz;|_ȚS148/,{~cp BEșLf10WX"P-(B)Nje}~X"O֠ivQz{n.Ye9y[o!(jL[":%֣joBդQFk4t:5~> ^vtlMmц꺢ZFfͺ+K.?~:778o^_}lE%J} l/Kv}fgcgЮ}#M|5BX_|3gg`@rl22H H"_xZGn7yʞ0uSl=pVP?a9x|2>4?f uu~{֊]l{.̞߱pq"0nB4sG>4”Q) f]p=#QO%Mæ.[ٖ&.o_":,c_r%T[o}7z뭩TsvӶl{+E;fW_48#"B[?^fVMWn:kny^ћG_;^u{\_*}ih~t0NW >ۿ=/ wWFZ խ+ ABd \ߘ ّiNn9ƢvJEڳmL_Hf 4&0hĢѪ:_l- ;|!f](A'naN7>yօF_nLhguօ^_juYKse[/~Os%-Dfаۉa}֟-Tw?uwZŷQGg|0oy'EuV{eKh4 v)~t0ӌ;yӞJՏg+ !B>vmCs̙3gNyq]՞ҊI)Hy]/|4{ĭҞg2r-˲μے)(:&̈́}DfFk 6X-hێ=nEMڶ"xHw,<锳vzlˊ!㶟R^8뚪쪁T׋/zGqf͚u7$-O8:+n??!ӧ^>_ eχȀR01DY[cά͝S(yB \?lĠURUSd2 ΣRyi~4 Hm@7DIiohu>dλ:Ld;J{-7}4y̔ȨԐQM&>~cvHZu뷳?{[s;>q`NKS'CP(ZseBDp )uQ>`Hǫ]jkm1;g_pNᴄ1q"1i`&r; dIɩX/tLHN"d@&B4>Y U4e"aUH|֙uܟZRdBAu jKT;N&RbҞ-; K`l1NgKAZʾla䔃/rp8!B|jNLT94A(l0tLIKyY9RZRB"J tU&8p:.&6XP2PD"R4=cٲgj)t%͜XXkb-~5ui4|HT[;Ǐ뮻l=!BR<"ZC2 5 0| RH@. KAc&AZz$tP7D h#g(8^Kri'zoҋR)ҋTHA((vQE@Bz\o;ҁ`g}FL0CB܍xiX#PJn_J޺ߐI]רS(GS"ND 1"'@ >B! !yHD1E "H$D @0FaF0Dd0Br@@@ U! IDAT0!,! #,""""f i"11H$#G( )k_6p`VvYy/*B!B` AD &i F 24 c ϚЈ X`ĸ1"H200!&y<VZ !A$KKH2X)0,/] {߿UV*E)ϰr: |=[~<7g5W^?0}c~qykHy:Y(Z%#@O B@x"ARcD@DB-#"O'"  1NRj_R{Q5Cg}Fxm\y$AFH Iޫ~#)2" FD$%eAX%a B<&a&D <H^G 4jҼ#6[OFƹўvr_h^+Җ|b oT2q~^pQcI+- u¥έ;e'_@e0!RiK>h?c$__~2na#x=>t ;$l~- }mMZZf6/*\]C_yW}AyXE.X!B8Ez!"!@ -D0 `XD0\=5"0a b9 A 8 !A=E  a&R@$BHŗW?]]ܥ_؍W.>F{&)|" }6ؙgQ9{SYѿMlkEݩ=xΝyf];MڍK/ۼc;[X={en_1O:E Ih|ui+A/\|Qa/Xr]Ə@ڑ%T0Ef2bO qRuTʃ{-TdiLGBA$0\b0@B N g " YZI =n0 ̈́`@һDpe%j^CRcL|m/4ڮ_ۏ^T8xis'l@fV孏G+o;ʣh!m|-[~>fbLb vW.鲝WI{}Fa#UxUUPYע;ltaծ'W\e^O'n2V~MkJ+rq7!+BL\ Q$0H_D<#қxEp!;Kb0'0>Bȳ!,)@Za 0@0ikɩAr!cB:q{H;e^@k0g;^N4H1Eg3Mێ^e,+{3q{4 .4pBvҍ6n kw7tU_?oehkG-\ ֯,-Rs^Mt]'niqvqT[ХyuW̅\]D=mo[_&)&.P2!$}H-0 "!@DaY!h#@=|`rYObi#0Xy#I1!"`&`!!@-i)y3k֘NSm-9~ʕ[vQHJud;,BD"1`ɭ1bsb""!8O{ɪE0 ABF ' f`ii?@"W.4%"XLDF  Ro\!ze$knP(eV,MW# "21a aD$$1AD$y&Kƀ " @ !I30#!@"H;0CH$KoyYn!@8ϚgX]KS(rZ!% "t_"͇0 AF`0,ɀEDZN< D ,A#"J4@0ViU0&!Khg%0!#ҔoP( @KR X^ƢH0 b< `!N  DB@<bHiM)FfFmAXA1F PˆVA"J'ByA]80d: IR؂oӾP(ǧ< ByF/Q( Ud BPEP( BLP(T) BBP"S( *2BPEP(J.3c6UTˋȂ ܼyi(D*Y;}}} óy&?m8`͛ 4xFZ~رPq̙gOPϜ9SjU*eUd 4^<ŭ{vQB.?~.UR2BmHMMx;&}"#j֬tS:g37n\=Q;q;V*FE7i9ÇNo׮]6msgE<`Yv}B jv{ZZڏ?~h۷ũ~lߚd)[3.5=5op8VZU_~~{EgEjov׮U7nd2F;~ijg򫽽z~ cl2!rGv%*+޽{ݻQo>|xժU;vȟ^Zv͜97}Hc-[\{2X=uBL&!QNgvvv5EQ]_Vx )*sJƍ'vbtu„ @}C@DɫU(-E-7xu;?:~OX^S}ô\F,'}W?~:9(wdggr^]\\S'OW+VqO;jЧUgsoQ󇷿;Ml(e[M7c`pn{>ݥj ,NV^{kz_0|wW]:s^mK&,L a۟߬Xdz[vqu$/ԯA>o۶=! !e1 }c=rBev[vlݼk?9i`Ok,esk9In+B'gA:K.ڵkmWA후P>ӾqU.6稽|XO.u؊3!ۅ7w myOƵM{N^;U0$y&w׷TC /[*drMx: +xpnG]>>@_KBBq{NVde}"^y#?ϟ(91@^bgrU60rPeԃ.OJ1چp`ҫM5n2ȵz8"Ǻ#G'Σ# z9⻱`Dk1qeWnA}7 cR\8~D9^3*kNiHG FEP(z{{{{{fsK2uMuY)_7~_ i61qZmd[g% ?wfWSלVq͆ 9k|~fM)r߶wwPYU؛U+x R5k~;ɓ(JY6#36db0}Mv\uxnFM@dW^\Ybk r}hek ޷S ʝz/9 1kXQKӮD = O߿S߆V\HUmiސs;l*W܎:i>aI§AcBH>+O\}?7E1gBޖeU냛8`QO/o9fAb:b˲i7lS9vE) )))iiiv=33v:uqӦM+ԩSB}э$Q`ڢe9;JK袒y803BpH ڭ]=gP=iXAڵ[~ի 4(A5klܨ Xn2X, gddt jSի?OVO?9u\PL<-w~m7ʧbEٳ7Ο]3Ͷm!$OR^_jY}˱iG-rhG'r̙3jKyw?hԨӧۼQFݺu{BOm?;w*r^z=/4g 5tlj7oޜ8Vn磢=)9Wޢ(>ƍࣕeoՓYǽAuyw{T8'Ep`!k֛#>tLD7o^~'I]Rӧ?\jGyT0ZڳzG*TjfvϿ,<,B jD14is߿?b߭z,zTe#;1PsS"BڶmxG,V BHքw婉DofW^REWUk5jhѢ~}?Ǥ!*VX1v{ح[/AGi!BP(T) r/x-SBCslii]Ξ=K䟆[Џt@PʅΝ;Knh,&>>>.]*F.P.BP׼3j* .H,zELL b B) vYVJeQ= B)g\y"S( hqgϞ-ճLBP-(;w.++"0?gKݺ?:0 YrYYYҪfiϗ.~9{Ud rU)РDRRJ*ENMK jԅ# ;'OFBgG{P(O.(&''1+rjjJj5x8d2a%].Ej+EW]nHХ)ŋk׮-BfsRR*r|B|-UknW Η1N #BN׮]6u(4.Unݾy!e 6矜[ѱP(,79333;;=%ĀK6Z?FFBPE.+nv7nT(ZbFR!T*V TEرP(Te ! b].˲JR.i)e$H.P(Tjժwws\06NBPE222333cb**Vojj*k B)7Eۧ][xOLMP(M6kڴ2 ByDU( *2BP"S( Ud BPEP('ZԍBP(FP( BypqjjʙsEA$Pt!RZi_S(#T. ?<¬LP(ȉkׯAHrt RѸqn"ǓE!Q( UlٲOWgٳgSRSAL^SF֫P(ʃ(2 dZ>suXDHU0 @0&8.%55Y) rT(Jo?? i֤fKHHJ1$U5jLj) <-yETfdy5*훼 Ԫ]ŏ IDATAB$Bk׮^Zv RR4Zm2oݎX-@AǪ ]NiGS(Jy*BB|PPpPpk?ecpN%+8?P7C<) |aj7@IHQ{eݎoiwS(J(FE,N3QYˍ/ʸm^n B)kc!%-Eޜ.!θP(rSdo/oRy[-CI[-;otMP(r:1>@?C$0!cχ|?V)Y!!%[g ByFHCq7nUDN@  @IZ o/o Rn~pUH5<ABDd ?.jRj B\._NNNdH`Mp NAt &K"Ns&Mi_S(J!##`0r~@@cH7^c0t B)'Ejaaa o,˜J-ͦhwS(J(NRJxxxGf%1BH.Rd2k B)7EBP(z= a|BP(EB/TX) *2BP"S(zv Blj#S(ʳa#K ծfȨ\&bF:`tB!LC;K٬?~=r SR}"Fʠ5 B)"n;-u`aDQ1eb aCXQ(5|kԬv؟X ".'5#IK˴2} Xm&Ũ5CvfVrnQؽCMV.p8 ,0 Q+XnոO3 RVEv\&lure4dz U`e~"VcÃcȹy.M;f1/GBPQғ=[` U(zJ̾xdruDߥIX-)&mTYߡU8nn2[u9Yf[)9]?)_W=s{}wV qم l*'Ff91 ULvAIrJQi;3="PVZ7iA9]1V`(rp,0$&2FLdgrCgE/%W yM_XWx?|MhxkIz~7w t| +雧ݍ HmE/Vt?q@Oil[} W-wZ{ZRC,ƽV]BF46LfJE{W~ Oa|ZCgB w^BZx!~^^*L& ܼ`7fğ?~fB릌kq)9,E^3ѓWO9ը, $oѰ ?eOq:fʻ4otNi{z[,{R )*z_ܖ,iq#+giϳvBE\V8z#\Y4sRypXV}aXePEG64}՝f&JDlz]ݝ?cN<5ƾ+}aY _n/PmvjMaöɸoL>ar euOYc*"c :%v Gr8]+;I! qŋqd>_OJcr"α N<U}S.{t#ϑOo??lϾ>6C*ciUbq >sغc|N? i 2y_/䒍heߦq^Gx[MlppX;k[5/cagO5MrґR;0"8e̶~>]`ZQ+0O]Mn󒛓MSjMљσuF:ÙK,\Dkv+RbF.cr@ݕڵ[~Ǹ8{6--s111бm WL7XNjw>^U"ٜ) Ii*|-V>=ˢRri6<"Bû]YNݑmk*ּeF=_{!tWQq@D3‚(6v+@p\St[/gfIBX )2pyBQV=~?ch||ӥo=Kk~E\W|Xoh䥘ogw̧g;J|*.t,aMUcvDO3fСWc=uHN'g*}ZmW؜[5tdDqSͱw?n #fʿªwhF v> i;_v!.({<ܣ"UpwYzիͥ_㓒ի'}5jTI~d^$S|}26h,+ivhIϲbL&2"]@2.@n|#RS3v`zF82V:{^Dtx %Xʓ )2'mrE̷|;]o77f#]>P2ֿKn2GwLu?VCIw୽Kym-ݗ/qhP_]oب);^{~?[ƉO_عFbCUϟOw3<^ Y6XUӞ[qO= X܆ 8=֋7W(mEbs &#%ӘcXJ6[6K+9mwJP`>5$`qmk5 #,0<4FZ (b˲T )2|gd9W;+B9S^(qi[ ;d:y9MLSԒ:Q{F,Yd߽Эf6H3DBYβdGs3m;%DJn]1,BJeںE8.j m%eƿ7Zl2\rES fJE|+3gÞy'!Y_}qt>t4)czWJ5c圏ltpt&#=Aqrl]q,&NcͻY<{k*h-+ 5*8HLK#|^r}fR{t*E] P01m:Ѥ׽n$jԪ KI*Nr_o]놱v$30:!1ɻhAv BND|+5UJeL&S9"XTЩA/d^!yߕJ>EשjHKhRE^%&@jR,e6ʋ7SNnERPre9 (b +j7/04_RD/ yb\.O4O&ۭ HpZB΅ըcMMvm0jDr95TAEnTK06).7owi0:ސԊ/ d3s޿oT3O=4)j#߃`5iab1Uql&nL9&>!a lt3`۷9Qzl5-$(dҪT7@muԲ{wo wč@=bj)'H[CFTsmPƁ*8t ۥl~6߸NhJ,suqof9DHUfx{q_)@J!EVЁ:o;LR˷ܺF`]bGܶ퇁޵{jX P Ei !MfV}uƄjMz*^O6NK Dt9X#|'1[j._Mfe9ZMt[,ب˗$Rd1NoqWc 6;dėoncɮc\eѶNvg/wRsou*4e{뒓 )‹b9 iogsjy1\I1#SOߞYx`!GU+/5|^t @_^.ci>ؒOhjg^k{զP(O"4,Ya1& ? pA2 c98 O6XrvEAV\eY^A)%ԗ_wֺu<2]ף#׏r%/]9˩U/䷯ XuWժ:ș("d +#׾ZYU,.Ƥnw!OvԈ 5>w&=0sZ{;?gq{UA߮[=1'A~]%!E.>RjW uZ 婡HCWOKHEw7F^j(2h˗|JQJ4*ťw*{vn" .^8F R)dM; DWPk D緧N1᥯G:5 v1Ikbb*0,@s%:M ]9ːjSv NCR#82Tn;ByLNV6F\:Z%je2a@hZVChV0^~A$J)3 s,,URxvkUji$LpD pڀh=1cAcJ,uAȔ2pZsYB^]֨eX0j(P*|KpJȨNP~[c RAXTbd DlwhِE$}y:m*e$c\xh\}Mm7zݔUb޵O(U 9&a}4Z'*&#qJJ5J0-jU5c33,Ajuu(*2bPq`2ٜ qjz: TlbY(Hv&%)ØcfT3%@|u*yPÍV!ÃN贘m6\U) 'lEP4BY} Bylc ߶srrhP( ) ȅP+Go6P()2X qXڀ,;J233KjZN&gD0&@ @BBX33Ngha0B,!"bd,+gX9w BoEv3DYɜt:YAVyy;A`aXE,ۧ[v]v홃 W0+KfR(}+'J*jU*!d/oJ  r\bF(bBc1FaYN%Wd2BDeCXRp25w B)L)OT WL0 ˲[JjnHII~eJJy^x@a"B0R)@:v}Ɔ׺ $ xŕi=IU3#wfr.fZ8m|M-ft:  ?w%W^h|g0z!-x/?ee~zyW (;0HZ^BֹOy"qɩi\i0DAV){oG.^l6Uj5L! Z0 /'/)%PpDpyC37Pe>u;ڷ5 #+{)X"v-8>ʼn>} lL<)e=;#V"'}<.Yy Fs^Z'h؞C;Ckl UZ  IDAT~ae7ՅlG^J  ;gkWzS\ 3;Lv0Ev II \E) Hd9!,=5okI3fLuީVэo5Tes-A"WL]%"88J +3W%C/"71z vwIEl7m;W5v]62R!,ߕ=}*8Ef~튑EB uUnJg/%oԩV!$b $+ šoѢ[CcJ$aw'GZѡAZwʗY^|^r~~y ^czSlE nۺEfM[ZVEAY[ާz*ukxn?wDzTPۯ bJ.TҠE׋ɧ|䛫&X]$֭s$m2hh0ۭEn~vi.F>v9_}m.TB^^×n]e[FCoWԼma@t옦RBHL37/j˜zx׷L7s=}m1Z*U]}w:y ZɅi '4?h_ɝfK :y07L\/YzkNwG_۸nqEUA'[Yh4ᡡ:VT\nrx'/]t:68bdXVư2U0J|qz)bfc\k<#4tFO?PkێĖSJ|gFT6-J.ryϯm0SRnX.ːrNm4iԨj7n@e^xۙZ/+}Uo#1g,bu$Vhx vmhq%)0 rϵ~1 <+|;MۧpƷɫwޘG劲)#N5ayGQ r_.=!@H]z""MH",4D$`&E0t \/{[?r$ |63>3{>~#SFkxύ5$O~`mGn<ӓm0 zBS5Z.2B`&ZZHMJI`@Z8OoՀq !G,26cXq Cmk#>+ψy4ٽis%EEۦ|j9ATbgai9eBԄK7w7xVf4( X2{ƴiӦM=Gc0r]|F7p8qy$E^AA`P3-[x'/ݦlIC^ X&m6mtQPz~emKWL>qbhϞлEZ?Ug#;MNת ˛v 4Cݏyp K5?΄ןf46eB|jLII+%Ͳo3~g$!ANKUxOPm_7ks-ꠘXR@y[gyyf? a2͸)-Ub~ᨪNٓDnwB:|j{o:6Yqj)i t#`:uZn]?ϟ/((ѣGaU~:M_}+D"fy0,** lr>t5}b=gkݻl !?x3]THs6B$:Eqq={zQ1 5*wܸqZ<c8GZ  @bx(/krrr\re{-N͋oߦUn^ޭ pzRSogfeܹF.Y.yd9w޽{[IVjRN1G7zz:%%%%%ۄPeMF O]Ԃ8L*z.+--iǠȨhxo7 ;$^^3v S/;TR_)lGy!F׮pK7"ex(ypɷ; h_9Et \>{j#"J#": )Ƣbk.Bh@BQC~bq 4X{ZӚPK}vb[̚kˊ_9e%k. _ɺS: - ɿՙ^]Ŷ:!LcmQ uϾs;H9=z+vy᧒jF/[NziY8GZ*U CrU@{;w,.( G|1{PJ$Ӷ}qv.]ɫ][|6x/woBVNz!ضxک’o.4bէSBV2<Mߏ: Z- Q WkV %%jLRT>|:fIdgTcq^롍SQcJK^w%/J//Wsq_NgaG7^<+ P!a3[þ^ەkm-,QZQ]NbòH9w map|v;[[m+J%d9vؚ/!vr+ɝJv-vvhߔ5}2fY_txb.P_ޥȶ]Nx_gY',G`xSʁv!pr+7pr#ǵ %0\dn 8ǎo5Dbc_4oM^sUz{ ~}郎{8O3'h0!q$|Upş{9i/% C&VҌS?Zx_>uQ"Gܾ}"YYY!!!5iXע"1xPN)͙n!XsYi9YfXEmJt=n&TA8>oZPZ﮼j+NgNaM~ʞ.-q=SybNlLN!0[%gt7]%k`s*5eRJiE']RݳB Zww}$I!Ve*hd7I^ߟ':GKl;"0\lb֌k:K E*y/GZZp@=n3:6d,W0<p<.RmLGRC萕^M Af\޸ht VZq5Bhm _l@ L) /T%kIv|;C[h}"e6l/˱R6Q*N"eCWF%F_A{OȸBW8C<'kڷk-fwNNb9sϫLQѡu։0Qɛ]lW(D"1Q:u_GCbǍXa(Kƒ1R^DbǕ?lxÍ۠=sڂAc}PÆ+_o6y2LO\=D~(}bIPџ[|hni4XġWF[xqt#>2A`:7 >巣RmHBƱNJMbq;w4N^VxRd+ʥXPU['%I?ۿѺauCL^w4lz:)wYιQ;-iѨAm/{LYfMH헦YK̞6[B2r$ڦ\9ҿAm?ϭ鍭# n݀׎lޡe^ޡNj#NIoX'#g&K>>@^-u2Z 럮C]/XrQW>Xuh3wuB=}a%n_7;PpĿӿ,6ɷڴdY/3yFЬO!Eb 9Yt66df->yL?x,?}^[6jG>;Bt +;}/ʰP,3?~h4'c|>Πˤ .OˌÒ/Oi/eKJEtltf *b(VkzL*?zvg_f}_=jz׋!|G'31TK]! ETSiJ"E=@CDHWk}&q 9_CVfndυD5oPȽQ?6v;vJ00YX,#4rO.KgӓdCxns2.NT,bHc8uzE1A$D\Hϲ&T`Xf/ϡ,rQ1,H_7**28r|]h:Rq\褄";}LD'K,E Ÿ]Oק-Od7WQqf;O%t}K:w/ҤZl:8yp }hxT Rk"pUXmF֭ߐK<oB!Sd ^Z5>ڲOnTQ8۬7[ IDATݜoxͭ%Id3dPd+~ 4#Wa@D^ܢUjc0>u} Enx92uqf EnE"8R63#%I}M8[28/_jrm>|K3IZ6W Tc_7s>. ̈́]9/_Z ߰x7qؒ|{uRbwy6ץl|}Onx+uߞ5'mW5hPG@SvE؎K,2s;c #);¯3"_ ;>^mߏZes\LNfff_+9{NaZ ەr)5ԷoP l.Oٚd!._!0ɣT?F‡9P i@Hۊ^ۡpLwTpE!;=k{/gςUo*DĈ$ȿIsj^6}›F Ol7UkWoZ]Zd˚evٜ8s+űI)6/ M͈f#p ]Wzx j߇1"n372αTsk(5&\c(PՉ*0)@[U4Kes}UU@ ȻS͜e61ѱ;սr5^B-)1U`-1N0=EF&}?t]LA ]*e@ЧÓk5`V:n)ؗ/+CU+ WT@<YuX VtҲ{Z)*r8'H"D, Kp`:Li7׮vzrbY޲o͏(S2t.VOX]]$ FG$/]uLu$xy!puŎz-~AHw%)Ql;%`Pߓp{NYmuɧDo666}?Cd)uwNSjlN_:h^ 8)]v+aA,Ϙ5Cǖiu "Ԥ]bkj|D)*'$y k[9% *_9P1Vy#H 2qV@ CA?QvX JhyPTՋ\^4:}{ >"#+jc ]4~fe&z5zK@ \C@cAYd@ @ L*#[,44|d@@ T5MVzV\$ȵDZQl@ jj) /Lg*trr:E$nP^I8$9.+[$QF1 c Ãb9wx8L_xFYycG"ARf^TK`$!rr$CP\T&0?Bm`g ,2@gy*u3tWѩɇu212>;25DG ?vIeӅw`` zB \]q tVpvg7hFzdasY7rsm6L"EN;_]аU=H$ir?{v{k,`I] TR[uGN3|#5 G^t/-ݕ5˯w2=}^]>0hw ևJvL:h`y;YNS>]heF,O-52c@Yk/\՞Ol募.^cWHvjٮn\JaN0$Ah)9K-Z>|TH`XlIKvG>_hmtcCv) g4P;Bb#/u 2;钓a S4 u͔dǫ~LϦj) NGD܄OƟJyQ\x@pdϑӜMp̋e%c1zJ;Ӟoeq WٗN|!:$0,ežL<'ع!Yaĝ 9MF7x묱dgv.V]dȂ In˷ix f,=ɺ6M "3Y\J&" RB@%؛؟j?u^?ł+]u ].&?Ю MrFnA֥)M2 D'Nf@[%KѹS'kFv:>B/NɊAp^zZn_?dԢT@ECJs+8g *zfe([=75?p%ϬTό{&iQe"]y%ۧ6VZ/&\5߷o_Zwe׎q]d1ɀ`sVlٷ死7D2ðEk͌%M{ Q9;=h׆ԝbWGT>GψdY_.(ZZ}\o7%?o9{ݭa> yKʃ;=bgtvOxyqYXU+,"Wpx&(r 0V+ƒ]㠤EVּYl&a z9C/]~M߳_zэ:ؕU+_2wGRөҶ4%IMA.[dl4ηYF-<% D4`Ĺu{?G\YtY"ZjfxX xL\v72l۴M:l4A`axoeo(&L.ӫIL km'*DGmZ x퇫ې[-OItø7d(y?wnSH&?(N}*ΐ&dymzŵqmX6שocW)[D~R0CrI @ut}M=qɺ)RX$Qb/j&8cnɦ]hז%ۭ#Bj.R$nVlS&xn7G%U&.P7/I1pP.:{-L z' L+3 jUYVך2SvM':iwMvN)jYzZ{6"|hѶs>UPqבaΰVs#bUIi{Ol49λqbXz?| ?0xIyo<%!R m$3Ư̴zc+ȡ~(, uӟ)/Ge@>ruQ 1@x9Seb1!@S¡[EEŶcVڱ.q.8Կg`LK͒&l_w)#~~ Usυ@x5duFL=7ۢ;a'rvL%<"telFZڸ_w%5}Ks^_/=w|\3>*٫=Zn+Ʋn9C۝˰4zgӏ}d( Ŕhv|k~ȃNX a@y[gy/(ۇ=?>[#ū=&<:BZa.=?XEegY Z#v h.ӣGBBBj0//l67jԨq, p`0zT*h ~@41TRm^  0n{?-?lRnuxݦc߬gc\Λ3s߬~g}IEjIBb#MmTGoUDfr4戧͵yy5iB*q 0~@B0fz敛b\&2<$TTzܘDrb PF5rW舤.T~^^m?c[8B|9h_@۩Q㢊 -i9;O2 Lf%b+db;v#28 x|'ySZn?>+B tΝn; x >yH:^p]nf SUzaZNýŖWY :@<<` re됔'U;.ժ4Ld(c,v{ !srnw,N[EF"E\Ho 'vuzga#KXu:4ikwt=?yVyZi4 Zq(o/4L Vd"?%0Ǘ'×}sVԀ~j^yS臈@ 1  k9oGЩkGKr [;IhXWb8 Yz5+Z+aPWtӭLN}çX}'RjF OEcY0 hmZ %bAO٥ѫ hh9f`8!W{k׽@I[7XwHSg)_w(Gu6L@KУ]kWҍF.g09K6yg@)ڧn|P߫V@< IL!xn a84{ yc(8 UdL߲fHsجN|dքZ쳻8+b$oo][V|bϹ-%@ N)kBFou&tF`WNl-Ә%P|_/gܰJA<k^'w+Goo٫kLl۪/Dąro7|iT }?L2 y ,8f3,,p0#qpA0L ,ND"~IL2 Ɯ/įc]/,\E=EY6:5 OOBTNOT--3D{9% c@xjdzcc|Meu 'K؎a `a8P6; c`A>V4^RaTW" R6c삁[* ^ ",BΟDXEIB UUSt-ZwuݨQOBoĿ"ZtĿO@ EF Ϥ8r7@TMqq1K8;yV z `" n}"!čkM&wH ȈPAILkecrR+N@" qYc)gX8DƒU2r^7/1q>RB ~J!k1{PJ$Ӷ}qv.UfX؎2Kv({{Bǟ^9-&5vdK7ͽ׿كO YQȠ׶e e"dR Á/qa87X ,eXv1vo2Y=O޲Z*bs\I+i8)&EMYZb:jLC&g79a6gm|'CtmZjL׷K OkYa֢O,;޻R8uoFۑΌ>Qe"ԟrJ_n2] uyP9Ď]ѱcgcǎ!"$2)N8 pEEkZ0 SHE#A`9hj$ :5好 8&=ᤙJ5F` aVrbRع[,ɧKvx Ͼ9#`5t39m_o,{UeG>ſ?@xlG7~,/Uz:Q;wLw;&9 q=+~餕TQ2C,R"^hv\9j !&a-`yE@-#b\+'e"B%Id^a,+$nի%zf8JR,iqQjJï p}쵠ދNY/*=8/F{v2]Kk9>J$ +k5ycc;B{d5c_0yszqIĶc޼*ņ+fjjƠkxdLFʼsl)h݃ B*\j$үN`10iC'_h! 24bhy "e>-W@)g=\S}"eH):pfJeYx+[a&D$^~{{s7wU'{V kVKRlpU]]Zc4*xF+N!p;%&NMjoLu›'wiѢnHdNLN/'&q {39Z[bn8FB"h+c[^(W=sڂAc}Pu>x9n°-eN_4tBiכ |i޹ 9W5y%mX؎D~(bIPџ[|ZhxT`yf ,/8= $FtJ_qR[1[En7#k:VݷٿqF:p/lޡe^ޡNj#NIoaHPGM;N.e>{AXOa6j1Xu`SG_R! :gz&iWkê.7;P.-֯_%]tyWh::unݺΟ?_PPУGX8իQ YFyyAسT zi+35kR/ΝSnDeDD)# 6.͎ ¡uC,ۭS_'#zm$.ǔUDEsl&A?~h4숧۷oٳG y晒7{<ϯXٳ%4i2}t@P;vLF7n\U>23O '  TMnsl@@R&7ϳH`wYݼ 4aXÃC J .YR^=xGŐj*ߥ Ԭx$}ӀhpG"$1 -,ڜ3Ǣ5׺aw+ Ii4*Qkk P|CD\};F k^Lvq˧7Iw; eϜ%d>ԀŪs='E*6NF\ 0((̵ѣ&gedd|xErr2qXZZfddh(.k2@Sr\.WCa J#gff^Mh&|,jjj133 %??bL q%_0h>(gH̙FuvF\ IMM511i$Ͽ|dZb nĸe^i 6ཟqN1K%;[lg~I 66666qj BZ&͈kfQ*I, \y5d)SflV#fWǗ?4OLMMKUTTTTT5t"R(WUWRɡ1 +U}"nJAهXϞ(l`F鎄lPI;Wu!n? .?|KhRb(99!mnnުUO)*2TP|Jĸļ%Y7RATP©ɮͿ4뫦E%[F.'J]X) HR9|l$ ߖ1pn(&Z-Xug"&T>l&j80b1bDBBB``V e-wROݯJ}\Q]ZKT)T!(Լ K C$)*Ws:Ic3ʽn=Ȼ<#Oȁ"e5!!aha{胇 {(4KYc5eb4f[[ǩA1)rx<_Wm?\._PwݹBN۾E{yz"HRt~r/d|AosKW^T+|u5'r[m<;{w}^d#v?GD8o öjxAe%:eЦ};XW{;m={sW I6>Vdm=iBKvoLcCW2rkte);|^AAA}Yªj"߂!p}Sr&.P>\bƳǷOX/ժQ\.ť~rj?H5 0B3uй|[R1WKՅul]#?d͢~P3&. tjqe>ڥei[~Y87`ոzv-*\˂Z!awBIwtRk]$Q> \ MC3cQiKmB5leuΊ.nD hT̚U'QHPCmw#$DJ0X3ۏw[HI:Ү7b-vo{pd+:BِP<ءZaTXLM1vr:7BȚIܹ#Kb}~ bd ilYhjq]: N@Q{'NP &!ԃC_a>1;kNگ(j"9m̡ݬ 2`"D7:<--~"%%^ąY N}27bd D&J7%b!! 9o*l2ΞާS[sOm(7׶&R}{1w[-Q*TF[fIH\Pqngc/IRR:HrY$,.|s6:Te2dP_W Ȝ@~=^޽ =fl|W&%w?fic~Ӫ~vLٙW)UE\]]ȧ!=x@:MTja=|~QIY!bjR WsAP1 %:&cc"n7~AVF7Z>Oa22xb7M*T5ޖ ̬`o^WR647J\v024hf q /0iA0[jDw0Xtb|ƸC7/|l[՝?tZ_ !mן?gn[pX,t4dlbRcQQQutw@DʝW !D"ID6Oe"_VNNN8;5`ϰ>rɓ3^[]BXvζ_J* \\\3p_._o ep_۾]ڔWTVIR&ȰdBO"YԷ>h~Y[[/h}< ŬEzz:Ț,3|" k P?effE>'=+XsRag???MDJCo^?s7Sߺs cڰ'V-86::Z^T&=!HdЏ>c:oŞFmO3IW=G,=N?5xV޸@˗T2#/>wтWyn/oÙm+ȏ\A貼L_aS}#W#5͟H˴ <W] 2ɳS;= zܖG{wRߧ5f i#Y0naS``<2Ex4u͆E== K{@!HB|}JXJna;WtDDmҡS7ӽGr(,*Y4i *\3&lIٕLB7t<靲arM[% 0z FH#\L䥻p:qDy,x\Bjf_Jmc;ǜZ<âmaI?^8k6vf]4&dE)O/Uf~~~$^Jgذ,N5Tw5O|J6eūSSn3u4PhR ZI%/2ź3RtBGϷy2d|7#.\jrns ,Qw7e8E|})poG(!jYϐ ަU^rtgD={IǍÛn  {W mc/؅ _>o3̳M׫z,4W1lTM*VԹgx_f8:MWPPdOP9"cڢQvzi b8qlậa+t^>, -).pm{uw ][qtNQ3 *3y }Eu:g0cCi+ׄ3ʒZ\0s`CczY|څ͘T80*' !qܤIpD坾k7ѡq~JG=U^{kMoΨKgM2O{)0ں;!f':UCiȱ>3 XTҌ_ >YiBFeM]w3G“R1EI*6s@.C;ḥs6 F>O;rⶓ{,G4Fu]ryya,˶_N:ry[koaӷt#xgP _;l;yyucg*䋥! B41VNdp)8bkNl_|UQeOU,W+=6_nJ 8aYv j:-hB!w$kh= Jw,"I=dvY6HfQų3"dպ X:NYymexȝBmG! SmշЂIyǻp!rM6.TfjǤEXcVR:!'+4Z<.ԕKs49Cj'λU%a# lƨ9I B.p*>*/Eŵc:skK.?rMp4`QKxMcC&q{88):N^.$b3ªl}BiL}'tT b{^X)%IauQlg͛ʞ2c.?mrlӵSUUŒYTv~$kJNEu}\TY%{Z>8}Tԩ?;f-6 _2G^{CC^]|JJoߥ5ң;3qE& m=C '@l^!+oߤtn/q؃j*ǽ-oIDATׄ!~O.9GV]DB\tVJ: Dnֲ Lzv).S{l}M8{}r:k!hh͛ʞc:8h9p/f#UirT>^=Ǣ7d`9 \:αOsTY{p]KRYnqI x +V\= >Y4k9;;GEE}5פJEP;/FhFKyޏ&&+f-^& [j%ޣ-Ջ})n141Y\/y#e8ͺӢe9èvhf1o|)t: "Jh0ggg@s*޴IENDB`sonata-1.7.0/website/images/sonata5.png000066400000000000000000001323321377142014300200010ustar00rootroot00000000000000PNG  IHDR sRGB pHYsď-;tIME֭tEXtCommentCreated with GIMPW IDATxwx\mW^-K^RBK M#~ - $!nbc{dV~̼,dYW2Ws瞝;͝;8syp8WdpEp8S@c8W\p9!u&ԟ30Fm>͙ Kf&-^R:47ݧ ط@S䫝R_1LC [Tn cB-6onZ':i`-[b_OL= h}eUUkwZ9#T]wݖm.*ߛ埽T9fMUҳ ` $_V&jGt#up`/oCKr">[_u >Xz9j$HM&┚a*z"qkA;4FTI6vvOש`1y챁e:f۸T}Od 8eƨO#mݼs} )oxԲOV&<߮ 1[Zm#p7k5dH+jJj4eiýmk>8fAcfΚX" X)c5>G9Ǧ|}ؤG?)gXt0oeG-iЈ _J3d֔W4;|VoD%kXl]hk\Dd&[f6oF6bZI}G΄c,Ω#xDfK=v~zer,ڰk΀A`Tk'1n6tA)lLߴ*omce*7n+Y8 vх~6u|T4nm_|Vpyo~ZtsGȫdT{'+:oVrԣDI#, Ƥ*[Q[wf€?+9$YEMX ev= jwmY K!c6% ”/ " cBB4qTK$X90Zq+E=Ƈ?_T M=[c`G(i˦?dg"=JkgYmH,hZc+_ީGN*7$=#Lm:IvQkN'cZwN|z\X;֍n3|s}dJQ$U!PQ3^wӄag@@(41Hçߴi涐I -wMY tO_tlC"$p8'"qr89Y>  J$:-dxWXQLTQr8TaQġp*iMb :Ӭ2 6o4KpWqc!F0EI1C8!1e DLCQr @@1xvRSA{`sNjQ!o_ᨦk0(BTczřE VPJ cƀ$ٙR]$@@Ihp6YI-*h>PE?pDI @9YMrٝ.ʛ2fy/$;ȇClr4b |ÆbA2  vw1+ !V2Լ/{if2b"J$`@3U, D 3 jjP`i7'=T-*-n-׫)Lm*`XߕgɧvNF`πSj :jѩ0F, (PPPbP§FI1Tm % f]ȰH ZXAeQ@F-=cfz<15^`#9%+!)ɢI/#Z iaYΛԣmH;õ*KCXzEeՒ@xn=0$0 FJM(9a.$)G\U[[Z|)]p6e16uha]Sls+ref @Q쬬!B(Q7C Rd*۷PĀn΢/fѸЁrj>{>aGb*H} XH(45#iH4uJ,o/$awdg#p0kz8,.ȜebQElGƑTV$(#("JjVZ $ّZ:1 SfJ/OZ:aDٞZ5aKS)F;RR 'g2"~OPŝ^SA(.(U cdxޟ.B(eTdB(B F!961b@)b"!Y%WA]̜_s9;*wH_?43FR}N !D(a10FnF4]KfbG1-39+ZL EUC 564볲kjjp37FxYUp(_iiw+-0o"ꋺ+rU׹N4@ PQf]۷546~X,oYotM]%5-o_ulo vyB+W}QTT_?R +KJ577Ƹc,z<^Q:w}3N[ZZ:묡CN677ZOsƬD}׬5j䞽O?8;ꎻ1N|Ey7;3/Wǂ h_$l]q(SƦƛ1}^o"!VQwjٴ,׋"_߻[ !3[YǘYv#4rK?{ӻ?O=n/:pd͹g owGuѮ>GUu"c' 1FE%C8nTs͝;7`G)=cnjں}g8v:7lTQY9hР/<|ysSnm'M^bBpW<3\rg?T^^~駿YYYnwޙ1`{Sf]fOc!02uZ0'NpNcicj<665iiL)5tD#w۱Q #"@rj܈.w=Dl*Nw9΂bl՛h;vTW\XŕYMdJ:}VW4a/߰qK^,p^!hu2UU,222IĄ2PN?9jLPA03M 2 AyHdnd x Rrm)1F)FTvb4tFM]Y^ovXl6b(ĉ׮^d{cN+KΛ7Ԟ[soϟ4'IEt]'E 5L1fX1渂11uH E!A"cRQ$ƘE(3 i{֗c 151FQ|3׷vKMy#4H})zW^8e P{6c${.go+ev٢n88Q Jj\p( %IY y"Ju.⨊|[1?> , F01T&3Sj1H݁zF)BXeT PnИ2j"e"Y(( CcŮPve$eeeRёښN1_>l~1Ctq?/{_[*um.5:_[{,d^rѥ/榦Ʀ0M@[Cf\JfBDB-(X Z i@@0E7%JHZQ>S`Ȱ7#&%IL   a Ѥ k(YThrwc$m[Hׯj-ّ9b]w>~Ko_ ~gu;MX˚{nxX~?ߗ|I.dYIwu9Ú&/.:} [?^hњuGoQpN4SNXnaN!%m~7n|<WUi.8a`'w~`2CBDǀ0,(`c@EUVN@X5#n*U5CRF V11 $yEV ¦fqJ0io--86-|²dv~x呛6>syܖy(KYέ7^8%U|/a_ Ouh+n4& ;&p嫌v$g3_xSyy}ɷ(ɲ8Sq³]0w)F5MLs'b,{dq@qd0BP0 eY2HL EAB"HD LjlrqvfXH F!QBDg1e  #>l`3vI[ IDATW_wG9_jQ{RS 4㒟[W^lo؅-QhlhZ:c󻏲8SD sW/53#kJ/[!%X`Q 4ըװ 65e2%fp:e2-5@cSAXFsޚږ;.$T(`](wG:T2%ogsbW{~߷fw{L!sQR\R&|W|/? 3܅/?v?ϼQ>{j2ᓮ;^ۭRiZu,cl_,qb/qbx⡙YGn;ZPz†3 äf]uf"B4:+!S6Q"ؗ=eB1"Ih{$]@,-]J-;tc=5ޫRq %u?.Yv\`)$97-7fdٝsϾ,{n]tm6kjW]u $)9g}hGvYO1ӥ(k~uggEɔ`%IRf9a<O~~Wɮ8l %1j1 @ 9a3""&91:q(1j!xǎm2n88$L&$ /嶥m=^7ɗ67F['|GϽq-q=[k~R"&s/Oߑk?{/%ҷ=O~q}_YOUo|nϳ(!_ylqnݵa>py>qw]߹h;OG-I,gqƙ/[(5bSyḚךjkV KQȨ9 I(& r=am؆ K^ڇ[w7Dr -( ǨA+Gwג.& Kwvf] ~0G/c Ԇd}҂C'34հenːXu]K-C BBY`QR-y۳vX2IbCN,CMB)BXEEQzK`l Ey+9){:?qeѢE^kA2 j;\.9`ЦfDuJ0F"J(QE%McpJd□y$\h/j ۂD$@&w6y"KhBXE!9}um6-]J(;/"tZ{a9ʟݴ:'Or"f\IZ !`FJ)<>ws]vOUfh n&2WBe0Sa+R6"7QmLBVQT"$E3{R{ 湖"`C^3_iI1꯵ ˷g۬k>H俌q83XSf[.1rp0C㲢F@ –] H$`wkmB, {aW-4䒰Sq"ThGMh 9|t7kEAr>9$LS(knhضy˛2uZSSclH<dzta@M#LA BC̭aG"nÔ!@ )6'p8RnN20@14B?wŢû +To,ӌG▱rQMfoT&2T=x;` AV '1ccq eBA6Eh?XWa¡iji`Ja_@ cH(1)bF"(6ppE `% Ӝ GF" `EptCi#r6"ah.ͪn~jKSuOklgӫhZ 2F-]mL7vfm|%,ZP#^ǀi(*EHi_f8#́Ґ\]KT z+fIxD@)cT@%H8<>[{T`?.'٧̖`ˤ`Z(V4HB@Im씼^A@("赭@a-dJN1`-wo+Ӟʛ63oEq?p"?_3>k9355su88tx.5 vF- ¶aB؄"EDaZF\(P4cf Lw L^5u*x\u8q8o{fŰy{SKʤ#s<@auu%>,i= aoZln)G*+# XF-{B6,x]4Y\#5~`Cp"w =NT{̜/u5bM t n2=2K U55$ǝBQ1nXq@aCM~ (7pEi@ 0   8e\pZKIlXjn;:U7XIc[m- Eu `cOA#6FF,Y6,ƇpE)\SS@#aU5JI KcԲ9B)ضNٕ )،GMaӆzVVF #$0<<ˆ 0J8Zu+qH$@%L`0fX(R$X"ENp ”ŅLhed(PPDZ(9uStIyv@N"fV,KS%J '{kll(5Q̘S1E|9Cg@Ugxx2 &tڐԀ]xM|>:\=qj1bQ=-ikp"% "3LCa0jU@S@mS+FdBĩ=f3;UJq4]n}~aHLZu:c+[cVTPDyA>T(-KEnmmM҉Xkp46IsJ|szWJc2i+{ NakohD-5њ[rsD,L;*'3uuH`:%0ljpE>,p;ȴX\bf"H]TWg,+tn '(AǨv?tWnv!T}`j!^rg֯նaQt'Y[>N+20dUU藇aHeZeP6T57\|k`[pmFsô!^4[Pp+ ;)553g6KS7y%>N@~tBLC!R@0-,Ä+ln?rFw c,1,ZMMYxđb7^~-Ϙ9}S_i[@"{P#n>T目ȝ!ÄeHM@Lgh{$%`{/8EaBAԴeߊnBȡZΚ@7\={\ﶋS Ķf$VBUWұ|8WdJ1 #u w `)N]qj1?a4%"RROwyR$p"p]Cs 4`RJC 3nj98T$I8ouSKվH[\Y[b ΀?!p"CPt`cl3kaw;lzlT.\1ɾe t, 21SũbYȸJhbݕ;nNoa;3PU7aqEp8\{onX"xdeaՈAj<e$ @1wzIJ~6fҽmQI"p4`ĥò|8WdJiԺk0014 զȀ(`I!!+.?vd;shJV֠ѕlom+hBLl s7_Y1"۽pvp8\{r1,11 xv1JI[)-ə:n9u9C9}%nݲVL*ŃQ#L.s]*K%Q1CTKi +6'[QF1( W"tp"BztK@.9!%T$DEbIJ0F`QY6dG(,Z̴(1e&@!J=۝yJzEPkCpNyaEYr9"1,MT RbFX$"JƩeJ;(,LMD* 1Y5"PH>NȽ)2`A8 2DLY|6dIcQ%5SEQcF1R55#Eb IbBd`,IljpEX޴<{B `AeIf!  B00e0 0tp8\{RdE!@ 0 փ %6O)y^+rt$bz@uq0Z`"!M>pE%Ư% 1!R!Vnvs!Nn5UW][э+^N>rN2ҟM)PoQU[swحUF&&+X\'[_TAg-{?nedko&0'lk \z׵sמ;Ủ%%{omJ85^_2'XpE:BF{T#k2$#'L74)@ic?+y)}'qgoi` |ֳ]M+N߽?m/?xc+G=+%&2S#cOyYZf:TbDц~rN5E4iRAAADAw,@:@p/\wef[f:}\9i/r7{nL\^$:/] f}_]ٯ %+|sFCC{ԡdY^dɰaN5E.)))))R~i5kOkV(+rǃEW0O=_-/B;^crε=uKۦW@O#gXxGro= "noIٽUr-OB'aTߓ9.c_N9w?3X;=6BsJ|^1~ё1WpU [+^gLWu={}tM|@"yl\֒\:)"ԫ?p;trfe7yoQ>|8j`}u$_)=;6]Δ^x9EDٳw1pN{ݳ;~-34RDA#n\[[_ )w3>zX(WWϿƀ)yrΝ3Ϝ\hщ_I>mOìlAH3cjCժ[4yg?4;~fn_cE=fl8vt**N;Z8+Vw׮3->Wțیa^2/BzSGިXѳL|=YhHco,jہ/>_|T \aBd~kBpW/t?5gl_ L(˴  "lY7©B+Wț[u ۔3 IDAT,Ue{ƂIesbKϮ[|On惲٧~F߾2!G)]VQRlt |wGIK:f}/z'>>Z)Ώ_!ͬB'V/#4sda<6v۞[UuxzW qc{Ҏ 8 J_~coYMQ|g^z; ,k߾}|Q{ 08ԎGb:mOs޷tG0/~N;Ĉ7;>̶%AJQTl`yŊ {W""E"6@I-+~[f?..2ߏ}vvfvfggg7^ cу5J &JiH#븖V1 "ae"FX*a dyttN* 8D˰1ZȊbZDz^6!sjD4λw 0^+E*-]vRJ_~MT~]zyȋ(vNuBڨ4mgo~RU!C9s:۹1u;24D&FX *0z˛>  S]*f-c#+5%U~|Ito}7-VgJV _ 1#UVh-Bfg~ ~ݩVp|dhv:^ ,rݹX@ͩM]F$}1=z^ GX4uYWO{Ј{sW˔ᥛ:ԻzZ3\ݑGehÔ-ӕG +E3vL1cƌ鶗' xp.iS ~#RLhJ1 *Y ܒu*Z>^WphL~mG3uQPk׮9G`ښ6iکSԴo+CP@I8"<YAEFf0nkĵf-c#+rɒ%d7U/G-e].в֬HXTa7tH`"Y@aa_4M\rYFҽ.9LjOF~hX& pд8w˱&N(hG֘h~n ZZVi:F5Bf:4k}wEhv$G-.ǹ}dYm۶k׮{ҭ[>?!׺\* |(% _7w>bInwF X=bdbZ>5gفJiSҷ }DYcX*-PH5fUyzb:\wAYJ/Y9№t:s]>֬~2믔RADQDi Gǎ4M[=?W.CR^_A8øVyY QDZ|$r^vG/dO)9ah7Zk9VY%f7w5m_K0Ƶ{3}DYcX*-PHFȌV7G\q.v̊mgԝ-[)gW9޽{{QyEAAƍ};w|>LVd@Ĥ Iby7߷ʘ?Ix)};K|9䤓y|뭷8UUg~VG%tM7r4_¢E^{/Tb`֊45 >VG;!pDܵk˯(**cL&3&I$XT\,˚]|۶m/br 9=z=z#7\ Eয়}V ߇y~`s{ QOx[)  4N­B $ |}y'UK_t7X hjaT})]J->; t~K vSN_.t<ϧr\qIсY~Z ! +V,0``ӍMx:{KF/~wڬ[:E{WMߞb=`0(rjjbݸ^={>gE7Z/:^a0xW\R.n@0$b%Ib-.)rOxhae`0"BAA~Eyh\.4SZhyntp1b`0"‘#}3L@T@`ۛ4is_^Oú`0E}rm5v-X4nc;\+/Ha]`0"׉QRۘ;CϺbX0 uE.]̝;W$`6Y0z!M&JJJ*..om`|pG)ň t:Qk˳'j ,Y݋ I3f̘F۷x(z|UhԕW^~W ɨW_5R855Ul6h޼y }S+]ve`;v8.k|xIt`0}ߧN5+WlP6lVub03Gfʘ1cج !kf2" [ݸdɒ =E<}'2Z6U}/>k!a;CGAo7rsڈ] vC:K׬?l*:D n^Ј+zG与Y1 6jq&?:J> RX!-tDYپ+qO_/o[[sseW_tخKV !*rAA5UPs!mۺ}vC?yu/IBj=j"v}juG}zRE{fT1+q(};o3.v׻|岳Uho?+%]y,ڻÿ-7}G^`/w*N4˟G_G{is{~kIJҼ?ׯ0EԘq&RD>9''g֜EN'"K7A bdQTUUeX̄=޸w_֪l._0kΐ5#n wΪ/J7Y>g9CWw^ Zd$›mE3٘~Ck,Ƭ3-[D;t6(k+v `۶m!@NR֩cU)T܊7!gĭ}F;hDaE^4[:]PŘ XMUcV djӨB>o-`02^_٪UvbPB(4@y/(TU QtI{_ܲEח;D1iӎ;6O LUdYWZF^EU;w(%a@&%ݷoᄑ]@'~`0E-Zz4KJKK>y >xIII;wҹkYC3 F}*rB|BvԔ/=DzJB`߲Ҷp98֧a0V&ݺ쫯oo@"ߧbiFqh4j4l6,=ukfׅĚ;g pR\."G|q:، 7EZ:lij! ~¡'6&Ż@(%oT2F/*MŸ pbڴis0pjFKSb|R B@(DQgT[-VXz5k2dHcT䌌&;wҢӧ8VD" !dP$kt]7=qp=q̘11ZḸx˕!T-Vb1Ff׻o |dY\\t;R@P@;R+!1[A`0IM&SFFF?ݴg %SFvf57`ԏ"m6id!$z  $I$n41?́h |5NrxP { Z*k^:;Ex4h,U( vy\evn` oV2e0Y:58*ڌ+G2c+=pƎ3fLEl_?o/q_šʉOOΦI3Jh:gиm^%b}3:krk')ZTu=7~HE K=8Ԭ%+pkgZzOМu3 `\Nѵ}A줇_xɒ%]ܛ7wчoc*" P-OVy9q-zIg`0bdV@PpGi! &Eo5MR"eJATIR/a!I$QbOEL$:I h] g|+?,oʔjq|}xC|Wb$#Oj/v3驒KM"swЕUE=?<:O#ۮ&{WhXBI.Mڅ+{+FH,izFZrR=ު[:U -z^׼y봴Ĥdf'$&%%&%jծu))Ml[h v[d5F}a,Z%_wES& h;\> % _%#i`2[W' 2Ýx.{sٌW&F/^; Ζ׽xrkc-P1h9/qE}GF JۥI * D#@ (CH("EdEQ + <p!9q)b* (cbv{ܒyN*S5BŠd% ױ'OYիˣqe>d}> 8E2 3fK|'ۧڒ$^:%%[nR VW. lY-wShάEA0VE HUV:#e0q#qf3H4΀8jUYD, &DxN"K:}"aO@M#i<1ȏ?1S[^2 RcB3([q9!@ S"0„PQyw{:C*ы|ß_Z*=j1Φ xCc Pd.^c>,5xUK~#ױb0)91a @4 QUU4!MSQBTB99tOPqy; 8 |[-ehDTQGyn{[wf0ƫ*(RBJ"B"E$Q1&o!@EU<>9D)!B dT ڼRd`0بE9@) 0V&%"G4l֋Uܞ0eʁvTRB)L%^VTQA^dl6Fg !D#!TUMPUy99q󞼶]{}~%XLRdYOSں"qdJ_ n$p֬m`0N"#L)aRÄcQ!@I8IuۖΜ<߁҂Pu<S²'/،E (D+Wvyb0xhF!yL)MSKKUY<ƸZtlײU̷ٙ `5*+*ox}= p4*8@8iRBA?$ K 3 zE*s6OI d-޶L IDAT,А>X9J5p\ GF4kY0 AX(`M@)F<籢EVE)uʼn+))ҳF<o۴L)#6;@,*AQUTrd:>ɓnXz5y<4\MÚFt}>fML}=YMl-[7Ord VgKuzJ) ; 9)RdEQ9G(B1" !4٣[?]dIgNgK1p||*'(/STzd.vSnE#ւY>vg)Qh p(R  L(?PvR#Sx` &MqWwK+v~_L'dv}hκ?@&qhoy~O7*?5>QkE ׾qyHU _UorYm}>sn5O wFǶrAWp㾩Kzl쩽 I4R( eƞѽ)O*׭Fga0ƑC 1J "A-,(B0/jת۫[g(..3RA¢tHT*X#,A˥_|Qm<@Q hk{J1 )Ws۪Kr]?3L=#\#C1;wqBup 9!]*߻Y}C9Em2:=4 ySyRމI|{?v,|r(a1QRǾ5{j8[?{M <і'__kA3GV5MUTN0"Ƕ݇u8݅.#L(qF! `@5K!aITͯi}np9Uڼyd͛ϽYY~.~o N;n\C'5|<ȳ6%u 5ٻvG8Wmr (ośע W#r Pq敇'x8N4W{bԹ«-}F !ĉIj0+F)7c>6GxoJĵf8|dAĂ`QUJUu8J+%e2"a/-(*-է%aRլәDE`iO Ul3z_˩Yޙ^қ|\W?>ꕟBޚ)q (P9Y(bT9LVل$WcѨCvkޟguGe5zWs=}'Z]LzRG/x辋_QxZ3Vzo?M >E1T?:e@H/IPh4P x^ `+ U54˳f7SqEXܷn]Jy3W_b~Gۤ t}5պzToX|>VƽƯO/29Dk7y͵Ol=\9wGӠF &(y ~uB3Kpwnxˆ[{Y 8#u4>r^C% ,++#ӉaY$ )!U ͛77D9SETV" @H"KUˎ\Dʖc/:*x{e%{S쉛_؄7ߚ{Nіv^{yY[S#sk玾s =4>{qU6p}ez>ӫ}y뱙u9kGOpNkZk}xSצ|{ T" f OZZږ-[jF 3gNdg۶mC @i^*KWF8''=$Jk[Yj<07'-8gs9KK%d~F]_vM@ON:h4@ħX #uk&;yj׎8s ހ[dh`ևeeP'R,p6ۉ`0ȄT> >|# <^UHؚ2ɗ"%C rBjz&GhB< Kt:g7^݋'7F~'1 *ϗQ~>-r$ѐ*u)An/%D ۛ ՠGj)N%.Mb8Zv>ծ"!8:6 :E\\W/[Ki<5! Fc@b DCJK3 ݛdl6ng(n!W98Ec/u"y@b@*&EMqKhaG|pjz`4nEVAHƚ@5>ہ~QtS)"ϙuȨevsNM(0xZ~3VIFh,Q[x?]|U Q+!*_;Ѡ'39`Oմd$JSReEQIg6JH zT$$q irDqfX?1Ʈȇ͟Љ]!oHzP;AY㰂A<Ȫ>&^q|~Y |A4pe_98WېՠBlTk^0--d2*3+2;*?Tl1)6)(w燂J\5]^/7)>kF4 śW8 Pm# O VnفES7yqԩ.wϷs~yvCrˮm]"k6Syr7._>^PJk{ʡ'e~~AdYbE~hӦM5?Q]yw7z zI8]w'V7wqMSM!-FL5.s^d*81-ԩn CøM-,Iz} LB7Il xԡuƗ_uCOC^}C8%&?pԣkp8MQmزQ!˲1X gԫ?@ǝ .y'4,}sO'a!Μl;pJR3(ϯmPNy] %(8.`R9$#@1筎׺w]g?`{*Ѿ'4qok?\{QYŋXPelrK' OdI /Ű3qr?FnJ4_C߫&>KLG{nfu,wߏgi8#쩶mtw4a^qGrF3W@IYPС=SǏJ0ޖ0O4fmDOd/Qv*F&yNoYU+>QI/DDMy΄8#esV\>5;߫7[m܁#.ͻJ CfTz>ۓ/mv2/"CcxyPϸDp>1fr[h2md]|~ WW[0TBp(yy|JXQzC3E;Ϝs["C_,zv?B>ZV,0<+R Kd-S@81-QTh}8v5 ]|]W(Jйzě/|ԵMT;qBJXueR$NA8+u󸼂@vaU&/pARR(U+9f"L#gH .(@Kֺ νI$4؛&|?vWO4>칆chB+皪CǾOO^c?F@#h`:YB֖}G]9n2*a Lzs% C )q [8=՘_.),zʥ%ZKww\߿s7{q雮=^ǟ4Opګic/5gȚ#5ꍹ?*m)}: !\Ra)k)"n}mݿ?ō"G+#%piii[lvJm>9lGFLPflOӯ8}{o؝3x?tA 0`9s";۶m+,,2dH||<.-=rë c}J8Gc4s`%AE%Fx VI@iF#Ոй7y46zny=+vxf/SQɳիW'ʌ3N'.]Up^:%%[n#[z9yk/D JGɋWZaB,81=ڮE¾eEE~ CB49R-&*B/_;'gDv1@,Y%C<$Ap̆] ءfPaiV) Z%)>٨Cy`mA 4KK.*qvZ$IS|}U#yX'1 0; P(TG1zhv:!A9.z7jԔ8kɦƮ١7j I )2d$+I_"% !Ҭ48'XV.,C;vqAh |Tں)*Y:Q#?:fxVA %b_̚e^r^h*Ѩ@>C`0iVZ*5 Q7hSl+ʱ|.бYV$hUsl]bH֑wvzEb0LˡD9: .Dy8-BBƷ0|Ĝ qd& p@q2 D!QTuoH{l]ǓF(g^O~o`s= tCy#4+;C.0dH2A%R@*`J#DYWpb;Qϊ<%$+ǣj΃^B@!v!"D't=S>5)-YxjD80iGS5(k~"T"yQ!E +٬STr֝yl7} IǞp41/kЋ^P"_JJ)Eƒ}Y3 FYS"/ߎ}zKC2x!! 'P(Dt.D)EPM 8a|?`MR@իWF`4*me!dZ8hF7|Sʤ'J_ɴ~n;`R"+6*Ns8Սl `4l9º#'HtX!#r xGQ ! L1 p$2/PJ J B]s" jP)iqnfk&%! F@)0R0/4(PX3 F]*PUC4vx#YG4 H8@@R D#4,ٛ/^#+'HpJ}y`0t|>_ ynF,EƁyG->.Ao.(, )1(QB@( SJBs0EcqT".4!?d7ij.~?B1`:kfRd.4~ti~wf9̔' IDATfM0PB1B1ƀ0B$2Ljr< 0T\'G"97{l4ɬ?ouN:;`̘1 ~Uf'=̏/qzW i'4nW+msRۧW|&v9+!Lr]eڵ.1\{,E=? E8p8 9uS;`GmwUXpqs8s0WG|Bޢ%/O$C*2BdwwGOas SJ|Rqnf#^y &ZO?!zl쩽 q<|/,p{碧~ό3ɴsέ[Fvnݺsγ櫼v z9QT#4Ȼs5y<ގ[^4,(b ɄFƗ5 cNRܬx]o䩾Ȥ`ɒ%}!Չ塚 馊(UKwY#Ǿ56{j8[?#=c% I|huJ F1c̝;7##V^=aA"7㸦1B! Į3 Q3dFJsxq 8Ƙ8@)(0!4\u\|GuL8=cgnw+?yu'XkΛ<"" 9;%B("x-ϋ%M6h`_~B!.NNN-5vufP$J332Y# Q7BqNKQJhߴ[>BYp:5%,Ϲ;СC@;ɌzZ*<1$Ezddft hWr^]G6{!=vWx&>PddHqF\iMAarJjvn^:F0 Wu cRv.61*S!1B}{di7n ڣm۶ /2#=LBdTФ=$JB^TPhަ\P:JH^h+oN=x@DAl6sHn`2ݿ-%$*H.uV$7lKD5*d/Td(4$Ih@Д0 MD^=JQ/"j̞2T!u3HPB)$!4SF).fyHJ *m<1b!`֛D"!,ϰ,ɃFēM{|X-R'OBϠ&TOyprt0jΞ*gwhe2`Q6#I$x`JJ $  kY#,WY&x H|BFN{Wi/Y BD"S(RD" uuo,kH($II@B(' 9P(h8XyRF}c)[nŏ !T3\n4kձGD,gg=?;J. /IR<8#-Dpt BH7r4cYg9R( M#wnGacvB@,23cd6JFkcRgi\llD$=s& ()=5z3Ԩ7s qIgX)+:o㇂Œ\Eޞ%8^&};B( QkyS*B$H x@al١ܹk\Mm~AQ0]FHRj#}Kjӭ^ml]Y$xFbHT02p!EQ[֮E֬1"H-xKM~s?MK@ioru|!q囘ߥ<Η9y3_u^A痞ޱcG\\$>}ڞ]<SA (F$ EV6Sz*D"k)2/,yiꀶJ)nkPr*V1SzI)M!Ssƽn'%ƝǛgo!^sfΣ\R~`bȊ+.7aMJ^rXe] FfU⹑_fϒ!Tc3rgW$ͤeʽu="N_ĂwԓT5n/߁B5cI\Y[h+ʹ"f|`Ndf]; |Qk֭ Gk_=8iL$Ȝo0f^Zsב]ԍ5&a>)iڵX 'v+Ruf<\~} ׳gϓ'O~*:g>p CNF* ВQ(XCO4o^˫O^67\ԏ`ioH,ðL#'OIXZR'}DVm{cFFOc #YyIdP߫|4n~u3gR]3檥RWJ",9/'m:…a^K7=(_ȡo՜Iz~݊Q ço.2=k?*);oV*Z 2:޾ؑ p?>%HsF\;סCf71}ӦBВVH KV|qm?\`Kۖ7G1y t_ya<ښ⼼(/\Z(%ϟJy9-s4 /V~fqޒnRx;v. 7>:x@ }J nb0 ,ao{V&L"f6 TkFvvfkoO|}0{C歈N*--}#K" ) ^#llpy˙#{ΓfQbNc\]~-۵΃YAb-@7rsNJB,4K:8$e- Sm5 ipi,;{8!2ԡ˨dUKQt) iwY6tEj{#:u/\w3@W`>EvwNyt y@Ztyc`zQ5c47Sc.º!#<$ EJ$oM W0,_4GjƊiM}yu|xIE4EH@=`T ;k^yQA~ص,K$|EizK{+W/nx#GR,Kܼp?Gӥ-em5 V%'W8ZVT`0|=7LKRf(l-#P.[*b[2S/ &/{F GJ-z\,0ӎo\PR={R"_`;V|/5㘼Qw!Nex5.`2J&KY̘޻EB͞=FXyBҊ?]@laVs*`G0۵}4iZ jT*Bbws[1;4 jZV,j=~*QM0ݫ$?br߆aF[whe P#䞃w\Oy8nч|8>=`أ28qE%A:s L7eY:5ӧ34 oQ7}uOlkXLYuӹы6>]EV4O̚Z)L\ؾT+BKZ]^fl،s#[+JYT*U:^.nZ#ã-O^ٵkWjʈF%''k׮B.?Te=<<矋gg]Ӧ|N5D"^_~z{ING=FƤ+97̝7k?&gΜyeIIIwuu .iѫӳgOҚLqro|у~$b_@f6>>ޡ7ɐ˻:T7˳2cmZB''%@jk2u*A_ѽM >Je䒿 YyR(U9l6;88:uJ,2†$ITJT*U(j9;;33f䔔 UO $CC9/$x񞍏gfϟg:nNPT-0E>>Amv->ġ:vvv[oFFk>^zɳ*2]k4arRTTvvvJֶ& K{>}g-d2RZHpHHp32B:ɯ`- 32BU]v/{"m'U) IDATUe1&"&kww+W ǘ`L'&fFPTc0&/JBBBE=8y+snBzL 7ۤ{L+4>M bBBl}qlὟebV&`K`L:3ƪ,d#ƭ A*yBYbbFh4/}l25iYBۆs[O愥O!Dp0q\C1B赐?|ÇgggČL7Q(3;^//TܔbJT|Ow>&]+V 17hԣ,KOI V\x.(4ƝR8?ա'6vuuu-=uuup?O"|+ݽg:bM:Z{/o!}^̑KL@3p'~MznqY!Tj(\(4u藧zZNLL,=Sq̙GA Zo3-U;=1>3G/)ȱf(q{ ~}. _9[uƔ?bds5:rNk:Okn΄G& K_m۷Vw#rxOK:ibD& iEc/4F֨1ۀG |y?>]GO;XJFٍ,Gg$]Z>_̞Ghǻ[[J|ϙo>Ld*xizBqFaȉ7nܨ:;F(eXfz>;7<?$#W2C!^@!!0##fdBמ$BJ3r1:!*>yXP !^1G~1ƎmM@9YP_}wfcNlװe=$T))=wi sΰ>m+_͙o=z= ~d_ϻ Qmw>r2i oDٳgsZVon.C}yԊ-]j^lKKJ肫K>;y!}x}ٯC9ԯ>bɤ&2qfϖO6Eo5pp%Iy~ߚOoX>]!tAd(U/*zp}XFpǽ6歜bidI5džnBVM[~_9]g2u}WF^"j35gާfU$9yՎ2ӆWҶXƬ9Guo-$J;e ZjdџoY۩U8bΫGU%zd_E|0m*ˡ5Q;m< 3d%tm?=^)딩Isgg,[iPŝU/T^4 ܜB\ehqg=z)kHdwgP(w1nH֥c%'j+!(IPHxE_9ddgGH$s2zh 矊珟о|#3V!%?Z]LHSPa<4 ٚ7vq'o8roVJYኆvmͯmLZ9zۦyIGYy+c|J֬/{;L&x6.JbștPBe~{NjdEUg-, Rέm 3m85t'Q-EL^%$TL80W:1˟?YQYՇ/KJVmn[Sȷ>_6H!+mzƤ6Uo堦⃛ٺ?R8xN?=ҀsVAغdIVjqcg% s<>6nume48pN[B; թcznu8O'uiѱ?Dj1gghF#ۖ9;!Vg-fmⴏ~ڲ~f5l[ΥMu[R0Y9yj=QrMܽ}>AX>qSw?!+}/ooީGo?o_v~P^h_+7/\]u뭷1Ƹ˥zC!ytRck/^~ׇnCw^{3/U__:W@ W[˿uqvGn1>K;^l9]kyl~NyK/6=WKSAt׿%}_ztcLw[׿^Oj(ָ;~g/=r{v>r'[zw_oYW"뷼_};#oJoίoz_}mwo>Y㎟{[_l oxy}//OLrnO}1Pь՝yvPG jsv3?Oocƫ_wm~LM>F_;[ɓH ֨7+Ojn~ۿ }oȾ@?p7+~~yVK߽|[W^nܰ'(_}9+=g+w-~yN.q߾zwo5.;%7 o>c|!cU-v%0sZC+mwղ 3:Z1m3M?_>3z x/c;A.Y4l߶`3?IRx^W~=qk:%6)O7-[~kxן Y~lG֩?t==S57-wrcdz뭛oy[*J. \ C_g"-{ox#g׺]7I~ZxeGrԮ~ՍyF]qU;d);2TzD!qflOZ^kL0h\hϾW;wu?_: `_ÿ;lN5':yo?JGMuY"g?Vӿ_RGw?n9.c1OmOs_6cC:ҽWbzl?__nzka]~v?]xoC~yxt(jwWQ\d};PQ7~/|_a|盿A%\aOy"-O÷y7[Grm,I [vm'8rg}㧕F<"<ʣ.c}XV۾lسhkOuW{Ϝe/G?pw>هʧ36:?{ݯƭ7\:7mzo],p牟[le~ĝ/?/ݵٜj+!}W155/_'/԰ o+\/,OG/qշi”j>,c'\NnyffWƷݹ+>;'.܈e^Q%vIeÓ@ie1VTL?zeQ쒬e^Y%6 Vq)r F3=gBaZjE0D3yc7_8\? ?<1/v {>ckŁM1Eic1wo}xHc/6c18km1xw=c1qf1du_uBY뗲tcsŽc%s믿,ˋ}ݷ5m޽{Ƿc|I?9 <^ZEpOz"OԔ 333ILUM,*TDjP,Bxc1΃sy///y"vS5AF PHP(Eь:U6%g (*b|1_xslfVx;63@1Q8sk}^:bjN9K RԳL0WF!jJ21(rb=cs|.GiMbDl 3 3_TbI3Q$ > &b Lpi&{@"< Vc1._}ǽc LM$&FPÎP7! ` 5()L@baӒ$ƤZIs|1w}v/-s|S0s>HK\x%kb&\q&DQa2BTbpc1ƅ={vW^%#`va:ɂzjX7+Jw 6@M͜U4iP-B$4Q)H7cظ^[.qk5yyvmc=]q_dyd0Lw.j-U"%V61fFP)dn?|6P$ޅ81BX]]}}2㉖?Wʊl!tZ2t3(L P"%Sj 'WC61?]qnc1dqgVg. ˦A 9RC I"׼м1['L5''Ӥ6zop1_|1,=gFVleSX8ؔDMsN jb5Y~_CPGI|PB5z:c~l࣏ܿə7፛+CT"|dRE-{ƲQcRu{8y:vRETa O-RCv]~/_)tO|c1&DdiiX: oϻ5'V^lk֒KM$|,53EYSGA4J4 /,((EhT&3p' Zmv׶gSx]wy縻׿mp 1Ƌot?m۶럽3^gffV 05W\c%Oo+\U!Ts6_ *Ɗ, 3 vmrncgk,ܶCm;-oyK6J\PsW0;o3YiDiW2DyyXPܘPf`Uɒ'gD8h_T)H"9s7~7^X۹1O쉻\]`7GC7cllFOs'R7{s7z=žUSic}i;c WןctP'>ٟlfeٹAgά o' .L VF-C9Ko{""=]=vmwUͧ98e?zdU GG:;-Kg{IgϞm:2y={lۺ,KQe"3 DSB(;^A`^EλfQKS$FSU"RUݨ67b72-<`DbLT=D(R5$LM4zEULͱx؈Ad *b(]>uD Ɉ b(J(e[,La1FT1;Wx`?v{A׍Z^^jF0"QUTA0})WjUBTT:Sf8ByJ0U KA"`$Ff2lA"xD2hMTt:0oDDBI`((Rիj0ETfbF @ɢE1` w0B#MMadP#4 HX%IAUT̤ʝ8TLYd22 RETbJ 8(f̋v|Fz?j<術+4՗Wnim\^/SϏ9~2SC\d\Upe9e~Y#b}1R^9dcvʙi0[^Vs)(΍Fv:1hc+bύʼc%1Dÿ(ۜMjcVK (!Zf Sxg&ʇ6(Qwh9GhR= HȑAUT 6Q9j#,d`PCEX5$r`%B$ZVe(g+l@ّc.b̋gVxկ_XxA2rjFOGb#9s)MO4( QLUP#c2U31SLɈJBFDBD 09l)(jq a1P1SR!S@Ad՝HD "SS̘`$QE b(T4(  Ag#3U%S$ L(rn˲8tkn !(T$D@ˉpwbj@:33v2DP,U F$+̓qvQ9H0 r ĵiHDE̕?;4'>՜ze _б6EE?fM)L`7:Klj:4z#d4z "65V*`|Q$*2N 1A P 1Ƒ`@uW#L4BA`z#97@I Jq2<^8$A O0RYu)` KLdJ`vF^ 0J8z'O!B%0ly ?nhnM fޫ 3Ԕ7|!ZMF(jc^78'J9L{G瑬X*:z\b"}Mhޑ)jY=Mj;vfdFLڮ.S˫GXY^F8"tnjC1Ff̛\nZx)Fiw$Mc1i՜pyUs5pa|j| *3U'l] 1D `ZGPlHe]$ A@9f$DFjȥAșPGv 幈`6EHLDFhfd`3E9Fv`T"A,Ƞ So b F%""1(h:YT52" #Ra)&"U QWm~0Fr`q?\ebRb(*9uk2mRh^J 3)TJɫ9ԻDGO?9 +&je)gN/X:A/2==c^ac5?8R3;4991hduuӟ&3ӳgXKc=YbQDUŠ;rG(#|#w~xzfĶas8pY(p)@j*D,EYJBDri7\J1̆|iHG{fB@IKzy.e4 1TAQ !>w%2r9k8NETG <Nҧp aV]7HL+A, 'FfI(11|$Vw)O;ݡTͩq%@ y,JUc%h‰MX5EC`Ĩàj5A *+pf0#o!f@ U-52 QوGӏC('Ν`8(۝$jC%|ӮF?*M7\,Nel ~ %Ul%65Sۺ;VI IDAT4-Wluy^.'$?QC"jl-}LC~sTM*-PH5ٰko葰t^4 Sdbk++RDTSKK'ҤT4yQ:4gNUp)LU=UL^3ql)?tȊr陇-CDUYNÙ˕VU|Dc`Ub8')sWoj*4y+7`ybieM̠w;hwfjHT^&P@#cr)7Z$hf .H9eCnV!|z6fb(UCVT<T %5 ";զ[FfQD>RBHӋ[kLҢԴ1=,\'2eJ"䌕PCY*Gs3iB'Ok]nOF_v4"s OD)T`Nlnvf:3V+;~*t%9sdbh_wKkv:pz0L %) Ӳ(aYQ rF D0#fHD<ĕYM$MR"*L TQeYf!BAe$$!q>Mz7bުg xO*e'P̀i!f3cbmTCTE7@M(IdF`Ef=̛9NӴ6Ԓp05%B'T:|HHc*$8 o!S2 6dJ/>t~Gr9&*2Pc=d$ԑ;8(_h4{\Ҭ7o`pG"!l8ٞ}f zn"b eh3TSҲbCUwfęvU +`~)k1 tQ&3++9ρwEDU yo{J'|7M6ŗ\ڟ8*$&F)W&݁Q n$ZpF\oA./y 3rSao2I׷^'?إW_esgO+UuyT(HTQ!(E1$@LUN D0zu tdQHcb ~wDxFf5RɉkDiIW9/wLdȚKd*]ӮʀdWʬ$ُTRJ!Ab$\Q%ש#UJf&D" V\D+<ĭާ +Fgh!p3+wnęSά;E9Su͌q" $FZ8,Z9U5B‡M`U WX!j#]<̈;bN^dF5oM+CCL:e/{l/ ydĊwlje^w3vKYQ08Lt]7-.M^M110L3Aѐ;!=tZA;r8*'>s5v̢s=TޔDF1R^X`S'E)yjf!1}#{E#N`+TtJ&f@:?AYԠf:11ؽqu"$X3e.JN3ebW>GmAJ3Sŭ[;rQ9M)DL=g'0$V^&"eVZpfE^넎ZD̪`aL#q%֑'\q:z%a2((H՘ Zͪ*1Sm ڠf i t{PSgnzjۍiʱ3H]}ˎC:tp&Jʨ{E-ײ+;Zv_Q1#k[YصcY\]]>ecN |^635>t>VmfHqrr{yىL..v.U5QIr04tęSkFĬB(ҡiVϒ4) |!by]HC U[>~L/}gIܺ_vnuO|Ө/ Y޿^7c۶VO,_apfzbKwLm{/k|c}/hwgJ{XjB?{Z0̇" [״鵵05_vKs[vM76;ݵk]( #Xjj;Bv4J$ ăLlhaQi=91!1ԲċIJ2e&iR%;& k4536R7%C\cLQ) Vx* τFJafTR6w!BM-RS)L'Q9F\D1Fd. n9?}g;|83,$SI#k\su;vX:qꗜ<{*N3葃nhάdaB431c]\[1̧,{f'ڝyQ..,;~[l_U4rfxh sVOA̽\Q8x4-..l'?~U/9w-ϸ%qiL&bjՁBkkǎb,QT9r\#+'tZ4ZW+tO~r 0*C d33\V #[Z\ơ8S/L8z;wz=2{v]\299\;eS9:/ PNzȂX|3eY5^"jY Ӛ5Z>I0פHYADD UaP-vM3LqNweɁim-gJѼ>ޕ =ԝh47T۶ɥkwݵ4x[Z}>WowSoPއ}״֚JPha>`3<;Y?}zMDaוi{mk_;С}nSCo]xk׿lGZ#'jU 2hE401ëM*Ha~zKv^l)duPUƼf#”#IQ _YT7rC QR<gDF4ֆ'G~䍲qhndLZJw:J|JRXO G`v2(2cO$(*>Sy]Jʜ*FcW^ck6R.~VK~ s0Z-[g&Z( A卓 M̑bn {'zZ{}Wn`'Qgsv_?ݘ{9E,$d[ɳ۶n_:t!Pz ys/pj {6d03ń|8ՁdDZ}M睵ƠŰ+K]m"j&s4ZU5QaY;)[- 6,lscݾÇ!!a9(K?e=*N{|˞ [k5z.K6\u۷wN ^MMVڡW8+8SvsxzʮK *;{?48|$5]u=yX*U:gN17 s$/_0J] f'ea.dʗcPXh0FI(fḲ>UY%{nӎ50q\B޷ͪrLF"6()F>LQUh)LCs\٧zj7qsB(E2J q#LFRk :D%{ĥIS%icqjF-ےDSl.sS\Zr&=/ɱo֒X[////.l|֨ U9Ni'Rxo%!s~֜<I10( -fNcd=^Wxg㳾 O?mW"Fu 6$ wzAP)=eޅZ$$Mء~j6:UX`SWpC!Lo4P?~|]~hGt8D3LmUej۶7?vj?tS+k5GOYz؏^~?~:Url0bԳ7Pq;+[&,*_5%X X?z#8T*JI3&I2 aJT D*kU7ȍ[Pcmz@@i|p=04Vۨ^6 0`F4ˍڙQU>btʣ,ah&FS1j^jY vB6Yâ褩QʢFh eni">Ȼz͵dôDԲraA=ܾ<ف>6s9A,q 7*%/~,NMkOY~p%yYg>Op8ȇIQo}@2ŴLMO)4Ͳ$M4Kv\93@N"6\KPEہ4%SA;"_?1v%銔fB"Z35uv}N "..[|$&|oXڲXϧ>ZHSi8}WW2BhuurF3/d'>=<`=%Ν0l8{W{j[isG}0^%ֲ%ԲGOܻ'n;u{y&bexL>DK4BdAOgn:SQkEU1Z:%Wed*+%)ޛZg~_Ds|sEE&V m0`_1`Ȁۀ@h7%Yݲ(J(V5w>{~XLJEhC|sVرjSn"*ŌoDEX?6XVe2q41;G01 CظWi}rv(4gT=F^^Me#M#]616M_zgx+((5,H R2)'OH:HΑ/VJiqvzni+ ~W׷ /9ڗn*t" _ 3 AKt\؇[߽˸h>`=G)u΢Ӑ}oJm{ÕP6ۯcr V{(٭&4i?DA;K?O?/W~?xZ[n[a[}w~NF+UU! NDvo ȍ9Iم%Gq fײM1@9rBpžsݛ`!"Z8J 7.ۮ'i -Ɇ5lٔoH%ΓWԆ)1 uCd*^rRP{e8>޹ L?rwa9BhpT]9Jhf2i.Z-6N+ki؛KsKnR+&I gӰYpAF &0;93w"]@UJ >ażF*ٝYqܐ+<fgoMٲەgaҌEY WgA(dKMeyV{cIlvӷK?~Y#Y[KJsjO0PY \ݫ>sn]޻˓g^&߻X yJ\(hWkɪ$+ Ol9cY~ÏKG'R̙G+=|¿?ÓG/O4j9޽>yXX@L03Qi%_ۑCYlM AǢn F<܇A7c8u-6+Ա~gmD vMׇH#4ɷ@#v@"1Ք\҈,%SRApeT뵖\<ͤ0 +B4]mZ4},,s`܄f/jqy>pHKM%fٳb82.HMU: !S&ғXarP 5Fr2f˯q\TׅB0'*&aUQn?+X7Rp%̔x6y=8[fqb[/./򘋦q\\^^nvn?bRca fn^92ݕ/`mŦ][rznUKKHJ&TM:9_~~puSx{sS!RZCrjr}ODsvdFҿ~D ;W fnף"&QDz[Ͷ?F騲xyFd^6lE F "jF<*jRʹmw\C^8pBP;;7d}7 b`:UYZoeĄiҜ,01sۆ(Ha]F"Ի4! EZ9,ݻ߹{;;w{fj=Տjh92R-i''*Z'1&3 !b;X?V]͊"QJf@%ar/\E=LĊhZa:ߜ#KŸׅe卣VJ^]0OƌjH7fuj9\^ҔpPd)9 78wwYe#urcB7;1;'OWHRV6 ŝY H⫥>}dZ0q"DW흠P R@dunnYk İwO݋n[D(uWvBz׮Š۴0}8+OӶ IDAT4aM\lPjk>JՑkNHfvʅA.u508y.G C"<'kI22&RM*0(a`vgz(hI#%w^f$u؜b_RL8*F ¬gEH./K)@웈^o5ajl`uUs4 ! Jt{- ק.Sp 6P~2-n}twM3,`y/}W~R4W2;/z;;?s9i%Z ɢD땩V,,+ wHqwox1 닋:i7InwᲸ䤥s óW&O?><3 " ܰCݸ]y0܋}{٘rjL6݆n('=Gw/?XWdag]Xju@b97 {=Ms4i=l}:s?ku7 ي09ܨBX]#<%,zy5]-PMC2X\@$xH`LZ JiWcnu{W%M~v1/Wz 4^ ,]׺e^3>VoPnbd+&*"o_k!Xy)V,toƗ~{чw 9::{%4 l{!tc>dSZZ6PDQ8T8f79k_]?[m]^zp%6b!P'$ի#5A8k.0LSO# #Mj76y_rY;+jQcX,z~~$-Ve]:ZWYX$^~kms쪀|2K2~|uk#V&՜c==7:rh3ѭWƽo;Ѥ buTĴΗ\]`ʋGKWMZDLw..Ƴ5լJuDc{#"V(8 Ýn× eUzMm"Jk[ӚJ03fM!mzn fcV>!@FMӐk'Ŭ8S)&F+­C.sqs!rRC2K SYOWmm(NԘ|B[AuYleͅz:jZ*ON[P Q8}W-&]EɜA+ A;M<=%mM5؉، RP5bdB4Sg82qIX\r_aMq Zw~v(*qՋ˓{9#ν7[ɺ)TRYi\><{ӓy~ZIoʋA"l0wr#3|_|Ã}H\5ȪĈ \Y'5޽?xCuLUd\:*rwÇ.ω6v"J#:uP*l[*~́يyg4RaZ q1-g3筇mGtD_i06fg![O~G"v{rKZqW"5dZ0ڔ=e; *l=#d`5EY޸wrqzy3$0GrД1h=Ó9:ؿie"r QY4eΧ֎C\'`s.j`]Id:%?5ڍk!$URhb"hnدm- f6HxJ/"MfjjD&pA1X%0j1g~Frx.^zp<(.hvoZM/|)RD^ӸOcr8-yvbņYd0:\'Pzgw^uc~zms  erjKkY ɶ3 jHK 3𢕭R)uE;IZ4Jۻ" ]h"}1gT1`fr۶چ6IlhX;+Dv5Ӫ&,\4&B) .RNZ2Wx1u֤n{7|뵧OϾ{iX.Wvr`W-LL! {1/B&ɧuZOTurq0YeUl"43e#iN;Մqx G5E飢+ s"f%geČEժS"la n*)05TK/kxv]j>Ώ~tzQ7Q: ։7w7_9-Fn:43 ̱wurri9H(Xz][o=;y'zV$6fwK9}ǧMvgE7qK c/m$"4M":q DlVB!*3&THm4[/_Q[޲ÁJIWW^߷ӴSuM@&f;fg -0z(x1Q(NLz/V#7~뷎܆B-X brwΟO>|1˭vd2;;7fB Uɖr14=MKw TVip }'ZX@s: N?rƝ$U prb\XF#vrC`wgh "93*(_A>l#RLַ)MaIbOjI뫫q9jMmaY -?>{zL_|fڋ*չ;ܔk*#[ߝ8μ(0۬ `1 ,[֑̀~OTjPZ-wZqa\׎k#= `mK֭L:Lf! U`S*뤙n݃tY3 `̨aE^-yaEKxi5]+ Ϟ> A>kws+eZQHrn0bp5'qԜQr8PuWQ o590b pt|+ ڍÇA'O>~:(2hN|83ԸmQ`)̿֫G|К#& LRːslܦB1Eg_(ng<p:6Y$ab1iC'6:GI܊3A3ȅ@ (Q&dXӧfЄ 0Azqg{|t뫳q_u;s5lYT4%gb 6߹y+e!!Hʛ*7&4ow@d0Qκn2C;wxW[Z?b榄c0N ,r0j288*gS Ev3=9^y.s`UɞtN?3M$ޟw%jc_/XX rkaoo!=+0Tz* ,UĶ_B]"R%+dŐi1/W:W+eb4{w_{O>w=Uu*KlXRV% ӘC)*ҴIɦIkZ24itJO]E-$Uڜ5-ꫜ>b Yg>6_]I̤[;Ù!!le)vb &76`SE臔GH^ D&R.6ݜnR n˯ S_|O?{_"npSرc&]l?r/\jWǽ}R;*܆Yj*%Lk&!bX)^s0íuⳝ#Hmw\Jmz<ȑO UN ț&<™R6򂀀mldo۬$FsP~j&d=>S?4!rZ m >R6ܶr\r\~歼 dJI-ۉ;WV{)RF՗5d|_~wZj %-*BVvj 5ko{fg 9`NE:-uHW|Y|*j9y0jtf*Ϲ)zHZ19,K$wg{;4眙 #Vi1+hfESf767x !P8\ ^Z1pTW(+3U꾠(CH\)ȩ/@>u9.|G!/f%ihA${.M Fn*=w]|&t}s=ukďfz;\' 7F@Efk)+\M&yҘc#,M7_~? !\ M 70p N 5 ePf#k{<׋%RI(ݽ,^;-+n~07>m={aXguXgTP݉h)bjY!_?Y; mjMɅN$bjEK\dΗ꬝AJ*6$Yj)ӥ^p,N??\-ibYqlHTjdY4Q$,s%4i=10a)vb!ibh܃Wȝvqy=M7F2&Bj:;pX~GgvIr6'17qa 8 ^r7nٳ(%rAqӝXܔHvW\\>?o}Kb~{m3v]fuϬ;1}18կukh@MP?C* 9-lSb6LhQfMƉvvҔ1.Hf a@cB 0ѥ7u GCyg\"SM)uј yu;-ȹf I~o߿!' \nF.^UuŝY^]jJ9κ$l{txE;g{>G5uK՜U$ +F||fFȚC. -%\y4?h۞i$F7}i`zWĠ %Аxq 2O3z4qJʚ&e-snc)Zg7Kyd7f@@&{d% 8J[Ǫh@V VQ3@²ȭjIg9m19u"{Ԭ~9meFKV3wtצ49ÿʗlC캽]v3OB%?8ݜ?ˡZ!nHmDVRlkcQ3晈El s ƍ~oMտE&8 9D6D+'yN7 ZnDUBb㥨y) 3<|:ehh qlQy sRf@J\? &"oV5pR9uu| X,wwn8jrój)1]ALvvvw bI}RTǜcZ<],ǕN甊c+8q̎o[ e9UGjZvsx9*WL6W9Ȕb*62Ŵ(oHH)-d Ry{<~֝>uL6vmhH'¾eNINa`TB@! rv#Po$Xf+> U0r|$}qqqnKB2!BLs!WsRws9YX;A`ٻq*GtpC׵}|JP&JOч1_Ńg=b! Jn;hz"sjp",DSi|JS804΍H~!3:ekj '9 ׆@!Qe>bt!ku z:EH)[G>]ؔ! IxUՍR}n5tߠkUI7QDzU6Q~5 8˾mx#]IC4 è)q@~>o[By"LAgp|T>%)kN،m&n5R XDak7Bn>jea,M@&5f~׭zA[/2_}wzk]wG}kg~cC ?ew]7f]zL IDATC#7@A`\sIcW[NbZ@,U@޴0[)fE<0z15"-y-`"6 u,vv(5 Q\yPش5Ԍj&80XJL,Deg '0hH)jkJpwsOSrLڻwW~%x& '4-P[4y hIk@4v̢Pʷ:Yi;;wԈAQwv#VL`;9/HBӼ2x6nNL@bڐ*əɍ,bBlW{T3sJyF'F x3=z켔)▥^Ɲ\]H miWWA/qU!-@HN_Mh*8oL"m׍SRAQH2 k2׵:Ox rgۄBԅZ(JY_r ehm'=-uӨIMn8 d'{8{Kss@O*6R2snZ/bD"|~FC{ɍ(`n3AҸH0 3`y41 [ؑD~^-p HC K*úLEh[l2-q&R1`s LE(<'Fbf0hLʱ_\\4i)D*(g&OJ^^\絛(ղ;7/N|Yt{;Gyv?C&)0=HLI ʢ$,[Z8ɝt˘ɽ`phwo6 .nY"Gm8칍<Եb#&T2Sw^.@\LcRnQ|r*H9{"Cy;[U\&򞿸hR4{Ϋ/Vzѹq9!plīc  DAy5U/1@j""F(1Lp3{/fͧqɼW3H<ڻwJK/eM".kT8BN}AZsBzmu VzGG;[)άu@K#2@)LZ\Ќb۶qPfg \, t|v5!2)bmdulɋ6Q_I8s\h 1Ā7〳jd鯑^d&dzЛh n UUwUך{D{9YXP(*ʲ2DO*o9Ŕ8^7zIܪNNHLnisړ*VԂY+f14|޶j5l 3j[^cZW+Y @'f{ |8\9 ̧vU=j=9u9SΦ6o|\hZwSh7:qnRbhoj?Vf7/֖\~ip|t2)BY_DmյH3ccl&4OI=YwnJYUE$KwFAMjIM)<!Fu󣓽YjqÄ`KڸkZJLLaz.rC2Tɲ.Ur9DF ҉D')&1kP8ij bz}д8TRL 2mU kWNcUIܙ`LrpfEB‹׳Rʴ/0G5ɝ\<#0|k8\)*5VVKͼ__EK_ixҟ+%ݙXyw7uنDӾ=l.j=]9\5M` $!E^ ], jO\P"!lC~zrnn\~Z lg+~o5KA1Aׄa$1677<?U̡> LLBDL]ye?{%X'</o?xA,ēBn'9JyצaJDxVmmx:PrPlgcYgO8:0p1oˡ 2a\އgsEIpvfu9~Rk;wH.ߦ:Vy;vS^) {ׅ wc^qyoUPVՃ؏07Svfŝ|W+ay[N΋% 1M`NTO޾OG oE-C&!04R91IUUGƼ;fn$J"AKZiJS59ZOYllMY$9HƮMm jsUD* URM,`V B^_b+;z9{\ nD:n1!3\]Rׯ7/+׎hLj(%& fnDlLVC`4 Vc`iuf); 6;;׮ߘ/>>z(#ÝYj(𥭴3Kg;g]*絓k@NL1VΓ՘YoUrN !4Mӯn7;m2@rO`3Sm%0o͙h&8^^?>F^H.ᗴB(0tHZ-maLOy4m>k lfٓǧz8-yxܯaJ&q`*ALfU݃%0DyHDLM3wҜ"ĭٱWWLjE6nMe10dyRYk%#7DZ]5I6䳙굨&rTGƀ*Ww .& 3PAql>sw?i@ AڔG^PbTMUa}\n./)4}CV@1?F|EݝȈ0A\XR)618 S~SWRÐvkP|{ck xtVujﶴX5.,G!FjL6tș@ǵgZ$uF)79 T69 >13.8hL[>|}㍝;gnSn$Ef&zg "_>B ~ZN w0cfquwUz:swrz|x8k9ؕrh{Kh2Ax ";=;;7v>V 69u ͧE&ɪN`@”H+`'ܐ0n^s6i{"˴!B!# MEhJt>㇇˰hK=TaN"0/֝檇CݥܧU:MV-5USi6KKiӨnj v^Կruzv/ksZl?1?{^VWh0_㸳}Ɏ0?kL?欋4٥9C̋9&:K:BhJEc6,X&)pm*^lpuRP&_5ʃsGvg'wjìSWT&B߿t=eݡ0gniMRRkܑ1,e(lVrYqR2A%`S+ml-.~f; X#\T0pgѻK2L^E S!N񉲹+_ȳuÁ$: B^#Pg.gIN/[wM׈M14:>m x;ULC-w#y4%b[ I=scJ1rēS&rJsbWwi}%"Fnl`qca0*i.H@E#|6T7O~4'nA8Q xqɄ$uiJc.±N>w^Yl_Wq!HǏᶙM~$7'^|TdҎ0֔\LLQjV %V$Zlǔ?~r̀aȀ*!n>}}ۯmQə=w;!*c9Y)CܫVԬ5ZH."K9y䣶owR o=~~=<q+- 6#b@DoIBItXlNdu 򳡴!P^40UxZPS=e;gO'EumB)ILm$˱ ܼ8#M!X3(Y1-dF5K-gNd,NWK=!0Ojꆿ3H[WJ<KZ!/]YBLgxgk㰎eΏ?޽fp83oZDuF qfm;_˓ޜM6%Pt n$sp-rU1jD9~IĶKggg}?>>9\w*\Ɛ~$D ܴbk+'"i6s+;l򨄞Џv:jF"XFnw_za\g^j^C˗qzz;7J],899_;K/k?ͷ90]?_z7=_W^o|׮]|ϿVxJagk4,L?v'E:ػ{ܲT8XijOώ&SR5؜Qv+99X!zԴ8[-2qw⎶݊hU+UYHH0{t^v4}fpv+UEf,VԜ)*/LDV 2#7ʁ9f7%\""R"0 ֿ?~hʳ*DNIԩ\cDLN%'^TR Y#g=`TG`M~8U?s[1@Dff.\*Yr򓝲=c-j/5 VGlzwCw^ΜT5 A ؟b/ ` # .wWPƢqHBq@_ՋZ N9* ^{gލOpٛ$9՞B#Ó'GLf?U߫wOO?=޻zm=V.g''|6ϖkrܼyתvxtګ[Yյ3HT/Yi(&q`NN7ƤԽ+O9j%(Y Ww20u/pPFZ\pMH$`.FAVV'V#'D1@L)1fX.lz_:lwSٓqi|Ѧ$46'7PʍqcJ0w iDyɲ]Is`9胳BFgڢi,?>FCJ|շgg'w>/寖You>j1sA,F\{391oZu6Kׯo۷Fu/}w[!Ϻ6&ުf"ܶ 1yMۓ 88M̘ܼIe=Uk)clsj6]5y-+FLU)DT:R;v-@5k6˽;w1Θ,l@MaDى^ٕ\RJptjLpudQ6~v'$DZv+0 ֡ZV΀Ӕ 2!" ?0s#*UQq[V#q:JLEYXB`iGE Vcw@)? ]&6PYGd[U|iwse-G#cjz);fMi3å:Q6O\8|}w!Kmf$tbwG?I+R`~MhZ<9РN"yr~GPR}8RH{L54!OH)J$jI9Rl3@.1\> α蘇Հu%]|zPBl`*f:9J00#A7{ڿV-^<ƐL ΊlΓ~CL5ZٵCp㔉J>qn7Ic6E^ 9~NV]Vb5fjTVc%y9& $ֽ5_~zWN$1fX"rw3RGSF" MiE^EX"4q$ۭE1GV1tlUM.rI[7^{K}}_7o^V.ˌ҃~yy#=Wfp#gD 0lK<%M{_ /'>?~dyv"LC&r1,HЇ4̉+A\A#v;$)4l댨jZɭ'%N))\b:3A ~ DR3:R ʇnM* Yqm$rTR am&'f1P86ht0paK(ZI!WprjXݬfv;*4BXBbjNUL[?'VFm@Яq^McM8Qlv!iy͐|txȍ1b g5r{mHJۺ=rͿWqJ#u"0@N$ >7&R5wo$$&̍`4y;f':NFXgFD0A55|yN8(D,.N^+UH}B^ZRq)cR ehttN-7PrDjK<R3ׯƔ`VƑ ŜaN1֪Z͕ R{\7_~v2'7s6¦bę۞ju2i#ݮb-Ĝx*"pRVgnIAYhOӼȎQhL# 08.F>k9׿/_yU69:Bu:M^aI"!!l¦ W )ܫkܖÚ.5_:CH4XdzSݐFZn^); (چ.Ͽ~ã{߻s׳SJL`^q})Cou`R8$tGW65mj&_[>KS-1[3bK\i=mFo^t1_& :kӆ03sc։ d1rʱƬ\J:VTeNpmfflQDJL+S1j)Vry -xksGP phZsQJDLZGw>̓k/u uyBO:Q2fPul璅IZ3+6zl$O;\q4"\=wsyrKDi k ")cҙE\7 =k9~~@#aiz>+=5Auam[g-|tAOear"\2z'lhO3&"EL{$ƥK׶Wz[W˳ūJEpi6 ,Sp!&S-{D`Fn>55/.]؉_nص?hnί?Z|?D!Er_]_EC70PXō1g qID>DbU #&VHJq^xZmبEicEpT5MNR~8?sH0u-%뾯Z8kJԶDLLPQ4ۤٓO?upV7oSbLRMPXPcD;=Tg w@?2JuY5%=m] %U$ pv);_D3=?W|՟ˡϚZ{Vcٝ̚S时fϮsЙPe 2Q6DV nnqX?~;_z/]o,ݳG4b1^ISO7.u$&7 dS|(5XucrqћQ@ u| qћpfP5*7߼z֏ig>v{g+{W F R~k}i\ω-41K֒=di3=h9SxfFb p{sgrjZ&Mֵ.09eee`i86q(a}ȆM,I6ͧt2-+_| QL-e3K%hYC\ :$,YeQ017m7ʗE_yJ1\$L0rGnG(CBu.ddB1¹\}JN;`-v ⃆`U!In~$p};b<`1i' FzWL鵽݋WB_' a5VJΈ] M-sTz\Z^y}/8>|dyOZڼU^{PyꎥA٧msNَ=\8d2کV"n4b%dτQ"D\hhMtr{e ;"(091"fJHPy^S{]k.n{Nu_+G<,U|'Eۓe@f!*1zRjMEAyAf!$Yz,ڪ5u^ەŢ_ :#e@4`#xu=.1zsSM.g/1lJBm3T,Ծ{σs-,蜄*DJQZMmXH%8"tGiS;\X,q`"5UrOH@b@Ħ瞷Ti ?voNN3F_=nA榝^|U/ܐ˅-W`@B`IǓN)Rt׷tV^QoıY8vt #yDFTx8B;^d3Num5 GCfd5ٞ&}vw${BԜjX82(#\ ̐:Me%@ D@&DqE9@# A60P&9 ~DGjm:vv ] [*v^gm@7ˢ$#`D bfYO'(dEfWdisJ0"Hlڔf:v~2"T <6qN MlbnXDt< m(#jnkA>JY[eUj V+zC}"0F@Ь1%TڨQ#Ղw>ԭ,. { Ö.2SBV8IIHf*tc;|!n\BEYHjә9<ܧSN}remvwvo[ mvi^c(7wwp BƬ e; F&4{JxtvԩCO^U C`)H=X^5X[=Tl_G (suێ U3fe0'X8rMv1gJGZ+qDU'>Zzᅽ= 䙕kWV@mz^Z@6mOP67SB~7ԛu3~ɹ!Gaj IDATyQOy3z_8CȒڜkVcu]SݛҨ({ s=;/Ih U@ M#ZTM&wvD1eɂЗ}HFljM;-E !gP`U;Ȭ ]$ 3l(6 ^}¥YBU(?ˊA=;zԏcH {tbyG<^}wIp Xṍ-xsC`eI!#w=vs9bL+5FIiX ꦺzm?ur;mmƝDɜZcW?>ʰU@,!3YR @+9}OCm@\ *'FLӻάr,‰ӶWF\w}K/lgV˾JjW`V荖y9{nH̷ %{Z猠lF6O!vZ a`APN+JS4҂ *G`F$ƶiM$+&9+D%q>ofiwfyVVC#4B5!"8d "j]ZhD%9 U$!RTU1u/^I*jT2)ŦJA͂rI#j(!@6bηwRdZc|SA2NkdAT}e-|Y>F.'X9Z&|𚌲3SQ^ڞg{vnZ'ADJ g(h Tc,P ot<`?_Bp-1x:WnǎaBlks|>6P)'ΈI{kKMkmVЌ! /؈Lkf}~9Rl˟ҨW-iiwVV{:յb:Mu;};}{[}±J׋$Ϸ"ȱC_UNޭv(T PTU$M͜,)6951y=uݎ' 3AUV|AY{βsW^pC :ZJ 5gb3H9;˞3$#.+2'YmYڰO(J@P]YgA&vft W:*h?\&@1\*S\nq|q]N|bm揯߼&<<Ν?w%O&x74m)6GCk|?z+ιW2 F1j?ho}ua48qj?ăkSzŭMëjWKͺVHb2Tl- 2fߺ6Kq^3_k^yi*F4ݛNadڵ5r@_SٞH4ǻ+ yy7aM]g^ ɐH#+ . f eQ,*\m̛\;rA1Դ $:cZZX=*ΦlVM^X:臞2WfD$ 1<7L;{{ۛq3ݫv' ( ybUAŐ4EeIcLmLu#*ښH\ԅS-.x+U4cB5$,"b!ڱD!2 (Z9evn3ɩ(X_sBqkۋu,'*_e Pq/xMv٠{'\(}uܼK ;g\L8ڌkr7^ߨ|?:r@s h5Kg] ͝ w_\t]io>W׈a-ojF "ho!s2+;f?sۀ`ԡaC'ۿ3 'Z} eP+3fQ}:4G9M=u ^Zh2C*|1\];cnq%̣43p"('-@vK6s#~k_y7_vÏ}LFbu58MW[\L=s"^I+yY| _L_}zUi)¼N^L@Քkx;!Yp3Cg$4Ƃ+ #@p z~Nu41 BEH3vĎ,gA@U}k LhL4%@0rJNU4򸥑Ϟg\=zo_,X%mG!l\ ޱC$$1 V nD$rXN~C۵㽽 .[Vo183PY_x\x0MhE ,3F;`,N:s+/G`0=x-K7y9q[x3uO7{1j1_9{rի{u]7aуxlj7ҋnSLd?׿6t͡u1V(mx{F$f >=Dozc?yϯgM,K΅Gf,LH|)/>-s!9VϭdMٟ9^i͜in+E{Ok Q$8_dsNЉ s*L٘N'EmؼLl"ZDyLb9GO-O8~sP`(u# eDW2x'[Ťj!չŶ9c*b1(G֯OuSرQ53cu,4B$Y$1 #=c"Ǥ3(rJLC5rB$d U#%F斋ނZlShL* ~۵ .PFB7YBrTK_ Kv7 !QR\-RQNI˼0 S_z_[:xΓGWȻgG~d/i[/}ȡ[nܲ;O3RjWKK:6E{ ڷ>OZ|du<_8W.yFÊ0>3x76yk6BaJVn_AN4eMXΟ^XY'Tw7w |1M.3[=e(\e9?|յm k|+řeɹ"BoW LB)J3L.EqSm>^QB9vZbhN8K9HC8qARNc!y+1Ik#t4a *"b;k[m3kVM1'hN&ƊNB1(89kvq-HP?y$TD*ˊi.## e۷^olxeޤM͙Xoxo-RbNSᵵ#G~o攟gg9\]=|W[;ek}=m퍶'h7]}!.;B\okc[_}ݳ7w3t& kD] 6z?^؛\J%ETڄ"ɶNw5XX.Kqwb=:'W{H8y]^~Wڞ+ݽٳgSkˣg={]A^y@vLp4N`S=6^`V/}}s{kC8B}{ǖs :c33.fO^W;S')4*r"{d㫗~m 5g>"daf @}W7n:op%8qM~WR 18`SY >Z΢*O#M?da2+18'AɫzQh}#X}AsE5Xq6YZf*8Oِ@֎܈ 3+6qͻ aH\Lsfʻ9M|W7zVs,D,8' @HWDp>Ku0`(\!;_ T}j#X5)0#cTSIba*DN\Ȍػ@ )01 U`SbtF]Y}it|oqF ǎ:?Sd[UPR>3ؿ1/cVRbG0X+!i}^Xw7.=vhgͼTU~eyW.}LLIs@]GD\>z>X1&0:µso|wsip5P  Bk}zz6A5 ``rCz=zd멸;H '6C32d=;X|b'T'΅m3Clc;_]=vԱ޾~co֭ӧN>_Hh`H`kscks{4X=^]Y>{G֯~v~30I`uk3 9g=_XG 0e V>0\':kl?VȆv":Y@Dtɣ;LZR$ӄ\A33̈@H&FDC~_t 0B89@S #t̊Hλ!rp[捈)#jfgh@_E\4&KN6K L=Hϻ2AuΩmd̚v68slm2"@IŐ!#8 gٌ[mTM1!)@34I %617Ie$D!Ȉh9)@d"&4Ft$UjTW) YnRҨ ".鿯v/#O9yy`K[Sׯo[Tݽkw{٬ZhDcv҉kh}ʅwίBX:ucK=~ts ؙMU+֞/]u :SP<2#vB^(o*D -BH ݵ5OABDH:Ïų'W|{:eVBT$kg#j*Yb 'x/kR;h`EP: "y#B M$skCd<<\X5͛))8;I"1eB.ĈЅC:BU/$fJuWE&j1EMdfY ydU ( ;4F#00pWhLQTcJm\U !G~U4Դ9'5UW0jV0R1e.ҳEɦDL%O4YE:K;~晧z3O~g{BȁMlmm=C"3O8#Žur]~1Z.Vx`dom;~3oNSWw뭧~^yc>WUuԩVVVV?xѣ{]Ymg:G>~gN{}[K/ϲf3Lj<#Eh^Ahd]1frnJ>9)!!}\=  H~Wڎ}eQ.utqV*F=?/Oͫj{G^}Uxo2Fy}߸W/޿?<mz__.<Ϸz#DFbNHŀ e[^ؑgj]ӗ]yV7[ێ"2˯?ɟ|oPBt1O'q'Vvg[gy(ҕPbyn<.6n9g- F%" :!ZP%p .&8#> z'ז$Ic.u-@;JA]LKnṟ(ԛ)Λto3yRGkd&` Y!2~_t":vIY37&r?,cL!̦՘P-(Jyu"f 9#";#r6!H\jq>i6nŕ<Э 4LK70|Y&r=v ]rn(8}5C|`_{__޷/ߣg۶a?@o_eY͋C~kV7F2(0PLBD8&{㘚ͭ{٫w;/\klyU׿@._8vxI aya~' _T[;;;4MGQc0!%@"Ih YBmsh΂Dtr jpٻ j ]ERɉQ7i[ p{Q<6OEUϕ,VDzZVLq,wٿ88Ј .WUb`978R\:&Gll<& WaDIT9"vv6͚,QR I {!!.תŪY;ޝ펧uh4|wl)`m[ʐUp,DȢҙu Q˦@9;d@0c1: Hhh(DdLPߏ;޸" _/TUoݯo9. `0p쿿o~}"0G2R͡$t`bf 9@r ~dޜ* X:Z^^tś.'N-KxࡥhE0C85w?}w!I<]G':48G[LjYa606~_ǞXx*pf&,yHDTD =TYU[tb'ғhQT сiFTP6Sc4EFaSZˆ\`W`НZҹ`FbLi*jPCQAQ5XiiåέUВlݺyu6UQ1Nѕ\jmNUZKm eӽXךH6bl2̦4ֲJ[;ybgRZj'ݲՊ3@qm $F' CЏH In5l$J%QH5g{羒LjY"iăB֭sսu7xhM͘ Dj4!` 2Fmn !:rʬ"B 6!6p1D#[駟Ӽy_|Mrs_g?r3O,tGoj8Ä*X&cZ*ss=y{`# @$dr*8*#:Wc8c*fAEk!" ""xSCBEd љ̌?iel`F%Uq(oZ[]c' ЌDI.KR#QF]|60Р**:ݼ5uHA2 2X*sh"`a1X` D M%2L\=3: PD&`i j`/$*%Y\∐SFfaGrj*yU( 1jVQ=: ͔<;6ӊ[ͥE4$'ECI9è Jh?u9NeY㩩,?;ӟ#ׯ_O4勞nWz୯%BOfpVc\Pw* Tg(94A3s{66 "ɯ. ޭ2- ep\~Jcyq?Y9t`S]H: 'O=qgϥBǻ۝B""@eiW<3>8wkNm@(HTT%cR̀ji7{O@::FEv@)٣ 3O- ՜ =.(P5"R3E5"@@$ªF$ ̜B9+J$cBY6;=5ڭzIK3[I &6qmgB3$ ѳJEf`"fBB>Y AiьO>b?OiޯLyCڿY yx|L&:i`L @j1C3>ʅݫEI2(ěU^ƒΙ-u3s_8pt5upq~w67$1HY2̡^n 疦-FZDlcawG1s4J;Wra}>L';sF@`D@zbԉ[ P`9f$"3od^I;SP䷃aepm%()qF)ڵ 31TR@CBFDzdRE { Ҥ] 9.:!JYnMC7myGk7ePcJ}QhzZ)au Dا>HLb| 'jw0hih* @ ADQYeQ+ͫ@I {1O˼o{n:Lb&UB,S5PpMHDߑ xyy~텯w;粬1;3w+`p^[ Onkȯ~GWt'^}G>|)ڽ]bL`zoÌ5@jW c fzPYy;&X0DX 15RvοN$Nʷӧzbyfh zjcht ;4j}'*ֺF ;`A !!0DICIީWvY#z 1$nub(Zb+"mo2֕_ju~j10:,Bc6S`UCQ12zGČ`*fDTM@L]ƣhdE^e @XSMF4VZ˲A\ BD QP#fⓌSNgCr.hF`j(AB% n`*fjdƊ@ M}CP5i,˲G>ܗn޼я~LUwzݓ͕=wڷ0ݽ,˝!+01Ī@ G1"xdo-p3ߜ?p/ݹY&UP6QI B)9b .v ٙտ_ ??_|Ks 8i◎~ol ӏZzw`f~5g ¡/,WߺvsCnz7܈bկ F ; pH)j焪m-N͈(Լ@9{̊d\)+$1L̺~r;v[n|En@jf=]J1:p@Q0gL1fa9g i m5S=Jk0O=Ǻ~֭ߙ_yg.^&1D("\vܹ#N$R'>V/W[͞hȷgO /.Lc3# $R9zzf귾[rO|Zyc{tx*[Y1X48ɀPVV#v{m/MQTYIQL|(*@*{. "I fYͧxt$wȞGWh\c u9EHZxHАؙOF74JLrJ1Ӡ L7FݵJ.i%I AZ L&FIjeMTXY}:سoP4 |,ԛFG;wv$~glva=ZUDB"*̋("/43JO4kҴAIBc9H D)<)jlH'NT Ur&c3{?p֭/Kkkk~g`-'ҏkc&5"GĠ&r=$E3CzFm*JS͹G6^yV'wh[%r?|{ÇAԪpʳ8qg@@Jg,ŭSE5j =(kfϼw/>~l7Aqc̺ۙF=ZYqo:VO;eݪJ tU Pb4 2#bJk{TǦ-oy p|̗:4qӓ*m)kmUBd/h 4D@Hxrl޴QlJ4SK3RR3oFFhak8/׮]^?ZmOp>S"NJw6,P11\f8DRPDTˑyN&TeR:zG@0*I`mzi&!R% !&iO>H3@D4TSeޫ>X@`%FU@bQyֶ=zѣ?o.pXN]ALnum;0#bSEB5 `@`AL&3Mtg酙GnmIwȫa8{sVwDvk.;wvN?hӌ C#P4h+G#L ! Sz|ȯ==_m6f{xzfZ]ЪX!F)7=ݙ0FʂL^cưRv>T; T#h>m@0FOvid̂6 951(>Нc84ƐH~x-J<6VXA)L8:BjĈL,mp07kG;;7֝$t GckHL̙w.!+,xfn8SBCD5JUw y;eUfqvg}\T2`0YZ^ SQ2e@Q0R$%Tnd b3Smp9DdȈDF11iˢJq~KbXBmI" ѠZAzdZ?BdaV=ͮ! ikaLF.2$SMw͟XX\]_[ywgp45P"o~08xxʕ'OR̷+3FؚӍƕկxֵxhvS=hk6f yxg_WPp|g;d*דZ^;szũ^̒#p++%[ovB5  3&TBKr#Pr?ni[ŖHW;W4.=O˱`!oZJMAP%$j}s0 LZ2b\[F*:@ kLs S1쌮^ڝJcV"c1%3v>i8hcuޢT1 FK休7iV!23A)j*ƶ" ~?u!TK;83Ad3 ȉG1!9栱(*Hi"`@uh C5nRPD4Y$H,MK ;Цx IDAT)~ jpT#}@m Y`?&AfJ`gN6O_|g7 4C1ó}K F:)HMͭ[]\ùvưadP5ZsΨ1ίhX =K2fpхx$UeehI*+T4E&QB DJf;[3l:eטInAG/otVTދkJ@5EDLTD=-&^4S@ۙu56vY[;/_=~(Ę01ϲV$aPyDmwDbȆ #ry@0`q{哾h۫ j K q0;bbA8QĂ=Oya dBP jS8(ZswoN^WWNxn^ZEMLB2B϶YV _Z:8F)աTrgrxn]zb|ZTI|̌I)EXT2﫢*d(rLB! JqqaMϯkۣآOD1"Q0E#K%pnw {i"Rh?1UV#52@t8quDN]hT% H671Q4kMЦAә׷֮]^{euT:;prLwUiiU )hD9f$G_QrӨ"a^{ab@CDTIn߽zSK9gB eLM 1J Zد,s=qF4Ev K"! Ѩ5X4Ā\[׾mK/רv=?Aw"oAjPu2*۱*8ǀh(NeC0@ dT `noP@&Lfcϼ/n>z7^ڹp^Xf.X[: {F@+ T%`,ag<궟^io'$_?3"ՄYL0 ]IG1(I4D0Q{v(7n|8RgD78ov-N]2,爓iߕkAm&J{1^0"WQNo;?R\SnNk0c*F 2DC˘; GRVŭAhFy^+]I;-CfX;E;Z%3:UX+wMEoZEQ+-BbPHQPP@'%8#f%݂ &u  1FШ1M)ܡ`ڵK 3+IL>cmI4 YեiU 1) : 樊dʫ`X8@Kgg[ сcffV qy_SlkQ"thm٨XeqTCGNȘ*37fhhӏtϾk5"fUPQԡ+ RwB&JKDR {VβF=h5g{^F %3IS=(%4I][֪U4jeAQ31 hJ?`W50#b+X3KJߨ\8:B#PCT#DIp3K`&ao`Pl߼nwg'mv\(JB`C f B@DT3BFDĬb1 ׹GH/!"2:4~s3@dN'jH ,`o '>qi#I|]ˑST&jʢJ8ùjC̕Y\.]g93?ڳ؜@1\MqxbcF\!okv0BG d&uP#7rB\߹ݯ0uY9I{Ν^Ȋ]tkuFd&w4I?|gwŅ>][ gQolq^9@GQ@8*)i;m:"ƑXIXh$Cd 2RmlgvD?MVޏ, ]- f4SF"Jb(jj,E:c\$U!VIZ H@xjt%"4 {[n|g~aujzĹ7tUIYJLjN]QD k5"RW#nVC/`(ss7L y1RFb\;F6o#$QÝ_fdRb(S3PAQT U{/_c̨Ox;뛷~yΖ,k9@xW;;/w]^E#@B&(fVVU.U#21N8F2BdG ȓ Pר139ǵI[f$VZ'Y&ZyE-L :T s t\x.$i>RX=V!QP|՜n &G.i[e*ZFbY}3v=D$JH 9q-DzfAXL դ΃F MTDvn{2$B!M0䙀!B(Öc2Fji! iW :ꓟK>O~$@qUUy_+?ioLO?~S]o?to~3'ijҎʹH4lw^]{´˺?cGsuXlUbc3=#n,v8! p\(JRD kIUZϜ 134qP+jQ9BDXQcĀ4Ѭ,*Ŀ#[ 8Hj#{*j i*DVOZi24F5ոVsL,K5KϚSRIͫg27u`qcBRv{IhD܂XH,`A ZtͻŨ!D3%:Lꏴ!@0j'h"u@<0B J{dsk[ #Gfva{L|P#@ROwG7u3&~Sg}.]ԧ>{{od~sUGWSΥcgRMsGN?ΨLo]ח>`{vμ TC7v@PE40'ezR֝%@jZX̨}bޭ[Gܺ.ol̍kg/vO>J4wIFlx'yHME U APZPVe3qy L9eL;l{P]k&D@ZژA AQ5@m+ hIMPP*hǢڅT npH Z0*@P Yquf4m _mt溭UdF:m1@!FuQCU̱21DD,d"hē\-T?Ԫ2 Ӭx*d1112119.C\JrEz"F"*С" I0*&ŸX^^~3Kӧ?_|_|O "\rOHS_INf~81D '\#{4"҃Ξ҃n%鯽yםqݾsw/ůs_h}{'Y?`EZp2s`e#v|s<jEQ0f(5V @  aÆju@0I) j@dBdRoIRɁ" 3k  PS* @AM\jn9r=C"$0jd 鱈Ixe*:QLBDEd&fR֞>t!'o[!D"qQB(A) 1jUH ǣ+aD9LΩ7"4Stو8Q"IXKHDĘ]$ ܌>ɭ={'n]y՝/®e N@v8{ f3*2ųZo'9+\aGa)S1ux5ՐmN}nSk^t}׼{ӧٸw2 줹8oE5yd)e7Ψe^zU;<6V dnT(N<37~,`a5zlpK$V`N9'M<6ϖōxBrV+u/?<@qK6q IZ)O~T!w])JJ:ԋiGg8Xs1SN۽4>LL]Pfc)ͭյsG $[7&sZf%GץDJ}ܦɸucaGj̐C 3*`FbppDz=QOlNE u/NE+%bVx^{?2O9s_L}s=;vmOjwwފI[m;g7}>_|3ǎ>=<|hkn~•I= 8 O@ ,~A Ȋk2M(% L'&,C޷k'O|O_Z(ۯ~ԅ?c~T<̇L<`Wpv-p¥%Y?ئ2WIE<-@)ICHg*0XXC D`07?⚈0?/eA&95.Y@ޏ Aǻ{;Ghb=*ipGܒ.0| }}7P& -T!X(̙nkv"@Pbq ~D1T5bJEsZrZ3"8VsvŅpn8DQтd Znp1R;"$T TkO +?}^s{fmK ˅rr?C0 IDAT돟>=/KE@&nnm:Xi>u߰[έ?zrN=b~k.?|hviz_Z]=zŅo;tSس˘z7Q@*S _DoGFC]G˻\,n}NZ|uwY;RJ =/VR/pv3-ر6*1[JiFѨMFp3,! Q@$|&y?Sw{wE~/}jۿ}-W,n㟺w|/h[6cW웯??sWsϗqXa=١mqxG}.L>O{i /OnNF޾bw\wP+n&WvG>.-_{hA[X;MS?VfJ9s!-B@Wåj-3^v{ n,"\zsfIqi='ۜ $φm&WgQB UBpRUUo$$|Y1o}4h"4Yk Vh8 9 +T)wJ\`YB uUܵFD0G3hj8@Ҟ_9}ߤCwW|Wmpj%ϝc? ܠJONw+wv9~fssAT؆ubO=y~{[;w!V:V83fP>fd nS=%DyH@0ȝJB'oX:}zGO?gyi%0H$.AŤw}\ o|0+?Z?o^r{64OVcP-M(b]`h!55T RE]{ 8q0Xl# \Z xֽ@{[o}jTK{~}MS"? p[~oTxv]y+'Om4.iXr.9To}׻Cr(]7g!f@@gk67|_s*c5%Gx>tޛnfgg@\:9/0yDuE^=W{{U|{H>TH@UC݈Yݱ=~b*&!m wOAj$mF̿KEummmmmmqqU/eZ"&$BF@V %R[;V[Ӏ[ uylm |8m n%E6k<`2*͕:ss5U3 dt:޼z~'?zd슪ױv711ƪp^R&PE*"4XU1LD”rLƗ6"DGA]UUYSF]UU4xRk{6q_<0#^eBf$ :o5^S6oxkz??{Ҵ-=E` )4;sг=ƹ(Hfp3nD٠/W"UUQo453t!AB88"p`,>2oqqs,2RY$%3Ӣ.Yؒdn\ p:{sv,]@,;gΜF9Vu UUXXMss **!Xu]U۶!0Nu1:VE(2K1EfcRsJmCÁB>dx8]&%M|? =ՓG~#?~Oٟo}ݏ~ޝ]wͮ|ռG[7_H\nٻ_5o~_sHeGЎ/eSquf9 KlLuۣU;nf}AfHK;Rn㳓ǟLe7;v&2wX1$@Pk,]aF&n9k"&<\ps#O'_nmc>OW6YG<x |P/ &b'%bP :m>מeE(ܕ􆊉@ὤ9 l">h/O$rLɊRQJJ蘖/hPA\LB"XY .Uj0y~GQit[Xdd$z}ȥ.]X71uS5]V#'!Xf,,AD6jIQCX0gHE5S^5Oż-(H@V7'W# !.P#iy1[?yb"B_lk{tܽwiWч~c%-| 1;ͭ#^<Svfاx;ᛮB p0 \V 3V q i&xfYz|v8o3+c"E,e.؛ooI a.@xB]ܐ2! 6f{)J NDDU#>al+鹮50S~0[SEtwက76hEɥ0ri+wk6 00 TA7@b2*jbL $Z(q͉i.^(qs|k &uX *cB9iq b'vf!rTQB ZB*yˈS*3 %12F9 $u11$džQK㯘rRsyJ[ULe5-ՆU.   6ɜs*\:7S !8-GU c=\䔭m$Lʚkm ,u*iRWX"ݼh[ {2ʝtŢ.cXAbˡ@,nsʹTi+C$jELLRA)_ ޢ:mpwr{H٣2iWlY~b}K'N}Wߺo>ga 9tbc8riauu= у[nᆢGi&Sr3UxuU]#ѳ>Ʒ_u!a {~1;6 fonj "ex1WXrm{S-Ţ*P^5zo,_qy\̥ V-7{C n7\='̙ sgǃ襧al_ Uthp 2JoD gAC$dFf!"av>|؊am,4EDC:Bp@dp Ǭʚ0H"Q((fZҤָ2 ND繺++ (j0]ͽ;.ߩUu몖PTH:PPڜ4tc'RsQJNڴJk$ q!)D3W ˂)ڗW̰~imK^|I36g.\:M/]?_n[w\nXeXEo[u\[Qw"ޱϯOjWڵ+&>W\rBr7Cꥫ_laNWߺq7~|n!cD7=܆ྍ* 8 {%2@)wSphy=J)3c誅;b\IusTG\MB6aJyǎt-p5/= U#-o{5/?蹯5T(%ȁSa1õw݈6flֲ'=u6*(r !r $Bň)6 *ERbf^w. J JǙō\v; 27tk.-xNxAi(pؘ^-VA<|Lyİ*A +`.wؓyPY( kgwܸn8zG|׾󎝈Hą/f\lے{@NW  p8N+R{vƃ/e0A!ڝ ݷ\^28K=zҙMDD6i7Wܙqۮ e2\zb9T}r=~\^е)0 nb^Hɰ- \)E}Pq`LȰdeJPX:ҿb,:s,!+HB uVo}WަK{ g\wd;~ba @`NSjzC)OzT۷KH?N4UhbBm9()XBî #n:9uLbjɬH;wLq ąGU|Ik W%$b03W.iEH%Y$[P@Ü T%L`- `(w:'atyújሊg`bg9!e3"BDkh:Jx<oXsL IDAT:-yXHUp.q],\M=8X_pB$VTl=˾c'/0{(o͐g73zJ3.R~1x=XQ{I9i`] di2,.z5Zӗ6ϧn틣.4+Gav"d߮}:0 Otxݴ#D6m虍%ĝ[G$OQK?~nWWzI\T j~ɗ@ H XP -,^{Ond3P ,,_qkYǼrOk+-9E:,½,돠)Q,G4fgaff1 У8.|]}̘xd"0D2:#YAݓBck'-c<^PK[bҕn'UoᠮDs&fbw0YYc̣k15b1_A pT4h\:MI5w%`e'-M\ IXu9Uw߽{ A4cÚ%kɹ)ePaSF50V#wR!78LCH2 ՋY ^ Ұssyliyk"vզ Z[(aMNmkk.V\.yZob޳X$9I3WqE܊sxrt|tr䙨^\9aRdjx&wm[y C$E[ɾ@Z-tL` mŝ{; \_ ]} +=';yCYRꃔbj7r] kw3+"rʙMCO؎tc7/Z3u'TcᘽHhR2w`ZiٍE]E2l6&k["oaSÊ((fT<%jLinRf84M"XlAw>Ih`!jQSs#saW&bs 4M-TRJj1RaSU( ͏FCB9ij-0+ES/.`nAcRܥ( >cG-]bN !0bWJ9~V \6BEvԪmՋjt8lq=/㍵'.:rpn{+jH ֆ=Wu'ON{] ,I{h 遉"JnJAfZtqUݷ\k?}r}O>uS]Moڟ'phx, I9NȴLH)1K 䔬h nh!$\NZϪtEZc@a@ $LBnT $BXaVba Ȍ\ŭxqK-Kge*ZBG2gi VUT%4`8:1TCln`SsSp lŋz7IUXr:դM-QqrG1 1aNՀ =SAAՀ;: 5q"3nI3Tuم :{%WNw-Z\]mQulH]*Oja-ruWMRwx~|n-ƹc.$Ke5 P6W8$oi:\4'D[PrZ@]nbq?]~SUNB.S+4;PQ `^ ?w {v.orFLmkS'WWwV.e#srXJSmHE͙f'oCO[g޾7~0hqQ92P0sѺLȓYPe mc)y˒XO'վ&ԓi't<7pTDv .D,KanV CEb%wnɭ,P˥(CKe3(P?`YA (+`sCZ* sruM٨Mx@@aR/]{%pSd* Tډ26Bq={pfǐWX?r'g jV?8,ye% ROṀ4L,S* t:;揜975obE=G3kA̒ӐB5SlhUˤ;v8٧?xfRsюdf-WxPvP6?pQS<-L!,ExF eYfŔ eB˦w=N૿z$86в- ]f(DX@QR\]C{5εlqOkd{eՐɳ qIF' ڼ B\T42k=a"!T+`Ż ?ǎ?֣GZ:F{ ZOA\[@#Lm蠯ε洊X\]ϛ΢@Y"uzz$BnTк-mg;s-QԦܓp>qpp6'"Dn,!nҲH]֞^يޠ\nR3 9Iei)Ziq@"*P$D7jj87uzb{!kTq8 OYVןL6/HerFPr3;AA&!gjؐfUfYIT4,:G))T3,$NBFp"3 9QՊ330e‰ 0 Շ 8yug=<C Ra=L2"ׂpN &QQ3x$,%3$BҲp#WȾ$RE:%~`Vt _Z/rqǛ|Fx٭'aOwӉC;g:_ɒ٬6ֺ‰j\:r L$W߁./ܰG؇';6V̜$z^Ǩ(^֕œS^{>PP5*[h!j!z:+,s9-C3Ž鲳쩏؟ g2ԕbbqힻjlsoر}EjRVC cOb9譨mZTj6"q,bBj5kt}hHT2s$S4k,IkIM -k(]JGr+=V %{Ibe{, $,,-\(L@B! Rˤ, $gy^kY-jBƬ6+}}PZ~wz+bYƔ܍، bT3j妙ZHF)%g*38!saBUQ ׆YfI,Lb*IKN`Ȳ`eW"bq֤ЀԈ)O-2Q1,thV=~o]G8?oz掯vuboo%㟽W5w៾|agZ#ۛ4eG0wh44e,U@5w ~/uZ+g_pӽwu{>Z>#'o2`g79˘jBI,233!T pd0TIݜ\ȉE&TyUVEwQ~Z.R$0 īd\r[eroJn,gx]*v>x9㮷'~~w|UW{%}*_^ |3r4UG "&PeYtk#}3_oz >Y}>ƞպx1knBYX yL`gVcRw';A@W JsW$Tbpx<%T)L9QR/)Sg%Kϼak7jyю4Ӎ}cqb$Ӯ+{{7%P7/ Ͽ aȱC˾|NPVϿ<84FDxk&o->%/S?ӕ;Z-ۜ P EL)<ճZoV{G9L5,YT#jL5Evt~xn%DX?6?_w >33=2+KUe"LlH^t{zi&^o~L̺ъ9ܴZZ1ug ݷ=2jjf^5FdĜ܈َl uK/Al&He@ҊT> (/LNW՘U( sxX%\=}v'u7 5>tYdf榈YkS!<#|O;.LS''TrhHj: #W((!Tn 1b%3 aXրۅ# IDAT` eOZEtFuБgk^UX^[1?x~Lǻr}m}jMOlw/~==8;3=;;8hiaOp ݷT t~wϽ;|{Z߳w]ܟԘOfNzufU0k?v1l;PkAwЉ~Y_Z9~`9(WΚ3don]Ouǯx_[_x~Ǜݯk?}?wZ? w=dj%g'a:ײBQ58'Q"b$ ՚,+qc;\DAHj]2uA<q"'AXd)9FKYf Vn=u,A=q)T^Y!7+DVDB ^"rfLGl-iE*,Zd5Ty"-ȅl "gyV˲,kQck0ir"'"e~Lp2`HAա- )9)Rr';3+t@$p"gv1PT4) QWR~sS3k%d?>lsUV-j|cCʅsFkkuGY\m6g!XYR<F^_ vN QO~g1 XCc_8?gaf%Ź NuEҾd5 % c:;՚s`SO>G砄ڗ^?[^Mo/}/g%=Opc-2.~ 엥ZqFbw&(VȽZԘ7psS5Sqcuu}mFɝȇKV'Aua&aOZꮕlLɴ3&wg"ZUI476A@0 a% gHFn51E7O0ca&2& V_ffff؜T1CU /EA(̪@̌C,!49,b^\LT-35,( WBI=V fnnWS[ 0gB0 2X LΪIhkNg|sQ W9"X LmeyLizfzfzW 3Ӄ2;xy/˸o~CK=d$sӍV9k lNڝ: "nwv=խzM21#GdYz;sL?r(4qey-4GNy\vϕw}{Oe&fv6`e4mpp>|!"!"w 3!22X|fNRGeQn^ Wp8$/4_e(s+LIԆ [f>#sŽQoPqwʔʇxa]-*5il2B!6pWh30P}eUO8 :N'g6 `U eHJ!,j< !,́X-HK ^'R6V(@FJ6uRY+)؇`*1aVi`2!cÙ(CɪC2+de\A QaZn,3 s2&V*ndll"p "s&\?̈'ą͉մH@ɸ0"3b^,[Z&1ݾ||_''BU;+|OXsS~ӓ,={8]t SRM^q:daH[l --F?Uߦݎ~%|2w\ս};'Gj[G.${HoE{єpT$Wޗ ollLD677'0/#8o#LUzդ& #ROzn"D 2Ld"D&2LdD&2Ld"&M0g/4D&pKhMo"ȳ\VwC֕ʯ;`D&2B .!RP@x{`I?o?S7z~Ozd! /羡'֩k^ЪI>u?|ߵuD&2|KyWW#kkW|+~]?7Gʯ}| o{^ؿoDAq}Io'Sy}9 u9_}}v/onXᅬN]|q&oD&2Dt_IG^N˧'p|w|w4MU0ǿ - aVcvv)6.[xxW+p^]]+u-:VQ_EqVX5`w _qqs9z_Q{ǯB{*5zkv{xyyyss̪WڸcZjGuF nX7sKnnar wman>5gF7`fرqct-||FUΪ73TCa<=_ikǎ;uL;Yo֨Fo  Us܌܄L'5S3^bJW ; *'jjs٨<:;`j0r7ue.vY4!p8^__̪J?cV_6mF{qvUr0L_hl"_t:~ TV0 U6f0ZKY}]e#\;lP5tx 03& 3ZU\SLjKX3(sX03f1T͒9W6\uwUхM"x$҃j~Ҏ;ƥ2o+;qj4mqm.{]pD_\X;U^>\p5$luNqPM^3ΧvY,1īW1pB>ݐ@LANFwbA0aR~.ڒ̜F `s#`8(ڎ@nLN@cVw23cwlǣ b{b%W ?C,6wm ]"얝%G⒳l1х<cQR چ4 ;7OfnEL,) AG gw kNI <9FnU`ܘ`!me "1Յܒ9 YDdF+@3pddnp; ojWJˮn#2w-ŔT'ɇnTM 8΄10 =8)F<&hX$+¶.J%v;^\BY^DNg|"5icȹv/ztMd/Տ?"LgMlu:?tFN.oL*֙R_"j/4YSAA*lbNQMOSMnrM$͑~ٰi޹oÑv!Yx_k*cVN u_pfv@;m%wU'"wkʸOJƕ9ѥMS˭fRfȚ[:Ⱦ=vk4"`Vi4)݉yea1ffPѧ1Nd!D(f'r8eVq#7vFs^t7@lz0s-=řLSLs 7Skۻ7k( *S&@`5wW/,4 r ԴOOz / tc=▥-9L WSӔY~]T'8g-9\\XK T`pAr  KJqapӱ{7Ve,;ʳ wBVL+~; x%;r끸:@_Zv0OBj`m)@c܉n6?ݚ^:sn9 `QxfF1fZ͘,̳ ܉%18/;yȉFл~3q/z+7b@L,!sWwvLֻPs#wu7nldlAε= KTn2`\S 91i R8HsAb.kL 'ܐR*Al6:~lwZpfжAj.ۃ";tnE2u Z(=HPϛ;G1LV0/=x<$c[ZWڬ΁|BVۨO7ͩ)a嬕VRnmf=q.ltʣg̲b/PmW ԽCs 3 1Y+7KubLZNj22!#JղQF[:H=yr[@ I݄#:FQYэq2@BdE=lnSrsg" NE +}LC+jYx841`nY|O8}aH>J ;שzћwl…wKK_?}?t=?N]pnCὂ^\b\S/b3LtwtAv $Xie ~3ֹQ]]h3p n4[|>4"Wƙ·^t7^֏w~Cw?/~xݏ9gU7|i7t!T%|6\.dw/Nw\UW5F̙j*'h{<BV&͛GR2x5{h߁f]X̃$No՞7ҾzC{;1=|jkS'X˛Nт==+sckǰٷHÎ`ȶĘ\ݵ/V:N7F+lG#Oaz~MGo~jNfB`B{`ne6;W̒%2zlWWWζRNx,% ɇK>ކ'4R>{xx|+o'.;ow| 8SӸCծwo~N=xΛ_'>8u IDATow? 򥶨;K{Q01Rcx흌;I>rsTźI_#ϱ8 67c3D[8{v`^1h{gݜ(#XȝάoLDCNMOY]'x?hQkSˏ];r~m#9L풷O®vL]1,QNJ&nL%HY:V/Fw%Nkf~,L+9c$5wZ;$uLtm?*fZN5Q,\aB Q!"6~AtȸV {9KgTxZ7}ſoJn|\ڮ}cqb$ӮCic|f/3MVFsVvʲ]6"dۖ;nrðcHQ5,7lI!DURؘ~jv|J#*<)gۯl&<* +nUZIzf-0"A@u@pk%$+F<=2 dC1TAܜNNgTL@쵐^leAήnѓvZnv~g5YUSg9w[KY. LdK{RУ/2{TFƭ,|E Q[Ns7ŖjnJׇ:E~bma[[E݈ lF"HT!|4T'I~|_no6_PlEֺǿ;5|ídzKopDZ@V{q.l#cZÑd 9@VS ;}8r 4u7WTlہ~^ou-zCMQc3l;[\єa(Tlb8i¼lw$FIӥwAL״#&vF{ ҫ>}ޞkU^U]BB@b5``&$x< G̀qd& La`$$K^˷[Ι?{YY[%ݬ|w; }Ã9] G;:%}:qV.JOn m!xG I*mk#p(0,#0Fۖ' ٱ(D1nDb7~ێ}5'O|SW-?si_vd}_>% 20j,[?Xlgdzn/!ւ=[ `֟b |ӗ`=p0CTfdFQT {>3 π K߫(",@8xteO¬WF5s|PS{|)_3753px}wTڞ[I@dF dNJW b(tp{"EGW+](,+dߒ߁ّXkGc8\|㼈<ڌ\dh M4j1jzQ$>|:;_?Phk1^ ]连M4-WEjeZe' ʆio:~Չ:HZHfo`yeIi! jhGu:~'];~o>:7?|b n?==mv" pëR@m B(AS`q[כaufWP.Ċ aµ/rg[e[M{8G^% 3p}@?GaϬMP0k酼Ro`FB<*̖n?QXf&cۻlbAA&gO.idl7ܒ5kBjR@t[xzd?>IMcۑ#hD2ЮT摹Z̄V9wYK;ww]'ϸ>EBo5]b"XPqW](:fhRE<`~쾵s?>F@*V0GK0+n L3O[ϖ==/}˽!SO?/#{{ooR?k1am-|K@ ԙs9D8Ps(b8([aL")( %Ԁ6zDRPB A$N_*]T] $Q$ PˌZD@@qj c.`Ad J^l69&  4}?k}nEp D|k4_4@.Dn[RXO:GNV/`F3Q1e8ʂ<ٔ0bd%Jp#n&uJ'+ř#mX3o&ŠIb\R!TuHBtw.q""*nX}2#]{[=CӃKO]nMC@!̾q-ןG~=kvu/PfVAnS0  ,"āpBD@'\ ;f/pV"ٰ6J!0ܳ׈,P x`l Ar|:'393edf{&ڎ D`@*1թlwvv&`0(@wk=W|0s) 0쏎" >泻KlQ#8$ե*N!9dZEVlHQT*]lԈ cgc C65Q+$*% Ʊ R+T<ֶ */RGxq TCZv ͠]8_~9$<7f BX3# V=C"{͠nFثk4BҎbPO͌z+IJ4(5I 9ypYWh^J,eiML3H7^q*Yg \u"G<=FTC+B9tWHtl0Ubtav^ni%I"`AmQDpc(EXVdjx_Df(x{Afxd+wLk@@莉 5~NIӀq2X* aDPIA( PHLf3 "CY%Fy~~> f񖊷wo͵nަ"a[ Ps@IfH4 v I k~f J-YPQP$"8;ug\i<֗lՌbAsJ$ (&Sk'jscPN&.벨[Jn+Rlʔ#\dMj@eBgZ4,44j2 P#ʁsdlŦ5tczLIjA9E1f\d* x`Kf,kD`HP %Cq'Q7yN0)|dBDIw&;}tT ?S( A;v|uRh4EF%vTIÚ҉*(/v"%:5B,ڴzeMEL/m&paV*I$FF-Gm1vh.fv5n)6iL|=@+)%R\QJS >"f2=`q>fEC(02 8j, 8(<D-+D5̬E #RL1Oru;"B "3 iY"f2H}Ƞ*5uҾ2x̮A+|9Ig@ uE @bLKU|\[×h^\`ƫ "u[MVN[ ΍Yy~Ө'b'cNJ^fѠ5%r*6=~|Fe>>>guNUބwmZruM'Ut=Qn "A¡a+RSLu+׽1@wKuZk0 blfGp|)L`.멛7Wz*JF3MԈ8E.,yCoDTB^f)Z1[[(Kʜv':{[v:Qϟ v #"e u?f/{p((0XnþVeo"Rr, [ *ן 9!݊VٌM[vxTčJMLŽr3/j=9!dY*5ʯo6R 5);;ZSXJ rS+W#E;~~akIsjHtKBi4Im;`TC)' &!{x%XDi)-lXp샷vZH@H+Ul+T$xKGGZ$M" 옍6,54"sC%.Yyj+Ga)NwPS/xl_#e~cwٛ$ɭ"+iԺhGdi='eAgLq0寵.ު ]KP)Cxbmу68 (,;c Til`,(R[iY: Dj%/'n#gO֦ӑ-=EOG{FᘢXk Kcͬ4FyHcMN;iܟ68Ϭ%]ܵX(jFJ8-tr7%!Jtӣo4o/uX+E7/FdI} `P2 HQQÙfshtKӲ\K*ב `op=RSaagWjc 'X#(ăbn(H]Nb%yӈBn :Z9J fn09έ%ɱ4,.QU-Dq54\¥XD R3 *NdjDϫn"FhfՋW6vV^ &#2{ E;3L{KT#H J7V!X@LBmVUS$P4vEw yt *JJ$F4H DpF&S\Jӝ|R4[Apak}&̅<0wfHĩCK~>Xw?͸ ӢB֌qmsBMdLĈ'a( J*MaXo[3P):sD+R,lyFx;Ax2r\ԹkEt4-n8X#ݶg6]MZQA?um^<_LrLjPأε詢9k|xXIɴp+QP?WD"} Ao-?h&id E(@@OD"ȳsBl`H aF.u%k"&B2RH gq$ y+"᪪sIxm:ڹx5Nl6}'j.hHzRMQ޵V<0T9)*\JEs—ʁ+p1MO_w-nrDl.8&z'zHڰa..E41\3wMHl7ᠿӳ%^fp:qnH:>\8vJN_`Di6 v8ՊI"PyU zAMwϬ>V>.3A{% @ @!:q{\kH/4јkԾQ_I<1ȭʁ <&SY6*j$ ,T"A-X֨xj4r,c"7pܓZ~0˨:cMg;A"+v' )%Lud]]+ gGeD(Cm_ LP sN05NurgZ6^HT@<; /UǎVsf #"IjDNFf2 {"Y&) ZhWqn\n{>\Mc K1}X сf~UU.+U|.Rd/Uz\E IDAT&:4#euBBJ0O&cL*iV_ qPr zxw&DzǵH|{,&$ e/'Q&i;؉c-gtWI]V6b.`&u>?@A@҅|<;2.w-'7W7嗕n;?4мS|G녅\6gB[/,CXkb03ף|'Dޒ3>q\1*F U@Tv`GNB X(Z4#P9a.g* j75FA(W MfoO C}fMDu^3jB vd!nDE ;ګp1P3 E ̮q˦y1F'Zn'>R3T/'m5uiU(=\lvE4?~4:YyIbtʂS.o\G.HQjR v,+V5\ K3^\PG>.FvT64ưh*iw$sʟ8)"+`(nNαVzsfSF"LO?BlUiD y!bJ @v[Gz Di.;f_B~ wǷ2ϿX7oKgo~Շ]~kկ_{oF?? ykÿe^jynm%d n ?P̓D_0fMuFFa!X+V5jΓI yYs Ȑ( x#гԈ(Ai" TA`,y;n踭%+MĊt+[ʀN;lk(5y>*,V Ef b$d2.'SFCAЖ6H aB@ ˴(Q w+mH#ԑݴ/gHm(m=Me,o\tJs];P[1&z|i#}RoȮG N|J8 L><7{? ޢ/Ӂx ճ ;#J],<;?uL}ꤸ f 6H$ 5vPT"ק$IBQda )(DԈZiT 5F!8u"EwuvY(^NCV3@fHF-D&hf޾ދ٧)  hFjpAxR4)4(압,m$59nVWF'3+݃']sl}$ FLUm=cn@#34J@8&F3I$qȄa3_x7Io9?|s']Jth_T5HN{k$Je b7*n'V$}<Ӎe;Lx$DI1sֆ*(G|Ç֔V<Wz'{,DG1:k_Kz-hoo[-{9[O>tYH8CG;.~߿^nw"BMφi2woM}PչM40 Q5,ZB2 @A1;K?ɯ+?xxl⾩'or{-c{n[aWzazrG%HT{rg~`=}dJ%FEH5P gR=C.:JLr'm4┐xZMGp\JHPiϕ]0%Yfm8  "jj:hH- )~g#fJA@fm"{>%ֈ5#X́k\0T6XڨnD")S(TkGV:6$}?Ӂ{>;}Yhpڤ_zrDq`+pEکUb428aX\ xYwN+ S5^QG9_JnMb*\kąt+)ؕU( c]=GWg.U9{ʖMs,{g؟{ RO>Y3M#DP:,:e!p j3Ph SwbِjGh U3NqU;,SZ!‚4@$QIpADZhQ G2 KW2KB( h҈ @ )np[YlQkf7b=J`LB@DQ 0E P h'XN 3dBZHR7tk!Ȩ6>իΜjs%1DԤ9VW7wcNlM~kw=rrEūm:luϨ|>qҧ? ׇ/-M=e#i⭓|tR^]:bĪ๳rFOCIY:Ly&yETjAD[Yv{N8l5G DQ SgNǔf˚~`vn_}kt W!Hlu3O}AW}.@p %V=(%E0D$ bDDaMYվȑF gT4 >aUr iQY m+g&y;JW:=y^ĉR(B#mg^d\gfQbJ/udbs<ȵt8- Í [X\ҘѪHb?gϽhDyךH&AXoT) _E8A"*0r-+#VjH$(q/tU92Cx ƇYbG%ōW.{BcUFf8:4g뭌3F8ɽ 7䳟JZ@o)nh;_<a5 (N MJHl:L7?] Fa4Bpnx#=?LVR BBuP̼(1#P3k(\hDrSA;6TqGܷc֡k)BM`mDuamK "egRlNCZ 0X 8N`4p;oOr `v] Nt4*)}İ{h\>vooL"$Ir{v\D#s?vM&oC`JO2p~7_o:vt5݌¶y¦E[i}lN4AIJ)q3wp(hw{we߾7Ջ-˒V $x$Fب@azg#)upuӧ,MƣɄY(tjVJ 1YdozӛG` +S\|O+UkKF!Fn[Q iGGXb‹(XzܹmSk6!b $8fg ǓL4@(MDTle(DfxVòXVI^[Y^P hASp5Wh̞ZҕӪ"jHζQlF/@r&5#6wV"PL@`7:L,F ܰas%Wy{鴴>/]i]izc`bx<@W !تR7à -QD®'` 2 nݷpz~Wy5`;jٰ\s+_T9jJclb *?cʘǟw1H+MTJY[EZS姟~3Q: fv6ZŴ%E`/2ahD- (m"-PTW06K]T-mV{Ƀ:>*ҕ6ɆeЀ(zHkPXoJ LEgTr5!X .T~jB F`\#k*0$*‡u޶tv 0^Nu^ŵF3Ny.+KW|n(&e}cBcӚ K#A`$YfwwW#'Z ݕuJbrm_W~<޹ݷ>t;&iVۥ tj/*T ;o,L¤`<ywX=ZGo]ؘl5hQhDI9jgփZIr?2[PC3Mڌa7};yV) YBD,g/<@k-ꩧa &) p-8"IE!J%3 h$`F@*kQ7M 0@qvFBd* *mb ,XJj4D項P ] &*ZH,!p67KC(샀00 +zI*[B^KȰ^3 󶜻 [!j`h`ZnBBI"<[kxo|Գ%u@%l*]ĎK$TTl vdp vELN 685uK=o7g{?~-ZZԧ^yܻ]g I#YfF):W{BVD;\~x}ڋAyaD/I:qnf\d`X1uٹn$-Ղ޹oW,q'q'QOgY9Dey^,~UJhS/ ֙ݻ3$N/p4n;{jOO*eZv{ Nmwt@{k+!HMNb/gΌ&7ow}a)ۭV`缢:Ξ,yY.܋WLw3{5KS `R{=MJ{{/<|@^ۑ̹ [_'Ȏ#B `9X&CAh֪q$QQ!q]l9hD}eDA@",ޏTE$`JZ6$R |Ѳ0J܈c@DtF A3Jj+ 4yc4*p^؝P1pp("U˸ktoHy䳹BFς Q7  !"`VȂbAT:/י]Adj&No{1E+FگE{M֥Q fjQu2ha'awyRW%'QlMgYTvme‹'&ɦYLUTP븕 ܼy$?zRTIYv݋6P20yW8̋{&AL:'YdmDFQbf1:0[>owVW|0?煹5rȱKz$.5MD҂ei("VdP%D!BC" H)2:TG&&@ u{ @`(kBE5hB@BAs ""D"F+d P^ @A)sD)Ǿa tG7_;tܕeP)0ʂ dggU.bX i; d(;+=B%֘,k7퍵7(k/^gҳOFZ~mgNO{.UVVKt,S g hd=PaZeuW'+LD1qUɢ(u[eY.ցw{ Էn$ gFPQ*RwWXǟC&!l,r0>sHV_r!>(@ HMw,:# B E [+`i4ʄDF0 @EPk@2^+&@-]\#4%Dд#ETyh"RH \ *@܆(~KsK| IDATج7 &y00x+y^Jd$I@7$ X{s瑭jV's:ۻG88ul0vwi7Tg[aJ~W7nQxo g\!:U_iW+i[ޖi+nllEjҠJgHw!*oNo;;[ۛ+άX*QJCtQ)9+ `"(J o\B)C'OU*B ꕫ'}ୂzzח?WB>wfNO?g>-]$_ @ ARв )c!RD9(L5;aC:V&0RB ɹqldM:6=`# $dQqE{K16C8$3 "5Yj+qxz/@Z ]@n>X^Ċ؍ tC"˫֩ܤN<|HP)ˆmtD٢(wWvBVF7g9<=Yz?>s.dh{Н;wN;*1D(ԚT襪\a=MZ+ރ0'd yӱ&XlL( x'ώQ|ЫX,~i3b͈()Cd*hMX k s`Jkԫ˱ aI8r"/&[w" H#4n¥KSU#FTT#B^t?J),웿̂̀YyH "2j-;²V٣(*+QHGI ] l"`|6>?{F]d|cs Y$l"VUED(gy'Fa^Yԙcu[ǣyu|g'Nx3axW}%ăѬOsCЈ<0C]\F*:80сH(. b@T_P+R6ƪXpi("=`CD!jEK:"  .qqق.@b `t'`tI'y.'vd+rtV&EP흵AFVJE^*'xǽ6`=+{K}䣟RP>ɠl:"nEFEYU id K'z˄d>~c mb%FZ(' ^:@A; 2|>ʋ'Fʉ:HreI5+&4޹ &B׮]vFy6fJ`Y♭D"}uWf=b8^!.'x(@9"ZB4pC3$"v BiWK1c"DQ,"űxfP`(xdtȄajHD'8{¡C[ʿ"H0>D.K%Ԍ%w[E/[4/3(VFF|f}Quq_T|XN̶wt+1zX,Tv\ݲS__{q (3onK~?xq// CDPeU*k}hBUꢪ'6 QfhЬQtTϺxZ.ͭyH8 T۪Ƽ]]V_*,J~;ygw'&i-nϋ~JT,཯X,zݮR{ﭵhavU !u#W\wܔ44@ ҕ+D+ I@" "gЀ KGЂ$&QkU)jF!Q6v@dApZ@ŏPP2y3# Wd5߆CRF1&쩩 & h p 7G^5xVmmhw?-IB@᛿־[jՄ!8  h2(0%8 NZ6A^N+<ыC8P*s{{T4MYl4lXtF[>ϼ?;*ZJFUZQ]C5-ʲX_[k}#ۗ0L;ۗ|6XIzݎ!\D{STe™@ KA"X8w?su쁇g+P?.4bW68ݮ"b~/^k1JXHkk+V1[WRwzx=o`Q"a-*R=3]$D|ZV5۶)HI6,!*'.HXo f+hcC{[aAJxq:КPDX5r Rp"҈ Tg%V!{^ E ъ4)BQD̍/Dh4!a!;&" A{C<"X!lPߐm˘Xd`f SU;fC7o޼ujxmuFIh;h;9O Ɛ2:48>gϟ;b2x]Em1 ݻlO2Wݜxmdw{̻o WATk6QނLI`'ޯ{ݴ}S=!(0`;n]pZ/?{jv["'yu$Ρ_wld[wĪ6u2/ Z0ۭniw8"y^dY&:^!U(zx|0s^[,ǃF;ˉH"-lwr[ (@AxޭFFUZCT vlu| q֕8" i-օ:hC,<{T5҈GiD`t[GDFuݐmfRzd1Jyv{IHRA~!KCL&Dj P h#,!㺦sq|e6wMS#MT󶰈yDu&r֡G5_UU>'d}}p߃Wۻ{ü(糩t"S֤WFٍ4(?7wKkiYT7vƓinTԖOwc{|驏+ RHn)&+Z7NL)kXgZݼstf{Id0 6 vUYtcg te奊x8Osg`3Zl&n{^;㷪7eB 1viTjZW(R?qWUJ[0DMPuNYZ|V8'!~]ǀ$hmmؼ`E^4- > PXD*lTڬEӕ/oC+ཱིVZC9TD$$ </B arK3{η;ln5!\zc]; a2 cA*+Lo\zf2wk)xn߸dfHP CQ3Whhn7ݿy9 NN'BRoYt`L.fFxf<}yY*ʟjx]uԓfw 2vv{>  #̼#U[TG" t"w1(퐕ʋʪ.ШqTc wxF;_&-RD j[yV" g 5JKF2mP2o0e~Ȳmli#.}SZ7&(K;Y,fyaA9*zLɬ^A+J}{Ȅg'9q[k#N&b;?[ywi1,$=wַM|vc%VW`H c˫2M͵Ί(!&ΖYF\ln1'0VLHazfp?,*ʖ>Hǯ]'^ $pǂ0ɔ{VdE^5 "P+ž@#j([@N^;R䋕og/G/wտpw~{? e,b_4 ^՟}䞵յ _p5G+? ++kg{Ǜ6ky!3[^ϧ,PQp4xa=nu (P.ADĊ(Ёʜ+329/ǚU!`Z/enC,29[I D"X^Љ8daN؃5bDB|C@/ld R>4VuSF!j"P ~>n4/ @W5W8sΊr4?~ `Q?ueoMoֺ,ˮ\,YM9ıHb&~=Dt/9{S?ܱ[=v_[][$)z~yVE5};k_]uʍb{_ s+:0V| (7};ym:WVg-Fdei%Įolܺx"imU6W+WJx2qRTeUUT&Q7$2xy6u:! B(M}Nl ;7?? ~Ͼ|Wn\{G_Ni}/L>S_?_KWE?{? =['~/ >֭[;;;2Ӟ8xy䊀tR:K‚MF X:4 hBYKQ0PF@@ E]EA0 H"&5ox+Pw{e^b>pl$tT8 ge;Z-j_+6qUQ`;w;ݭΝZx~cu&lV,ag08}_u(]Rm拲t\ 0v 2;څ+yA}gwXՍt:UP'axA^OJF|Չ(٭WnevaŀUlZO}I'q鴬tQUU 4E1I8j(4I) BS_mri=v՟W ;ǣ}L~?cc=_?cq_[߳{~ɇ/=_H:-@^SҥKJ6k5 1{'R:6C6/!Px҅e@/e G#gF8&6u(#T¹Qw0ODL%A3xY5-)qK-ae6(W5}1j(Xy97Z@ SUnﯞ]hWn\zciMk˺,R~lm}V8_Mct-|Q{Y$WTSoZ76H'xS/\}Wv"ϝn|l=uexcgΩw+ۯ*li"Owµ[WU7TJXP ;/{dmjcBEʘh<,Y‹wt|Ǔ 0q,ܱs Ă҈x/&f_#|VH8Mb&;;ۤ|_|9sHIoܤ^Xi*)y G[D?ww/ _a=IɻR r(}$E䛿Xk^3ffk?Z > z -}PhF#(- otϰ&щXֳ#⁐FhE`u}"K2Ԩyi *6~i Qcts+ߊR 1 ) & M_ű,1z4IEib~pl-V!',l$4!s{J?)J㘽D1>ǻ8+f;\tTvK"eh&nd;fNg?)kIr[+o?VOmUU{o];ʪ^U+nszkugyWYOx.U $ u λtt@yE}9yGoV-w~oɣ??5lSߙW h=9ѧw?9Em+7]An IDATDq# WپBG4FqܦVЉǥ_H9 !2KӇzY g[dT$VȢ ZiUn083/+5 ({/2ev A{9=slH yFAD5H;44, X1,M+pձ~Qt[bn:wy5.d^w`ZkWFΝaE{ɭk[L{{o\^GbG!]tuR9ѽpn% O>#X΋<^j*d/D+~[S adhF{gibTRƙk `o-" ^ pw{fd+tNʇ7*rޡ"cL~c{X'4Չ76:kW[I\x_ylmMӧ$i 8/S 8XxS/`w οBp?YMޝZ?1o~P_'[7k~Σ~_77 V~x, |/]lRGf2&p gp8!D  $V\/Rמyۻ[$Df޸6}8 ~xx@ރQ FQPy{縪!$mʇټzM> uk5l;~؜b\}{UHuImsч3qykڒVASy+םl6Waw_{GJ1k~'׻6O˪j VTUZ /!5jΧmO~+*fhqX`{{{8"Blðfs( Vm&rn3my>8`'[h>j3Ɋ-&dkQi(T)C$0R6ZP411(RE1ShB*ԋй1+ݍ4UeYI4޼ok{ߟ]Ŀ^ikQѩGޱ<+1$+ZRé!,:"3[xV"N RB K؋1+͇Ol_߳VW.ky}e=ݽq $JUϋ:)cdzW^wW:amk[+46#9ؒ%AED.^hmHΎP D"j]+U#u-HDUU zCa #Axc>KMXֵagE' $]ì4B@8ZdYOtNjFE2" 1pQiVsF)Mbqc"Hs #jaQ$8 κ(QIHԏC ^ց^F !Ic61"MMia7>yk-"! )Nl'|F`2VEj[V'N?A@Jdة!a4l(TDY]Y +7tpGJ36Hyew !"o񨳲G1 ]7.Jc""%7jdb/{Q\H ݝQ:`DE\]I*k͵S°zZkj%{<謞\_|0JK?l:?M}c?򎋗.[Ǖ-GQۼ{_>uqDU x+x/*fH; [;w×QO5z$g$2v3b?F e5A[5<0y28;ֵ_Axo"V ZWEDU9 h$`Uwt{lc2mT|C㳊EW F|2[Y.Yr!xW9H8jF銁D4fhK^΃8陋> 0+i(H+U\z+u5-@DR?{olYzU;Ýߐˬ̬RMJ%@ 0ێۄnptB1nlGcCDAMvPTB!+2 ߰w8eeMB* Pȗqy/߽uY{ o^Q2YҭvdVd fTM e^Zg NZ$h%%b8& MDI5@s]z]k -%VH1X3?C'0ͯwE5f;ow*]Zxߙnt*qd68nZ {y(+U\6!֫ I6mf&ɤ7JfD5VqLi`:I9cMw4$5-UObj5^o.^%`rM=1]zWìM6*D`tq|rGLJU.r~#zW+fws2V+U)Ɣib (o Y{uGP%"3Dz)֪뭈2$8qId!XSD%jȢ$ X:* 1E$:Jxg1J:cH;coXWi!cBXjrLRߺ | Pq/8[?%VZ-) $6*@PḒ׳@׷T?//nD d.o|)9?^Ii5[=|;'{',pxn?2Qj~ ;WU 1ryFCiZK,)kF\3m )gl-LZ*Y `1޾stwU6<3R"TLSwMx? Ek| CJlY9kP>Ր t.;RJMS;笵?*ƓI' ߀O 766)+IQJ*-{ݿ^ 0 rB)gJB` 6  tbZmH J1UZ!+1 \'rf0 J IaX֔̚!@=pCMȢ$qC# lp:[t"JkdJ2b\$D( @IϞ! 0M~AZ+Bu533X,idzhPnnMulllm^Gj.]eeүe;W\sĜ:-$yfVRTX5KiN#}c."4%V&^NX2~:<7{& hiCD:0f:==YYk1Uz!mE]v2Y21b,m/\:~퍲gq7bo}_8\>2gg_ŗ0<=-/Tq?y9gb,s72ƒ11 6f۫9IRcrb-q:8'"Eżm><?t›Nwvred8Eb`jLU9բѐ) GTu{vꥍz"` dgewܹsq46ի׶~NQ&:Q߈~c+=N)i1~IzOU=mI#$;t\޾v'@j:KhTI I&c)& *r²NNw/smsAJN5Ը\u0ܯǛQ&x=HVYHA-p^$uLOLzՠ*L6ykcR2񓍍v\y1m{1~ݽLE&O-֨W. n~oz/U G^ZC w9RB`4?N1 b3=˕r hul3g5l5[Da,7~wˤc74-3}7dv> *R [L7OULmۭ͓ln޲̙2H:TWOߴԛnۺU $HW1aY5hEiٶ没_'e];/2T>%id)lӛo䴆ˡD\t G74,{p˅N8",lf a̩ =7r5#ۿu#ȡ_z޺ )F& TPJDpB^oy\]WՃW"bӖYi8$X4jQۄuےo @REnc }x͛7cJRun[%֙c:,3Xl2ejjxXwR.c. w %isuI?"%(q$ fpHjH]!Ry5>ĐskcLĝ%J%6E}Ņ]k -F(9kM'ZN<| Coz`˞{F륉AREǃA3;s㑹fy^\|||dx_4qg9+?^VU[?3% 'SZSDAъB 6y,+u"%ԨА.T9c& ,: i\>fG!o!"* K+ PjR$ѐ4u S llQMhI)Y"l 1ؒ*uNERRn[8R6X2GkɆ2 A3:)M/9#s&%3EJ`]sԁZ2QeO-/hҌ\27|cʎ& QMB}ᠥ .onChU,/fSԇae|6rhb[F >hlLl6&[\=}y`6yTgs>s}U(C:SlQ&˳re}VIfSE12DIB)JtZ-UYtB2ܹ[P%>KG?o~|fʷͯ{/|>u;~Wmڮ7nOԢs:]Uʸ6I!.d$*FcSrlTwέ|YX%[BluӊRLE'!j(sFe *z{BEۮUafKl(mJQ+*T: !Դ!9]y# GI *15mR"D)3bo͜ZK19;ʘj 1QtwAŧx怬u3\_8:ql?߽qx >A@/q %9GU/t{wtm.OIqZ1 ţ\cbXYT5ͪi/m7I7- K27Ӣ0<ͨt=peδ `2{yIH;_Qo}){C? h2Xf}'H[_dݥOզɕoEWDOB0`ZbLU{& ]O^~]G~߹kg~e ?gk<g;䫾; r/|{W7?:0o۳_ևptxZ/*y (7Ԩ(h=;[$1o L<.jE ܷJ4jcSߌBeRf>h$ 41x D똼 7q^,7 ue Qa &Љ *"cbc u,6cVCܑS~̇Ycquh<<b@ 6SO!X-::h'ғ$*^=swN*,$ 5ΐOE&â5\GԷ}ӣb{<ڹx$ѲeI4d<>>>bi~ћyW 棉\G?Fwʿwֳٝىy _kZenulxeusN%$̦sS$XBc?O$ԙAocglϖU͙ղBn_Y&s~Z)s@ &ϲTu={J_MM~moď0Cǯo~{,?zĻ?=w=ZZ_t3ٷn}4r/|ڻJ+ !-Anj@]=j= lz )@3t )`Z&M ctN:5(3&3֙ck6iӼ K}JĤƀؐls]zDLNH]n# Pd1Rrbҍ~>Lc`ZM(If K 30uk#U[L,2#un(: ,Ht~݃S޼yj2If ]X]X7Uf2HFДFz%W久٫O XeȲ$4)gìW4oNl4ejR2}G8\ꦷzu^#:%f2agnxImOpJaN 3";ї޸?1 e[a\e͊HI`6j/1sd5ev*e: L7;L<geoIYZdo/n ӕ:,@fiwkÿ@UUo߾裏v9gN=mW8o!h/)wEg:aRBZAP(]1lX0;2wR0H hE&$t ba6ȶ:X^,D@S1Vh<ϭ#4[qdM)2{a2q[Y#!Z"k:1;[BdDHx&>~]k7?xePM!Be<_!){  0͋wɸWyΗuh^/0;i^~qc~aiN VnXfnBȜCp|}LضǮ2~C;p/~7~ᥭ7}pql<-D2Ȓ-13ɭ{a,2Vk ͼ ߝ-SPtLP;^zT=!R:l&Ek:9^2jj6&㓅'~Yr]PݜV1_,grJRP_9zw| _iuf n'>Էٟ|㛃R-_aq۶З~ ًߢr*uDZP*i-.Zv[g!*rX Kdx\TX!Fܳ'ebpny8 JlI&&9ǀ s0%*%vδp9A"r3YlP7i'ã(h")JbmPKS"KNӅegI U^.7N" ɲnB\.ʨ_j[:|#J-7O֥&0e6llp{yLO+F_tyab8v*7'}IVldE֎5CWIXdK/ܙ<66AMlGW{ƓW|dd'{p~|0YvQ&:sdN+mh۬N?0Z.a}dWn~_ٻ./?Ο{._{['>~7b?7{>|ݔ]T5DLDLmA:dž{NtK{{R&_ةQa@#@ ,ACb2$)$Q֌*T4uJgUgPM gV -JKA(2c@E1RYÒ 3bXED#[Q f$5&IX30\9IbJ Mm&*dYCu519pD!`@G6n{Xln$ѕ=^o(Q9;vc='Q3%AqyyQogYӞmps׸W]nc4y=QeU9?vWj=1X[GbQnqBhwOc/,k1xǶ/?RSdBTpyq.ѥ[ǫ6VrU,nI!B<`ĸ<ղh{s<.Ο?_ʳ.*3}v?__hW7w;yC?"pU?+_/1+ǿW~獓G_?z^EPޚTQM:+S.UWO5gF<]O1;@"A5@DE'`.MDDh"!ibg-%QШ̘ȶLF1VZB2X%ۋF!D p 1sP:<*˱K˙5njTjNJWWMkAU,[k%@AD1jJ`cT)Řb!Ap:[1s2/zŭ-Mʆ] &#v.m0(.Eht0xq 1dgCl n7 W{|T/LηW/{y [؟k|ϳ<3ôAib0?Iifyp?'첨YB9J<\?ZF'2ˇ= 8bj;NMo"Q0'L"V[.o}_~}臿G˟~Z~׺=N~޽ǿK?3p|xxBqhʅ@׆Oȹwɀ )Q ʈ*AQCLTqDF4"BR$l79ը֦%zM$ d` )X2 햭E*جB жј@$KBt>P ᳻m\on,gHfY`D!nۘ, O%~Qf h1DRD,92wt?U_eIhul/B[~nMG& 9zcQͳDU<N>P^eea^95388+vgzS,q%eyQ#Ws l~P* *LI5v ӹUҚ@Eb!@R"=k5!1ȑmf- F`m6L$DDܘsl\dyGm[&mӦM! +KQ8׳.Yղ)`l+ ]ZCrRaÝżV@Q5$ࡼBDnV1Ѽ+7n޾|ִƦdXpV4Xc%)}XpgH@h|\nmosJۙ.z}zn?G̊o/iFh ֵs4 Duun=T3?F@M FlH*JNF*;!:aXgHJH* GTZpRI)8%& /Lr9afMi30{\\DKւVMN,QrKFEuAII`eQ6k;BlA0$Wb-8A_Zәq*m"Hle2NI""\9sw_({+yݴr2}EMq/OEr^4PcgI>G$koz`/~C횐R۰5ƹYcZCŤ}au 2YĢ0^hFA)hșU(EESML唗F3Wy99]f)/LWx>td%Q(py PTa 4ck_3ݽmۓ{$Θ X̡& V$Ra00pn#Z鹢l|\ T\ΌUl +.1&B$04g7ǾEy63nw6";CIA/Ϙ"&r >SJ"-"c4b6YEDU6 2akL9k ذa5 IHzIY*ֱ!ZED~#~:u5^2n)uфi' $ j:W ^ v8Cֲ̅Qg Ȅ$ضeΞ3g6 $$"(Q.Qn00xscy*hyTm# 8phEX ͛t'6rp6D45"kfeRC0kGJƵ?U?K-uQ/[11hP29ygo]a0!$)Y-gI)y@Qm 23QT' XwTX'sP˘.2DUal[XASa&qIa mz19}Ά>)qhZU:Z IeҎp;!6z&)FHm`Z& TjըY!QA0Lk aPBl6`(Fn$* MJ]Bݰ?Q(BLU=|# @UW>0z)ndjykMDijloZۢ?϶7ʖ&A;~ mgݴ(TH!/z|@0;)]o9b+d< e)wG?633MަmM}ac{FlgSz%4*ǐL;g {N7 -ľ>2\sI*M%!nLA6lÍmjEAtG  n7Cnt3Kƒ4Tޫ7|oᜳ^kǹA5KB:?22o{o\;|dRӀ=@=HMs]gMܤXt$MMt84v,gyh4U&<fú>x HIEʬ!U@AA7~5ZYvF4X+ ϼcTSQ%"vJҨ & \=Bފ2=Ĺ* n)I55a1ibA#,*!}d2W Dڨ!䄎Q8{ Ҽ s݅.(@mܒZ Fg{vt_fy#N M]1-nw6<.ɭ:js  ܹ3Z\{'7um++%}t1w_i aw:Ϊ?'cV9YmMLQZf9`_%o[ d *<FMAy7]ăG˼鸃)rߤ& |A)}ɽD|yT`PL;_t3Z+OmtXL,$28]I`n@45mD uJ0DquLM8ybr"O5 CA682q:,+svbU5#bUbr8j$Z:E@ $'H2PJ1TSF[?ysE%a 3(ghG,@Ijڈ.O&*d!Wr-َa3ZB@7HԈ97qƒo_x׺d}>6N7C!jHg"&9~׭ҥ6s{J&>xy`'BS5@MϜ?qvSuKYqyOA<4#&2cU"GF9t[o]d%rF*rl 5h-sy쥥mKC UQ6hT 40W{bz{F@j0hyoTxe0 $VQ u&m3k}vvĝoMɏ|<~zg=';E.*shVGth4|GoysYʲd}7xԥGm_'5VFɲ[Nns~o:߸zp2ŔݕÃYR3[OQ'^Ϻ+Y~ O%kvHNdt4j'6VW W2Vbsmu8hKS<{?q+wuuɥV 7Â'w:M3tMn'lr8<^YY9q]r}W˚WJpug؅K>/r=re)C{u5h'01yǭNE9hԨO+N9&A"ϝnwkkd rvx6y{ jg}y.2}K}>y.z7I^F0$B"fo845-gEHu38:@ LީcqI@+X=՜s #5n6L9D Fp"ꨵT9na6zEl4N$"#2Fu&“a1-42`"XTc(]k2@0#b[J.m҉b׮OvW/^`:fXa :3y A &X sMȬ*S)xb`׮n>>Ȳ1n1sY;vWkw"2G5{vk}U o %`bi VofO*@mp!GD;B(ã}(ʓ'ϘiSMUמ,yv;?{5Ml6U҅\5"{yx[[1H;=&8*#})Hg]?qKM]Sa3$3] 2-Zc#+@ƀ3-S`&C29KP02X)c"3XZK"fͫq(U hEUϥsPE%5m3楮Upu:nZɾbmKfIaV|ֵnKœcۓŒ[ JJBŅa V)ȃ`xb)6ֻWw?'/s?"(m ~/KH~k d$bfmx/E\k 3"5%Ky6ߒm3+0J8:Aڬ3+=@`g`D9;Q tNa枒۰hi 1@A0ma\OF3jyshfCznFl90f1uƖ=>8ˊrI֠Y^(B0oWu 'OJw=w641;#'Zk];Low=}nRpm;q"3 M q4,99Niƒ>4NܬBz}~A;}/pw<jȈJM>kx4͞u|u=%n|jӢ(,wD*L3hqsw\2SRRAZENj{LEΞN9^^YZf[Az7Ϲۏ-)pH py;ͷ/ V|na7vU"noe>ˢY4:6%q8ȊQ\4;k?u6 f BRk3ӘՕuN*]a !$2h #;{vss@]1JowywYvp8O0?{?v/Yǟ睿|53kx=nj2BD!Zv FP\avFX-ɄL %+ S%b5&x&8Q]of5Q3*͚6D4,ul_0 F!٤% yҗIغL"8+ӘZB]~7{ )#ZQW$׭ލ NtRuE^J]7IεLg'6N\z≋/oxf٣=1 !4M#"{;Ic֎z=veJѤU%qpPNd)o}[?u;O$ V:^&[>"ϼw|ZOS3DI8B<cTVhޯ7jO<ջ/Qq8R޹^w??h]z_C87N{^wr؞11'#ܸ@:Ix+ίez{g%8%Yhw.+sJbQu % Bwє %1v" 523`Ȑ9JD縀uR#f=;s{ bW0`MؔN5&nY8GsLbg&IU'6W:?L0 Y':ДJw搈=c.]ZUyR5"%]fu8`]˲>j Jqb#2VNJsNz9 u71JLD`BAsHo;`<d{x`vh?/־.N b27/?1B;(zőBUUs3b}1Ȩ˼e0 q,KLuNȟ):()c\͚^7_̝b΅OzpʕEWլt];Ӳ Gi?ˍ('CUvDT$tĭ,uI wܗUͤW"s0gRx'L |6OMm[s[)j%\ĴsKwymwj %]8jt͹6y҈^XŭΝ8pQF:ZHF~셃lRnεfqtugm}p^flPGeyPYg;uynU0C=7&M\rŋ1(z.U:疦ι[[x@U|?ַ벹6Ҩ:f9{+_x7R~O}S/Ⱇ VѰ []~k޲+-^:WL&&0г${|w{ܹqhT4(z#IZIVWfLh,!Ӟ+NXtTc1 cL^wAqw¹9%'OuML@o|#A#IR$ 5e3%3Ef "%NR䬒)8}Dj><3LTml5̬yіjL+ыãˣqvj{VvbmY+I˒{9Cs϶KMILM bf)HC4bgGqc3a.]X׺BnzDf B8mѤ4,I僺&QWUOldȜr9[ιwM%c-} j?޿2pD5֓k;e L.>y1ڌt\=4uT&0;wfwwcc+"ݽSU2VSZ4/Tw]':2w\`gzѷ3W=Bμv;-w?7w?zw:O?+?WYP'}3XvǀO LCL$N)Q5X(BtXOِxd66e#"[!69RS8L"w~\׹ZcQ32]eQŚ*Q1RfUӬt:Q&x=MJ='`,29YWČ IDATPƾ n&A961h֩|&mҫDJu4$n@ڠ~~lI1bֹihm}ejyyS=yJK9^g:Uۿ_6W\]_o[[gg4Ύ?EwG^Qx߿;Xocoˇw}3ws悋Fs~5 Hu1;qd@F:ԤjS2CKq*XZ,  k̋_3}fd[|atYDiJ B20(^d<$ҳi hf9 y@&|cd3#7|G_-?_Rg{izxNzjjC[Zy QA!m8B#S3,9kp&&`7LF ,,g"tl!!䠁긮RȳN{#C3Y FY t(LZo"E;QTC|l;3%CB-mA0{aSWxIMZGMη̢&i`3{j1D8bϐu$RvWz|Z5;GY嶵[o7h]+=! Q\0U̪KDb6eoA^"KS+1 *gν::^ve fQ/xsEa SRQ*2ϻ3U3:ԟxkiN&!2R{yEC*5Aؗ)̯}ϼyqwWh/_@۹%Whl 66Cah-~KFrJhO/ OX7 H & Jatd$i 48W0gL%#p0`hk΍@Q\ o̦طz'L@O{ʯҶ( ]KT+m(5VNn2XyƘQU/}UUG;YJW"NK'N>q`lqnz_#3 ;G/jgu5,iDK)Ѳ_yұc<^GZx7gy|b;sʣgw^Lbū/fӪ=L9|ՌWJ`R(@I`841k@CDrum9Ijmk*WG9VO?o9>N6)dbVKb@( PM`SP{B)pܴ[_U@ afdS F^yV.ҹeDASmik؈USLDg9#"b$h+ g#b@V?kݎ:)OMFJG$bj9xLadjUQ"ɻ]ϼ^qbzO]̞{^?;]M/~8uM_y}kDٚ5HJ)OhY6mme^eTܵKO^~[n}=2jٽ}Ȣ$5%!Gd"Y[='LB'uU}Rs̹AJ:HRI)hFZwJYPO)V .@cbώTZ4䦖H6S4 뚹"Y͡=}gpZynH 649Դz,ʼr\:u>w>#xgXo "5$2FtⴉxeDԱ),D廱m^"c*1F4&u!6I]]';p:Xyۗߛup4>|AY6l B>G .\aV,DyLT7MReYbE6@,@k`FGݾ.;{URi^Oj%k}'A S287ΈD6& ȒL| Ɉٵ!GFې=mv:MgԑVνq/fVvL,Z`PA1ܲv;Lw_^U_qe?W J %Mb) É*1/HUUhC[>w}jg)h+)hfeMtjzim&E~h4*"PCTi:v7dֆ fLSbm|3:-o3ϲ,UzVqhT!y>I[N_jIIDs@k$/U!m}V@8 nIKWgO}ã&ZeΌu<1EUfke`sL ݌' ^/ֳ]l[7#Jl>chi/xg8IYjJY(yFDZ2 8vJ@Jp2B'˓GHHܭw?|TdĨTZQQ%L'u~~YF13M- nR}nKp[Yq GrN{WvLhFK% ~4Q-)꠿/sv!PBu>14X{ӃxR(Zz鬒nTMv-~J "6vFKG qˁTwWUu JnRcRؖM2)A!꺇!(%жlL1e!e*p&t>!CGkFBP/ +!c 9dk.s3x9m:*C)B 9sC${pȲ$$ A&&'r߱&`T:CB"HB. PBl۽tBFEIl Bp¶3@h#q/vN~PTHdP"'Ay"fHhb @R,1pL2zTrvb 4@D;ٛAdZ&cF!'{@).$`9a9 42$'HSd u= 2 1N Nƈi50-Zg/2+ 4R A(J 8V"01Μ46(AJ*N5 i!J!9p&qt4,"HJ󰔶V1+VOH08+KX"CPi1cpضȼ/;}cHd*VX )(C)`(-ڞgڶRNB"J:ZR4 )`@ JĜO%#HȀDPNCmO#p8,fXf@"2mZa @Pfg*΀I?J& 1\s29u8(T6j.P"IT< 3ӎ)3xV$I#'1Ԍ'Qut481ΘP (MBUD!ʙ3B/Baؼ>kSTBDC P-5F*bEix!V$9gDdh4)2k0M `BJ 3^(!晶mh٤GTJ@JMEBh$TDaq|c?|,r|NS*`7ȄTa3b+ m8v iEL)EJ9t$e?S90fS%$ #cˁ}^b_^Mo~ϾigՐK~<ɜlKYG׃QO/R>wTAZ wOl JdJi ,D~] OCu82΀1 $PЖJ1HʉkK M΃yi&}vD"@8i9yi:wfSR~.kc∆seF40,xQD!GM3$(($8 ݏjt]BB8-I~8aJ=xborL@hIT :c2(Q2)H `*mfB[(H)J*sМJI$PJI@`ȝxѴJM6-0 cٲee~qnKk1>l{ݕ]l WS>iIk'?9|byW%ݧCZכ֡QZ6H4O׼._2O;^p#xAޫ cՓJUܑx ܇qSX4w .(A %&0 _ ~t1 9c9ta+G!PJIvi"@6@2&GM,'1ѩ&f褤mZdKiC8$HʈPViE t1@Ҷ-J L zk&0 L"]Xc0J  a IDATd5Ox=rMC% !-1>йM[lZ*~c{Kak6m/,)!mDusJZBT\ޭ@2M2eme+J2 [0Mi R*xNĔ!Kzs)}}7]ӒGN1,zoE'X2A{?m5Cޙǜ†kȬ9!3oK7e1RTXCmG#S,2 I Y8>| x1X?cIT1Pr/؟yR},ԑy)S'7 3^34G ;V4;rjHXBF,PdR@> P!p\wĻy)i[m,I2-mE /T$Md)emeH@D'u *BIeARE M?KPIJ6q5fpK"a+aRek,ć㚦iZ[Gk)b;~NӘNDO nnNt/~ֆ[Gz{䟜>1O.|( `"dj=\;5@,GZwf"(Jg,Q8)Fr).c)Ep"uT˺Zwv,~h}{npЯkAp82Θَ,NGe T0X*@#P`ft7źfQH{֤8ƙJ*#:"IƄ4$$S(,D" $*`JJI]d"GA"p{< MIsAB*H1 e+G(vcG?K6KU;4M` I$PQ xk!(p)RRH"⹛bG2ےuu ).Ymnsi*;B}9 žr'|Yw yrC?J0VJęq!%Džq\¤xމ@0J'aFGsN@2!W/ &)5N T4[ p$ 8^'ӝWų# ,sXϚfSg$ AȫHB J!1Be+ahLYB0 AHF9nr$Lp-eGH둠!YNQ]LƔT9s?>rE̬ؑcs" ѱ+*~" Ͱ,Hqk )' ;GȲDB)HHHdbr+UvYvqNq9ހW0UCENS"_tmsuuԠ읚cҍʯ^FPH-f Hȕb|nu&itsC1ΑiJj"ˊ8gعB$Ji& G@9:+AR:)V<kV l˶B@c̣mZ%%W1&B+EFD$Od(j*nٶ56AEEȑII!ѽm[DVdqRt])7Yj)Ͼ-C/FَX]1FHlA)1FWcQS9$f+ʜ"2rfH [)b0D%I?s%Kėk;jo+uv2lySZ~8 q剷>Z:ӣqF7}{x=ި~$0!))ؽvʣݎU7*/1!@:*EHZb,BYrlw1:\SEFbD %1"@M*Q :@~Ңb@0"S1p,BJԊ|9f|әm11RY*{QK)"4MB3p PJXSRftF "`IR % %) ""1ǣk ɩkcRƘi$"%Dqrrty|U[TVS"BR cF5@R gh >' w2 )1#'O'e Ӵ#BVX&$"G Dx^9q޽srrVX|lѢE޽[G_ժۣZB}h)W^۾S?ߧ:>ڭGW6SVSRMjSqo|U>Motqx ;HBgYF%v$P} 5xR DQ$tl c[۴,v=.8]( 4 W96 (fH%dGft8AոG Iy=z0zWg*y{ޠW\C's&SJw16ptHOO8p`gzt6RRsJwx/=39v^UC:>Xq\OĬ/uSbvˈX!t8**F KU:*KVHlqdˈT,T\ya˅L[I28Ɉ)<OK ,VBG$GJ xxOH2-Q6CTu^C!KIf+[`HR0)c *lٲ1' 0M14xER\Ӕe#~.W^yRX#ȒȘlynsk/]i|-9rq0 VbR@GJ47d6`a 2d pR PҢ~/A?ϝD?SIo:E@u⻔9qy)b(tm+ݯ|ViKdBGc!Dx e)Q)%,K״`# IـDLϓ4QH4LigƔ"u lsg0 YJ)U0O *ך&RRDq{qP1Rr p ;xACL Hh R bT'6 3 CF@CO#\k$T6:qɄC7-t| 9pk`oE GYvP: 2A̾4M+sd;bR p&X֮:Iʎd}IH)*bQ2qƹΐiNF_Gie[F6ұSN?gmJ6ÌcX349JRke!&zuI((I0Xg mȴLkkVR48pe !$' θ)X*/>R bǥl' ^_)'tM/h4G4s ]n.ndp9[ + ;'i|8-ST/DD"ZŸnrJ:x#;R˅KG7VZݻw>zt7F{%Yw'ų!:.9/^0\8Q~իWWK :tྈ.\HIIr1 .((U?}\pq Q\Fv…K'^y啿{yvl .\:;va1rσPI*TR H-Ǝ;lذ￿iӦ9e޼yaUv…ӗQ)>/a^vy9"`޿|lOj:ѳmOY~EWo  홳綰qi}xs]=w|-"7|pQEٷw^Zzt9fVU ;+#z뭣F:d2uɸk`素aӺ^s˅#0*4zg߉||]?sWūԆ/txJ?[kf=83/3s5n=\.>Jq_/`\Oljí(%ÞwӬGk3矛;31@f?yF^"OKY^3eх*i|j,UǾm6Qet1<^(Km7T쫷_Z ZQNᦟunuN7ao3=mW͘".Wf>>q\EI] ]WݲHd\j(Lz=ν=ԝ{;s#2ռØKf. Uk޾Wr5'C#++I,^SdI8ǞvQWbw~k-}s^؂Lhx\\2]o,F_KO }o1aP"K븣Ƌn,JNk|Dۛ'?HRD5:a3o/% `l<_Ot3鹇@.Vz@Jf. UUvvY2{:>gcW?QG=m۶:uaժU:tVZŒ3uu)0so>>s҃O}lwfZɟQ#jݺu5`bMLLC0*$rr!M O&ǯ^ks2w.7vcI/M\ ~9֯oۭ[ޟv@)R $)ի>a'L8F&b^^vߦm>oj5 9g͊5V$׺xL^θE%@>бXl.?*S3!!H8^aomuDz 'oL)C4h‡Ҝ)kݗŧVɭ\:vqqpܴmyDݛT_:ոqB|/jR/ gTh3S^u ש(3Sc0ݟަiNIކ)~z ڴisHp0-[_RY C|vhNloJ{pu+y"ɰs:󼔀QS7a`ݺܒ={r|BMC^ohk۴i#֬q:ugˆz}m{yكyVһj](<}LphLDV(g. 0}5^{WUx8ЭyP"']~q^_ߐ+ sCu#gPffa@ÆE,V0V}O޽ֵiZ'(u]?.z;wS`pe/m'֞yf?8f_ (.=Rݗiy̍ۻTbGKcz4ћMzӸǘIkG s\̴L!Ro5mРPBB>b!c٣Fٯ&*ܻ7{Ӧ6Z3':E?v}==>2-` ))[2r܏Wn‡u}Ӗ׬<>mn۸u{uO1u-nD&?Ŏv+ͤU|H}MjSqoe'9A:9gݻsR~!2'L=xpݡCw>YO?ڶ@SAR?_xG^j׼:i딇ڔoZs/`ݿwܙcV;;yu|6KWU￿E$%?&\;tմjˎv'il + [.%_J]M륝wi\zK r6ش)^!~tF}E ^{+@+nxeoy-W c7^koOtz["&zVY_-D ~1kdlʳSne-Y;Nrkh@DIdY7~&/Gr ERo;n;wA/|]yf7&Mxřλ߫#vTkg?ZOL|c[=:okW%|_1 v@ !rYbGmIgWkk}{LHZ5"̘ߧ]x܌ߞ1C^q1s.;rEӟy1xbi}߶[R'c3g<3g.\`>V tl- Ś IDAT}$vtX)F5v۲|y-yy梵3 M%K]#ZTt|SX+,QZ\ǯMytqV-WzP:W3?SUb~LycR^߷FE}Ș˟|no}!ߙ]YO?[ƍ>ԹO=wp)qdzkX?!~zk 3yàuS%ݧ(/;,v5^{qM I(3[}=>qyhW%]rIΝS5cq1) |e}IP;{T\и#[|[ޛtB0!CLHLL6lXbbb\EU޴ B¶+ ~eZ?ر#zݻ{pJ]'pM/=^+;s5\׽_tAP^}tƾBj+o Dcn{{`8Vg] hpR&7zM㗷hQ?jCmֺ2'W9>(1=SZcR0GW\>ϴ(LsFMNX1ih4FŃӯ_Klܸq:DvW^}eE"z˗/' /"xƍ.8l @7:^q$*ضK oY  РA-@wމ]<ߏ?;:u֭"fȘ&#MsXp;$Y :^xSwQ5Ofx(vGDZ l+j9s[7.Sɼ<`(ܨQC*> Չ%^5nZ.YsdcLֱeKE ؠA .o6 9?M7eNZn] 0dݺ%]|FS'VZusqi:0\*BT̏.ТEZV *B)>0sogFF5^i;\u.3VJ_ùTm˺u;w6NnVQ*s-+\TaBfͲllY|\XvǼ΂.ff 44}=M~x'=۷?[Ć Mұ G ߸q:u\tQvvvnnnvvv^^"$$$$'''%%%$$$%%Ul1Pn~?.pql~YfƍqQuzp'[.\TuT-*kR}sw6_t$1wwp* BiE+ԅ:uX4wp`p.[y.NRpDt{ͷ}'ګK]o#-|,>}zaתy?mNjsnn^q}.\8W_u)^ReŤ/77ؗ'MhˤϏ(۬Ɨy~5cGݲ.\pLe3܆~ ^R"{'ǝC_1m^;`zgX ߿7r= {np .Nړ<8b_v|%AH?xkA۽}|}&ox^wR`ԏKSo}AԵ2- p4QTJYCx//L\}C7fR2m:GO8ƿ׏A}@Jz u .NE6~3j omy^uI8U)>M1 âcАr~Vw .NEe`+{ qi=fߐU}u%.K4T|P~x_|(s7O\pq(VVA}9kg~~Ɠiqtp\G@eY)Ȟtr7! t'!/[UZn]$ƛIIIIII9(%Zڇ?fC&TJJJJJhXx1DT~\s5f2RH))))))7|~2>Ђ-h))))))/#<^v,35mK/RRRRRRFM;6y7Yvsv3{Vu<2q^x=  wPGvvxv}^pcO2<[w4l^ } @{;/q8gzVfr nDM_~B7t{nwdcv{bo,s6|hR\ŋޒ߇hlb}Qp,o/wSRRR4/^wL4w{jj9*X޲[]JJJʋ+C[sڈMyp}Ay(sJJJ_{Uf6)~*_3}!H޲_a{)))))){@lyޛ4))))))[bի))))))f޼y@j,%%%%'Uf)))))=2KIIII9IYJJJJaORRRRR{Rerؓ*Þ}ny뭷H9HjRRRR"UɺjE` &kb ˔{+}KC(|*e3DFGiEiRd J@k ʀ !F *PЖmbQR1Ы-]a0 XBk D#hVRJaƩ`5RD0tG RV3ēq=\3*eVG r%rDw*JD࣌&#b1~@ 6JhiQ2V H@" B H,&A EB:h F[ DƢ@ZEekht$J$VX<  K|k!7TmUJJJJ2}drbfT>*&F[TU|.aDYHPc#GHk,1kAXpE),Xh Y41 Ϡ 1ʢmLb 6! tDXr`,FPc ONdpсT))))){bTL˹HZZilj& }&MnGk PY@H6W$ຊ( B!@[M`bW5X1kĮGa-+Ta0! AHD⁄ւDQc i:‘e#ڠkQaR1wT5%eذaá!/3gjQ=uPVC pp3m̑Ϻ(7A)l/" ,*"q # $Ht!`X%1t!FL<`%bZkcMfTuR`P O5eiB.EEŨ@rKI9<# 4)G==OQ) &Z 0 Hr9T~HՄdńUKhB`cutd[ 1ڀXb#gAJjM9 !ƀJ,3+/A @ d, },C=<*hm(8 $-4iCAZg1%K"iRRvF!RL&C6=2Rш STT*Ftb ilrTK DEyc2,:Qf"qjVcĚb X6cR <)^]hA DcPJ~ Z[w3J+ @b(rò]"Hx؂t`4 5c0ں(nҔ=;xI]e˗`IJ02 U?*e;ZڄymXQ%u( Б<!%NĆR8hq,2G 7!VkBa8h B| ʉ]~AHUjgM+eaZKdu Em݃qSU|Ϸa-ʘ -N!,( ؏pE:::hnnJ>\eĉ]O6}Lr288eMMMtvv}vniii Qo4iҘݍ֚62̈eZhkkjP50a,[Jʡ`pp[7 ^)}U*!sj"뎏B2+ hoo&+%CXJ@kEaD@!"5Xetd!N(~H1T[)`G&юVJ! Hl4}B#t#ugZ_![d7cc -('[ Bt@-*%cSf}}}}L&eoaǪ+ٸigy10zm۶ry/")J/nww_Ngg'JC N{G;̂ na```ijls\?0P>ٳ9vqCTbK?o>G9zr]]]@KT .}AH]0 7QcdT̓5Ĥ,媠IDS)X ^6@%@qbC5Zki-R(Hh)Bmh"kt~OTbp|)$VэJ[ i !-T+!J Z, eHdB>J*A8D&!PBRfkXx1QP҅B.< mXs:8nBY 1b8?鈇]YWJ)zm#oRE~r͸Oۼ풷8u!۷oV>f͚EKKK<` ,WdҤIԯi5(>w "kͣkz{:W.~hѢ]wnT w_bٗv<>η[lã_uڦႷ^+=23O+ V<˗pɥq٬!6o#>Lӧɓp}<&N,#ֱֲyk:>e4jl޲&if2h?)6n׾5V<3N;skN;,0PV>@V-Oo|DٿV-5u73qh*w-wVyϼߴ<ⲏiM+߮yÉRҥOpgs'89xO>o}m,6_ 8enܿ ;Jt4gq6rhc^z Z+TU1qb! l [2PʺУ U%8J|CQRmj5Gb@+<X) ה$1!TVBmgݺ->;B@֣P(FBE*RԄ1f7剬FXƁcs3pVFWWVƤIk6mz]ADQw\/\v\ 6*[JP:pT eߞѴ}[o`Bo8;y'k֬aǎB{>\t2']Lߓ/ۓ~H7?e*nگ.}o`z[B.n1be8ĝwNss3}g9sx_i3Pj0HULiϲ'҆9q@շWظ+%uX 1FǁƥfGC0X Kq4dS0DXMr4H|DX` gҽSidjm a90m"("2x.ͱcnnIKak-*aH6|Qj7o@|tttR苕jCv o}[O__:Jm2uCx:*v.T*~PcO~;蘆k Cm۶~3f2o<oEb㹊ùteE4W~qvɼ`^]}87{kLV̫>ܼsw{p}> ehn&LHZCFIPٸ̤[ Bȱl6d2oLІV+">*ɓp<0QD\)Z2TrXn;B $fW#"bP*Ch 6DJI[s 檥jB㡒XXQވ-ށ!@*IX+㜷X`p~j!cBE)".916 $#[fϸqgR, [Cr C\𔪧+J\% TW|L)DeImX..MɋJƃ\.wk&~#Ef.5\ `Vor}g  E# |Kyn{wy|:*aeqgߎDaH/JbȶalĄaX\GҒw^23*Gn"=vlTOJ`5ۺ TæClRf[Ϛu|Њ(0T*ۻK^E90Dbh X?Pa]geaBeCjm噞*堄cY]9.B."Z[[}|.ueO~W˘8a2AEƎ20 @t Sj;jX8|$h>dHZJGyx^R7unWUr\dT*|_q=[o_#]%m'XXzv,Xi=k˃Xa}{vQ9ovhB{#ֳwBkM\|GGF0ZKz@)n9l.353.ӣ+4lCC%bLc&`9`Ҥ\ylOQLp "E9pPU@R0J憒Xl#@cF29ǡYHS&qU{ I)J%;3`0D`\4 Z+Y+FRY-j52 ,0`Q͎uYI܌w3+ꪏ|S^zj\2a9:\דyc9B1 }UW,<׋Ar3S'.К"y2/uݺ2ϸŒoЏ{*W~]prԜ?!DŽ3/۫L{kW'}eq޺On3FS}ApܸV-7)NJ>xteBZ]|ĖL7FF"j0ҘE@:dTbXH/Bm^tDZhqqKZ IPנ4MV}J""P48*LkQ*[_$5[aR]h% ps7,U$_'Ƙ rT6.%X\ڏC]1$;?;ͯ喛?~rU,[C\v;9̝o9wip]u=&pWzqf_x^&U)$h:^Ï]Jo ougWP,I^ _ |c_Wk=2_o؟^N}5 UiM쫂GuϮ{1W{>u8o~ 7t=Vkvmʪի3{` kcѥg0H7Y-_C_ₒƀJ :h B`L Bk_JRU`b'Jb`D4~Y%#u [Mv*?\ꖚJe,V(!+2ĜWͪp]7b6n>=F'p'K@ufva\H lǛJR*3 edȤn W-ڟ|Ϯwɓ'/Q1cy 8,抯$s9餓)ˬY_% cCFq\Gr̙ȬI ȃ=gfĭPA-:T-DXxl4h,V$XiA]ހrBmM(Bڸ4UBMN,<Œ̋%a,2)A8m"^# +T #>:8JaZqdM)% =拉>OW]kG?;'k}9S{5kl5?[[vlxH[[no+Zxh qUWS5|ycc#|kXZK6\)]A'SR\׼qae)\F(4D8naqElQ<% -Ac@) IDAT2 ] 7BKK#"mDo22z-LI06D !cSj9U8UGQdfIZIbơاg0L習nk^q{hK)immWdJLJG <?O69X<#uKl1=Cm+l/\"K9ԼE(hnnN`gcnmM.ɤn*Sf2N+Dh_*(X4^⚊=LȒy"q8|7hTImEQ_ בX'Y@j(80~m Qo1H[PwagUdͪ#ㄐz&2Nc ]_h)]XcAJG^%zw /|v%KMiZ>|!Ud)ϕulokgIL`$r1Qd& ѯ('H)F*My j3GJ$X2Rchyx?Ǻxs(9uwG\8Ud))Gϙ˄I{l_5ތ9gt;8EPH*lh ʅ%A+0+0:ԑ"<mX{ K։Czů+I.S׾t~%T/ bgX!bIdT( V0I"6Zt$|wL9=<@-Mѹ!e&J,&◓9()3HB𡹹b-L6͛A9c /K(G&9\I$ڸ*{q!+=_ڭ4hcPJ4wc7"0d*2J9DڂdSwm"!+*%xB.vGJP1HBY!4%e8'dIRy1tG]Ydq*AU Jո" 6vg``)]݂֭ah-Ľnj6#*r=E8 c5J( D 0P"*ʡű kT8kC$QqձБ + RŅd7IaV&x;(AXRGO̙3))/F7g&@KƑBD!k% M͜u9<#L:bHkL9 k z1N: d݆ L2SSdشi&t2q$֭[R1L:z̙#>ŒPʡTOAٯU"i[R&Sl"hgyf0q Bp1 ZXKdt> pD\qnbcT̑R`L2|co}ǻ8SyOq|i`ч?FR زe+s.y%JoAJg]ɔs8cYYf͘ٳY8NͩF_oӦOc"[odٱg0e/_Ɔ 9㌳Xp!ٕ44Q)SBcsRJCpIdA)W%tHYm)))))͙iIDޥX` Boo|?=>g%%%`2*e9 ]jN洵^wð^w#.a"k1VCKkYц(iW kE(dR*lR>VX8q"El9Z Fĉ( z&tgAYB`d:`qLxK`ɨ@%h,,6tѐ͠*j9S.I gHiW\$,zIRX`$X")d 6IY&-cbeWTIQW1U-l_ %P%0(k͒O1˒SS83%%%%e2SI;XՐ@(t$Js\JJdi>‚F*3!SJ \6$.b3E";+`gaSMT_¬g Lb9iw ؽŵ"K2J*#)䉝(TTF⮽*qZd$Rx$  @&pD\Q*&h)PJT'RRK,17)Blu\Q M<7&N"-q`c1ek-I JJƮFAX2ZeT߲vSRRRR83;z+)ߥѳ4g-WNyD&vEJaQ2(@c&qs&Z+!HfϞ+%ܘ)#4Rt4sfND)GgC#Oa 0:!xRI+E\$9 a!;V'W(0qRa-XLZ5%%%`2*N'J<#4' (nmUxI\imƔ([ĭ[brXKC/D>X"X| xA90sr;ݽ="" aQ[Xt 3fMֶV6=EW\ӫҖ֎ = X+9ةtt:l-/h:W^x.a4"f+U7ZGL֍|̞NXʶ!V4J2yIqȚrp2smSl-2D*"2 KkE(uѻY^ yw~tu-k~̉ .nOHII3*ev_J>kJ%FG8Rad)-J'%$|a˦*SuWxg. enO*"~`ihϲfU?[7U/J/q]'Ǐ]浽{n+-&{xt v dݺ~%T>5], *dr/_EVѽ&t4S/2̞9mR!׼Kн5B`e=(h_9*1-i>8?,ک|y~o}\ؓ|[_`AÁWh—{ y1lx,< g~Iw<É@a}ο([dDc6n- qpDDӈ\AHcq!8t8;Dw o /=c&9+7xn(oxKx|&6݂.6rd˖n4TEy\WmG !EZڛ{/9{[ `nNhCeL)bHfH)rIF*2; @0PR8Wk,wX8Sc:r|?qW?c)|4`+ wÆ%&͛Q.XPk{nxW7=Ėɜ7;78nTL}},zKKyUk³򡫗p?;W.l/~x '>5 YN혇,͆'(g~ ͦ;+.`o0 q"a?xmer9o9;Om~kѝ5PƟd<s]Bˤٜe{9))9*̘ VJ [B4AX!,K؅ ]De"DIEgK;O.%*(S)7j.o:Ô)mtLmGؼwMHNE|_#C58chk,<~.ML)gêYD7~%b6f̝ĩ>*1kZjDCkZ@5[L"Ήm49\!hrxRL?o^6o;NS_/ߺ ߸.wzm;w|W*Q^|}ʿ1%lpR;K`Ob9z0*Y^h릛nګiBPq;XS姛h[p)FNkכ!hV3nd]\q^{~|=o?7vs滾Wrٯ/qUǯݣ))IJEů܆|\0MDa5JjR(ip3hiogr3޾3\N:i][KxxgV?LL?ޅZGlT?$ӚW@Oak!o!ЂPT1rS5'sAPbْg->>xOO2}Z+y޵ kZ(UQa+C_js⍼ҋ- ly6<<@T^V_v+x;Υu95`7U2FX_?^f%lk Ɣy yĠ6+tNhd_yw&~_^yy)XraqU#9:]XiQ/񑷟G-`5trF}<))G"zFaDsҥd$H!ꣵa/ tڰUCth&On9QiQ,P*_Ks$2jkky(6hhe^,R8s Ofك+(S.sPB!Z;@iL0[M}632IK9a,*o=b^h;|˯Գ?NW) Oi,rO| ~[))QɲWCKxHKf6mt[3p{A}5XɹUյǴ-Mia~\__Ǔr1<3IXB B| T"h摎K?{'WU?u-vGAQ(5 AP")Q b?4WC/B IH$[rn6nH03w399~z (|jjbi8ȀPHm,wbJ唓g#-u< ZS[az>2 r% /)b9Nx!3xyMhm#gеH:W$";CDJRȊWWҔ'HR(eIunql k+f1vFA,Cv?moVϵɑ~h!(0y| w $Ƹc~sK7ц90Nl[ W H=~8eyl܉3 lArTI D9kZ5?]~7>P6M,+^ KfN;:meYYٷ7yϿ?a1M5^Ŧu]dR9R={2d2TWB.$^vHwfd::QER'(BJ^BC ;gJ8nB<6ƇO~ǚihncS'= lۅɤ#m_VQE YlIFذb!S-%Q5/ŋ3w?/z-K/b\]K7 K7<ŗ82~w_b_̲o_.Ʌ (оu|xsYO*7!>*˴3˵ϝAnL8y`YS,ߗfcIA>coTͯ =\O//L9n眲7Ws>~|ˈcoE#),B\"(%=uIg lZC"$RQ*8/}z H#,}e=Q-Dϔi$K}k-EWf=4=M!Z(Y,(z|dcquЅ4G q>|/>]0]ĬphGڊR!fk$. Cz=<(<#R!PءźūQcYi\}G?;tV}+˘={Vs{澻]OEU<8}*3F?oGg?p׾}g^9wҔM}y|eQ? 9_0p(p#OՋMJN+GDxU?zYD"R{c+ gUӷ?,m_̅yl _ri2Чᙯx[V#ϟo-[Nlk; )`SWe 4VY Ya)cLD2 B͊!yl9!QWmBia.!ZKiHV/>p`[ 6e ш`ɢ.RC)[ IDATyǨk%aٌi=3D TVSe[^G {R+e>Gp駏d,^xm0 bƌ̟?d5X,'HwgTOBt},G2ˊc+GYE6_[+.Ak JD6",}K1xդGmM-\5D܀$fs-eyhTiIZkjjf;B5vXxG4um)dML6+{ȆY68yOqy3g7fY;MyXōG((4R Wٌٳ˸+h&al݈@T 5q,=CVFx%E]CWiibqMjCRD(沔=Pб)OgjP59xe"O:ˁR]gjIVՠeaي.6Iu#EMmt@(W$:(Q," }-J9!C6nĔ}0%/<\a{8VH8RC4 0md7D qj T!>aҵ1EXPxsÑ ^hÑ%,O Ps pcQ )h[]"gcg;JE“=-I$`ʍYM&+Essb+Jg XVyP(p,)SjWl\Esk5A(Zˆ8_BV=L$p-[T#!_8 ~ߙ@f # fa*! '磱Hǵ4=4Mrl(ޕ#TRIBA+I4E:H£D,G3:|Wu6eHU %TI\WM"RPWC?PB(R ֬`LmtDj&pAHT' EZZ\C$*dx}jZԳn]'ͭ5(aHm*Q5\W_ma6,ъBR*ЪFQ)Ȧ:p]h#,%[؄A@>W@"R$X^])Zy PՔ$,l\F;Ku7I4$@ o/֭Dwʣ;&2kf3WX:,Q؈WxuX Ut=er@esx8Z±Ҋ Nڑ@F̝;rba =gD8rWON@kK5MYj-|tOdT:O2a)u E+e/_Gf#g&&ΜDh2!a9Q/ŦiCSdD?xA@$E1&Dͧ C/!@INiM!":FWKNy|)L̘̽<#΄)ULMPM2b,'FFP]c4anHJd\D"462i^D1ܸMuK#ǟu0W|T}xD5`YۖHK!@RdӅv?1w<Ձڸo(_t> nc/0}ܹs'+Q^kJMUZE_LH/}/^qgr7/JЋ_}}}-y~PesYQ ɭ9,MVsWoo mmoPk.><|Cn{ܹ(| ;ܛHEwaqpyp+Oʼs{ 3{'e7wзnKOaLM;ZQgw7=+.:p݈YXʢ  XC1gӳ(qMC}-cO $kmfҌfj!thhI2jZxA+b<-Mqꛫhln|Jm+Vz )P`#²"u&BrXNF ۍ!,Hܡ9I]cX2ь/9/|1L<Q|#mH!pWY+ᗏ[oEc7c#w*~6=G flѻ]wŭ 9q~@3ƕq?g|V߼sy?[fl1r}+nmסT*tC,P̡ LMP]_ Eh |RCZCNRʹG$Vr wPƶ"!XBKhl>XQDH&H$Һx&M]k,{f^%T|SC7ޱp:}"A;dn ν(ny \?(,C<{ >B>4~&rX?٬Ǔ_4bārs8oЗPg5"hDoezhwzmytr?{CʿίCן߷p7??@򗧦{c|ڛ8/mCoq!s sΝ3¼'o&MhV[np;~#shۿf}*g> ܶPW _VVyF/2eiT)*a6B ( pIX$КVNTa *W$iUI֨0$qc z EPdSVo"ՕN̥ghIIyy,i,ªdyǶ*%՞#A$,o2ދ5-gų+\'R 5(6xhEرrZޙ< +ڭۯn~\@~'4k-?儕9U.cgn~̑CLjQ)Y'?TIJ]Nȕ^̑.9}5ClyNCmZfs6\ĝ^[y=Ro||nO#yԎͱo:r,?|yOrNu܇?vyFXVG{<l["BM1rКxb(k0uJ)5W#Q@ 46x0m?U)!F(@5~@JaH'ʌ}uJ‰.PiA"|)*'erߐa IJ($BT5Wk %E6g j%ڴ\Cը QUfc>iϛaa0ΝfAGrէl~n%L}1Ž9WO;sލ_΍;Ԅ{L<~9=}L- ui sVrܼͽo[U_ϓdg=u|;>l==+E'>wS7팤>+~UûNHSpGv4?| qÐl:@>L ײK!bxā Gb6^!O*P;r'*P,ljj9"V|hRZLVf2vr=n[X8@qrD iYbAP/ *({< CG.'\ǐ]9";~80vWׯ>Gء-˥BgQB JhaAI/yD"YTGkD'r='>ε>D/MA5iUlwHOz@; F+({\AHlG˱ XZW^|1Q<Li-eS xqQ, 0-B*{;Vfn۩"p $|N8ŧy>,xb7ϧf\L 3QhܹH|뻻({TwCr< ـT!cG :%BFcJ+פiZyCA,%ijQ*QJx1k BP,<6Bl++ϔZ6A\(ar9b T>K7fPіE<JVg)!iCmuـ F|_!<>/Ï>E>@kIhPZK]"6ZK=+$H-0 cYߌɄ M4X8B*je}Dcg!GX&$_UI:DTbyF}EPtvQH>v-4ZkB$Rr$1 j"@+H]q{8P*9XB _Ȳz+qڂn@",_## DGm@ʀZ܄)˙PA+v3 00`TbGbt DBM ,te2oetѧasǁ7n daoaQgaFgaa fa30 cga30 `faL03 0x&a{< 0= fa30 cga30 hcKL˗bZӦMzw0!Y z 3g.]J,{ӧcwa&C\|9sy˲GzvwFs=ǬYvw1 è͟Yأ%/6V;r]ww0!0 cX%֬YC*@MM-&L`}c̘1;{~yr=9wrF~Vh)rءG'`ȣ8B< mmyHT%1I~In#^/񥫮|Vp_:߿;&1 f>},]e˖q \v|^xy=wvJ)RZk0_@k2s宻zCx3Ja-纑 ?†L{gl0oGɓ&5.B0X,;ޱaȣo_rΊ͓x)p{3vi{;VP6/@ PZ!ʱf6o~s6clw=W?寜vy8sa(oXp!NHgRФq)%B9sC[[ې:_j.+U$O=BN;tLʲKk Z[[Yf͐Wvܗ~8iƵԞEnj Ko1]ѿ?"_~Eq?Cʽ,lڴi577fw{~6W?!5.uǫ\St|_{ r{BnYIϜ_z8p_.W܇Exa^# fTX uQ|VWW<9gK,75!Oٮ8=ry-M_B \$&O%&/\(+|>O& LǑRNr$7ߋǒ{ܧ6ϟy$Ǧ?;b86˟ٓ5wɟ^~3}.y;tuc{N6N:גϐ f١lƾ`f6D˒[yA'l?qքkgRP|Ȇ57w31:t'&EZ ]D?~i5554|( ;mS;{9os^:9h'~?mtsF9jvNa V~|1:(R*YS>QnflO_u#l6Km`|v'8pZoG.:6-lԽxЇ-*Ǟ,؅#a~uϴePjftWڛ؝4L>]/0v1|} 7lٲ*s٢ض6.' C X,rضC"@̘1_V>o~i<-r. ֶxi~a^xC=tws'p IDATW^%͊kjj崏Zpkz7Qdƌ̟?d51cP]]SO?ɡmD1kMXd2ƍSO=IcS[2mOmm-555T*Hk^(k,REh2w\t8;V;2zNٗao]#N1r+m#迎ׄ6ydvNaSr87x;튛֜qC6?La۶Cٌ~tyaϿSNHӬz}w.Ə/)v[!Xp0!P0Zs{ǚ5kcfڵdsY8ON|[6-3eTwF΄ vQi P0B`6SLaʔ);Laas1 c1#Ma{< 0=ސ͌B{.O"t/.am uoV a;2 cgIhaZ3{rav9}.)aaԶ*Y۽l;0a1R˗/|s0 `fav;]Cu=883aը f=Wn#^/񥫮40 ml3(ԘJ# Z/?q]w70 MF534R(QaV tʃ 4owWʮ3wo! 0FWL+TQhF (B,D4jӢ̋~[`v7֚Z6m4kkk pj+vk 0FU3#@6y577yޛPmc9%[av7jfJ)r@@d2$x)%t\.G2m}?av 0Q"Ǐ0yBawo ߼}9.{w0 moT iA`vޔ kVGrkb0 l]3 W^yדdZ&vZds6%rzL;ke߆a@fF)E"q7DVU33{R.|~ݶ0 cQjkka̘1J%ŽfRfB)E1[4KYޔ-5 04jqǞ 7^ao_&0 1.0 0F30 cga57aL0 ㍚l??'}-c?.a5ayr^XoŶl97dah7jY)^Y cLVGWO?;}߱ZV0 ctU,S[S_X3O?{}ϝ&a͍`V,OO=YW_,z~0 E,53P6=V= ia` Y3 0m5l5$&LxKgaf* y]ea{έ,܀w{)ah5j@,ga{]~,EoxHG]~..a1`V(]d0FrCń.a1ʍcr`ҀֺZk=9M"S%vm7 0f6@Wc]W@AZFE_moLWW6aoQ6o#łU=LF#@r p،z~!Nٿf7 0޲FM0kC|8`˧ faz&}ғvw 0=ԨJ1 0aa30 mY]]1 0]sM0 ;#3 )m#)AQ~-\!4B{BDyb{ݿ}!D2JiHAB! A" @V),4!QH-mt#nwq-o@aΰY_RJ)ضCccJi $BRL&M<q&!5ZGu[%z" C7bYho)J)zzzJđEDZ BZ,BR)q\GXrZ! ( Ayd VH$ /a1:>r@{רatA8hDX`—hlldɒ]&N#%a… 9CFJ%,BJIXĶm?,JL0& T*EYt): HǍȗt-}bǾKx<Vd==ѸnܓN= IP2=MmT&ajïv-%  ,[%K^%Dgg''OaTU%<DZY5֮[).}˝_дSL!GY"MWԾFRڄO,vضXcJƏ=|>C藰\q(sxA vEz(3n<'@: '׼?a8@WmW ^/aXQ>X?0 c1`&$504m!J}hZPo}ZlY HB,ܔ*%++bʠV,42an#.DQ $*D"|ߧ q{k\4T2h 5o}) -Se /P}5PȾl*ja@qDPJaY.cƴկɓ7ڟQ+WͩUfL* k}Alu9_u9Y0 FP3+gږErUW89(K`&c "a\Dc|m ŀAp- ɱ{:U'GU$G>}k~߿/oo[n驦g# 0`tt_u=O ^R?9} C D6Z%0h.8141 t*C<@E{~[0<^r{kI.y8+;p} !gfWˊ<z3?&v=dvzm>xND*(S'-92 8eYeb&^#}0t&z K ؖC2qb(FRH~xa]sRm{-B*R^|lxɻΡh~uؘ$&'FG4OyD*D*hP!زboZBRN#; 1MmǸ-ofeMŐyIJ|e qβ,|Tt/8տyF2Bћaw-hjI߸mӻ ?.[Gǖ~>f8\R_a㭡6y6~se}93+|9/h8}ґ_w o`7>ƕY&].#_}Eh4OUDOTĭ՚f* 2edj6lȺu庱,rZ2SM+֒1Z^3ZN- Z5@65ǡӴ(twwىaj5|umZHZD+y^q߿|t1d^Vn9?5nf|#_}q뿼}lח'⯲1nw?,_ǽ_ӓx?o~G'#$^>xk Xݽce}9R/Q+Jy_8>W20"o/>w~6ORcL?Zٺ4S,̚2Pe5A<IJ ( AQk HH$PJjX,mHyjPA4ak@.ܺ_Xl~** AЬKYXgaq!ԙL)ޘ}/rݫ#vahlc|ok>BOp>k6$F/؞kf+t{3u;O~N !΢Ȭ}7[gw- #fIGݵCx!qK v1|y:R^om ?}So{6?.W~vu=3aLYˆMq\v\yկu%lr W\kZM0j }}b ^VS(,`YAQZ{TTaƥcK"'爫e !RJHCbYTd24uJ"JEbaDxԷwt{>[ʡ+޲:8}~w7Rg>LQ?=wǟh ⤟Of'Lco}=?>9 _MŦLќ Vl iͺظe^M^5߰!jPLNM09uz3߻yx0 VLOOSiZZyKsNj4$4HضXXX`qqrex]%OM>߉($ ,ɶs+o YAPu=7=ɹW{Jw|W~==c%\}{d:_ꄱ^'?7G[:?4ϿeEz9>>f:6}GuZx #/gV(9ƭu{?+ZFy8$ %ɑH&8}|J84LbN 6yֳCG5eGV,N8?W\2D͖1JDZQJQTb)%SI\C iHR)aJdU*TU&&!PT˰tuu!iv*|gzjR399N aoלpNmOߺxr^\3=WQ|F;n 6}1ߟq~9kyG7eW<^88ud|#5_qqI?^qorK~3tɋ?}-z[}׿U?_4럱?+[FynA} _`=SSSE/b㎟15=0, m(ZJa&3ӄaeYccG9thQP,)JiXbqlǡh2JAi4-FѴ8p?яK/m߰a7p=3C Ml0MrT@U6BwW/JGIZMPkCgw7]=dnvJk&$3 `Y8. IDAT0VxG< PJ144L\fff !$rDʔtCaXXJmuG\K/.Q9h4ܰ0DefF>JoBaI$ R,lӓ*9|˴jJb R 4bv={vQq:X\\`b(T )MX['b1Ze8eԓMuzU)ZIM-p 8nΣD>rX,aȶa~Ͼ=QIgndbb9 " `1v(|7mQo8664rj8X( IgRiFٵ1*"j3Ҷ-x<}Lr<BJ6nRh4ͅYt!$eM*hm4{)"H&S(F)A*@nzP޽G~ ]q50yl 2yg&e;, 6q&!5j>tÏϻ~rbqE,!czz)!LaebH|G6cٰ0R0tsNF908q&!ݟ0u]fg92zl^z>X, #m;(a0m\U#k܉X͛ř |>LgO7 U5;@&0L*2s3,LaY6x) (@G{t.MoE9F\Ȭ<0p)'EDxKZeffc'RH^gmz˲ZExö(U*ONpŗfzf?vٙ @љSVn,j;Xd2~)%cG0<~0\,`F'I,].R֬ɦh4 3ZS>Asw'Igrttq=aN֭[ݷ˲ɤdY>r?7"6]ĪUI&SO 3S(N{ ¦~6aaaFba g,86tDd"FRbaa)zY'R$) 4 0D!`Q.YX Ǹˀ4FYY.Z ($I &Jqם?ffrZY ` o@8t wLdúm\q5$i,ˢgjzr R!RJ<'#h4)r ui4!rrY055p,, ")$*0 ɉc;V eڍtw7f-՝I)[M 4PQ4^aJ  As>E*doL6KV0 '-i-T2430l',) P(=9F\UQСum= mHbN ǎ8a53+EyjL^ajaD30 -)%eTBaD2AU[63=Affg1 5ؿw'"[exp 1'F2DaH:aEL`q]NvhS $ߑ'et FY1}{F&&ƛIfS>:-7uR3 tS*׻,a6 Eߪ';xcG( ,.233RoԪeP ˊH&Stw_BjJ2i:*BcǨT*\vŕ:|SXZQh.pVnGc҂HQאRy5UQێK2\pt0Vh{fF0 JA*ddxɣ82+A=}(C LN#ymcZd{244L.<ljTD<oeuub< 睷/@h4O RV!LT!%JHB?@ P&)A $SW0_P#jI&aňbTU? 8 *F8IRXZĴmZX)QeJE(} "V!qx[09B"ri'r }FyؘYfYj:ab {D(ab1' ϣVs)  H$Y5bL̉<)~֒VTp]d2e] Jb;GPquz'MP >Lf>MJA*^7͂bH&! ζ a" H&SHÌFs!bcfR*,kc,ON2PhTT$1C.*Ed29l;X"B58 iґ뤿w'2Yʥd9 V"ffgc H2#<ל?Jyazj(P(L&CJyήT4Bf̎$=z K1FTF/zfuh4FўFh˳=L3C"ZDž8˹*4G}k+ Ҝq+g4W|}GwYtMuK+͟h4͹g,-5y[u. ڒ>m['L40-sdך0%uD()H̀l޳9j(@fS?Gh4&+6fTFedF%J"u\Қy~6M0:;Hvcn]%ڱD4m!$jDW'Kv`Iϼ #ErZT yЇh)5FsrVْR^?V@2ՌrߏW!ca@ 4"+J"dC4BTT}H80ǎQ2;G%kQ@=3F90IFlFD-s!Q3@Ȧ |%"|C "P*dITُ r44  ""TKRIV2-LDZK4N"m4B&gDҸiD#TJ-\ܼ‚F_#Dai$¨FqA69D HBɌp1j^`/Vire~AÊJAtb*1h4 4 J_skŀiD(P-MPB`leψfp)xүKj9Ch4yk3 zqƒJ1RƐ@b`XR "D80!PI$%!H("JzKfb#g )P!lKh4{fg?ml 8jb;8آ(J4=1iI]r9tv$}3CHD=R"0 (iS䎶ϸhyv:F8ӅԩuXǽ}I Yd% 5RCK@*{B ^XDHٚ>ضgx  -mHyVF'zVFh~u6$uNb3'ljE\=JgQ )D|s0k V>G"TdHMĞ,Roy1nŅ|pt~(j*緕>ֽĢ3F\|AdA+%(%1KioQ33C)Kת "/x3eGdeY˰|5P(Z׿cdDfq?P!ت%BRgFQԔU,s@43IJDuEďR5}+,c fI%Ҹ~9QҟȦ';Pıs)flnbf>IBE`;Xb.Bf34ٙ/i4ͅy0f(-DaF,8:7h*9,[WbY]w&cۉR^8ʃWBfbf&NaRaºOȝ{oG:&"uDnV,_vg}3F9/H塤^v}Ï8vIL=BƝ\#nZEojP6X TlIRWG?E/;߃k/]K\J4{|>~Lwy5YApEcGfz;;O{o~\6]\=i4ͅS7f-LK`ZmM9~'9\@:D{nv<}8juv 5L0}FUt6<܀lɇgJ>j[5E ^8C]T" e4֯'2%1ze>.2|\QW1LЦǰfnKΚ3'fHP q}nF? Lq PK^j6Dh}QToX{|{Ƨ^spk>>/~_{w}yUqL/= [VyNVm4>kJO7/z&O|lghƞ5f˥ƕGhz7&`&)]DTFwCL^N9`+_I3}Y äWPdHcUUb$fyHKHTCHdvzȉ8qi(Gō72,ʁEq}-yeaa[s^G~/x;+߽>6]B'l|frnw/sc r7?߼Wynbtrn:y8}|}h4'@_vE`+E$ZX7t%B-BJQ LRiA[+[`]qk]ߎyS&{N, aR}:a+ :;X|ӱrx2;Mob䏨uZ!P}|Oۧygah,Rؖgk<W}7iXvpzӌ£GB5C'Y/~57OW<`ݯԇF8aFD@DJB%i`2f7TN:F>+!̑ua=Hc-Rpٹ*J8Muaz4 E63OdFDaݤ29#B! |1xN?a$cJ2!MfUKT=I;<|wjEcWg,>'h,s,ٝɐ;w I^,sQ*8~wn?so7~kƒ4PĤF9ؘ-/OXBF`>4mI.aR`FSD mJB H{s8,ة|ұ~%,!0ߵ]cOP?xiR&a+>m?-Bn䉘{K>|[? =GwIo??̏>_ǽD$R{ c}oV>?OIMh%gf<rZ ?$QK"JxVAF@,Ih ,`TB!^O5QE~oz fxKHPςQQn[.eqO_}J!]0EԎT-ϬT4EK,-_;8;|oo+^ǎ}o{y5; 5/ )N1>>Btu e| x';j AL܇Tʕ;70W!ze>=ʁ Xe>38Cw}¦7 0KN&W7{HHLd#QaWQFh.\3;[ %VsckGHsUƫƩWelkуD*)HKqYo?W?Y(2Ȱ:cS[[gpe9&)Eطk}sӬ;6G9'$UҪ.ZٌMQpxFh.4ژUU+Ahx{8:EڎcD)k (!Xgz~:FA<$qjxl̦,}2S:u<@9Z]Zc evR{;$m_rIi)5hYe"Su,5Fs>8/B E(W=ՙ+>  bOՐn'#auI;zD@kڣw_Ih)^Y:Wy);~ HNJ@O88g朢9#*/.a[.`Y'x<zfY_cy}u{O}[{q+VČ8kPJ`%H F:)@b<Xl(a@X1nWZYAFY眱1G9>x<ziOx<;q=b񜖹U{x<)W]hcNxBQr 5rvex, cc 'X[9ҕ-eʶ/f,J ((i*|__cx<S̚-E q8lT VX!c9ub9-'Ǯ{5k r^{Z#x<EQQ7JrPFesXye0!dWHQ\!qqJ.4+=9Y.+3Ee ;DGx<51=Z>VRJ,!+' ' Wn_8 0\Sx<Sʚ m-4v\"~[Ne#xr[_&RpHkk5̥c=KRȜZDuJOv'|sMX %Vxi+{rY1(l0زg7jBbn`H8usnjܢtʺ0,jF7gXV%מ;-I8xR&>x<띵)PY\x /Vxދ_ ț~E;zK/}vmg_lvsj]ٿF[ù['iUQ6]p!|n&l2>4# \d!1iӔV:YB Q QvnJf8 uH0:-<dzX13ZCir ghF4-,baKYZSh[=/bCl|.GezJ ߶t~p˥9Di 02R#;$o5QI4rA>s[*&p"-LIJETkP4IgQΞu;vpjd;5=FclqKiqސy<wk2fhsfOIsE\s%y7/yty<\~l:$B(n\zյ|[:y+zanƽG1i K\pU8c:GH/9!c1 z 6ˑ:;ɉ[ؖDɀGZQȁyZVhSFc BJx=k^3 dnn4TA ȹW69J)Y8ܢ4jι[FC0~ǚ!kZۉ)3!Nj0;EY\!2U0ߐr1Xv # ۷$B;g]-,k-:ϱ)kB3X ,BW:W[$k󢀹LDՈN1?%kpVWE:ՅRPJULaNz\q6csˇBg t:9,c,ZAo֖"%V[H\LS0`/l”AYne!G%푆1 XĂ.3Β."6!%6g`̲Q[1˚9 8k/Lp`.-BRLzcx<띵 [zFH`i U6WΙL6N0Oɒo*oa3c;vR@8B4h3`MKH0SpvZ6R3O[ ~)' axV<OjW%F IYt$c6e2!ЁP d3fa %C`7w[Cö+_XE2YX!BRgePԀN0st<{rG:8["E_F!8~f][F%95D8Tkm` zLwΖ BEd" &{̹[t6ux;@uxa@ ΋711QIY_`ߞ6R*5.ßZuQpk{XU8wFyRЍ c)xk[3+4a# qƬ5te͢IgonC~t~ .EKj,_IG qd@K8uXaƒg7c5v"tq sE,W,UgYZ\;/g-eX)rn%kW ay%m9~CPBqq1V򰎩 yN*š6 IDATV YgXSU<*AJ,F$`Mb7ڕ( ~m YZ`-D$Q<|7@X! Qbjxfλ:v{(ڜaܭ $wܺk ֺ(c"~>mom~#E(R8p8%1ƒ^x;kl,PJ :*P).[ 3Hppx~]lug8W,  ^\R /b}YoY\R"oD0Ņ/zMذ ZRhi(ƒ4H$9:s3,VWrgHQdYJXօI JZ;X;ѸIu̧90!csrGd/b;qTLw읓DAĦ?Z^i秢;z ѹo40}X9Ǔ Żxe; >{J1G?OyLW?2zz&cE{(BdR lցe,^ j,˱6h#cSbhq 8,Ck <տ=:< ]΋5+,p@ɣX#QԢCNk\Oe[Y}2xOq;fw?y}3wÛ~-t.OozZ^i瘷g} #ןy_ofxgʵStso{~ǽ_ oǧ{Z1?voe<0G:_鞖s֬3h!BIVkNXkm!%@luAuoxhߵYVyguwj۲֝eWS"&/z>ufpgM3}Ay-<;aϰk( Knlx!;򜋷Q 6{57y'{// ?]T;ůV=Ždw[ǿw%t}.J\~c'gv|s)mo~VQQ^:>O}kyǫ:yޕs3SE)B+Ba Cws/?yDE 4Ȳn˾GՆCs06ڳG-M]f.0J*-;wsE8ԖMJ •QGtR(u0 CHg 5~c[?Ng}O.%}'7?:aTY?sG}[>|W c$Cbo?&?rOλ?|lPFp_O<nΏB3sG?y'q;O<=~b)W+~ e'\kv|^K_K_?*o>WZm<3Eowٳg`wx+ _&k1zD$zJP]7YV;?s|o3}N[9//k{8`:3+WXOyO;"5dsc-F(- UtY25>;gpknƗ_}Vs {Sj ^s r#;Wm/8A}\Vj睊dkC^'?0j#}͛7g>s.o<3c,A $E„1N90 O5Mo_klYj‹*o?|YW1_7/izUڳpqz\?e(wx~/1~C[8ay'w%<Ҙ_"3jjsYmc<3eMkf_l]^/! Q(jt88f]qE8W(f1W& C<'!nvX҆us vK/Ӄ?s{0[ǦT@Ji8>VL&^/%-[xohSSWI kqE4yB̤,ָq)IKC9i՚ 24PEW_^J*a QFb=sϞ9[- $UKYPJP!c8v3Z@@:2Y#@ʂi4+`x<Yj~!/zԓE* Isǐrt;n뿗 Rd9 &@:YD\Jlnȳ $)D7vXPiC{r`5S>S.d' Gnނ:MǏYzԐiÞIatd(8N=TZ0R%%C f8rkѹaI-`YsV8|0"D !JeR1T B1E9IR 0V+۩.5svaMOР;} }[Ŕ֭pm)؀Zcuـ0Q)Vj$:D"HZАъxG*ұmK-!&Yh#ꆭ1KMAKZJEz)%^41z JeXkv'y<g&c6}<'BC*q;E$p5&LkCR BAv1]͡{3zAHƆ,pե][!*)NPAkI H+wiM::!i#&]iWiɘ^P GFXʞg0A@zYL $BgV;ØBgqj:c EՌVˑ,̑i˕H.(9nm-bp:M%VWd{" tJYDd "a9[x::06ĚI,Q",zKqqf8G|&cla'*PhMIRTb$ RjRW@=7| C5E4Td0/6b8I% M$.%@ C³2:+r4Ht:mdC u0P8V:pVyx;k2f&0`qI# <+G"1>ahL@0n#k$(Kjx. ^&ž)["ИNْ6il+ R8GBXcCr`݀HvVc!0E,!r\HA(qF"gtzrx0d̴Ҟ9VZ[XAb EK¨wOac*$Ң׋HR΋f;ll 9z<#L; ln-6{ abM+r[%hIt{1VŘ9rmuґwt"#"EufdzY1Kzq k-ADY.L *a%%Y0;AIWaZ : 2aTc@"GB\zyHРKB): ӊ$14 )%tnšeƒ!|x=k2f b:)%Z6njJyEa|2X8n CJ̌*JU,-sٴRKbzYL5* D@:kI5R;S#RZ &A8Tf9+œ6dڝ$R tW1YVsC< MTP#DBIG&je RI0:8ṯuƦHYdqBK2  T((X+0Fa$ k!uhu8( (=Xi<dzY10Eo0 P@ Fcl ٱESg4 Izc aCj0&-|J%! >X{F-@ʀF#b|T2Tw8B:mKncQX Zh :iE[ ̡E 8*:^KRx<5"+:0(@6OThg@)ElLɴZA/1N3 KZݜ$h0F`Lѐd5ټ ɭR"ef%J8B(5H6A+^R)lE%1CPALkdGፙ|6|[|)CE -C QmݎӒ4ۖ4d#E]1:/K"ʬC[*}"Ƹ u𢔒mQ8 WAJ"k9DB J!T 'x<ϺgMƬ^})!J"V$K Q#΁6!<0~SZsvEr~h"%R8B4қ0zk!DJT Y7X$Bc יy<zgM3_ɚxVЁio1af;lc3(,F, IDAT3dtZP 5F[\ 8 telFp"(z; EcڱHњEX24ZG&pdΡDXRXB)SCRP-o@0ZVr@՜z2xؘ5NQ(u]z Dڐh*FZA5,3EnPB[$A En#iD9X1r$'Chk1F$"1 I  Csu$֒(r)X=q,I;E3 mj%mec]D`ĸ4REj dO ȍEÔZ jg-1#DS;$X )U;,`28N3,$RՅlC[C X[8V z<z挍YG #c0{s8ZGɱHHsz05892 'NzB2,͡,,8 5as)@SHQbN@jF )Ac@$٠x<3v9RFG9txDJ%&S^ՖC/I,-U PR %0l`8K.9 8'E@", #CPk0\jҁlON B:Hą[.6rM48ZAng,ڋ {<Ϻ=3)%՚`1푦!P2 zHi5b\ni9@!4JRӱ(.[8cڇrʠdh,Xh=(E[[wm; 2C;x<36fGRRr*Jä&iO#UkA/wB1(@8D!9KMECm1grzV @ɲXi^C:v!$\:U!K4^Z݌:, E @Y,'{<挍YQ:h,umw1=CJSD$'bD{wgWQ&|WUܵ= !db7FuCwQ^wGEg|QqmP@@DvY',Uqnwn/t9K?]u<5IDMR_KB`EujBӯ5ec=.%6(2u$'O =VNVFcF -V((%8*W]}qǙjNf0"*3HHt6e%)G,q&LeFCP6#rDqu:|L"1Z@`%ɥ5\]F\]&;@P. Tmd8J>龴% bc< Dk}FhwqgV9ڢ$_idƶС.]꓄! bzC+"D`x k d3u)0a5)_g=6(ܑD UW բSH,I9 +W*52%3,PzkJnM3ql&D@#2Zm(V[^JcB1X=6w)kK[K\c ֒V"+/Tk$ÎP 6vWXiJfbhZ{$9LC F' r*QDH2]BNHKf8YL(ICS=%F5a+tfȧ%#%"$VS1&D) +=ځk4VkR G5%m^J@=eW&=0[; O| aڳ&&dPZI~8,Ws2C(W SDZ3*tR dH:ڝ&W$$eR bNnVF"0WRI&DÆR&фHj`'MN9Z¢B qf +d|E^Jn'h #RR k @UoTX3IJSm"2I|)L0)ϴX&)g c&,)$Ief?"YEtdB1NY M&{8Us2LZ]]LkCcz}J'U5/)S-kc@K1)CI1[Do! dًV$2O*X\R (i H 88lVoi%[JSsi4ı%("m)I,%PH*PP tU S]VZ&f)jjV|gsD6%tt璕΄F` 1g6{jr&x×SLIqfg3Ɔ6䉈dzb$+?gYS!dlc,Bk)b-RII5{#100z{+bu`̈C ߓ3)J,bR]*cU6Nf4NVOrktR?!✎8ZÌVQ<#G E%աT:OBFtRC(c!Wq'/m-Zx$,Ⱦ k@DK'CBBN xR擒XaDh g@JXmAqg9yJ`uLKFRh9/f"2|~_l2|0[pB@CEcc#lڴ|]324HX^bmN,:xbc"oBVlذe+Vpylc4:E K&-au60<42@h+ήtff:'98ÃÔJ%/Z#Vʼ aF.[JKcS+,;l% :t6U8ez59L -&7ak |Ɩɯݍ7M;Oy߾S\Sm:Lw'ˁ_+?V2z_Ǚ^=3_)HT{8}h-BjCk'oz64T{K,,Xzk̓%KX&9Iq[o#cO*i6 22<}#ƐQO2~[{1A!%V"޳d"MW>`~OO{.'y毗/P7|~1G_x%w^7ӡ9{f! ϑ6XVܘ⨕ hm" JPMFFca5ؤ:[M|&FZXSk8&:hc0Zca{b̤V , c8iH$&3%%5:0(E^ :<FSfYr i/1o[~wS޷Wֳbr֔qy `}%&,O=8ށi_?6}_{Sk5ryh-ۧjGKK 7\1^pbZ[\^wRҞGe;YOϧ2mۦsp/b6qMjNfI_C8FY߇,^ZJBb'n=6 ԈLC)2qٓOFQ OL>W&KV )VUT+z$J3X1Q"`MRoj<)#j(!5#hKew*m\׶d/%!w<}9KOsLn[}YOC3?z[hlض| yǧ|!?%=wrk^?wsNsΙ>];.;޹='%^޼xS|lڶqLۆbMAm6o~w\]ٮaƴ( A93aV @IA%6PR;By Q]XSTg Z)H[Pr2g+7MӿOg/y8γY+M!"dS&k2>G I:]briZu)!ڠBQMFbM(TZZՌWMz[*BG H^z;)Ģܾ-dw!$ Z~;|S7?}{\y>vk_+8;sh v27}"?=n));L[粧$4V=>?q<*WM׎s\nپ~:I_u~NZ}#mH+'dѓWi h$@j!Fcdd'??_o5`rgiミ! pGNkƆ\])og})=_G )qtTW}I澴cOξ-w'Кs_c&κ8(MΙզ#6rDk[l3Kd<I4g)Zrw #B|:®f0%á1q2bHAyi6B1*4 ,v&Phj!!GdRĐTw3P4v--g]}2'Rޛ<^x>~ +>h;[{=Ǐ]u8Osʇ.nw{^›\hړS_QN}\6ڳ.g^ɴcOz7oi__~;zGS1+ gB^/#[[L{.cڵ>zzz8Shz VeLRJ&Ë$RQ"=d> d" %.Ck}Cѐw1W-cH)QiKLcW-a@Pe'/ 1嘑:PXPςEml\IY Gƈ<ٲ(E c ڢEKi./[\;3?!8k<ק?qbժUۗ-[ƹ瞻/KT'X }/^&=8&:XXOxG#﨧X)+)WbcҌ+`],=l>őq,9FEƇXrMm)R~mZRpDNP)YژStu5P-0ca s MY?L8sBɬѣ+L,Q\$;zRP/1)Cs>ϊHGG= -Wb^ؾo:1,좯7k^;[AR`lPL\!Bk7KS)dx$fq='222}o&]P.k>%g[h,^F4#I0T!ӜC3>ԇy_RdrƆ,:72j-9 c9f5'3ZҠ4t8,"Ij̧tL2BJqczPͭ-X|=}%YYfp1!ȇ,@гaIQqZҥMyx<2ZbhD.B#8#M}+!K\cÛ),7n}t<~!MksHQ F|;83jdҊTBH]}UQ6 ıE[Æ56bY# x~C9hqƋ<@?9ld,(Ġ}T*{KLOoul*ޒMk֭'sk8èGOylZ3n!$yl&,O{47d bRvFiomfo L18lVs2 RFGkP !4RĀAlr?&,QB>myr)(MM+d2ٱnJR~(m޾Ls|FQ)RBB@æ6RWWG&- J%un+FJT*#Yụo(1P{6Ú^R47ŖlsER-9wP畉 n b@/wsmyɋzbCA/?޶~s+}rP\:&#M0f2#J&cyh(3~ 醧Vqyz՜R4~I±QH@%AP& JġFǒ *D&> kWQ:N\P,4XpP 4ٴqȤi{(dxO@;x>^ù lQ( dа8sԜ0  w IDATE4N44ӳ-`ĖހJ%&/,#9)U, 9ZynJ!EhGt4*R(jZrb<-JeA@=B6983%`aJ#A@HRD5A9>FiO*)#XQD֢A *#ذ,XKkC0!$`P^k- & b$֎] ʃY^ǻn[iqgV9Yc"#Vu/kFS*c2$ȋ#0Xe,ĦR!&c<) jX-qbiCC0bʵR*c#=8oi1k#8 JxАW :d.Es0Jl+N>?q穪9EDQTcCF5Q<Š&X?Oϖ> uG[Iէ+D! diJ\mbl"ĐmP" +aظߝKB` &\>O]\#ېVRt6!F`ur[ȷ7F8 # äVHbONaX144h!H{]Oqyj_ U_Dzi a)& - ]!uњ184htfbCPJ6m5XT,&2?c1P r|ƣPcCOS 4e}|% ~^NJf9fF$ PB%$>c-(BO85'e|IOYDehhY-aT8'83M3knvCl8r98sKf8Μ7'Y]Eqg9n`|pqf9=5m0 lk<̹d&mPB K9lzkq,@r,yI|7g:]<~͆c'XwYv>s*Eq@Ys㛷o˜vf%* GVNzv"6y ٷlCz},Xk?f-[;3ѭWƹp/yg91㱸[f:$e?n7|᫻)%W~8qy -œĥGu{_qTe'p_<[3sIlgr}Oo&M|_t7dk_<}oq?_AS[{wxӶqbP~='O:>?m|{,! d&硖vυ|?~;bɱ.qݿڳȹkvɯk^~vڵv6FQlr3cXp}4_{܅׏Zk}B/8nͶ:wF:oۯ?Þ~wv<4lr+Lf]bRʞǬTfϟRlAЖ?tK-[ƽᢣ]oa^w+f`֑??;{o mi.t4h״8wo̲vZ{kf|s=Ωd֟c֎m3&oq۔BxZk ~` /%mE†])/n!ԴڱU_xc]=5Ӵ 5"c=kg\{17]p\{-ZթazrTqqL߹k\ ^q?ks^:ϯr~7;":^]۸6" FMxmhԞwߟ S{_D[sû^F~"gL>VB0*:v6Q̚1F<3JSF)@֯ k->BNMn FRf_wyY#7:?v[Ʒ?ȗ8~N%yO\Dt:S;{}<< 8/˅ga]2yK>-C9pk:'zJMm7oWKSo/2mwkxox_;c^ܘ+Xw},;qh^rmF|v7W;yߌij7L\/_? Ϸ7}=1mӍ'N)Q{^hm^tkO}~uΫlSFMn,^mdWjI{Mi[-VI[zOu.YkjTm(nξ.gk>_OT=yӵs6ZkcvZ_s1sv.73vIkΦӿ)?708se]ڵk'}GOOr K.}2<>T`wdO?u">}Ҳ<!fm'֭뮣UVMn_l{flɥXؐ~⍇w@DL4{.̙-\2@_CZZZh\Nx%_~sn޾˶7S/ݏ&疖:E6tXvo=?ηMrqT2☡{{1f毝 ѷu=<\>=sucmμ@J-/z2~8as>]q9N-T2[3X!XԜ%Mܳ}lC@x=se_KK |\t}7qe=+/gMy*qy `}%&,O=8ށ)}j|얤w̩O8f&M|߹{. /Aˎ櫿2}oqn"ڮGXعGm}ӒyPc|9hgsOKf YD*D{jN}t_EM---pxikmܶ_|tz5﫥}vi_==3sd39dy5=pDjXA*C˶!?%=/s(ﭙ|k޷7}=S}g8vq_{ _}B:볌U"*<~iiic;ZC/㽟.n%!<(C6n4^uޙcEW;|M!SW?X}yĵo$im회e8\q:~wK3=VR`O yGWi/=DEӼf6ڸ6,l-KIt{*۹1pαh) LkIiί1UĄi}SǻsOؗL[sMŬh<9lO6}L'_mM]p[tXn֏lN-;C["ه*]|\'[ J~I(i8V~p%ڼ/^i~%5'x17_^}ݼW3qGOe6 b{3ud[-Uv{|<ɟLe&0Y?Xd@ ytHcZ)@S3Vz>x>1}46M~=<λ+λ\=~l(>…9yw6U )=>Tq.Rn?b§a;OO~mbq׿Ħ?|ڸĝ?盪S9gyg]u Apw>Zߴ#6rDk~ޞ}5g*rqzp;P%+!-Y賸1y w|Ǝ?w׭<])}r_`b~t|3~kVNXYDN(WSp{^›\hzLgކ-P8mY1YN95 ->O\)71'4srGa6N?|GXՀ-5=o:}Um>5ř?p&)2һkzT};N-f5/ci?jx5Z3p㴯5C_?8tf]Ϭ9볠gK!e{SZڥL---h;d3/cee[w<ٙqz^Wndv-f]2h˧9 ':85qV.98sKf8Μ758^Np=3qgsqǙ\2sq<q9%3qgsqǙ\2sq<q9%3qgsqǙ\2sq<q9%3qgsqǙ\2sq<q9%3qgsqǙ\2sq<q9%3qgsqǙ\2sq<q9%3qgsqǙ\2sq<q9%3qgsqǙ\2sq<q9%3qg;`ݺu"qyҦLf]w݁qq&SN9@88Ӻ]3sq<q9%3qgΛul,]tpqiBm۶tϧnpǩٜHf۶mxAt(xto˗t(85 CJL'rq[L2sfs9gCpY+Y7ww}738Όo1z8)3a~9-!޽EUυȂiya 7ܴ_nj5%Cg=YٺD$"h=ݼj ٣څ\!0.#g3=~|=!_yh} O;G"3k d`pDao߳u:L233; !h:3۬T~wouuRqNTb ǯPis#%6WsnܩmyyyTTT8%!h+f3xcJ;q%6cKT-o+۾=^I裏1cٓvG!BUj \()9_JE݂oحނZ@PiV.Ygg +e 33F |{bcy3Q/22 v[ nMCYF6\VWSã#nWX-USfl ""ЄzЪdvW%e6 &5@lX˰YjQa^WO(Z~"yS7 J?-[0?߳;m ,h^, IDATx;OII 3o;֝ݓLe3Fg]فw_7u)ƬTo㤧LJtW)|[ƥFӊQUUժ#x">?"p0k-7Z[ZuXoHsSx×vᇑg Hl8ˏQoSQ4|a}.fK*ƒ?eaX=9 <8SI|ԌK<ʨQ7W&gf_fbʎZc/>:gb)f¬s7v)DfG` %0b6`rqVU\F'2觙,"跐qʏi jەsVO̒Be'JFf`4jR9m#4%KI+؛){IX(n z- &~:9mIl> sa p _}2,u|aWBɬMCѨlї1X cc)퉡j3;\}ͬ^;RY+{wV#򫇒gDEe?L r60W/{b{:7pK_ U^^NNNNB\k_3NjjpTjʪbFPrb2b5U9-vw/;)jR ݼ6#7DiXͩ6|ٮD.]',,qH^^1v8i42KMM K/oYn*-jn@O6 F"22ڗi+sK6ߧJC>[[=nLJɓ';-ϜkדV?4CHHLVǎCPAL<:NȠ}v>-pνB߃vl e:α\;R 6+IUGbbNY1f@ʪ60$=_[]5lM*y{w@\V&z6vO O=!O!σr>9;lO fB6FvA`Q&a2FD`2 , cO5|px'oZm(MMangujߔYtdO89۟As7~6<87xzF222NCR51S10G:uc|=gۗ {#e]Nw5'&ӻ}FݕpR?ƶ>ز6׭tsrN !Zb ~qFeo7/Rv揙cƊsؽxXOݝY|,9|ʯ7is.̸)܈jGpjkjJ3*ofIYM:޴=xe_ #OeX/iY<3XGdt.7p3n% a;c"}^o|ʢrv)!SfWt0U㹗nT뱚j(6}W&51 nE<0A`oq /?_cSsp o~j$b(WRKQ1ptxwA)1R̜\sB%VNj|aCph++Ҷ1, 3Vtk"vG_"raR?ܱ{K Ǫ-SBfttan&,%e,|VQQ{bwOIan1=8{-/h(~jvB-ڟ\AKUZfla":C~=-U֓&1$\2hZ1ǣ4Wcې xi32;y;%h^nn.AAAN\:Xx5֭|SJkLL5d:T׶~B;wA&M~ dmfd=p[`t6^dNf.gcg вylV_ltٖ;Dk7rl:ݿ5i'>퇿j-O8ۮ5LS.-+βkӫuN !)M-j1/X2wlhTS1󹉊팻_:{Pҕ?U[~91QN7z^'R70+G>ӢY?vǝN~8^{-n5e{S71w#'6 1Sq5|1LoϦ=ll@ss1B,^JَK/GG]o~ʔ]M3Ypmn[H5;!]-1::]\M>L|ZBΨ%S^gkbfB!::ǙYt@!DHNMB!:,1/ZIENDB`sonata-1.7.0/website/images/sonata7.png000066400000000000000000002401131377142014300200000ustar00rootroot00000000000000PNG  IHDR sRGB pHYsď-;tIME7"D:BtEXtCommentCreated with GIMPW IDATxw&Unӓ J0#uE D `M_ST$b )#A(i&~S{gh@̀P׼^S}[U{SNݪbx+ ####Y\)rFFFFF"Q沌"By²e˲eg}|I~]oS2Θ$r | ?#P(;_X?sS·3UCP(αlٲl[;FP8c']&ҝ#ޔW7;&4]v1OsRlo?%{XC2+12i9vp1&]yU]ճ^l,x>_^?KYַGp \O. Xq]w ۭ6 hoGܖ%~xOV#KRmOkn9v^L~{y) Oջw*?o-[v w8po\} C˱Ƕlٲ+lWl^y~M3>}&w,>ȕsGMޛ>teW]~ ?-gnkS6d;1M?&s4U&e\ǞV*5fe 9x|WM{ %c~r^zܗ e_WW =vwG/[mw=> }瘏l {}ouTmt ~]o|qþCvU]/9o~#zW%]~3/ŏVSnjW:54ؗ~bK*>RxI9;~'E=e{ڳvZrz~'S>̍ͅ{_$Tʷfabw^7/~pDKSL~o~і?\~7|~-_yW_X5sBāW?U.8Ǫ_v휪ǶGߝwҧ@,:ƽn͇u@?nn]|us/w$kO ;) '=du[$?ORucŏ$) ^y'r_ł_VIh&6W8aĸK܎x҅3"B d#-?v#9g"9O0gP';)ߚ m I&fۡ<=?Y_}iK +}moCώ_}/Rvo:|lyV}/O~ntmo\?}aSEmnΧld:1yj5yMe6˯9wud;;Fv/oҊ@!l3?zG&ޖ=e~;Vãk6űܿu_hؾvT\ڗ=ꧼn[O~w3w?awWEmS;|l_~ojC?No xw95=Z qRv>etbӚnV_m0CBΓ3M~4W ^z9 5M{[xtENЬVc{g-yy+ߔ=SVec y|叽}\'0s\kGm{#_9ԃ,t_t'.4;?ڵ;yY^nI6| 63'Apc_ wC{ū?IFvqѵk?Sgv2yݩ_͑6Nxț͇ +uֿGsY2Oo0. ϸswu-Wʥs~/FtwzYѕΎ2{1zҢNI?oް_w|u{]:wqjwG[cK| ~<7WY? C &GMܷ QΧ/ӮI6|;g^\^|/O~O}u甥3$w3.;~$R#m7;1cSO|8c8S'M 8∱3<H !]{Z8N!`R:紋'LM'EbKI.IiC;6']no=cm6ysEai+;G*I | 64NA$΅r]GImh( II^Ui+|Lpr q ǪM/~B>IIjKy؉OِČ}9FV HZDj#iv76l⮻;p|{k؟\:|l-2n' D6QXtކk9t7yv\=a7|R`8۬>Vm_N[|<̕ c`'}긾Nj`Wj4L6zz7`q[Ά7Xy6D4A1պQiBpBJ@ -2 CFۺHԃezrRl:-kuT7&"=~U YiZ lSU%-6E } ~lͫg޸qC<%MȄF0{~1(僜c^&d DtGŠZ4MwgJ)٭u6φ?!FvEu+<`0a"YJbc41 V\_(/\.13B<ԇuS fstZ9_x=L-&ndblI:Nu`hz+Jc%!4p3E~91jy'SZ<.̈́@*p 8'N,Y$ !PAb+ujH((bUAkRPir&8ŒB)q$lO )VUh.W\.Z(-q *!8aY 74kqJΪ룣Z!DwwwXP!r_q\cR}7%/\Zѱqszzz8ɥ? uuwwS4_VkW+o?Zv_5E6$IrqƘu4"Vաx_v]Z]z_oˁ#%/jse?|L>rskjxng!D)vR'/5T,zܹsKR| hŊG<ӦM+J1k@wOr3"Imx#jIfe+W藼]᯷޸.V3?oCw; `U˗^A)8٣_}74/}X(;cDT,ku]iI=[I_;7wMuZSt"Okx jJ : [؀1ᜤd-^0oހ#sinO֬( ]]SGZ6kFi'il <g\ |!\q7vsFkr܈q ` 91Eܵd^w(~gh ']a;OnyncA_DD6f^ذqE';s`z{>O[|s?l/tw{v/>zH1o1z}?#8'nVllT[! ;/ucμ30JMc8Ql&%Tߡ9!*3sG4!#+QmX2Rk [7Z`ux]lV5ݪ \ʙ,vv3Js& .HW IUxT\$^ %+Vտ6 =s̶ cn\v _W|Qc8!pށ֟ڍu=۩ ڎ׼5[nyv-%~jժ-[8hud~v֚\H45`7lhNwݳqHj,Y=^o^ڷ[d|})տX,͛7o/gΜ-c!uuJb, tN~jE6eZD ޞh d1fS[ИD&jōV(7F4޹}30))Nr846 |3ZZ6kr\QEqN4jf:TN_>fJ.n|JR"JL)!<. G R1>ENo˟~so~f6ծK~{͙3\NdLvYWF#?>=#O& o;$.W,Y]4c%Cf-NGoOw}'3Fkw4mUBZ^>5oܮ 8FF#ݳz0]upb'{/vg>ۊɚ5(ӦM3 ѦjK+h=5D0g~#.yPa!-e8cϚ)'hTj*oQK Mr1rra 5a-b,ahprJ7[He4#s:+Gs鬁@X*242ƙLHV Τzx~kȿ+q 8׫sz衧}JVAD\D||uȌc ڪmN!v_[` X/MUCqm72 go{O/)0&$pGGM+d Kv{aL_wb-=w=wN4_ow;&sڄ{ і/]s= ѺRmEaڤ6ZkHI^ʩdFOHt77'#һҵZqDDԱ ,$#4ږG7/0u\E[FyB \Hf~E2u>\ 8֘YUB1.+8W'JzӦ #Fl(f\+@2.I&p 2=a##`oo_;L`m$\ԛ8cJ WX&lH.#Qh]V쑱Tƚ? ;18vٵ}ycnlG]*ʀ @H IDAT:Mm.߻{ v4 7̥KlJ:bmuuң5t~}W|w}9qkmLDE1 m HJr%*&?`WCT@\O1 HJ T5rAM"jkS x|X9y7p*B^Eac̓+= y6\PIc0i|~U9O$*g1hVklgIx*ii3!sԩFX#2d\p9%4eE1K/>A&mgWw41 w-`&B< \'[πqڍ}9c!!gL qV_կAN ^_rw_~/n5Mܻ87×N[zG6 ZԷ;GZSx168^IvvtxrW<0ᧁ8csW>t6\c|t km!Ik ZLuJDFpzDT Ժ-a_'3<~o`!$h&Z;tw릡Atv) dɱam#1 -<\q01+.)=^7&ZRGr^d c( ˭+”Di Dp8H ) q?ZᏜS?x!;wμϞ闾e{=:}\|H'Iړ G9HZX!V)kRJ#}Wc..%/~h [o_`jB}8w]r5֑L'i똱d`=wU;%P.4?h5kaœ`ڜX|׎藼_BMCwߖcԬY-0 $Z])DFkpRʻVc9uHWr'ޮd-H2 "% 1J^t\EI3e]8ݜFl)iQM:&Ve΀<>G:c WFfӨQmU6׼Jqc41ĥբZiJsNmdzaDL&9[ "cl钃[믹>vuv… O_9~ [}in-'c 8^wy`Zk*m9~݉j<_םS&/~Kt֙o[S^ơuc%[O:N\08c%wv'潵Jnбpmw#k#=}Rv?Ɋ+6 \rjMμ3\K.ȷ[nP{0Fv0-BrIY& -&CÏYFceede4:%0I :r/@䖫QmAd {IPVNF$ՍVCUBp=a-jtjhsƅW*h8Q7P)FfbRSa,Roz׮]{y{_2Vg҃,Yzǝg?;Sv9bmg])wcdB1fjZp.m"qBB!j햟^W38}?%<;`HO>xBv uG|̆nnN}p=+wd϶~Ѿ|`E#9?wpqkǮ|NG2??7`{0swwYkgϞ}g|Mk8c=䰛oiC(uN ήmt7cd(9%\u=wU'c7u|Ky~G)3m9~mw)6S~տluF4::R"<#Z_O +OaN׮d-ABkXőK )ԊRSVr=!BO("6* 9yɅfS+NwOGw]7pIӝwc$D4mѨ9ڕ>Z7;y㦕#Cq;R%bAw֓AΑFaScO}f|q>?ޘy (-6Km;bc%=f9aFEWyiޔ])"Y$S\kh4F!nܴeRr3r.^Hx٘Z)@5t\UJcjRIX#$)(3%+%MdҖI =^ /X59L5Xŕbٰ5 ‚ $lrmwM#nNMɜu>vB2)ib] ^v]wh:ve&#Hj>@ 1Jm5SHpWH dmD\!j5.R F@v#qsni\#@Rp&5e`:J3ˤ3$pz*gjN:ԪrvS{9=f&dR3 |z`/wڶ7 "ZP@B'͡HۦM*( wfn3_QL7X/H(!c]fhǘrCh,'BmudR$"p`\s9jjQ>"֌r`FeLg@L 39~s~t+ iE#[k-2D , k-Ռd Lк_*yL*VzE7Fc5upWPir(֯^g#&h` HdM"'\Lc4ˀylENd3F˥He9dzq}5n~d݅}ۆ=4}4}CgEDNC-ܲDJ*&VrsΞJzĐZL[D/8`¥sV Znţjc ;IDL 1idFI !2`1ҵHʪN -L)> $6L!Fn,"xa4u8L*LִIꦨJLv1[96%HhNAF5+| M7oz ;:\r+x SE)JY4lw9$1y^L#R2 TANbHa6̙9!9㞨&BB4 r6 FH,Cklnn3qϽ c(iG{łCi-Pʑi%dSu^bmTY+N(Ё:Č$66p% FqGt]9ã)F8d1rFFޤ;DʖJ~ZP)5ZQb5HX. X 룵ca$Av1I7mjF cr4wrDh%B8NS[) 3n_CrB!cZ8\G( IZ \Iz*RӾ I" 2"{Q(KJ)%i@pˢhmxD'ٲfj c̝̈́- 3 ]"gddm1Xb˖-15#$!NyӕD 2i=cz!$iY01ˀa`D@HƦ! FcXMS=a3Y+%d iI+ kV6Iasr:\Q \тyb$ !Y4J"F@FF^Ȍ=)e188)RnAq(NU.O1LzzCyӦfSk㸾 -r9RR".dfQR&MFsFfW+jVtD ?Q*nr޾ΎD74I 3er26#O<OvyoTS<ŝ=c\T8cH7SZ@ @bzE:TQ@&WʗzViޘَ|ɋ+zAP@(W"qLUuA'jp$LNz^4ME R}0KOPhSDZL"M8η-/~1s }͡=$<+p4Msp 褤e:eL ,4naY=3O9J*N.斸#GG(l G]?fOeR)w8BݞҕJB fӞFnj:`2i3-}@)=M /O~DYf{\^g'ZuWZG;$kى[Zk}hM/8M|1V|kۨ)5?Wo4ۿ Ӛ*ٚVcߍ'BmҔaI\W `^y%<M` ( L=ŽV<88<#nY,:waVY> EA]Q QUb@EDL *"& JE2 aW]Ӈ9 $q<7tw9a}`{+u꺡Pml˔B)rׯڠF44 [a-B+5%T?=IJjt;tb* B<-*ذ-ci̍;JiMP2ړS{?zR`,Q_l͟$7w^MfϞ]aj6͗g͠>cڃ7_ٛ=u"pk;}b̤)?u >9K kȭ 3&=75Wɹk.'տ|5YerfS.f\X]w\݊ɛbX~YcEM~xNzgwR- iK]0ͶRsw)375 3w]j۩9Wui-t)kruѳ-KW&O(uׯ܆[pدs@nX!Nu?M>x60.>dro!i.v _k|"1GZiH3y]LBW@9ap\"O8Lߔ܅kVD3v0nT̈U:0K& Ӟ"!`4y/+VllܤYfMPxL1(LM dYF(k7ԁP 풖Z Wr~ڍJ/Gg{?{Z'_4uk?-][sT$wS9.O 85c$5MӷߤL&]UEyFO_m Ǽp+ T{fH#xCDG]w{ʮ ߖ\(J>G0WO5?rqq1/ +`DB)H IDAT\Ů] vZ^4Q(fq% Ō@(nڲiy sHO ꤧ7E^%zA+G_xdjӦMMc36O>rtm:k~\٧[L~T-W&ۺgmVS y{C&}4%ߵ%7>#{gy^Őeær е5K쒎;zL(ThTkEEaeN6QGuUaQaaXd[#ap(cFťMSKJ6 ^02B%֭[EZ+̖4S+۴iӧO<ڵ+h ӧOr\=ٳg2nENѿz wq^W:/v#Ըo+=?NopEsû 6cffGtsw0̶ L~V)UUՑ^ݎt =rH˯oЁQ/g_zQ)M5sXL{hcNj5>ɀ;v?~|^}~ZvmkoںAN468Xk` n:Rr ܍s#1ϋ9)YZTh~iZ-SҒHpۆ%u/R&!e JIn-l,S  2PJf 4n^0Q'x+zV IMӛy+2_G]^cdXfvSZ.>KzUzh4Z!2[J9EˮKn(;\T7, YuMbȠ%B4)i=/󷯿C4HM F"KJX Cniq\a&7h +3;`Ih,VR[P)/oS޶[J bsT %LHG9sHO={u['Hec-92x^7Ja6 { T-6TT-޶Ҭ`VzjzZ00 %Mij-fcJJPZ Nǽhi4q[m. IpHFyL;2L]tՎJh@h-T^pCaAZҰ SfVIݻOy'L;4d ]vGlvzƃco923uÇdKhbІdžpA:DHB0xB;*fU*ĸ9%N8^8-5 e! MSSi°BԐv]'QEQHBxJF)X@BP`KE3c ԖGݗ>?_O!{ۄWyT/`v)2U;A X#R ǀhb"\(& XvnsC<-.Ȧ!e+4J֭^Sa- KҘ) , iHbfIT, -, BFBdie) b2dd+hhfa)͎GKJ%n48.헭~i~ɸ)S_di|Bgu*q=Lrb}N O^ /.]Κ55nb ;ۯ(^UՅF\t3>e3*gfk6mj {qS?߿ύ2>:EB |`~o7w(+rJKv9djO2f+L&C[]{ݗc˓xi I3fUUG>4d@ 6d04]ѶDKZR!A.IM1Gh̅Ha"h`0X"HTLHlhVDH,5#  @٬B2j (J XŔ)- Ėt=ߙ7t;p UZU9OmGI>yKꨰ>{}<}vꚷ;4ٳ/59r ypAee﷗_~yɒ%¯̜-(<(uюG1r\/t2CCZ20,A̬XZ{.܂ m+_7v@RV, !cq0RBmfgDcѕˮ]nAiq8lz6$&6)!84Y0;T,m/=5ⲁ?iW ݒrkOȦi¦a ӒY "ӥ H)2&- Y2hH6D,@<oӀKW CIk@\KBŢh,# ڢ۲Mߔ+ ;k6o lAJ\0mkVtAJ @|;~^ߴ͑2L[JAb.Gp)ք!26@04,!LV%&J"X4$`*6K Af,K]!UT)y`JZ$ @,&ZiOiUжm't]cmܸqA215hP3202HDCD! @`&m)VL5iA D-"Y21'+ O%g )0 !$B ( X6@K4i}||EnժUVjFH X} P@eo%rH"ߴR1l߱r?||| E3y}ד+>>>>>"+>>>>>"+7ρNqqʕ+vl2--dY)bŊO峲>ЉbIglٲ&+Vh׮ߧ ,8X{Wͯue _BENߡe=׺:0sk֮5Z͏koO7mڸx@zzF&M:ꨜ~;v׫V^k9IM?yUرgqphß{WO?Hsׯ n޼wttA_|dN<;@[$Aȟ|I,1bDC'|rЋ28NMnY/"6wNǎge˖-_L YYYww^;˻ը'3<ЀK.s9k6żyF;cƌ[رwPd1cf_C_pk;k,_F";ռY>MӴ, x흽te͘1L|5k_|nݺ>yD_~1TH"+0E8ж^|5vk tz':{"0+?ߡQU7mEY\\T\Ri֥zi!bXv}6mS{Qom9|T_9X%y  1#vyN*݃YV7R{?4u qK͎gu|ϟ_ى1k[N1䖁YAX =w r)^syL x+ŋϿ-[B`JJa)))m-[7e ẮXpaE|̙mUz?^ k.]^i;_n)5ȋÎԯO,C$R=zSo~j{9a(1KM~iBHnl9!̌IIrj~?w䷿)pe:{!/YSF6'~_Y>ڦh䉍mNn7|O+yҥw|'.\f2`j*7ζ;jƻ+72wn]*IMڷyNΝ;ӧ"%:Siz>̪%yйu9u;F:6/MY{u{/8}]v}ӍNV#{I9]&ٳ"oNzo~B͉q%Fvچ9 ,N]r+\բ!W,ʬj g*$wc֙eU~nBו̓'4 y?6hc6~i!rRqc?/4gΜ=ď['###1-&-IPƨGfx6+xnnjGNq}Ǿ~M qNA=1s2+S+WiR*4Pf}3+XIUqJNN[3tΝ;WN۩^h+w}db}*}=v<|{~?gg^zSQ(*G3ytˋa`ߌ?8>˱n*-O<ҨXz{26l~?Fkop-*O>8k՝5tn!Eg&=5\LU5>:H_X"g8P.b Rt^feٞ!biiizzz.-{t/0FnHVmۄɮFmgmۍ7.WD"뺱Xlwl ^dZTgyRluUT;.[Dz 햺G3fw@׮$y['cj!'q2ҙ#*]qjg.w';HR֥o^yUYd&>ŵvtefNr\+ls;6lY|aWܴIM65mo5wK6mڵk׮G-y^(ښi=qjKg=8}Nn8m͇OI/[θ|h22듟wc~,a]~s{wn7ޭ{Je˖eddfWnݺ%KZni&4sVwsG︱58;U>]JC9'_ꌼSo}|̜Of.7>>γjSbs$3yʾ2N2lܸqh477uo߾͟?r>g7{y1k3vyUY|&>创98⊽""mzH)F;())9C-y֭sTs˲,Xжm۲FhtӦP8--Mar劕۴^믭۴ٸaC왳_?晕>$/:k@30sW^%g\~~3uv?8^x:ϟ_yo:HRQA#)EVVgG]{̓S0-iPNhp~ 7>>>>>"~Զʅ~Z#.\7BʯW:)&$##_~vg>>>>>R~eQaaa۶mk$ҲEU>>>>{h4kT5dg/rU篂>>>>u.\Z۶mWd 3/Zm۶d_}|||~F ֯_z||||[СCJ.))Z½#-%f5\H~~~u)W۳軥%.ir:s~(}^<17OOO ?dyzk21Ǎ׮] z}}Y]/̽7/icR4cC۵k7nܸ2&$/,ZHa4:~COySkrKRyIo:Onfv67>dSlSMbgO[<.MH$gqvcEv 2p @S[@Wذ`e7rC '_|&<{. D>jsW4Ecoy?ty/?}Vעrne:>ZM([黭Չrr Chn%=gS]{O{s~O )#ʧ hҾ;x%&G >>>ձxbfj#//oH+r2r 9?[?&'D{gCۭzpX#px]l9,h0S"רM0'oUlLTqmTpO)'&# Pgn/nN<@W:ڄLXWŖ3|||| {^B'N_} B[1q%-t崧5>g|F3|||| {]v~i0ԊÂylt^Aܣ`zνI: ɗ|h8I٦ 1ᶢfp$eL`ǎǏW=w̙3w>6mT).볳i薡3VG[ԇ)cӹ/^4nswg+CνftwA?>>>>>⩧ Wd03@ ULrK.9ʼ3ѮIv&bF~tG,;+/-'RC% cb.:#huX_>>"XP ԩSGiD`@@ÈL(Ҥ9~ 1EHg"bD*&&D-$dH,H3'CbA0 ЀDYbBd,k46AibRQ1+&E5 XM& JL`Z(iH+֚XiMJ)VRD;D"2Fd&&b&5J0Kd B@!la\t9x5kοDD(q&j `F$)b!%(>?bfd̂%#b'$( BfHDYhŀ0&]" @fņ RĈxD]fRXv<" I1iMD)qbhFhLFV֠ 4iBd3HI=y`P/$,ڷo6Łk]w QAwٯ Ą8Y c2(@H  Szr:^gE50I#v"#(&@"D֠SVD!@H @`@& FD(` dB" Z-4" 1qA@DPFԞL (R@Zk P D  D-Ah BC`EYTA0 !QH5ne*ҿV6k7xھ}ӟ|cXFe!=ۋ{h_̵Q eB[F G$N0" I aؠ2 ͠20J bȄ4#2kbRK& !$*X{D Ȅ2@$b&b1" IAH ׈PXL@@~ FD^V53iEZ)I D,n5!  I`42K@B"L]6*k_v@bٶ~Y;Lydߧbvfp AB 1!V@aF\QA [LN*+({iw#먵2cYьhV}7-;R7V584[34f: s*@̰J,Ep&P &,$1f!y@Ĭ 4Gz \F#O뒧sIW]xc= hK D Q -c R 44  Q#2&f"DHFL\AA0K͒2]S3]{ɹ'xr :mUd2۹-H|.Z1_7O/_NrO<lehgēOKjIK>3N9>1DsəJ'?zY|zY)|3gxbDxu߾} N;wu|ZLN?cELU36<-m ~j3bEg~ʙ<1㛲UYkEBO1.X]eϟ?9i_],];1Cog'F%x뎻-;T]?e/;S̟UV '.kw?hҿ5K_O^$%a  d Xqjf?pMsמީӃ;p>yoq'̼yZcYszl䀩g[g̖p•b#_CG{W]<$~ݤ%>>3ROgfKq@*WWĨ7W@Ҿcj֊~ej/7d9N%/G.( pC<@H@ 3!rX< 43Sb~x. @F@Ù@f$X*h ̔@t\QyPi3NqClf[)vTCL{BD E9NZh# kdfҚ i-4L`4!JHĨ$E3$֦01hBb ?D(0! 0Kv#y)e!^W{3iᦹêKxdhg;,fl]IܱeyLjPU*/eRN0SsROdž|mp:/|#Se<|}ƃϾY>"~z'V;ksԻieVdY/eFZ"LRQxn )#jX$ҐXk`GX#!np %$pK4# ̄)r5GX#h23JaS3E0:)A3GB ``ђ\4${.2ID5o#E>M&d–Gc,]@NCHn__"- 4N f :0 #iܧ?%O:<]Ogڭ~|qSgxgpCO<K ڠءs"m{jn7F*4+q;lՕ[0zێ..dAOKO!tk4xۆL_F|?rdF$laSe2$ F(+dѤP /!%X%g,ɪrowD!n2*ÓA1\Ayx P.zU8z~MwuאYykGduPU _N;Nd/V*=HmHLLDEJ)gdV1Uڼ>mW'-M1-] aJtt"6+_uW_qaQhJl:f9G <D2gJ 2jl g2~~&03AhJIYZPs@ Z\P82}-?8Ql~(Q`8ܜlcFWW_~)6Xw[0;E|G=xy| eW>1/z7c_y݋tl2}cy{/O3F>I3Ho{Oi\ywwϝK叻Ng*Ȉ d,DZ$jGfI-Skc;q%cVc#%POm/L}%̙lb'MG A`oI $dƀ` 5:̶9ionc7"T2ӕ<[[V=m4u< IDATi &"Qdk++뫣ȌlW-hx{ַxeh=uJZ/A;zn`4ABLvY(^>,Ƌˎ$h&%,|AW/\, ɓX2 fiJ`1LMAzQmyu { ? T!j]ǍY'Ty_qbQn񞙌ةADrW9爉(i9nl~r &w:\qh-2Dz 7Dcd^Dz*}a0(QƊtE;6Š aX)5@/̼Yg$Js]3'ۂ֎=;RܨrU4|[VOU(L љ]\ӮOo>&?vbii94M=?Xjbtk]KVV?fi77N*[ͭk+ptM7=v좃.<"E ;vU#O*pKȺY3fJP"BA)j %2m]eS#U%;IAЬ㫓ig`\-UndYQ}A Ṟ:JkRۉ -PnP%_Vsm6gG+k'7764]]S#5 lWAԎ=JEVa[umk3'K4xw˭7pEpE᫲((B>wn++腊QGI1 b0GBIQ Yu3ҒY3c"ǀjPf7iƢ4ߪ1Qw s{9. -(;?P9 zjybȫ)T 08C7kF kx6RIFrrPGI5*pN +8ChbaG|@zF>75SӾO!XF 2HOmQ#m {M]Zɴ֮-%Sm*^ؘ19&]Oyf9,&8湺9I<`sv\x5E1luc41VVYŔKe- M(PkiI 2SvU Mekk'&?mVM5)i$>,Y!fsZhx#w"*{k]˿w!kVٗ잸 Wwc_1s]'`(D_mP^zhx)t+Nh:KRRUS{6^yb$&2Cl#9NSә5kؙJB"C"P:6aAD@ U9޿o*.wYwd{syx nzuUK320m?(0-Ə^_\DΉ3)$ ޭ̌UY,g Ues:7 @7W^o/}tYŦM 7 /x4vEĝV?7Ul3#1Duhu;e' GnX@b0QLj>''Lֶڵ6Rt뤋E%:)Y&oʬ=U߰U_v]д4j CjxC`m7fNӍtaHlV$NR㢼v4|x jѬK՞]rtp޵Ō\b2l0:Sc^>6o̚ d* r9ى9 mA=W}?.~wzlY8}s_?{ȃ}O?܈߅zE͖au+u{b5'و2鴉Pxs#Nވތ't5~utx-v^?Uȟ~>oa<8s»>z ߵ | ZܩT !C(e@$J5N)$5uFcj6SU"""};TFS!&G1:Ix4d6PTLyoE1ۙȢi1+ I$ 6b1&QYQpC{W0y10"FWl vEj8ZeЪI5 QLá B,}RaȘbDĽӷr0ե=ūyx{ngby^,Diɥ+_\S/~'~Ӹb^x)C?Um}otq!K;N@om㿅] =^fҍ\sxΞ]G#/jUSrrZդH2#|ֶӘTP풩ro͡שrӬK*j*08v;b&,]'ӘVYgsN,>,,,;k@CUɳlmJXnxlfIS:sۆEV¹LTA9z.8+9x~Ac娘eo kJ gP3QU&aRV%17fLUspL9brzGy7ȟ-£~ .W^?{~y?`5O}\y)ZBVONŹ+gAlԟMGy9)-6"ism|;oٳ)v/vp3 Dn70cHR2L;N5)(9cgp)Ӭֺ.K r{3SP&V_."-e]Z^ ƀmo_8q|N!,8" f@L9aiaHnY(u׭%<$7(eS+GrbD3;FeΈ8 9"#\Tٚ">XSdZ֔ TXTٔ N "u&N tG٩4׷ߦGgw|EWSw7^}~__c: ?𭿁_ǰ9VPic𻷅p:鶹Fus;䳃/8|d}wFIњD51oNcYeM8;#gpαw`]K_uỵt+/-w{]{Cq{?>x9fuD9v˴cɱSnX^ߓrR0Q.[[զ>4MsrZGHLk)99tkPS#߁ODsz*.9 Xa(^gSo?9e> 7]kv^gOQw>/F>=L>kgT$Ay gYfʹI]$JpBdO@{9{x𡃻}.7qx7~+.C^ם^w|1.?_;~u ^r|}߀}<_}x߾Ʒ/y$ 5Wv ՟N֗^z-/]`|,ǣ9oe eg R(3 (Kf2D4gbY6e..sEf'ü'7t'>ݕCÖ`r׮+/eyDRn<:n4xU91Nv˄:lla_(f" HJQrT,F "J!T-[LȊ@xǞ-sΟ'#,3z6Q lү.Qռ{}`Yi ݒq9G2 S6921MYf s̥?tlz"vC.HIȔ̜luxq&k]Lm& L̛vmgsvMʩ#t5mm%qz&9Qfv7S6rU(s98"vll lL{A^@Df0"vcf 3862-wus;σ|=:ؙNPg$r H0"C[1!bxl"DN-d4mnt9ek-B}\?\bRJmL]66%EьبZ:+I9RN]M)X/JG΍E3D:Dbo<0.u)9$9)Rϓ6fI.9 æQB S9(}\( ["7mf, N!Ȉw#vf %.K}rތNp]xG[SՐn+^9XVCeWZf 5cH G`&bBbF)P,>WwIpe.6:Ύ|m6mR(Agځ;p'S|9tS7scǤLXNӛ?q+hsD#fǮ# F))Sf/-OBΜ3&˚ \vCI._t`&8@A\Y4m` Y3CQtqѺS&ՑCX `2&T1:h48*ba+90ܖ_F\󥙔OSn9/w;L#߱@6Tl4@a8b%|g)"i?pW^*f/JՁ䲋u6"ԶHI1L TҞݞt!;AlnKAW]3g rGbRL\0`*$b٨--I*|*)f 9ɁR+ N'5Hjr.*QpcKKmlJ;2k6B0Vsf Y|/ ޼የXǗ3S|SGdODwZOAt]liv-ܻsT*!Fm atW-/,eBjD#7bWGj|`A),$ ]17m6Vh07hڈY4&mzlkdc.eC5y*̎hIcug9v('dӨ* & :M%FNOLs)u= IDAT)7;- yʠ e vp{"1;KEpxMy<~SoO.H*oG|w]_yЃO~q?o~a\Pn.Z@MSߋ!ƻ:Cgeo;>(fwo^}:GSyx\o<ّ`db1dhk2L] >P(] nWn˳3??x~|`05\]0JSmںM+m`ͭnkb)%$OwkZ@)r1SET*CrL jXSD]٬i:hiN97 CSFrFu:ZsDʹQ|j9=D >ʉC6'(=zBr9 A}9`ދ.:hi23]̳v !(Di51pXjv~aP 9ivD9[& L:62#"8[[9:uxޗ*9kNxvAd%;|2jY 8&j80j:j,"ԉ“tk3NkܠK.$KJ3 Xr^BG -gWZ3),+9B&S&0̀99"+!]StKÞboƏ)JF5rw_(4P]-\!Ax71>_m @_6z2G/AB rcMDdL ",eP =@OD29ϋ CvNRM)ōX`$iSpɦI"[7M]lڦ('aU J4*0H 3ck1'qҮђfVȑϹt(s eڙw\H4qNB+i:VJ!xG5eD^]#seRfk}&U/ȩ0,95)8fu240Lip &5Ď)5׷'5/" O?=xܛ |3=C(Y8\y_; e9e{} vk|<>7 [>)v'k.p׳w{521̊V#jLl 1 E%ԵqV[mۮ^Y ]i1݉^siΚD4G&+1L"`.VU1ƜbQrSu)&I1Mj&Ms"V֚09jqY.8 XrcڦMb%fUU@ΒJRf،!ʳ&oM&y$PsLs}(JW ,dt.v\P_R(\(8(J%vqּUͯu}k\-8WwNgV[O5?y.GκS5}J$^}gT)cb<<;:l峿guGE/ < 0v2 3 Pf;9SL]zzbȱloN=xڵ(*"99ssKLvvM16]bNQS]ۦAPe`dj&\: ˰œ/.LΙ!Yc]mrۦmk["Pp8qmsmVcS* rpi($0_=`W0]H>wH3U_u4vMh|4dHUfTMs|ks1٘>E[lO3Ì:LE@ޕEiEJi";9d&@Ϥ=pUH6\.zȧn=kI5jq{h۲<뽏1\kyԩUej-@7x(I+b"B4@HԨ\GPD$\xGT9UXk~]CДb}sϵWk׿o4%$.`|D%[ɈYaT3)l֪`!IuJ Ɨ/al*U+Gս}&nPC܎ih6-+N2Z)jZ9zY 8EXBHjQ;/J"2cd%:*@̷g- 6[zJ) ˡݝQ&Q i@L a[T[bwLcfdQXK$,5P)s v&pi?jYԜ:G}1~eF PZ;lm )%υMɦU!NFd#"Jp͵I-ͦ"䏜KM0ODn0B]Gy.%6bdÍTVuzf4s= eC[a$j)Jpr!ӘU bQW )0!ps3sjmto,9Qp jAI!jraZnkq+V*!p($e\uܵg=l_q8?igΞ;o5R#ᄃăPfh257ު9`$Dpw8*1Yl+zŕ v w>:gSNU Ż=ڏA B2oirJ̬FJk \3(:XvSl[8ԋ0#2"!%UfU9ܽed'dL:[=LO ϛn]JYAhրFP ;T8z.p` @3q`\ͬE`^E~0+>C>ˡ~mm"nVMK;nm5Qp^f`4ڴ,K1EբXq3u Nj)3P, zQfbD0W3#.oBUjɡ0 F4LLP"a>ɧYuTRD*Sם[<~49VA*ęD>[~s ҏ3 RYTʕ"8Ģ.lusoCT20V&9 k_sZOFf /fZjB7rxujq]c:Ҋ&;f:frPIP`pvHm0Ds&v''8Ldtjfk 38YXD,dT , 3bGpUTg65(V" mw[0 5A RO[Y,Lfz1tm5"f&wM|ʰ^ j0R@DgNTVevv8C[ZZ.ERВRdm%4 ,+fUU*52T%l1`F"m1pBm>C ,A zD:p5q@\'7~ex0DpKXCDMD+{0ihl~((#Fql TKCqdD`1ث)'zw2"8\G953n|yͳ~mmg>)ϟy7^ߺ=ydlnnBj Kq @5p} !j^#Y:%g^-KvKM]H@iB^ "Ml U}}v{jD!PۯGHU7(G*DNdpUVٕ\=T@J,bA4婸yT\kpĽSݽkHաQM3?ͷ?ۿ]?ƙ׽]%?ٯxWYT cG~a'!@DАN%<Sy}pt' }׏ݯ WLߟigs~ZkO۟?kx͛Wm6M&)הTL}\w+@@C ٕz.uAw|otny^4f?E$ݨeך*b "N8sͷ^{ΜٝSn[V{u'7/:E8` 0a3ZɵuCxbSQpUtj΁?-$S+D S 0@j$D&X>]Y~-_~K??%?s'^ٷ_˯׼o\n> ^{뾸K:=o= Og<ζAVu?M_w;| x;o?{OEzҿo^,v8Ag{ 7ݟxm*4.@ ~w"pswg)b3ۺ= 3ypbNj0^0,M4#IԖqI 2gݬNᆮןibVV2Ln)F c9/n5t]-̷S $cf5qEԴ} y5܈b[4%@npMS̗k ;FWKl}"S)E&m 9Ak1y˿?yǟw9|Oz╕Oą{鎟/zWЏ?L;tokr/dzW_@}x+e"l#?*d6UdDj+M6x.J !!'^0->t-Z^al$21(fm#-"05"j^Lk8d7ޟ?K1^$cѾ ]p?sbq*CӔ^ f+Qb@ UHIR&2uS9 ()َt^56h&z`?p/|^O7/'_ŷ_z"w}w _?e}7mXsW_3unLd`]}a?v%G?y?^;{w?vr K؟~<;_ҟ~_z|kx=o7\oؔ j<{dw#Ӿ?9Wb{xt$"E"H W2uKaXA30'0Xr iڹR35ժ%[In8C_I dU$\u2p3K9޻y;;gΜ9}|ѦY1$;SNq1kI\kQ&Xa d YIin5^(PXQkƱ T@%31u=q]~kM5??gɿ'^eo~?K?- IDAThw=~} }eg~#?sk%?/>=K{gg)|r'a g<7U_g]^uVK@jIadA:̔FZJms.l9'~> 7ٛCG |r8\m:وbzqyt$|[JOJ}Sgcsc'v)kn=90w0$!TGdRkqe;ֱu\-yKrbC7hi +9+ju v{gh&fQ-Dg{QZJPH9E(-WQB6"$[z䰺!=dELŤ R`O #ev0s"ss%Kpa^q)c؛,r#q:E"Cc;0V-"jgwUwZ5܏($^d I)@;JLAX!1[ ֪j $23yyt514Ib!𼕛wNǭCt*+l(UB  ZXKռZl5)Ŝ95[Otl$[)@ Ui~n6jYDZ"C@Ӧ12w+IFN,x܄ nZs+&),;#JεVc&ѠpFyj"Q-R-d+ȈIԈ /M3%f!D9̊f5lQJ0wb^k_UDsvf, ! 'Qs }8ijМH .@ "sB 6xH~sd 浬/_NjA,lܒ 2϶Φvo͹X/ucV AdfeV%4 Ĝr:knbKA1y 7tG(HyBذャKGt퓥LG+!0;&77'&AT+nnlaH&"#jw4r1qEH5Ub!:Cf51DL`I /Cl➼Z=Gսݗ|J#H`bQ)*!\ ;{, qgLJ r1ƀ&q Y"P\+[oяYfwRUL54;^yW˺ס^) z#KOFQ'uv2Nޡ{U k3!3|Xlo;Xɋh:j^j}1kCjXZZ3j5W'1&)!DXo `@eаDnFjLÙ4GW^yÛZ"?ww`aX--BzDS; d=p8ۃ/Ӝw϶\ȇZfMa6o6%H]Cq;womTA0's$bhu?y`֩#F6Ѭ$&oCxͼ}ח.êP)2W Fj f$3/vf , Exꃇ:8\omÊB\Qk8033<LM@cƬ '*5OŠPeacR>YZ~\7!Z|H|/`w!<9A܃紝|;!8ۍq{noc^Tr]QmWMX֎HMIOy޼HxKAY딞*ݪ2!h:Yshɪa[|#?:fEȜI% UURՃc|aS*DSL5@S5 n4n%@N" P_1y?UGy{<^Io;Mg|֕s_o=^ݰl?*Yqg&1[MLsT NA!UyX-)Sdيu݋${mҒ,nBXˠ7x͏v$$jmu5 XSc6T5h͵%Uա& ߹e>__Z]ML(@kerbfbg[RVU]@,G \ȴ2kr2GrS&X`6͉x;<@ 0Cħ(S0G$?Kxӷ>˯y˫;?W5O76GxtJY7<wOWͯ|YX[\9$dFqbi]bA*XʫR* +1yqfvv&Ny.LUTEP}sigN]ߤ0Q Ҩh_:by4jAJW_a,y-Ur^ɧ88G9;wG'sb&A8/bؘj& afI")*<6)a4@Iګ!\cגJc"Lb!4&[ tڬz+DJ p"OR|ݯxٿv0{^}ozyy ([|rLX/=RAbզRfa/PCef3|A31̢ZMk_'𰇧33&Wtj R}Ivgq 2UΫ<+_ 6#?|zA" WU& 3Gig=Y"NL'8Dy9{Bl]RΪ$'ritj䍣5QczzuZحqЯ׃u4h+SgvΜmDn.",1Dx6M; Jr)c10 $s:n̫ap?<:tZ\\F0ڶmR!\̘l'Q_Zy _+w}~mo~~$CYD~֛^<y#݌l'"?:WK'$@M m 9pH!EIb8n휑xzgވșD"S!?w: »d\똻GC>>+I2Ku1U/nxXry苎kjCu.ݝY[ G!2(E ^nv LݫAzRM:HUǒ2,u\quow| KTmi^D"\Hy$@p'cwrsW_Zu?Ƿoy]GC^?W}sm\-7? 6ذ*j߯ $$aiDHIHąQ* 6mf0f"ӧ/wC6 `7*=3Nj0eUM1U;Э0yM @p"9 N+(EI!Bȣ23:szic^E*ͥ  Q@d9k LY=;?&lJ*2x/wÌIZBB'fDn, D ̊Kl滻EحϜ9:k9UrB^!6ʉeĎbEk5 X\hEq쬔nQue80z.&L!0@d4*  ,prQH[ }CV7fmΉ%qS/9)pKy PZġ\H f9y!Zټ DS|$D~`kqUG.^z$IAN`N.\M-L ն cV5b;ǾoCڝa]RR )"07Jv-AՆz˗/wV|wVb2c ˇ+@GFer8M9^jk5# M"Ap!g&TRM]q8~p;E}TQ M8t3R՜ Nl,QMܙ}3]#K)S @xb/'r"U@lDT=jX"X5A7yw}\9uRݪ2?go I" gK.1{ZjZ8z٭9êvev6fEp" DN^+[U]. g,$ r7D,12 třS0TRҪƉ9GP4'1EgϞ5+-XeL RO }#nnOQ .V+F\ɵ=WYsn:j#b;;=%\4~x|[> 5"Ib M.:o\ĪsuSTQFU fBV w]^hDR!2vzuwD Z͇C1U>Ĝ8D3wlսXLBpKȑ9}ͷ0K#lJΚbQf GPl\Ԉ>̞iuYUfε眯j,WMAOb+FEPy""Q0\ *J4(OD\0^k9Ƹ?֩+0K}Ώ}k^]cswl}8>ۏN>_n3|U1 d "4B4χ0GtP&gf'Z9(d5=9Mi\rq↩dW?p,{0½!͢xԵ&CI# ̙eSXSJ], V@aovxp)BLLs ePDX8kMf44 e2#VQg0HE5)(B.:^Ҏ{ZmB;Ssim/y[wwM_jϼ7}OylXd P;wn>Xf-s$8$ " 1 "<̹V=_9$Rƒh4\ja+/Aй,|n]goy{QN)c ꕁf!b!40,9&9If!̮!ZgOݬN@/t-zyu:fm]|>njBBCRN)A31vpO1HM?.EXJ+gY¡d'`F{|fʿzUc}w^—]s>˾{sUï}'<'W?g|;x>W_gޯy͋U gl}yc ->ȋ"q)n2QJ3p q@ٕJI]BNZb_HE"9-ݓð9_zi IDATމC]n}XOi'!QVd]ҰhptĦ2wHRL >w]|ɯOG'\?w/}7O>o_o^HQgW7\O~͏zk_׾Q7/y^W?w?Oxҋ>yK[ܯt9ٳwJX7Bc2f YΡ,iKb-E+Z0@: f6X83:npxpp5Aht; %]޵ڻgެ'ځA$I!!]TDHVL aL:{g6<"`:\. 6jZӺ!X)w5eeVҎ$Ic›m(*j$B1(i}YIZju2bδ"&;v\ł +4o ހ`/4k֜զC{5jF% nXm_(Iz3?t'/<(7{/(oHA'J?k?]Ox/'n%-:=ܵyysխQ9.8 ] v'ɍEaGh,4,vwO^2<1,ecô_g^HTXX0v"J-R$QRJ*YDH%'ꔳJnެqb j=u3gεs O[,=gGAB:˝nP(4߿@hZ=blKm4Nq}̀Y{3k?w̻W}׳^- lq/ݜ#!漳 Db99LqT P(#vGtVT(yb$E 9,wmˎ37|c%ܻ&?w?CZ>'^- lq֑vݍDxN &, 1<|.>#PHWdg]P[%p&ͪ0C;ӥ.g{|5W^ '2(eaM)QJ}2|3C;&5:UqsPNtj !ID,Lͧ8u}b":*V)!D f UR!0"*<,ɀf-b885 w ƶz->TӧO`oF^$k X sB922Z)q ,"&`"b&Lyw-n%|x xՏ]`V" ZcnzjU9 V $*#JU(-o=u, t{h "CE 0w>G> *n܄Yp ^f"kM`,jD; S .5Z\# DyGl8wϝ;f4y1P5F!-DQű= A v8D)sPmLJ'gjA9ñtUpu׼qbRILAIS]]ʭ4h@-+ 8UWzmnAD H rfe:ʲo{gdggMY݉Gf[o}@l~PI9.X*W6iE<& f7"Dp9UDTfQh-ȳ|O#=-[54ckhf!Jlك,(@Ѳ.vlЧE-jD` @'Ѽ9IDnBPozM7?x7]<{'՜w[>ݚkRGAdj7EVa" "\kڦkr9Nf(pjk7#O]Sǜh-7|ٳ8Lăjν1QxDXkh)阻q1pp@5u{oǀjqF6psk64jhf@sr?"2惴=o"zj]mō-IսYvC #y^ =UeEt%bMkS^ (̅њ x9BD ZE6L&P1VBDL2+.W\2m+Q!Q䑈 {r6બLRWvbah -`BQatb!#9mZmŌFdL;!E@1gwq{辅zZvL}-vƶv2aagsG +#)Nz5v=w9q}M{%ծ;0X+щ1ɂ6wV-u٩URZ)0; 中hDD0UOfQtܩnXtɉB3ERBNsݞ.(Ej3?3돝~a  7wshɜ.f/_)x[/$<ϱ07=u 3b_ٛyd4pnC!\=ĜQ3E8SGЇ1:H4t=ÈDkӴDS^;;Eqkrp3 t}u~8wCEz9kRuL 1 b[@8h f 2|\O̙S47W`,f8R┒j'". bq<uժcs' EyE5Qry=xq㻵%{9-Ϩ 32 wx @1̽͢6D bn Qn6{qs y@`EVLy-=jzx~\~ǝ*"%nIO;N.aR" g6&F37NšYV"^'< ->OwOo{,8?h_3|Q߃# |th{9O_]?W'?x?M |Kqf:p-Z.<؃Q-#07PkLq'\x AGU_$hʉeeZֈck[AU(iK Ϝ}_r>qba,T-PXTZi4U+.m(DzjG| "J ԋG)'f;a&"ќ3ag"n:eaȃ`,  0ၷQO=L}xgOנc/3bjqxxx4 B:VK[Oe3yNVh͢)ll)z}眝ؤK]EE<'H,2u§w~6NjLer>u.>syPURBLci>ڬT8gIId.JH3RDrJ]~Xr ]dm6qVe͢Y )Q:bE'p}e9q%yA͸V)bN,9/ B_7?u\_~1ը72vW-~Uxk?3{ȽCK?~Շ,^/{6װ(_>7ᚿoBg1\k^ٍ=8N؜KK9t099{4CkG5g'Bqx/S?x}VJ9IFGh`ó׼!Ы?+Y> r&jԜsmN81f}R`Hn+\9ORRrʚQ<֪7 V*I%I$Sx t;e Nh nE{y 8F(.Z|S|_UX~-.}~E'-p0 6>rE_%X> -Kϸ  w~yx*ns|)߀=w{n}@5@@bDpc!5lkRٝ,f-6J}ɴcV+ ("adAîO]חxՏ>qUY21Sxd*^ X4jNʵE$ ED8"BXHjNTWi`6l6R5wI;wCgͣuNY,O9q吗k>tF7!T 5/W=cw(wVi'~˫+탶xş?t7_~⎣|+𵯸Tw~K/}m~.d齀O~ 􀻞p-̤DBA1`sj@ \4$@g;}zŶ|w|"2 7kPrb' D#nJo/0S*-+N)jR8(`5sQҼe}x{oNW_y٣RW#"[2n=kϪӥXs<}Rq*F!ĪN nb nWsgt{z9}ah†>Gucp5Z5f-)TWm&Bm-~׾KqŃve]3iZΞ;}׾=}׍70MU%A`aUϒS&a֬DД45gHD8w)4"B\e>4 2tR1 IDATNFthZZ]{ V2a}(yT6Pbj132%4f#PżX9" :4ف@#"h'q]ǩߙd,nAsA]JADFñg?p-o|ݰ ӷtͧ͌!DJTEU벪~!ZF7xsNYUAssNI-)3!j)eڔjW**)0skͦ1CQDEIps~7 rِ m~##Y(KjMܹjZ@9‰̳GD8]1`p56{K9>p9OQ4)f͍5Y2!q6۬l4YaV" 0R\y7~6u,UI) AԈH7 Dh6\ĜAp'3 5b2# V,SBMɣ!)@RSʩLԦM4BbjafaFh;E``'&"r &r Hb 4-1kZuJs$ABI0IѢ2DBШ #[soМzRL62E0Ԉ%Y#$PP,DDD, ʹt䱕ًH&fEDBmTEUUUyZڢ97]\ WFx%āf1V=)5i3)fF3&K JPxdݫG;7` nt qԠ)y{K",R8 &Z+m7#Q1a`դj7/0z,rD,df]jAIDAirQͦRiS᪁*iNXR"p8PCRևf܈u;{;'.Z,-fՉan%Ubș>70P "fj ` Uq(:RSA[|̪pD "ќc4E7"Z\=#!fn|bl86c"/)| s -zRtyhy}>fFމ2n +7pqvY)0k_oǎM5C@mm:<QV}Kʤ6Sݯ^h?vw˝~X Iztu@s4r56{tf=ȝə . 3DZb[0;,T̮`EP%#RDc6j07j0D5pW}O1|$)FFšU׵X6]> O!ɚfha`"$"wyvwN^ku:` ۯ݂RT b~8uRJ .G^kܹ)0oddn14e#vޢnXVY',^[lqbdw͚L4rbOAƩF"eԁR(FPAP &hNN1TIu2XbX,HB56 a5" L$ƃJu4223A"#?8)433Q2k7hpʕäJ≤ߏed$<H222R D(&Sac[j?|A_~M NZ6Gc"&g_/[<(-df_|BlZ5m%je+..hgSXjiqi>-*).YWZ_AICr9:2@I4$ aef$ډ"j֪ZX@ YDAr$bDDc V6)f2$ ä,eJk b-k MjZ:p?,+)-d,+5WnמK,).QPZڠNXQ@ k֪]gmяB~:MQRR0*$V@&aĜټQA l%=lh5/ ʀ 32-sd'K} '_bkW)!P\Z{dljd$bMհ^ &9TmHv8vܢY рIaCuDd`@U"@-a UT*!e+`X=f߰o{JLLlLYfe"ƈZ ŖP@T/M)K߰ ѨQLu>ݪ^+--]vN m*S'a5iS^{[iF 5_~NΆDiV{mߘaf=4cu4*(NB~ JEA$mn ZrjXq-4,KQȉ& kWdiƍL2\.?SuNB9:uX]=eˊJ -1Ƈd0ݼ mZ$,B Y(f$hb{b x DIBC CQ EPTJ%EBK0J?̬V000VE~9|K Ȱ`ѳK,^@}[$Ba\^zu|%AtZ `5[U;b}_o9;K/|z{}3[ys+:]#r#t:gܘ#8̟jٷ^F2Ҳ~Ve5 -Oshq>pyK\3w vsNm,xiC>&3!TY?vcoֻǯ}'y٥KALIDAT =rEOGS7b=ܡS_.fqIL 8GO8s+?ay̒,U_^oJJVY|vu9J~*'zvy.?_+?ݯo =:uqѤDf2DzᡧХc^'y瓟W¹׏ݭKnG]?jyCU &=j fOGNyNޅ[j)77WTFrTCӪ$Ru )1) (;|^Hl|k12T;~wt̟?vmm 5EO6"J!}Gڢ4g|[5|+6VYaS.zoK6o|qо>_)[vNdw3|pݩuRG-寲xN7MQM3%}9?;r沍2];o7M_ɧ1#lƈ>O(i7M3gŦx|9W*&uUӴƆT,koTԣӈ7V.7߿2*+w@ϟ_H_}VW_}bݻoG>[77&*%;;ea|I#O/:~WzI<^-mߥbDyG )L8EkU}}ogċ+}=ۛLlzsuXcTup^z5:U.ƅN/p % ٪GN#XE몦im)R ʡ>罪{wU}yHim%F'yTYw葷7ŗ%Aǟ_೒^GRA)[^wjYa<@TŊJsT?n?fk'=ӯۣūlQ';1dyw4K߯4mfjp{dIg?:b4zfi ~]/vIO/Z ۪ʺҘ֖"ؐZ-/v#.1<%e_btRG7#0WgN,o){+yQŷcFNɻf_['+VazN<{Kf5^wШKU˱c͚+0%бb\~m0ٹN @#/s: פ[{dg=d70ٵL} &==eydG[͟FmnHU :Xuubu7U٢2:c*wO.>q'n]IX;F}r+f-^Q$Xݧ3\e1hmi"̬Z~ɺ%nYa[{ɟ_*UrΌs;6k=Ĕ(L& W<8qJ>#ҷUc zgKY$}G7$GH/p4ԻI,L& W>8O-ض5TCip7,l=#gz9/4:dئ;gu{o:}νz` /]SҠAgv_Dmpm j5l3`RF~eInGæ.jO+1O+sm?.sj,q]3o;e [8bʝ3?:9G9ۦ8MzzrgHp8Gvqc{zu28=r>.]ÇV;9o?6;opn<1eE)oRep8vGV)'lyN)/0?u<~o13J?oϽnMNñ?zɧޡ}h[>i*^Ŕу{ٹC\tp˙fa?G$n7KҰU߲xs]zɨ]ˏW*Ju'ԵE)^j&CĪwz ]:vu™w>iy*8XiM5jbnu4̞<{V܅ڷ{׼cNo?]9O֧*Rɛ[*.VT¹׏ݭKnG]?j?yN"< o^qؗlʰLģ\3m9{]17,e ;>?D k_U\J=͟6K???uP6y{xFz*VvSZubV)o\џzi yϿ>w?N9c|;SYB}OV+*mԡ_{ygh_(v /GV5{_ofknsu~scRⰣ:SPƗt<>/Wa]O]vKaZlQn.3$ ;jHU`W/ZUe/3(a}F,}לڵ{{SYMow68k,tSofSu4XM5j:UvaAL/Nnn(QNk׮ݏ b +m9%T4ՊJ;+[JظSUV[TL; [nXn݂ *޽ , :nĹ$בe?T+~tPv7߳ZVU12gDv1_;uqǘ~,^e͎OλY~l~YK{&MWgaɃ`j7ըU'k G\0]*51Z_$SYB}OՊJ4l_˷Z lkL&krz&)z?eQŷcFNɻf_['+VazN<{Kf5^wШ 2U˱c͚+0%бb\~m#/s: פ[{dg=PvSZc-*JF,*^ceVV>(Lv-S^־QzShX\`[\].>q'n]IX;F_pŬ+7ktՃ,<--[$]+/Yd #k Lv/p˂c/sKjؾ_Ι1sΗ}vܦ~m+8e۪ _=%Xf^>(EWX#z<顕d'ptKK5Vf5muoDe=a5 >(RnɃ^\`݇#rANyzMRϹWͧνgS'^隒?+8z$מ7 n[UPa^gF@z0-kWHvkv==6uYmV{ZZ9kOuӷUcy؁_,+lSL/@9rvSiefc 3{FOޛT3ˬd Uʬ?:9G9Fg\9ah' 7Wce:v:{f͊|'g]9 m5Nl|)s,XpG?Ν;G%=  ''wUÆ ۥZHrՍw°}Ԍ K^}kC%8v^ܶm۟~m;x_pw5#{]r9A;qHgg f9r_7>#Gd#ֻrϸ3.w5b]v̙3gN:W񯺎ccN P~w ;#H4TTvɎe{b?t__2ٝkmsdWMv؏Pgwycsߦx<^sO*{dxuׁ_]%NjX|#ιfK\z۴=}\9b̅oZZŻs7K*<ϯJ?)Y:tS|ՏgϞMjܲ-3MKj Sjëة kkĽ r?~c[UJXi{o٧j~,?m;hz_yEW]o?00Gn~3S. ͞z#m(okrJZsv7 Go~􈫧M/;-}9/ӷ%?]3>yLsss(YxZ5OmoϫժOV4Lţ-+1vERa;?x<ȳ{7I&$65W <瘆ٱXvJ_yu6f]r\8z?/m< q}ʄ6<o Ciwo_o3~|@g87t/yǂϾ*3T4LР;V9~Rzݳ 'nyzë:֎=;El'mO ?ɂ~84~]'bEuW-"6};^;C}3A7T9g]CtP珜tM"\vx嶧g6;a}o`YB*k>P3O2Ue 9 <+N1h64yYB,2o}`,[]}srӹ}K\qUOTLE rI*^*ո%DA}OyɅĠ^%Q_^56n3nnbV-~j"<5^vˎ(Z^-{:ErZ2/t}^Eiph (/g앾-3˒@P8}%z^|cy _i2!W~m>d9ɈA6Aٴ9b|lM{-L<>ǠҿJ1j&IJU|L4U4~ZvN*۱R?6ZgSj]Ie]~_27d[T rna|㛏ϬW9O}jM.Nm֖$%k5q)گ}澴8׽tC+xӢڠWfmeS:4wkd s敧Y~Ǘ6%=zt7?N7x6NyVoµ=3+Iw'>;˘M?R&9Su?l)X}jOϺ!7K*-5M?ͣYO/]Wj797n:vŊZ2=w\>gG|^]u3:}qf&=On//cHnS88Yϩ{IN*}<{f=8jM;n"M-+2s|bcFO*- y+..Ih}SZ1^{vc_rg$}ɕo̸ߡlk?\3i,c;+\6l.rzap?:KO8`v  ̙C=$d*՛ی|~, @RbɽRa (VyiD0nTTTlWVV~!  WK5d[+:A?G[^hʪ*jHm nӚˢbCM-)KeM6#íM'twz\JOJSW]ECK*X%Aa~75Oլo쾬iK[ N&4\Kn^{Y[J,l,SNj`'aH+&r"6#ӧgVnuxykKNR\>$/͝Ewרzn<^Yq.6Z^pJ!Du Tfu*v[~r>Ғ#sw.?w%hbXa K] r#4&Q 'yINܰdvow6n)?;.ك H!G5)¼͉$(@k&,+uMخ"'?uT 3ɯK)/̥vP'(+PU]KqY9*be|i;E ~yҍvS{s%h6FrMyjJ rz/u^zhhjn^˖8Z32jqshq "fBzؒמɮC_1yWW1}tx=uM%7ld$#UgV l+ˠ[5ژk\"rdJ%s9ɔD9䓉Drej̽3!B԰ipMg24WaґlV )at{XMءxiMڳ΢:كƥg^s-Q|=Z9M3Ko:1s_}sṀgfI9ȱ/h~+v%jFDpdO˛g]qG_?Ჳ`Egٷ[^HYaOzapUgs~ԩSdsUZܷ;j.- x}_MW4yW^N soVP4`~{<>֍޺3_Z#.cgNm_\JnQ5՛7גp]k"VlʥX}˸?)Ɔ|wGZ=ݍCoI+tw݅is/σߢͯeCW9mG:mjo. U]ob_NDr Zĸ)?C=/Z(U/%_oBgs/-0u jz 0`J ;PdH}7`kIゝY~[RU?,N_qtf*EBÑb߿?y/??}GCaF#~vѼt?=nws fE+7n' [ŚthJuk䂓(f-IHKc-9 9l5 rٛJ6lhf>n!i.ɚ{,{YhgO7qUTTd'z9_.<wݞ @/bԀ 6 fWsܑ6,_NδSrw Eq[0/Ɲgr5,cGL{}W3%:uj `pl!X* y+,fSB-,~Àn^KOMpX[dU3&s_F! Q9Ԯ^'^6q KAe9iT_PHH]J$ZH+ptcqz9L;1WCLQK_;+o9-;yЗJqkf+߸Z G (TWݰTi3+f|"GZio$m+"^X)]cu FUK\% PHe"wdvMBri E@i!D|b(Ck"UHRv"+^khq Bax<$B, 1M`FȐ~͐aHV5RNw~t=|ƾ*0LP(!RHi ѤS 6lB)Qx^0-B" R$btHP=& VAkPhzUac]iXb^3/H Pnhd W2f: Az `DVeD_jmKJ8c:p4T.m{}h%PJc>Q7K E)d+p)%0PY9.]LBF#Fz*@H49L~ =bw21?R6mv"JbY)RH!h[s%(=&-EfGS$-٨DJePv:.xQJm8J{})[S @UUY1z)yBu{>Kc+^nm@F=YߣOhzSSj; ͯ7TF1b|a p4| l( n vfbJHOUuV!Y9zKU}J)yT>%w}3@Hiu@^^DJo!BV_Eo;25f3lk#"Yr;c{=UOrc¿D@l4rKն=aQ1qOi_-B#1F0WibqB!zL>TWWaRVVF~~~RSSC(_~lO$F)))٪ڰa]n㔕n:U Buu5MMM~_,}b"rb"&ڵk(..iZ\4M*** H/x꡾e˖#^d+}$L4}[Ш(Q^Aoߡ#)95N\o!kZR0Al‰W~¿aZضM4iJ_Ȇ ;I&D".gNNysYt)r&Jmm-fʕ+8cZZZxx+\q)++Tj.)-'^M1LvS_E^G_:^|%Ǝäv4TŒWg0aƌCIIIv;뺬Yp/9lSbI//Amm-6'wCVkjUlꕯّS|-E0tl : FiT(,$:S$I..bΧR:֮]˿_7\fϞ]Xh!/xGqQlJJxrF{ٻzaRqSvz9瞙Q7i?=eY[tb'rRiVZA4p!3j( )-]B2܏o~SXXu4+_\˹'5_uR[l3EwGec &m& gyX["er_\~RMoXQFA0uݎWx_A9c@ s=Ӿ<O|z_PP@mm-D+VڄD[RmePYyQoה*FAJP(B!M)EDQr:gf Wv틉DjcoϾ> .D=r4JO`Yhj;sSS555|0{fKƈ8+hmiWr^}>9dj ~6%Y~7y_k֮ w0x>?b.eYnfky?{᠃b )--%䓊Ҋd2}L)fȰ#Av+tJr$?⩿IAزxu%yH^3<{t/k݌P~<z0k{g]Ky{nw\aww}Yl6מ{ߔ)̚=kS*/)ɾaȾ~`~BWʶlҸG$:Fw.\+æGTmVN 'K/AعNKT:x2H^;@ eZE^_&}6#Ǝʯs__@)x=/|'7jN}$ ,XgmnӍ4/abDJwߠ"Rb q߯˻vifPA 0Ncm>xF/04DTje~݉Q8S°a:d8 8h]|VC,l1,u5 j۾8X'lFiEYZeTxe=nlOBQh%DEI2pM8&Lv],-$*E#LQL⾗s)DcqGJ\ ȎĶx3و-&־:LL%I=}^OOsZ҈iөZoo-cƌeqco2fRq:Nw/ۻ7˦S1  V1^-R^}1w&ٟ^@bਉ|02bGE*bᢅ3yd2R v"9\H\VUPߜ0lc6TkJh1!FRS4͐שB!B)/`Gfʮi pE4J+T+O=W/dcTJ;ԯtk*_zOh^# Pě)J D$MvO{Fkw Qh3뚖ՆX,"8tvmOڒ *;}ݹ0-f/0:)1 Wc>vؔٿ#̸y^N`Ctc$R2LR9c8Cx@LDkMmqnNz 9whըƱmkimKuضc~޺2%Eyaִ0}[T7o輚RiVXGsϔ2,֌'P٥I^SY?#_9JjhmIzTHڒ)RV-$S ix$.t3RLu,t1M UT_+^!;Beׯbبq<~M^GN<؛Yf/ hnJ׿GjHe{E-ijlcժ#ymr1 I*W/b@kXr5b&L3g,j֯!0z]?xg֊&Ƙ{`(-d[9~ XJCS-FՆ֭!/gҤMkϱޗHKΟ|=\bt*_z8Ø-#Ne;lX_Oˮ=AѮ}ne.LD{Jp*v5i[Q5%p߮)q!0Yz%sW0h` K[H5 ,_V`ZIdἏFxH࡬)KIg_ƺ2OR>xGfBCc=EŞ0Bԯ@v4惷^ &DZxˉRÆfDzYծxgBid{)-Os͒>a$mT[+8)+sᇢјRf=`R.b>\rE{yLuE`ݸk8#j`AHlR LFPfeBV#dJ?y3خ;c_uG+A  q]~qG‹# o6˓ri3 '@l2wTgֹx?s7'n~hSQ YWCeY1t:E-A*fLTDB{)''jBPZ1{ʚ>]\vͭ||-[er 9|T] S[SÁ}k?ǂfnrRA >z~KPX6_ IȲ~Q^^Ƈ--`bq4`"uOXt >P[O[-ͭW*0Lf:e8hllF=_^^{ͯu3eMgw`Sbmab^q^uIpޤCxwWص[UwMϕFww\6)'H茢"N? v>S*%1l@mӐGKЖvyH!Xo1Zi-`兩sX`舝~a ߞ~>a%ڥ~ZK?%/dCz&%e(W2->C 8_n E -a];?2`0%7?B~A!Uz*[U+WQ[ȢO#4 9#C~q ~KY~iIZk0rK,~i=܋w߃gs;nl "f3rkSNmL~Qb)JmL wx8 7fx<}|S..u0yC}e.H$(-)elr$mwc!&-8su)jWcǍgEZ ?05|cȺ5H$ᛙ$:'_;GQq9Z+e(Ώ||p >GwFuLQH0Kw}%H4h D)pɤ0yP ˡj*D]aǠq7I,'FQq,N6OSk(ckY^^v ֚#Gr 7/0zMȷe)‹ϳNc 1o dü{ZarsXz Ma (..kNڤ@4#іf!)~ENN']R")R)ϔ{"69u݌Vn4׮'֌ V 1@(v)))aRxILe|e$Ӽ3c¦ɤ=`'p8D8WF KC]=%%yTWգEQI)^o!5KQI53fnPVҊ 2A 2!$~JgОo9Z{ aZ&;onr-FJGGH$‰'|n)%%mg@JI(?|mlz^='ZE"?5H1 ů+228{iii4~WĨlRx ^y j!8HYd%eg哊0q s?{BUVQ#TWUR?0FI/.9Sԙxa|x<ʺuu`Xb5 8¯6q̟;Φڒirٕ4C 6‹ Q!CЮx9/\(RhlP҅qsm_qcb/}:. m:ly૎l@kJ4p}L?Gah\`}"ml;łysYb5s e(0(AqY?Nh-u 2ܚĴ"L|i ,[IBs5K>]UK4x,؃Lv@L'ty|Y/f2f( Ca>E E(&DG#bqSR^BǾFJ'drQHp_E(R @ǀ3)e6BJɄ2xla/btiaYa 3̬?6)eB +NSJ C4Ѭ>|8yLâD4b%Z<&UkB9#F#:KpaG#ڡ!Gvj=0iXJN'?q$R9fAN9 % ²%0g}c=ȭOV/-}p~knr!DjgHRA,xKmZaXa=5v#H;e=n B#Dm2xAn{2q)hGW%GJ! D+@zZ@^Py{GżOFhK#''H8̼aq2yDu I] 3 ! 9^h4mfRzf%K*WVĸ) VAhBD~IM?_a]}5O<ė= @r ø+ '%hŐN9뢕^ߦ0l[F"^ڠ΄Ҹ$v:I* E 1^Ui/tmfr䕣f(~IUi!!7vE(<n2ڵw60,|j @ģzu|EV ڤ$Z"rp--R6H4Cg'=/Q0dލkQNj>kD\Z[$[kA ;rxJG F"ɒEXr-Tn $iRm (Aex7/vGnd5\Ø1c7PG%>v? x=|8HJcPʑg3ffhy?8A.GIkhx#ӎD0tikYt8 OӪ4 z\vO.obź~9:nh+0,kij5A2I,\zZ/ָDFkKhP qFR" Ë`!= *BaoLaPuH$T5KbhE$j YDca,2L sɏ璗[J(\!cQ\\aXAMM- :M3b` 6P50(:)֭]Ccs \qr-_ rn1V~t4C%8GtJ3jfwŽ:Ψo91E+i;Nԫ1GL>kYv6pӫ/JdwOyWc5L@p*ߋ#K"tZS9Oc(F!ROښ0 ;p \ƶ`W98H0LqYdop8JU(,WODD" ii#p!E6> Jba#SUbhnl߀A5[r豔gaZjG8JdjƏMss#V!^ 7kCo"Hc}~g,WM˴?gA>д^k>?9\s35$ۮo<&00@ݎ>-r!|(^/8j`e `!FŨ9o4J)dE&'+C:T )\4t RT ˔B61LT2UB d2A2D„CV+$lY0>^Ʉ9\wc $ڮ£o{G~楙r?D *8;póM:!hb'qmIE Wbzĉvm=x]woÿ{ʩ<ʮ㟪;%@ (l# 0@ ;a_eMv2AGYDY 4HB!['^w'tgl#{NnUUFUu«j@mNM"aF1*fX0! g (DE$Ӡ֘ I4B<# s=n a4ގrDy'l<Pbs{$ ifѢE|bJv:;(Եʐa B<)yq_ /{GPIDATX2vX}ўϜ9_&"E*LT*N&;8F'Uu(C8ux5em>|'V kA}jF ) 0$"q8Yku5=DUO8qR&jU"pyKzAcwf=3jiijs]Q6A ̘7Fwډl5e˗m`2 {mwܹJjq O9:4"Ec 1=L0ɪ$ *a5Ba(C.!@!@kQQjLʄM)@"52Rr5b$ O='ZZxY'[ɶ gΜ jB"s_JJPVQH_N1E)aOJ)Y;e˖$OFc NaLTe kdibK48'$NR)S."r(BRB(TR1"RBkMTGtKKe:(V"1qincCYpBmƇ%Wgyik3`B:0CJdUlzmL4f~&&8njCח}{} xu BFcccuy>Rzfa5ơhVH)PJ'jLV.S480VaJ$Ruw{ZUsy,[N 4R8#eĈ-,ۜ'K7 C9dֻsb.#J-\fÆa=/Qg5yHb록$X+Eg=M63 x66gڠzosѝ}_/;@fU]I4=r̞ ~Cs~gro4nL{=C%.Ϸfxq/_z8l&>WŴ2h׵Q#Hc"se ZRrc$ s$RʞЫ:H!0VU@[GRQR=)jE0 րq 8a$.(mVKP_ȑfedY^}Eo9vutm!MxVTIWgqȮn&/ $yil3ZQYaJ ZL b <~q<N>pZ29^&=_t8:g?gIï.nK1yI\vkfֳlc7y"'c3p aܸqL݁c+zq՜tDnxxV/F\O֤us5NmO;W"[ߺz0nbn_Ib~j'ixގ\x+ڽK-~_@cvζkoAxmSiK|?nŰ\߱9P,-ןtmQ{!)-mUG enQwݎw뤮bFa`I{,HC䐌0A {cl#"Xk=FcEgW7Jn2,L t*"~"y%]%tmqבQi{Io:LNvu399B/iSڐA*״#"U"dU0YjeP:qt+{XSUl;j et?rWs+\WNG9fC[<0栃ȾlA;Σ@}]=s.@ o3?AUMO? ٖٯ{2x/?%w 9.{ʇhĞu!۟u-Oy=w.Moyٌ?`>UcsMhngӏN:=OӲ=eK rkG\r^iumXs<[͉~UG^5gU++ArYENqesS1LHwwN,`שo)L'0eaU˯,Hg2O9mID܇=g:ss{r)oqMz:c8zIk=F*OBrȉ xIQ9rrҞ1W?fs63.tZunJ8~nV(?`s9?{,gUU'A쿪fZِeʖu 4姝LEُ\;mW4~74S8ؾf Gr9WW};v, \rJ/i8N|7<]Jt '8*ZK6 p9g.^Ub@}*\a&d3< @za{~߹c78g,tY~;+οilRH`MLTHĭϓ$*8,T]DrՔD8 B,F+r)rD yKeP/`"!eg$4s֑dPa<8Ρt{ٳgckpֲ]yofIzׂ'/9&=3Ed0dؓ˾wzwcǎ 9+ӷPtn~ڜZHm'OP1ZtvuV[1m]]MMMc& YNCcuuA@Wwk JU(Kt._NCcJX!--dt*hPZQ,1A"tTJTJ%Ѷc] |aX<)=vu$A.fQ %C7>a͛Tö$ɱXJUHbУX," cve\Xag5eTtw搞GlQZ MBU&ka&DA\Zk:JaUtvt[hT>%˩T" 䉧=Fb䈭I6V n;DSc m~P=ȶw~:RH $A-DqzkPq-%9bm)ι`‘oL«&ZEX(|#c؈aaHa0C 3kjL 3!^}- j BLTx,x>Ͻ<o/|njM\9s9 8!' 38b7s)RHb:0ȰEk&L.syx"Y9em4a(kZ4̑ 4BC3<kBӯRHUHO!"2ua$!)$.*[k1# DCkv٣A'(W*A@xTCE'iiq46ק#+E)> q|p--yف։֡ 6I2H5HVzRDXx8g!RzHc)<urIޤTW ѸR&"pBbM"|L"HH 1 q@--| $ݕrr8XpA J"EOcUl;n!cGXm + CIeIN’ CX1Rz$! "lkb)0.'A $ՔGaF# !&{Ơ 'pXhLFՓ~P(Q*.Ʉ!aG+g?ttH"ſc}zj)RH?Vy3xUIENDB`sonata-1.7.0/website/images/sonata9.png000066400000000000000000001211151377142014300200020ustar00rootroot00000000000000PNG  IHDR}Ko pHYsutIME4vtEXtCommentCreated with GIMPW IDATxYm[ZF;\9KU XVqd`KyQP#Br(BKFJCb Ccݭf37(o뉙b93^)Mm(MMB[PQ0 Ơa1ƦiJps;Nf Oe.2JZ c&Rȅa892/V9Lm ZuoK9;D@CϘ+(apX"!i8CN%uW\ٙ-6k}cVr%f)kqywX0@"jEZSmX"(rZɕZ&V+3̜4!frZ*F̺VR$gR;rc^eN@ JTUH+14JF`zlQJMX5JԂ1l78C \ЕL&dQhuO1csvu  ZVBkmAZD3dVkDa:[F-Z#.|UBi\(%O+^6k"E (p#`1 >|y@(r(VRz$(1մJ1e9{-xRTCƑAU=Wg,m#8ke>**rS'V(P+UF)R ΣrȬ:b&O^I< ~ho6 F9Pn* z9qOkhVJe haf959fZeI V!0Bgr38CJVh8gЂVX k;g;.Pi3VH6h(Eߑ Z-Q*EpК sZi\J%4LV 1XG)8iǑІ~nn~U)2N(3! `,%Bh(D4 yuJo >"+ސ5@J"f B5!k,UQ쵓H마61MKy!RA J@c,ƅ'B:R"D~J{DlAr=mO URLƚdmP0/  ڨ4 OѺ>v0MFmTrJ8w'uByA7ITT>y[b$WDI(Rd0-rvc./7քyi{!Tf rKrd?\O=mlzF_+%|thUO* DlTa ^ANݰZ]c D.޳quŗ|ܦ88W|0)b4CIBm󉬻G \]Ѡ$BZDLF;Gu`DjFh !rJm0GDюznCY8.DMB; Q!fJfpqA)X"BɴJ@*RbimRFr"%ZO҃Q"EجqcF+FY9I%TJDIuRkuq+B̈"WĠ,N(!$bBNc8Ԛ8CƍV+"7%D40%B*, yӎ!J1NQ4h{TcYȉKúeC`^3c<}qS3F֨Z9;kjXKLF>݌ rlWu}w=pyf?Wc Zc oX<( y!.I^FY.^Z 9Ue"6N4h\mWEg= p#d[Z' g OhRTadD d]61ct7֠І\ُbŚGgCK>'UYw|m%.Xxte>iHĪTЎ%2E^|2I= -G͑Rh#9,\S3k}="FUɢI:;1q{s:o\nK;b=%3c< K gG6kF'9o am=$1_|8sv)LԮDjzSH7qM_z+Tz٬0 'LD/y#7F.(3ӌXw!{hĈ=0ψljXA\cȕrB Ƴmkf>)ējᐪHsg% ox)C'bfۣ;_!t-dDsu؂'^Z _uaK<ʶNOY~ 1C QVsee!%8Ktv% ^(f8Ј6'Ӟ0=Q 4akKɈe5-cXf"w3RW)/|~1Qq"K~l3mr"VfY{ :@ -aSu*4ƹN Ky{V["XMo\g>V SD $TcTM)BJ'( 2-h=ӈR-ӎifag؀LX82PFQ2M(U( ߑ21{n4BD)30r%ZK:EUC*L3ZCcP܀<-vaXlPR J]QQvo7d@HGJ'7G)r`) ;Pi 0rr kyhC+%.hOAs(nN55Nxh5o19ӭ q>aɊ] ak״X}'HׁfN۬jzP%>4Y|vM.ZYXJ&)UG*TŰ;eAݚVۣ`l=E<+grb(Gx|_r{!t9b{*3 lVPiy")q{_u-3S{B"T oQ"y9%gRY`c jM + `<Z5ms&WLSvH2^m3^pu!F1@n {IX !*pgu =!0fY"<xl{cZŠu{ȕpKL Vp'Uv#\P=sEyta D0خ2b-! b K02 H#xaІ{JqT/6<-F,tJS-,ׯ&yTV k0 coey&(wLT;";TOl !c=4ʁRqBО=92R&wΏ ~w._ǟ־| S*(#NGHI$r53&Dpa4Ԧ kzZFBʪfxH1Ma )bAPn hggO1\lM|b4]ə;Y$GS302tA,p{K3QPs=)S`zT!AmhKoQ0< jcf9&K֧Ćq[_:ѥ>Ts4Z YDJSug\Q kjyE˳˫b?RUMY'籶RJ29eYR*czlvXOAkٮ]'Jd yZ[ͯh9%e +߹֊1R==l˷JJr.9뽵VZ˾s&ڨ}NB*b&dZ!%Z$:يTӌmw׎EraX_.G^4SlBJYf:C㯑bl5ӄhELWe֬;% c)`;#"dUD qG穅i~A\jƮtkZw߷}zݪqFUJi[// 6{` U(%y|YJ))%tiZu@lxK٘MsN_mWx{m/nl=%"f7?Ͳrs-MX׬m*뜱Zkq:-x ŪTEnuZ)1-JL5./ vX2׿vϓ+R:z--K'+)F;BOA\sB;LiLx*IpaذD+xs}PѭlXut=7L\D0ed="'w4RBN6`<޽à:S4jFZeeM~TN=;W3㵴Ku{צ?*MICP:R7êZUoTmfHʩu`T:ެ~z~|=yr9vtΟ[5tr&r8 m841bjمR*Fc{;:EkX͗~ LL )*9LXMa-#JR V-JjmD*,#;}1R.cEkƣ QT.V􎒩yvk7V~G ZaNбU?~Yv,aKiV[HTZBjLJ)Hfv_be7!P2"FzJaIXJScawmSVKUI- q9V~z0U*-UZ6RRy$8g(rۋH+5 N"4(Q#hqO=<NI[²[ aOz11զcMֵ-VfpYcl3|pz}o'o?窿[_t=}᛾c_1͗py|7^-oJn^ۏHY}+RFc(?dwy^= mVk[9_%L<ݞ-? œ mډㅧ8L1l Xw]2R!'.#0MZQ+2ĂR)G;B sBbaN kr!dфia?z!F6=Dg6k \ACw2giOP ]z+R[K8 Vg(Z -˭foٺ8ZEkmV)9'b*}WSW:y/05!u.夔6ڔZKN[닋͋/M5Ua?\i 8sJkES:\];o;mu6/EN\˿}of_ǃUO|~}_=?G_7}۱[G=iw?u))1ͷV<e)RhiȕQshK*( SwlSA֨Xoٺ~ x@+g: ĜoaFkmۅqAkV!S5M#(;XƲ̧ҹsWwwlCI cJVCG,eE GbtM+Z&X1[*cVL6RSiYu۵߬Tr͵sJ)"hDw1IDΕw&b̳&b㧏߫juF+N]b;#] 1ɴAHIolsl{Y{4!W>/_(oS>HeOԞO| _:??Ǐ?~U۾鋽VG~!'?#޲$~On~gݲm+~⧀_o~ͷvn'la3psB+LBJ(8곲:ä$ юGJۏ4R)KkwtVϱ8*SE4vztc8;ZiӼEb`ɼz(jV80y 1Ao$K DwhvCU,HlV؍̊β,-%7tg;feY;ta0 3>2%B!e'7wARb.To6/tvdEmuшcJ)tIV2/8QEDb,")K8DDQ)I)w8kVC{Ҫ}}R*wƮ~=XWJ4^^xrޗޫcJlֶ8%\~Wó__YO_90oZZ?jw 1@{) +@@_w?1s+_?6߲Wd{bĮ{/z mMq֊핻cٔxu7X!c\s{ v&j)VhLa{h4a됆84!m`,dԌ9)W'mpx[Bb 'КRdaM\q)[P&nPy>#BL#LcVFx ;kgViѝi9.1| 痫(QfeNuZSLh70a9ZR)ԘrQf$KMo5O_|KhkQ8ͻ%ue K 7qj(:R_?0GgCwy'Jl{п/oPI7%7P_o}_QdWy1!PJBBkmpM[$X47^^mm6 6j@A`L2 Mbh(T^ΙwG,իzRno7#F;o!|ksJ#@W>_s+?7Trq.G~U~u?_^|y?ƲsRsz\{Oc8:sJa>C,GD,3xM1 w+u*RT4h#sw)~u?R9~̋>/{o|Ջ_/}1ۧp/o jn=|e7Ozs>S/ey+^mCo[/^?1/{/;_]c>(GIJ4EJHBKܘZŐsSUL;:?(+j+&Sr!`m mtJQ1U/IUZ!%XwhͪG*#c&!1 Te mL+BƐBAH=g2!g\ X-zBBŏXds pzOs?O]_]V#1H$?XﯶoڦT+=L)Z!gb1FimT5Υ,"d$!s}JnDYj40ΚrZUavڍ1!Яa +h 1a-Ґ3OqZ#Zc=G'Lih6ذ qQ3TTԖI֔>LUNjZ2{i$УJZ8XEh< pk/ChjUEto%UMp#9&nY-qa`5 ɠ` hEL/vsbn{`\4FA Մt|Ƥ2FYU9罌ru9)Uca+!"ĜH)SQ*lA(RLBa8t:!OIw;8\-G QRI "9 X6rt S$H!"59c 4iYLXC1\wǨ=3 JIwbݳNdt)EJ^)#4R cfsZV>4BE VI9bLnRN 0%RIKbv+TUT16c >Vfss'gIcKkg]Fi\O29"`cʳQkiVgdF iv.%.6E# g VJAQ-- F5J` ఆiBdZuB1k 1rhnR&b њ;8EHbң_"H9H;5]GSb сeK=XM0LN.D!ܵNAh:L-"9so `HVBSݩ-1iL)҄D )%u hu%F|UjcH1cA(r*!r0PBͧ[1ThMjzr9 G˝wWS,cýC%[P9}EB$jcd +ةK 3(DZ+HRɜRJ)Ak-1Ԇ1 !坃h-cߓ"1$JmOX\'\ct YY@LiƁRl7h*ƑUuzl]AKGbdIiIe{%EE߅;эċ WTHgqJ*at)ƌm};^Mi1f7ʲIRJRʄB,KcR9˜)*kͶ R$PBJ R"N+c GL*GoY?}}Xw\y)G|LIdtZBata+VZ s0BUv~7~}[Dg}Oأ_/Z~pݟ04&-L\-4Rza&ա1!5.ʒcڔT=cĕZʔjȱ(,(fgtHx1#'wےI0v`s9:$ 6%;V1itW=$Ri=D=COaY B=/hΝ3z[!$"èZ*knT瘝)ֈTI&RA*c\(diMU|3A荱Ų2BRdLbg'{ۭ[9}gOO㓃㶞1v}|ڳRrs kWle]ZcLYN!\Vi5?K//{bw<:s82zgqd%=( $fp<$OnOi%hJlA] ӆ+ܸ.af  )=ϳydGrp1QĴa>c>{asn觴 B`!E {0zQI!fcHIEXS6dnbBv. ÐbR!$Ba '"'cDP]X~V'e_ߞͶ۹:Ϲ>hs?ryZXӦ2r)̷6g6wzn$F,O//;+x^l[z?wg_~;|럸~7|Η[>2n4 RY$/Z]9mG%biяs'JCJ)-KSdNZbJVYeBU$'vhܓ{wGo=?o{'>UJoІ軭+7[۵(QWz>-FNeH>Zl4|xTv Gz`,^9u5M޲Oo_zO3wW|_O>_y]o:yS^om ?~Ux;|ozŷs( IDATW_W/_O)ۼx~߷[h7|=v%y&! dѲhQ 3\U"KARBYBZ U=?[tssiO#Y̜T(9׹Ind:c:ck6sĢ [*RZRD[DkFJf# &G'%lbsvԃc¢ m AH%:Bmay1PMSX  yh\hw%DBU)n}Q߿Yr+[99a>Q)U&2iJwUQ rLAcR) @FR"kc9yrZͿ_>#o ?hc7B.,W*8oVO&R jWagkG}׿~ ٯ+Oy_GϺ(ރ%/ 9.W]y_|'^>:*wmݎ?4w}:m /׾_/V+^|-O|T0Dݷmo^h[V蜔NVuSVKk?|tXd$,Bqt<"5cwg"ʊUn?Ѻe@R$%B$%Rbf>CEl3:5)T[[XKNwG "eNybm'LgbPZ C3e̦"gX+> "\`QhMpT|(.')RJR;T y|Y˪>8rN^tC^-{!J dy:+> &3(Ri!&cP"xvfUhrckvef w=;Ee>ؽ%eeaSZD&LU[Baz+;Jhr$z<;tɔHͱ BdXxO(EY``A\pBBbs*]w7 c\.T 5R2VJDJueѫB-uU@n,0ô)HYKJ) 1QV~՝zʿ {C{)G|>~g|g~F}G_Si_m6>bgO^ܻu%/Wu"!1GGcJjFPoOg'3(JM"xT ^ެIG9jڞ,i{F鋬,-A"e5J<մRQ^}Q)UZe1l̦R&cմg(97QJY79)i|SWw0^ٹ{❷Gq#o{K>~LUvwo\fL ҍ׋t)%|m-r݇({Xirɯ{(_oח4pnjŋ"ijRZlv<J0Pa:gZ3΍nLvM]FBb:A-#5BQU$IXrC\BaؘQ01fFc<{{SQYrzOYY.Qh*YfRdkI! ٰZ'NDXE21^TI)<ݥCF,$,bY1;sN9ERtc()CY*M&Әb2LΡRRDYX)9KIVEJ ZcLفT)-*SVݳó7|g=~՝+WfVBM^ɜo^1r>|^_o߼-7}#u%isB*Zfzuw Y-uΖ4ƻQH&ek ei :KcՂe@Y3BXDhAQ5Y ZQOiRb`>L|D(-$9B >#5%eAQPk3B)ad83"5,LɁ쌝 bfDHL)P eI?Pddt#SJB%A!J*2))rU)ONGgMJBIOkk" f\VI!1! RQ䜲/z1*!!~ߟږl*?G9ޛOn>==榱2av;[[nFvyV^4uiOƘ'M(CoһlˑGwKVK1U%>egTsRl ZRՈLHa0 hwd&mO)}F׳q^Cj8rEA#%!#$[[ ٻCS]$ :`R:H3yQؚ0ƨi; dʺpJ9BcFA(T\뒹8(ț۪,R]":ĘsNkZr1G) !T*WҐetc!$ʪp||H&hUUV]{z9kr빒6sR]Cʎ)im'%bVcK]#gr$Bd[ GUI(BTT%94BUbpZrn) i80Xcj-ᙍBRBFx1j%ªP1G!L$Z9IvURJ#yoUS1FH1%mJy߷1֭[Ml=~Ƴnl6+I,9և~>7GS*YQ 4&|L%۪4Ha k 1G&N!)Yu,r_"IOY{g6Espz)5uџ})"r<:J: .`+Š;y(ôH-`H`EdRaʬsF++q>L)xs:hN;)eԅJ(2z7H!B8Es'a{c;${}WΏ}fY]&膳uyUq(VRKʲ;%.co;81+ atׅ?*wxGT%ZXrz ! t(5$aDPJi{ߏ{&'IS=)ӯ,@qHťH̜ѡQ)L#8i) H#!LTJ4HN88\\ pkH6=t^R Dʊ,dQhZپwUa30n4hcJGB*)E&r9!PFe!Hy)QEi n}KntZyΕj{k&9neUYmO{{wNfskcյIqhzR=ԅ.qKۮt]*k |NiJ?qc&\՚ kװVƣ3tA;0B$>4%H ڞ$9#[Tw[7=ʰ*  MM4xCθR7l1d٢@ [jtz}('HM숉!B[c R.X(EA ce>Ej=!pL`" Rh)1FRJ9'HCd))JH$EIJ 8xLq$q˪IRΡRR !>Tz+s!B/I7}}c_'oߙLL8!:S]S)kwl͚)B֝ }s.J%?mm%)}?OVYa#}a1|E:DD"g@#)5J^DyNYE^QD(-W)*k&srNbčհ#ղp]Znw8"9FQHcZለHي$A!Z\=)a &SوmhB^peB!M m(ԻD>xTZ4:75H[trt|2Lv-1JiROs])BI) !{BL*%ʝ By;vNޓ{o} ?O7r߹2[[8qp}ZI(!lnηvWo֯=r9.q5mcFJ-( SjHEtR1kmsc,SƈP%4+u=D7( Rw]:)\E `tdMZB24F"E)儐HL@p4jU1|tlo">"ƒ`T ư hJs@iRBd"rYB (ϲ)(s]]]YkL۵!\,Qm7֥n&V 9sJIȘ{sv>1X+bчCJPO[lon~΍7bks:^jN'lyxrB,LyNjZحW帺%.fBPh&:]*PX  db)38$K䁘bd6+ ܘ51ѥRĻ0H 1M0uMLɊ( b9Rъ3:B0$PDfsX' H3]8 y>FtGAk|"%Ș 8V纓#КIjIےJFB$G=d%>)R G#Re9ֵ=8\` V׶JNj딴Q$h1F>!6EJĘEV9i7zuqNRXrws?A۟8n*!Q \WnݓIN~vWv}=^pYpK8w $"D7s9\9 P-Fa$ҋxDHCf߆EY]XBd:2 1@ZCPccVUV+C0DsJowgn҇>5ztT:^zMµ} VKP ƹH7oC+=¡NpMPDq4-ƙøO< Um 0Ly0ޣi1E`2"M#nZ < Y˽38#hU"؟& .8Y"B,irY2W,z*ft` bD$E~9`+V1K]K:&MR!:̵ؓl˦io%X-L̜U *+#mEK5r7nT-/rmafZrjܒ>:;uu:\?xP_wֵ鴽u$\l {taˇy1Vˣ8ڠZ}Z%8MaTs0e-Z [ kB*h |xj epG %#T"`J)!D0A2 ؘh=RVÜc~x~.!`Jp JAGX "=ǩ췥`py6(zd.Υ)uHJk}cZ~_pfc/myl_L`G!\b`VBr,dZyܳGG1G//wkzlV@OӁiPm `GhqR+,BGqy*\ UG]up>X"g"\M)B@@JHB! G+w0QPz*m"cj~sٯWVXSAkeM9>Ej])ŦvᲹ}O/.7dx5!8a)׫eD4w΋}W|ŗvq|vB].vZl;cPJ1crlbk-~v)4l=_Ϸk/Oq83Ԃg1)#PrnPrR߽qX6f%ž}d<\elX03hc;:2p-.tKElm8nq" P 抣`q:Xx~x8"+Ut-[8 M hEסi*bbգVX e%P4`F!Lb:g RJ2+#hӒ7'aG0cۍإT\O"c:qĦlVϽU[""sw{Z)qrz眵 U"dHW=wc'Gw4-WEב1qEGGǻCfs~=:^|{he]9Ggǧ8g\ݜ*橀hN䎏NiT9C7nVk]}'FD[ T *!-xprrl(Ǐ/utTAiO}pVo߈>kh)kɇ} 3Z&'15[BT`Pag=re8sڧv "H $-A^&4ݰP Кd*~i bAq5WZilBKyE DAXotrx٣W0f4sYv>WY )w ',U0 WѓGm/؈s4r k\m-X/qurڶ3fL/!6W> 8F) 1hŐP)WFp6+,ЍʴX6a8TC*5m/˝^1mL)"5O;\!'_T4mVx(Ib\K$ #(hQ+?3EpC͟9CrtG b1!p-Dm,5meƄ P .³1VT*3 ҴMe/8Ooy-^89s''F8Xfoq7c!_v7/~oJ\k?“ӷo঳v·}Θ~}{?v1.~/^OGLoȟ/|>h;Oݯ΢i .=+8;dFKr{ڭT\nGrt"0;j ,VyWѡi!@G:k.0%\^ QĀZAJR}vV𙳸q5 BEmQFaDHE#LE쁊r`™i~U6lP*dlK z潛^>nFZOFjH{˛|ARDj1"VI)1W@D$ĵW)'gO^~v\,šv~nongyJR*iZD d%Q׍oV;g_~ Wtdӷ>Ow[O}/?]Ҿ}~|5d\a ,XpPk 88d ^x>j]7dZqɱs,zf߯ma{ VA,+'F6;Dr2`U! P-B~c  al6~}by1ng=^X/|ljCPƢZuGf kGqy),$B ;I1N5kAs;G/`Ϟ\h!>my7v5!2QZw܀RK9V˨9srɬUT}[3/Xax|> 2XhhXf\DYMH@xuW}zO‡~CkԾYg_<O@?osdm||_'[O?xouיl[dP DZQ3GvqpLj3\5XJ-Y  rGGeʍwCe,׍g"ιV%?ٗ@`=GPX""XЭ:"@6wc[k jNޚU߉,h%x8|㻶Fۦ<1F41 ~< W m{ϯ<7rwyan M]oՒ:c-<~yw{\EEy.q6**v|Gˣ|>ߞ|͛rjE3u]\#4 TyXgg}˿5[ 3[kyެ!׿aF.iw_OWFOϾ˾-5@m+j C@gOi1eo0˧0`ưCۋeջZq*6>9ggY+dfElAXocRдpG֧El1CMXzr3/>y5R" 9,6baƶ즒W#(YThh2VjʯOo~޽CE\RXz5;cy/Wy|8o0jDVg52?џ5Τw\___'p\Ƌz}s+ &JsܣS׎ SQ{E^rFp@1}OnE{Zq~Ā>1ۧrɢ gQ T~kMHq##7MBӄRQ˛Mbqy\U" ӬS) R}pͪn繦44 HҪi5è4)碬εq^߬ 5 wn:Z+y}.sFUCd@eR/+~.V.MB"9CT}.lc|1e9:??K޹{Tu~ Fև[};m&u|޳3Gw}_]Y}7}bG?5m$mbG%-Wd>=֤LU?ܧh4*C69yKX*VTзP* c`k謵6:!B׶Z5E`U5,f2cL5lO(T~=o|7?I/|5Px#_'~97>?q*N~Wd-[p`rzYv7hǝsn~*[U[ b %bޙ6R\lkIc$N]֢0\ @p>Xdzp̜&eH<8WMi/fF}Ƃ2J9 k % #GզyGZ"""Qk!UUHD C)3dI@a Dec0sf!!K&%6:ccjg*Al?E9φc 5mkRaYstf. ErΒi*h:)f8y酇ר}Sz_3'ow~s _'BXWW{]quW׆_>w@쓯<{_G#=/?G>œgEpM7M[ 00 FOl y}nZ qS@t{9,Vcu|Un6.m~. sr5MSJ1 kiq*ʘrM%X:]4 pΐE XK `WCj\aPSRUa- C Byk1 E)B X=o FP)B z+ֺkQCVIKY%Q(YEiޘR2Yl#&Tod%9o[XXj ͻߟ>W_,`u D" qusyIU&rGݢ\?z͈{~y>s}~k!ۖgQiZ"|Fg@a >XMXEm4 {g1NjiWހk߅8ѠV1 Se.cjZ8fZ)%%T%ecX:S;k!$!9;ԚȨM0ttU$y]m:08,yzӥT4f𯂀kJd1TUY#u6L¢rϏuȹUZaf4s2Yk8 39ʀxBc9eQnw^ Ӕj 8dsR*yŐ5dETČCR5%;쇗_}x7Q/𛋶W!7`Jp%5,PF>< !6y]8l1G[zIr 5 Rx̣y""5œSĐsPaI+` Q k yjU :aajb0g&"kdRV[`k^Z>I0̈ fPFhZƃyӄ4BqAt ]&`ZCdUaѻq8NDChϕ x3a"8k`r)Դrq8EѪP1*DJU5V5 6V*6vMD "aQ$ k "bafX4~J=$q(]"-w6 :MC)Ƭ4 01K#=pbjZyǔ/Yo\q|(}pz7b6Mw_*5PB뚒*GKLdUh)EĘd%c\*3B k5d Qe:o Җu2yBU]5'o`tl\՜_pn"fl|!wWרֵ^oKpm4Vx gpre0@We"b-Ҍ0 M%Y%Aג R&U\K.={9Iͨo5DkYj0Q9m_zqZK>Xk >kQk! @99`c&c64Ԙ-%ׅq IDATEVH*p|(F2,hT/.#ǧÁTRJ9M8Y(ߏa_ ]lڋ_>~c+cs|]OkfC+,;h%GK 5.rdO!-|.wc kc"s~j*$c|41$͸# xt.sN=ڈQZ4F+s52悔` X|B-[>rBHmՂ4Mn0MMhݽ/Z?|UȾi#\G )MH3T?`ITlϱ}f~/ӿU}o?֙`X}9~~xj缭>|)K`cǟ?u< %&~ѳJ״qG&t XƇyHuFߠk᜝3/k۶9甦"2`XB  ]`&k+g1b\p%8,,h\4,њmlp繨Kcm@u$e]\`vrt%M(6GRVjJ:T{{`;xMt HNs/TGSk k]_jf!Xprk΅ae}dAp%TQj<"ϐ0LXfUc;egV>8{'aІgO"hWNk:ZwT*=*ZHa6 JF}3R-6k4!\`֗>i'sJTLvOUp`CD8m1eXkA& 8Yz=uk͍89ca4M"aB1NX/QU5Z qyCp! ^833j; VMDc8L*qS*D4$Lf 3,l8]P@Kt];R‚-x=Aߣa#>b.{ςy UA+'lЄPCRa k]ZI`:Yv}o~I49;O&ZfC,=J'^1%zhy U75΁86/9/Ml۔3֭=R&[7P:C\y&k#39 GۂJdYZMaŢ2sbTBt{yo rm%P.:NPhuk]m<;N[<4>DI6@j5Eg*0ȘyQ q/`]Dh3T-V2%WMPCU7@jh83taa<0L}Rb1x a!0Pf>er-'Kn;obXe1bDk }LJV0A ΥJ Cs`v isE0 /۫7 J:D,=P JD8he#Ϝ*##+"0 \ࠜv v,MXH[ڤFQ%d 48yFٗ㎚br%*,ΔYp[ڴԦ\%;"\K=oHmA".3mFQms/P_(V8G,$ĹN\$¶9c*!,$@" бv ^am&EUn[)4С8pv(R @z>TcYy--UB`V`@]*=h/M@@\;$C( m؅JzGġֺX[T+BNJ)6IJ{}gO)e(%(B(J)7Lur{L.w nGJ%y^ԲRKx$ c8~$u,Q< cDq:$@1oFa8hBV:Z!(z>lEPqn -eR8)JHLt7Bh Є (^U1r9$Z:L2 hfjMA@(`PJ #J#À( w5!g$q"cplC u~E@IB"prJWo˴xwy}79KRV[D끚8B A>GD ] džaPRjURƉaZqh)$#CcPRږUaR͈T:LTʠEĕsh1g)DjpA)#5Z;ۦ ˣrζmNaܙXeeYYQ|jnw 2MU3ՏW7зq+֍-sΟvmlѫ'E4c={ʕJUiACG6; SU;Egw?^kVk~a+q͵>߽4cǻOL篝J ?y>}FCܶ>묳n||~ an'p@5&XפΝ;KƫsnAF<2}4a5THӬY4g/zyXC帓ݫf6tIOVh2ςDas辟$|UA]ǝ>ᵛR8'3~TU on"8'P9(eo{= +.s^z~NVhtp oKZxܩ'4EeKS|ąi">I)] 'OM Ջ/\е]XO=}m:fS[Ji6Wb94y!_y&;,}7҆.v>Ioޔ 8wLRԤUU1]n}}yL}doׯL@E/曾}_cbsC;l~wY>?yzܕSw*p-7M)O9ܕn[yШ=v !sJ741|R/ et떽+nYNCN3dd{Oq.w| )|)6n:OYa;[g~qyѭSAk݀^:qVO:hC;v,!.>ae'cرN51.jرc'Ͻ COxkcmn|۫=<~~wp}kNH#O9KWۗ>|d~3o}˧9JG]{uf57+#F 6DZ0xnL-lKGtiNwơ7ܿM:m w߼#{;mxӔ)B"(^]f?M3~>uߝ{D=O8 g2ۮV7n5Ͻt]'~ySSzm^}s;K^9j5sm7κQ3~w[3yv+;?Һ."atxA'!٭ t6@XnSS5W:ݿ@^0~r] -e޵Ǐ0sy'&ژ۷=څ҄ M^??|H?vǍ1k;v=/ZO˺ {yw&m^iF[;YIۯ[~ԭط|MMM2;;x{Zk%jyfNh7~?伇zpZZW̝ӫw 7$h5g|\vjz8v?_oҼd޺tʰ}~ PZ+z4464"m~"vww{[Ĭ#\V׺|o7O{]wŮ T8 l,lǕ/gum!ʌ.&oJJ%{Ӌ<5/9C  qX[MWujV (QY53;/ s'[0`zࢋqJK~/}G^}yys0۫VlS]P(Dyҍ4{]}/,;ltˁ˝vKRm]]=zI)!hczB\+y>1LwꛛL6r}2+mkOsg% u\9Fǰ5࿧vg/.Ld w|b\.g6{䷯E2z= ۿZSC\Iq۔py̾~*im^EXz ^E2=]&w%:ߨ~{{s[c)ղeY)%WcmTdi#Gng RxSz5 }~sE݆ یg;eidykXl'|;S>5hұd6KG =97^t.kh(q^MF ϝb4 =1SmO5?N Kz5J3 z\U ; =g![hۋ߶m{v߄N2+|wdtoX]: jyor֬Y9O]w9wڿEyq"s9N:w?)RkuQ;ڍnM;u9K2Q['͘8ySx=c !sTSWe*9;dȐ{R\*;1nDlm+/[jjƍ;'hYIDATuEZh4}yW%lJ->ϧ/TjֶX[\w dС/Z`ƈ{ٶRCӷϼ7jY|ٲի?T*uu={?o݅222ۃ4~WV&J^[+ZiX.w}_y?O:%ݪmz{4ppyo"kJ 7zu4PK,;wx÷~jZ8c]2220{DGnHZWmDjO/[m !Ow̮.0H :pĮ=푅BcQdᆌ72:#1jn~6l dcY!dl =IENDB`sonata-1.7.0/website/images/sonata_filter.png000066400000000000000000027362051377142014300212740ustar00rootroot00000000000000PNG  IHDR/ pHYs+tIME;/tEXtCommentCreated with GIMPW IDATxk̵Uvu?7> cSl36$Lll Ƈ>@ڤ4TC" %ZhF-JT`8 8 5Gawk]oGo{?~Z׺u+_ȡ1Dq**"UE:/t "9DED ~:(c\]]4:֕RHކ:"$眪:""7"Nf/;NCDD(B!UtwX:DDUUBP >"'E4+dX\csg 7TϏ_Q|C\ Y10i&"C!`I=Ƹuu:Mơ" Psc;1NqiEC!""_GĎ($H09Ӏ3FFU!JL7PaN8>dD!)P%Il1P%yr%pwBBU{ if>m!rhq:IMxOXDtwCUB1q?Ĕ0zЩ*sblҫ#>6*Pf@TXsU >IqPDT',g H8"p[TMİ=VfkRDQO)w:x}U|qԺPU7HU9'I*XQCA n~cGltI\97ơC1s^ݺL5翈]U 8:!*̅8{UU@$q+f`ɫ[CDz'$NՅ$n*: #F< >hz{:\BAsă1 t E tt  $!*4wAo¬u}EDFcc4K1 h$7r9Z 6xZCED7I;;s%p:ա.0:U!L&oCV"9=1@jaCQ1rΌNt@T5KH' *s͓U:Ơ9*iEc)"@D_NL8>hDk(Is^]]6*1F 5]XzZ)UuMsq {TLag:1T`<#>{+1jB">{#Ȥ*C+w4#;TX6bi)at9Efy=9wiH!&j~ '!ruug!AtsZeyd;"cDI" "18.*21`}d 䜪N* ujqI;bv 'C@Dt}*"8M{92@|Fhp 2q s`d'|b]+kA΍g ${1FX2i%p33W4y@x|i* >8#\%V!9^]]S"nWV =m ^%I[hTx3G-3;c n-Ԯ#Hl 2D 0ynyC+|ڷHNޕ1v>]+{Hw36SV bi#Ԙ 'Wsjҏ J @0Fɽ3QׂGYD$5o3{d0Ďۻ涤u97“!iOU#0G |5:*Dι #Vn ]m0x8 vED_PU@^]]4'Cu#N:Ia' pcߔ[@ iQƍ(۝8=@bbH#b ZvxqY1.Jd@m;LD#,@2!+71"!ؐcjT(EKq"NUq'>J}-bXsI[7׽$'r]\o;PU3qoE΁l{UPWytiGRuLQSCznwT Uw0O<`,)IL$r$ Dqݍ]e(-5QD!:68nG6"ƍ?>VryWG"" I1Řl(t}=S1*2}TGxȺ5YT=Fǧ{ B"n` * z.M8 g?7@3$xڅ|iQuD]?oHG^o&y7/:jY ,V>tU(t9Ass;Oպ E5PEp>`5l7Il`b$9:܃C}o)ƞz엑 D_T?-bB,W$f ؁o'I2G3ʈ4"o˜Wt:Н]"HX5v<>3+lBsvL }#.vFZ dXɣǷ Ah՝!IPnUU81[31YQ TieGx^OޟOԷ")8`Lg]r)н侀3Hm-Bu]D|bx-wg j.U>セYQm߯gu3 ӆ+w&a󽹉Q2=*tIa<}I+XPڷ)^M'7o"7$"Pn .j ] ]UJCG,ؔ&Nc/l_\0NrE+ȐEaZ +d(B`ְ ޓ^ 6##酴ڷ WAY ˬ9 v;ʳXoѳ{T?k "Q]oK$n,vonwwd7iK^-Gyhl0@|m=)+N>kϐ(AtM9}H'rCP;/*b6 w DkHZm"2LY-RQM@k] WT7*А8)g3%KX 77(e5Ut4րJYɦ|X~=ͫwү>u.\;~"%WMU+Ks'c T4okac+-9O͍Nr-P+C5;C-Βm Z JsnNիA yq ͖dwĦs'x:DP luwGpP㈚GȞ|snnϴ#]3"9y2^b!)-*$2q-ifޱ8̧i{*j-&`RC 0"66mLf%Yk%LZU6.Ǘ*q_Q$2y:='LD$c(}c KoCF0WJNql]=ff*'!%CfBW% Y3dG6H u q9C݃.ӣ* (j^gG_6HEs;CCs{ُ0XO>s{O|׼N*[ӿ}IO?y{' '~^̏~>{o{9_|l?a\c p8wN`h"4S=4J ׽qOT(>LnÞiDWfTU CUy5YPQ @軎wծ>7`8e\z^r8%yʆGs}9}=-{T'14֭!tUYsDdhQ^$iD0 XV)+(w=Iлlk\2F۴;s$Q?_OA IDAT+?7~q˞q|/ 3֯]ӪcN'ln<ۯm^Y4T䈺j0JhjFXUERw-lK]#QP-j,HQU{u\3_ uG;Uugj܇]|.uO6hNշbRDE#5V*[uVlN8ѽ(ҽ Ғލuo91r 甐aL^&tY8vT@Dۊ#*S=TZP8ns1K2rVL3({t3QkxfNV;4+A7811ܢL2araѮn@-.@2M*[]]FXi!5U?-.]#H=8N !l8Ehc M$v1 9o;\$tM @YD jNO0 'I Ӄƽ^01IL?vft!HxqzecwT+ljJj֡݅Y%~!pa Ip^$ uZ Y*P@)opx7ٝR-nf61&88O64ɀ'<&PV@e AFi`,P UܖN lxJ]ZQ8>$4AiRIZe֞d ri[) I![ڏIYCl[+usGLp/ bs .{iWN$!:" B ZlLl)cshcz]sLrĜ.!ԩt`X-!jALBk"7|(.th- {*(% Nl jdTIԪn/8l{`3l"!cL>UJ07~^;7+>wRO{_)=?Ʒoi|=q#/ggq_/z{.qO|+=<,w 壏'f97[|K󉏹_g<=x?)p'~ڗ9=e}nćzW?? |K^OzSxTr]?i M) G'ըE-Υl2~7"cXK,߲qY83 n|hKm#Dwίdӗhֽ@DT&qnrB /j,jn$X+tӌNZk.k:ڂld¹DeD`Q;7ٿ2mrÙd "ݩÈMmiLJJn%#sch:~? _W}~G<zTr]!Ҏկ) akg=DY\ }yJg,^#!1~?W~箁YhU[$2^x鯐Gf[j@i7G1"֋V+k<ϊJVD+ޑ;TʯnR7Q+JRVL꽇7~kT $M4PJGɅqIKC$U >(WI=VA);s'gxm'-;UW=, !P[^6%_J;jZ)|7Ld8P4Y:I7U n)ٙ JY@rXiq}"鍯P|-boRtw{tv6UrSAbnx @V5(2.[]5eW!S[dG FzdX"5QU^u8񸇜j#܄そ{ Sr{**i)0 !: cbchVnD OZƒWcP T*эK- ֹJԺUrˊ6􌶶1֮Fgb6864";5j,DwuTᑄR0睔2\2;Z٘%Kt" ًY</B$n%qB͞H,[pbH|IY4Tm'}.&4nrbmuⱄ@/s N!<";Euˀ|fA{OT "8=YT>AVʖq:(iL-` L '6>åV(E@a#"${F|B6SsD^M [1L#[dj>qnTlm/+tC [ISDky4Qξv)kR%Ъh1z6Ց:Aȣ,KϺ??}?}˟|g5*0ՑX^3&ChMUZw2Z!TϺxs^w"~7g?Ogo_y]=~/WOY_>Gr];_PD#GY ]j{F$m* 5tthPw٤4L:W!si6ݦYQȥgզ2?Ӫcs~w܃.K'{u=-ͪD(ŠoS=9)ȕyٖ檴x׹>r#=+SLpb4sA\2 /:ua t[%-u,Ëʧэ4dKx@x%91`(bMs|Nde[*Cu#JA2Te itSHr]` (P)29O1dt:r2;t8> Cm1 %hFDUb84k=-YȮ -I 13v&N/|} 4"@a9gl|*0-BOĊ!Rpqu\e&MvBp1d#>;<}V5J" ZĉGΰ O&`ki! (m<4ˈ֛Z asI u%2Sht:ӉlM>ONv"'ron'6O6SRBq3ŒTfs9i>s朧t}:=p}4C>ݦ[z^,@д3Gw3#mۻh#ĝf>O=}"DNAI<å_N!vdu7'>OSΜik4>-ȍ{?Ӧ߁6}AOќԚv378Opt0ft3O4wS<s[xN7t"=l}3trsw7Q"MUr:N6٤#֣c[4ܪh3t:l ˜> 7i>-VdwNNnjF7Đմmڜ /i>?=ښx 0T9眱t:]Úci727cle3ʧD>NSiv:ӌ[d<[ QN>"[=9),9y:S'f$#~grד Oܺu5xw[;a.?q<}c/t|Gx3}^x?_7ٯx>~_zW/g?sw}=}.ן@+NۋKe{|H,~^L_G78Uʐ ڞ紩#13pƽԈ'CAӼшEcD)?NKUp)- c'8G(֭[:dUH`e@vݲ.PѳduѥflV^ G[Jjm0\a&26t P!ԡ*pCUA-/X8 wc7{-?,HJG)D[ƽ)c&t7U<^4JEVqVߍUX")Z@V/RTYRi@"6jKHoCTEa ;JB*q*ۈmgx:AœhlG3,f %8Ovuʈ7\*2F!C1d]ꋟTEw[|t6 \wKbh:ZJ#wxC& p]\V}PU=ֲ*ݩJs:cw?Ev#qM !lZڸ@B{4N2 WI9k7Ԏ I.Ȓ7#.*0mf޽ Vѫ9Of,$?; *b/bw!y=PYZEchq:9s 7 ,d~K%@ru4~_RewYM6[elf[UAZ2!]&ĻxkZO܄Y-U/;Yrnv/`5KUj^6g2r%>""٭-BUީcPut'x~=o/}흌f_|?~o=y/~#~7|7~%2VQ}“?^7''%/H2ۯϾ]t<^hү|ѿ~˛~ yѫ_i'>A 7N^}\zUXU0TKe[說hP`9؋Dn{KP t^ IT";C#"[w3ڣ\WV+[:njC63H`c^ t"pt[oYC9qܕDʁe`~KEBctD-h#?CgXԍ$PSq82@ٲݚRCI,x0V$$ERUTd!ueo(jx"la Mnĝ Tyx}}-@pTG2=rF$7b`6w,|P1FPTdhҼsH> ꤽe,s+4-dM͛#+j)JM/]~THnI=D| 7ua)-soFQZᲄV5ҏ5V$16+' J.Iܧ/vP[RD.(vJ N^N**:D%"튔+k7? u6Z?SC>%̲d眷nR558Z8P$@|{H*Rw 5xel^$)iw:D2ACsX_t'TA֠2cvBh "OPM1ᅜMTlM2Y_MV}DCҪ1d̂蚌:͂AHFj?6]G#_1G"8ƠJ9>h&:GaC{.";kʪ8R=lOXfVb\h>6ܬ(qɈB&v.)ŽˣqdQ-hGBIEP@t[3J2*RkkVN|t)'Z%Uؑn恠i"ZkxGZiw`3[!B IDAT;ԉ'}SʦM;/}ww?Ӈ?xS_s/yGBcO}O㿍ux8-qV}gatz+"IR/6wtL w0U p_ߍ`J;+6:ms2bbmpQuaf_,c`!Tp|dQaPKo:pƙ$t_ ԣփl7Pf43b 3H nlp+6]8ܼ;W9ʣMV F `EBqZs2%%Nqܚ{bT jӖ"b%iCEZܤfʯwZ;\R61iy;F)JRq@x,X\sJw#pɣcTҳ䷥K{lffUBԗ ZfE(d[xiN@GzC޽,)[YŕN;~Z2^#:N"VVp tWt"kMYVUZmRCy!'f1;F6Yk7q6TBkž҆PqjnhC\eDNDF6u|-w*sZ.)w#X˔)ݼs$ P&3xa]XvEnIϬdVh@@eJd#GO_r;T9qPdC5.^dpq5őC| uo$R4=*[,tB⊵=5Hr"N7 7_"ǑbaƠ[I[v]Q W bQ2u =hfYCn鈬NKRNNӉNGXC"kjv2&[&]ah5X<;m t:NdWVO*%e0`j稆0.Aq^ &z-)79,%W~~Cwɏ=~뒴\u.#3*WJӚբ[xך¶U/3᭴~&A8-F11#"t>3KN_a-vQK2*[pBƆnH^yjhy`ˢMGCT+FψMҏ$[=O"J KV4U"ڰMڌW;j 5K,WUdXtOЌ Ug7CDʈ[jǕܮBi7"3>)0VHixc}ߐ͑,ߴeU)TOckp_[Nko-H4 ` )*M0PwH }.hYoS%LQayW^YF+B~F6>Jt6!CwGr.I1)d{2 j>a.6^MIpL:Q=0e͍4a[yuh@8]lQ:: IMhRSUT<#7(EԫmՍG=3"43EұA)1'q6R0AF=&WBDA :rUZ{[qi/xz! # K[qnоqlyaOfBIۦMuڠfo-b-Lq>[EE d/vՈOrd``kAt&̒gPpLT:Xm$>l-e~tQW7ەBS:>{hy|2 Ӕ隈Y2ς]3L҅eUZ+q(75zW Be'mUR5Bcɦ"0Dһ}n au 涰^"Z,fAixIg)4?tQMDZ(l.8u8q}΃]~ڻ~AB>%cR?Zxo\pL@(5 wRNW-=쐎oXxOn\ޖ7{;6NE\`n4&jiUIc V)Vں43V}ԣB ڃ4Sw3*yo{2Ü> ɔH644멏J Y몏򕨎ݫ9@MJt3Viބ*})ʒ7xkjE/hyH[KJ z"f=7 $ŦᲬƶIgT_[[6D W)AZT%6i udM#-}3w0B-7dXV#DC ҚHNfMQs K Z 2n.^cRrrwU$H&F+ [/.,Kˬȹ[]H4jHY[)SlMm m^Htv+JT n8ͥ'[qzeK(ðyKᐛOҚ:ם0ۆ'I#v  |Uߑ,lwk d n<)Ua-5ұVY'+ J\^vN8[RwL]b7u鏔W(quL3WǸ+r](. ebYrz(T}m~C'vD8,uy֣KwfJ.&MxSup&cW)رiձ])k6)ز ,ѨJ-!FWF3JJHCT=JUeeo9_Y-[Yz+JǪTbZ}6+tw[,ķtv1=3 M%73aƯ-Bal>iX9W h'([SFUu .G~ )3ψ^_+Ӛ꬗j5:~MjcpSXF/ݿLT/YIW7W:;@z6 $z~:w(ݗ펣ohO% whu^6R%ґYn]^"N~v.\I-ќE r q.\P *..5K4U{XjWmZ\3>E 閭20D |R Brr7ѦOVŁ# p.&;E۱eDfަ(\1BAU:؜-;VW :Y.&̠a I%h-C HFWB^$߼QT:HyOa i=u6Q_J8;<$b$6 wXzp6XSgl1цٞ "`‚F "jPn9DCL7 .Ϊ6|TSbZc(| y(w%f1D*# Q:t VSUPI _u.GHͤE@NɱbզI$O--=m梺W5jHQWƉ܉aSwGjiB Ӎq _J4AF`# xȁF2?"Uגz7UC w菦 I)P] DS߭@ w$zhikR%U[bc+>6݁!z+mJqڿ$&wj)FVt( ^,m~.AҞ#CHޖgr ˘FXW9k'DU0⏤l!)XugA-^$l:l,r[ehD_@L3Ehq,m76>ƀ`;"B9Yq\Kpwݓn|#8 t"/px7ߐ5w ]4Nx3 *lƣJy<X{Lˆ3MwR[:^Oki3]c@My Bsݸ\r]aUչ>Ut@2)(1h!$71qMnb湉AMƄq)J"h4"Ќ=@OU>nzBS:眽v/};.9C5.J }؞e62\<2e C*)Ң3ޗ,-^B"Bd0+Ɖkq5*-78` UfKM3"a+`',U7ΰl}I;fi A|\%jaK nmsb/[KUalb1rKW]ƭtIdLdL}R]#צݶ g[YYޭ?EתMɘɸ_DY]6EqJӰSn)) %~Zހ*D;cHZlڹ) Lx:lj9wYAfY`SMACDY p]ӅYTpb$k8fLJöRikG6"a=4k,T+1G.a%`aXV̬LzegP(jPi}~?\QzkZlbÎ[VVq'\!bdewr⏋Ω|{-R kNyC 8= 6G( CKīIm%S}А<¡qZ,Ae/A60Yz%RlvvҤVm&GTj%Km7Ώ&sGR܅DhVER"CU`aBJ8AyMBpGD0I4֌}QL"h0xp* P"8MEE2?>mKz)x2&c2&c2$}I g;VDiԆ/Kn7 MdLdLƾ8DXgn^)B/1][d Z6"&N 'NP5GTf]y:GZkq,Vi{1% }qC&nk:ʵeG[xj<grx%Q^AKL1 rH l.`2"↑Tj?x?}pZ}#^Ov`g;suOXG=Vd?aɎ,98 &;FA„!\66&NDž~^:D94G?5?'?Gt]7}Kf{KG{2&?0Ӧk}{pmYУC%{ Qt-_ȉm{!%t f!:$&A"HRڜz^J[Z2 ť[t׿E9<1ȒKD nxQVE sD0U8[Cp+Ni`TR?$(YH~84 blxMwr IDAT,gmEFd}uP'_ =?m'/ڲßsMV'vzgxG9%~;z{߿޺MzKV38q͎^,gaNdLOو+/4sݝ]EAPNHΒ6fw6tc=XП2+tm! ֬S,#  h.8stF88 @m6MC=ŒNl%Ørt"ҙɘ5;f0 9G[5>("F&(9Ї>NQ2Lnch` f7 ΆìC]Tc9 ڶm Ɗof&J9gڿEq=QWw-yXY-kFnGAP Y4H"&fIN[;P9m;ܭ[Io}/4>| :~ŊC?hK>3||a|[{+z7>O?\{滮?~W?o {NJe{o>9{_[n/^_56Wl=1K~={^[^xNa;־xtSmwbE?{=Ǭ^nx~'>}G/[{2&<㏈To-&sj4,ݟw! e]) v 0Q9/,,`CI^ !24 RխPY$9V!*0ϸб}^ 3kyIdLd/Gуx0t0*/wYt*YH&Q dZyĬJ MpM?P*>Bpȼfi"IjPLib6Y(` v?v4rKݷ5fÄR"Uۊ&Pt_5 y@P\|b "f#R#g`pm qٲE<@i#d:VO՘(RK|H)f2fڑ7wi5gEH Ԣz)-$ug:<2dbyE0N>aۈ ~'XA ÎTbfȣ5 Zhn8Q{o]{ƍ_uÙ/8HWnXxo<+> x#w#څ+oǿٚ=i|/KTkՏ~S_tsn/MbG; ;ڙ=AKRO:将鈇9'd>8]׀lXoqѽ:!|_?GXƮɘrSvN\鄠h`0W<$y(( ˚n\daP"!x赢%|"z {T"Vhn۲1W%xͣM&dLd/Fyx֩j"6D h0-N"O ʹ~A㥍ܹBfAi!9[RFGOS%p@vU]Å*T9{](UG.Q k"oKJ_O""T?Vc1?~{QJ`u@Lf&-6w'd AB&1FOu!CN?b[Vٺ\M ߰,a9}sN3Tꅯ~sgshg){;؇E?(qls内3.lf3=8_ݫ:{O]񭇼ܓw}=8“1;h-C) q[8w Hw"Rɒr"x{_S56l, 6 6 s9 HH{2$]CP^Ĝ95pmHiW6]%*b?#73\Q➢>MͶ1å.;3`%H ѨdY=^#wY+. *k);" PrZ"[Fp"YG+A٭HG\UÇANkbĩ Ri,琊K^JN4W V{n:СJD]5 veС(+r ovq^\LэoĠzJS\lܨH$xY:`3$z՗藯_~5oթG7om%tS+wV +^Dw坼j3}53}[2ܺO]7ww镧}xY}OM}op;^Ǣ{k3/?ᔇOGɋe鞌)ΚESRJ 'f0SNU,Y` ڍ;vj^]ZS:>)H cnF%j8YmAB %mp`ޢM՜sâJ^`~tƒg=\ૢ5tTA31G3rcZp*Pcr@!~N)Vx-$R"gŜ{U_.}p>`'/_.]}/Ko?#cN9^|‰䢿Xh矷vd2jVb^s;s3/{U8{D\tgf'?j_<.>~N<d'[ыXtzex~swb~'c2rev%[ 1C,LWUSJ.09L՟4Ҋ넴un,σ|I)pĊKE@C:.f(diV=TQY6e3b$R-d/9z,9:昌ɘ؇8Lns/j5*Xɲ6ÄDJ 3'o4 v(gրRJtC=餓jE {o u@q(ȫ#BQ \h *" $4\=KNcP@1 t8T71cXibmz5 A9d{2 P"VBgJʚ2 PMT4gI~ ( %i͌@N4vVj"4PyR9%k:s)<1b#kb/p"ZpYsz*,<`+!:n.rn%mUr"{/>.y;ᛛu 6uo^~l[dL/_o85M4i3pK Β) ^a ܶf1S[mw_?݈ohAl[,]:/~k|Mפg{}͢S{ ]%+%¡۠:lLHn 9gfz+[qwROex5/}^*ʠ0E4As5A{CNXvm Bzqw868"hRIH"GT*A"u(yUXfd [jMީDDx)H6=G;565'"PbuRvDaMT5g2 8*f)J)i HX7 p@VZ9I gaf7x"A$^+bwX$=·OCc)%ng@,"JI ;hzqm>]"*̜rU?! NI»K ԳךSСdz' I$;j "*Y s ڶ PLN0AHfw##1mn}ivǙ 6k6NnRc%.ո Y-uZ񫠜# G@ĒE[i#8g3Q| Cm۲k8"#0 @֕s^^isl+T. ^Gܶ5.EǞ \f-wl/]X51yNdLdCݪfK,,%Yܘ@qF1' iMC$@IvŁ[2-Ue=QV9gd":蠃O>o]X4$CYf5錒=k{+YU+TJ}n-8λ#an:ya6&0`?M㲏_R1=Ʈڳv_|w~h0GbLXm]`bJXD- ]hdTڸ@)v.p=k|=y睖`'-~ƍ3R~VBsuxU3k֮DD3_TO,DﱇB~;h #*r]!)lKf4*2:( ;AF 3 3̄qTj"R-e7#]vvЋ:f X=TŚKaYE;ڔl6HCZvD{Q(Wxb ;Jj+g7YDJeR9`i,}Zogb7nJn@žEA5*@cRtXs4"ꊰԔԘBSg V;2q9 AF < m՘RJ`h'4#a) F(Ϊ6g(L-YX"D7*N)12 -RL^>{.("19R Rj*T;>i[Gn#~;J$#zoq&~ތ?ob-N1?CE4FD)l=q+Pf3w-9 ET0T쵫p8TK7m[0CH&j$U`^֣,dh)64V)eDi*dY툈Ga<}n}b~~΂`LOMOMOgs_ӓcW^%O'?%Ղۍ&$bSsH!@ 7[I- ی1H][(."g ٜ 9s\s:߫̕8G(Ƶ癆NAJiN %ܑgZpĩDrX*E gp;`ݕns՚C9ɨ ϸxBFbкdd_NΗ>j,Yud(\7DqR{B@6QSK ѣ*q~,$a@]d~5Q)V[:ss&;5AY5%&-+DPFI)mgȩRJMf&0]EΝc.{H=36SF#(6{0K1""(1;R:&K* uE_vDٹ R[)TL ,Ibcc#T0͆5MCDFK-3֒ӐP@ߎ)&hsVEIdLdLnlL5>fA[U%fn1%7H-̬> eL2ff"h[O./l:я}W&AJJ) MtD@2ҴjfQ%_6.=E_V`#nٲy:M]hq]?"Ř_.MMnnw{mW5\} pP#"JC e Jff["[mˡGb> ꢴV5wsƨe ԑGOOOy؝4`?x-„z\) ]RG0BӢmEGxd|Df Fp "y]sLX9|ˣJk.<$7XqRF15|0,ŸUpKE0|a9.J*GVq<)) Ds6p# ]pe@d(:!YXoRek)r`68Aqxv )'FV1($Hp15YS.\"u~TjN 34!W0+LRlG*xȏ/iUg"縚%oo`!->F5HQ+kbu['O IDAT?F\N=] QB6ZseрQVFXi^&dLdLn`Q" [E?j 9 0 j)(NS_֞qdkp{U 3,YO[ͶH xcuՊ+Zۼ`[k^SĽDIhMS%оi7L{]wݝsN)x+Va۶m֭zk\>77~X[[u{؋˗/?շvmiM{ӦMCYw]rT=mv;U+W̌s"6lظ~sӤ>hҥ;t=D7fzޞ c_ =1g^ "boU%VWX"J'~(EB e  y~~~֭&N1FkJU%Gkj.|QXQ/6E=(˕A8BhW\[#T&Rb@)u5jFp6<{PfT5žWOeԘ*zf?mxٱpEhtV) %xBpv?ŅW+c1sQl[*Dê*FPFD0`}t[0޶q^O0 E VET$Q;# sITЍJ2"| Y91+z.7jƋqkK%~-:CD t.U-]- ,h_\h?x#pɈz V6&7~Ss]C6D%D:dLdLƾT:D" e(%2,]i5`Yuk Z&73ԥ42(YI̮8ेt(sb-YmK7}!m,SQOzu`a^,DVMӸv%aأ~.OOO/_|ypݺu}p9g=|d0_+曟'.e˖y啩{ VzK_{/ 6mXWlƍcO9UVZcXDl˿pC=U:ڵEiƲK{ɋwpX. {Liz.nhϷ;A8ϟ엾>zuQf'5QhFa: 9`e`$-[9pK*q\ȢL/iQ0R 0%.v3!r覨#+ qH!r!E$L068~:5UNJݵV{VXjɨ:ˢEZv0E~}R&H]dLdLdam'8gXUJ%h|9Xш3XKDw}a{m5E#ؖRIyc>h5=pQG~/ ɪ[΃dfXl9l`~0hW|ƍ4A83תZgGWDm;??-F"aƵko翰bW]u>jÆ?ˏy'O)s^l_]t7m~CX6¬i6mt|mg b7+ͷ<3;yYgs￟+7p`xݵ~f͚τyx'dbaa~t=nvW~^k;֬9o./~U7{C_Wlwijw/׬9l񆏽[{Cz=exMcuο5e{{>>S+bY3`t3>]ltiEiA88J76-Od(]A98J Nr9P <&ZHف]oo,ϩpbY۳Ziu{MG> wngtVRz*9;`[D1B=wKr=Mz ]R:[3= TLnqjb y7]b6_R_JR G涷TJP2It,&v-3N)1 6݌Q 3)uCF1a3(WDdD|]6Vk@̻kNc'fbK lJElXXn$SZUl#O˱ F[g pJ.qlZ(AԌe_E!ʩ`n%qș85uG[AuݍHYFxQq+AT+W(k'A2a61q 2k$%7X#ՎK31%N&2qJթH,i^];ϲKb=lXvӦM֭߼ʫ}qϹlڴG7|moo]~l7#"z B[ŷv5VG[ޔkt>vA!{U+xouo{9?U~\{sN8@$Kgںԑ +q/jfwZ9OOM- twWنDQÔSL_zϞzȑ,[ܲy A= /_k?yiwӱ>/~⿹tYtv;W,,=D7S{LYt/GZtCo䦗~]=d媟Zyo-[fZmoz©k=tGk~ʣsqMk A['Y`)F- ú=R61b9YWJo g6lA4<?%ЬIlG']TfM6:뗄:!"ifb1Ϳ35f݇iR%YU>z**Ĕ1'WB|8 'ͅy@m[R3'G3N~c942)QJ7`m>$RHE4.{O-:5%ułY3`$@"CƩq>H"r.QSfi_2&{0 ƞ8&c2&c2E{@29=ג9y`Y2ȼ-53w *rtNddߚXc^8F{܃ؚ@D 09qSޚ?_P7MjL.$N ^l6gl]b=[7 Sow~HhLG"c]/^ݴu{Vd@=*GJ ^oƧ?;\=nK_|/%XX߰n=Vpg^ ?8q壱'`J??}{?ɏ]/_\U6oIͯ_tCO8ma;OTEw0Xp7v _sw~zmw[=+C7vܱ'߻୏:`??wƙ6S+/}UU3=+X=7o٬i5w<|k~qo8uKt>f}bb-'s$)5M#"YĮ3Pϭ1y  gP~=c0+3-,̘CB{K?B  KXy B ]>637:r,bCU*`$2 ( DX fi(̊v@5Kdh1QU/Tъ*gWk]dA/7QF2' *{K+UlMn@FN# k#0X綝߼unɊPƶty)k|kWQ, 2Š!:nOyW(LlМ l+6"D0h \]-̼h^ߦf!,G..KJQ7P,%Yod0-VEI%E4e"4gJ_RBGDȰOD> J6g[QbĢ%v8 0%eṅ(r !4-gؚn,NzULj%9=[Ql/˷FHJ(R ]$CP3'2 9]u"|-WHOw뛨|A8AGT Yl;9 >_qm21`TsvcR2\< RL 4k4ڸxo3c3UmznM'<vܒJ4e3}-"j\+V'p]X'[(VڪB;kiYtևLLy:tAސy[V $)enKrTk SmL^mGZ1`cBFD_I161v Pb RK7Kʢ`krI"a^yƹO'?}Yݛ9zѧv˭7sIj-"2B|t*7#v8속s=j _\t% ۶Y۵x^mߵm )ö,w\X18WD%[-3{ggg6m40߹ǧwnpRjʳɐ%6-8ƒqpIO?49 2==ea;\l=@p#f^s! SSS=1ܳEÁ5v~=jlv7mڰn-/z Kxуfa\ꗎ[vA?5~.|;x qwq)ͯ;i8L14pl]hL7ηg{pDeU6cY#u+Q@./oX*ƱF m'l-fg"xgpґ=53U3[n17 dhBOF C#i%J_ 9'rd ;bLp0,U!R-HwzJvGTT!,Z쬧ǝ5dMci2Bl8[GEmENSXvl u)oăS:z}Ze$0pdDg՘J㰋v0$":0"/4;  IDATv:774p`(W|w G;u貽*ʆW%ƺFC;?jCFTKf* cu +gq 6Kfx췤ēys `w_?և Usjބ^5CkPJl{& :wDI LcI:y qۃ;-.^Gt,Pff^Jw5+ iU9!#uuRqxac2&c2&cZHYA FGԍl[Hq?z>0ƮRy7~Qt~p饟xSJblz5j]%_%xsy~=˗/on[aJS333o$a&%ݺdv;w3K1X&M V;-\yiz'[|{2=53iofj=̘^?~g,{>5v =7SL  qVq1d0q JPyħ姉h4!DѠSgk}ν]TWISPܪ{ϹggHE*],Ł)yoe^/[n~O]_|Eg7o޵k"f._1. kKC7/\=.~VWhJH^CZY+?]x5}cdT6~m/z_x;?чt:;7e Ȳykn4 c$r/-DΝQ]0Gł0%"sss!leǃO>rţ6ڀ MckGW\٢]XC=N#@=F"(ytֈ0J5U[h RlHesv1;u n"*ÊrB9O5DgkH,QWM}*:khUkp(SIcCT HɚhmhQW+[Rq "DJ̩{fd\B\+Fz&2 'I43cIzbґ8crf8 #԰8aW"UJBL]3P@i)&G΄[!<Օ (11ͪXSݱaj ag4P"BР&0W.Ӑ#+ʊkMp'D$y:4_̐ w" `($E9u)cₕpHHbq&>HiRG+jMHt0l>?U. ny7|`;m!  d =-¤JfT7}  Rv/g.<~M=$g;V:z%L(i5ԫ .NʫoBjEG(;.p8< 7֬߸0!l߹m֝+V\.s||hEF}[#.@4<#(mDE>BY}y(=>y[UJp#N;O%_袋?^:m5Oܳ2 y^{Tcb0k _:#>jVu,u~.X}˯/~ 3ɉ]8|i{U矾wSngf;ԙ1 R?w) :1#af=%k* T]] Q@mrxgAaSAM#8OK!=`,84#)ڄ-C9LMeBBC":ݣj="(4<"sU=꒫BAl:(XBT)(h#XZOXoFs D X3"r@8v2t!D e0r22A8˜rOL0sa+XہD'e !&H gMI\j{ss@$"{01Y!fJLb_5(C# 0s*-D*qIgFndE 0 2lcH0m@* `339rj̱kg~Av4@:w_#*DHQ*di ݃6x$&UM JaD XGFQ@iKh"T3$̉{|h!"xOpsDlD ߼mvbl][B vny,<%Y, `㙚6U" $DBd=SOJ?(=Xkz=˳|޻l流v~+Zڃ74#y UcT}.⌤ϯ~o[qOyi[\y9^ٷE̲i1i у5pF5ߑ*ٽgԧ^3gΝ䅿W Uat:z^[,qȶ{p<[`yGtXzK_Rzmi>ԵK\fF KTT^ zT)7@kuNF*a _6+{T=nw<ԗײ 1:P;f-kuvx ޴n i@hrz:F^`TrF=eŸ($"rL7@E_G/4E|"J73PY'jF(20K"vwS9af#QV,8KF$gzX;#SC,T2CN%QD`n=Fj_),"H[߉#d-wv΅D{ (eQO"fս>12h?z"q|+Ka%!8\_("LҧD77 ɉ#k4FK0]LЄ#=JNJx ٌ^QBNqL,WqO,<]F&J't a-EHq["T9Jy] `5b4&HRɲM"$!8HAD s{ k&|ns1F^FUHt׳HܳjLbD4 " !wPp䱂핢€%^9 (CF PO8no] mm&/.MXcy8PfY.EMzLJ!u$u L(^XLlYhPGШe5 ?Mp+,f;~qSuͿixwmӷfD `&Q,Si}_UviT-6^'§>}~{R#=/ԑ}~[^CC ˃F-wy~F}ŊᱱoUFќ=5paD2x%-e- 8d]fh̒٥_.hEC{ʥo+3!.Kz(c"}u꤭U"b0HR "9'W3+0j"Cw)[EjV\7zbo{7x#3 "\;{٫o,| arz]5d7AL5 &ƽ $ֽ>4u0)7 ѠJ >ߠ~{ MC/R^JSDa PY$V6MPW"Q1!< 5A'>"2QEܠ*B)QrDA9)4ҺYdz0%KLDK`\SpIyn:"R8q\3$SEܢQ9W\?bBJ\R\ODaF{KRm%/W DDWJ$Qq&e 7:udB2!/Q1SH @&@m>Q PPA#oI*6cQ{'HIh3GDBD¥4s'< OL9웙Eqd!BID  jǏۊ{k=DV29Dd I`)j 2u)ܴo^5 :7+EC]yV=ßK^`>6XcyRTiKV_傤+1n ]f-h=K-B=w``h`~`z#CheOwO_===油z(EXvs`KXPPçS@֌)q 88s_]=<9yfi43WK^J!Zg^ժUGAǫ[w*)`?^oG7 ^@)N}";bN[ŧBjymvpkC`3f~EQUS]Tf)} vKKN[ jǪP}rCtʱBAH):n `]"d Y͊ _&)u@ ٢b;; QխP`U6=%OK3f5" %Ox5U$x==X0%EJ{sBbSJX:tʺ N' >#FMTL-b4 V<Ɠ}rGd塨F9rj݆Vp Q{@ ]J/E`` '"2)w &^| zaB<|Zy+VP:ڣ6#ETN 0"891 5*P>k5A8Fk[DId!,+sl>suƑfjQKE\ЄHD֘\\TMD7 dVrMi# %(eO]FK-Nj]&Rt-,;S%XLVS,썒3ׄUz0 ps wT 6sV5?}??~q\lAx}GLLND !8T?9;VQbE1Bi9#Z'ABZ6 =wS$kJ9W@΀킋JVKcQS˨g4{[3-R4EF`N )_#&A,u⤍,ќ2YRŊTq4XÊwqX 25#HE4 ̎7ڝ1$F())3;]dޓ4ՀA] - 61J嗊eSfAh BP2Q$ay7N;jdˎp#e )C*}#v83!Fl D IkOm (l1#E a9)%Bg/YeX$p8,F0s)*#1OcpBJP{QijGeL\F+%6QbrLEgQއn'ojԒ2Q0CZ*1c"Ti\ӽ.+P戎rʢQ`3#(T#yuB@tW^s)~F3lBĦA ;;@ݹ 1X5*1D陖Qj!vIMFz_t1(.UdlW`eWj ֈ@D%1G[Xk0Rma %W's3Qw)H'04yq};&M!H'#|=k``k6kIٖ|lOz߿ݶIRA۳W |V!:C y !TU9j[/AP.P,8]^S DDΑf+`||/>87K=X!Hi_MaGza D6z25Gc[6*ݗZXt:vf;U=g]Ş"E̴njjcvd1e#(K5Ҳ *H%BRTc% TDCbRly)͒&`gẢVU!Ch]6y kUk9/Z*s>_ Nn#lCA01!|UuV*dt+#I%+B8A7  "գ"99S|eT HabT9q( ʑ&at⬔ K+g (fM;AYҧXfwVH"m9e$(0A"pt-Ke [9JPKfK1p)ZڤhHHLH– F!s*1J'!:"΂f́@\cW#D"(G2\  l\Hym@<9yفj4]T) R7NE|)׮gGv8;ʈ|`Y2P&r` I$h H)cH\L>K~yyw|gji"Fި7{nO?g%}3yCT꣏1 c{.]4Q☐ӗ䲅Fw}@Xc]&'82Zw΅g?zal2v׀|lÎ>zjWk``wLXXM"| P 5kFGn5JEGGDЬdٵŗ*Kõn-s:)e,c'j >U5ΐFV~mqӵOέ;gH+q=RQ=4:ٝs5wouoYNTlubeV>w-x KHR+ZJ->$t"Y!B@$l9D7#V@#x*4E)~v7iX;&so( %kPq1.艜@l1C}3UE!TMP h%’)#ͺEQ2ʪ,QQŒ@N[PvB 4{TM8DVvl;"i Ј4Dͪ0&3NU0T"BzlC% \{VYNj90j)79H-VBrNP MT$R,KHX`{8@uFP7^f!ʢ, 3ҊQgW{ ,ɠ"S;4=`rMok1% & eK($Pu$E%!Bz;PBf zeVqgIMB#bJ {  u@!vfu3 6݁UDDБrBi"%&$9Ug;qD,By[ [TWs,\ĸ@!޷֭%ŲTW|Jr%8iOx,  w f=rNk(Uy(Ia@=/w={oBpέZrxxfggwܕڵk5h4j;vܳgOϋCCCVܶٞ_X`73o155[Sx`~ltѨW/f111kD!ܚ5_vn/hԛy/XvH@6l8l,  A;2R:"/L9f/3CL"=3y5Ld``uƳ[?꯿yu?wlua5׮zN7ꍺ̵r~uD暮j)V3qԩ'yͿ/:v} R!"'?QAFx}-solfѥ^ͲQ$%AMi/ UGQ֪2>8i<!*:g,Bxp}tD0c`>nX qe&sZ y2tS([B"1TIff&1XƔOWC\ad K ?BD0Kơd{4 zXH8#g^FRVD;}9S(5p}9BȄ }GXz=#7fԎPvyxڑTKWu-1 &ҋ\Jn/';?𡏴ZFqkJ߷)vyM;xʓ[:b׮]?[lyֳq޽{?O=}Gz^ [j?^l|k^%v#~|bbbx׼z?99y:cF54NW?tX S !lݺ^(앯8 sQaʔ,ow5o|~G}tUGP#}"ۣ*s$BYg _x|b>(2Wᕖs<@?jz'~q[GFL̅|Ն?UG1{w 8g. 2={B`Љ]۶bε>H`rZگݠ<8G NPLU6EF#'G%Β1$J.t WaBۍ4-fgZ2C{9RTK%DPBHhU%lΕI ǒ2eD&4 0Lr>\=iA! 3+c@ʒTd BʨD U*0Qqڽ(7#@F|@Gg Cj߈`̔@w ,~N}:e20d'19v1xb Ą*I.) |1P7٣dƚ b?lXR)>\T$𔠇-oWj&K Q/`]zAa40+(%P2^$M&%Cw.{sְ=A,YݮYBJXhHv3$i `|.}(z ,+NXt4< ur#k7v;NAdL C50*n:-?fT!2~a2g*Rڑd3{j.׽uY 5xK^0;[kvS|1GP`;lwok׎ИNYf[wUI˹Ku],ݨybݏ|ګd~k-şo}Ǯs'=/{3aO⃾qiw|}Or랡_~~yixʓtM7}_^ǜ0~ڦ% I*ཱུrL LYDY uѥM>F\t `laCm } e3\>|=ӀЗe`pWUj_SLΆfmnb'P ŋȍ7L&Q&(ԚLi+I <])PZpΤHD X1! gYZKHѠd -5{jr"/2"=QSeHc,YXw_knL{ED\0(>eDJlT'#S-w.PwT :SZeUef{es!)ޙHJ'1p2?A$L1R#Ć=hsd1!{V9Ą=1nԘMD@d +R]QLlhə$h1i")~DҜRVHrA'7 VQL\Pӵ`1qVTae9X&%D픀XTsl|j DB"5ͬ"a W1 Gm_ϲ,UњXA 4=ZD3"Dgp`HRtJ\Fses-i,$Ug 䖢`J8#@83|"Bv R#-[f](eR4TU)=+8Cb"9G xI6lhط;3#@F>Xs+ x -`(]r%yIǞN=KCvOMڹs׿_7/޸%?z1LMMuo绳3sj嚫El+[ V\wv/zOwn4HB7/ݺ=yǯ_VwM7|x~?l||V%jz"Dt#[2%mB?>~_<_9uO>_xno?*{aO>󄗼g7}?n/|x]͇ 4A({20.`S,Dh0SU(˒6g唚cp7C}'Rx6Hџ ֏X55;502lQkfnߒ ivܱq|mm֔0dT[\V^hkrcy,1f:XRq%!Z(q01&(zu5Ѷ+0Sj߅4LNŽvMjMTH\@$ܹYa11DL<[Qk`&eS!H)31_)D"!T7't]CzxqQDđV/ЕF PQKL455PVLS'"h>Ub.q$enCmޠ 2Ďp:O+X+R*0A,\ݔ'R~ eIg`prY 2$Bx R4QiH5%:enc)%@@M(#;h:(]H,pQR1pEl u^Bw^F*o86=Ѫ̐8QbPuT _5MHtnVʠքggtމ>##-t"F<+{ixZ0ZP.G+ =R!4vrtCΎ np`ȊѽYfTxn `z#o{v!2 Z{l6/T$w#[nw/c8W/oxbӦZtq^F iG*v{>>>޼ic7sg.~OYz+ #ȁ#v,ݨ՗LwUG1gٿ)n=7C]_=7z:777 +FJ+|;w?Ǯ:ݰY[W\<)8KuQQ&[{@8h!6 9nj”7x\jhx* > nXC7pCb>5[~ց9]fv#3=]=[3Pu\k WN7˕XbjyMF3L^(bf6_RDfJ0P 5EoBЃ2@Ey#tXIR:%iDsdEulA櫘U.ʷX BEDmޠʐM&#._AX2%!CFR.[7R d.Vk)W_q@15*Ԋ#z(!xa%ˀҔQDXch *t"UN‘vuuKXK/cEQ6svT!zF](4ZzUb֟)r%v0V])S&FBz[*KVuԨD$"RQf9O=/!⏢ /X GB"dP7.ڪ#ݤ"C M;k-WK+ eU*F-}5YzHO7X;$8뢳TdSTJL9Ea8K+w%BE%+](׊ ͛~u^4(8k;_r=ղeZl`_<יzθ]|[wxk>W# +pP7gOϚi}梋I XQ9 7iWο۷3я}^{|k p8{ _-Žbtڭvuq'?կ}3OݓOx`ؼN8{_AQ9`Jn|Ͽ#GV6tᛎ'ɥl1Le" NǼ=>sdvk*.h.#crXB$$"X$YJyMHUD2.5U K{EpYLE`!gUuEP f9(RJP `U%,qDE!1ŬG5+[Q`fOkuK!"ꌐ5,*xe_X _8rDn\s)V}5̹:$tHJ#"$H>[9XUl8TF#%sN<\VHBhOAQ;aڪ)B%9edY0ٯ5_e4.9ƐQH1S4"$$.ӑRc0fy3G/^ڝ&-Lݤfb) ,=~iDgUSNQ&BGq-+._Rr_6"_R!ILgDRb|]&1r:SN䜣4B*6FAD-=&g*t:9Aez՟|C)^g9ABk+cccB^pjjOCCCpY鄉]<84?oB,L# 癏OrM_9#zEvB!:___"*Oqs٩j vڹ9/̴s;hJp%D*˺*bϙ.c 8Q K8&Fv]`>O}~_QvM~{{߿hdL]|xK^pӥo{Y׼!~ݺλ@Q1m_k-*-s%"O+YiTrxB0'/$&V&ED{sO|: g ͌dhaH^o o{g7m:9?m Ȩض~(vheYȂ,8&Vգ=dA*cy,_ %Z*4*5NseI9 .W`"-E<{c>6Td-NM8`+JH(l,D6E9t Fd*BV/DOHB/G(xN-B/| IDAT݋43' By-ZxP!d9@E^b%1#. DeEiL(_Oso~+$iAW 54,S5KVj:&)SIe`Z15w_SvU {u;D&*!AkYbNfj @. $te^GeFZD|rfș'_x|R[_*Lc3 CP ֲYB 46#gKQH*P;LR#Fa (k+bIb+zF z EN×9粌7D}pQ?QE +'-(RM`ctLܓ`Z :qzV@r-hcr ʈ,|e~=8yg}k|Sٽ=汏-gcH Cy>zzBBУ/:$뛘 j9脛!)b$(O=V&+Xv;A"l av Cҳ^ל;j"`8>aD."C$-lXB St|1S,Qz[ hԵfèǧ<}Q(5ڭv^WCr^m/s[3ynwjjb<<\Ƴe%߹pss&돿iO; y?p?6;nz)uzM17;?biF3-?W[ʆ%y]ٯniPq$rЊ!+U0,)RVm]?4tiGݭZ17@_z#kWWWC#Voې-5 u5v{fEq@Q3BA@RH>Cأa$^`QT1**B1JMg~@ib/~%>UH!N92)lt;c&ۑ 0߾o$Dp],@"] "hPdg&kδ@ kO@eI~dz'LN Y[<} z#Ǟ #Z;>ܻ;&6굼NMKfuZ*BL^Ϛz6S} NN@_%orȋ0sjWCv|{eHW eG^<Mg>s^g};v}3xK^ri{B >`ዢt'F末92ꉜEo!I]n zr 1sZ>;; i}ן^oZw;>>#SSzyi2 ~}=~9엾s9s;/Oy.~c5yŅo_gy 7~+xh_,k4nEQ~'K3&r,ˉ.0W^YTsO- ^bRst3>~no[ym_bg&[ s$w3?2><{FvLa@h t:-e}ync4IdtL{=⑧]o힚bn e}Xp$KTwLሆ93u1T U'#TB,jC P)/%V&vQʁāi3n 6RGK@VW 1F.hX4$CJz/ktҘj֐0"j$"^+ 9D A RԮ8 ehH R-!,j 㠲R3XW@GIj NKrE DuTLt9 !ϓ+VN Y"" a.V~(T!PZu)9Kh"%[B vk":UDAc쫥 r9"$V2Ңq:"r䒥(@ L-=lR(lWC$RlD80$ ~xBtBe&0}pb)9,DFб ^@!>G'N^3]_5&S4ő6ښ];-R(Ι]&YE MQVv9v؂(G[]b夹y륗~Yz. = W}H~#}kଳ~5_k kӾU&tFl5BZިgLt|RW:};Lj2+I\6"-mQ^Z]gYV<5_???;SSO:q{3FYi)fYn,U8 'rAUk7LA%wAnyV{/og<Bľf#w}K߼y׮]|!ǰ'"St(,&- vp?^_Z_*!y黿gl2ke>v/z׼UQJV|ړ?/+6klGٹ,˽v/Gͣ߸v \s=l(0X UjHylLْI,JRVۃ]6v7!lK/j\NMDq4=4j5wnv}`Hrx16=y7XghCXI6_$9F^펎:rC6n<nV*4gXE;$Xcyp`&I ͠%w4#Kw֧vob%cu% 2,'y=bIӈ|(4B,y='*eJKbLF+R|JD d%ŢEK&%GC&0-fHQ& ~5FՈi9C4v-CdXCQ`{m7V$Ӏ[)ENG ս!'P@!VlCF1JlK <]W]h+˜lQ)a1Ob CC2`-3`'qK2'3`K}$""P"UEQ6r,<49! c\.AP= mRRkeYԹ|TS+MJ/9q-Q@F20[r!iur0TĬU)VR?I)SS+R)Ô柒BP isn*y5,n%^/īH>/.@V"RZ e's]Wؚ57>;mߺsʑS{eCȨbkpąȰ~M\^~BY}ݽnuZ9G8ԓN< |.z˛:<N8{/;Otb8ܐ5 AG5&زHصZ=m㕷2C˯/~ 3ĮwG>w,s"}d9| N "ээn/x^g?=p?}ˮ<}cy`g]־v.3NGWWǬK2>T;%G(S<#$Ř*n`KH%+9&]ƤĨqH(!`a1;ĮgnwuXcgŞ[wgI3ణqI)L1縇=~JO~zm#H!J |8z/^)2Ǫ^cy,C p>*c0g0VEgi)-Փ)4kk(f)yIn]QB0@RϘھXJ+M 5cof4`du6EL GJè.|sĉրĮ`Ra) I3)7gK5T鄲(cT?T"1Kn=JHihv::16$p2nK|DbV3Q1J-4K%^ DHNhh}Ã$h/i A"Bπ P:'bJdرF9Qju% "$IA3,J҄27$~?^Qn(:V.eo".fȜD}c$;{sNa'lJ(`0a <&`q$  1$!KEVy8;yo9snuJtg޺u|71ĜmA0C!sCf+?S/VD. L(A՚Ő#V&#! W~ 'm OҋVVWkfffg X[m3*H2 ]izzxqMcTs˞͢,NojDpj⦭4r,b$7UUڢz"bC:.|-"f9~ 773=w_/{ɹ/{[uA²i1 _(\mfq 6S 3??'?ͧ卯OgϞ=캟d91FQU~{2Y6.q‡h{z', G> a;R*[״AcP`2bʹE:o}xUqIvuAd])vQ^@x%]{X/ls~a{7]z&3Konr#ϭbXE nEBw@qGXqe։ Nsg>Gmڼ01@E@.QY<$4Gc4F^8 2df WaNْ@,#81qK˷ama:adl0 9p|3QIGN2.oRLѹ߀٪*ݿ WbODTUX+[6M8xŘA~Ă!5DO{-ęl҈Ҥ'U5L&J֓7PN6g2DrT8Q;z8:$jeZP;i}61lKIg{NH0K-'l,Cs00*4DQc ]ʎQ i"`II`1ڽF擆0 E &31¢(4O'0 rQtDMDQBpbo*`H|=ل"ͧ>/U˜bӔ#w +"[ꊢ&2QV'1IevIIrRπU@>y[s7$:2MrZ\G8VhH?7n( j}տZV}{\s-\&ׯ}vfY,n-0%Mn;`veǻ<9kL,Moz׾N:d W}~O'p䚡S`5>u&'V̻4Zfz|[20C՜\vuS{zҹ/{GeJ>(C}G]C=>wie/}峟6U*o9}{^] ii ) ENū)^VþB[RNv>`oexvnMux~z}Ov/,O:{Qޘ@3ӝ6Mo[j,8yf)԰ !0 Roe-}-:121,LińIaQ)ppT; HD"XmfNU :HyFtɆ"F/HAg8GR?p ]y0cQiz=ksN$0G CG X`4tbn #}l1AB 9~6g`+QG FeۑO|8tpZS^JDkN޳~7=Dh_ty1#:`nJV77`Y"rc솺11'ޝ҉u LqePLmCE1lNn&} U8"tv;3LtMѺC7N $IDb. ]7~q~~~v[)ޚ̵F<&9$xpkHB$b`>V(| K.B17G/4ht Xv#Pwc`2@%WdJi qv$;r: o$g5pM " )WrM!"枘Eb;Bq3y|ߡ+激P 1tIy MB "L[HXU (U@H%Y5JI9h={t1 p> >yuEP //Q$H"<.vXo_77. 7']v˦àKE\AB!xxC1j6{nyXLH{/\q<}3hD AtzsE=E( ( wާ|3mOzeah0V*|n*lѬD~zD#~ĺzGyyv/Jx^F[C`;%`).!94@yc^0%奛;Y#4`ݤ[Vp,~E?n׈T8-9ەJ<#$OoDEb4T +Qi "rv"Fr(;*x3 aVPS<@-leX#|QhęGaZh"["Y!x`Ӊ>9P*(y KQ?f-R;ѝId&&%@d)YKx&`3+-`_2ϘDH1ANJ"4 EQ!qr9FYNTF4t>BS$H9fqZA6򩕿l\dVM+yu{ y$ck&?rf3-ףb{}OGY00Sõۍ( ڵ{[}w.&\o7x61jT(@:9~Cq]=D7n0> I9:>? 87R{O`"h {$VfWUP**p"䀕|QOj\e1r Α,.ݰa>X*ۿ҉M.~[;}߶mnm70O:קN'Q"eXC D,.%)Wx≩@9/^ iF{|Ʀ׎_\C8`:(_FVyV AlcGEfDvfp3V7m"ݘg ځHH<={8h/S9:E4SdDAf/^1wCbAZ)"?XL!y_wԚ 0#c"K&׻NA.\3+cGꉶuB@F"V}&bBhF#. ,R)f\ D]Om5@F" 4kxBz˜(C"x0hNC.:s멀"Hb,D!~T*RΐJS;$B Zd0*"'1_`Uxg`95ƚQMސ PC0zf&qX򝅁x ^hI*uJEqrR':8N "! G擶y@f+3dUcViACv@paJI`L2t΅'=mvhvͭ;ZP=?~nJ;ɻg,,DJ6bU}oGn:JC7n_;=m`~] 8(*K4jV_v35͹,3pռoQJCs-( K+;Q|W= sA_7FlJT=kZjsvɺ5Y1k5YՄfE=kX۽.W*nn4~za@ NpEi63TX4{N:~c ˒X{cQv{Nlo/C:A 7}jp[A@;=w uwƀ@< NAfƅo:\_‚P]ާǫ䚅)Sǝ7zW_Q z[>W޼{|E?_o?s/޴{曯]_۲}'s^-Ͼ[{>GH= a*b*@ɚØCIC,Wjsf =M)Ðb\j4IZ 5 6*țU'@Po}!a37 CSDrZVB7R%DBI8* P P0kqҭ+nӴmS(h-ONX{ g>cVՔ㊾r57L#~o.~_`P[**/⡵":lL4:4lcj`^"DKJfu$0GilX/a)*zcHpctX;FX`zD>bӍ[H5 m}Y]qaPADPyݢGÔ#23覰FPf*09~^yV]o8_<.=^~@>'y^'w*Nh w{eoy~W5z:\_?\9?h}_Au)3&Yꌈ}f9Rkl˙$yܦXW%J'~KS}gUnb(@C+{XP"_>b_;# ߃dUUiZAA[ȢnER ,nCRt44mDG)(}:T1C^}6 Ag΅E\$o3V!-Z(!އ}%(zfkjD<>5yH 1|_EiDqWz C I 308j -{@RL%Hά;F^hexkZW \zs;@uW"X! rse (8瀒TV$Af),#eSМY>"ŏ7`BUhyUR0~RWPm c & 'p$ F+d&:ep瑲K%I@~` ƃHq%YLcBF !#W€9QfP10q9gDaH{itL6MQMG@:w /CtzY`BVPS^IdDDTҠb"AQ03k<,y(9ρV> KSz&C&~IA`!1+h!1gZ a;eя>' EM֮ȯ;zcct0)7ةF+ڳwߥ^="9DvΩcvF_u'=tMR6:#]"􂈐:}`MWljnEi7?Пx=U'.TO?7H_2 OsvlK(ۧ@'NmEFc4~Ga]jդĎ'Z#`bh&7ʑBSj6:$]سYYFND Q)EhVD819O5ch&ͽs4EPP828-N!!(dvo^h!wH,,0H!yB$Jh?XFԣ#`!ca]B%Evҋ<PH|D !R~DQz̛5,6B]@4lf AT 3#N h8}.ئξ慊H}0U"gq<EcQ~ lȩ$ Lm<9'`& ҃7 !TٶKrJ?)D& rl%1 %oQ) c&3S Hj櫻CTlR3NLDx=lɒX&"R[R؁9(y%殁D9qIB ҵzJ.T|?&}`hVVGXmBMg~@B &jcnO>uvn_KAN96wS604םX_`mn-:Dw5۶B԰Lr !8AQ#U@EјVCͣ11d dFMkY ^C802:*$U)H0Rtv14hꈬ _WI Us߰vc6^?~u&o/,.-Ov\/ 2(,lH$<H"/@ f,eY8&#??=Ȯ.}Qh@oh!¹Wp\}e]s}7}/z_;y<пf:}Fks4Fa6  UfYT<90k Dv= аڷv֌. K1q=zjW}vb%|Za?G={Xߝklz+{ɇ[S(,9BƒŤ(!"D&?r[@Y0/Rb6  !i~WP?^#1~ub`Es7TI>b#S 1qT84C$U1J~P, [L9Y="u;~)#fSsDUU,7T9 r@*T@DX8HxT] 9hGp5bP[+ >3!g`[P4# bIg~%&(!f (952w``#Z+syyXw8DQDe y")tҦ`uO!2K+@g/O!vk냵Pڐ!D$sƐCP9ryDR@AɈU|b8njTxM} klx, +(> ֽ_Kӛ6v%竕JO=Ѭ#'eJ mA8C85Оtp-N2"9x uSf8>4Gc4ȖLIA5(.QF<3# "텓s![Y}@M13}!]D6/뺓1~gW?=7 }rOy݋',|>5=  _Ѥ]n%P`Hџ:"ٽO5i>)u LF1" @$FbD @h6ԓCBHL+X O hH*r~T .R GBB ɜN-5VJU y&@G` 82BW#aٍg;h$;58ꗙBWU FB|A zZqps^Pv󴖮6АFu4 F> Z}HMYBQӼ29G0cI-$Q6&AgJ2OA V`SԨ ¢l^+B4TN0D n3aPҍ``FcDE.͐Rf|~m !q HYvsIP IDAT[n633c29 Pu5I:>Xw7\cdQ#֭Cxn5D,wݼuv쌭ߙrY ,ą̢5'OVx11@pC&&!<0 猒l~U|\`ݗ(bSa'Xd׎kX/+8fWfQ3x w .yrm,,/.{WrUiwCx*3맊>kn}H@ͻPHVPwqڛnBԃz?|/}yԧ>p>s.МzWwwÙu|@Fu%Oyշt6l>?~Ϳ~ϧ>S8Y/x|;{eׯ@>ox?3o~~,v7?x;х9qGx##Ƕq1E,YYQ]cXwIMh{ǍD/~]??ʞ+^kǿvya"=c_ +RߣS펿=PAqX?HB7JnC` }+<&s^,T0Uu/fI̺5A!ħ}ccbkΚS? FP(W.b ,Gj7;@ .9Ǩd(NLcb;Z(s[9d<5@5Z̞RGՇŕƘO ;4(v7C/)][R=|8cq9i&ڊI)RW^HgQ%f~}Dm;~ _ks 0oOwvv[_w4wWc Xq {ZeQSRܑGwk<\vËrxШH*9v[nxs q膎=y흾Ńyƫo-up<9с_?8R?Fc4~yt1󕨦U5e-n$-Zo*ϐ"SrzɌ^MuKAИ$mE\@O[ˡH1җ JL7 T/%!3[a Qa ݜDJXTR.멻i;]3Iy'"Xuf&m#8*#rUc-;h INȂe >ٱIV/c"/Z6ֵ!W:3oy$Nȥ Z ITk CG)46# ӜPɹ,cn&N(MZO耓ZTd2[Ē$4h Q(`_3 ӇLvpIcՊc@@ ҧ#V/)+*R]@$V>X.zsHd?JYB{f"B4<"6V#cA;(m"KCSEt,Ȩ3M<5e Nmꖭم.z-Ǭn\ƅz[9l#뮞vU= M+o7zWĮBG@(-C%BER,De3:1 vsz F m6;@sK4YV ƒg* )vP,PBGo6c۷OAm[U~nǮS4~-޻oJPpi4?W`.nv K!5fC@b0!api>FD9M{}Pc5hhˀ48 T`P<YkH-,ĢX R*e)&*xu!_:۱ǝr>yK;aJT%ez_GL'OF]Vkji;X8;ƐB馆pf)1qv!_B=P̎sQйd.=WPjX'0;_NBQZLאg  xK KGKP!9 1Dˡ#rDI!DZJ48-)D"ݡ QEGLf HH9N cQёsD+=JBPGb pSTU`)]3~43:f KC١@ H49ejKNB%9 ̻Da0ފn FѕQ좐:ˤL͜}bhg5)V?<8c! [4_Y^5 V"M!r"’Lp%af4 YH@tCJ@R&, yCz™7jU>dQ24GHK^[zW0;F\ٿ[\47O>LtÍ[ם|ٿ9reLZ&H ~u{ggoah$9,Oh:6{S9RjPfFhh;Dð 0gOE$̪{թr ?ߝ7GMTb q-q= /+~[ [_\J LNMQyrwǦ;ꍵ`z;ӗo܂_fS]yqlin>|za\!diWt a^/m۶.wwNDž^8B7Fc4FNFQNV@&^ =RtDZj@Y [{Q윋(zkL~W>ݿ=5s-cjjk޷M.o?htA5J1d 'eQcCX3hU,jb;\ u,Hbe:,!ů򰕩ڿz_lm͵T #*j"L܉34!r}*q sٌ9C_rH?Pњ9.d-˲̣P5Mfdtɐ.c@r!u!*)YOF?Dmy10Cf23 M{adGb3 ymFq 냙"T!1"j:Tl33#r6۵&rz)&@Z63e MSTi^ xO2sUUUU5(@ӝlfeh\ T13jHQ-j2Yy-6ې OmRLB #>eΣ"+\i&d( \erVv6zgkQOtCYVVڈ{vmeu ;i5OmOM+le/LOHz ,K olPC`MA^hG66_~5G&% Džq4Fc4FV8%<3nN|0$Ɲk:F+ܬ/,RE%\ZJ+ BG^ 6fPB M#\QVI,e 4'ॶ/y.cyf;zBs_xʋ~X uyA:uj`4pYD-HJs-z;6o LqH(!`a⾽ܶ#Ğ/-7]{rm*8h ry=5Ф;K[2J֑W(c4Fc47❷,MrnW8dfRβ, .}(׮޽{Glں}{֭quٗKZ"}& 7ݳk]@y70t!-Ch}\ @Z&XXf EIv{n#h 1PH>9L` Cp,1 ,llB&d uYR>ۍ20QPahNaɖ!žω9h* td QN sSEP$p14KЊ)hnsw4_A E?(1>i<[d҂Afo&e9#x_U!Թ'R21 X9P_;PFrEJEDg6B5 @&CJW49BAmD7Fa)`}B8xNe /,DH%=}كMC47 rzKW8$F@C,DBVadUrE0rL8l?! s}, ĐBRA@DetAއxqU 3 PEQCٺ`HWU{E:!x=h z^Øj~;`h[7H`E R($-Dh2呲 >w7/r")i+ d\Wٵgqqgls~a{7-7MzN]‰v ТPx %_ X9@iOc.,Q6 aHh4$*21q7Hj^v_ Fd[>3iNnz\ڝ6Je4F|yX;=mޯ YE\jتwBE!@eC՛N”1N+/ž}}ssH=*f'y*TV'@s)!Yv!w>묇+Vn}ɿ~_/Kn'FQہ,"iz(9]նBS-bI<2&Qk* $ t鑤DČNߊ,Q&&㯀 Rt0?[Z8&$\FgF `AMS'ԦdA%;08 `Ғc8=I_%D<|/ړ7s, =HȐ>Fê#5L!SUU*H2ͩOwƆs̑‚S^#H&#' dF 0~x}ͤHJ+h"ۼSOj 8C"mhaϬvB5eCD.@Rنν`@DAɞ):_@mM-f0@dPbvbHI<΁%㔨lo*D+€z.u[d ̀l*XR 5}Q7Q.!ŀV@crd MZMlqMpBp_z]"Yo&Hؙ-,PX\onxenMux~5[==lu8SD0 V ̨8#G)b|o q?F2dA '~;ky=:a%mk?|w`1:0R*Y1Y^D5xP-,Z!ɴ5j*GŵXC` -%jADcݕek%GHBV=JV"bhU7VzCfĘl S?+q@Om! fZyXPȈ9,Cfx) mnsbuTn`9Q<9hdAb@.g>aPWqaw}bRFT9%&g4KoGX* `(@bm/V'xԓSL1":=X)I6_D@̲9tYGEj Q45ÓPq@jtN|tG^*RT8b&a.HфS"r?kS}/^ϟc!)5u%!d#A`QeA}28x{pˊl]}QiV cB8͠Q> BЊ8b FF3h"(CQAn᜽kUUι ~~x.gڵk׮]]zߺ^&[rmXcV gnSVh!P Yd5RJagWQQ=SjSv[nȢVz[cTw/ge^q{%KcavjgÆ?6 IDAT};͵3CC ,e,j0(12d!cWK)`m8 ڠ=rAj{dJ\%>Bn/>7؜I[Uol+ZC7r&SI`-L#Ln9biޫWunZQLSՔRh:"P˺FH')a&)TZ)fPDwR٥pM@zL(x_Z|m5; ֋{o2W\{wcÏ?_a}mmZN?wQ1]3xU~~ͫWd;uoGLOj"\wÇ^pUO~k.9{}DKz_{C>_XI x9tŧܰYG+kƷ|>sΝ}^_~~9O VߙVdz=3ubt(+|>`0 EWrVҡ>#=aH&GPhYgtSYJh0c,CSƼ7`>T7,9F@f@`-Yr>H81CQg}]6 A  Ѩ}J@&2ZJ& C5AU3 x"AIm$1$aEsU)Nk@?&Lfg["AkէjDYDW;O  b*j-dFѹ^tטm4Sp( ^ d7A9҆2lSBEp|dJ#׮|QB&uQ~.@ExF]¤gT* _). xؐm #XF!w6}XF}2fyY!X133U~tٲ _.]n m+ku2uyn+jEL]5h5XFgS㮨BbႰknR@tQ *T W]Ʃ+?o\4AfjJ&9v+3SMLjJKձ=1k!RUUQ4ܣ[EhtsL66noL$m%S-PWT |w-j.Z+; d/Z_0=\bJxRi1 0MA1!AQ]Rh7 z,>rkǞu }>{]_y5C/ꅳc{r>z?ꟿ=%kN'_׿Ƨ>8[Cvׯn\w,+љW;by:]ozO>ln>}׽Y|~ݛo~s~cFFsXN[/=uc?8gN \xi{}M{{_fC~ۛ_|8~pW}V\3[Gp211;Zv8x1s'f "bʔjHu:8>>>46CGU>7%"L> 񀲆8/Jk(Zo*3;"&LNMm633޵;f1A l(!tLRY=DRԘ!HC\BƓ4TCI4DXL;x1+67OVv#0IEO`$9TK&|5&"b>DKcB\+MkJH6GNg/omz{n7޵|RFmIMjDZRh - e!9r+~PrrF(t17:[Î> }ڟ|Gݑ_g7PsmqS/|fHepuqFȆݙs!?B(*1: SO2H 6N3%WT7MLTsJ$TLq1FKu1uZ .FC_btw)U-{\jLJĄDn\TA;qe-=;A}[O7qʹJ/>땧y?bS??,'am8 g|;uMG<`ۋ~vK~oK}Ζ aQ͜2gMwsvlIc}%E;ao]wh;k&ʏx#G>mpk,‹&.cV#Kl^dnԴ֪unj(GB /e17 - HU(vYk,YsE kCG9SOTka~EՋT$¤B*OG30PFp lw=|1 0)cHaydC4͙ !H YGzZpMםRU!( j|9GO 8$' )0ޫ iHeC=*41ib5 JB)pD(LXEVusj".vE8"'0oŘJcؙ:# k$ Ǥ=S3~CͳpԣUQ5cR0eBLJ c%ͷl+_;/79+oK;)t烣w(Ϝu;Oy筀|s>޾n]S~ l\es' =gu_y؞;x~<8EgcV蕯;ԗ'-Ws{/:[AF8:3+\D( Eis{(x*U=gNm})=QRGr70UO_zO7R߹|~cdF;퟾y75OީuEswo{G,vx36/# 87pX_Lt{Ύf L>8&Ҩ ُ0^T-6'b%D߶ĉ;,pL~d# A~^'hjD>m("XEN0FhpsXTWUUM&(a \c&ڽKC$b:]zuL򾊆sVG>KQuKXfI gKdF(iI3eOeg 0pcqă:NCaUuǵrbc2wϾcw͝w 拏yyir?÷ǎ;no>nN{͟8mǯƋ9Ϗ[~v߿lgO|;W|~qݻO8}Of>k̎a甞D<>lVc&m>s4PpRz<4[?勢_IP-b6d BtxRiF&=66ă m a!Q{HFJcWv>-%@nB1:i# &jnT~c }?#0&5s]W^ۓṡ}%ʻ>/{G,cO~3OdOmY#;{=gp>?^~M 7ʩ|nc_ 5TfV4";{UvU_84FEQ8vLL̎l͜nUUz4?Wx>sw pNٛSzp@&.x)4=mHgRҥ=J k?VVZD>7D z HJDԧ <5ꘈcb=\{(H9$q'sК(M%VL&PØ$J URG̃(IWc\*eA_ѹʵDZvH9BR|!|c!٬J/ɬ'BHI1)a! fg|ap6"V8x(@ma$ALʑ*MjiUN纠zW?Ep/N"'7BxE r-$4ji۾G}ڗngˢeٴEX'*ٺuк nb37 uCXlñ 3 Rw{NwF=D wrP7.zGj7Nwt:w(ګɺt'~8wJGOz;##cKG鋈+rqwܳ]?YxP@cI??6U?* ڠ%9`"#!g)+H2"X}23/e/sfx~M:L;UMUD\Ɇ"_VP"UhCEq_ #*jk˒-``Fqt0CYeE OMU|49}t7ru^|?|~0Պ.,5sp. siL͉ CboUEWI!ЩΆP ETի|$J bZ!T z?JEj>DC.IL4jĖ1=M @f1wJ;%e(Yu( C$]D$CJ bW{o"놲YB`U+ftJtX.z‹@2Y轟- 2DRLC($B rR8S"RÙc_$xll<6[HAL U\d2;d~(0JOf^$F$Yn86C ]mmG[MdƮj&\HTȹ.VP,%D4Nc͋qRQ"sRQ+[=1Ϩ  2lBD"k:q3$6bvW瓌E~!j^8 (d܍4m4٤xS`+(7J<4ii4yQW։n^|ٚ8_-[lwӂC3Sۗ޺~֎bc=tHZ=V! vF*4*\%1UKH %VpVgZ1(QyK. (dA+jAK%c+|YXL$ǟ{h1/?(Sf&.Ϙ6tt=aӓ~&eU҃έcݪae z6)+ m9niSjWh;P:Q&/;5pוk~8Ͻཫ_{_u儓y>;[[{/Sݼu!N=sOKwoݼy{۫mL?6mжrRV$%(-gcT|U9Z, ъyΒnNڎH1NuXegBdPҪq\Qb1+ZIi}J1/P x*GD+֫vI_76x[y\ϊHԹr"(WZ7삘B'(}0A`E"g.#ƻC] H֠b/2Q&h )snF(P IH@gJ9>>PGDU! P"ĮTU,*@fHX(D* 2S_Ug g/Yj4 e(*!!>E];:b%I^EˠjCC[EZ-qA2&N^*2ExT.b&R sUU`Ef=#U F80nUqYt1ovaUfI*kgD@sI5Heq%9dGڭUzw} 5X$ j;v`F앙Ϻ5H`ߍE{\ҟ\{}Qva2{;tZWɭ߹tmt%ݒg:ԘtSTXxgTјq2]j,Y+JuLa!}=*[︃vsC9'O~x|?/rw[]~է=鈿4=h?췾 {/zk_kȲݏ>C~ͪ'Oj'?}A{);ye?郓v; 6C6ho$^*T̮]{#ٕ&|L|)^2:u[rT(T[Lw" AN%L&hTyi2Y@:&tF;WAUe#z4 tprҩPHbL[fn7F!fmp FL쫊S%0Go{I9.%ȑST"QFqh"hJWW R@dX,Lߒ٫ӽ7THd$1WD]%Aѱ3 Р;ZۣkՈ(m POUE3@p&,1vDű(TN,/`+Wl4VE)-%#d^Q$0{`S Q+pq?H,"l%QL\.D$6jY"(br&OQ@⩩jRvL2PT)1 16& )?pɉX3Z*d "I&UAgbv6EFA)ng/dʤV]rDcU0]F@^a'`WK@0Dʢ#P&V"dLTVELd؀7c U_M8;l+br}adܑJ( qQo?HFZwmwwT mٲq{wccm [lGfq]?Gשnj/q6xmPTεE2tӮln}#ݡ/VRHᇼ( Y62fZ*D{tu!1/1G=1at5^f}=wd=;?/zCǼcކÀ cQ9(#kCELIY0?N8֚C >bp,*dN&7|CꡪXU?'*\FAfwԙBdJ1 JD)Y@BACn$Ӭ;#DI!L9It6hҝոe` Gڋ$cbxw5$qD- UQţqDPS :TS R0Gw$b/z )A! wFW-Rm*@iB`b nObTPaf %LM-LZGDA oiϦ0L`KH?̃&Vݛ#Y_s4UZڠej *ǣR 7 )]ARA}T4CβI[D\Ym('uWB-Qu5E6YN)H=p= JUu؋ڠ C>w@U@t-FsSJZ8%=Z,&Ad! ů jSh $ X/P1݅X%=BJ"I$P` |$$jYϋx#ԝ|1 #c!X)xm_Z,Q(_:קv(?>E%չ[1G$ [DFB5N4հK* RkGع[9EstW^ "&Ήι qR[h8)@`2QRK9HkUb-{=L#MdȜh#st>QDRUU{ d&(Dܴ*ӻ2d>DE45 3)2^\''[ 6 VԜ1 2jY+d8ャ\ MrI`#N`V ƛA}8w!L\댆8q]eMm3 ZբI+.k/ZtM(N5h(Pun\x>0;_&i/jI]sUE# 7Y *!nG7g,u>ґ0^K>_ 㚎AǠ o%Wi3@,Evh&NX,7 hF*jqv8biS/"*Hƨ*Qrp/rQ!U{xnnFxSmph9ڥNqHl4QGSh!D͡|9M\`WI*mZwDzm{ڠ #!&jx:g6u?VKFH- :RLڃȔ 1ӘmΣ5QS|? i fplXY.1qN3RE@x0 9#%L)",T?2C{צQa v\JFب,P.gb"j%kdUhߊ\lE$VMi՘+%Y6 ,8ςyf9D0*)Ic2[3FJd iA!)%01s4cY(9q,# xRR@+-g%4՗^8 Jw5ttk|2|3\>9SQ`A2H@Y`J(H J[X+K`ĸ\(T#&1kYT$e.3mR 12o"I_T 9B,y[hoeݽn]P:HC6O].SR۪]TIZ;K6

o^:clx1!ZB* [_"^ʚA|sb/ū?O 6h672̶S@3U9HikqFyZ<둘nセA+z_51y/>x` ڠ c p2¥٘1  TT:-H%A+CFT)AfVJhHL\{Yy3:(D2 62FUs"#kȐHUUNcB3EDeb! ShҗH5"2 Hh-AR`9zIjRԿ;&J(' ETŽb^QsB&] Nm֐2J;*k,%V׌&FDpn"(1bI[4z rz& f+^"8uX}5+X\0 c9*lTbfEYa&fa%y9fSOy/8593-#Jhneh, ?쥀tՆ4U*Px"It!F4}vp]h['r<$UTR_զwTt/Y)CI&Cm7ۭ|xו'Y׾;ӕVY-UOQ1-2|l- sQ1F#_mD}B9 v{yh4%Q+W5~7n8*♩(ZV? YzAbF$͠>4* y#>Q3bfv CĘ¿3 3!?T*xQ|ZbVpӝ"d{?;ﺳw"6Fk9RL+O da*EmGދ0hT)WE! i@1n=G sh3.e?ۉۿ_K~p/}}-{~~/vqԇG o`MނS_U4B%(W+B6n@1h6hhB^P}L,B*|a%Y^x[&@ "j9FEf)ޡD&JA(59cQ%*z, y\D[ b!c Z@Lڈ}hs"&8 ^~G8ңIb,g" o2, Q#_遝G-Hx54Hj|MfK'iRgԡ0PQw$Ύ?˓vj3I6L"Gql(eM$}u=$%Q{XcsUĐ>G|J̈P9&,1GL'ш$=SnvϓLC8QrK !5ip#bWf._my }5̸ S Ls 4"5Q`" O#$61D5N$N\=!D)>_%GbgB4"bz\[$m…<822211e!S$#xڢ2u"I H:+=)UNv)N)#71 @\);vyj07DB2Qa Zr +޼i$89ׯnWpƑM>S7My9޼ϫw\/?:>ژYsIx,$͕gGE %QZlmm~m-=`WS^4"=1/IFMiX=^Db du|=QB"2"_T5 XP-2}PH.lR"^|UTLAs( 1k66RyZؙ+Z`s+1\TLIZ &r/ ǵl2H!%Js)Nʙ$#"=NH-jO NFd]O5!AW!c4gw81w{7 )nuM `t%KK YWjz1_qf"_>ŲCHfJ"LI,RHxFd%`B:_C 21^)U$TW|]Q T?V鵪N[ IDATZ튔g_9Dž=8^G9 lhz-j"m33ǩ 7ܼ_~5\kew~$0 ͂BIՃ+:7Xyb)J vjJa)J4Beu}ޓƔ0*-3[MZ;RzBڃ>Uݗf~y~ǔlSۖ9ڻ~;kkSHӏZ}9:ܜk^j'ߩ{;8b|zET"{U>l}W?}3w^{=tɩkվǟC6 _:gO܇S1gNjxK.>:b_GߏXC7w[_t}{[|jjC3K; \[R%7NB0AA{4g&>} @(9hf@&)> (IPe@mWY L @fe -F`%TH# x"ڒ3h0<hZGnt'cttw+so r c#gtD΂͟REŋo,e!B =!D!NPR<JY j4 mfëɨ T`Ux ~_AxPv,n%e4v*EkO% ^u BBZA FB:4o8NhQ|Q k.HJǭvkDsԁ's##^"q[\/fBq Ep%/_\n NȈ0R=[V}q$i'0i"^5b:Tv -F^3d3ܜvg^B(D؍{+1ZUPnevӠl-`hh#F/# l$)G@=qEQw;xj[‹ +&,Ea2C+JrB/{^yljѯ]5yM؃/}s~uM߽k8+ry/o( 5oБK7|{WVG]pݕ%g̳kzI}'/瞺1svɅ}<m+poK/^soo]5k>˾xCGw&xhp L660(ٴ;h6ho$ʽf u@4N@\h )D\%zՏCf2f L4DHqrr+=)4Yp.M%35 jDI& >Ґ ^1YdbUZ+lERާay~$'^xθ?ve'mwϼ\svH̜| ŠJ~8 g|;uM;Dۋ~vK~oK}Ζ aQ͜n&K]cs;9;6Zcñ;ao]w5^Y\3Q~te-=x`;p 2=B5$185fJ5ۓE^bp ڠ ڠ=GJU(MTpNbz¨-EByɋ>~ db}?2x9gyg}ϏȆ7H#A"vO>$}ƙY8 1 BҒ~$k$4PoP,מ3}(D_A#M<n8jDHY?⑔-"b{PوQO#wJHeI4(;pe5KE%w',*@=E+s/\#S흴a=IA{iydo(jt%}3ifv;JEI2oȍo}H UUݒO,e9=1IcZ6Aɣ.*J39HW{85`\TwnZ0ej#k1#Ȓ~"= _9g3{+@R\f-60 lZ("aM%ƛͭRh X@tNAx57HM rP)ovk~=Z[-\ ЅͶۨ Vb rI 02UcvOo `dūt!4wNlsE>ìGi O/yN4wwbL>saҟ?BZ{pò7lGbvp؎OjW*zcdwQL{ohWUݏLd a"P@*U(( N8E: ֡ΨBZՂVد-*WAu c!!!y5}} #Br߻sga}g=udb& vebf&jV-\5 -ccmOpa)X@1LƶPpBJAAB]s:{:ׯ>:٩PnY+(UF&hvbh鯥"::O5HKe-9MR1hp!ykl*՘9AF=2CoeZhA[ȡ^=l%RG/ $lØl/LbɒRGd6@mb40t E"`6oX?ՙ 2y dC_ۿ#̜twP6t u" 1&{+]Dbb6p˜>7>__>?8]w[s~I_ySN|+Y䞹TIző>m1x/=G#l v}ϳ=q_WQ{s܁Syzvl#|ѡ'ȇ>}~IO9q=-cȨD0&uhJcL.O/ƢqqK?DLc:i`GPWf%싇ZG 3T_3Vֈ0lIZKfa-,1BwQw(41zݲH"jR9>V4 e3L j&T)%$sPͯ`TBJatȨ.>4Qn @R&J1z``z<G9gHCb5XVwj0`*X(#x%_wC0 RZ)95STX6:e?BZJsbt$;@(1}r(@dhXԎkGj+lU1 -`\`4ɇYBꥳ";T豏R$y!,n!bQ&YiGd/Z|̏!<:4YeĀm$"YXXՋ+# ̎P 5y۶ 1@/H9P$F0&}65f-3X%oX@2pN0/vR)QyL,!} 2lo Nk5ñ;)`&6񲒼F"fH}nF4pp)_pV#)%5X3 HD|觿P y}d6II$fO0IF ڴڨ׊EdQ D #9(QwՓ3S !j0ԴRyu IpՒVa'6)%m|W q 2T&, ! pFd5tpuZ&+:lv+Ѐ";jHG*[8ʓtU: /k"qIp_Vȉhz6ug!t,͗U>=! Oz+yC:SۚT{k^µYI3{ rn7Z @qQ6&|yf6 ;L`63҂s1O 0O$ne6 ͉f/[ h|qCm fWU@SiY-nڔ ThDP5̀ - Rx ,m-ʧT{]}S8}>{6nj,LW$zS)! i–GW7}gl96n6n"! VX[WgGya=iVg`F*C`݅~B@ +) BAb%HgP /L%cc,mɻj 8X0r*WPS%K!(,b ` OZZ$/pMh$*VrsfhF#G36dTUuH Gн?R%FGF ƊQ5,4$|mYaGjFm Z`0a$$LÎSBPEHI(f$6Q D,²4}K;͓SDӒg/ ks{C35+y]RXEd-v#߮J9PվE6n6n%\5XuMBHJ'*a7H0|:z]*PW RB0 =ЃTIn- TU>r9*3Baf]?1(rvCߦ;s pUoxDa& C5bǕ *Q7V\Tl2GY1Uy?3o O2<H[TȞau\GrCD. B7,@rjH%$|R\"tnD仞Ś)Ub)j'1Fa^%[j[vjΠp6ڍ~k8|v|)*f:B*n R⑟ &M+ t7y9::@3 YuۉcKE8CZj IDATQ4̬8҆`+RHH{V EiΚadNJa.RaJ"rmPEf@l x %2'fg{9z$vMHE#N< ,#2 sַQJ@Hi&E8 fLPAC4((0"!R)Y){R,U:t]KTkT]ΐc]_RuU :T/܇xMhomԪ&Zsc@ Rh1( ydkхT^1Պ0Ȑɋ&€@(H_q9mi ]WGXH{`] PfIP ;$@,\ b5ļ!# XC`0% r`5d*n,AAq^H䎠rJ.(eI)3͹g" PX613ʎ8[' @3[h2ٜQa _,/a=3(k8*NT92CmG79]b7-A4M$[@faJ&AZɄi0qLAf^[ ~3}ʵj#kE2¶ ݑ`;d@B @n<جv[v#qq\V))Q-"ۛ`B[#`7:ܶL)f9tմ6nv/."sZ:DQj ]jo[d@4 ۑdS)@g4^v j6F2DtN>*PFaT~JYKx1#ԅmۀ BP9.E"HfP SǑE,Ӡ Ĩ:%=8ah{RRRP#V1E  9(,D/`b6"M';8BJȊ+ÊB6u6ÈP?J\PqEXU-e[#nnfF L@BD*Nk9 x pf=H%,ak$"99G9DJl^%-,ܶXRJFB)KklpBqՑd% Cç ┌UgD:Y%Y d]YIؐYHe5*df V"dme\"$PH)I6ÑY <P3 &H-m k'>LkY09@{E5-SH(ig&+_l`uSj"7<1L}]^yշݶ-Zמ{|ЁiǸ۸ -%;-N$ Gô*x @lxD$D{`^`XGEt)~ygn82t0Bj/*:DAkGՅP>DFE+X@bA-n|@<*1\HΛqA=R&np(E!$U*Je=`TR J̓dKX8)8esL8gsͨ2aU۰ (dŧp L(HH7\NqLUHn 2 ̹5s2N w!]ǐ@"N7j3 pR nR|fQi`8$fTX& {4EHU䤡\e jo7z&mf}wÝL7qq[<"F/.bFl}O .vc"`bt%ܯ~cgLN-_~y8om?n \xﯸ.߶{q[R?o}{?z7Ԍf8B#VDƮ^XO:‰߱ +W-DV%Pnl T%t2 {dq#Ci5zRd-.P2RpkeR|(8B7VXX\9Q.B;D aF'2҇24is.ZE-iwԨ}M߀ L-ψf뻔 0:v,03d]/ƪanG =,NiH"IjQ2t҂;,P1 u"u2̀֩WnrCNɨ)Mſ5G▜J~Phd#N:9cpcҊ G8Fkj ,n0OdOq*, WX4E`u@W?t"k)dE (^(ml~ec}6~\wqox6n6nw zO'2Xha j!E|?4@bly,`'xr R0.Y艰%Ї9 گa/fVGW1We%Z// :J7CO 6n6n*x IO<ck׮}[Ot`Żܺb}gjMM_Mڟe(y˗/?묳o=qozӛǸm6#9d5p;8a%BHYN@PZ2ZY] $QʭkG|:Uʳ"A4ZI$}V,E]٭@*_mvƬyxT"UR+B>2PUuN&bVDdzz 5V,\c!jE3_QW ;e!_z5[)VpP![&Hjm ɬPEPX)U%hl3#u0p"5H(f@8/ @ C޺SN1à#LHPvPYRV!^Z~<qDm0Lɒk sJ` ,Myf&d[en52 I\]7HRJLUHCauQtv \cD!LOE"IJ DnqqqۼUع5jG& [HQOQ.Æ%]w_^oUX^o o5Dnݺ<]tu-wg]\/|p9PyժUt(wJ~)} רYg=}s6MNt'/cv`ンهuYo~[/|/}Z:aC]s3oVN>?셯>EOx}۟ 6룿 ( ZmJ!J՚skIJMr&? ٵ };e#uI'U"D 9zA4AP%AZ+{M\OOr"D+X*P:fF 2YB$MD2b5RJ(~Ίu{w=K_x <78iܷGmS׿ǏkO PڸJe afe(71O/]0CGszͯN9]v}~g8D7?{ץ~S޻} ϸݗ[t_J@* A[5O< EdtCR|fظcbP%9 !˺jamJga۵^KڪjrQͰ0YfT]%}8ϝ }Ř@P0n t('* Lr =(I2g-I'm!yq+nԻC7 Q@ف80N`)nB%%_ĀbaN L@Tv05AM]= Hv-jޞ;MbV1jR3s]@@ј[f.1|NvCAf%sW7b}Ѕٮ+ʼn9 Q=&.7UCD(lRP`ܪ? "@*8 E=}ڬT fQyY`WA*6n6nvZ#Jdvk Kfn<ܚRJ"m86h~_Ŷ .կ;g[o]ͼ8w\NO߮O3XOݛK1'ត}EȆ" .[6 M|;7WO>w_/~pþ޵6yqe||x_z>}Ə?nG÷^댯oDP%srѣW.',|o_vCo8jAG1P\z>13ϾO}~G<鄣G+?9pهx/FYO>Kgoݙ7]}\{xkJ+ U L!XX]'~,H-DKF2! "!WE WhᐔQ&U/5/$[ѾchyUd]F5.Zbέ6fJV݈hU*XJt( G*7NB9|>q,:<UPٺn18*Hh%v*^)sEǤ ,"xq,Pr/G6g[͙HT<D?l::NEGXh[xJRnmm6kSrGAY aYi XDD0RoG4sI͛*VP{Yj՛&q$Ĭymzn CI"wtH׬Yvmn֬Y)L6ѣ#^v? _^stĦW|> ԋ~G?o]j.>xߗ?=~SOħs6g=Y_җU o6Ǽᓗ?W^񻯼O~ >ѷG~ۊ.CS07_GGM8O{3v6a"PDѥ(`[!"r@ *r4<flld6?$YJmqW9B Vp6W̯?XzE֤%.JVhb.}4NVh3p3:Le!% ʽW02,H.f  f(Cwfp/Ȥ(`JP"JdH"XX J8"ئv٧RX @2sadFa HIթ&AxšщXG"6` Y_UMH3I$~RzNrj R):Fp IDATX0i g`uK!!^[RMY,maAj*WC:+.p%GԒ*:CI{[QyHJHfaH 0V1>Bcz$L")S-BC`!ł_Yq6n6n㶹,bd^4uJ .MEtfd@ϼYߛX/ZpjjLMM=ǿ}Ozʵ^Or͚5.2^O Ϯ~7#θ,puܺb٭+X~\Wq7[^p^~P\|EX,}$s/F% "qI*P\"K "-DBB 0M ygU9K.H -J )ίչ#E+qP7"'q\J’ S-<<(ɈJP3 pPJcW P͆DI@y:T4h "X2n6n'8I*!""&F+(6i'Xu`G B`P]2e~(߀dc=weanY~뮻o g^qs;v^]r{Ϋ߮'}|0I/{/w7e4/^7o|Cߍ{#<ăz*щ ϟ?_kuyʧ/y^`ߗU̙M~̗nh#n;o:bؐDu68ok̗rc}oxT?uNn wrȁ}k7wawzIo~ӫ{#_tG9 (-vr۾-gNwUxo76o}hۖHXX&>+ENfF$p^֢93!4M^#"#{ߤKA!zqSMB@Kp* cxR"j_CO[!7 ”RT 6ᢒ@DuQRSniXbݟ2Mv:!*"Ȇ';6 $BD@H\Gh]ՅSfAbXԂ¥wNGyHNW5*BeGP`̒eI(qu ȉfj^`A9S|JPx Q2 m0 jFTrQc`Ka Y9q!&CXZyO;J9&PTDL( 51k#hF7‹M?)f02+o?PKZZ ״-DJhG NBs ޫqqq44rjF[9c,iSAR*ύ6mpA}5~d4;t򛯸k׮m繁q/7vq=O|7O^3St-C C6z?v] ?`0_۶\EM0p PJȉ7~=bG8yOb33tTuŲpڷ9kvvz_>zƏ|{NyO?h-}أ?OGwΗ/{;pwC3n]m=vi5K(0m+1Jd SJT)EL7@܍ ecCi:0Jy}J 7U:FJ@)!(bn6`afndtL)D\Kb#8_j|!_W @9g]3oV4 9@Z1%:jF}PPB,%m7*7܂aVb)iqIcDbDDPxD("ul0F΂P")挀&KyP ,ՈC@+yFL.R)  YPd&L 6& $Y !}Ұ;B8zBjG,D]UpF#I) ng9XXP7^I6<83 *oB,Tt=rߤ3`DH=-dY'퀑xp `B&qSiB)f Vа_ߜsٓ}=`|Sq͌nP"LM>BE j+B a&䉔RY*F7hu],^tO~|Ё4M399km۬vwΗ^<`tlЃm/|͛kfo~x㍽^oUn?/|߯^>mO=w_?S!R>5ck8ИO~'uhO|Wf|m7pM7tw._|zzK.9CN=uXlr%~v'<'R?‚c۬K*KRL%Kp;# ȰU 8gkN)Au|9,؁ZX`s٪ 6lL8s]WM:U$`@nW0Pqn%G2[U,u^WCY!BIPeL5CJ ""bˋBsWDk@7!ꐉTb6+~B(D8Ѡ.#FPe>*Qd4tԛE>% $]BCTN?+cALAQ'6zOUU2F$Im eλpEf#ՃP%!B"Aue 6 [$L@JLSNXÊHavɟs#7yq튅 wv џ( cfSlk0t7^ܱG7M9~Er /~9{=̙8 L+vUڽϋ<C;Wچg?}snwx1Dz{ #;>7G?Ǟ C#&jXǯ4ZQjW`f5Stpv+y0 LΞ<渧ܾr7 JtG?%7.1WiUuSZBMxU$b <3DEA g̒bvb%U’]k LBT\?V*7\ {jUߢKzIʄ`e(w O-dN BIrBRz~Af֫DT i}3ˢ T  !C8*t =`C;1 pJʬI.]()%f |4';:2!gFDV ^&.kn$"A@$ns0[St ɂ[t].3=CG~H`E)g@&5d8K[r=2W &@WQ4P"~7,o-JXRּW5Eb,A"z\frolɌYYnVxXڎkwo?>E8"BH3sH E$fd32߭=yN>_{Snϟ?wիW_s5_{d0`055Ky;츣X6BvS\=F&"| a8߲wxѯ{{Q7VW^{; p]PL0um6jxQ-s?¯0E]͡[#<ϛZ?;Kh;kNYv//eo_f흖%mk0 (.QfBP\j% 3Ɏ\ջhA8(Zb׻ơd 4̢E2vG)Na`((d'eO0t9%Dbj@)7 /C0+DتmqU1 A p5nad)KDuY 47_S~LT t/d QJ%(v"qa:^Z;j 2BJXfV9C>*;. !u"e$P)#'Aڈlb>Z)"q]$na'$oh6?ꨭf?c .=glݿO42aqf&л6 ܥ_?D -$PdI (5I,_?IW]uO~f0oܽgp?RtMG2;}4WSw#7{"kw]u-"g Ѽ;U=ۓ7Tƒ2 5M]7u;u7ǹqeufDi\瀇?=XA7o V޼UEC |p0!D!CdFF1'XIa7_ S]Ǻk"0EՎuݢX[߹gH-`U ) $ 6:C:~utHTa^٪ huvmaGg&!US3ZN)uw8(^(tUK؂deَ3&YXv 5j \M(xUMzt]oKT/څ-T5< FJJu^׸a3 *#܅,ѢN0Vhvުޖq7q6":^f[}n  EM-q]shDzKt>[yayN6{{LJ]n`v_6=Պѿ_cV}@QәDK+sκYն|*UHae 3&=O{ʺWe'%7t |$2|=Nm@f3oŨΐ(~0^1GGOcJ-u|6='>'nysc '#UL΂Vk̜T8")SJU@$bhY0 zSN;zժ9sN̙zyy{춫Fd}VZuÍ?/̙|_^_ZM̙3Q+>9jv- ,e]0 &5KjhC]-pW @TO,0*z\W)%‘(fcEhCN*]@hD-ЃLIm=,% A+TRxأGʇ-^.%X';KCC"*jTx:c'V%!&J)|ZMZXalk %BJ"&E ǡ q6Y4RLrcCgd+̤Be"6fp㼘Q% dҫZZX40+D9R)l^YpZ 0?Wd $.l?ׂ˧hj&f슱̞bI RJHI7nj9+<ꥲwh]ҟʫh½?R76n6n GqNJBtb[0X-{unI? Ŀ:n6_C PFkY/%p6y@zoowKfpVv5[LJ=0|߶^*GᶚieDXcZ]h=/ϟ3gك`0,Z0}Yd^d,Yb Dq]s]fՌkkjɒ%ŋvyo.Xv%^:V_qjM#!b>ɵ 0^,\귾sVo͑̚z[daY-0 tIAѵ윳%"[ΐiN ~8I:`BѢ\ߊ}mc(C7 e=h#WAݐf!bH0QjV @eYRA}5(*{Zn{ 5,Lsn4IBH,J$U^TQdP%,&61 IDAT|*<$ӒFdf6Crn"g\Dle&H5N1Ʃ"݌CCREa6U׸+lgs#YL"I?lr߳cӀ; i(N:q3ܑG>_~+V\̽^oΜ9 .|+Oͯ~N ?X‹6q =#+<7>t$/}3Ѝpضsn-ؼm۫zŊ`޼y ,EaSm.%GmvK7p0,?{`~> ,/rafJS@qЁNd٣\#$%,^ DRvHMІJ 9Q#Y0~hq5!p01Cdpƾ9+P QN Kk}?0"cw!(XןFy0 8 >4)B;ݧþU4KkNGuH0ku Ԁ&M3K7@e Bi=k @pT.@(ni!Vt\XR=%REU2`Hy+HR;Q\FtCVʨ{B}@t7ئR|"%W]eRA9)7$MoPR`nFF3aDk~14L;^.8p6l?_DĄ&''o۰my38~vG/lK_Ŗ;|Uϴ?=+V^wFo}:ɵubbκ/nP|?}i-[3Ϭ_}m=z+&$lRJHz6[{t3cxuwg"6 m }(-r=5kjaڟy ϱJr}lW}&lr]wMLLLOO̡?ZjʕmSJob驩ɩɩɉ8fw-5]ܶ?b#r\Թ6,쌉E^ PAi Ir'PSBغbW8c4t|Pb=i(!4@K&v ΂,jl=dp CddPw{Zc#XIB?Kf"L" Vb (_Ղot_8U A_AD1S%c ИpukL1 9$!{A.ĒLR^|;>U,Kv "`q6Wf4fڂАN+Bd#-%w+R#"|rV9 N.9 ,*-h97 fSž#G . 3VH*>X'q\XšX= G$]w]we_+^nD ACDk֬ycu7qg=qۮ}d8Klw}e# Һ?p<_?∗J-wy gęgw~sg]p_-8Xc)z{{w{߾* CFV6u$L~y)BZM,kW_}:_o`.w Z5XC幞y)U+P)_LJgX-,^*nW^y* LOMYfjjΝ;o)4l/|8tιm7|<| ~R:*F z](# ),l>Q/c_~Cp!Jdr c-څRQg;R͖X-*‫MSKIBTǡH6\vc KГx±G+A""9G^I'9G%zKbd:##`*XDS zf1hcיtЭު .jf…sY`ݼ1ty~O.8>sl7~Ѝd?og㰓>+G~^_}Wt傭uH?Ooy g|kGYo;p-Q_8f^aƃ̈́bJ 8~aS/AԅK?@VAuz9%O=Cv+V#M%?gO} $}10u_8^nyv$$Uo-߻ۮkҟL@Ci\a} Tva$T`h.Z}37vo`0g|}|;]`XFf~]xƛlܶmΖO[y@;F}`rCoR jF2.3MdQuPXi^ڶЇB*m UX[h)%EElBdfn+2QɄ4 wuC7|z:^㘑Jyck1kkDHMO*XvI %#»XQZD Ń,*/5H-;?P8^7\`E A o@R7Rq G?p sa6 A42b0 sVCjScq*E!8VMRM P؀`%.!XhWVbJe&AP5%‘҃92 37W^u _x'&&pEW^y/!"ًa/ nԶfm7/-_sK='mhb~7_g#~/GnvY7tպHTfeps.V;\Besslǿ6=/=^}۪eˮWq;#g\yy՗|jW>s'~K>UI0Lq3no۟ %_ nwy1;OR7M7_r-㊕:o|_87#9g+97Wؗo?|֏}y6gG_udǧN}HR^:ky=,:vg 2vxm﫯pDFOiJJ@6(,faփ!GZt _S0ꒆ sv~/^rU,dd?׭u,VUۗݖ5 (Pƚ_n(qn;h.S(J-3h ;},ҎQ65iǡk[)Q, f%BX:RwwPIP- }BzC"r. y|ygTMjݦ֐Hj*l[-R[k."*5)%:|MT)zcԴf*&E{X*/YtdfgkGdUj0E_1aH ij M˹M@ 0"64ZAEl2{Uwh?$a#&r G(@\\F,H`ض1hMJ,ۜ> Reip֝{b4U71XyWNȆ 9# Q#Z}V+q wqܹs'&&4kҥ^7 _S>p7X.\};^񂿳34˧/HaznE28D.]rmK,Qt>7}o>_CF_e߻yq_׋?ύ>߻o{_>;k>}NYYn2pw?}?<[swxA`Co?]X.c?S:~_<~{=9<1jl8|K6m[|ջ>kn΂ؔ>}|qtxmrƄ6xkx©_:I/ǝ>r_{?ް.511q衇}X9Ȼιl,}[OϯGKyaiޛ;9q|&\c?怅 w^׃V"I)Q"" cKjƃtᚲ)RL4EJ1F18ꫯ᭧;~ zeז24 Hf 8r)y$7 d7{QJ !JZ+֤"Q >H̃`5YF*b#pX&v?th\s>OǮ'lړ>݇,\s{[>޹DSOh8y d=ܳrJXhhŊW^h}}bߨ*eG_WiBdnjg.Ə~s?Oo2odZ;b1//5Ʒ9o>}ąg}_pцKrc=9^s6nbLG7YyfCPA:?`7$awvk4^yEBJd~"jD:٣)k;8ꫯwY:HԪDA,~@I=9 aatm)ͫ2w - 0-^`§qΒp~m<=xz*ON<5}~ /di}^uSKTR2m+CR4eJӁm%ƻ B*eZVM-o0jOΣzceɵW(bI%UI 50?g=2"S.ĎjœBb}?)KWxl9%EXP+ %,QGz{(&#0AmifL i0)zUx1ő-\Hm tVt,ta(p씜B, lfc9xWDZtkFZ܊ PU?-j:"X`O->=h'F 0}CF/P}^"B,kCvr`ڰ,ghv5^'glz[o omnc=Topo_N;||gr yכ=;ox~ZK?^w=hלxZ/{aO|Ԋ|?LF̙xŋk<==f͚}|?sGs,eV,`v_ζ|Ǽ-&Q9Cg\uYw_%/9O{.։G+Ju{n4w7ܧ{=G@>bwxxv >,xT@i#=7螫>yqk븋q|zYm'rsH|bNEg9Pِ+ݓ)=y=û}_y+V`k@|ꫯp 9# ˼"{66U*:ure_$w~#4f:" A3 "CrYZ6ߒ9939ܦp܇ɯHG.2U٫NnJ)3qG yZQ.KQ&PTd *עcGТoWq) sC)QEVc: [Ǯ# Xs&1\:m+iER: b#&@.&󣹏MCstrLaD~͑C5a'o}Mo| {v7il{q?:8o1b?s˩?l"m՗GiQKΜZ#dnݷ{Ŝr~;o΋<}?=KvyQ Eotvҗ܍u]Vm\vsUoDZ3 iS7To9_{[n[s IDATW+928ͼGguzbH =MEkU%"nhL'5+Q7Nݗ #uI'[_SO|}܇UzW3^(u{یcr?W_}=THPxX~}p@<gSJƒ$ao!Nߠ4]RJ Zq&񆏸'&qW)X^@fR4sH@Z .`g7f"(#~@ Hz0mrôgB2 )EQ] 0bDkAXA7dEP4LFDDDZJ4]j-K 5FP#w$xn!F!(Zd*j0cg-i'HatB߰IY3mW`zڀH*DL~BE@{zm)ͮj 0Y^=R &fnYA20`TϑBddR5pGr%!"s:Vul&04IDHKa+Rb`E< LVeV`hSlAUD1,Zk83!LDcHi^ɜD*;ނʛ@0%EAƵ8O}&OyS4I-9~ox+暤ւĄCYj|jMAxGC[_W1Yg}n?/^_[+Z|ӟYguYg͸T8rF'3.AW'rj3~n"Wfe_g>jVi[v쟒 ԧ>?zÛw׬SNEĉ>/]u:㖎8WGN5yKW_&" `T;VkoXӢsCG:w\i`^)&5oFY.  ~ƛlJĮq) V0 MLLt,b)[|M^1Ai5OjF\j° oQav zRk$I$S"1nQ:'ll~ e Gm *Q7Y}e"n("@PB'i v)d"H.urxMkl3@DMz&1yGx l(l)c79^(iD-S#$c&CfNDD) NUwQ<,̴Ë) nK! b+("WX'Vg( mˍF:2)gko=oyj \y*N;/ӃG?uC9BSw%(f1zsq@_Yf+ngǾ+W4=fݽF‰A(-Bvg֤af #0RB@ba!hq>FݗmSJڮwoZF3Bʜp&{4p լ@k$iw3YPj`i?)`OP%YY f ! _PQiq-XQ@}OwF` M] DNEF<΃#WaIVǰtƒAuGrtœ01sfK( 3+ W1AeŁsSD#=;, G`@.|&,lXC%] 00w$)(!HM^ː[q bT((:7krigwdNy_׫46ݗo_|]3 "o:Όx^; nu&UUNNSL.uY}˖_r2 ]ɩ{w11u!G@5 @]a վݠrY9zWr,,ɳx-ԇ'$*$DE-^QD0R;[7jJn>t}!"8hBJ%TBو *)EJ\Mzߐ2CM=u\`63z>(Cǁh71?U{!(#~{HZd\Nѽb|LjR3v, <8Np2ѓ?E3!q,nwc/Lx!6MRk=b@?elY}Þ! ,RӴG€m>b]{s?}:6_nۇ%` C #< D#=y_C_Ь}o'7[ąm/Y_ <_ 96[qK+sGꫯ.Q;iPgQ#9NFPHᑙ2/#(x4c( Zuö[>pμ~U[9sfiHA3r{t\7ۖVfsh[F$$;؄ӎXdYڶ-ٟ~c4qP1Bq@) \rnU~O[!Su$KGĒU2 \ "@4}""aaQW~yr?5=s4QBp،' aOMcQ58Ƭc:dV wq 1ajVXlMDB(!-T>XuՅWD8ŜHS@y+m%ƢZ:ADC&:;IB-QH`IDR,/TrNX:ׄ)/C}gQ 5\Y8ݻBVY\J0&Rm!W%6T@+T+lt{u6}^㳖 ;6B9ꙏL߁/cWʁ~___o^~]x_k~v ɿ{tW~xOyP䒝p=08ֲJI{̹/}l.NLLkVg䇵Ό[_Zi,>) lg2+g>)yⶋ3X&|ߥAnk\"lhbbI9,p-:%N o5wކW~MT J9xzP$j5Xgb! %Ěg3_6R!ޏ<эDh<b#x3F.fj,`| pˠS p'PJ 4H&.ȉm7::U!L 8A@X4PEXwM'@43LR I:${hQ 9I}\+c8 "McR#286}@BeQ*F7. lTc5)\e=[l7F&HqG 2(u?<J5e3'F!W^Kzponx}_XHRyIIjbew00~\yI'b7cWo}_f\>u9x-s믇>'v{ҟ\?283n>We`ꫯ0=_쵑M5pa FmF2չ1%^j{8d_sG z$ gil,aG%V-,mVYt9_yEj1w΢v( ofK,m F9~a cnM 3C{?hs j"OpBds4 pYUӠr1Y ua[6G4z'{H'q:^2'x1 sD$gfթ\z*daQc#g.6",58G,\2gyygل0dۮ5$NhZ0 XQ$C?jPj=23 KXod) Gy.0Ü")~H@̌('jض3 &DL8(6 &\NtLA$_r&J+]bf4:$RnJԀƤjn 1!%L˅dzfp6ZFR א``ӦP,"=&Q 33gnsSi/ 9>G̾?nn`bo~?g? 7ϽZ ?`01LLA$BT"œ["Ln+96p9smnǼ3^~?7[;Љ?Ok-R-GZW ކ#acyHSs-`~Ț o}۲_5w,\9BsΛ`b;hjzpZSPgX q(uPD 4՞UpD!/jb *XqC\4s~0vE0XyFzIRv'2eYYU ((aSh&;a(y |͚N񉪎+/9҉쩙Q b+61IxF+SXB(vz[t=HD/R[Gu:X[+aV=Ne(,N)Q"DԗQ#HtmDt%#2)Lm]R Cˎ#k ,ne\! =Q8`0&t'1:G@|͉C9S"< ~@[Pd?+W`V j:FHHAI.zG˃3b3cY'o-u#}2b zҹ|i_uz^F_}U][>uyy쑆 mm\l>~z&''O Y0U7KvAfƟĢ._85wOZq[#5SSSIYPAg0jOJPOι8 ͞Zx"ZouE$ SS,U }9:,3>fZ#d2(ᰵ4ez~+:G)-[\H9,e+; e9[t>[J0h7e Rz#9-EBCYR?65M, Bt97M(CD ,j@"?fJȮ5Q( fZO(DHvdz{ $4+#{t_֑T(ă4pw0 ^ j"=I'0㔄"٘LUk"oc NBn1,-g&H2 [ pE߈AX"dwm` ~1I D$0,"%B"uנ`SbФ{IAÖRJMJ -z$Q#[[Of;nIW *6 RJ9s! U I5~+ yDmAcMjB 8^aP21-錄_IS9h+]bDhfLY +>c7=kP6ȃZ'irr "kY,ʒe=K4s"vihbm^y6/]R3f2dfeƗlb/jMg4@C3 0:aX1LAFah,*23g $4l9%W8nD5NP9DĨ>"ksmۦ@ 2ڂfan)8 aHjP\VU8J]HS^^[=5J)nI܉*w*g{Ϝ;W$hZ02s3ƶ瞕SS͕ S uNȈH(*lf1}lxQ謾7KX$\$Iȋ%ǔ|KԜ 251]ݞ+Y6SȥLk7zͪp|:HUl7( ňm_&9`d8{m3`B 3"W_}z#m%ؕQp.T ]G6{#zjj﫯.]uuϧyvEQi HPt#4uBL$uz/*<55qݵ74i`m&VQQ%%,9 g,EWdb08l''iIm)Xg(~"mmxXRӗWE_6NЎdI!t-cvg袢݉ yKFD\[ry#\}Hh#!ŘłF1::gm:"[a!yce3T6$Z (Mc| @|fd1GbY)^@hBU@DQlF#f9jnsyЫi#V21ISRJMt|:'u'Q$§t IYv`Gޢ)-ۜyQ N)*0a2&?B f` Y@T (ꫯAsIi 0_ksB˝T{uoG(kPꫯ~036C-,;0$ :Lzmv4'3p}Ys'I@c [GY>YRO P.XPЗ FDJ HСHo۶&?ETtbtDhbbB)(e׳* '(1D3f%XlG3Baq6UiD(DdLj8 &N*2qs΃ ~ |PcX%C@$hP5wS7uxZ;r<WUGפ,UA<)clY`f=sWS! yP8n Аf;:%%sk!%uγxj~W_}+i10"a"& Dl&F }[af6.K ꫯ~G4JP,5FF3bڪ3 '5Rc5+9SHo@I@nvwϷʢ٭$%41ցC+:}r ^9yM"J>+&1\La(@ꕔ.2T-8h!!q6&QRlmT0" Lh%YmNC hFk k7h,uo& "PQ`@= s6#(pJ4š!D`D"n{-yǙV hC d9FVU;vwp; N:q&B"bmCdNUp4Yς&yP3:ZFp TpPuBlAU K+mR>=8b$ )pnbTJq 1w H5V̧iLY9b3q@`); (N4GꫯO G׀&RjH,{z/FCDӷԞCX-3g$AgW_}dFp泠"3+>1$2WPQnbzJ' $\t*.&B73g^@R J i(B[275=^Ndz"[ uwIm-$Z Bҏl@l;Ei~(:+FcIaNJ6<$Y<2mtrfƄqG5""kOVDƎe_e235 hP È$ X.D3`Dؐ#i:m(^aڄhZ``f D̀$+tz0RH"RE#U+#j㩄jI! ՎY"$T. c;'WijԪc^b=t"m8&.Cm\}MJba}W_bFBJfH)9ZͪCxPTw TW_}"dQ(AKk 7uuZճ7A2iM#hM,f(EϦK$ 9st`b`01HRJM& f4Mju5f`4>ҨC5@eA-EQ A9;]X{)K"HVقd-Y2{EG3p`@~ET~ T6|pEz;6ff@&ZwQ؃6!8p k_ y8<(Dͳ f-U T uӌM J–">R(0!%$ӪrI\Yq VX"uxBӕ CF|s; D9+8ѝCwO:U8VYuL3`j @P?iܦwU >acn_ YrfI98R0>agVfzFrib%a y' ꫯ_` Znw`珓{ fbB$„QZxNx[n#?_zJk_p-]<^=/~z_J\H7}E;Ԍn'mh%udjD23 .X]Rz$B lO%_$bH7R6d d0VAU/ Dr/f >ml`"t9|VM7U ﯲ'Fl2F_Z欌w$HUMC (vV}c`̭C_BLNC\: aKHㅭWG -DjCxJ{j# PgYL`/#c8m̌FCYT/KӄͿǓNDu4g@!Hz}re-&OasX)J*w #qbEl-X։HP"N9BbPꫯ;nO4Y&*z jV}8.;F~Yƛm}7}f>?/N. U ߹Ov|w~gqݖ+~ya[m㱾W rYq=w2s\HQE&e z`’|JCe$gŹu&EGQm2S3'#m6Vu%9mT} un&%WfT7C.*@jj|Ԕ6`\C( wFf)"d6gu 3x 6ߦBb05aL8Q+9HZ/Dz4"?)Gu5 ʆ9mss)"9sFuYG:&s$snܶ*CjiL t!1ҊYRP$BgZ.d %c? [Z,֑x flt8ķCk ldt6)&53`45{9+[ 6j‚"JH.Hl]Y믶(; aAS JF؈,ʫZϭehh3=w0%g4T[ )H)aj™6-W)U?]57y;9U;WwUs9d̛}A']ӿq}c礃NMk?:xvW:ҞxW%{~md? OmRBfW4;&AbecLj*LW>Wׄv%ezMR]vL#gnhm5ɪ=8cкN$]XM=*^2s˒՚Fd>K?0YpRjRj( %o-ܖ4Y=DjޮѤ3L I7FDrnȺD@A@#G@fE:-"Nac2 d͜$5 TQ 1 Y5 mY2w!$4-Bm!F*H,#(8p8G^BMeAaVG־1RAq$%JmnGt1f8b8Ya -0s"b)!he@u 2aU\(0o[PNXT "8IWD=;P:s.p)DEQbE?no X@DE4` EQQ(Dbh E@~9z{BsyygwֳX`! lO.VK#vTLQYI+Ut!aHMQ#3 bNQk% {rape)R$ qVH%(+9hW6\O?{w_Xn]UMF-c@Y{W^'uv~c&vv>n9+{ϺD[n]v[lg?O~#>Cnq\o;{{w?t{z~_1{ڻ]{=8憷;^ :<;{׹n7=}W:3;a wyizbovݛ r[\^f?\Xu`׭[-n.L6\]>b۳/KG#6}8G-}=EgSɶݮ5߾~okhBF`NLN L5tmYvk\;2cܑK"߽նZް|٥_]qDS84܊32sF2TB[I\v7 05s L.̶@XXb|*5A$[zYA ĵJ$&iCa)34x1kg2 rDJDē}SXyB fzA:!  XPK)>՘.*w6hsŅ,ZH:׻$$N᭸(u6VjԷZ 39Z_Y3HQV&Jn1JUk V!ep!nZ7"naj&%Ry(^̦t"dAD-ñh0ic#*C̨?2mI5kG< ĭAB0hժ5ô0Zpzunݞ~ڏ>|۟]w?{.u%yc>/]e&>}wO`+/>9zMw7O?.ym6X^x! gig=Ggl\]#N~og!Mcn^Ϟ/Wn}}o8y=C]O젝zŮod'g?x3_ʳ~|jο۷hC}͛?0lOyK?o;にqk4ݷo\|/='/<#O6q޾SQoS8ūO6%ߘo_Q}m+vm@ź6`LpD:SK#ZS('.o=g}JD#w  ~6,--f=o21IְO;jΰ- jn I b.f:%K1РPTl,7 Wc9r@7^T B`ք3LX> IDATfPn`*iQљtL6//̢Camnd$v!j-ᄌ۰h -@E@ S,g"պ̦ 7I(k;JBbfqEo[771rH~L=|xC=B "|!!G4 col.#@[ 3ƧJ)ZM%NfJ!9Gycj2 w N^Ȼdg3^Y MǿUԦI\=V2 f r"õ_5F  <`DZ6 O) -RSfSv, 1g״K;zoҿmMS>?7YWop6v틍DQlVyxy7'|S_~ekW,>?Ϟ>?;|֞^rk.Ikw;u^t9} ^o:Qn ݸNK߿b۷?ԗ6xw޽9622?ٖNwo_h>CiZS. ]awClVі33t1ʰF$ۇv;oqbML;CfYF1Pt#3( c(ej 0~i-s4ҿi:Vf}:x`ARұne܇*uQh5%yho[lDX`ªL(lux>(XΈGP_4C&b]/@eZc@#&df윳chL`SH*:PRh]^d܀+'6(ꚗHRįw(EO72buy?oFIK!bsa0R*y>?W2K.n2R_X*T8m:*gjm31\s͵yH8wO)}L؟?Ӯq镗W?m﫱]\zwi_Q] '?5_s=^QG:c7yC?۟_-d;-exzW#6~i}ʺr^sMw~_rq|{>~73^w? ^t>֔_=M?_AO9:gi~'O˲ɷI| |Coxó!'|fo\fw|=#䭇m)^9ٮ XyGfxmZ vD$:NAQMRF]Ms}hYj-%,_sְs@`͚AU^k2WcFAi?{G=yg:i:[-{X \}X9'(֖@9NèTB3™,4{ca)C2V} @b[G ב]"}>'[:ECH\"Y$3E~x!ӈ7hXzG^gG46UkN7/[C r1 W*db҇jDFCid+&~jA\ 0OH1œGD`;Ӭ\z,j eHTs\kƺ 2%p*Pjj>C^ogk-^jRZ&b{¡d: .@כ r9g<ͮ۽wU:7>3_o׿}fed_xK2߽~[y|@aJkD&Nkx0#WP("ѕny[Zh`s0khѰ}~@kw#rŖѧ8ݛ=U1p>< t&wuu%UWq!)WIθ%:hC׋-+ HH%ؐVgD^:hPF{KM̥ǀYPIhf:5#C2; "&^%:%JRALځlTĐxV, sb>iC0 #XX, Z˖h|ܫr{훓_x^x*O~zm7\s͵{pYo}[/ַfiiaaiiʀRU&U&p)?-U-/7,/uQ7lx^8$4/w {Yl c+~sͫmpW`CSzd{yWNY:ec!/WqAJ8&?[9~Ql[InD"#}Pk:C<;R;3XcX?WRKqs>%UqFk,x/x4r|7 9„i4[/2Y@h Pem&ʱ;Z~TX 8yW =!F'TTk]H!a.y7Ux`qK Xk(lӶPx8UBKnW׉C*(J@Ag y!bFJч Y*JÑ=`Q*Rsŗ@;-xMb\JruV4pif<iuҦ.jkbMPO!"e5ű5DWވ7&yvFBP-(4 N hP.fc[;~J^tڞjVmp')DHT8ϯA&fDW\s5V(s1 (7I24U}KIs7.]g?݋ߡ![n6O8K_nmgvU5q,n:َ)I}ͯ|3UZ'˕ei& %=^?~Y(sXC0VqvpZ CgTU tyNnbzH@P3yM$z`;X1LoN,--//Bto䩪e/6>u VV,Å;imPpG @P[E[Z}BF DuQnq'汊OTUy9DKe1>W\ E8)Jamt(`!; 6ao)\tq>, yEO+L ViCFձ޿6E U 3M9/eGl z, kҮVwmYԅg RJ)E"R1(sBK1AϩIN@TU'RW#^2cs:kUUXdQ+RD5k-݉hEgy,7KY@UT.̉7wn~W _y׌7͵ O}c߫Tgpm19[R,zxW-hず_ @} Wg|rk݁D~|+/q}k\yϾp;Ys{qCvqȢh ۇutE|6mHQ3h_B=xh2y(A,u2LƸ 3C,Q6RTR|d=%>ÀVY=Bs[\8t/DڎACbN-M1X&gkD0:ޯ!Λ^.c4h䦑D]Ӧ .**XXO5JR|bkUM@HQOٴZ=5O)%80P$Q6cղeI.Wngi eD* ډRUEx(a1!2T\ @4ΈPotp 7Gϟ\f=`%Oz[#7_荁,x2 ;Ý=V. k?ҡ=?{injV&ؙ:NV:21dA ck-R}¥ Ty`}H 5|L EiFPHv.͜D3RkJJN0v(,`kX o}k)mO㸙ɍ|ƒu wj<ʼn:Naf.긒Dͫq Dct(ȑgHs!bNa+S fJ Q@/j( ۗBv Dq:uh!ϗΌW M'pDjWk뷫Hc+*BāwҾ7Ih34\s͵5yd tCxżƊ c{B{VR<u˼h{:DBx u8W~Gy'WCXQHMffrYor"MO'[uhC-PTAjq:&}fcntQMVU>D Q5ff߄'HqL> +n[^6 ['M T2J5hR.kk. =, $"g Lf;2\s58/(tKhRz9z<;Z0B . PmBW|~GDJ/>!ߜ˿W> Rسwz] gb޳QҺ{AL7b7qd.'s+2*cU1SD.hnɸ90ľ"FPz'HtFGDI,}r7*= mR!%:w+P#Pj]aX`A\EށfTEdkx3S:/ LF%,?}2'h'FNHOQ1Z+ 8#ks ؂4ш(@ p5Hxt%HmntQpH$#Y K&Ǝ&L%Dkǭ^f67"f@hrdCճsuXgZi=%6gW@*靁FC9d> @&Z䀒hGkkK-fh~="'+=lžȭ̵Y&&ݡyk΃?\suupYzPU8uֱٽ@#oM.j9[g|[U4*$?""=_6I~ B` sX'w6ᶾB"<=':$a9ȑZkBD<## 3lK0Jp\d,:Ap,>EϏY o`*GM8Ã8祹r3I*RLLjWt [n]ٕ).X3hÑnHb-Ihv+N}~hĭD'#R}6#TQLAF`kP.La,"dNZ5\s͵eKAKjX;!ya_a $ %%wkbܻN2T{:ݔInZi>A@MfX4]"~u}< JJ?`G- IDAT:O;nq7N{;{_tr~ 'Bl ̤`fqN"eQKH A(1 Fj+! I-$c'jfNގgn ;|䉂/V\i(Nk z"\7Qf}/Ӕ?1 C~"& A!r,qh ՝ o3RA"~\.1} l8,KSˮ\49m-0 Mh=xO`Ј 0l2Zq,$ǀ.Cib v()`yLԜJz6b)i!2Jv!i8"FR(13%fUDDRhag3jfF@ż=U;֤dY+ /! Zlu?3gxhҏE4g^ڤ7Db]ay=qXl8I#瓠 fC,;E=2 MBœb˧;@WcwyB+neA!ES9 TkU(%ѫgQkk6 y:kJ *3iv+-pUH-<^Ѫ(;\s5ז8x,QYsڵBXD2GZ5o"BRYpqDJ5#K ulU;(`0¬5FZoVD*$ ?Z mw`2v=+w?OrCPVbj%qɟ2:R"{[8v}NTpC~Y$+c_gs5\[8:ֵ\|tˢrZ5\sm%5s}6=[cGw* +ܰ6kmn$A<ݕJ:rx}bOR_ GhV&꾟n,t]Tb;**npU5K]iJЖ;[ >5Y@!q TNCfBfX>aR\KcBEL}ޝP$^F "hwm-w?ha0LZδ9r ɟ:O1<&* P\>dXT:z<(jxtld HDb "߇p5ܐ l|"wdlG|Y4_!bK^5r(!xm|PH37`?tGzKڣXpHa2b>u%&gL%U6xhj3͝sWF$a 2nă~/BAf@ˎQYJ`UH[([Bp#0X-lU~4c E1PH]H]AR$F LG*1l#\2?=q0NJι6UZ ~RV@ܬ8Wh#v<8*w5fX NMH hm HL\s5{ ^<ؓj[R115;rR ݊jߔV֬m}o[S[fu\scb2e@ w4W- 2SM( (ފK/~f;*&'#P CR4Lx*FU邈\_]3"+ 7A;Y"zes`bl%H&wGEUUe u gL 'UeXDJa"V/qTq#F\_l}Lo[La(ALO@uQka&IM'lj uRhBTN1CK=d,jw-a.ȀX+;&@*&G#JG: bb*McP:QМWmu&ꑽ!jIIqRXĖeTkefϽUr|@gc>IX\ØFc&#@D,ɕҠ O/"W XGj%Tp@EJ(3< ,{Blvӱ 31\s͵*2/Guۍ) ,hozVzk~O_x۝qߣϓ[=f\s/oOVAs.UiezB5fP+Iqe>ϻ o [o sdv6K5{8/jJ%R",//_\H7!C+o (3֓&V&fW[>V\l =ɦ1-',heYZR DDH=2ĊeQ_-ErHN.v"b=>Q!oE!DʢBTL`bkIBHPwDʹ }PDT"E?wbPDfFTR[f-E Ua 0 ?PhL"$ةgR g`LT Px(,H7(L(CYZf͚2P ҄)J!f62ìId b.bQcT )l-R 6dX_:MBbtJ)b3)(nذa.im,@!n@UJu`Q ׬**`h \cX00V2 ذZ4a,- }Tk &* La͚5CFZLڙpawWek6wR$ 'TSY28 QZ5~k/y;qG_ozc>Ma&[^WnSxVX_y=o?~~͚wE}g9%wƎ`o|eoMKǎ}uwvndc;o/<7fw~λbSMvin3__s͵5jhW'et}<]"qkMwǴ{hF]"_~_~yOSU8BLYsKHBX7CD#$#"a.衡e)Xd#bv,n(*`]npC|>rl0cg:,S.$PL4HBq9KF/gp4.sz"a(O Tu`'#[kt. F{պE]x;Z U ΂0LSŢZ.kJs2b$&N_7Rt\^D]$jV3GJaa.6OKp:LIST̙½G7#RD K? yC{\7G_;7s>qY6vS?krg\O>Uo* tCU%;<|٫~V>M|/;Op7ͽ~=/<_bs͵t^w  {v`섎Nt EN3#ғ }̔9(h=~wI ar :LF)9NtiPHV#.D{LY2]|!!ܹ t͡bD"\QU#X!3hmsѸL@O<`wT2 &.1MZk$CCBR[>O҃W#ZexqW%Hk% l6D0kM bfw cQ ~vw,tͽXh{k7@/;z:olN}o}]Oo޾w~?G~s$;S7be?xI/6T%z,Y?;sc6WE>-zυxƶ'=;{6s͵U{5DvhҖBUWL@O!3ō./vmY>sz9f_`E3HpCo^.V{46IձC2d&+.FQѐ܂{њgnX^?W?|٫^:>iԓs* Xp[~o>+7;׮D1|=<_~Q76XvACAĖWnqo>Ng|ߛ=55\[fql=L EQkN>@dH@"DTQ(Oqlδ?UW.(dd{acT =ztsXިtcJG'\ShJ@s{ڶAdq졙}fZyrhig!TF}:qJ&L3ȪNH1+a*IJ!VH`5=P4 Ml)r.wAUN\Pb[j23ƻ8?.q|5UzI7쉱;=q1^]6F.~ɔC, ~<)Uaw~ʹ[N+9mLߘkڊeAGDp'Ybk*ZLYJn?um^v_uc5/.=S o^_:oq]#NK~yG}1{cS ~kK6?Y){9|I_X=7?zۼaҍ~\sm-c%z45Ӵ^&ZS %ݮpN5 B5h]r:;0q8%zd @c'-u'Sf0A\pGt(i1aݪգCI foW.L~ұE{ LF>>cϑRCѤ7-ղu54dGzxkk˖MH*^DA׳V툦W"a]S8SKt'5IXS3YYgv5\s͵Y7c'e0gR{P20Q]TVMɵ^ℴ7K+~+_>~o/y7[#_{z't9+8\cYuV4}vc&!S?_Qs͵uIoG'<f&J}p]lQAkUYG}1!"\Byyy:.fHv䆔}3IVVLDK:r0j{l:EK`4.3Pk],lG}#gsBBB/g&[d"& 5L.\8ãS(A#f%{oaXV8D-C5GCt$ID9"[E m&2 Q11,< 80HEDDbavbr۟S St9DBy k򵠰 9yc IDAT)bʤB - YC jt&Xj Q zxgǐDrk!( ,crAP) 0JxF:DQJ)L,gaDZRJQ'sb>2'jX,/ȑN^\)M奥%ۓZ'H?58.cNbٸ ƂP?L %8# O3C5&fDL$cTs}LK"aZAuH&- ߇{8%&@@6٫,Bc GJwSڥb.VNv}f5w֌O-XYLF_nIucJHR;̅5P #2ݣI"cXz_IIic+#N+ ۃ&3!0Ь"{FZZcC{ r   i*P5Od< ]ty`aU 10BEH .s3$r J[AQg*i-uLogd~)p.x7vm6TZ`\N,]&B{D\S:D;߅|z"?ҞVfd\QiGP()F)YG|?)S =Aэ\Ň-t9+GkNy? 7'2(ò<߈*ڞH\s58&Aܣ?jZnQo5ZGњ{Qxǔ9-(Ij&{/d'@wyLL(/5Esn4+Kdw:Ba?h_U8`e=<AJyn]Ȃ}R3q ]:LM"pJhk,-c8;fak xJOLЫa~\۳ "׽T `˵%zM#P(XD+A(p%WJ`'E1M3D7aW+Gܢ \Sw0  5ȓ=bq(i @>cfLM6avJ;(Sg%U%b6\3r$m)3m]qAKkcbٔꏄec7͢ҽ@UhV5\sm=#pDоTZLq5vO݉{[.ȥrdP}pV&Q:DwֈUew3ǧot C?^ wi"]=0%FRٰ?zP}BD |-n&2@JqDwC*LN+&UeJJ8 Aڄh:() _g'#[+~"r$Պ#֐ =Lc߬Brz+Q l#TL.Rlh uNP::#$ & ' iBʀ7UӶfLMEg3\$(Na d^1'|s[Y{ |L%?\0r;5mJHt+-PNąr NIHҨكSg*BpRd9aiu5XK^$ip 4@ekcKv/\F?ND'0 T $2S5\sm aM@>}wc{3aț>R$)o`EJz>ԣ0P̊̈zHR=+\?&_` @"9MPIuafzȅ@P ֺXRde|eo9SrNP(XUUKF EևP0.,j5"Au!]icJDЪPt _wC&:ZRIaDR+*>1pިb3H/O>^'.zRƖ0a/7 \e$ɧ@RԘ('qzqigLPpRdI=V%5JT,j0)hf~Pu~s9Yk&Zbϣ6/Ru5`>K1\* *왴"E&&.XDR}6\s͵5g5]sѻ1/ 1 py&_vkaIZd VyL"T}yHͅi0`iO= cKH׃d ej Xk'{ 7бu;|i_{6JA zcpM0-'Zlٿ ER$Cg#3"N٘XC%bg\gBxS_t6Ŕ6 j432fNeP!(Qa\y$.L)Y⇙ V* ;Ӂ*EEj2? OL+jAu43Y+|.UpS]sB$&J]Jѓ=L¶az((T$|4 ZZHm)%Eez˶U%TQmȰYP`ӌ RE],--e&k0nx``(e?_aٴG2 )NjJ)vhaI:BDDks5\[8VAvo K~6tþ̨tQ*awkТK-\WkSUЊi ])a:Ѭ'1:*fV@bb9muOKt'Ԇe?GKD^1@.녠+M_dNNt,:vd ޾O">ߏU/Vbba.YRxͫeφODXSGww=hۢv=URA0d֘bMgQ&FʈWhQPE=C`6k:G3s;~Ll$ ψm+MnPڲDl+$6ao hXҿ&jN"8'EJĠ޺pxO7~ytV򅾅:'Ufh=FսЈu=$tCgtTT2YF2K(93hgdM'M QUfDay)%$6H N$haZa)h :b4wZ˧P̫Z|܄0J`hQ2RV!Bx{p\%zfrH#TO;\'oF+xA[b"YLja{G)؝"a&6$ j4{H x@~D( hQQQz܂[ ';(2%)KV+U5C2i4gt[X21.٭[n kzgi֭[!+l/G!~,?`7А XСF㡎ɟS %q@|#`tW;]N\F5f;j/yQ_hc/h>0 wMVܩY2ITtgٛ| ;Ώ'*H2ޫa +VQ=/`%zclaǎcwwOP8A{&7\4ca}Y Z'K+ p1HLJ&_ϛR"2O^"egIr:Jטs!5N4~tK]#* &PO1G9ؖ#U( ۾ǭ[n&#I;,i5R c3Ie"\&nݺ/p(/= (8]!k@IfJu|K{z$Q7єu=#q`CPW^rzos|\|@}#[h8q(-iA[ ڿT%Dψ 59h3P'Kl4`Jd:xzu vl(֘ +9sN9'BGTOIwN[Ӵ{[raa>g(R7L6c "FDKL3/Oe+f8㩇ӓ`@ *O-])M:zdUV \+UHj i.6V/7rTv;TU֭[byl`n S0̼`>bϓ.0}֭[HC z~N7*/{CG?ͶkfA1͵v*ֽ{?l*S !~cD.;{ hhi6tz ?O Xc;خqm1gSU5l ̽~iatj=t )%C,<"5lM2|$8B]Eϴi(\H,_e{;'47OTCF7/ %n]A,ܤduwTV,SG1ړZvBGK ja+dYR&R{lNfx y$b ёqggI 3+Rx2jL29!b6Є]Yhb=AJ"6ײ3@+M-nᰈr\ 5[b3!PE(& cƀ89eׇG&㩎E7d4 ֲ 6A:-ʀ!)}y  &OW,t̵=*u|~%q#o(O<.J"]ttg# &cAT lɔG;(gˇѭ[nNQG|Zo˖1%&7u֭[>[; Z']Y99:JLrI!dԐ wB_uI؇4C1Uj+ffQt5DeS5BDheg7"l<"S`@IhZ{{9'RDDzI &xtfK6;fNzK3TЙf Dn^Fg.wVڛNp$}ne gdb+xBKB"=#dM{Zucܔ~ :Gwy]!-e,q{wMq.&(U~vF2k[nݺ+ v~`4.w(lAzwv )^$J oݺu_!bw#/")#CCi8WF7#j!сGwˣA]A< oNpEo r݌ڀ@o r(<0$w|Б%K\U|2RgFmq/]L/Oä+uQDmgJ$9t7d3pk/>^` I=WCl}gD ͬ}2Stzc]2<^_.%*T%sALJ%6jXSTnj呭kȵfnN"2z8'\-em6Np8s1^0H/CV[qf Me*1^;t9FfrwHSRW+i"3([cGu\}&\^"\*q<ƆBCIqNrG}(+8_>nݺuW2lwɡ|\kR_dtٲV%D3]խ[nݺAP52S :-ϪrLQYͥQS@ /@F'Z@@ AB&+AT-Ѐ$H3Ƞhd+8j=HLKU*:R ڈ4#fge#Jzw4;;EF%zl4[lm hD MR}D8!FU8!ʩ#@&H:ZL5tHBSZ^dJf+h1w቞]\rhj*49ς̓3 j13 r'38hyf+5nD.`-} H(FȘeBqyE OyT4CWg3ƞwbXWV"V.oR"uWj΄h `5UN%eFnݺu7\W% Y>|'/&y%*nݺBN§)2t/6-F"+ʾ4f3gȩk@0 /wvgPxRI~>9y$ѹYA>lr3ɼ VeJnd̤3SU3-$F/;|ట4-e {8އElN.x$ C'\_vF 8D1:(Wu'Iy ϙ<<5AhFL阶 b Ehŕ素mY{zQ Kg|_ Di^nݺO*2~!Y2v/T.|YQ3nVCnݺutO j~Ö2M02~l]DEah䕣Y[x')x61ǫTb ^IlO`k:QcI ;$v$lSUe;{zZ !ai05;<0O3!3VziT.4Ihc .M䘗ӃN|.xh؈ W{Eu AtϏ|>bkݽSXVT;56bJB2|=òsj=N_4ƨSʑ؟?D0~:Mg(RGAev:~*^6NX{y uMq%Q<A-.TP'e6TX< {έ-u%je'Fl'ب J[nݺ7HCF[\,1dI3"!҂1nݺOV?/NPhZ LNh7z'3[!͙F`eK:W0=ć#(9dKZf_G/Fh :Gg9\r/"F ǵ`sK0(EHk*Ԥ xVI#^ ̌~H=SVĜ ǀ -樆3c@;7;t</Jo+k):8zCe@βgꕙ2፶Jhc_o-ͧN-~hjL=l%86$w[l#S)p+Cu !Soˣj&C*Ĭ\r-huޒq:|s((ydu#tnݺu?Amh+_A䩇V(7ѝ'e!֭[-at=@NlǺ!lT+q[k Q!p/?!ãyц'AC#b%X:|B'Ѐk"!Gyw}{_~HMVz"5enpLJQI.c|ֲH2[$m9ψ4G=pd3ڜ{.>k~Ta~FoݺuG̥(V ^+{F~ %P+LC/}8d[n'=0X~%3"yVs *G,gJ?TcokjIJbbM`tԘ52z#@A,ts+So+6.!#3{&htgHF|̟H7'XՖjz< =^ffǹ>&qhgd66dÔ$#*u"kCNr5;n2h,;#ZM Zi1(' +G)1Ğ=|G(69)9FGp$ef80#|W;_&i $.cv0j&lwya1H+~zs/X 7BRz=՛*rL={MaӴ[[Nhrȥ#bZd`$O;nshޑSIV,s y\H!_k)/Ԧ< Af1[$TF.GhN1BdU:mC4O fvH.p{_oݺu !:VxFg}ֲ+ӕ3mK,oѿF܋{֭[2aV oƋMZ~B.bhj$'i  C(%=;5SE@~FraْZv8k5{s4Z|Wo~z>%@1 2uƧ 0.{P8$tg"I,CAs%>|h3}xpSXr]!*4=1\tN̸/(hJ@gX]&ePX榙!D/"Ɨ\r i_T̨iq Ru_/^ _2|o=Tn8dh4qcIksF8<DpY ΍a-;s^ǜ~0@\o\ө$r`JQ4٧҈&㿼_-[n|ÌF.[~Y 8cGg}pcM]9qu֭p+~c-`^@c=6w AYX1:HxjjCZXb=3 @C@e$yFgDQ|zӬcQSe"Qڵda;Wb|]l-ch78U>`REID!YI0H,w9N*PF# \0mS39xlC:Q%kY&v3,xGJ+tdjtV'ۨt'K+ 3#5bHn;д8J($p$Jz}k0ɕF\yeR\I\AnݺuoQfS(Uk9^0`6JN2`Z0(Gl=Uh/O!RdX'M#d &i,JiG'˶ibp G$BR%V)P~ O`$"t|I!Nm[S&H%?/\SW}4N~M'Y/-,7v_iDClVHpOi'l.Vڧ##36|@0b٭[ni-l X2tl;Z>nݺufgUG\89 &X(婷Cg?d{ϔ%dRDK/4lrm:%#"62?'#?v:ׇahU`ɇ`HN**63="9P+a 6 RbZe;jx{ey0BdƒCq甐ܫ!PUh:P)홵)L3ufv&#`}2ex|fm8+e@1+(YXPBa3do< lr%5Y0P†v&Qe"ff:kV&*s|MS}"Yd8ze֨J![Mp*20zHL2= Ac'X_=Ti[nWG8->6@h\k~,i E:"7[nH1Q-"D3[ #RQ\|Gt\g1!t2|< L~f`DnбsWBLe)e7cU6ZJ~;Zѣ6YW1`ʈwaL5|w }Vu`z )DHѶARaraVI E]\ -LMh&L7_a*:U냢"!I;%̰ofI¶҈ Ee%+m&PhQGDD֎nb C(Cik +I̖QڨHdyg'^~jej0(pԁX&DaǵDd椪9w'E`!4u~!>pZO>;}ͬSV$ FF-ol[n 0(B>LҮe/oZMkC`kYƿf#Lrx$2"|>$ wy(1;a`iBЄ3x+Bcvc \[fQ#o#46kevʊ>6blemh-A,&`i=9E饐˓afEws=Zըorli7;l zўt֊Wcl=O&pXƑ};fbc"!;L=ڵ`LZYצYj~_w:E;'pUĥ1,NkHm R ЁKX47q ,gy3nzPBsSrw[]]Y*6eI8vR^F$K^&[nݺ7!]0AH eipɄ_cdηnݺu9დ:zpp\O,\g*#a,66m%3>l=;d˷:mL0:'"JOi+ZFJGJ<|{hp͵s};az >iY&n& %( 0 $# (Gd a-DhvsyR23>+h?^g2hE?I6<_ $"D2܁XokH:>*vHU<ʮe$t[ (@Ln㑉aOS,e)mHH+oqlYyI6"1"1c9t fp_ȶgY0\ zXdLg .[#4^icɵtu{(q"a&ƳTZ0'mMbP#VPL1l UU)toݺu_X@4rwȉϯҤ1.E [ncyvft?[h 97ta%OSV*G`PB =;Hl,i`T;awݮIc( h (gbY GiWX$AfeM^PJA/)8- iȃ3YOC`(P5r|FV@0 *%;AU$N#ڊ̗2eʖS+pNH]g(rA6 ؓk 4$'6NV{ r,%ЉMg+,i!|=ġɎ +Pmτmȝ=V؏~o}& *G8MU"ΣyO=RW- aK`Oڇ3r*ˆHE4SH>ƟO.Ka4V<ȭ[nG7μj+p ytE-/ɢoRte FIv{cH"|EoSqԬ<[5|ʀx[}zc #8(AgrIl$KƬ@h0aa e=5f2gCZqN]puh*j2vGVQ--* CtxdDN-NQ8,ZjO/  ,6LY@*IWGɬTC2@j0%EO! U +ɾR>#8 0{ox|^X <)qWj|$BeɨH Z_b!syTZޔ+-I֭[]2m=9˱QdL">3c~{ݺu֭phǯVd5'QDff={ L:@ dGgct|?l/_Rࡆ=|;)6Cz蘪G OCe>2^uN@f<&P_wPw+Fxc: BV: 5B )1ޑ(Ww) )*| A 3eFBEJ= ZaZQ{j+Nxj?ɚׅ@@QA{lթ8~Z+%x#wI x{=zg5 IDAT_ /0 'k5beۘ`zʣD}G͈VK3hI#hN]S2)6JaU{eNia:r ԁb$T$ՀXl-V6˸\ Xu֭[HCmEDRj>˝Vy[-ۿ ׷7[n?pIɷ38^N7G+@v x OWMJl)[4[Jlebڍ墶$rk2 {,sԲx8H/2BG\P^\HcHSۙ@{6f;J"SÂE$0uzگbm.CeV]UFE{h={Vy# fJ53oww-ܻ*pGcPpr}}*. kVVYVm{|WD}P$Y,=+nYTp.ɷgjښ2DJ6ٜt%ԿWU$]"1n!}= @FY~!X+̨hdA)Se݂7Ypy]ZI38"_OEf+DJ{ah.[! nݺu_u-k6SE}o+ ΦGxx2Ճ! C* +c^FF ݿG3"S0TўˆʝJJiE120#x'Ze ̍kyqyFL,8mt˙>DԳ;jꋢӞt.mV)3–+u1 >5NDcփ<|B:0wAv c{v%\a"Ap)0 .rqEG ic \_=yK<便M%i"IO+<8.9uA̵DCi" ,if- K-6D so/`]&W Zȳxw j3GAˌ0{oڇg2˷{ȣu֭[&ޢ17<|N@b  mqJPփ6jwpb=]lgJ3H[6<-ud`x&/?SWDT͡X];*Gpze!,tTO?>t6_<1d|o]#aneKL*D>Te # i5e`&8az"cRCSVxN͉?&(DTnК|Qn.Hm1OWRH#w"k}oݺuT݅CKek,8 +`6xEz]ڋJpDaN[nHӹ @?ֱ0|5]ӦBl0 }ZIJgO*3<"y<r(B=8W;# ~GsѤ5㣚(fA6ɥuAJ'n(4'W9X&Je(O6V ́a4_wN80PǏ>[Sd`"؉&9#1\GICWgN&,qERL%g%Кm`,kf_ƽOIReAhܷGPTq }SP8ܕDe Z դ)4AEI|{̹`)&ƉdXnXVߋ⧁ V0Ft),:CJ f gC3жkpnݺu_7J~Z2*22)n?id)4TVn;nݺXt Ghw8WD5]L|>v>X{Ѐt ߿wz Bzݎ9y- ;kh "bP:0θ}KO2R؀ LEA1M9^ZOG=A̡ѽ?/haҙ3BOYӬ" FS[SfL f$c>k}qɘ"! n(? (@NNC݀L>F][K}j|ߞHOgɛHpr2tO^cJ \D3pBoLGy ʉP#8U v3u[nU]r+ZK| p`Ң j(]ʭ[ncP) gJLy,}5DV-`JVzߞJ3?.V;8܏&b1?YlpWB#&eB|`]tNU=+xRsIzDx$asg:? )p0eX$YEfoeu£ѺWH"[`k9 |+)$EDz!o9AoETG ir )LSa:6&C1Yk}}g* )zkfx]qxG\kl9jow5XNޒ5Lqyx|VXkiDڶ>{kf^-neJ w7O)h;%NɛҁȌJʵ֭[~èキ7b~Eeȏw\{߾u֭p,ZRO.iS1ij!G~#B6'E,];]2L(K%9-f {yckAxq&6gI"ƧRx.DFb(|U i之k6ĵb|dmf'IZ\~roʭ[nj$1ۖQnQ^ \O"M| &~Ѿ [nGvGfCg+ӿ~܇Gtk}rݽ#Tǜid}A6 "l|}{ZdjGl>U x{7ˇz@!p$e--#ZϠWNo:A`:{cX@wѦS%)Bd ^`L-%4?z\DZR& =8ِP $kQwzƃ7 2=\o~D;~_1?. % DH\F$TZt~pO\ﮩA3 $4|Fց&̶6y(NA;^ѣP#LՙT_cf Fʢ@8mzj)];)"OL7IuH @эpGՐdbKm=s5A?[^o?BY7e gc (pVJsX`Vc) sRE%ǔ(?n'8#;Gq@(+LW`# JE$$cvđysIF#؆U|u֭[S%{e&3yro'aCKz'ݺu?8[U Fb)T8{G_bəo'?VWjNBċ3R`dI9^Wl#{كA*e2M& | yfh7ԙG8ꁍ4Тv,}R*+#S+D|K&hx7hW+ARTg)ikjݏunue8.*݅6;f+:~=s P_0*vd[+W<@ԆcJ-0Pb\lK˷#x:$r3MOpKT%DI1P'&?F0%*+. ,:6'XbH[!z(qD>-WK fmu(l@-%všau4$z{B,ܩ< NqL[nݺoS."tR >^@3au֭[QixVjyX*ؙ츎!"HQ/CVAeP A"nmZ" ٽQY^KšV]1vb=ښmY/@LKp,%h3ى=bA0vȄTYQ\^?Mߍ"=0bƈߜP"'G4(#VJOa.g+~" pu(2.wO_H䠭2QDpJ44@0? Fʕjӡeo5md!)"Ze餮l,ER#LzC:,gt&elr|.##iC:MtvȲw Hk@Į7|rUlnW 9Oqq2bi2fXu֭p%6MпnFSy-e][nGʹsH)f4!!m= PGem S,<'բiݗ)7 [r;!2p&GDߜoH1x "12!H.[j|eCD&a~;]Us%k sKUT&:I<(Z|~|>"׿6Q7 U}GS`Zk)XçXk)5jpD ց*"hfǩb *Rs_Rdk@Y. Zr`uOoW4,l= g$pCIFF7A[KcU $p: Pj|&*# ;K˖-; ekVio-EpwMg_wC9{ A~qI.@H4Pr`8~J,d|j:vGȲݨ]^*,zfH۲@I/!o89H/ʷnݺo}l1dx2Wr3`qZ.X_I`ѽu֭p`({m: g~4DD%kP"FD9߽o7 ,EеY˝(j} ҫL?P!TaytIhb z_N_t=ַl<eP4lźz"Gf+!z\ՎƆ`њTUqԡ,v@ M`py be-'y(Z !*_k⏁)O[YTa7+t!QthowB^4s5Xr'*';QbO2]9s'UIcnjcJskI??>ֆG۝,'2 yZ<\`P{lj(u5 _FrOՊ$uge'N!=3%fzm_q{xH€i%Q܏dR۵@-"xfuߺu֭^iEso_0ś hUo52<C[[#il޺u?8j9A ݵοV;(Ks̎}924AgZr`x_lͭ &?Xkuu4lu78.֍qR`݋_@O6v>f R2ЍĒ-E~/06xGs6D4 ؝?3Sb@򼧱C禢ej c*U- ޑa?z*(#l NgPϣW0?aFre:C[iȤjV%B̍M@@JlEz4Vu_0. ,n2`J̒%t@ 6J__;=C<%yM%g*l ]pHpog'%1oX109;5PJu$|P, chO|%¸5"$U'"4ojQh^L֭[ze`語fA$aƏw, 0h+P<G[ l-W[x֭[huE^b|}}hbfO5fɰ8 rizlqrvP4Yx&i'45hs[L/R̷֧54:]OȘYe%JTĬh< M56UmJ6:3a*/kgIVDϮp}5ظ@,MRzNnvoM=9#7OR95ᮕjwxoݺuʭ螪2F0Qft*~ #?[?|w;4E %IjzXB<#9_6 ٌGJpk8X1LQ40J_ =C:\ۊ0nff\.?HRV,iHz WQGPh9)$I#Gm\{!Y`z\TkʓF'䕲Ѹ[b 4/AiPp\aj(d^x:sC)3=ou@rhG\cI:Ѧc\V :8I$K9#ݽ N<)5N!<E6Fo1vfRPh`uq+8t(az53MY(AröTH MTy63 :dZ4S+" :@}"7GMfk) @OHIeJ`pys)g5$I q8S@J,(b'Ҏĕ; oD i"B $ß4fK&5cձЂ3bP9Un[nU].Q]a@xW̕oGnN[nAwlePhuP۽뇋`f3 ?Ewtl5vSV< Eg.G'JҒ3i^f:+FIzWEM*G$\2CHg>IO?ȢƵ &g8;#xFDDG 5&PxM>sL428'ʐ61S8'Š '1}v'Fb\eC &'zs FKf4ZLg'h M.;2dZA( #^IiEcqXe̱Z f K>򪽼6f@i|ei"^D YIGgU#2d& }\5Xn"L $[n|#| iEI_ߟVG<ow[nݺP1dI'_a B+3`6- AoώW;G~0 UHN: h|s5Uk,O)]v& 9:dCt*'b vBfGd.lJw #Ɲ!WfvL5$\ 8y4}|l}mfR]:a'iKc-Ɖd"|[nݺKK(y8z!"f#Ƶu֭[ ਷| =ݳmꁲx_ltZOO2Ht r 6Ԓ+U!J^DO*3 =$ iZ햟G.:VEv1j~o–~t} J?>c2~m[vŝq.x` uhƄxboCHB潐e`!&{!oZNaĹYݸ),c6$襽t^}9]n/;L#v }rkM:jIzN`[*"|I*x_FKbA"١YVO>0w93&,"GBz"zaG}o4ƨ՗>" *c#.Tv cµ*U5M| an6^J[j}%{ci6 1.VQ}PP!EgPdiB‹u.֤Bĩ5]4%_įD ]%L cpl"ӨјƣJќGKo:3SܬLsT<_A Ɋ\, Mp!9T!fQ㳯/% <&g>a>s!:xO|# 9B5+!85O>);QѦ'3iIx I/:P%Q%Wg. Cd} (š;=*ٶSBTռbh2wzQW) P2C&Z1lU߫h5ݖ!CW B؜A]CZӒf2gجօK&$=#WR/ E yd& `)T:r%&zZ>>DSR_fknZ""_i>"R =. X!fJtO)nv8d0[T;UU[nE't) g0T=ɷ(*/]4~wyoݺu9 8)q$VY_D_G/PWO:|h?$b Q)!SSn3T |AQ];(P Mp:$lt͂ Y^Jɸh/ NAttcC+Z(a]5[]loQz6v." aZqp}āVCOQa:RʈLIB3gﮨ -)/ /R$G_<TYo!&) aPaWrЄ T "84]^ū#^ӗ4wA#`٥:ߺu/k}g a|s 1Ibr0qlgpB^.m0q֭[:ѦK+A BMh4k{2S=e}z9KbNmܬX*-o!Vw&b꽌.Q9J!E2,/~r3wn4X&S&I}<TBߴ$l*"B˙4WA8e{ 3-N%` d3p)"{_2NॗILHx(;dJ,h&.D_[fhf";znݺOkx`. PJ aWD.x WZx֭[p`%]qkӔHΩliifa[g0EUٿ[r[s]h ~0"W<V[T_3)՟i4B="̩h!&י@(/ p.."&JG(.i#4}WPYfgFTGQj}4 _s7]t Uυb=*7Ԋ"(FWcI15 YR\$ST- /T/_n<"+- (`(Mp,/,4I詣]Ra!("T V7ȣ%縡ܽ:ED "" n~k"Ef)且cZ/46O Jl"QI4D5Gy8O2(aM4_[[ui|֭[z}gSyn(odǚy 6H5dxu/7}|y|J9]$@@>kF!D2l^ʭ[nW|+ 1isc~Os>Lm/WUw Iܺu/ ˠֽ2e!D0t聅8x`O8giAGU?SjEX-xwLw*"v`vTwcWU^ ,lZyyI9IFV>5M!(92o;.318qŒ!K`"A!]w9,l uɩm f$ABYNL`Iw/1Cٻ.ZMFJ,Q.ʒf<_(ap,02lEz9 Ww i^Hu#dbvVUFFDF U5J`s=PBw+2-#(?* 0}">.91,BfT'_QF̫M0<Tb*&[n2g5!GLCԽ(&*n:t18u֭[Ȯ*'?YlY̞|3Y~Nc{5ߛ\ʣ:T3+á|\ ?S>y Aeg @LBxEXn&iB;շ'+ۨkYA_i "ɵX%PUqWv(\;;&c h,Rl$7\u4Zb*y~bqCX &f kqa2Cx%ҊZIb9%A6!O3qNgfSW7^Y e С;wzcN #% ,pҸSlQk41{ƈ%fʕ2.(mZ'7@/Z>4g&OcAq;@]u֭[h0yM,TӢp2 ̞z\EV{>\ʭ[nQZ9e'gdB0eA*:$;"vkOÁ /c\-q jynM񾉡t[&DA±532TU uk%ɦcvZb;" `ClRc"d,v 7MC<r),4071d,R"Qo$ZHKŨݮalE+yP_Ukв gFU ! zAe -O fQ\ХYY|%|eԬ@Siw4gNKP_V{WZT >rp=D{R"y($J4;ь`ѻ4z˹0׮O:V9G"nݺ+prK #L@e oXţܺu֭ p!46釙9nZTqT7oJo}jP$w >oDk a#i[E&?g7r0_@;Ɏш}M MhxKv6~#*SzJFrVm-JIrDx m |-,L[ѩ+=;V@ |0SBA8K1(zD 0iY]Ɨ BnIJ ch7P:uG^ W oy@eS~uv&@=d=z,NӓuTզY@I|$,HڅNr&Zj$2Ԅ!&"vBG' ƅŒ azf k l?Snݺu_*bg<\6"5M ,a^֭[~qp 곛8BǢH۴0 LGDA δi:"4>XN ‘m2.PWgfggJL;,b ГjHůH5D0)h򏤐{f-OFЉMsDl"Ιq`|w$U%AV24K Xrt څ F/mWF(+F`J5$Jy;)sxlj9G1tNAF 9 F}Q3#{qPHXF^ q@h׊ƕECpo `y6 E F֑bm [s@EM%9ƻyOd"sMf6n,xʈ"solKH IDATQn;_(wmW1chK` nZ(]lEr6_2Gn66"֭[n]vkT>n2,f؆ >Cu w][n C$eI{GY‡0\H`w2T-:Erb$Š%2["#0ߦG-2d j&sTM;3#_st`K{{U1+xFjz.䴋X$Dl"bLIFIa">ămRڊj&0!2_0ޱBh~fh[ ӕ yMIfMRC!s"2>AIg<E$J7(S`-x3{i(x5̌3F D$!pun_\"JK+/=,СMpMTٜ**Sno!)jF"26'ͰI9 f{2FA.nt[nݺu|2TBad3Tw@BTMuz 1 AZ-ݺu֭ pT!iZ͞s9Ơ_t\@÷;"gCUD `@"mNܲm4| 9ZUʿ!r '),mmb*`nP PZk GэwpweZVdnGh 3{W a 4M"B1%Xj@`&ODIDP֤CP9,Bx\ABCx9ncTz RE*DÈٜУ p}]o:)4QD-{%.OfPpy:|A9HA0 N$i\ՙvĩ<#xf,;P$ >ME}k=&!7e 9*"f/3GbI%2}"DU#!Pu֭^:iYd ƺi1a384{}]s֭[~;;j0*V!#孨GgɑX0j(#rUf aMbdks  vBr'&_YK ":P&Ҍ PFޮ%,W"I3[/Y*bdNXy C XRP2-F 2 x4uufepR1*6섅dB\YdyT-IHhV=1lUd-\|y*pR<ЯKmQ4*wP?5*Ch–$l&!3ڟDFNddpmo1ZJ 2F4iK| ug[4>$6 YN蝔30=*ڊB|AYʹiG"H49`TS͘[nݺZY21q୼Ϟ \CPr@޺u8 ut Ws0@oNw02K2*Tf଻c(EKׯ{3b\XTH|X!јGǾPDޭU."annEỉ, M8gM \'8ҝPq WyYsh0LT*JbYIƾjz!/pmB\])oIss؊ VyڷܒAA!-״ 1۩"ÕT)G OX01']δ5JÀHGTm#PhZ?%`G "١4^PM慺扫n,|k?\5aAO'?[!oT'R)*6o[Hw>'ܺu֭SR_mWOxrE E$Z}_bV;֭[~A5XVlkJĆl`J҇R g! $oq8LfVZ89!C黹l/+,\&H q[Qf܎=(.^Hъ-BBkrawd b⧛`]2lŹsT: 參pRIH>~:#L=qk+)H*.bbc$Ry;À|7y}֭[2hBE brvС}Mݺu֭ph3܆tlSt31:)/shiyl)TI?`K')Rj`S[ BvIU^ɲU': @{Y.qh#e)\=C.C Hڙd }{WDth>![MPr6틓fVA =Sŏmqgk~ȟD`` XСRihГw'0D\iaΩXږGkIYiI 3Eh 28NAirj*DWQD9[znIrg<һ꺨4~&+@gHzf,R[ore;ґzf \ +Y|_BqNsBd*Lmѐ]q:|GHS/k;N;_?Y<"$ 65u֭_i6Kb|}}!14r$獤 t |icv=8nݺup;zV|6M3sE:oTp` %ah&<#18W)9*/(|.Ou泇Uke;Nu'jE-7d[Xe@pr&;7&֭[~VNE%]b"2YV5q֭[pT)}OaTѥ"Mʓvf$|8r@}djS-s3KX +)c!IT.>ϟͼ{4)QYv`V2 1m&ޑ<8pdnr#m̌ѿƐ+ CײszMxHKcq;;p|twڵ]V0sVC%!?!5q-*6_M'+$0]V L;o -fJ"ΛvΑ.-ZĮbܕF(Ö]-7]L"g Ct9c=w$E TH2^uV:RF)xY@j[eSIA_$ x H(̧gڭ]1=lf6/q֭[p(YMe䗗qWFtQړuu֭_8ȎomUn!!e#EZ5[ͤcKڟ3fzĚ{9e7t e?W: \]HUJPXw,iBAd c^Á}x%逈TY!@ SI4-ź{7[ k5EjW4;DZGðQkkn!H<4F5G,GhLPҾE[a9l~ B3(+M&*"ȝSfd+G4Ez)6J5csF9',4()a837(*O0S:"WAє}<}5f{_V@\1ݞA0QLĵ)m7WH$"cEl\߮>$֭[~D>XBBc2^'eRic}ߺu֭ p򊊨.3We B_h}膠<>p67GWRDҰ"-av34 1$OQ'MnhL͘Q!WQ&wL 3 ae ca:N0_%E E@e[N11Ζ s|Emz\!{Z.A#}1Cf.7N^m*TB7A[.0RJQ ;4>-6XY)1}6,;0UM+˘Bcfٍ7%&\*caz \1jAmg@۞\!ۜV4a q(HϜH)ndy+& YDgIR4}AUQU5xFm~u֭[F}J+qDVH4/=@J/vI1D[nQ@l![I(q gJ$D$ܛf! a); @c#->misƒZ#;MA&0w&N ?Z,w7WQ p[52\[zR ^)9'$+BV (dB&ΉT]eg!!LTvw^zj6#O88,S`]P|'ո_)&<:ӮSe<*xڀx$ЃͲ~0QbHżln'oɯS`#௒csLJGO>E2*BNKP='OfЦtXJ%"L8NJpr^g.<@v c  ' ]FUw L8. [BDF1w֭[nmfiϘ5m0c*Pw! {_~$#ߺu֭ pD.Kr Ԗ{ &'PVV럠u~hFUz7`?-~2N$CJQu>DdtP?I=푙 !dSiC|;fjFF)Nc9hv} N#%cwe9+#ɢQ,úFv3=mDu>vJKyxD$#bOt.U!6ʉp plx`|ef,lXCR&:]G G l?#eO=1 `B8 )[ w)lGCINWutH̀U$+ց% ;˾7RLIh,{s(]8BPQ })T*KSPFZeoێ`.%q0Y=3~t޾oiq1ؓh<~4%MX?ʋ@ׅ mubq#<J(hnnΔl|W2+WGO U(r5myႅ)IRr#94X=] =J8 LTTMQu֭_8U2c6Cf<W }Pq]9WZx֭[px gqɔ^Kő]׬8.lK~VqID{aF}v;Ip.:j>Ͼ~`WZOJ첝σQ!4(4 rpD)$1HGGRx 6nG} s,A5c|hw̩U["yz2QKV@j$٠yKYzc>:yowjvyeOc0CMj$fpYYZ sIz \e-^%n8 S{m|^~ө> 3Ί*Hܛ˖֭[nm|[<Ž>K9!a'}֭[pt?Hll+ݿI9& DfMWE1Q:ޠo|f١w}K@EH 8uхq)&*=GaL+ '_p^(J>(JLuCh +sl,EÀ]_9 -1bO\?#'7Te-Z[jv}O KsbMoYT@ P|8$YKiI9AY<+%`*MC1s6`R8τ%j*i74v\Ex̍(Ax!!!ij1h)9'r-"^T17sNৣMKq mM};MFUuP*][nbdъMP(;\d\qO+c Q}֭[p(2lV3ڂ_EP`dٜT,v"JȒ](%tluTdda34hD>\f9+~ 7,#*".*GZ Ek|њܭ rTaZ'+N^ޞG[(]Cg-*JC-kM~DJ&@ 3a)-˴X錤P1aL%%AZSrA`[V3b1#n4?2(k,:͘Uy+?%Jcft>CY&NFI"R? Ss<'SݕBͦGf4 tC,EBI\TGHk10h%D ݸS OOF!к`q|Hd|5q3O3<σfђf|$ڷrT5μ[nݺKmۮ0:5MR!W%JrMFoݺu7oJsI<} H@m(!RwYq>0}:&Dnɘ3]IcΧ"KcNC0p Gz0x7 sf$4P`b:OZe!)3lHEcDg3iTd@ܼ-Q,26Ւ5ʻqd؜$ڪ`'i P9YK=_9)HD?N%Mv##Ϳ#4f '(@<!s %^ҩF5m^B!H;̘Q9nލ dJc^ݽ<]:Y%HPl*}p;TVՍE;@ݒ/nEUn=Tfs@thbnԒBD0d+F5M7A+NlrpPUdrh,xaBϛuPTnݒuI>E$nʼ<HS*Ƙ[[#x#pA}NO3psWl2kMip?sEl-kPx7!R-w6}p7OBڐw 3õu֭_!PbI'r(ٸ*yBjnf> z֭[~( 7!1 CEeqO\ϔAkHR"n =6* MX2C| .͟(_ :$ﲛ`m%b<ݓ_#2w-5XPF&'R-zmNj(O7-8C%'"PdƋ P{4̶Kڴ dABEs8c?-abeJ\ڡ(lmQO:>$TUSInݺ;5: 'k T|ҧi(u֭[Pl! af}@a@IAhc^O"ͨ͒5%#\gp"&/[fWpED1 o5/䴾TU$_oc Y++0X26)*dj4Kaa+GuwCe%9"V_UaGkݯa{Fqy⇲Vca?B"xkvCM"姌ɼ3Q7x: \IѧuC${q,cE&Dbnnf.֭[~RX.CCC9Ty͊sF(eݺu0ڪoQ޵6Ita#nG)gLC3Dup>O6RҐ&(JO:: tP}ej`K=mN݂13Tlfe*Qz[fF@#2I(q"Ei.h,s|8t~*mZQݧ2p4Wj UCCNO2l&Gc;|D̩Br3vg$)gcLc+tGȅ?`OKHFbRE:$eўVJq (V$QvEl{M;mB70˛ԊyKV(?ak^GQ.z-;Db6 '#\*,8nݺuw% yv}:;w3zd(Nu֭_8 !!1Rn&v"gwrk| ktL|ofشӴ)B@Mҋ9pd ,ݛ 3Ѳu7FV<@ tk`BtN9PVk;+N%4, u%_Mj B۲YQI^ Ae`o˹/STM S#3Z".A*VUibl Xn/1JEO*]0۝̓ q)F>̦)vxwwA R! PlZ*]ǀ*xjIHVgu֭[L/qQ]230^fy.f>P#}֭[p6 JMey"[](^ќeGR_/H6TOFg|w6}HV?C,@|sxX+'IC=?lP9d*'`^dheO6#ABvq"G i' >D+12 XҮް=X̌X[q"2etd]\3x q%8Riy6mRORR wvM]1]e%&h(Dnj$֑laJ͚K8i@R(AIэr*ЫNX~p77¨[tv2Y0"awR?M= wPϋeKt֭[n Td Cuh&(1J˸N '7SUt+Tu֭_8>|Ev'Ei׭GXF/7JQ,'(8Z)]mFsꢓ& Fr" $gL$^8;sYݣ/Joc|2AL<@ȢH9c͹&:iV:ui%T RU%#`5ʧHGxL48<~IL.-rUY j:sxumőkͪqZ4r|1g8yDFB!/)خhZu|δ^.+RHEE|!;oc;!6vh6ni5$ή\8؂O=`S`p=f8ܭ P<uj!y8vJհR\pJx:49R3TA$06c*j9+ĉi"[V[3()S}z놗UMBRtj{IDanx)QXkG|8-D(!.YW ]r1LxTDtK =nOFUׇŽ8c ӈbnݺ *z6#Axs1^&"k=zpܺuo|n}}i` ;*uGsəjKY-a‹;X?x58cjzWTJ&_ʑCL OUVoy,`|\ 졪rj~,X4 1F:z"[k0.C'X$^6/kwEFPb IDAThk+ Xn3aPˇ,o=47J3`C =er錃yQ0<60ѥJA|p|,i4uBLsprJ)H"gdq}eit:IA$:&Jxg:T06EIT>eTpz*c ʌ1 }ʼ_fnݺD6gc0c !w7?_~^i[n}LtX~ҍoETft78_Z 8 o 9 )(q;foM dw8f@cj|֯VHsQq5xʹ>g=MBDţXek^%>PQ(4 SRD"VIHB֊*BIR@ 7skG>k={֚s9\gaǤw1;IbɅč5?̄)fN9ox+Bʰ٘0Ìl6=Ptj\BX.([4qM`W PqLQC᫘CZBR!IO'l>m+A7~ ܌ fܥHQufGϸ 2zHnף1^ڈbYT! xk@MB҄WR+g7JKz_y{I="8\@#ws3_6-,"WDX2%zX*!Zr;7$,0jȠ22E%|!kIu־Dd ,tvYȱB$Ș`6P]qZ"0ǣ/H!3/DESu.@Df.e;%܁Rʬl;:Bm|T6cW&0+G n? ƢzG UITQȮ1C.-(N ZZsgLaJPuxO4SԲ<9*322I47D}b4S%هtN#6S,R(OtVPuzJ>ϒW3mcBiťl {BKKp*o:EޤhXDJ0gvT, ϾKQDxeKěZzY|{U'ڽf(E x2Qv5,crJҥsE.UXDۍ$@!*"1ctҽb(2z V:l<[knYL5n;RD#x%f ,Z%h\XJvu3Igc86Ю;9S ē.p;ؾ ȤcL1XD!b"/Ej2Zz@ MO&n=4n:1111qaԠ=wl4TےLAeqȟDX1,Pk*5ܭ*6CD9|I#V)[%I47 bTQ<@3&FKkoW&ɚ82}ߔ]BiBIGV=Q3>h^'zZB2vZ <Ǚ̬EaQȲE(5{L17`Nd2L~xP1"n8!f2Z'.ddB@W1hV?08U0`}>#4L)T[ƪ蘖GQ]KT )tf+W[;&e#= nk*b MwhIǀ`I䂇qQ"+=n7?k]AӔԍ w˾#pk^S\M]1h:)9E*L7. 9jJ&"N my<111qIDl)U?vP\e&BuyUu]m OXF^Z_V3=dڈiea.Z'g^hRІDU뢬^XޖŴG Vg";rF WS%zU}W/`0Ƞ\5/M /"QmfӃu]V% m`$F<;g;')0*A? ^} %HGQdr o-u,-Lk`QqPL͈0{+sg0u/&Ҳ,8:f ٕɈzH %s# 2Dy;ᨐn`̴0{o#nAb23W2S9j1W^I;1#q01111qQyi5y Q綼X*M,־ֶ{IpJl.hwqk`x]*"(6zf  j'X26*׬kD*iEv[{G#R0 Z"/ݐZ(8_{8 Qוff3CG*NC\@:7܈BY-Kalјy/ܸI)(*mdUAU@yӄ%5Ԥt4jȮx}YW317i&E R/9\߰ snbbb>) @_J9Wΐ1)po]ZHY#2LMc"ރV&qf%&D)|)C{Q_qcQBfS {lJ SR bP?pR.ҝI1bRPs6P$'㨊LAѰkQD`b/U?H[`މ{Op:幢t賮ZKᏈVٜfT r5_/mٔʑ c9.qtrӹMT!(N~1jΚ蔑 )hDW< c$_l87!HMɅُUXn\PpAjoO܇dI˜ϭs"G暍D;j *ݤu%Z D%_DƓa#ⲠGʎބ qł{nwR]5-eHK8*Vϑ1=.9ApFWǤs6Ւ JzMtǬBΆVM=59Q"Bzg`S*P3o!-y'exQI/ʯҳh}6111q܈xljW\v<&&&&&%Z RDk6&B9>t娵Y+a]=j}*`|&Vڔuoo=*R5i4S 7ƞE-YGJb;NN"Bk_S^k uM8ޭgScAw]݄jA(œ3$.1gQYRI4 U6Hz"DC9 Q15vOxlrvev ?C)@ZZ†D,Kmb5ib:}U<iRT;T]ml.r4E! $qLeUy`̊tU AuO1*ff'c ^!h f^N@Z/+⒨{ D|q 6U- `h.BTƸr-&r7ǒC8628k!e]b[/mATGdk^j#w 7/lxӸRv*q! Q+Hv8U4=P6ڮEBzqW qP YQ+MrM#&8Y4BѸΝ0QFD.T7fDcYC2  >tiʁԶb &Cs|ll:t'w-[)qSE'JۗG3z nGpr.*.h#q!w(r *A行2hVHHli UCa|]L%.n;F(604Ljخp^~1f (I+;+@(NIAV,4$iAml͆6U% jIǟ{ ߅o}7i@ŗw.`TR#!ImLLLL?#Z3(9~0մU\+vvL4RE\'Lbd"6m+)UcsЂ 3H={Y&Nrޤ)nY #MܕB $ۓ-4Wsɖ i9S>H%v)Zs#w WeJp8xl'Bd^*TK@s[DUT_uȸÕ#V,0,_@Io6$1a0CgL.B*hU d&94ZxTD`ۍ+af&K5ڥPs,UB$CʼUnQ pmѶB 7\F^**뺪yem3úei”EC,'쌐+I> ݵjXN#anDP&hR{^zxCVURŨ2SN%.vG??D=AX j!($/&%-ڌ$U2 "KsrF$aXbKȌ0.}LP.Oa6vci2jPEIW%?b^*(Q'FgEn1:34xZ]"_EDAXLxPLc%0wQ"F5ٺ8R b= ~[ritRnmT);#ƛ 1lg=Vo)kX_xjzFd]TVr-/LbPAL̍#1mC:6s\ (d]K6(\_5pmr\Aݹj)ρm>Fb,޸03154\ /vƍ[\(qaOk9#.񜉉{Ip !@i+V ch3BzÒwU{ [J"BQ \H2d#Y]ksؗOoW>JT&R7_>C=k0rp^Rmò,4 2G  *i`vPgI¸| IDAT:<,M?L\w 054$֞&;nM1qDA:)dLOu3}. ~2 drVAUDEy*0ƛUjH 8*n%vzf"Su ף%H$B&"B DM2?cBEieh.n,;lZadyڴ6-)zr9 UT>M͚g1/4TQ;kt|1mEẉX0$#VYO\ ЍĒM fG. sx'&&&=>jutgm]]M8ݮO%XI!$ DQ-Fk@jfGĉ%iw+4畺 LIJQ&ST.p,JݗnhThmVev\$0ZMF=d 9=؏_ǣ!hn'8ٝ\3 4#FLU._jDLͭ?bf زԎbxaL%Taj\ (A DA3^aF)31tH2VEAjKȆQi7Zo4H\1yZ]Lm2.ig7ji&Py"2XDۆ05Xb8[p\"٠x [9L }VDŽLb yO?pYbaPҾpj3iXDFX(4ksVQjJ>bH:Lf'< VS Eܐ2wuv!zس`ݝ=>Epۍ2*~xN|BI$g%jd'ƴ]*?8PVA )Yb{%S4ۂh&'#ÎNt᧑:Wutqrc27xPΓA8rAA}Dyb8*TTU( xYδ3Iiǜ ́h߸ecD`$ĒĽg7׾*/)'_GwaQz؝}n?\ڮ[6[Qb~V("Qu=99M RkB /u_M5/4ʕ y2(E)Yo `1)Z GGNZH$i2;q[w-48r02J+P)MTb WvDDT!rR2{8hnLF:ˀ)ٽiĦ{bAEݱugU /Pws&O:o%IT5 VM,Mue;`EJ:+!T #Ȉ4 VZcv6^;B$2]eS.64N|q*MsG54sIz7#`$eM1111q Tz3(6wjoE(#k PI] J.cTstj4ʨ`@VFmĮ~N>[g>Vjuٵqa ke:[``XDWbnwf]Eea .;0RTQUj*/zUڨɋ #G#g4]B+'RCC O _*ҥg>E =ܖ߉G@m,]QLa5b2ʝvBWxڹpb0)Ks4u1X/ep֪ҕb]-2sh&j7/7*\( MdBHFuyb)KmSv>mEufPP=UEɝe j'tU0ٝhˠ%+jxx2F*ȼ1(E1ն1=v)a]ׅ@"* 꽋M)uTDޛ޻_{./-D;>m{XzCqMLLLLK#:'(šB=ko.N:ݣoh-4GeDS(I(ױMY~dJ cN~T4h4X&QI "*K.&#O}|~.cUY\ؽj}R)Q$p~ҳ$^ڑwbcdGONfQm̒hOpِIzMܢ *U=qd+K Qd<Żڧ6Ie$.I6% `lP/_a#9b*ĹNSpk1U]6N=qd;؞nl0E2;R3FUs#yjw!#%E# R>@F~ȑ^M.ʁu`;.vnv@W;4&&&&9zHzɉݝ5/KѮ]t]u]= }t_ܭ| i,ZGgaW݁M#ɥ,#gEİ RǙR%c\o*g< dF"565g䀔.pVL3U?J&6QRMJd);-O%qJ4^7^J4F'$A/NbxSK N6J.:&! $Ud+DVC:Dh2 #L907ݦ>QBa׀'a X^㠰A3T}4"<&s8QdV=+w t\άu:h is„ܒW}pX3u>vZk]p4$տCp8u=᝘G|=yS&u~ܕ:y ]I)(MHlR$q$g(?PJ|%?pue jRd[Q‘z%|P/ު_ {/T^ڽ'{-r@sQD8c4eG4J@xJR9UH)clGCAݶʶ P30Z-Ww!M DFPQ3!Rλ zs2.ajǛKty&< uI+q]Oyf o,kF0ʩD`b"4d%3BǙE'nͯ^4[r>1Ħ$#f (9∝JWd-=yiT.FWLn2W&&&&&%W^i/''KkZbƜdv%"]p~~~8ΝIpLLLL%0֓7ז\i,fCđX$R5NޫhÉݦyvCW=J߈G ]k8@/R+.d4^\4dĂc5[$7Z'RSIVJO=@#1jX?h^#fxާ7Q8ˑ#0w1E fTbQ/IxI('acf#Bp%{EELGa)yɓAiQpI-~Ah UPsZQq53|7>2)xL:1H N; Y9ZK̑z̡f{B1a}‘$]A|Pexnə*jtQ(&J\v?uj6͘XT膪wx>=rK/_tҥڲ'&{w>sv{;111q Şh0Vʹ}m{Zy#& m!*1>. ߶K#$nEcF-b"l]jFTe&I'dj|ffNp)S˃کE)J:RYdEpIHKD{8RqfI[] D^n3'b[Ȏ]h(4a6u>P67i8`wknY=0F1QQ. p!  MZD7#EW#hX40ff,VڈTID=X<$-ǘYI-&Gkm]*2 k@1# X(*&,V&kQ>ʤa&TT9lQcKL v"jgeDNLLLL[|ȇk׮]~իW\reYdIp8zvv۷o߾yo޼yx቉{Lpd-5E楘 * AϤRɈED([Z*۽b7iw ;^[q7&w녙s$1wOp!P>{ .Bu:³X{HA%`M2(<6Qz4"T^Um8.PgzԏHӔ)3_J|Na ZB[D$3nd iTƱsDa01K[@r(ƔA,ܘQgedjGؚgqIl^% WxpZ`r jjKgÒ%d1ڸhl),3}=!1[3,F&.֘9>\ZGMq3duGTH4Ƹ!:"el9S0Gi6Ờq~Me&]eLĄ "3&PC=$OFU %E 2,TEj*-]ُL0[pq"޵0YeYj!uڽy$ c+RuE~i7Df>be)Fۿ\Wѵw.ٴ^Bw5a@k#Ԇ̈́eYL{H8+)fUba>`+!" P|=?|sUZeE (Y0a2xj7Z0׸IśԤ3X!2k E<3(՝D;L7O wL0n 7Llt(UZ#$+W6nnm]P#;]g( FMZخHoBdr(GK}v+׾' )iaHMH'tWGP.(`}F A(xXtIJjܸ m܉iI!(! տeز6 %bie4jNu6Y%"V0:DK7!U0tl|(qEGCx]D%P*g B֯0X " cHWz~QN ;Ф BalWJVa:t5M}&$m{2^8QyVBuTBt)e ) /U,Rjaq#t))1evpR#c{ĬLu]tzs7`!RU2ɦdHStro&dPef!.!P0Jb;R{7+?nRBG,%Sوth Lҩr7ݨ=UjF4 =0!B7Ci).&hJ[pz轮 IDATkƋդ#Ӎ.$:51FfhBQ.4 X&ƵlP/<@ ״$"X;}13갬@.@݊ƭduW P"&%"v TA>+p+s$qf# {JMaaiHyң" w*:a1F(VeI P- 1t`ΏZuOF4fQP\cຢwM@):NI;DM7(ܜwD3AF JGq+NuQB' hVa1NRF@@"?rC#䋵lm1UO Vp(?TU&9 cRUf!2gefMJW;XghC۵&Lu1<5LlV2H}rNpxjP_̸B^qbTtSΕTꭘPґ!6G-?Qhj8mTiH\Xv\ fPG_~EI#`u('·ǛFhF|)p(I K!ɭ9egq&UBT33DWd^I9HiiJ\w3ڂ;TCYQJB"(5KBUrc}sČk*S2œV|IPQ#R"}kD +0!RJJ]w>f 2,"$H„CH8Wi3])Cż|Jb 1C\FD# c i L ATHSD# +̈5v66%veو5S掊8w)3JPwsALnuؐZu"Drg4ѳ"Z:111111111t'8H*.`b~3XԵL"rC=裏xwC[~PHMldJebbbbbbbbb錅@n|aB:-n~E<8* omWxPQe -m!bUUhqk9Fŝ"bP3O?atIQEpNo<蟽~WNa6NLLL>C=f~A֔D h<11111111196^ UC\ҷ~WMGy^?^e?K˿?_7z8ksqo}o|׽Gzɯ#aX&&~UI7DDL$8&&&&&&&&&&a㑰u.cD2v)P~5;O[|ws_G|Ɨ_E,ua>zBd%K ӠLyA̗^?]I1p7? +k^n:ܮ\~iyy2\;tv~7nxG^^nD'W_]<> `r}?³_/;}ŷo;Wpw{pŋnݾ|˅޸q#ٍt'&~җ|ʧ~W/Q%Qbe+eb%DLx &%RU {Q*(X0f7>3⃮?YoMݛ~_\{@u=?W_U?_{>#!xk_O^?NS׽u{#<{*HiH97TZ-CY_?~o:_3\n+wۙyM/׼3/x;ɺ>>>P߹u_+ſ}ߺsꇳgoW/̏y;QxJ{b7!P%)X&n)6XDN:yr\s&LjA*OTzۻ .%??ַ_?^ǾW/?S_|s?%{O'~{~ğ'}ןq~GۋK>o>ƍr8=jv(]*Y׮|}| >K?/|Wmg.|㽵?=~y ^/~s+НCpga?=.>~-|= C~`S:LG_Sƻ11T\fj`@BTdtbbbbbbbbiOptChCDL$L>U7E}>>෽~|7Q:>}}_K\W/^w?'~@Þ¿[si*c'ݸ wkv?{w@3?/Ou&v;s[U ˾uqq_O^oޯY߀!_XٍVnO`nG=ޫ+۷Oz[;/g0=~ٹ0gOpx7' XXUEeUc 8&&&&&&&&&&s@ DZ "FQATKmi#?Ǿ{_W={YSb`%j޼yU__\| Ǹq?C_L ho?g=`4ng.~xض/4}J~w~׿k]{?y?BtI΅[ۃu{Gg}/~|g\~]<'} w?+7pǾ==1LLԈm&&nKƑK BIpLLLLLLLLL<$IѰ-?yzlt<9ITW^|՛ԟ}n›5+^_^/yŵ]e/|}w_x]~'}GI7IV_ի'nݼ}Do?~*^=ݴuUƍ>˜*ග^z1ܾu|vvos|ݽ/D Z^1dh:;*L嫧ݶxownߺsv%ۃnOpOLfƒ>ٳ?d999Yvr,diW}];{k?|>'??G?+_Miϛ:111q7{g?1.?~{ڵk׮_v+W\rzzyY'a]׳;o߾}[n>~͛>FPW̖:ٜQa%*ڢ"r7Q]ޫp7q[._~>O=F%n.]yRXl'W?] 廖W=pIy⽽p>x)ÓK\:{wcŋ]+x==1LLcƍAPt`"f%xcafnTUTE]'fձn6(nԏ~ϳ~&_/y. "l-kO[3q%M$HaB1PUUe"U}̬WyEC7sy>aݘAcjQvr3EH1ߟ@aWQBD˲-'`f0dbbbb+ڲ,ɲ,'jKk"ZhY=ϼ䉉;"Q֚{0M[*?6Gsbbb§ϙɭpSQQ3X̝qxcFj @ʁ"`f1c؏NLLLL[;̀-'f3 @:Ǐx )*[?{3 11Xl`f=*-m͈ "af-dyOw,( D7nQ A+&&&&&=XZkKD k$Щ+p<111o^uu=>LLLL[xhYo[~ w3+2uLHg474*, koX;}l=ǒ(@cVմۭvkm]U ɍutǿLܖDҖUE; j˲ts&&&&93+\|zz˗.]ZZk2'&&&~CB*T^AUU)I,~ k{@p.UՓe"F (vӓm]o=a%Y AR_:kL'''TwGf?A&"b^>kΤ{ "2bf"&^ &""@>=8&&&&c㴨>~ιS Į`k5=KޣD,Kb+ ( (lOyf-6~ryߜ;w'x<Ech$eٶ[pL&Jd2lkkoko5W`0YƢN 7ZEDK& z٬ J ڠ#M@1KFcȀΜA*(+AD@-4ϜS{c0 (DB A DB`L$I`0)}_R}}= 'ptqΞ:l!8(>{.N DqL:;DD  (a bĕ0*$R ?Wģ̯&CDJ) Ey 2 ADGADB"D! !B X*ED$}`6>m!`0ې ̄ݢ J $P\/VS*" rU:[_- .W `]X~xb:'8<(_2~aΖH( (Pd !ImFӳ`0|ks3D z_ i )o!H ^1k wz3l $,E,ΰmF@(H> R}$3/Ɏ!bU'LTJq.?PMIqQaaAtA (`0c[eY,zDHBA;[3 oaI a}=Bj4 !<Ȳ+J)Ή7ݶgda<8 ú@hd[¶eYeۖe ۶-& `0#˞6&Wl;Dp 8PKV*C0 CST0 QLBpgΡ"* 1@A,q"Z`p 8sg`Ō`*#@P̊ULJ)9"9> S 09Ȳ,ul-j  aَm;c[e`078 yl,`0/,gg "P|k%ۥ&K^<1$'B(D~u/|yRQ"d1BL(@d` q E D%_\b6@%6s'Nc /tQs[YT\bFAX9W`Ҳs~# U[瑔ARaPd"8 an>m=㟏\k.`0Gȗ X+P)L0oFOH {?ʔVҹj5)%8d-?F@I`bBĨF 02 4e,WGIQm!}HﷶU 1g^X_oZ= =+V~m8 BI ER!h`|8𰫎Ϗiww}=hЪ|}{]06Gnۥ<2@O4`0)pXQ  w+pIN LK]otۇH` |t҈䁒@@fyQ3X21[v֞| D s9d*3w6 ѧ=.l"nčDZ}\A.; a "%$lǶ-X)F9ќ?6 us=z%=߬bhu_~Ja7._EM0&$;if IDATGU`5A)]gi˜wpKQ IgO? KƀQ2T"D;ΐ?@1*$PQ!"6* X*f$BHu. :c(XP Jл/әt6)8J'w,u~8μW Am[&`0֗:A EEHjuonE]<΋@r@l `1IAQcE&N$݈ƓmHKm0d+UHrʾS7&'ge3iF6,*R:t>}P[[wwH$ri ϛzuuu/spl֫/_U}hkkWԆ-YTꆛn͟Wz҉82]и͊N?~goLRVVG(Z^z'oqea] )w{/K((Jr k8A)k)mku̿_x;vlvA܀FgKؖ,r*DHBs"$Ba0 #N_t=og\nhI[PZDE&fhٶGI6 'QWT}O u<_K<[G0EPZw X7R:CW(1(Z_aHf$bH rGTv#n3^**[ۓv"["v#=*~ӕCB&Jg-&tI44miiùy;vhii/Z=\TY1t/PXPYQz3]%T } /R<@Α#6RH(+-? ^6|:|XU\ze/-hlyyy+Nqm44@u@fJ<uⱇkun<+~f1E>|;g>4;+)y鏽|6#n?;iooW\~\z/YzyGzw۪tF=#""KvD҃nXTRJX4UT a]>DȼxGz-{薚}Q_=w 'K RN;e^k4̊T/-VRʈfY}*zk-*-B&Kz %ťm VAg}<_e2h)};l޿^{SkF}S1@߲iϊ_~vio}-xΛ7s?~Ӷ~qA$V *XTqRn7om~8axjܸ 7tÏ<w= ) N5gd2l6Ouqcebק~C]ݞ=vt_&ٱKxHw*qzt zNR!薳:{˩[W^ؒݰ~H$t&""cܴe _A`0C+ffV]gxv?| j'8nl7|{'7DеQ20hkt`G8;A I 3|{|ñS }hDH صMG;b89%,q"Ѩ2ĤTl{aQvWJv˂/SbkUK?N%cG%DZOՑ-f}hY37]ݟ_㕇RKD5]WԒf,퇗Ǐ\rѧ_;Ew<8g׏ؑn_w_WG]_yO]zԑ7>+싥yYRdx7sL-,tX"BJ*BX!a`|:n0 A5QR9 %B` =mi? {w[ H*ebǝv{םw]vF)Q+RO{,bFc/#Y`-Yu7xvefnX&UB؞Tʦ:C*YY1$S Gyt,mikIgҺJ!,P+̸JJKL%0 "f/} y~fe_]˨{Oq !U Ig\7k$ƚ힗/nض陸w4\w=w>=DǾ6ǣy=[N,8tK^z#L1Ehi0 HEdob !e%ɨ`0C ,+R)60 9gxJ%۟koAA 2 &LD 89 $+Bu>@2 PZag[nn +KmMXƣqm-,T<&B)Zшk{_~8?P03"Px}i=<ٗΔ@ @ .ؖ}C?HL?X4ft{}~^YQf|}SP=kXBhfE3"LQ/ymE "DK8&osk6vH:bg~]ܯ/!ԟ|^VJտ,vm)ܛ~Wֶvy_y&| z_Q_C˚w Ӎ/{~|ǽϜI?xXJ,ˊD"Z=^`'uFo /HGHXe;B Gsc3i0 @`fo0|k"8YYt}؏kwp.`0S.ĺ:>]S(1(fY?M#"(|:maٛ"Y|⧞zvB&盏Jfoke$N"G4?XuZD(H$7"Kױ#%coVeW5ńol)Ym _ 0k Em 'H"гk˲Sϝ7Ϙ>-lzVm1yﯸd]vo#nM"peٺ~߫W!c;UBH!Q#P6T?1Ŷv}Gg,l>{O9o3~&NP__{s zYKc;S7V?z]/s!F`;ΌfO?U#!Br8w#cw=o2{ĄKu3~i'9lVW>|wc Ned=sQ6O,S|\{Į#UHBaYvN.}?$(Ф dш:ڎm 7W5k.W: a :XJZxkUu\"Bև: EB) |)lƛ,+g]C PXB֤M6}~ XEˆ-3YQW\Q,ͩ,]^XlQlB RfH@ć8!@aPm)eYszzi-}tzɛmǟ1c.&MtoyG!aWPnmԟ#L,ڶ#җbK{rWJt:~kB/O8inn nW\nY9f !| J^VzT7k'hu~~y蚋%G4U=[9#Cp,󶛧vf&afg|jڴh6B& 9 ǕG!Ȳ,!,f\WHaٶ%}!,aRT a$D"bX4q݈m[}y^\Wh w Ý})u^*AG[`8MillP-M {t , H9\ ;o/-m*p"CKb |庖mE_,N0|\,.\՗N6k7cV"TJ"$ Djɒ_~λf뭶gz~B7VP9|/XFGxG^̈ź@bL {Vo=x.>[tiG -J&dY++خW~v;?^dF5`u]z2'<В^[U ;]&Vˠ:WAX AH6`0 ͼx/U/l:InUx ߡzimu,[>ez{e>mŊ%xiBd͚oU :>9x~UƼa}#7xi{>Ĩm'V=a凥/[Z{`Y'u O#ξ{꘧  ;l0| 8kkjߟou@΄[IG`Pq3< Iz⭔"" 8?3((/,Q.dAčHoh_S KE_Tsqkg_T{9 $! U(FPqəzr8FrRJOunk] D,(HcJJdǎ}^?~\N{v_Ͽ8nܸ E%]Â%%ݷ7*,(}"qW˿UWض~#4"h2~I#6hOU_Cepn Zf;v RJ]/ж~Gg >zw<Y#,Kh@&"9B#)k0 AdҩT:L&ɶv>[zi`1*߻pf+?xxc~ww)eJ(.w!A$D >G`>*@QnSοxx~].N$~MXgG$l 8?=!4WP^^c@m\E}k8.V've fqvY>cpEp *RJJ~LFojj=|3@s8'd0 $7 7w#17D"mI',08%K>C6VN8=?55bԳhV+p\q9(_'U~'] 5o{M97{W>jYݻq ^ivugy7]2+2_`[NK~WN$pt#z.SDmF}){?Lbג#\<þ:柁I !0vq0]՚uB_iN͊Z>,{Ymp-#(˒,-V-gQhΏBr=A2IE݀=QQݷ/GѬ݇D۲[;ιdEVʊ 3GĺI"((׍y{e .7| H,]J)D.3oɝQJ3!&=C$O:i 6B H# )cQۛ$Vmo ]+R(rD4XĖ奓ivY9EAur+,]2zt:HVM` q擟?)Ńq߯ DA;٠v$][ 6y'wB A (ۘAaMeblU[z#\Dꋻ輛ܾy̳w}cK&W]^p6+;瞽蠘 5rK޹3Sg~n<ꜻ_E7\xeHFGbۙlPQDςO>cQCmmm-+-]Q"^uZJa*jGg~Џh>cqkY&c0, O _"qwuAOɍˆ@RBK,̈>`.`0 oNGn3%#WV/=zƌEz)\շTf[r9{t5٢ϻ`n<ŗuN(䰫J佟[Rx?9WSӝdo*(U%zynO^9Q|ƭ/U7q~EZV5ҁ¼$s.psoft9O F0#頹`?FFFV:Td!To] 'o>[m⊡ U噯]2Ȭ SX$ll#ښ[JK˷;,X&!I4id[S$)B;PPQG~w]8V~n`eYo_mjVS;' " Fn5 0]Ĉpa+}tU=~UЏ?LpdGq]~/wt&}SѝZ[|.}ԘI#n5I-OSSU' =Sa$v ~I_E꼕p9tC튡O/P 4D:p&%brKy W|paтX{AQƢU]̍Si .,s**R$WY?Mg[MY66} &D3Jdw'03 fQZ6\CoFl"!SN@d`Ŭ h4p2 ;ܓ2^o -gt2-;#+!.0kg;]$&g.л,\e+dfLA}P鲣 RfQh06e=qr|UuJJv ^ K+W$[Z+Fm_(9ӾѦtV`ID"MttDiP D~\7Q(d<V`|8ȗ\>!HfdF@=wa" ?+f" TKeD͌w(3 !TT eDԗNJiFa  $ EXJ$Hzo0kk0Vf>y߶b.``-[ 3tjBoaYH:th׻?VR])SXB`M+3 s)Ǣ"״f=ݱ߰Vի` !yPy$(]@A$b)LV{SFEW^}#9Cqޫ^Y aq@_X5~<-M5_/_0.Sߖ v1>btWpm )ee!+]YܜLe62~&I4G9za688짫+c7a0֝V#ZNUo?fg/4Fw`X UFb]TGo`0|-$RC*#<Q BV4a5D GGyD]sSSO=+@"„L:ErgmK"NEQY,at0e纎j+*(jd +Ȯ4KnKq2ڦZ㾲rJ$36A7:b̘/Ske/m(l'*݅KlХe k[{)7_Dc8b0Rq{EcG{kU>}8/2s$"2R[f`HRdKlL>QԾu1[^sj2Ή5_g8*HP9`#@ lkit--]Z "IJS,h/ǎ炞s*F`5 HY908hY# (XGs_u_ %k a8BucaSUoS {Y!eYDrZ:-#83Z0?%W|D?̗0r Viu5uʹ6զmmKTlf;6/^+.(I*6FQEe % #$m``sdS2T*D`bB1㱍FD b%9/m*kd0֕Ƒ Ӄse qС6F/dnjNmn}[/y)Ç~>g pQPM/;mۂQS7z8Za<D0l<{/;|Λ16 +AK\k 8ޭ劍Լ ێ˅mTO|6R8a{a0TYOs{M{ni隺tu`0G"'` A *D(!q2A1A^aOI( =PSڞmkMdZZlO[8p#M&0"q_E2Jc68I"FڛJqtT+A8je_,_x XHULT`L:%R6.Gg]aϑZU|tpzaQUO ~̟߅P77[b ;s~'vq4-gWGބt|>M= 2ӥ`3/OhKx&]'As3`ۂ}Ss^e)~ zZL38~h!_ t15 w+Xc/AV* zTE;rOrooZ8ȋ`,4H Hآ9sW-[:~T]MYndRHg&=_N{g# `P!((`}F,OPhǕ)@$Uf ahu1f}:r$7֝pȭatot{;gS/fzl%|4z~\Vux8fX$Ze 5lkm6;O}&8A| ov>i8 G_ G´X9e wh0 8:劳&(-4 v1_kF#]v׫:/rEe+V(=dDDe'ƇGZ Y5CFj^›ˋ^}3EmK(DenWwʤQp%v*W۴S!3"ZBp##GM_~f.>s#g ?lRkW7@! -a{ pptyڏvd;00x0֠n,lj8`ډmvJ1 a ^`@N?\#d.i)}ҭCa%TOr%T\*@;]ç<]xۮq,3a0S@Кs0v9r:YNGn3Y=cNO6em=nOQ8y*,ğl <(q57 ^<}آhןq=uΧ((?-hy~6>Cq߭k9#!RL{΁NqrZvop/ 9j Ս9gՍR&Xl ` KVXRL%31bTȄ(²&#+U^"^A oE2ٴv7-1ֶ@.Go)=A yml}c;j/ XX’R 8W!W2JR?ֱʓ>K` :0% t| ۼ}ns6]}j3yMo0rԄ&|-1MKy5ܽ7kwnƛ{;;3yJ9xZO|ɞo7z->rA?߫39 XqnxT,%K];/A?OOpa+lb{}tѧ<-|>s!w ],ѓz8TnPcS4?Г3kt+7<,|2 bAcl"<$=}8ru, _ ~ޟ Ѡ?B];TerU'+!7 &/`FEF*pܜYp{ `~ kc~6vI`5u6p bv@}c4Ie2Dc1f5rp׶ ʋA^k1{)Q*H}?aeb(N(U\ET`bF9VHYHfct3փmۗ-۟oߕ[xy/E+O>{e/q{f.3~z㎿ν~-kn[~yrᢹ7h͒po/{NPW X)VnSfcul0֤>²m[?Ica靯>H)!WN)*h|{Q J`BTAF.shBPęR`AS cV,Y=?"U6( --i^$*Ū #+zqQYE|bI&X)X( q$(mVP YAp3'EiFU,w4]oT ;G8^CJ#A\q!ñWUw0P+[Nr۩3j~=O n;b= 7CJ#v6e~9 sX"!GA"@"JWq%|o[i0 }rh\i+rrR9 81Vy֚HU! v=0E2;٬R~,7:%_7Wn<*ج[}MdMLM ы VE>|P>ReL \X,IP $E (t!u}EڽeB$_~fXqmW`[ȶ#maK=p׹g~?LodǓ]`5sh?YO<ӧО1ö”yRb~! 55` Z6V*n n0 ~@̊u A " dFPJo XOwpPRB^HHg({{$y **xr"z<τSNr3H (("pr s1{"Dpƙz?' ?{{{{}P1#5jp̉l[FʡUuMuuUzO$AuUu wߵZn^^JTnlc3bqCRDIF1jpDP 6JtR "dN~,n4?k-Ï3}\i^2_J<`޽"\9k%#ic/ }duٴ o;iЮo("DQ#0XIU#<!!B"D!v ˭ x/;,K7IQ_Qm/8N.Q*5+7޵g,0WPD:"%^MKVo\\/OTWj_R~/_UUյJ۔LTA;F̤P I#fF뗯ZR[.wD)JRI?Q9qϴsN>2gK.]xz9}Ν;tzaޜ[o~3/Xk{u!Vmtыm,ig_o~g̉Lr# vrnGs ^}"{?r q3ߴD=2ae!Bԃzt82 S4D!Bl/lfoN0"J)Ŋv IDAT7n inӹZޏhD`dXӊV4h n޼a vkSUa]bO[ƪeO7Fq ®DbVQ0HQVVn-KjӱvY eȘT- &[e y֭4k%J2 {ۦ\21}^={s h#5%~/O m:λ"|㎿烍#zk4l@MT&$q75D!/k{?_VټAFMsdsm$gV]\V]%5଑FZV@,,R,4'M-u~Eu2 2vպ{sUI쵛j U@Pi=:Xwkm1f;,~ٳOk*C& FH"0+ϟ|r_N$(U9{/d7Bŷ'K$# \ѤpBbO=b>sϩݚ׆YW/xǤ}s)E5OJajK?)g"}z҅4/#1d&Mч)i|շSzIu?5?wݧuۃt>'>{/xo]Jl٪ͫ/6폛 }v{m:Pͭ-~1+vC6ȨsúW[j1a=(Zjjv۔WwzxTGnΚ}u-[y+;~z_NNzme{? ]sOwv6l W@eŚuD"Da܄AF`WNsT3-҉D40P(@ܐ)̢*ٴѺ`GӰ:'/a*#QV ULqR6j̑ CJL47Kl^CR$e6 Hh@12·X20N`p7|b7-Y[!ByydHFDsF%D!v1fP΃ҕgntij5^\e'&LqcRiDDv;t M=;H_e6Zč?ybJ̋;CQe`sдZpSNv^Zs  U/pyNk}0:sW mn?r`uu=k,1ey%K(-vEϾߗ.ևC!orpݦɽF~0OoHmwȢMk=]oΟҔbd}fp h/[NϘm!B YciYA> `n@"fpл)*J?`6nhuV 00 P&30TIL+ǴM2GUT ֔tPb`%#JQ&H 2xߙutͷJق$f^쨁eH J 6FbVBuT IB`XԶqgw?G愾!B} n"X9e\6RybCb n[-o>AKNDW,Qԧ-Nn;geM6w~HG̓fد> 6>F_=]?w~_RQpɧ ?*.pϮ+]y?VܷKĤ&# ,QúR3:EŊ7XQ}Nռ;`_=}9=uxl.)i*8jH1ˍy; m!B )ECTv*A+i2ܰ,X^Fp<,K.jܨ|@~ 1GQ7DXmFLYNVSe( RXQE#KR 7S,waـeDbTS/$mH@JUj r%efBDXp0^oක;wZd7d'|r6G{/̠3\ias@GyrĆ"Ύ1wʕ_^۳s=k;h/|=pݏoZfؾ*>⟑|T{))9q<\qý/MSKӆBP7ⅸ̫QW`^ ![uz@ٍ̊E:c /ZN}PV5;uȤ?v,5ƞvPİwZ*%Zh 2kk27 C%#G Q tVGd&$$}َ;_t B*eQN`!"$nfUIC@T6"5RRP0:BZ˫cA!Kl!P$,.Uj5$o2r)RH4L͘Y U +<"QF%HflOٽNRsq}؄巁y0c'Mp|y gAG!9 K!v^ DHĀAIfr$+E@yNA4"vŋݥs͔;;-Te.8Ǜt_ښziUUU\\ ܷӟ̘w_p)YW]w}qLt%*'}n{m@"Ι0ܡm']JƂ"mֵ*?Mޮ7bCO}_"2Uh,os΅LO0:7?3A̸>ݏJ&}5E{y\vRxHbG񔫑q3;a?6Лݟ䂓0S\sܷz#6ok9-!BPG QA}{c߷B1ڐ+ A2ێH׶kժO=TM9 em͒ zIXIO' A3ټĶ{ĕy_:|%:`m ۖ1gpcJ Q8iZMyVŎH4&AXGA8!Rh]P1a*ŻEc/k?IR-9¥SeC.hVm=퍯y#Iuӵ|z*~6"OᄌͿS[w˃O.6w;s]~αJ~GQݏ_wPw6ڃwGKX.zߐ#w鯏?~}-/~{3g_ѡIN]ו<`rO;C|o<`A~#-[urx_+Sxq>7.Avv휥K^~%X<Ƣh$F#e"ڶJRd:I&kkk<3 "Dw=ƞD"HX,FMܪ׶m۶L&kkkkjjVO}ޤ?]d.KBk}I~$FfV̒Y2 @ #Seqvs(fX)D!"aEbQyfJaMH``CQÑ$'n6Z)UCj4bfA FH q@M n J 345;|kD}x凱3|v"ij.g\sx}z|Gq#\- ޺٣ ~f,[·e75iꪒFq獘5}7h_V9~qwߚ+`t Ih"D!/}-[id=C ٍ!Bl3D Qap(tR}`d됀$(d}_Jm;<"!K s0\ `*r#B%FpWQ!q#4fˡ9Pܨ)R'|Z$jej1QHVif[k%ll0! t:վppIWN#5k9o6B_$j]~S/vX2J;@hᤆ*mW' 1gڪ4G/^]W χ;nᾩ͙T;튰+>pJ{M#`R}^T08Ԫ6] =Gj5f *ؽQ|XiADjgN\bGHdJ#vJ6r:k,R@T [%bUC ,VdX 8b!7K[B0 VId%&X6fLeʐ2"^=?l02VidE^b3+4J*eKDP3ѯ1gSVaPS6v~`֫YG?q:EYoi3;!mOyC9̣W?=ܚ3HZ#RS {*ӭ|XAW=bsA+zY}VQ7΅Fb'_  L2y8"D!~0 'NI!B ?OJv6M̢Z1+VR!3n6-J! e0 qI"nD@)jFv,jV@-qđ^{3n* Tje)kwrh9*ieVtЀnzCFJ2dZYb )0F*ZEĠMQ;،]^[yޭ\wП=i[-[AĒ]}]us9/ݨnybqW׳{7Nxvc@Sya?N=/=D2N?CN]݆W|Йcr|_?~X*݀İ'7&vIUfPe1!Bt8'0 !D8]!BDJhG,ñRJ8ҶmǶE[zH5rdoH2h404J-V~()Q e:!ln7w~y #kw3bsIM7DAԮCڈmn5UZ%"4@Aj?Yh!AD١"yvWi@o_>jn;j n CEFKbqO.F#sT+T2LRdumz"(VfՏL"֢im >md2F !B' Pnv7fD0LKRԢڲj'D D-ϙkb"2 ,HQ%"H0推6E Ja1`E ]1hQ)"H@X ɐRJRD UYl?5lа,^SH)F=ܤ1:% ֏1zh8!v. -#ʾ^:! ѓ~Ω^$41D!BԅRc5NU_\rƐ'6Ѫ<3Svߴ0o~\]G셏"DF0Ibg` "b?[g?qO/|IG>-4WL@@eDY.XHQL e%I}T[NQTD 9JmJi1 GR 3raʐ #YlG4(i@蹂]oo"X!vV0(Iŧ<GS@C"6`O{k|?9{KXR՟>}2gM[Ѓn\Gοߤ̏k'9D!'| gq $g+dDeheRIW_ *0ܐ(*AG@5' ĘAlF&*LL! &,4bH6̊5NZESDiq @D@T0DF[ Ō׭CtJH@Z(Dk#D!?BRY]NX!Blw jұ]u֯;w+._7;wIRݎ?v#O] "I;{lxYBկYfW8~$89-LkVCqkfΘ cf͸}|׬rc ;w]:_}IǾ>cӔ1_>>O_lv'H5]>v^8wvuZn kҦiF,4M4 CB5 *x^_ʼnc7_g>juX > k߂{e@v[Hxr[S6{?estY!B*˞Xe 3K4s7&[Vo*}If?*M E;ٷ Z}x]uF IDATED8԰o|t/t:NRzD"Qea✇ZED@] I? hPZQ~Ӻ^;k]H|n U_ Oj̥>=јY%j!D""4-4 4La!6$ˀFY vmsY(ƞ "Ghԣ|>Z.e%>=Z9Kh~"m4 :iO@ưVJg 0Cp(H>X1k]3&>MP~oʱKXuԨ^($ /]f/4cⶉ`,3 jF =DB@ DFrŀbO G?+ @F)9e10^+$rh]+8pF"*l:T bgH*PhVMj@)H*HɶY4(5RJ!o!BllO|_}#:/M(ͭW {߇9Y⣵5|Ѩ\pC߻nj y{W7i^[A+Tgf}kx'ē˟=ǕSǞ'Ls7@ߠ8cdZZ}"Q205]5u̥cBtr7>p.c2nuP@Fs`;;pP §S~ ˺!+p-DPFǝ\G8n#=/RBpuL=B@ a 3heόyrH !0л  38q]Jp),uLgjqИH$pkkH$"u̹qA.~>i~t W 3Uqe_ &}::h7ϙ|HbQ+QRJJ҃#"*DeYeXe qڮ<0yС nv{P3t00kem'VR ʋ-$;d|wG3ڄ-isБ9zc1cE=Sq^)%OO¡P#:G !q3urTf~ ?'{9xt7 I (|r&# +Ϗ*5Q;tQS3 2Y,&BtVDܿHrnwB3vX1dvl;8qGXJC^p !"s#Qq|Ll9vRR݌DټX$9=7LGFbs#Ȋ5?-,$VธŖ eҒ&6ZhK*D+@(7bȂ _.tޯ&6Dk4C/,x<F-+baZ6L&kd2i'O7Nv|<5pZ>_Wx]%횯9iG-/~jS{1#zt/3zWpMwOKZj3ҿZey=aW]v>)}yc_q Y93o1 Ԧ펼/fF5[js~qڪ%K(Zj%M8~Ƕkwg)#;qꚴ̸ѳ_4[?[&頉s8E{? 9$E# 8{hnn/؆4NZ))Rq)AJ h} ,ھ-~QatV7V.-ƭHIJiX+bEk}m{,ϊP_XBtLh mʺ "̎c#"5 94 0yR-^ϽwU8E1x !(XbأS\2:>J)H2`_B*KDy?XB. !"`h[zf6be#ߑT"OMh?އn9仴+G ZoԲ; r!"A=̐A7ϠG !<AR_Z]EAnyOR~L Yc+BJT @U& 2((@8TvCC:J@I P$thM|/QdJ%2eVʶLA6b9rMV@i"lpCHX Y:!ԡ"DE IZUJ!(mv?Lzo<񞀝Se5g^';[W)kݿEz p?/9Ov~WO F =^at-_;Ù^/V *gf VYg"u #onVjs˖~ V|Q=F_Ŭ:s(91grpnvbw>Ic;7$zvގnwto C L;W ?턋G^[ 7;vէgLӶG?De_g_BMp Xxng-DV<%VZ2-3bڅÊXi CVy!Dk兺NͩeC7 Mm$wu.|N.#FI9ǙPsHh×0 bq3ܡv@_on#;]DM}-|f_80R> `2J*M(ӝy$VQ97\3ӛ+.]蹷0y4{~ T J*e|{e捪VA!kAZq\mRtȈHP#Rbvmu]:exv$'jy>Cui9Slvr9c.;oJs>~=EJ>:l4~Q]gw0yrw;x_רIG yS\R`Zza@}fƏ/1k 0"mn "AČNojQ=G⍻ҵiɈзKĤ#G@b˳F9}WFbX&[+{%˻\; 8D`!銃33[Ĕ/7tDl bL/8Hmq!Jžû " ebj!L1 ôHIJQ4,4aFֺ/+wz=~Rg3 n _pL^ e*gkÿ~@2a"|1KTp]BkAqt_͂+RIwT>qN< gagX?$)evl23#%{D˰z,:6C(K̋њ "@"J) w a}bEJ}x/v?*q W|iC3/ԍЧ̌rkf!aWaJW|h&50Deung.9w?H=,޼ޝӇ;Z!.WWб{AL ;`}-4U]mWY̬"į ecnZwW|aG!~g L1cwueynD"H~F Ȏ\@Wm<"n mzrp@:!1|Ҁ$S^<\e BaPv@ $Y1tGgzZNʌD`?CӠ!"m#B% >TU~*FJ|a__:F%A׏B)ɈA8Û" iADT^#҃5|kYiQY"t[3vO15Pb3D!vȒ%Ԩ+rR"z1%ͻzi~tQdΨ+;٣f_gإs.\.g[cYzŽ{Fos8/^w]>[oEFEa^ҩGYr<0U..އA^>U)Inzfnv_;§orvJ NBK,Xj8Wo4G}Vi͒Əl[{sCȏL!*e%ɠaa":w! `F$D'8L2h4beB~k,$9nlglxvg*={B(in2p<]n$G'EfWSb4*94B9`ɁyCD-அ2Б9μ^g@2h€Y/D0,D<5\ >0nSJQ`y~fH% ݢRҕpyV ApRKɐnWP 2%D!~5(Nq\ ܷӟ̘w_p)YW]w}qLt'}n{m@"Ι0ܡm']JƂ"mŰ&Loۡ'ξSQo2>\xt x3ČdW|\LwUm'< *$ľ폼.qg>`؏ <懦m$?Ծ"%-9-xıވ8zNK;)Bo9&S'5  2M DB0> 8'}9NTJġd%;PJZ "ߐ&$D`RG h&ͪբsh(($f"ܝ^Hf1" fAw]KJ hd `1@TR~O| (\qwhDhqD&! x|硈QB418H9ؽ׊:(}7O~(;R D!RoAR̔!@1*e8$&W8JJl۶m˯-E%D!Blt."\HĊXjR&SZ7Jz=x:TG7FU.#D!vWG}RBUu!Yxcz>8/9X4Eh$D")V'8Ƣ]?LB2HPׂ<&m~?j`6y|t Ӏ]+"z68Nf; ER3젳踊;=hHZ#яQXL[_ 486',ȏ[RBy"2"aZY{;P \pa'֡ЍQz.\5nSCnWG7K!BlwdU?GOWIBAH(;/Zjj{{)!BfYciY]r!t۔W蓖e=s͹EMZk吖-vE?/o}!vD Q!>>}i]2JXz=&_kݫθmSu~T|Z ێ^u3,}o?q4͂uY)gsnu^%=af쌅+67v?9Vo?ޡM6\!>#۾1b 'ɑ폀ކ  "Sf0AC$bB0K \ENRH$!PPPg4h@F U z);Sl%Q V̎.tXɡiٔLJV>&>fPL21<ϋ2NY C?;:g0 c#3!"a_O-H "4KGpc1t\P䦺44;G`M[xq1Cю%,ͤ H$2KpF&9M9t?N&Jȕ_uD#2YXP9D!v{gf62H+"D틉:mIu NCч/]x/OYe#U{hN>K7k3KBw%)s+UT6r`lHN,uπ@~k[d=]q"Y|]bLȌ h&H9.0 ӱCk`jҎ.0j+D4,/U2j$<dD"n{Xgw'Ͼ/!Blo~/~'EaH)a{"!B؎ho!g^]]g#g>1dUt@vT|/vX kI2y=rS% 0ʕ`FV zR y#9W)`kaJf]2GqO y)`>=D}OWG$ ΛspJ 0h3D"7]OB(}쨣Fx/"$8BcW>MD  2PJalJmi;mێV%%Pc풙&WS_ ?d~N" bkT˟g\+]u)ϡEy =[&\`kn褖iYzMd3{x2_orVy^oLz8w)c<5Lwٗ$8!KzT@Jc;Ub~gvUR|߾}gϞ]M8= ^0L4MӲ˲t`ힸ "f-^o!#X@J)$oIJIN >AȞ߀˃2}lVdXp [143&o|0ft(3K -E!,bF 2za-q /=7HS&P2`Id:Y_gs3w]@H:(0T=Vbڊ?;p}YZ,5c3FB atb5=3 ueHVDv2bL >^s>~UdwFOQ39yPt+jjϳ>s)!$Ǩ 2'H"J)B)1cB(B(Av={=kkx>߹aY{~?V^V B07 ǖ,,,4?d8 n9KqC /B7 ˧Ȗy(YAY ӣ Tz㻙x&:GC<#jh`ۅ Ct(_X )ƥG:nuu /Wʛ{*A'Q&d'VqPU|'KlpXrYh%*U]نgh~n>y+L313LlbڊUf Ā̪!k豰 j Ix4#IR<ep"BsL  VAW͘)!1HX[d&$/F8]2`13S}I0"gx[*d8rw쿭ْ-7`OLHT*#L ' ƒ^.3=+S@X,@(>r.2Bt15=VR g=xCw'g6~uB2PB%V΋JLj-Z8Z!"&ՀiqERf@g"L%UB.mF^#~sAR /ںhM^.ܜ8a_x}MOKO$8j~:J?筠@4膆9 [eE8l=8P"9}i%=o~ zX9`CeXk:tUMs<`un/aYL pBl,)'H*0SW [$@H-r!7DUoyT D UN\ƺ;ac{2+ ͧE3ۏDgc=IS1oտh91ooUڤmjݰak"͖lɖl# "4nG `y 8}/3d=q΃T)A"wWn<]`jq l*AJƘGJ":ޤ9 (+DͿZ)p%sGCbC3ypqeTzK)S/BwCGiBV{ ҈ : 7?#ObS_'C"BL#^/h#ţ$ (Oy><77UG2??[lƐ7D3rWV _zu vԥ˙yeKɪU+>JJ"28>/n{J 6m[on?c;И-;h|9"'=811EqAc 9@. F5(R"Hh4H0X ]MQNYC[9O%E&xb դSB‰1W3jnI)* eolƬ5Cp7视>p(&r঺d;!ƞ!C#LHۉH*pa- jPTaYd)XG TO1I1 rrRyyysI&$?Oչe5ܮc~ w͹ 4h9 ۍ|#j前O^[jӢ/߁{_ =s_qg~}uAݯƳNA/-?ӿ_VQß{h\oxMɺu'į;3|" 6Ag}{Xy9ϺTb7D,wOwl}(];rN3.Cӵڪa iӦ`Vx;VR%?lol䜏~8j{%Kñ\?z}Ft)4aj|1Tm0xYOWpo( `<"C`ktN,B3+ -3&x`DD"@)0fEb$?U.pIW D@Hv,ZMZ J IQ2}SL#Ҵ8CJGb&B <+#`4Sp T*J$ɲm89\CNnދ7<_֡nW˻Gb\0ᣇ_zs?Bl S)s^̼]:νO@ks'lyF ˛n#VRzU>W]9kxrQ WתwǏk[+?رzm:kºYGN~rcG ؐmqtʹvx/9we ٯwty?\_Fz /izlALꀈߥOu[<Χ~Xгא?Ɏ5Oϕ8XWȻ\&gL*I\O 8Ȑj zcz5^V&">. !0R)Υe q}`-STZWZgVϵ7RՐ*NiL¬*9 iٻBDAֆ<\lHV&e *=G#0!by5SDB !{pج IJ1M1\T|KY霯mԨ+/?#^=ԩ_ЦN$Dq|[>Օvk8׭x?nhsYocQT7>aKKd 9+vEQVZ5qDs{-:믿~;wqN4?*t_p +/I&99®0("d&^.r@RsnxB7mZ }r]g*s+^ت·47҇z-Ѿ{S+T3D_شX]ڥϪ[7Ϫ_+~e54dOmLqQp{~^%^Nwsє^3y]ܪ"nH"ʐȖPRޛ_">t8׶gL^8oK~~~^n^^^nNnN2L d2) Z48OɇNͅ\"N0qA2P͟ C9pӚJh`8(%4(գБ0-ء]?\xœ *)+^MԀi -OaJluFNTڍ v&beD*igt4Qn/k V8 dF֏]+mg 1L\ޓƑ T#B΅#Ihuk74mK$6߰q="$V"3JJJ3g,ZX:Ӈ2fcoiOOxagxk/|:AȌ+I%ɊLf\cĉbs `^^Ӄ>H} dudrĉ7(QGӦM޳g׃Zoi7 9֖8+:N~eg(ԴYy3ATH^v~&oHȾE,J D p"lzDR nCDSG.(8M%Jh:~)C_Z 9*Pd"Įڕ$θ5JBsg֜8 0oJiVR hHa>f ˬ+0ʠT AD0&!R RRkCnPD7?$sjedŚF:G2@2H$G w+ DLN׆߿?FQqĵXZUsE F熫k!E#g5ӝCd@F}ulο+۾i[P/ڄ7sU=#>?yqw.UF}0ΑC6TQs9q5k`Т5`g 1Е ̒[h@JG8{Ɠ;u{,5cP$NIylLV2T*2H/E=(ȓ'"Uxs8\3*BekI0\ IDATUID')ȹ5σCm5.Sq[ dhzjKrOrEf )%DtŐ1yA1/NqŊBœ+`,?b_XǃN܌ͫ@N}! d?׭xҍ?6U,gYz xy G98kN8nڦd']bǑI&q:\(*ⶵ3~{GYt7y쟩9Mt?@W:Ю]͞=XEp5O_~}}A5[xFB#c`DQ}re”B)*a\;"=%P-1OK\E7"W>t91r6P(fo%y=U &Je̶mw1nl |GGsOHą,J֑dO Ui"qѠf0iu^ PCD"qݸ[)Ժ/߼س_c/b@Lvν#.T7q]>H>m+gv=Xs~_5+u; u%/WwxyU;Tޯ:}s!=[l״ʅϸ֥xAQ$8yٱ4[*q(6nɒŻ5hx 6Ԯ]g߬_X]w*\j9Ks<.ιYL~Y7P˖ϜA\%w\zb ʃ(]Ф{%w l۲E͚-5j{#O]bSF.*o`{43D/MzzuSc۫1nQvO/8mzuMLUFa;).][۶m/_>;ݭu76ӎmPwfm:MrMl-o}E{6lvS~ig퇽$]dNmDNFdƺrЃ1+cDZARLy )P&d؊ f &:2"<#!qak)`2ķ{h@tO֪YAOʡCPTm<)CE{Ɗ XmCv#(`Llfϔ|wh_?ރ'樂=u*]$M|{ޑާNav'ʬ!-~^I?36rŴgrRn^,|ݫ2Bj=\W9ҍV7[{MpaE'/{MG6Ϋe}BUIxG +^q}=a{KEz6&g+*02ݱg7nǍ'Caޘ[?/͞Mx ;yk혘VUkmS~AA籢Bꔕ u 56n:F$jEs?~y|YՒ6mUV:VZ6m*\|xNgԺ;[Vm\< o݂B\*}>~ɾ!m>fޯ?=k5}qnݼ?V(?zVЏclÆ EEEێĞ yfkm$i]ͺTizy^ tϛQ8~t| ֿ6|=|9'];lTV^z~":BVɩ'~4tuYuw?nr3w(R g gnH^pEHV fcH0'V:Ubs[b+ఔ\V3N+qtJw̴"b]:[jH1c覽@m56Rd Hp[h&EI4h.ơ?1EMn,E# DeMP?Ȗz7fok' !\B0&L*;w"! L`G|Nĸ'W?wVFEJ%87ISlI$Q]mfp1ԝR:pً4ےX,RXcMaN6sZ!lG1f iE*bt'C0RG ̀ Lʘ#EC2h҇e*?/?kRy"Dld<H 8q=*OѤ+VhРԩ]g{w`ѢEw^I#o>[,ѫ%'-/:P yw{uiu;VoqMg~>Jrʕ+Wsಲ~]̧h\*M'STPX)_uq\: ^Cھֿ">u֭mz7\"P/li]=7Tڶmmf덭ȝ<%|~` JZ/iҋCzmm{ OE&u(5 8 E Ԛ&0 "0"$LU# -s.mWH R3\?ҤYӐPe`JI0ۅ0Y]0&U^֧SEW\O{ݞ[Tz|ej4ڻB2ܯ`ű;lSywǎ… իw5r>/~)~k9~s-n{_6變 OR8ڋ FS˄w5J0RFN$"Tn}V6"PHtm&@C$DM1Pf_pC$>G]1"jvB^#z5 MvB|#Wʪ/3h;7R%aVj7pkE,1-QIԘxcR%Kd.[!'vyJgL'Pb4,A@ !' )*ȉOD8Ւtqmw`rS-N3WW4=Љ{ 7iJ SY4ݽ  < 0a_aPy\#W' 4:H+Ɛ)>M>!fƓɳAࣇ|!)JAYGyn аa5Z}?77Z͚[TٸqclY;sI^e̝;J*EEED`-Z-ZXlY ;[ćoϴ-7;l"5s B1n>7[=qؤd;lkYt7o޼jժٳgmvm{u:^;Voql;:qn3 Rg=jQ%faKWi BZHG%9 G he DLZ{vҩfgZO0<_5 cUc ?{V)ĵ*i4V?qNW@z=B[p*Qҩ y1*F"@QZeNelkԼͥw<9=c87ToܪMco;.3w>[etB@NJ?,{5qi (+˜&NZ!*4L7=6+ L~yf|X3y1VdF,VQC+`57 a^$E$Bcw!, H:0i̔[QTؒ "a2#]OHFXFTfmY#c2Np j)xOT$',H*@s\3zidBCw}3g\^A;U ~BD"LJ.7|:רy5íTs>iӱ_q;u* 8I&M4)$zswT0=6h:d@oP{('XAC\PXVHE&MpMƎ|@uG/-fD*rMc+zs ̔h\g Q@AbU̙p2Kȼ 5q*lVK]IPVЍX"{#;}\.G (m[[W1ۉSfvl/߸WOW|dK8/؈'VAmyT"Bo)/I Z^4~@ajZ<.yֹ$beksJYn ƶ6-Q2_X| Qb#.Nz:DT(U*o`) IL vItp#/ "0Cmˉ1CA= 9'SA޴\^V^[pMQ aeKta >7bV\}6S6^yFbPkx -zYT _4 KT=QEcYppK5*|*,1Qu1=s'?mHzI/O`܅g IDAT PTTؤ=L1 wd?GVkagi꒟_ՉNۺ?p]̌(++_??6[Ta L1<ĈmaZW :J+D*] v 4<9o4wpJhL+UdT $'B$mqdjKFrIH'EY-d*Ū@ddXX"3/rαE6 +S]YM>Q粥`)8v2l?W9;׼2nߓ\%8ם}kV }fۨutքu>nǎ^bžsL\^xGNJ\Y %Xr͛~^JjY=WП{Tսo_zi<,|X=w5jq;'vG3M=菩}[w>zmO<;aKz@^Cx'UbvYwtʖ]AӒU&?1.="cuaS$0✧MPSOaz}R)rb܁bĻ`/f)0H }`,yT+ƂZqG‚ʘҮƒX#A!$ЅI X։k[Ȁ, ~|Pnjoz>'_ m 5pRo|=A]Ͻ۞'s .xm¼ܜdNNK~s,􀪱 ל\cD"$v7ǼX7x7u6n0Dze8F@1[ Ffz됋)< %&Gε \]x]SJ7w3~uH2!nM#I8L6! 6'^8STYtKiiIIIII͛7רQrXӷGC>,>UխfN]iMȫ$%jR$k!KI-)< U2ƥA] ^;_Yz<[lQz<6vjզI-N ֈo7xc9!Bkٵ ;}jʾ5Or9Kުav6]1]{v=#VJoU;?]M;k]ݭjlMM5c, Dr>ZgސE!џ*bO-;UR|w7Gڦ3|4co$D")oPܚk,$ .X(+<" RZ°}Uuc ̓;Zٻ52ݑ< [hQRE>dCTZKY D$u \PCgd2u ;Ĺ3EwV5f֌eBaUN6E@ j7vJ+ OohKAHlLEwx\vbx!m;ͮ?v:swgc~QYT 9` 9ȜjJ%2?1Z" Q V2 @Tm;*u`CQ)b  q!̡+ mC zE@gi "رJ4RRk*Zt!. e@OPcJgeRZX4TaZ%OK@Lõ/3:ZV WBC% ;7z}ZC < 6nskw$?SP\cLYq@ͦ "">ީԗ>d%?zmRQuA5~gا)9?(6:Gݳï j׬qK=OWY5}P)_hK֌V)gƤ9U2aOϱ;d}EQW,|ur׺wB1nImvU[ ȼ,գ#K6n\m{Ds1{{daZTy^vTw5هl{pжw_Y ogNHwT}mP;[u)^PT97NҫWIWvlyTBX_?pN2\!nj+HaVdxJRLv,7T3YDCLVdMKECZќ1nH,E4Zi@BiB5se EsY+z0P1 cydy7tM$i0iTcRA`g&)ኟ!c{, :yC}]wwf?1 q rD /̷|j# 1 EEڔTH0Hނ)[Px9ʞב 6`s`yNԪ!g bm^\rg!. 01gIrJQ|(c1XK_)PYE\-Ct+i־2(†ѧAiiɳcC}D?y-|GԭUA&nP9ϱ'4,r|wh_?ރ'樂=u*]$M|\>u ?q~˻W;a7=n\1g/[ KEz6&g+*ͫlgNHwT_UJ7^[a٭ؚ|E78^ϗ!bUOye*[vr{хfn( SIt:s9Lބ+Krv`&:mkb&qRbMMRH# 詋}s̯ h%a1rwAI$\=&JC LT,XB@$ͅp1 Dz bcd\&mMJu:e1w la}^z& y<*Reeeeee%[lyzKr k1[%[|IBk&}qP&=D:CBNp@{8a@"ƚRPWCT,`U3g !4H)a+4_y b[jՄ83V0sgJ+xĔ?0t'Cn+Q鐗nP**Oe[JK6o))))޼ys5Kw߰P6;ge!3,p"8?d);Dc/G^^~N2L&&qCRAXj ~#c9GQU!s4Y\0e# ʀ)p"3QcO Q3+-y ?2@<q h-]r JiDr8hpk28p.ਞQt.o̎}C=f2.C9(=$i [}o7$Ca]ޱB$$lz*j-{C}ڳeR2-!91#Exi O q>l#JZۻJ-]!&Lo !%an`7EĐ`N(qYƘtH71Zk !% a/Z*C%dc၌Fj6Q Bs@pO"˴S0!e2d Eeܢ5_HF!berCDȬz@tZ1uL $DB^*`!Keʫf_ْ-);VXoWc9v:_ MG ITX S8'( bnnSٯb"0c4"㩠5jF b> #9VIlRVb$#9C(`"~JL@?1wFoSxN R) rYxXXL,uE/F, UkV`dpĂ)]uB5WaШl()o=3݇5Tkιx.p23Kt}fQlɖ- )&!%ޱ-u$EDG1.B(-d )J :]DL@PԔ H, |!p*HLՙ@@ !h i/fDz)ȚxcBEt 8GW'^ Ƈ>'$a΢c"pQ)T HqDFMQၤxҞkXPKVQXGu c$C&T92ŗA@B4q {-A:z (Ș{ :smCo|M}jZ:o&3ײJ{㻜r:9^Yеןylkcֹ& [4ğyWɖl9矿?۽.W?6gE zFy󘐟bՎ1,"i9wg[Q}LKTat6>, D<#`\1~ljG/c  W4`IldTdjs CmN ݙ1p7Ka?D#SlڪEbІdPo` Klҍ~$L{^J ".#ݛfKdKl{6q0 TSp; NS_ K RL{H(!zazp 8qHZ\L(j9!0=&: m:@\g\ARp3Vq7RtMCL (OCDaDW4%rÐ{QH KYy#H + L{P)(H?y9/ƑsDP]v* 1%|?H1Ƽ̿-~ˣSv >a7>/jwr#W҇U/?\úO͊]ʋL~_Wl,l=׋):F+#X7K.MOqɁ٘_^h[~en^lAdACNc{rCdϾ VLy~ W'=Uxe7+'jxqǴ:yQnқڼ6.8_߈ƞ*]mݦ= -k71yUw3uk%ؤ_2!:P}+b:MV3ay#cB-;~[ޗ]qxOSM1]ަDсA񤀷۩)LJ.HweDmZvLʖ]8d- LO1r)"N!-0iÇ`Q(AQ" T12@\D VLW!tIC*,X,sD4*#@ߊD$*ȱSSp42bY3E, .V>+bV5+2ꑐWCX).2*s|ٝ~3Mƭz4A]zo-jf-$nh14r ˳Bv`C䕻h]Q/'BdzY,pVX 0$EMì\A4zE3R5GCH  uy3\Vwx vh]J C,qU-Ia<) )%TɃ,`TЂ HA3$G\у Hi۽چo!w܍U{Y]܄.mH Tݽ}P:Bo|gNuE[nκU%K>|Oo;z{Đ}sQO&YJ.nC͉ܽC%nz{!ݧ(Hr/M~.~W?\MC0r }_ڣi'pO{Umnx|8yEv@-TMj6!+j|'eMjSkZdˮh(q1)\U_]pLd^JAmM58nfJVNܦIӤM+Kڣ^š{tMXЂZk&WM)k;g:,C= &eRC^_Mo':R+Jws ʚ-Pli p\w>p $a:}tcRJIuJ\'H\;bbB-DT+,\Q.-⢜P5Іk"B"ܙ9ABHDIZLR:Ȑahx Y= \ȯFAPfȘ̍IwUU11b~e%|<=? y`ccO1>p0h~knaq-̷zB}W, ٛ5ډ8W>i?Pۜ7c![_[^m\qz;xɍCxd{/ bxr?`>?χ>o}g}FGGfPNlK欥 ::…[% 5\EF4-F & {ؐATzm$8B_F8DR$O yV!0ibj) -͹iin{H{R>FOj B"Ӆ5r\͠h9򶆋*?y{Ւ%^y϶~s} 8`/?<(r_ae{?GGoPawxķo~blo>o;Ԟ_x|^۝jϜλNy;z]u27r}{/y[|i%{ƞ03QuAtۯ/ K-{x!{o~4bwyj.ο37\D$ÑW6GZoI6nOLLVW?xzݝxKn4}8>\+Xoi}.mm{~'xb>}wqqWrzQ0s2}t̷ɸM~YEHQc}L U-ed&*:2dAPlNl KGnx lĆGƋ?s:1{#Ud;_7fʍ}6Z?vGv;~?Y@UN3 |vGkO??_Gw:HGړ>zޓ]v>z]<0qztɷ }f='g8kc,SSQ lY_SqN'z2 b@ EPirt:j| b"qW1t$!NLWI Yj=$S61E*Um>/1pg4ϸT4mb1+cʥyX"%| (0Sfv888In+hDUO?U!@B?'@(RjR 0ٍF珎կ*?|o|\v6do9^l}mm[ۯe7MwY|ׇzQG}s{p'p,̘^w[my߼Ͻ{ǎ1mƴiFFGFF:b \7|g+ylphE(LY^W9VզBCUZ*ƴ=?Rň eCBB50ίr*<^0Q"xC\2?ax6zdr5[2nzJ-Mt+kQʚa1lQcd7NOΛ?/[n庫ϐ_Gf`Y.gW_l՝FTq@ذ;0DLT=/./9F;2_>5` X?Ṋk"GzN 3?k{z8QЙx>o8s~ykKW.*qXQKwL>m??y_2W?ynʎ.66wpb/OLE6v`y*o(F,.*Q/x[E3xjLRqUg'<3IHYԍ0@&C×}}?9т!Y 5 B` jhUWe(`Ca!GQ!U-VZ^kIHABȈXUjIJy(RP!FWK5 r@ d\SQVU X N$!Զ3%Pkig AJ_l sp"A T+ HBYXCrdYS٨bp7.n&6j$(ԙʀLNRJH|}gJ#@(ykѭ?c/lKn$ur߶J^|ڵcݱk9o̾O?o=p3r}g}6n3[f}3_x?8o[-6tu>giQݥ3'/[nomahmGF>{]ZY~O=ڇu;Oc6=[>xzxa18T"{!kg4(%/8kmթ#t!? A$ DE߂#Q7F+ZI }b"&FQv  "$[!KH0A W BRR ȅ;  KۓcnW%9]iޚ'LRt2Ku]&Є]A1dWRva$V`DB",%XH"琣)Sɽ&.Q(;4(iVCp_ {PPbA,Lԡ 2< ǶmYVɐW4$M<}?]Wk!W]>KϜ![}|r?h\pV` `ߠٛ>8s:ꡗs373.?}wjYtְ7Wng>>yvig=l<K@+]goÀ ʑ/ιF%,-2MѺ%iSo#! YSO/@HnnWP%S*GbG;tUЍ:cT̺J"iMy>' O0@\pL1&Y&y.E |}JN$.TnSPec+V `( ;U(MNNOtG&&&GG&FG3ҫDewl_mk[^ g?R2>>W+Q9ӧO6cddxxxxdY0 PUN7R'PYvPu s`: )8s{Υ#ְ\,V$%s-U(B*[fP@v 9~k$ *-+I573bX3c=.Fq_NG79Ul `,M@6>8:y -dY%lط> sqr;>>>66>6>6yO͛Ԋ+")QyPm+o9gim{gƋ-a)(:Ng1$E[Ӓ5<#|WW!J,V/NV蘉[e $7t&;QLvG0ߟ2bB49 ql I]?;4I ! 2WI_LJ K9ɅyECC(u&f(1Lz10!˻RѨp2`8qkrf|RLT-E  .]D`%|20nQ`P_j@mm{ɶfpdN,Io9(9aZN9>d5=R0eu%}%a)ۧ^TH 0v]*Jr kd\Z!hT+z4$qU9%7OXFENŗr U0f搃?J(h!,CH R0USi3uR:VDVŹ<Թ 2{;v@L~\!+ eЅ^u+aD0tw}]}6ڶG Y"+Wbt) dhBE#C~2eb )q)0!@@{]knH)EHfDXTr$"iQ&`g `;ɼ[q)AШ0$ `i*5v/عٻbċT.y[ 2$;Z5qj&(L-qs|C=gm ӈpEn H6`L-%.'C"SGV1@@)!P,S 0qϥb%*SRiV5+ȎscJ@qU|LHL6 x902WB kƶTVDfB( z Jf42K'=CYt,E`b[Б+E4 "G0>Ѷ^g})C޽Jc`.VJeRVHb0w 6{&r[Es2 O-y͞X =N$\wu G,QwgRY*Ƒ𑊽kCC5G"$x*44oz0uХe_[9T){;+koWc>9XՖ<HT^4GYLhx)Gahmmk[t:!FoEHCZ:}A+@NU7CkOd:D& $&$+GDlB cBֶ@6jU'b'5yBBiMhؗXl*Τr"bDdj퐰J퐪Zd,<ۥeOĉ)j+onLN]"crYw#MX)3jI4Tq Ǭބ^'{R8~sXV & K,"Ap}'kĬ?LT+BQvV2^-pe;u`0=,K!#¨^Eη\RKdj~ *-%%뷠bTٶmmk7>`9pk}*e=̌PQLC+#$V^t(D*d P|EgJ&9$j,sQ4u]?y QiRKsY<t"yqDP$kF*1'w.2((kAQM7}T-a:̡q`b4M|XJLl>hIt7wk922C+ʝ)аk<535/rՔd%dא(>Qc2#We6*I| C-ͻn/OiK+j岦i[W385f+CqOD6H|յ&hs-ȭUyZ>8v>Ղe'3k2d 0 g`iqPl8!k[ֶ=F>P{z4ɔK~YlN.T6%{)>DTs\(- |#)I."6 Gk!]bu 6q3 8`@wjcO I%6x(B ay ǣI&m{S2a2(feP$<H^<7y&Oy&zDj>>guE?ϟt'>?YY8Ă#0DrŠ&K\Y3YEeibeM-z8A9LPE1KwX=p *_;R9og=Gѫzf)Z ]I[eOo-Y:̙/NH[dj몢LoNC:mmk[ cyT L΄] [!K_[i"MM)8nD'ļ(g*NmƟUgggDB-&P4P. ;z7T\A0ET_"% *D$jqJFQ 5;w9w0 23L 숐/x,=%?08>xPZjmxˍR?59F݉t?톥V\u-_<7z',,.>6:m`~mԴʅ,1wmEFo#_zY?+o/xt%}F.?Ŏ={lƷD-=g,D !dҡ0A?O,0#9ːf,+`ĀE0v?!%hx%%(Ҥ̈AJy-خ>R1Oƪ|F_Z %]s% 'G^NZ`!ՆP"0!Uh1 k+Ӵd%r)jd@J[B2M4NU#SYC@9B0 "9&7bx`IQ_RIMd(Jֶ=FP¸D\I-2K"Tapk%j(;iw " 0X$AՋ+| B0B֪L)\eos,UD *EQ׉*z̚" E9KT0"c,eDBtD@^Nhmk[Z$t9H^̣K} QQ #3Km}?h2@7+m!>"L)Dl,B(C:NE:Z&''K3 b0˒I<3  #sY)Bpp(YcrNybP\Zi[:N(+ㆀ^PX鮯K&MY0ndN#,1n$]Y08L!d42 (8#I;&jJ-Y*lWnǟO~\~{u/㝙kϲ#;m^NzW'g.m9~#{H4}uЪo>]c76WozN ay5q.w>: ),=&rʷ/Ώ6ZqDF`m7?sџlAKl^[s^ܫ3Ҟq/Yeg {(w/"qG~snCF Wz6^n,+޺Ƨ~g;~ ]@?kW^qa֜^1:Ij~]l9ik՟5G:⯣{`N5g-e.m{6ZqtZa߲ B/ Z>Oyt˫Nē|+xwx/NBiD7#Ve}Q})C--Fz~AS-WuK9퓎N u TvJ+ePSԑuB!2Q6jDM74kE2A?b8hдHYbkFlw1/0;ƹ\^ JTVL<ʟ@N QůUY"20d*d@]v#QHhvM:682,H,3;bh9tZZ"ig Pqi  tQq񓝛KVz7`HGJ8ELDbw+|%g/Ҫkrz ]8}=ceg| ?]WG޹m nZl;c#=9Gzj/o#v֋2p۷7o8pҸƃ]kYOͽW3WүM~`!;Rs&:y?qq>ߩ\ŝŚN|[_nx}pON$v??YGxWw|r#lT/Ou}/e.ɉ/7 ~=o|0*??^pyzVR?T.ۘ,k!}[biEHt1͂gZ?7bQ ȴ d0%[1J庌U$0Z`^hlzPC@sGrY"#KǃrC̘p,Z6.Y*!Hi$ӵZ;Rc䃢Su,/ =:zPmMAmk[ֶz@ܪ@Φm gY;XMX7JERZbP%tU*5T Tvkcen7&~!j&_T>/>MdT"v%x19\T lQӇ#<$UJH.z>|&s>El^%@d* tiIrFGF) TZkReJ2Oᶏapaeq>o7oo?g{ƷGv~lD?yTN'{#jsvsߺn337Y@|&;u_>[?>c}~?7gFog\51gt/޳ 3wþmWM/[/>>/+Pg`tucןżicܸ6|WieV][o"+ğUWٜ7o`%W"~'>F,暿6̼y헅̧uG*OTzϧ 7?ʍ-* BA×὚f#o C^'R0aI+VIIA6"NB3!ɕ(j}ť*/H\4Lcy "g1660o\Kx4;({6_vy(Zǰ紛 va︯H΢qT\ ~LF硯:h3ʽ{-Smmk[ۚp*Q@5³6(Kd(;8.&t仔+R8ڑeH I^`8Y&=i@?EQEa!j_r|V`eC0/ȥ[HT"áF2. 1RR,\)bbHlQT:0R$ R,ϫ:Hr-9'q#<&jcB^1QR+PC]dURv*B~Ɲ޴W/C~TN/\gI[6WZǟJv*iSs}$_ǽz_疋oņmJ֟>pˣ.;"{W>Wv,pO7D$Yҗă?:D?&7Yq0z«3ޑ g v#ڈS|=3kt [v_=U ! >a`8 vbJb43XIq2V˕G \";~oAC ,ƊS2ʚr03E#Z(ّ$EcRnU Tڡ2reI& SIk/QTjF0qsoS ف@@lj#QVik/Fl]@lֶ!W !XȂ1jTA W`d<>34T{zM;P9r)A$o!A WRM Hi"#h,Đct:#P 꺪5bJ=ǵTIk.pzʕ`T"0VzH_'<][eb2)LDt7-eF.o/^1fqnnz嵶W4v^s$ɱap9پJӿ_=5xɹq]׺oOq*'@7qAh< _?wUtϹ'%7;qޥ-vzm_`{߹ΛWx_ݿqy/VY矿n+O~\~]{5W'|\o|y߻'"s?J}3gq)[|!x!gGd6Zy5nC%=\ HҨu"Q$bP2b-NuYP.TIŌ]""l'L&[5s\\.*U˹V8\2Ԍq$,WM*Kfo/$6䢂P35vanx/[urlCa=lIֶiHZ+ಁhD&w-"( 6I=48}8-) _p/[E!P6U@R'1h:emcE9Yvn*QFlRI]Ub«"wR[e)1[\#YYJp"d2s$8>BQm*o6z-LTJ,E^]Z$mrAJ8BX7.6|owؾLLs\qҏXl5v8mn6t/W` Os.:8;?ϒXv^yq]<  #Vo˯pn7 .;uH#;sc]}3ܸ-{Im>]Zs (hgYI)83|]e@?ӛ̉jRUm4ςLe* gCq:(Ԋa( -yJJ@_9YaJ|RuC*y+*\^01 yetry9/*VF k[: ZNILCTZꆤ@=^@dr9UL&4 ##uV)j Na.ax!^ۋj 1J NRL, F-/A([JH1̳1Q[$&E$>&$bSxĬTSFJIS;D5u=Ze: iv v[>%叔tU5YG`&iRQ{Q.5n W~?Z#0Rn8!v1NNNΟ?>6>6l|ttt8kUV n۾=p%_dmgd9^l:;}^_^vß}v]~52ˮ]}Vۨko{=6mdڴi#F  v:PSFYu2X飏<<f VrE89++'Un`" D&\Ců'zR- OwUb gxEM<f"# \4BSy\C[ɿII/26\>E|\DVtE,JPq U*B̓nwl|lttltb|͟?*ujϧkuW! a'~Wjr=hv8*WtO/66wpb/o622<<<44488NdڄZp쾼n-R4{mkQeCp饥)OvĜ($ aqjy]TwJ.} ;)v*R%ii3ռKQTxuP%YkshCgYL& <&bbרlY AV7y,>RQowDrD?)0G6!2&AT$_BWI='NO},bguK}>݂M{i>K˻f(L3d(j!u9%dѯx֩DB IiVPdyC*,-hl%mIu!ՁH6ۺzGHȓ)KF0x_9dd@lzkMi_zy$#Nf4 bQ p @%*ֲL\ڨCU dI@7j)9bb UUMeMCVR>% 0Auh"JZdې4BJWZWCD =s߯|t_vߝc׿ٻJσBn[5ClB +2Z婼c@ (D;41DQ-b7Q X:9| XU3BpϋI܀ȳ )br7GUBE*$u<bۂGLj@ϥP؉O{ `h졖b\lFa)yp@cV]C(I6Zyիg_:>K/ɻp?|k|Ϣŏd% +bp=F<Ղ$ -1Ƥ%3(:#S+帥A4}s*"JTLU2ZH;KR3Wy{L[ȮUa {8R˜4H)×F5ftVW]䊛M',*2Ebw;s7"ˇr/eM!g`gpMC>g!}ӆVxvW=0+N>t/B': O\[|Gd}M\qx*hq?}Շ:CoO/9ff XzO\|oz'L_fIOl:|Gkge6n6yJG^>8;/VXK5Bܛ޺CExǩw?Bi[k8޳ʠfMBhD9S `G(:N!. Rd!iӡǒ} h&Z8:nK`E! D鐢(0+\ЉW&#S5;Sn ׶+x!${ pCӄ%O@`)VhXLI5V,s 8(~XlY(uF 4FUd@A7d:EiڟE b ]rjImdJB-m)KYƼ8S[yiڱA=@^B%Kymr_Ap_6F";-39:z7·۽#}c{yKyTN~㣏'T~8w]w;f{Gk{K,9[c?/q#)+ǯi~69D^zIU ӷ?;wTzz7#nS6e|:*LtQ*$:%!H*M :İ0+Cf`DunP$MJ%,S1a !m^Y \t-(< F\u t0 r+Ď /0 gQIa0URGtmB 1M| j D RE-$N5BXE/v%E2R6Dn7Fݱɱщѱc_湽48x+mmkKrVi#####CCCCNG\Bɲ%Рe7 Vf)RNR%  }o`ڙ#/2!p|744ӡ`)]lD6S0ԜժjMWUҤquW.n RɡIr1V%MˁɅ)\sT)k{ < ,ES Lw s= rn;999.mtltttO͛48(<]YY=N>&o<8C36Nmm{i45WrS=qK0`p+apS,#0T.yzuS8Z23z3@JS/H4Q0ծZJ̭*u59H! *i9ZH8y4 JjKտ*ZDeUFDe&\%УFsb0! nZS "2+W7VRK rGIK7 ժ,BǁN?;}K`YMq-M 2ꩉNt?q_|ݗkc\6ͅu>?anZYvZcd(527yFsozّ`q^;>Gr/ZCbph":zmm[Ci64 q$\I8BbZFl Yxj0H5D죦V "AXfBy]\( @7!Tܡɰ>H$?xLvP?SF(^䗲:jQ+X)(~P$B{RS ^%7Ji !  D"@ǁY"ERH5G#$Tg@QX#Ŏ +gb5}emmk3hZZ :.+hpnlФ:xB9QY&pGtj+|p厐ӓF/TCCrɄ >Q[aZ>' B➀J2#u#992Pr}+T1ӰjSK)Ɛ9˚ᕧjPfʷ%00)s-z3u=|?]ukc:\k G.=ctocnq譖4ٸV??ck^%떩b!u=w.M =y o>2:g鑅폿r>{euO8XTmmk8SbQ h~tAL" 't>L>efdgzb'KWM6w!Pu]HS uU jjQ, tbJF@]# a-ՙ]Pj®F(@BW Z) CR *`ቈEQ@H@iͩ!h':r*Y#`(H=u % ED40s@iP{U8fs'rJ)FH>ULEkѶmNSFL*I?rְpt_Ğ*YnI7::hed" NZ"H}낹W_d)vhDc&χja}ZY«tўT;&5VK P,5?~wݽ<K%!X}UIR I!E, 2,z~ʻ|[L>o~u_eg:,>o퐫^܌U6;gW vF夣qm~ϬY}oƅ~pjR>83gwlFck/shhge6n'_X!u=wSu֫, 'krv;<2hSm./>PѦ~n,LgֶTJě@ 9-қ2r&,k#PU./M V O' -2鄢yv`(@(m]0Nh2H xaS֩(Nt| EJH^)fБ,):zLNPGQ1ԫd;998I#kw:"抝`*q;skx%ߑ[h*)'7fHļѱѱy zipl+mmkKtӥV#i#F:*yМqm:G>^ C54SA-\1%qf] ](KHkfxE}m([ ԕ)a!m 2SSw>KUiq˷z==VA*˦AnN`j@%M[dbBh,JuuO_5w^?,JBy\"*4X[ jʹDߺRn;>11>>6p,* AE^mQip   J(Ng^eE&:Ec 23z<M~SB%Ig"qɅ=vǶjG*ad!56srֶXF|tVUDN&H1Oʒȕ>z,)ge"8o_8LD I<b@IH>&TE# KE!Ą Ȣ$/ACTOWk5.D(aE)b F }WaX {S 7[ DDԙBtWD B HDU!!0@t/ؾwֶ47V~+ IώWORQLF .qz@=rK$cD$ Z6 FEB'J'/s$g`lWx8 86T$-ժ;J!00IɯmJKi`S>V:ӢԳ8+39 T3fʽj1#b 2=bK)^,H%oΠIxmc=/?эm(8vƮ2~]̀I:;w-KP` dKop8@&n`J7 ګ"7Pj^4IA*_A*\tY(8GTDbd1'ar"bwDqI7IW6lUyr-uƐvƀ*brq1I}A6{xM}d$JO ecp"3qB0U`ZP`HQ$"Ș,:"$h[ֶgpk7וKdK&꼥[<C@-,iQ\Ͽ7=dB'[!ɢE*huE7 )!VGp,+JA).؋s ̿YبRmMF,X\pWE;sP:~Vڶ{m-r)ԾU)z2A& eX(XuJ%7qvxMU/NU D 3^ r [F\E*@F}S=Τ3ZGc>{7 $S_>T!ٳA%}tV tk9/"# M3A`dNQ !QcEb :P `X (:jmm{fGm&#74%G@u4⻁ Ҙ%kDMv@fGw0C|NiҺ ( b,x@rD YR04aa7_18?  s&y٤L25Ԁ /(V =Jd 0S0 AIhќڙBAR&e&; B0XkUKDz؝gCmmk[^QhNAu~)El }#L']8"(46ǥu6V^Q2S/J˿<<ƀv6o7k !PZp D |iQ _[c.FvSaW]z[ !PY Ȥ+GG ȉ  - `̂,dIG,Tew`@YeEONY{/8a1BvԹλfϞJ!1G.B)B#u1F dFDG{qz_T]TGx#_ٻNQ6km{U$|"RB剧4ͫhs4qeԯem.V:jǙ6> S[ϫ\T*9bR6vL\JVQ K^S"AtTԃPSԵZ':ZJZ׬`"(: 8sURkph,%L [ {(u!PIwj6lgvld2/miȡ,@M#l+®3^.O7>Oޱ%%?]JFEjP"T .#@6 IDAT@(%:ìEz4?ryCJ -f&NSx9rT1 4(@!AC!"M++)w:"2[Ѩ^1EKN9%C`8V)Yx.C=3uF3%CD1}K+zr]90Zi=޺r#c>9hM0)~rޅ<?k՝?hcgYϜ4G3>?rtn;c?U EMʘye?F^5t^yS;0 0Hj;pAB  P$.J 2jtt>0HD.(0Yd,@!Q6u T nElӠd3okN =?}ewS! C HI+H E$HQґ"(/M)lywqfν&&q%}ޙwߜ|:+Dh-RsTnݥ ɯRA kq!jT)Db(….:!CvDXC2ŪGq t\M~;1uZxIQ#&(Z0 K nhX>㤴RO_CIZ"y & ~7~/=}JǞtG,2{TM.^G ~!j&,dcf;P%MS;G';ԓ~ivvGdNR8aG.z3LyO92OXPm-OMbێߞfw}5=֡#'>a;n[^<{~3yMnSkw~.Ţ @mMb6AB:m%0 *RX~ 3wJ N _ Y] 8pڢI*D4!/:Z+jw3Ȋ%5X(  \{;}ԕl)kE.$;:'NJޔɦ\)ʗqLSwmq3 V~5xR#1X% \[ΆV+QyOGn~n1,8f#~v|{ВѤ3Kۢz{"9 "Gي>1n ԕَF "3ō8D= 'Ll(PTq"btq QH"6^4+%)0"v ˲!ux C' 1T*E'ƔM)Mm>40Ud\ScrE8K6/D%+2%Q("ˢ56g- ,DHdb]2k bd$$h`NijCDز妑盋H^ku=x37=rygs/-iǷ^z 훮d?EٹH{M/99.`™6Vx 1gso OW}y3Np晿|=&Y0df33 3q9S;Sf_w`C>y#fgKJϾ>?~!/Qߍf2>S׬7ɸNGw4b]V];lO6y~N6gsКZi4jdXjZWWWWWWgggGjUNNΪNr:嵅mXk>E_TKp>[E,_2;j  fv(,*,Ee pLQ ]K @6b)+} ?Bv%ӄxڔ$,rޭ/ |yث3Dw<]sB+ a`ɤO/FRkZN{A[f8#p*%(los+ 0tvg"zSf+a`b-X+CI;{޶a夼]׍=/7⭕)sCV[j1C]_CVgk^q܈U%~mr0Dyq-nsܷZKUZ㓤o iGM6uig76Q֜p{MF=̎}gU+c4 _xN  mzF]k 3G;qzGw?yޭd߸_ȡ~qDB :.[ ~T+y\kex/#u{*b5p!TQ*~H7 2/ MAf@RT @b# sCun(RZA$5K}lrEg<0D%Lb Į`E PBD&Q/ `I˙"B"H % "C2K*R\ʉW$IcLb1͹.D_IuAaxs.k=qp6[ÒZO8W|g~{g⏷_7>S]b ['oL̶T陛uv8ÿR}UxK!<߷}}OrhK}7wځ 45`';\4AcuQYdq~1[;4M=*a j導NZ:#Mk̩aC ݐ+SVx붬9WДX>lf@ MC>C`z|M,A f)WEZ34!Z68DE16CQ%R;]%ĸڸ2Dnsī'zJOafi$%z^Mo=qg'o}UspR[Xp4b dcR|\ܟO_~ 8}dzO\{`qN=K_?%Nx#Mpv; 9O۟v>D_Agw3;o&C[{3.e\_g7~ᦽqs%;Bd}k?Æ\OZVr>߿5Ջg+WmI$9}luױ:msw|$n ?~N&Ā5O:zc@|l|阁չ9num3uC o\o/" eKD1胅"԰D vciE"=\22>‹G@q!67["[壺+fI͌m*h0|2\V Q+Nӥu@ TI"S$.Y("\138'~П:uP)DMfl ^ QB8R@@CdA!-jj.X3ąp>[_®HަGZ݄hힻK2b€6煃^vK6ZoC)'_BҨ^+2jn#/qҘv"}w˱EiX 0b{K~9j2!<:e[{8; 6w&mqpm=7ulˢ4l}wX`CFz9>:u=G=sǓ]'m:Ah=7̫::}.{D gխquje# 04F<p/t-M?DDd--Z*jfgE/,([1V$<+$ Nt KE2uV/$R3~z\'.)a54WRj%9*BDL dY#SgƸg< &D'w-,(u!T0S=!s d_")!L1;r, 0>T=jjo>;y=ZvY7F&D#)Axo;}ir0s_셣k)v^iN7d>Wf\畞^'thwW?ǫ~/Vs}cI{1֔.+\R?&avc{ޓ?' [G[]vc:{2uׁ_>ţ[K@XdIʜaqH5(U:($Xp@ "U(zHSb8W<(h֧y_6*Ҧ=2tDwn&C[b_& sq5TUVz_[ ilҧKmk7y~N>>5ej^c]wTm}I/Cm+_1 %{+ )C jE%6rc[[u FD.F1MCL2*udrC)}&;"RZOdazPpdJA1y.ɗ*my kzB/y5e/Ћ>l bO )[`UYns(UbU@LKjQ["S^xг„A|1S7W>pGsچWU78oKi+.tz{M<*>yDS{ =%>䑏΂cc676qc'7Vȧ&atou3/2 "(ngeXu\;pmuDZ晤3s Np_ԽZb"ê';J&OA&7 #tl3auqx01&.1y\}  ~yZ OW֝)PJRK R"4\MTޛƿ.&?.9<#/rYwĆzpGrǣO;G^ Cr?>Ҭ.͞;ohro~O̺R.$ gc!/1bO.7i->qG]C7 |9DZa%A-٤3}}Hk{ԓq1a;ןyz;ߘ2SfL}7= uӎ7Z7gσR[akZ-Zvvvuv;:;:{zYdZfa1rBP5b{Q5Ӳ~ Ұ}lr0ܵ~Տ )lDž@oj׻ƞ{ػv𞼱$mFm}~{Q4ؼk {XynؓMW&Lzf=~w#?s^?}a؁OH;3۾LD%+PB<2@ z$[Vb&ipuY+CwYqOªIF̩٣J1[=WZCƘ$1I QN"PXĚ$I4ygqB q j,/Sؔ׫CR*)D4ƔJrPb9,C>J EU$ nV 0'`2oB1Dt/1NCRJdefB!0ƃhYDH XC]ݖ`TQſ\s˃W]vއ|kғKwog_r7JƆ_"({Ha"L,62Re`F_{ YCåVeo,V5;3Z9̀蘭9zjIP]ydV }\ફә'+5 .IbE}=g])0 ..F__ctBB ȟQ W8 %""L B ҆l1>t?k+~6z>hh17am}^1~/Ӄ֙MVy/4kjr0#;e*m^~6-wFnұ/(vf&i` NBnlXo#/xwl^yă>Á۹Nz> {r?zgwk ƉG]~'}l&I^5i?ާI]:Jlr߸5 he9]mEu\@&1*2-$0SzVdh:Ys $EpL 3}\ȹRchhՃ{(3r\F.!cB bVBò ,`y=TwqXt=z뎐\𦦮"h\.eD@(qp]qhչ2_۝~_zmw^9bV_1H2}wW{?L sv_s CÖԦV%Fk]g}f IDATځc}~H{+.Z\*%I$Fg(쳓4>xХ{C<7Y&٦[w{'OT[[ZjZ˥RbLbp4XkDCgsi aؑB 7e@.]# ># !:ʀ0aDѴx<%qȕ E-qH#.spt@cRb.R,9ݐcP_j+T䖐9aE4v D/q^:K!o]Bb4Ho;exd·|{@p!$}sbN 3 eIS[YHf-DdH26m'w=yfoG}3FI*ª~緊 "#"B  E~g̅Κ-x 9>BarMdD\%Ru Ngz]^>rLהbn faH:ŖC+V8P"R uW(bBhF5n9E EVܑU#$uWp<2F nQ_&a} :ZYc/NLC5aH0d!GAa@"޳cE,0 3,#VvN֫f+Aփ*D Z-vzn.@ ؝`EpPlkHB܊a^$WMDZ8s:GopԀ#[T\kQk03dKf?5UƀY:v0A],A3 G3"~)|䃄MU1w32N]4{*[Fh$aQ|&S뇎 `%4*qτDJdSk kJ޶ (g$^j:>^CM#]P\_@ BM5D<%h:q+'F@} uy;Wp*E*BH`9$m23[w` @b17ͅB8*D.F:@L0kَg̀wq oYv'N1^A3LW迭^ѿ[mڟ[=V7T6Ɵ_9S8ZDywz W@+A23p'a%/RL£&^6~c+BuUK/ %XO~p;mMvRee:T2@ |Bwua XuyTIu!"J3vH]*E4KيdfdW.d;4 TG ;SR xHbB.IqDЦ`Ӵ9mSh}~Yl28ZRG^PPILY% L ģ" N 'Y_kc$Qn1Sg XڃNa"sl׍$4^$#Pz1_20E%x4ہuF K>_AxB7reԺ1 ĬR>PllٯY\ZDuŲw5QvjfՑ$W >9_P1r" E0kAbϼ򥷧\iؓ.Ef _OPH/C{in OtuvBl(|  vbfT@UvbxA5( i Zn u! a(XԶP$'NUJ,)[ry:6A LZHM3Kk 2aQN%R7""(,h1*g &DLTE-8VAP x"*ӊ##9d$JSNw%vuD̖JIXoi΀Rke ?ȧO{#4fj]]ZggWGggGGg{{G,)--jRT*r\*Kꃽ\&1%C%CIBIIB ZS"`xTݙap(U ",#u!%kbkEB( `;]c G I `xڅxx`u{6d[۰%2>`PΩ'tXib^Kqv2xCee65փkvcpD"K TXHGr`,3gQ1=eKy9XmXrg ج *ffjJ#.B$&q8/X@wmȒ(x2!"Mbq0)+bkiGbU\X-{֕rʜZZ$V:;,)5N,QӼp-+;3 Y˩l٫3e@>xwߝM޻{S~:}3>91k9_j5cs::Δk,`*$ ȔJrR*URTVJRmiT+-r\J\*RTnVJT.aJe2C$I$)Kꪒ1TJRnR$ T-V2Ƙid`@BDhP apu&<":9JU8%n/Z\J$AgsS0R"j獽ou԰rR^i.xƞB盏qRkmsߔ9{!-!/^!l|358nĪKWK?69OyİJR6b?i󴽖W3ho<C茷[l {rߗ-wLn8Ԛ~<į!0h8 8COnӜ)mRw<憳:i3Z yi;sDwtwCOLv7|ǩ,XkAwo;uekm[bظE6UWZ>[c^b٦Z);Z4MӴfU?/$MS]p/-KHVuuu*ꢾG"ǘl %(՞ji_(5 Vh芎ȦY,H9b*e^x"7oBdjCVAjE,ǫ.oNZwZ w#0c jFk! PXR[KUZʖŲXu綆IYJdі$h|d "[o+$[4[`V&-K Z#4uʜR{IfϜ9wrFkxjkkkZiVrTJ%>yG#!>}V\*rR)%"7 {RbʥTR_ JĠ}9&IFBU:=H'}r&=hRDH89E2NY -#'b@I -ֈ >#UQ iU#1p+tD 'ɗMԓ\\dHXX|v3ə, k Edw Vtrŧb"! pg,/Wy͕A$*( }Ǥ$u~{:aa.yGϿ_2G^`Ujsm!O#lsЙ?×=+N? / o1kfëE )Gv]kʭ^]۝l,-H=Hа"GȨӺ_P]4% yl nDR 2"A o{<yhzK-X$1(|P"HӴfZvuuwwioXn&6O!tteMeb%v{x=OK-l3v2ٮ+}K>irN;JIdSN{l[mx0fu-]&Ap5]E} XmLEgWMڠoх~4/ɬpޛxwtYALk]O68 =MќTz8ai ZvgL]ǒ=vwCsnL֏3LA.JL fh,Érs~TT[YRR2ƨ& pp(yAgp6nycDrryīXC8T32Xh=.l~SDfUD(֑:6uU d( U,@%ĥs N)cbʉNV({jy ^$f Fx`md@s =sZk}.WH^MQܸYQ| us7£yRIxYвEmv\rs g;GZE>5A IBw'\gmpCO=9 5hJ,߇wu7mQmlĄ-@A@tda5vev"kͨKA{48F Ox:T.78[R)@Q jYnC4w@hNKlzɿTDծNE_^XS%k1jbU q7 @AV.uKDМ $@u"89=vpw&1-s~)J[ 5%Y`"ZbP$AIb_dZRV$L I(E-5QUW R+ IDAT{qfeРH^b X[1\4dvel46X߿;?`5?7O/O{Oߑ?j5Wy#-!7ꇯg~W`#:cXpfַ{r!eQZ{A]8?>Ƹ. iMW&LzsܦCxQi8mNN"X}>edZ3[/E'OQggpN< bZ[;2zm1ؑHd$ XLamKܡṖ-xa {2 U甭iAYpf:⽑J# zrdbWB+ ђav w-dAE&hcE-} ެ$F`6B~X *V() 3ؐTA"R(H_dƟJVlW({B>Iﻵ2nN]x_P]PgXd6^rw֯qw5 -_d9y?ںƂ5+ͭ]Żhm馽tկݴ֔nb˗Vs?{7Չ>_;6~5Ly[9|5xڶjKK8m4sעDv](߁DY DΩ Ri]' VUg!ߩoD)}^ձc@!ajp%)AJӔ!Xش+m"8_U"I::3,ڎ.]ޒR5)rb$|#JRmi)ITʕjk$IR.BSSl=0'(=DQ3̪Jm!u/y1.d't(PiΙ2U!~*|8|cQǻ֊/V;.xBn6w !81p6 p1>t?k+~6:S;࣋S]q&`7սZ{2=8ad>bJO&C;}p?XfPy.mx%Ԟ|a0lޫ/d8cXiӑ<:׋^~6-wF O8w;gh8wJǶ?yƸ Xģ.~e>^Oz?zgwǸ\g--+*=3^*|l5W%0Xl Ցq2!elucZ9!f0dCJUA087 '&sNדǟzp?{Htkߎ?+7\gӟ9r@eFC[o=Zk2{sCG_O}v,߽h2=l _aUV K$W[i?M~;w;fL>s'و%*9ZU:Zw|qr{ nir/-F s*]q"Q©eՐHSk *BbMbiQ&1S#T)OUH)ѽG1lj Da%X#'"r3љ}XI!C @xa@&Pq9H2c1.`k>AD̀P*5&@$MS0R[k[ZMI!cJIR.$)DP11HDPPu!t%9Kx#x1z{vK&M15 JdHo+ɸ"e @R[EA|g|NT9~݋nLv[c"yNu91_oŴ/WgAg-.ej$R/%Zâx9[Mn(Ȥ7~݄(CfPN1m.  ua5; lXԈ54ctc>l-Fkb v oEO!)JPc9ac *0)/fxyȱk٠aD)"_XZfDw#7&DEHf^݆\W Z[w]YSfM׼;{p״ۯ]MzA=f{z/vZr3~GhDyymvWr=g+omó!0O|eʋ r﬿t ^9ܶFlzdֽ>5=!ؖt|7O&\v9tуKt~ޒo<>U~᳥~g_?~!/Q4U>;}몉Ik7ɸ?uFio>b[ڜ2.c(5I.)fh-Nq{ix̅$?\~7cG=~DibBP6 ؅ũ:rx>j4S8qSM4$ *H[{ @f%%!:b7_j %^ȩn8%9vx_lwwCGZ!"GN"a ɾPEbs%[+ !.@=G$" u1KlYgBPg1i"k]X SE`U:5 3ǟ,ǒTH\ pVgz ] BD, 2:93AX X%011ƅDCj9)z!E~c 8֍bjA a(hƙYqnpD0,yǎ5nj{ڜng5~V~'=;}{[p3ᆭ;f1q2ۮR's¨e'?}E(~mvnww?IUG?Kw 2sʫMC>:knէO\yQaȥ7Zӿݟbz?oxݴ{U:t9SY'>/sڢ/+tL'|L w7`Ύfio>0YvI^oa/K]ӥÓg*gNfW@|g\>r/017/ц1D 4d C~̂--IL@dt rl!2Έ(!WQlI/&b9c @+ THDE2"AdkTe &,x%TkSD"2qE q(`]&!mH궂 Ⱦoٷ8\!Q`M&6MZ>q6"\*KJRTF?JRdʏ @Iˉ1AU_>A8 JN&+he*4O]΄>}CM1ۺdnv뇌wJksj|tF{z' N)t*+,^{nZyWut.]r H}7dH77㒹T?IF\xɓ:|p-M*^ܾIg\3e遲6}[*wzn_n,,3H*rR2%S.J$)QD XXX<0HHl M *JT@6MMꇾ5ӈZ.QcuibzFfkk"VI1HxEH'Rq)L`8!`4:kZk-3Ggn?{_(WU]U^;DDq EQEP uQqc@cFQ 2* ' IH !:[ !;>s{O҃j Dh )DOֆzQ.|2oo!03浻yZbGATGFGGFGM( UU9鸮En ͪV!0PDxKTX% %4ߛ✠(Df1w: ^68@(ǀ{fAV/!H0Si*Z$kwV'gڣP5~16EgQ=褉(] Tf/t1ccʚ?̶01Q!%Z@>KEݎH|c5{!R 4%W]=4!ߞ j'^vl$ʮogꔌ*ETՒ>r <$!A@5X ldO"r?Ѽ}/{FrCP'GF /i6aɦLA!;( 1 ,Đ3ƔqS03cFl;7߸-Vjv2e+sW]sێxʬ&h>Miܡs-XoZh,=i&^(픓T4}'~񼁏_uɮG70zy͎cjs%s?_Ov{?ӿ?{}&^[ /o=Ph႟n9oӘj$Kۦ'"5I~&;M W6"aҎ?Shk^ y|G*f3mw,!n$ϭ t\E;p=h?4^ڪ9X Y'I 嬴 Of@X0yK5B(cS&H OYpFE]Da#\r @Ř "q Y"@H<˜Lqמ @FU))\U#Tm}P0Xa3'ƀ R clU k1~KhIDfK~)LOd،FN Ta B"稪9_=VP ^linl[^oK8^?11!U,8bmuaxj#-/ȻuuSCM4?[Ϻ߼m+~>:yk_/_FWnɷ?'Mmr7~!>/3/|O-lmw){oqͷ!NsGٞ7goَ\z>M:sМ].À@^Jf{(& \3\\SBIܭ:1ۭwb zu4j$f Κ5l&  vSbU!CFD`9 b YM&6C\^H( u]ש*!8qj{Sl3UMR2(mbF" +>;r]6 HH9U3à1%eAD * `Y!L#EDKX.lٿe8PAZmL)Ibӗ ad:M*! du D!5DB`뿅*`wʹw]1RZB}T@`y1~[=S2}IfEc IDAT5w^+QBvLUuBC p@(*)h6`f3m !WlR&HhIx dͲ4ٱ)6%Gr$PpzS6݋+;Aб Y}B <ʢ8M-K_#Eu=@h"F-&h16"rMYSPm4uI4\m!R5!5s7|2)_{#P 9 `Ne%ˣ*YXle D(0ݷ%GI+M|wMv-lòe7o?^{qhѾW{Q۶ƃϿW?wӛoG&]:jؿͧMw?xsogν賷ʼIGi?'YOzrlD=͆&zKGyH4{(iNcH6ݪњ\A{W?9a&~{ýkRIL{&d'5v kXC{]wݵ[-Ph*D1BnWUE%w2Th<a_5y ^U"E+deH4҅! ԉ "U UB1+۪Hfh H(g g%;bp-W+ yA * lU.5\| >P&ة;Z4tR༺eK.*,~h})Uw(TYc%TrQRQ>)8ǹPvOT\tC(yqoV 0t{=ԭNntws^-oh*y4m}ΐܞ߻?7~e~}4w<ȭ6O`'^s!,%>{#ˮc?ӡs<ϝS.T nv_socxٲߜj_{K~xs^?Mo.kƩh8;F nbLJp \5ק~1 pw*J>-M;7\꧞U?/[ϟq𴟅ȯ؞/?{ycMzk~>MpW{5~lƜZ<9z3mZgoW3X}`pp"U2H`k(e:f53CN<*<9c.)dW0#bLx lZ1!d,&e_Ϻ:d&6 p_ dI/`gpJFJ }I>5k<:fNġ;fhHnsٓUdO|#1>9nD_P-%`hrU2y-'HSb7";eѬQeCH!sie 2qyk¨*",!"lO(3+Lmvqbw^˦33#h&8NwYq=3 G%jp֬YCCvX%8nō8v@ZVR+Rـb@QEؼ!PnzRbwEGTcX,P*q&HԽ S7-U2?Ż>wCw?l[-gMqG L|[O0UEfˆ/|9};PT$a&X-ʪ~ "]U\uo;-PI?mŎƥHƫcEL~m@Ld 6{`>XW*1lr>WK#1 RY>ghYEfVŅIMw7ńsΚG Fou'=Y9BPA4 i- "DrEPUsMMҴU$QF.+E)PH`fElg_Nhژy.@LV7g3FJ5YȐL S< D#@~+Tŵ,AR""AEq*,o J9)k7֦y^V K@4()"a\?%!$ A`S% T^gX %!ǝRBB3>㫹eKp3!ڏ)b<朘懌Y(A z CĀ Sp3fxIB=gօ_ṛxR g9̩Md7~Y՘}q˷s_uW4Ɖ 9Xvr3>pfw;#?+ Mg@djtχ1M/+_zޟy[{:1?݂C^qؓ8m?X|>|[t얳,<30isK^}baYћiY@ϝS)P(SaB@qbd_ Um3L9Ѥ:,EXs׳ aRF`^{\T ن'leIWu K9/3#[يR_SɉxM} JܐBp,' h Q|h!bdfʦdJbnj;I6 (߻/ǎ'Oc7s7|_O9/yǿ|7dx?gldN'սOzKNlu] gOgh?;tIbN+b aw>=un|SN$foВUHu<ͪŠڷ 8ެ澰R@h]( HJ* DIX@ȹnn } dVrF\-* Q`))0RRP9@8Gݣ;XQ +e {Cr>j]:RRr_%&7$xVGZG-VS@ j:m:p&1ӞP䓊uםE3#~1dymϿ~KHU0QmU*b/)c$BeIB$ bM.% nDnjPTdICPb*̑4dTLʴ,Y&Ո`:6 UtʨP1j ag`Z"A2 k3hVSB',RJN@U6JI w]HNYd-O*_ܜC-Ki#]]e)& 1yKK T1QX 끍r%@TT$"#1/ !!`L"X`Bj1nPmT@@ 1D5.\O>;~_o7?Myo9^sv߿ȷdeQi#9 aq 4` r9BC:k[%SD(mIǸ"}N怞Zk9EUT=BJ{rc=qZRr hgddtxddxxd= ip\ΌZǽTu`֬YCCCCE#Vz,48~k֭Ǽx@+ЪZmԎ*DĀ@(f_ZQ̂fE))쟄vnz SJM9hŒ2 䚠f8t)QhRVr_RVF4gf~4(8-2QqxB TL Wsc6 OB@BeX>E &6nM9x4+Y̥V) Pmjxxj!%5$k6#*\B>) *xK4~ 1/_CDa~?BҀI`hX4,d\׽N;::2<2<22N48n`Tc^TF݇>_GZ%hwFntzq/?cÕ ?13N48~{ۃL[UՊ!Xt53a@!M:KȎ tU4M\Fiajg5, Sh2hԦS͘lھ:ٷ Ͷ0 O=.,Kmw0X Pe0*R1auUSG n𭐙<͓a5;PUZ 9ޱ0' ك1^gOZ,d M / "CΈXq,{B`xSPןwKH)%|™ߝi)uNwt32::2ҙ$TPљ[CcV>,uw v݊1<&"~YPQ "Z3 s u-f BeԪPDRI'063v_f0B@ p &%$3 ۗE(T,!DUDd)T "cfnvBg|:q]3Ԯ UDda5l3rQ" cUEǀ@'Dn䡪V!Ʌ9Qŭ@"@" DR! eHY+>& r:2rsQSkXܶ+B֩i :ݙmscu~,b] K!({/Ym!9ƼW<)16ʌ7o¯>kfifAD m?VZC$s$V"0IVY}MO(N7SlZ(=5.,znhSY~Y#(EeIL])ϘK1@@B.>ƝTUevK>XD%*9m# Y(30JP]0 E#"tJ.HD YW &gϙe' 1\rӾhė(*g8B!(eaKb} *sLfϝe6WA׹ϱMDTQɸTTHCk yEf~fL{}Կ9t43ǩ-kSJh@_ IDATNfLHB)N'jUpRw: sbPE(IB ޜ͈h%3(R>4C3 M\b "!c6fC0KhI֒%zόOWةz@Dj@D$̅㫪*Tj^A5kn +;Q*#(qRꦷR4PPt,_% d,7@ј)̌.=qf- 0Ċk"*Q*0?Qe~H\0q V9(iOV% oFMY]x*k7xX{+g~ 6Ӻ.)HjR{!g7+\RI4IZ@ C}/7ƁCɒ,W$nf;)Q1H =.FEVb,0|E NJv"Gj(aQ U7@N A$}ٲ#@W:MgS.) % #ZRй*hD(E-2ws'ѤX@Ctkzix3j]U6`) 5]8e@OIpdߜhQ$[o!̦妜=/妛m31Ӟ8IQ #U5]0I^~~& eDlO{iz ʫ 6(*CC5EqREy$9Q^*,UPUג=̳SNۭ[-$dTKbI"E}PNRh#( %y A\]lnV@`C"% D_+HQw|¢И0+*+7Sk"?!! l#UaTLC,+*FABt܇ Z*FXC ? xB*@,* ".ڋH\\`Ee^w4X5i<1CzäP QyZWlȞ2 9b6FP6Ѧ"%) ԜT'I+$gLi3טf$H0("AT(MVCHb;╅Ѱɇ  /q VPMŋ%HRw)mN&3^RU/(%a]E@VQ.$ sFDk״(ˑbqKm@VKIsIsAA@ʄcPQaFT,iDGXbKY0stD9d@dm촛o(B-InBfܿMڿ`PhlA`Q43P4s;;IL1Ӟ`ky(];])7E264^?ƿ<{5s) *TUU`\de@].Uu]'fNRVȖ`lD!m4&NzEv YJTNx\}t)im[N0B߰, yPhG, Z ia I0K+UAr%(Kf]͂ 9X}bkF*nS.ef!* "ԜZ_䱝DK*G5 pADQ{5d,#.&3DO `(VqʮrN]FE Ԛ}L8 IS*c7L, VzaoUZeδY:ެoq1?SEɲL"7L(-!`ph.g~K|HxC47AC2Ǔ_ƹdF6{% ' @%@Ȧڬ ї ~ChҼk&ӽWQ (dNJ2/ sBWU Y٣$8|@1TLעqٖF R2yt4[:AؕY9{יZ9RR{*3^;Un.^I(2kʨP'($=>(@ty9GW 4m$3 Kp4 =?fd]N{9~4rQe{o}bY /LA7ⰷy@ߞ}o]v9ਛzX{Wn^}Ա?*>V>R-,BE|]yĢDE?ba@!s-FrLXP~MMs_mw䃷[-.͟oԹǝY>zkyf ?f5U3em#02V*~\}Elff򞧯1)'dZ-ЭP:kD4dDJEXAd&{)r^XNqK[{#9a7("}f>btIfZ3Vw b=RR_='XNڀv':>0ۡ‰8@;3^%nH܄5v/$% )pXX) :W)2\A ,w]Lc=}І |Oٸ{㫪+ 5%1izĭAlAW'@"SE+!"jUVUZU]URUU+*tGGN$"֛ct:#B0 d 6ϛigDdCDNx~棺q'銋nꋿQ˺*&t6+E#>p܃ ոSuh/wN:_74œ|Kvs_ Uo;Y6FDZÿumt:#+U*BaD!b5ڃP뎎N(HGWweW!(Ūv;˗/_dV>h덌\Uv@+ 8DhB] ̾IĬZNeEnodz3錎v̩{'+uRM*\Sb,fqVоhUUb@B瑊0[PЊ1k(HMAX_CUUU>Bv_<1nvBUUF!qSm:ݺUNYcI,uz rl*3xUeVk`pnR\̩N^6a/h"@Zj\)%lj([J 'N7:v{u?:,5KR Іcbn1*H ~S%Utκ2C;CvXw;ooߊv7n<>R>x3~m;na ު_sgZsݼWΘÓsOl,'9CmߎzUzV>X=p>lH#ݚo<5?4YASzԡr/Lu&'aLz;Wrv>q=̣v8;y[o84kϸzGMzu0j=ZJ'[QN 2Խl^!@<1s2jϷ9rbSJjN6c3+3[EkhNl}DHµ0*&暹RR\ԫ^v:1 3Xt&ASWI55xb)YTM͢QjvS:ݺN)CDN)T'%m fW )B+VJA)E)I5wk%%MM\"^^u=ҩGF;nݫK#h$Zv{jrj3tznݚ;5vN4KÝp7ҭW \=j3<vSǽZtk&uStV Եtu^{۩G;V?+W\zիW^=22 wF;nt!\qI0Bc,jt 7z_v04o~ƇYWt̮:o}s3#\{1Fn?7qQkyIoAX>Uusz (pXL1{FjO\ڻvy;͉:|kig~%o;q{_o~^g?_3<Ѣ8Ap ۭjh-GVBi7r  "H@b 3ұ&F\TS9$Lbe (bh.*lHyg߻nV xŜYq.~vɳ|[] 式O}[?w;~4>׭>7]tߜjۿޑ/׾[{IϸǏ_c6fm2GfWnvz?/z]|+n(w8kEO;MٕlE*Y-Ka`5Z|0@p+F u ZQe[Ի8{" 1#70S;-Br*& *6!ڌ'E|yjYܔ>PSLJ2Io@T*TDZ IHRTD@88MaWgB6D,`W ~, @ q"y#i2HS3'Uhd`Hl}hZ+YD5X( n"nk#Wx)ΏɁ;4t)23OSI {×|o2gyڸ=  ?[zY׏-/VFuZӎp^{K~9nkw&w޻|vM_{·}Ҷnz+azt8lE=ß4W_l`/6tJqjY*7>[6Ǿ]V6z o^s՛O* 8I@ 큿 uҪv":2\d{WT~UYtFB"pUBE)ƒmD(9Bs؊U""*zBu-BD(`lJ*,C S37Qg"< Eq}P![u9ָP3#Yfdp2O$ #"!/\n M;նHXTU4@"bќBId \C~43Q(ڹM؀I W՚Ϝ8 H)~7N`LN.Î8h)Q'O6p3X % Ef[=p2Ujk˂(*='~Ѻ= T{/}36Zo-/?G^>wpº>⤃0i;?N'~~w||e3y6T'=/x퉟Kz}&]>k_?7z >0pzfYC^hC7Mn)lȳYI-f-Hڷ̄~j9JYM|4{K%"Bvtc\ZDh3gVh!qd]QAYsfܲ t22\r9Ml+m0}11$e)q)&@Y@T)Ep]x06?BAPeu[VgI6I"Ya͌P9 3 x܋+- $ DLpL8k5;w~ӽf=p\޻/_vm?ָK޽}ﺯx$C_><5k=|;l`[V ~}G4/yYsMrw% .-?arE;}; ͟?gOgj?>̹siG4vog\Ť7}벧̳{6b Ԥwaҍa`Ǒ{Sik1=1߲GS]0z>xkGZb/޵gZ+cDp[^x^{tm!gWg|5_IZ wƣ[u>pEg9O>﷍M7^?Θd5(1qn)yD!)Bx _kS۫iyab@"H@tE,II$bb (<Ñ&]\TY86ϘJyp+!~ĵս͍IUݨ6#m~`%W+IcS]XAѼhs!KgNf" d,Y{7LUT-,})0~rhV?038XTA 66Ί1YPMؤ2$K2K6#"+aЏXx2OшÁ!w0 IDATH$>ƈH1O5>TrOb)"̚u]j" W=g3߯\q녳=._%qmlY7{ϙ5&U}|~<䩳oqTսsέu0싄M *h7@(hP(i>&.)EgI&.Db4㋚qCq%"f{9souLw3"4Lnݪ{9s?Llz \ l+_}N|zW wo=n}ʑ}E~-,?_//8y'>ͥmxo撻wv+ ӎY;˻p|oKx~Ï_x6Xq$3'm%oM_W/7`طŠ)o0@o/ VExGO8_뇧u=OA^c}2[jw%%af3CT8%Ib^4J1!Qs$)i9K)%w+ZnH̝Tܳ >+%uX)rfIB ®ښhX*ʍjsKj,O.1 ̍$aF4&bq7ro27zzWa+a2S Ҋ5803 P#)uܱ*j$QB @K!SH/ܡZ]j'Nb^Cn7q. gAj&)XtjBt}$8iØYq7œ:Ip(EuXSrwW&&xXY@k]nl_>v3/O:7=a^>s m[x9?vosO럴_{cy?'zk'߽=o{ƥW^ĽzqO>_>#Wϵazw}_yEѓu{rU ;eTWs4A9|X빵,\sK`Z`tD&f1[xvS$K A,fۍBeg"&^,5UȉX7ފ˱4eJ(R"sKpą- E:FV/aŌnVG[`"hT[?Cva8plUG^Igt]R$ -.SJBlVnEff!$ 6a49>UR@VZRJD(t=4 ϖ'b&LgC$q@f,i17g2$\@T/ bQ5 "5cq? QY db SdEݣdV@SU_BWLXR4ߵVA<В-~j1 ps팫fĕ~dm*hZFYT5tдɑ Ru FUKTgj~a A1CLN>T*)%Aa"\)Uju!g.LL`f$47"-1a٩䖷.zOl|ǹϹߣ}#{p^l|?ЍWMuϡ|Y[ۯ}ʽ?g]S?ݗn۴߱sT{{[};ı/?qlϺ=:7vAkÎWi ǿuӏ>=Wϵa>{=Y^g['|S7u>M'oYV/;>vMJOLX6^Wi2Zz^Z`wkKGe3Gq/ j\$|冴#Nx;ą/ֵ[둻[[+25:%<>ƃ}1c|{',7'ژ:۫KO}._ySex|t'c֧g}gCȏ^8'>}+Vc_Ǿ7nӓp?xGm%BV8mU_gRc?U󩵫q^";Wqa߲#n{>c힬xg+OOKG]x6kev;xvkj\ܵӹsH%["JaJBI\E&dJYYHs Dffٔ$^TCU8P&꠨: 5'Bh‵8A9wZa:jcYCbgS& a2;y n'qhv9OY%IXUmt5Wj$"Dh2,,"erI&5zYL]Uk$A!CE3[Q!3ܽvg/X{Ye]c|7|}0W~ 'v_~/Kݘ|B?~hQZqK}.OӉ^>-N{<.?d"=o}gnl?]T;#׵wt}+ޅ7W S% ^iOZoXRc_6fQKl@-d>%! Si)IXqC`஦EԹ],j:pD,A9RTc|$Ez]7N9 h6 5! DjFImd00RQ$1f)s,T%PVngyg%;PX isu+%ueoB* QRJ4B"˜$jvgPE5R2)-QkF`vM+ f )@b)E )JYgUGU`Y|,D<9KoߗV|̼%.h#VRU"LD՜:6FKRR-9HPz8HW*ya/:hP'i%lk]7oW0s03cj1sVט3n g*n"D5;90!wiv3bT v)j Q]&x eDV=$( B!&%Z+C@f9SտE)='"Nf&(nEՔ͎sOI#5M 5Us"k癩܁1QӅDp&\H!k&Jq.߸mxa[/zW; Oxطs>~GvBl\w_WrwO_7o~___L x1soԏyo:d++^򆃎qCه9#}ʵסNůktc\W\צoxʹK\afwaōW}뷹 7Aa| l4Vx}Baqkm-9\'#%Ru;}꺔J)ZJy`麾KJ!Li6jq뜈,-<w)dst6cKUTb$`E10U9]H{7$a}bTFi`RSE CĩO16+ p4LScSq'@J5*@g4[2*E\*~2i%[µ}Ё(*9Vdjv!Q-^*ԋy +C ,'& r,%07Z/@,%9LH̻juY,\ )<2AV$8K.fP] O,~>9)k`őA}+ƙ`W8PXb#;IY*z[ij<[ E<21朽\Z5b!7G05m 3VYcQضUpV*x7* ӹFޤ^WWWZ݉j-R@':ZVX ZaM ?$,{jąXlq7lkKqb y2Qt1 \sH53QL[(]aeQ+5N+E̓WݭhQ$L…Ϝ@KB֌aрPVH&#) a`DJ)V3bMFWN.*Lۅhx`VdNk)uKҹ;^va`q> {qMr}G'~~] Gr=K7A7 ]QJɹft6]\..N7o޲e˖+;/p߾˾ ݀va|)p^udaaaÆdw]J);^顧?eCNW?0|윓S=q^ve'cKt]RDa6f 3s QS&pC(I\/i< ,3QI7A-z)HJ.TCcbQLU 'ܵU PN̔RW ,9D$8.W:LO)Y L6R-O{9:JZ=ؙ8$IjjWSqWsqĘfAe\cPRwuSb00̆T8dXjF)p3R zu]q3)K 1V*P5pD~nQLFiɧ.U7u#Uѭ2GANLBj( |b..H2gaIbl6M0fRG\1tc7s{oz[o76]wpb??OIu]}(T<rΣ w$8 mބDMY{hXEsH5 TnT娦@:mxJ^&ID<U4\*r  Mw ;;]+v@Ң!%i6jqZ^a#BQ%v.@1;¾2sU ,D@4%{jkFAQМ"J74EQV,E;4U*q荾)aH. cUUSs~F!MI='2TJmLnh/Q} M/~Q:ag^so]g6= 7Zܮ}ضlۂ`I?I@¹hь23;YR,\UiJ Rk(J;H {65x]ۏ&-*@Qʅ@j,B'wCJp܌@B5PU&BT)a8qFܡ#_ҍ,b*BZ j X]Ֆ`|Fcdckf5_LLls1%_4 :JGk, 6b7&_yV1ft0ޘ*tNTPZح:XXqC9"j!-ndUSl"R IDAT>`3BrCE8V LK)1BG},sQ8UqR$A*6!R]V".*'.U8SV0W䒄YRG`9碅RINU]lZ%-qJHB)𞥔Rt+$J.*!tŷR0Όb!:kDT%/BҠYjjEC=u)R7nѬRr r!qK4Z1-ZD8 M-8;y99쟼g_>G{eO7Oԣ['fThQ5SSV$ZTp!0Bfs+1.$8M3|VI5Oi1x%pE4~ BBF8G^Mɫ+膰A%? !;L 6̱?՚Am YfGG\A]K) FcD^ߢ~1ZQFr^upZEڭ9D"C+՛YA.L-rj7a$QR#D9ys[I<j-(`sЉ2\1\8! G'4vS^kpa`0ĘxszoV@ D`x`8a%yhpt0#wԥp;# ДRYYgYsܠuE\7!LL"1%Օ͉[̽::;ŴAHp WN!J% ԥIhVuގP]D"МFWxZrE15c,ovE5)EU%s;2kҪ[)$Ba:kQ&:6i9Ž)!`,+0kxD @4J1܅D0Ugoj5*ȔT As%^r9,pé %R(1 eBx[[]5.@@A}$V 7Z<3Y< "R UvRGuw|_tgoIJNɕJ4/.9]AH'a`,q$ K.iNLMjp s@)e6lteqf0٠٬4)Ԭ2ԥ~ 7+"$]J]I( ;;'٧=]f|{a Gež `O߱|En}\=8Bw$Mxj/rǀ]>nh1q?ڊbO"/z݋mn3k߬8w% 6KО ɩﹰa#_7Zwӟ=oy&6xtgi4+Fʗn"'I8oS+ vQHWS'" /xMf9ȌBƚܬT Qc+Xp2 N(j~̡X)V R|ri.E@P3VG54&Ab:eː5el>U܊{qS*4EY $g@# {a*3-E51hQC" w')uWUy:Ar/J)n.ĝ$!&aƤKs. 3\0k)T ޹sNHz枨SX t 32\;Z"v^\T# Pfq@ IgNBꖵZQfaB`E@= w)Bf@EK9%Jv`׮2z{Hu%/؎9z7 m7渹PTSgtIC^!u7EmNdCYbcHbY m(K@EԽ'P'bJ@jZ >%鄅Q@$lfRE'mJ$)%Bi[xh0srPg"-ЇLR-C=YaŇ2B Ԡ&đ2! N𒋢䜻#&'nHV"uaOVYJ]ץ9WMhqwf(,pc 9 9I)|0)DUK9E$u3`VYQ[3 + Awu!kjԃ(M-,,$I*%`?j#5$)dp!`,IX*K%Ng"idg K 6Hxw}߿_x7s~x/[oq)g_}رnޗƱ1{Nypſ0cSwg_/Y~g}N?y.;I?ۛ73GwXkbOo{n}_|v^8np=&ڣ7K[]#w/;AwzYO}ʙW^Yv;gc5_?"->/'.g]& h\S&2Qu"53ӐHpWWsu6BZn! w Q%~a纨ntသ-!CWu'jr!!+L7S-3S(Vv]$hE`N,馩KIe%D(Y$MRꒈJ.9Ic1(YP}[mZA+]fVx-Ϟp"h!%jfHb0 z΢BBXx ɹ5CthM1b)몁 ЁD$ 3tfjI$"RREغ/!eUU0E G`fDDs2,uQRܻRB XB] GDDl<]>\$EDK<>u]5߈idxuI9gY*R-O9;EeNXNlnH?Գߙv2pߝ}}bRsr;>=?]q޿Ov8g.w;VO)̓8/{7={>_V;渤_Q7a~nߓoG={:Q2am.]qVwi^]l| ߳,W<ˎvųv{_q;ݿu{o}]FH;Edn2R꺮!f3jư4{hFJUgf#hbGX<@|XD[)ǚīxho5qPw]¦n/\%@yuy .401qc0"z0fXJieP`R\TO}Gfjv}EUЈn{(p'aJLP!©f&U_TL5W" qZ l[&DIB Pi2% 26-ì 5il 7pVOl++[u1NK~o?W>?~6nmnBuKͿ+7o=`ac ^({Ǿwwį)Y8npTӻmQ+e?oٸ˾U~g}]7}p}rMI< \k rwC䶞+C4c ;ȰT9 K Z9% "-R$ce8CC(dAQ ϼWBLY9(ES3,obc ! t8p5:HabT3u"Gh&T3وU$*j] 98-IUռ줙01Z2zVLВ0(-9V`(fNVfUؼG/ S,ӰwY(83'f+%{>5boZU5R7jH;9%ILEȭzܰJHyJC9Qb D8 ka~Z1rsqC FŋCv y|埻ਜ਼w'}y}'^~u=m{Sw׽?_>g}yÏ&6.\'uo=};/o8I{Lμ/>v?mظGo׼ێ}q1|tg{ۮx6zm>ȳ~Wgæ X]nMF:7Su%mT&|TU7sYhr47;j?Pz]xyT#+q_3iGZIU,dLbͱim7hB\[Ap ;x{(-@]G͒DbYmc6)jFIF合ZkjZJB푖^!v Ht.yV̔mlZ*,DLY(A-ncQÃ]-Y*MM-PKՑJu (QiB̞ru`2cI EMk +%>)]c vUGx k,ƼBjR~n2?7-`p4f#U-eQP=$â&n;OB ]6ԧ|~n3v2YRxFz G'nZ ճVJK vGDLl~\J44T:- ,զFxq\ 7Db`ݨ?PGkU,LLZ2PNsnTZpL" K7`i.8T/jLԲ@fsx!1bffv#rffIh H q`ɞG?kJv3p jN(p\Ȫ]֤ `4jZ}58z~W}O=WTywxMsK^SKm9c{߹f#}xc{օ) /?z^E _{~pnk>~>x9yg~.o|S7u>M'׽Xqn3.]Yv+}r~G8oO=jֹ*?GEͶu֭D,Q]B9sT{ԥjsbKP0"& Ǽ^ꝑ=!3`8`(\V jX@:&LЂKB><@4XB.bGkLӭzS5.nJN[1Jtâ!QZ1榪#a(72ȎH]$ĈA1z]VPaU$O*򅖠-[)&(҄2`rʐJ&v'k(ԸGߚqݚ `0 A!Րŵs77YMĻ=h~~Z)%WGplټyq-W;kp.k6ﶰaaÆpLOO_qo77Kɤdn~}wuZM$Q25Sբj$:2jEf\P&Ix\D-bL{gg &\t>%ahdL>I}&zbm W6i)*wMMMFQf ~ Eq^R=GKQZWBFCH!vl`pE%Q3D\DFP^wW5憔Pnqi7S#)(U@ t6$)F>ymn IDATb5U3wO,UC:U+k`RB@fDdGkP:Y/TI/4w.$L,iTQցNR(rd-c\D[ZeSÃB$fVUk&Di]HY"&0(DS|E׮S{  첂.lYyHm\')19)u]bfs65*1M&`nn2+ ⢖Kà2 \`]ɤ[X4tss7ffΦD^XJ ﻗ͛7`h"$TR0 :ZLsRF)h Īګc5͌$x \]~,ҕ0 T+ Pbcg\"fRٖudL$']epw餲K4 v#weh PX$^bafaJ٪X P̴< 鴋9G6NK,=Ϛ{2Q]שiOa,]?'J.: 20U4%:TGƇC%4JR}jܔXDb"QZ,Fa I !b%tma>R'in&"0gan=+'goY_gcU-kru0sJ) ,TB+ͦ]0"V8&ԿAdNCd HĐ@Kxq#,"١I侉ثjEa@T0P=PQK! :M$a"`Q'oKk]U5J uɪp#UȈ!bE)[<:a27-X]fda[s-5}͹bYDRm]\ d mVp-QP Ʀ3U*a iBjp xnZPRBj*-\JvM~#c=&8Z"h"5ܴhNg5د O"k$n99[Jdnn~!{2tIpJ`< ;xHnEK.>1.uBsTsQͮńS`5 ffnf82A! ΎIy=jx }u Rᔤ QrժW*g<@`1ZSIWCϙUZGY̊;ޛvUc̹>Uu!ЅNQ1N"ƒhBC?!J |BS:k9.uPkUZi\. ޓ^@i[LK)bg{ԣtH[ Ɇ+s&\xT]Ah)fhSWf[%;Y:PEEU!=! ϶yo+걾6XEHeBÛ- \ξFaTYy+' stCBȎc\CC *">; $usHjYtw¬, Q$K={k)ZJ[SsgȌrI2kxc̞_LeH26+dKn"Hs@bRЗAޤi(v!fNj$ fDrv,VV֦ԬK GhrP PFYA2P+,p:cfD̅ P׏b:8`g=EOM)y㳟t,nO/j ozǻ=K9zW6}x^w'?^3'ȋ.Q?/_b>C^_ؑT6bā˸<ZXn/r7r{ od%x$JTBjBPYURT4 )m\zXRI0R!0^sZO)3\gtgkd6 Rt0g BUX )f/Ud(!*: a_stNt2ڸ4%l4?B)$!TSe!R=cv3krK~y L G3,43rB2ߵfBEN-DHmtwj0OnBGGh62W0\[2(.5&-:Rzk$'B@]:q  Ehm,H,B[d*nf=c=c=N}ýw̾̾|7p∔T8@:dSD%nӈyjRC_ttTJReU=,B{LIZ02z4AsL`/XE2ȔxMHyҬ|΀M`oiDD4ea])09?ICMg~M \ؼ NW ;HABS2i EBf'K)=  P26r2(PfJ NbI7Af1R0;P\>v"xՃ]BLDa\+nJM9 3 P[]×f̧_qxߞ̧p/p]3Ͽ`{k߃nqʂO|}K|c_[ߕ>}i\8g/6//u (mv!_ΆUՓȯ s_.qXVV.*ԭe<;r)eEuQbcbq\""dQ0f $BZ-%/JHk-3 R"|@(""lx&IJł^ndE\Yn1M 93_iRK'ju['.8كb[z`0K ͚s t˧hD0Sj-BBlg{*Ng췈JVA!qk+ptwʌˬ] FxP (EHҬ; Z$h-ק`cƭwtd-5/E$'_:*EfWN vy.Z{?'Di=c=`,D7|nBRŒ LAݢ 깉MΊ*%@#3D8Z YMzu`4"*u83@z#SKi`P ة%J 5(jՙ ;st6m4:. qA "!a! OSE}uWkd@998yHtG.R Uo~eeG#qeo#uy 8J/'$f,;ۅR i+X]Keu)KJsSY4zTO_PǸő7o>M/ߞz"8瞷}_Ӳ?_s!>^Ɨ{_wo'? o>}W|)O寿?z [/l{g;8!7p6~-}_:y w{oI7?䖫-$=׻ϾWx6]G8};oO|gqs~jy,|ݿgǟ|ǻ~; ď~xwȗQ@^<u6yi _;5C!#${ٳ.pT׎Fk&Ƕ'wEg%zB*1 `Q)EjI]moo+ZZB%EE~RU!{:*=X9: ny"I¨5ٴ\j-9AhtTt8j)&<"px$\5@SID@\;/]'l:=᠈SWDm KBZ͔wD%"Z % bw&Zd疒'.[JU 53ˠVsD2}䄜Bә. @Uf(Ll UD%N%A$k (#2ǑKȢ[։]x7n07kMKI.ڻf*yz&P lVVpzz\QjQ)R*vRG1"(q^$}BYH F{Hzݑ\H͹rddIgD\X2z$"_ q\go 鼋I܋UG:.ݸՙ{;.{S7]O\o)+JF_o[rc&'w0^#~Gz>ýC^WG,k`<ܛ[ӳ;`7!R4ibհ)1Ԛ@c4#\ ):MSDz/qgpDzMƙ;/z[|Z~#]!poՑ/ˣݧkuiE#|,VG|y}#]o 3?PpfGN]f{6C!SiYZ!DbJI';]73Blma1c,}M% qo'.[I(Wng3,lqǦ"R 2 bYLSkdD`QrN,EY95IDr.7[\tޜq7W1u  !p hsoyB%4(ئypBNj-nᮚKY 7rf5cX;zLH %eܽI6%־ԲKT, 6뇡0`SjaXV̛YìkUр%5mwH[ZKKvI.BO:2xтԵPdxHY\}jLS_kmݸqrZ:pRJѡT3<)ϯre(L;)fw!̣熶C*`xK֬gGdKhg*D;!J8s,{  YI5Y}hAq~Rt8/U0|]~|y|O9]a['[pG8z7oϰ^rX_zGħpoOP nOxѯ>'}Sot>~5AW_}( |jBLRsUnFZ|ӈi ]"DR iehY0LF/$1LPJd ak^UU#b}ME/kHEOq\Nf؋j],8.JYPp6q ɐTZJ:Q)L_j`HFO %#ͧ+"PBQ1~kmq{lWJq3k摩Z3PRe) ssezŒ, gPBLv (d6*WkLhd[-ZftFt4xӣg[skSٟ FHr67hj-v\0kɥ@"@QDHK)A(Bu$BxD7‘2C)-׵zXn($uR:4կL!("4Mދ|PB*@,Rsg3U57ELxOțiy̚HjGqv&kz݁ B#"bċdM~TQ2\X$%dW=g.EGEDCwl dRS"R"G^ Yl,LSZv[yQo}߮~έo9q=q7⏜sM/6.9ㅿ{.ývY̛y#3΋u֣xu_|^oO$>O,=a}=wv,u_qѭp_?ٻ7G>C>~w۟~[v^.~G=C౼#_WT~VY]Z_=%=c>I99=겏_G>Q+_iB_bc!OD,iT0=bWHl esjf6 UKf"&ɖӶq*"C->E)TRTMu IDATijr'o)ZJx2ŊGZQ)*+Xif]+,P3\$FK"Rg\<RT%$ "}LgJMӴ\nֲ(Xx!ݠ[ }R̋#mj M 74tk ZʍX(Hτ@2;2lEAgp,$Y]byRK[ݛArVқ'*3.BQYUnٿ@B0">9#haȈ{QaqrDn")UU@T5@Lnm" VLfpzz\!:T)XK7HE%OSRcd灙P>OoP-uXtA@UmH2-t37UHzT DJvˌPiH0wh_hJtdCU2+sL-»XJE#ƞ"=#;u懄P0}>ʌ咾B: {τ+FJVA3tDOF{3V4.cfŠ; YNhc.nH0! `‘fNXʑwK5ѪǕf%˱HL'P _%`d-9-o7t3cӶʱ<룯O>ꌼqwg߿q"|G>o([>C#q+?Nn yg]~_&O>o~okG8or\'~;[6јYK6ffhӍü۳I!O":P\z= !) Zk"E(ֲn>.4M3FI0"DdQk=Z.YUxP$KC6[7}D |jMSֱ" nk5%; j&!Gxn̳=ٳX9IY$G. )AG-E"-=%6DIUmXX2 tճ/#Qjo+LP2R͸14öj-+uaE+RD,T$!׀R$݅Bљ B3kD:3PPB<3O,$:0k}:;hIH9Mr9ݐj.T9 U;0$^=QL0 <$E fsQ *\}6$GtzkgxU[>,k#}!# $pEϪVf *:'chvqSPҕ*3\GfKd~L.!n6&s%Y@BF5w7N;{c{>}KO?>ר?ވ׼aU_Kȯْr^n߿޽O >Ow=q c{-}՝#=o/ρ)eO!ԀZsD*k w JWTȬY]D+Gܲ5;APvJ"},Y[JQd̽AB )U LDZ |[߃J&ء!}OO "2Ncj-*K8yF4:Zr%x]Od9u7߆帴wݍijsbƱ%>O_~=&7>/[oݭ>OQ)8m/[~o>x/CW||==;wϏŏ=7G u{HlCuSsHx,"*(ukAX5B$&9iSd4/EZs,v fS* K-e@ꆔ>DК󔘇:,i}f= DE5M֧SL(•4s"nXᩲKJ"H 7tD#M>ID`$4 6|v'yk2E{noeKsÚYj2U4Yɴ-ԦZü$@ S-<}=NhyԺC2U8 s+h84TYFckYGKWq30$LE\u;ZKuIz}c=c=b(RK\EdMf P`94K$Lͳf3:-*B(!.R vgghW>ȭsiD̲:oSEEe1}EOHF#"ԢT?@#Z %HqDc|WgD>)b\wվϗ=TFۄRUfDŽ O閥~\gg$xSOI'+-RBeEsqQ6*=G2Ovfp ׀"#pMЈ&\Rg0:=?<s_Ǘj 20K~_?cg>ᨏl=!o8SX]nw7!Gן~!>{xMot] *fZjRe|K)R( J6kZ+4 6!WЙp G(e kp#Z*TԮ'Ba&OChQ-dHrb!tPhXH-C-n03>1_i&C$wϞdY- {5*(2; YͰ8}Rx imbg&4!lNE&Y$ZT|6GOGEAzl4wW*% JH5NJV.OuA/R֤'CAʬɃjASkY3YId wJZkbDp`f^(W!^[ETƱ WwLP‘PQj%fݗ@(VUWp i渴btecK .f+,i!QvHxki\tQn~sI?\D璤A ;-`WsZ`{9=E:{|iBFE B&rG[3N$-̼HIҮHJYx%U峳.|0&s{W0SSV^8* R[`. kp"H9a0hRTt@97Ф,ܐ8LیXcW@HK_0 /={/lw>=xqӞ~zn'W3>n%ܧ/1/{o{{_c'y!yEN8y|zyǓ; ׎ofl`ja8A"{Ԉ֢JRD0 4Z@h=,CkmBpb1-*EDk JRJ "PJ5kI pD)+0BUP1MD\x7KAiO͘1)% HзÛ%'M a0#3UDUk2;EcYBq& N㴽Z7qCDVɞhcpU$v+v憄@w:U OԡsP*"$B!iL@)YA烴57QRStzYk2ZJ4NvY7ɬE mdxH?;Z,ijW[XXcn*hj<$"/$Q\U9u&C4R7"hǡGUxX ̽yP*٭ YdPidGs#mà9`qW+{F4OgE>Ĭ{LJ@+]C)1o|pojH9==J)Mq2fkj7D$"MZ(͇7wHERD.̦p3 Paz¼c?],u4lbs"Y|=Hʼ)@`^AGnF09+_۴1-7bX hVD֪Ðl na 43kS,RJ"aOMn.2s#` RNÝ%P04qq4nPҚy` E3Q$A):+""R*lo_.܉9qkkO)DTHq"P事L|{,RUFF"BmjTw37kgƐ{YIxk&5fpek -R6zf9PPROz UY4]性TrR)GEkmHYC;XD`zm*HvmT26+Y'Sja5*w{'{h ֚KoWEk2֑a0d% ,Uo+ݮWТu=u 7zDsED"5 }ҸP.T533;# YRҷ)▌awCYp)PH ѦR02f^!Ss .ww&[(7$m)D=9&!-bDg"qѧ^iu;b߳U; 3u@3#1YcQQI hjif."ukt]5EyIa z\?~ҁ( }( z5=Znk`zuYV S!A]E2:BɛfFs2aJ&oYo=(Ɇjx(6ML$JтNJZ( QZCkQG([iZn'bccSJZkp r"r2V{xkZkRif摦SjxX$Si{ ٓTB B{W=F6!ѦRkf2<ΰ^.@@Ze}HfB а֡~T ht`yP2w8y/Is?k>˱զ[c=+ sP %8o=WzoC EZ#2%N,թtLCp0T."Zpt@W+h$礇L:E3 V=#<erޗKRUVuYE`"n.A"5;b- 55*jPb4Db$bqI\"n {Us~[=̛71]=9C ]͊:*iơe` :Mb7.)R5e$:ݔ**@*ʚM:1P6 e# =dP`^rbmFG֏*MJVo?>u?}ಏ=>s'}'?HϽO>^[gv៸bi_}o=@f߸ۿ(N{qιwǟ:}[i=Ox:ܗ>Fkv>tM8.n';>3Qǚmt줖='vn6Cv/X*pĎl{_{.[{f[&3ݖ9۶Ovi[u9W+ 0FB`)J-fVL㉺*j(ŊӢ%.k 9k)hZ]X.^QM̥p%b2IcA+eHhՒaq Տ Es.q\+%lLVȝ 1!7$ԤƐ.nĔ4FR$QJ .LII6854iXЈ)Bii$%nASQFmi6VDmQ$)w|;I#P F`tr`@CH10@kU@1wGz42$@"(BLfj:Hj,1ϦY7W>Lp)a#\\:݋Yhx Y໒BiUÆfig_߼;+Ϟw;G^W|ʝ/ޟˇy}r&L:,$pfudծ \=%nf&" DT+黱0V l ZGffFLF*L"9lhKՠ&h02s-sӈJ@᫸:f(dw?_ZҴYM&h L+TAU͹w.3WP?>>w]Q Ό7'δ(Jo4W=횻+tݛ1޵:٬;~K/CyC9.9׶إ/hH4kg0(Q;R[V&cP=o򱶤줖='vnrPc~k=7+u=~{_uC+'hÿ|N4Ԗn'Vm6ƿ]|;?2Y]XX0 mYHZfqB5$BԧMUIXԘy;B#=@fBut1l:fyDA"&D͘.!!X8D"b+3p,"Vna6ڶDSG5IMׅCʡBUBBUMU,Ŵ8 r;:k@U,Ms^1D.5\܂ .B#ÒLSjQS 3IH QN0̈ .!Z)D`U U82Bȅ$(W iJEw܃YL|@u{Xx(n r {Ja3n |A0$yL M͐W'{Y+g5U3P5SEZ/y硿6Η۾w8o}wG;_g.4;mqC7F׿O99;lJ'?o|+[F7ykE_i3ݐ Bq . 7~ &6)12DM@!,Ua)bb HK67+JDRD($HK)%kɪn` ƈhf`a8@s3C2c+Z $$XBL] !|va,w+ D, HY, %$ %t%w^k=6fEX ID@*u!&$cGeVCNaN4U-U8b"pK Tٔꯆ1ys9YDضILK`Ĉu_L@Q:(DDʤ(Ad ! "GSs3)H5 xG`KqkBvPT9:wZT0 -;lɪ Ff||u.;)Gw|ctѹ9;7n/?h/xS-O=w~׽O|3-un۝wc}Nϻa'"ڵ7]OԲdέ_zSGU8)xl?xso{ة;韼|]wO\v +_5٭Nml!3^BF@K:s࿂f(A2 U 8d. z20"r.4 N"Ұ, C<#Pt`$gt&*wجDܮ՗65kR%@JnE V VJHKGzR! EKA B!4+)'obg=75nAJ)UK!:EeFa6GB`vaF`0 #1ZA$sgTU8 UZKe0A5`4 "ʹhd}.T@Ե(:l֋^g=澏w{?9j7~tk}.>e΍Ik'<7w{陵@r+}e_W9oϼ=;^=v/zz'ua_Vnm'ۮfzI-{Nj[v;q}O w~p<{g{UYq<_o?:e]+^5٭Nm\KE9r1)YpD2\(TYtı:Bd0VT;# 3H†$u)뻜kja\Y" !#*ݜ ~ C1 # 3jZ><`ad  IL\=:o?x}?;Y{Q'ruXq͝|[W]v}cv[ŸV_g<[޿T IDATהeնWm2:}6~豏4>cv=);z?ryaw_~b zY>G;lgy^ ݏ#p<1Uo=q惌+g|5ڝq?螷ois~o nixW+ߖ[@v+ MN~['pE<+|fo}+~m9+~o}9? oQ7qC56FmJefȩmkHl ]f,y 0]H@K~ɥ"7G>6f,H(H s4r*V4H4g"k6 < /57pfatpP䄕*N8n6¬Ӝ zti[fm3NMDOQЊ'|#3E)ൄnN}+XIsqUTm(hC WPmJu!IW! BHp/Xb/YաOI#L`%$)Z{]߇>2U6wԈe P3q# M-g5Uw 'РW3Wt$X8jScFD$I^Xrdُ>[d ɝ%g[?Ͼ?mmlSCe7vE}ư>7-se'9YsXv]N|B?jܦߴ~+Ww8odVj%ZۦZG7+}7$95 a5TjO_=KvSWm&1@ )# `#&6s EtcER]A!(85tqE'et75ܣ_3?xx|t_}t#{}- i%/:u/~~>&ow=fp1K(SI@M.{?z~og7[CfakFEuW|>~᜕ţ}^x+.r߾8عmcdʖ _Scw}#xwYׯex 7jt~K:c nixW[-WO^g[ݮo}-MgCCg^pѥ_yGOxspo}su/z ?c.R$Ksm5Ap}a~})mٓPjIԴMj"vaiL޺~j ,TaE ! !:%X̐ iԦQیi0>Ge`/g/_FP^K' :7-65w,CU@!xB$*U#yw@d H@ڊ+K xm& 8Kbl&$df܀Jez;@1C5/^ 9q !"1 sN4q@8FHHM3v4YYͺ<B_<DĄ"ŌQHHpӌW'M+$X”Xirʹkԙ%*3[.Zf]N4ި[Ż mkն9=_V6 ì S"`觳D$ fE-rLlf nᑑ$HYɈ(L)!W#$+kєQQ符JNK`%9㠽`ӟ r!Լ@A$DR9#UkDt$@2@(5[J- :yJfHU=āЄЄ2hHḪڗ s1*N #!E9k%oU+@DxXJVw$!1@HG\31a@Wo@jZԁ VCwB6H@敘pAК0vwsu*2׀ W!bsf6./W#[~:N;ڽvwgw|ԓe.{OO=vρGM?{o/>EГrK~2}{18.Wf0ͧ+ +Ppwo.pֵ^+YTsDZmu^yS~?ik>MNy7>[ƃCvۋķve;}̍f:?в𖽯V-:OrO_O8tu[0|Q'y֛.zv~3g 87j*l.pHasJ>gЌZh܎"[H׭mť~qRIM3jdF@uծ/_?[f0n%Bղ}?J$ʦMRBQ1s_3N$",bM;TD50s2$C´ ڦAUXάkYK/=34pUf&I)`}1t%tBpR  .ML3MF!bUBά 2 (" K-[HŒ!DX @ʂJ^jƂ@B,9Ҵ̜$-RȗZ)E!`ߗkP&33 \̑$54$swqrd'%M+\-;轣aхR#D74}4u%%"$a8u%V4jfj/m]׉hvLm35)J) Z#",YCǒK)mE BFM=ܛ56$ϖnt``b$܋*50咦]E f\g'aI`fYDԌX՝ 4tb`@_ lvBwɼ jZ T̡r1c*:1 TVQqjhHTi&G^ c MEklk0VbW̡Ͻj33B"'7c$i5IrE P = )F:Rj"9 ؋Y]@b`D]pH)aqܪm BvWΈ/Wfm`!dkCv'ٖCl Qk&;>76_N|fhl[69|vM[o+k^yF2`_9p-eAGǟ_o7.gxS~>-tm>- oUޖ̏;~ȅut@[Jw]6߁y=Է]?;G7iz#FߘүG~_[p7l&% 0噩 9Ch:hJKJ kƩi~q:ΦKAsuApCV$RT|aff4[sV `ZS}_D4M+T;Q1""P̴(2\Lü\D@ _?f/Fۭm%-HJ0dOJ׻VL aԶMRi.#yݦ IV/sju O~`n`NBTp*ZT5qt"&F$uK^{tiZm4mFi[I;̺BETӀyq/%$II}ߛ 'wpB&nHH @H7~L-ؿ Ĉ + ҦFF ͬdvhiKAj[mmݨ6M}m["h&1a,fsut}.jnގ[pЬIҐyץaiy$>wӥY=f$,)“j[rw9RcR7W($kFqt9w}b^AVE$ ?FY9`}^:Dm@[TI-۽ZH`Te"!젪I"VԔh3fHLL,T!rDɐUKH}'54ҋ3&5,B^-OP̈́hnXqq5!S,ӌ^A$%JNAMr00&$DG |U4@ 65 @f'W/9A:"^U`-j8)8PkV~lܹO9m;i<DZCw~o9Ay#|û>~=64=bіs?t6_cs=xv:n9̛f,PO^m˼poy?M~՗/<}3a~,‘{w\xжO|3]v2u0pj{Nd~k7~S=~V=!wu{=G[39UГ#Y$6< ;?_?.W|CN'~M3"!-z3i# '!L(M}7K9!f-:XDR;sJC@(D9!M&]?!*b_pVJ/Ly]BUS#h05`,Lش0W%V@C-wiJ)n]ZT`jŸ%WpB`j}R Qf SX0 f4]Cwd Lմ>;V-+6i920njH@f@) TYBHN<&bfM MX)"IM`d4Y?UbF  m+IURJhVU76ЮGfj5Im j"QXC&:8I`H8dD,$ԎR > M2pBL8Bߛ>lK{N}ȳ.-rQ"۸նV&̭ϳũmHJ(!i45c/g?vViyI˞|sN>+mv;ỏvH/^չ,Cv_v=nķ:e'-[Q{7vV0nK=k{\ L?Ko|cϺuA[z>xV~C߯S&^ `<Mkmy˨i4jR"qSﹻi񢙀hi"$ɀial%cQ`BK&&tʒ 4jɹ#."T43C7aҢᶎƣˆ\|͙T ̐YRfDtWr$qO]V)b:eS3woGd܎f2Dcj$U])y !:Sd|zuľT n#Q #2$R+J8dv"G sf@ HlF̒!ZH*F"A3[Z]%;%NUTMKjqӒ;0'Lm}.]O)M#rfZQM @x.}mJ-]e׽ <|}t='vLq6 #88:2x{-訹#sTUrQpgprEA7¨itM͕Qﻒi9( ^Kas&%"F`'&WRJ7^MI S0Ph$ *9眛/ cb'6$rCD`T$7s+OF'1#i)%W aŪ2(iBfn#7W2ϯR;8z5h/x۶DȌRas): DJ{x˲wZ{Sy4hFň׏PQEpȍ<>DĨ<[s&UZhꜳZsc}P3|:{\9Yn6zjȂDu*"Z(IRHHH ąq(7 ԭ ,z0#K DmUU5̄JNo'A@)  m }p ŒLj}@sO'_ IDAT0 D8@J$ x[fn#f`Z Z3V3N1˸@γ@5R0%D w>6K)K6<1,pax֤e7Uw`$qM; )2tbVᖴB f)'ު77ԣ6M6MSS5D٧miȆS~%/כn]K_n-uͽמ''p7i[kQ3 sCP@jubEE7n|CÓ~(ys_|7~ʼn|_ʵùvg;ǯع׶L7Or{G]܁]wɍ=յ_?snnrIto#<2} pu=_Kv=|ZK]­KQ:һ;Yp @*"X%eMkٽ0jY:{ΉjZeb[չIMZ5}iZ&"bAÀR{ѩYV 00.(cBȌ\hR{}tˎ4HW/A{ y53Hp:WZM`]0P:"{X5mjݰ:AaG.;zmZgmMMsu=nС9qmH)eXŸ(5Ӧ:ӴLs՚v4MKLNh(8,2 S[3*S5j9w:|]֑Y%*oxC~ڧ=Qs?;ůy?vO[o|~s/ fsf2;;y1 $2f3v]H\8HmQD9r2PhVUSPh:*# aubV G"e`K8!a(Aơ~MN^z?Mj"9I2rwqb92EXV'V;'O,wĨV뼞sn?smvͷ[>tgno r%iXskj s3pT U7H;",4@"70#4*D PF$ Ca@pw0L4uUϠ.q͗8;sH* EP,!(S -i2IAWMq<便񌷽/7?^݁.u'<Mg~'pq/KG=UvKpKy;{h|Ӏ?W߾ͷyoZܡn?|sWn)zSUBf&2rhju냃sgn6=:yrb*e@fe Դ>yi3Ӥu΀j뼙7yԚ&`AE`<LΓfj2#P8h:\Von5 "zPTs2S#+(-4( 9z4u5CCD5@ Z+Qk9qC!DYEϱg;R=ѿiʅY R "Y1xHA45Z5ڕHe *p $5 fJ sdgY.y_潰լV B(Č )I!)Ăn꛳˕<O8~`{NSti7iYln~]rlo;8Zvvj\,8^CYeNFewww*,"uژRYXFڢ;7;{p)e5 rXbjՂ2:D۬V".j5w#aajǁqhMӔőO-2$W"  (! OM-gKDH@LE"f)i?XzH),e $ @U4m̔CEd[1")2Hɓ|0mkL0%G}g=ߘo8q[{'h̝ >\_noyǟ|տoVy7^.y<<}Iy}?ora_8gQ]%䥼xGK\򽗻)ם?[}S~So}hxK^?]7"-bơ&aO#\)-BIDgr prփ Dh@4p@ϒʀԭSҵdba!Dp'pt $F mCx)%1@o`) 0U*qoE#g "y޸p5{#&F*9e`1pgڂ٥uf^AX1,Y !U[Swc&NnJ9"b }eNH=D"!d@7tS47wLعVw53jjMቒ%j8]?EgU;=Gop1o_a2;~~W+eoG^nvs3G1%v057|?ϽOտnu=00@GxD]r\/Q=q_\%ܥܑ.<ޏr+?ߣ_uջݵ'TtBDs5fZ,Y8'YiyHX Rd<nn1f7mҎdKO[b@dn )@$fJN|~ZDTOPB9ܣNN1+ 0Aaf>Ly@$a$f8"E9Fy^T5K) Z 1ψ ȘIO(FDh@ o푫qgE8 x>u=+q' ^pw]FBToSW1pF.LXNz&UbsPA fMqFiJ@NL$"eX-kQ rn(,~[½.! -tjHbaήiU@eX *! IB}(økEZB8 90T7]/Y`iDr t@f| pS7wMzZ/ʀ`` @0s3׼AHa}\ fA=VME"@(暕f*# EfsWe6uU%RB Dԕd!2wP"EyY#Va:2w d wD&;fٷD":iI]=r[ŗ']mO|S׾_| ;zoWɃ?o%Ϸ<;1_ym<n7\|5yI޾gɏy}No#SzgrD^.yۓWxz駿?ti>^O}/{rգ w.y)/џ {a{ȳ>7Wgwۯ?nwFLژiH=l#CZ; 9 s!2s0oҲ hMF,6ֳ1 b`^K`鹃LIS=iDPEcLiaرf>OTSh2 @[%\#eDíz_#SՐQF :r@R:FVB"Smj/-9S@.- E2ꖌ@Ŗr.j 3s Cm{4rOmbA$si>w9 " e+"(.ZCtv(` [H$#SÑnۉi(z#snjT6h(T(n0U}U͑"E ǁ!=^ $"&F;cBIHxl."8.2nQ033o/]D"#/i 󼩵UmZ7s溙?08hiygUM_wWݿ pMϿx‹N{kٻvܮ]񧥰 2 2! bd:`]bxa0o@ik:OfRIĦ|"2S)[kvoMU52oj^1 08=3@aG)O9"M  '89@3ߪup@5D%ȔS\ 8dU;, xPR6[0S $+3&L0f&:yBY֚6H RDyvE[YD>̠fȠ@ ewIe@ӖGM{0{wFi/& w0w,aT3YH] sjAսBKBSϯ;AOxِ}t9nTCFfZ7ø.e=mqԩvVjZ.2*E'D?37,,PX- IDAT$Z y3faN䎡4Y[EA"@wWf=H9$D4 E!`{HoDG{c9 8s(C! lnE:R[W4n~Ps γ$GXjPB1~ro:Yrvϳ0ksFC!#0%n"8b00/<2eڔy4Z!@,Dݱ HI2AL9ME!D` TJ^ip@pLbס5$ 3{GI4!J!2':)@J 8YhӰ]SfVժ??,qל47{E7Ru嗎ovOkunJ X `zl CW1),D(<Եn4M0,0 RK0Z4.NDD:kDJA;@VJ12*p:Y;3m FxYx@tpêAD9,oH,&d9sxdH/9V>ʞB.v3׀ L69$D T6vw4jpI_]?ɍ!ж0pof"YjwQ$jikA,\ QA5,!3 d0B֦UMçysLY,L,E4 Ǭ|81DdfF$BdF^y1mn*YBhs![2sjL,faFbS_o4MZ[rj\8 "Av{zbZ1i'FqW7rۉ{A;'1Tmo}f20M:j9e(F.Dq Z J60 -s-|۴"dNd)HLI'BfbZ82 UkxD60y"EIXJf()~AתYKA@nެHZJ҇OXR aS=,ZA 9,|h<~  2"u1Js+$pp DaYi!EBR$ BMmNh@ A5 $"eȌilt`"B!Ka7[kꁤFb\QU-ņC$+lVkNhr3W #iQRJ½ `$b6xw`&. D,TXޡ_,ZIl*8Kt` Ö֫"=,[$swgoקu0cVY+Be*kHg0gN0pPfJX$ !nC{\KN@B &}S$d-'U4G"2b"fr ښ%8!aiґkfJHmbx [t A$Sݬ+I!":8x"zN,W`@`I 33vFudFbEPE4m57!fN|lgHkj&lD-wPF32liЉjYBV>UQ  NH`f4}oVj7.Rt Ή2S QG}K^H||~߹27%/\ÖxWޏ8oni^G}gj>.8+kUo?1,3w+^qkQ?~c#qYlr<^y{n?~?_5OO߈v~-q÷^Y\[-k^8@.-?v (.3_?PMWey݇D ` ."Ffj5m~n^[X`.@S*E) gpt~Gn}sCkN 4sKTwTG@ ^#:qj,ɈDHs,^0L/H"b."9iaqYo=` (> ؍Q , آ-"*?`^ M,DQPC FchDEPS^Os2w ֻ>33^|L۶$BFnS[@JRpD'B'421`1"4d<қ,FE L:qC#t C:A$" J1>rfя7B6?dҐ(DL\1IP9RdN'ń*Īshzj o| ??v7~ٛ~Oz}yg~v~3촏jo扏>c\z?zŇ|ƽv|^og?l/{ OǑG}&K}?yw+_O9{|pz\ŶeSxi؜~;?w^>y}Zgqn;;?۞Տeg [Wdy߃&~_;&{/_{m[⻅2K]h>Z\FW~z?[w27\Yۘ+7c;81zN huV XfT<nwC"47!9+b@- z;G5WU7#pB0?$@33JhG3p@7U7~Rs@` cuE:y#Μ´|"\ "҄L[ &܀ ]vsEu:KGԔĜSLu^zW7fT.9и As8f@DUUԂq`EH#5̜[1ú(ZCdPP@7*a8kDH&0D$"5xBNzvDDKYbK[ϧŻ/{k^W/9.uiG=wZ7|]{?讻% |?2mq#}o?p 'ձƺw?yOჟt.yx"W.'oTvΥ4;?Q瞷o{>,]!qp~/~aAf·aڭpzî|8gpՃ}k3x+^q$hɺl}q ߾S|gnCtw۪…yۺۺ%r7K^*ȳwefׇ&q7+&%,u>RO@2s ~`oJ/ 8!jsI$+uNǎ)%jܶ;!ha[^m-¶.hu*m`BL)`fRHI8z]oEm2ݑ\MER LSL& D)^ipD"HZ5M^rp˖-Dj`ճfnjIٸqhܩR*jlNҍ'mǣu$Ve" Qw"xn58HN؂88u*9 Z MQ y^CL Rt>LNHn"VD+vyLI dj2D bvu\@RéVv.EɁ"llûߝUxS}{tŦ}o#ߺ?_^_G~ګ< ߽lByC?7^/? za'~3/Yuwyw7\zqWmG2xKs3+wͅ/ӑ|ث?ݟ/O|˯$]'zݹK^F\"7:ϻ\ӏ_wa&KYFa/d-.o=x7=_ۇZl=H~Y:w[7\Yۘ+7RڟeSQ9\UU+=(bM]#a=h?%%dOm?!|> ə("B""$ UDrEfpp HʔTm8s !&ݻRWM.i,*AF@UU3)_9rIӨ"UX@TUŰS℄a1a)%i4 D dnR(8%1D"q窄lDE̦iyJܶM4f&"ZAJC{T5Q\s2(!%L# ʦހuD2Sw7γࢱVaP yĩiks2s)Z-:nzٷ?!3}.'|;Sr{'g5K@BO}) gڇr_Ϗ{{G?p~@,ѧ|KB@}e*|C[uc=6_sG _?gv[WR|[>tΡ'?~[ڇn{ΟܕÇ]yU;ghӣ IDATǧϼlȔmeMSguC?񎻯ƿěT%kp u-9;,x+_mwԡn3ýۯ$~+"hca3#mNbL$I"txiSԢ'B3 YGTGW1p'؞*;9wP QUc DLof)S YlH03s9'f""59yE*"4MӶMNl0ţFjJL쀒 P*"#0`xvmUkltu[&6'`2]5k]יDM[F[C0饛Ѩ-fD"b꫻5fRB DXT#KŴfEfJn(f2 7"q"fQ~ncd/'gqo^reu+y?63_je^9h8e{FeZl=H~Ɏ;w[71UX)`efNHH  S Kdaj"ZJRD` NSe@C`p>s` {*ʌLbbn)Q"J)ix!859&ħ[dEx1b_")Lܶm&) 9&bBDS+d\DR*8qm#[HѮM]=R#Sh[d2a <aU/IWR Lѫ'b3;SuE4D5KQ7BH+ HTP دR*D\5( ^sW31bĄnV"0#"K(UyaK.@B@X_n0MK-rpk#A@/Gi;G_:DeCy» /}~am;a樧ܒz_r86 q>1:Gyr 7qоx߾%^Bq*˕?߶ BxU\~ơ#2zzͳsGu_\~컳'=[u[uY| 9`'ܤo Zۺ%r7}ܟæ7!W-|4}_` sܴ̠Eb}kCf.n(KQXqls 2s$b,s-rG_]U<j*3k(L)q&dղ"Y ]KhrN'5S,RF"wtr+2ILͪlFjM.ЫvHd;c4Kg}&Ð, _C)Vesɸ7Gsf-RiuCW[5.N87^ѫLp4;ChOFal3f6!#Զ:Gȡǰf^4MfLȉ\" ȉћs ;IˠW퉙DzB~mnKrNMT@%дGp4Cu0 :hZf"fbJXe0*U SЋbDDʝqfLjE=Vw{+=..wn]m?⒋>s?Ǽޙ'o׺QY];쾜;wY_Uso{n뜌 e[gb 3Ϻcn*%Ђ?"v!o>'5_ɮxfh-s7 l]s8쑷9ucu ݃CrŧLs/~S_>㟲 Ưx˷~w;׭/mFչꛟE.>,Ʌr#W~?~k+.->u֡v#W5ݤFW&[Ԙ.le;1mj}ZzKS<4;3]׋"!&xR6mU9 `f/6E4eĉ (Cر̱ ){pD`,R33A@"w7U!љБ*U" p.))2RjW6$YE`&SJMJpRp497M >Ǜ'R3 G ԐDT+6&.QI q̉RALhuLv]4mۈLReMP[r$tۇ@U}L B<,'j6qep[&]H BK)%&JL:WMؤفW|JRs9'N~ dF\)? 9) Aא'B57Wwe$ y+U.F6@*ݜ1;?rv>?9O?'=CɽwŸݹoxx /7oyOy_~w ppow^tݝ^ >v>ۚϼ.sC׶/?oy/֌Vͭml_ewɝ;?/^=mS#cgxnj,Y/ѷP.?&l6JMYP"aDٛ6D74^DT0qIJQM`N)'`RpsETCcMAr @؀[XțCJ1!&"O cEdt&f$G05!eL!0ps TrG4:`hc*QuuS^"@MJT 8唘9H_R̺GsLeՑ !,a6OH91)z-)1v^oĦfձ"sDD/v9"et L)6N:`$\@DTK*SNmRՄy@*XǫG B+ Rę9]-B'tg~i:~^of-⃋]|pGw~ґm G̙D~s;S3[.:g[F_Y |exgIyԁ%W ګlD̛f&\O-n;RY8G=F_{6H]u|?.t#z\t*ݚ.Y#&55"f|lΡG3/X9[*s,_^;bI??o2ڸe~p2?귌M-pTF~<қ;!&!`U`հm|ѦMx*d&<έ[zLnN3M3 )An) @2(Rb$[1z@5U:ޭ &4&'2TAЉ<@n#cM\ R^T2 &VFn@` ƠhZ\ hփMJfK,eٽZk׮4و|җxd2ɸDPuEh5Q+EhKߗ4Y2*(]}P9LYTsuGXA.+E.S$ެ}~y+pU!ǾWn:ϭ9ϞϞ 랫ȷTݮ:~o}͋{2s>?wOewUOŚ=po\;n׽[L /.]{~'}gӎ\'?겏/l^w7_*e^O~k$#~m/Io>IO|ٚ;|e˴ێk'~QwXwg}ڠLK_e?p5U8OInM#&5N{D/yQ ;]CWW- gwr3iIWDmOč5I!4bZ*DD (#1:6[{Y˖7^sp4W68 V DѬ0"p2P@*HxjhX*;02M}c7hz;#gJv1S3A)س Wt) jVBI )s]'Iݍ3 dbZR)֮Z;1-]{x&~.x1Y|puI DDjO|7~ܝ߮{_iߧ2_ٵx9| -r29!15MIvnEB ;2S3!䐘8aNܴ z23]*`suDTS"„Z5g2e)3)Sh8BmBUZ ̋j4EXp1r VR%&|f3 C=b9n!rHS1G}>31|M&hUAwNUDCԻOI vE@B2X L4"!@/5C;6`"d B3cU-F )NkVLa%X tJSTJO.{A".S+,#zLUk ,:uyoTN}b:Q'>|`iRnuA)R g +[pwC;WnՐiېs jbΥ)%bF2UUqW@7U#ԤɉS̴mB(wZ3zvMqÆDonf # FLSD‰Q=qvDs)A]U*T'R *ģ:! j1h 1:YH4LlS-ĶW .nN! Yй2Ugj$ɊtfF-):V$`}7߼ɵҁ6ʹ ]BbPz]5׬Z573h/Rk2nnAppՑB\/u5U]Vr 0 hbdj"N H䤔 S6^=yx"ڋpbFR4"DnPRT6{N`B7 RY>uFFD "fUCP%pPX-67J߸13qdE8[\'M 'NT]Uzў1` Gt/-Q#ApALĈڋzJL-C1BL##AL7Ua9kѫO9FHLjJ h*h_JP~!!6iLga!{@`^p2 D IDAT-wgr33r .mEC˽T%A pW) Շ6=k)V3LH: 𢩨wb~PMtHU/ C(MTS ntLfj"@L=@DBP"m3^aP0C9{Qqw#,X0#p)q ܑe?T@UEjO:#B9a͔ʙ :iPHBnp*rBLN)Ͷ0% +zrd"eE"R]]Pk!NPyɄ@ Ra* Dj8"ҍ@#8R]iVȘAz)ӻ*N Xu+*R&}̭Y!X)_)Ew.qQGg>kyn^_q~Li);ڠ"ns;4"5^3&[I׋x$H@f()Eze"7)EJ_6o⊫L_JbfiS0Q@YGcEpNԶi6MC@diQULcS1(ttsuݘ:7E"Js HMJ)"R I]JQU: %E eTUS Gt*;jX!E3)z1*pL"#1SB< pV) `j={riN"nRi,N}oTKQjD%I|D455enynR0CRʙRd~b1˞ܴ S>67S+ҫJ)7 2n.`lzxU%R55KQU5/EK]'7ϰj;za/gey^_gGx~O={r3/_pD7VmYnZx'(Ş\D@UF,.B)++CT(-r8hd%Co0W "xaUlH\T' Fؓ;b3RJXͺ X$WDLIV1^9Dm ESEHPi'o5yg w |W]{WN~8OȍzqXٖ.<?<)o\WMtKgK.M7ڕ?uU|2C^K6;h~N.Q?|Dwz;>nUمߎ欟}?y6yS:[ k 'wcD a%wḁPb@E\ܪC%s5DNNk)6= q@A)1n5w&ArGX٫ɚ„e$&!g l%p$LF,`gW6Pue*>L5 :M 6|p 9Hؗ,jU֭nمbnPXnS!Ȕ kNDS[`uͪQڨ:M`# ab¬^cAaWu3۰GUW\"HƎjd0Шݩ2hHDzU z|L3I&,=̐`҃ $om[vڕW^`wYmqхvw/9ޖ:b; sYKJZ52ZUU1nՔX% y3cS77]}$%9n`ܕ^kx4&q ú01բCLz܍`jxf8,x%*Jy(إs7@jn akC᳇SP+1ml ԐsI,ZjHQ,6ԗJ܀ىQXDrN)j8KRZZS'┩&JNÁx4j<9L$q.BS-fa, ; 3p y@4a' 5p(X0PR_YQQJZKK% t~s|z/$7.;O+-dw|_m8z7?kKu_<8glp]۱c>nhSwRP  \nSo cj 6`0 "Cdr~8NbII#0-") !o$>;>bUB<#EcGp5"rYurr"wUvg' @2 DL VlF0XC%TMuJ6wfCU7SScRVdbC;@SP"VxJ1n5UT 9VJ8T D>=| pBrs#5+b m< D'w60%I95prI Y8 œkf={RX<\T SM$|jnu6:1.33>a[2ߝVjv]7LǓxiyyii~?7,GZo00??7?7?ȡ67g>xK.u=SG;r\׸q޻εd<T$dsN 0O`qR Yuݚr !!Zի`aOI "2f!3ww5SS'"a00j4lբxux 6'q&[6>+@PDBn1ޤ0#GFJH$%v$:(]',b:N¥5XfFg $$<0G`fiFĉJ_ɦfm0[n 'fʹjY$bViO*9 @D1FZ*rZtU(遚kHǁ< g<82&X)}N6in Py_X~ծԮGAs/FsϞʬ,fjpe0}zzE+#tU /tfwҦ_O*DbVWd{A<1;YWwnҿ/5/u{ky:!@Cmj=q;{268l;7;WQ6PtgKhp^{}窋>v~w_mVpw-YrQNjFCnr~zO`\۵r:/yPXh֪, Nnjf"):"١A^jEpgtģ;QKL-dMiH9B3t&;Epid2KU69%a"H)@N戻DT"2 `!({fլp 67S"℈lU+j:͹ͩiYA!70 Յ^N: "rRwu3"s _w99(I8d "IUt`*$Is"eRŨ5/kվQP4\6'z7黮&]nrfIF2Wss37; J0fJꨵFi p2+ g9zfpJ--tk~G?k__ <ٟg}GևO<ق]']ַ>t1;=?].wԋw\tfWh#}6‡q'wpaOO_O0ovܷo5>ago+ +ZAb}Wj9%4FIQtՊBLf!ܤjrHs!w0H\k6}A9d=AI'qF`pB [6JmI­]U9X)Y nLIT{k1m ,nUr΀elC IDATU9% $&,SJCH0rJ9 LZ ,IZ\HrnrO AoTõl`}_{'O}o}?nںA\-7ge'W85+_oɎ6fa;@mz.d;8[r qOʯN]oe~ڒmC8س_!Nkg o7p& ỈD/2,PmIXE8 wIQ٢xdMSRݝ$8AU3'5S"s“zB9XTfVqCѮj N,MJMQȆ̉ TbҤ6j 3!Bb3<%pW0 Wp9@/ jjjYInCD !ԈDg'TJ1b LDu񍀍ۨK-QQDZEҴ?QPW7fI\fݪ6& OssT. ܶy^ "1"C p z),im nw&_ͺf4Ms6@c4t%%U2d=LV=&}/m)euiU!ab'2ZzbB{Qs'0:̛}!n\+jk7)n0`u`עUt(7??m{?>~-G٥o]:w>?v?>g{v~cf图go8f[{vʽw>T"'aJaaFI48b,n=w= '$<``n %Na2"D3ժfa~}_k3"ŝ0jbI\u8@dfS!8WFڕ]yC8C9Pap8c K@ ժ\t\D8,$nutmZ`'֜8ߥǵo[v!m_zŋq}+vOxŹ/?fsw]vO]{vc[>vXx\|~ڰ{pX8kO‡y9}k Vҵae{?y6'~9[m6=׻- 6۶g]ۜp[6i_y}v'>LgocuCk7m7f9K&yۀ/nXN%9KXh G`DK2bF0Mͬ$S/Rv kQcyxD0(dȝ}PwMȏ2%pN`2fa!#@UnL1p%aI ~N"w O ($,>kMk`ɘVM̄6 A $I(p&'fCR\Tc2 xWXP)pUjF F$;$$8>8iUKוY)%`!)rF8j- @(QBbj|+I 1"t֍/&KTr;ũNY$$ɤ&ҫ)nYzٰxdVep7_v'ϭS}wmĿk-O1^ZZⲋ7ep|c:/tl ;Gq,qgs1k38XCy[7>/?o:sun {==UsDf??z[_'ofuՆ)9|[_i{rJYɩmr3JA&b@k4jLUaf[MïgA)Ja4% zS񌘒<֙2PRjL̔QpĢ|j&75W| zB>B3z8<`f>pN7Qi0mpFfz)[@bSLl D$0M,E TծTQ"ZRjR$aaZ-qf3n岼)] ɒhڶiۜ3 1/qLɤ}-U~084Ֆ6c쪪Zݑs0Xɩin hH9(EkHEfDO0!\ PYժfRn[f.j 7ujDbDsվcfE4p='(7 HHX ZkJ:*3UkUF*ESsӴsmpHU&}q!$f!"3\u5K]׹[(00[)ZkܫV7ekgI Qێr%b=dRWպ~2LJݠ UpEbIڿQO|)e[G>'%[M78kA_W{qi4rF[_m '?<ꙏ65?k5vtV@kAX\r9v1Џ}2SN8bY{GϏ=9gKro3_M2_ <fjJ!pWw7K`Bk>LZ@ܙMjdu# M;*Ue!N bRN vE~¥28Ԩ1%Пj'LT  O5N)Mhi:5j%P >,J`8MժDfsSJ :61 ̍`G@2GX@\0%D,20fpE$El`͡t KSi*l.l6(0'M: bbvuU+]IrNp(JVU%tV{JUQ$qb.+4ƃN萔1IA!#~jUWC؉8XBOTҙIr7NI䰢,ʨmڜdM&ɤWH[oF76nןٛ "InEBG(մJD ("6P!ɇ"!_( )P$VJMsNI `D ԂDd6[`6E|cZBHC!D! g\-2 IGSznDR2TIa bfŵTG-,(f0K #9M 1Q9881 ) siJN2OY4ʽaTw)ĬnVUFRN/5LD+@RJ_ImRܤlݤK8I_ '*y1!ޒxglXw}ud҃8fayirQ?뵯뺮z7mw+䪮UԽi;ېxL rZ+NK JN<ڽ/wg|=bX6ZƔߠmvؽ~-< {#ϝwVVCŚB"rf^^^^IHff7ZpE_9E؂ vיsGе0 (Դh g8w4y0פ6 Ow3[S.l]ݫSQa9' 3V]|Er$UBTժQ8H늩0ˆ;yLbpl?ӊ\'8O$,1RUs@՚uL,u*JjȂXOI[ !+ jPe"04E5LCfFImVS,fͬV%#b6?Ͻ:a"'LT@!#J¹_sRsdP dT:1ZF7r"$- on[,مf7^$[MݚFDiZjf #M̃oHD,%*a9: '9,RUK=mӤMPW4,"h4IK!șQT+@U~ `fsO)1D(D4`]ZC8U;t}R<4I `=*s`DE{Uu|&ੂ ppߧ-@lnwٿݗʓ^xqawmf3O;OӖeO|s?d]n#_3<֝7?Ϻ#W;!! scƏ_S\S^ ग गpn!1vv;%_ܷ8uy`%g}f]GnesasXrw?[?b{.ӿcc fv iYlWv=ش  pvGn\\m;_>wmj1J> N$qZiZR %L1f&IyRq3%ED Z#[wCC9qJRA?dU Ln:yc[e\,)y hӪWGTI'xriL|`j 7(!1 Q)R AiTlJb2%Dfʌm6Lp'76AAJl5:-Aƀ1l "l73np0%fIǘG) ;37m;7?" kۦm(5$ RMz'uiqR{1U]u= zUsdbw'rDaęJ`,^5wLZs Fs4q DQ} f! -iuLKח6ue<,/w[UmknP_Q0TKso.Rn%@95Mf&u5'WԩZ$Q)xtZ}i)rNԴ)5TNϣMMjuuc3jZk V. fꦖ$e©I-ZJQU5M37[[苖Rj)F>jhHJL VKF17-]cj)HRYDR …%Iʉ$aṿC yD息af40AЮI圉HMKs$$R&xyFv|ۄUjOJdLHVJ8Ɇ܄XD`MKW/O~lyqdP"0'I"5FR0i^+ $<˩I$R fLseo_|itٻ;xog=²ˏf$!r`oz_}{=ƿՇU?:ki{g~w>"Fp9urnogG䗿jևM;0g=toç~ճoSg?ymG7;5?r=sk.[>x[G?yu`e6џ<^oz>']]m7:͞z8U1oLESkͮ8 ˼ז683+fptWn ,9'iE\ְ>@`SxٜPQ()KJiIgf (2jTۊD1uDJ2]a䃝lpgcsq'"ܜՠKb Swvfa PGKA4w&0v}K UmERCDf:KAT` é9#UOLLEq,*m$.L\&}QWw&{"w/jwܥh+^4Mnr>k(Z6,9[T'/ IDATģh]~ݨBj'K} zuPu"/ 3g4T*Jժn̜sVRZ7lKM;Ҫ݊_!ɍ`3Dj,讪E]K2˒ɯ /q%m omdfRB6NfVV0$0[0&7,F܀-ldjLMFmB4f6S9q3 :}MJU3 I;gM37JpÉSj@FsY^j(q7n(N]ѾK_Sx,Tbj= 1!) [DPXZTA^LP SzN,9R,`5eDO ZH pk1MKL'ZAnsjaYJ_ .L G[4Dt~^DڶY+MRB)"&21b$9S3 {^vEs3SJQm5m3??o拋!ύԩı7皼nvL< WCARs F ɯn䗿HC?tš]&lj#s=>[_䗜vw6A㯽}}?p<ɿt: w?u!Ĺ.N9՛p|{|X6@,0nsv ӎ{W]ѝrc]}7[ҿ^|Ւ\wMz6[?O\諫mv٫UNw~q;l2#Լ$j֗0 310pA jRJeI *Ճ}Z  3frm 9jUbNWMSAr§E Z3{" ʍͬ:&afNϲy)})>W3rsZ{7'RJPM"!x {A$09邩?lp&bbA(~J)ʔQ1Ĕ$9 ™b,p"&s5ܰ0;d&e\g.x]H[ْrFmw}t|xkVն_&z[cأ\X[ma\)|x8Ozqd^G?{ S^'^{f}gC6fbv6=kᦝY&Fk_:w^w^[7z1kGfAmTIX 6]Rܻ; AwHXBbԠ1P #朳1LiS;^UK-ph_Tt#bn0(9Nnw;19sn) ܅MA4j,5}EjZM:51SI$0T/ ALRbj j5vW#S0S$Ek0szU9a䆘3AXΐ$\V#3Hi HIvԊvB,"&qb{xۮc̹>ͽIHc("҄l!"򂅴*(e"Z*_EPD^_-PiIHro9{hXr!^&4p:{fלsgJna]$8R A%mpשv]7 MZn`f!V8{ P [xS؈'&7U✎ge~vTf'aʕHTx06^0^ut#;?~M}?Uo}w+⢯O~o}+w>9DA;h뜊)a aPJ CÝLUPytQPWJBRVY,j/T P$3}]rKL$Dj0S KDzAPmNjFɊٜE=M@E`᭵6,w0SJG/&<`E͙XnHW)(yV殖,<[r@/BNff -#;Yښpwfid9D^ S)/JZ,EK&vCIP=O 8= ȳ&C,kZKn&6Y4M0QM#lc 5ƝQPB}ATjV8崭<ϸ<>Գ9t9Ͼ)g:ν οs;nps :3qꝰﻮ|n:vխN9ˇBvξںS=7(ߦپ~>,B ,ƨ6Xjm@,ZZ_`c8s=N;S9Գ:|[gu)6onbዅ/(Չ[#F}4,&@=m"d+>#WKk*`e\{W]qG.?wd9aogoۦ67e{KmSrV=u,l[uk.z+]OY)l5Uky"{XS&+܇gbZy"kk?O{ӿbyߛlkr<^x+N9狿ɍg}7ߋ=٘{^gQ 뾧wWo&^|;]k/_z֠'?a85~ʞ9ϯ/{?^Kg}57~w|\kosgӻwj߫\*=]jVfdu6<,53MXw| #c&b3s:t0%,XCi#"yڛXY:P]Ep 4™^!7 cB dgk[SSj`HhA&1\mmSkQգtUfa 3_Go:c9=#oݾNt;˼?<~5;}ՙ<}q͏Г+M /uůϽSwξc.~}+w~>._{ק?[zS~y9Qm;{hW4M6\']/]_Z@ŚYsh qRh9thSZ1pc6oE2̹Z(3#Hjh լk=צgnDz6j'xP䫴. ;CAlCrcHdF[ᑕktms$bo}.}߹7k:xݫwo{Hn׽}{9g.HaLJe!tOjX,\j9@DkeUꜵ;P:0Gȑ g-kj'zR?&)L8q A 'WHpWKW}'EjV4n1sU-X-gDKcBZ.J,)Ytlg "iJ$vUlnlު)!qaT󭭭R+T>Kj*"L-u&APњ6[ an㸱XcFZK躾)2So,z)q662uP՝մZN qe!'֖ZR֕&)),/]ZKح7뻮0+ɴ)E cĸ3/Z&VӰ6 7u5>rtgww&35"!"!^NxvrU_=g|⁷|-?fXuG}[0]ՕN7ئ+W_ZWz2ǻ]X2wtI6~hs9{v_.l<~wrox, p۾ЦOt' 5_=u+ny /_~>.f3][Ax)8b` Ba BDW "pwmf͌**SzZ")Y?äԕHwXfqIpfH' 䍭Ph1f n Nfw&EAjfz0fE9L4 Cݦ֮ڹvGLڜ`.{{61q'RJ!&,UT"!* 65a*kI6B wi=iD39B͆q2f:A}'CgG98|Ms 26N֞dk(L4N`)^8t5B S((msPj益tR|nڤ4 DtR,xN,As  XYV)<;pND`N(AD𴺏bͭL,# (RY%<*UJ-Bµ+}W_t+Y*Ufc:.0b Qq]7m1G$N*a pK {$fU6dahڨPg ,B@)"T"fa837ɛfwQ%fMUa5iVxLz"NjIFsx IDATmRuM]Ώ??O=x~vEIP5gOgCj@xJD шreq"DTf18M:%9fUѠafj͒8AA\{ޚR%KL f=DL[ t3Tr@zss*v nkG] +X&dk%y%2wo‚I23Iӓ)D*T"8 $RN+'%5:ED!eCšW&'W"Gk8LZs*UELTEL @] *"`$5cA 7kYM{6337憈vGH5 RSE![kTwGLjggyQykSUJ#E]骜Uf1i6hk K~ܻѿOs_7?b2coqڃ/ۿ ~ywo|on{C/?c==OY_ճzx.~o5o}ij??yoQOhm}oo{m=n/<]GE٧{ij;V9eGv‰c7굲<<\ aA^KGi]*D,kTWmH'safP ,^J Dnni6+mlLFu5.`N fd(05hfRBaɛ$ ʄKI4DZtH)9Z}1YD,io{؟G־/~];~' n|s_?7}~n7:}W=t⦷u<w!_yΏҙ>瞗U}?Y7 ړl<~?xW^#')_s3G~7?=v;БNt};D:C7x'|F'9Ǿ{.z_L7?('/׼?ewu>7[>> -<ȅBDT*,zRf{rX%ܺ5U"X Uq& @0B;Lf *H!Tp'܋TiZ-L '0yf2Abg2e;VR @O"Rsވ'͢UD#jץEMͣʡC[]-\QD:Z9!()|&* h !ԕ"nf)CSܛlM:#WuX>pDqғ."/H-5"|=R*",%۝5b˯|oTS7J,CJ͢fix 'OW "n-ڗ+in{{j4wa䜔o4m`nat$NU1Gt108nMw;xd/fp0Vr\-/?c s_zկ|b}bp/epuv+UɒZXHL͆X$: &1M^7(4a2H~m5TDrOBgB+<,iHxWĒi>G2kD > 7!AqnFNAf!.Y f.%B)b.NfFU,Z3;9U@rKҐfvw5SKFzϺs2c3AD&̺~Er.FD),.ltV6MX,"b͍hԦI _M0MCj)fv;J{˕Xh\ $ðH.#"$u&x4"(nRkba 3}]I™jF!0N֋e-Ԡikz{е<:NDyq~y,|9]~850w}=ʄ05k>51-Aem0NjT!)~ܜ@"|cHWZ,Tff6cd3 w}оK$3S.q=Ϻ7_z`|RʠÓ'"'w[Cj%!j_ "Zhn󀃄\q1V,oҲyY 2Ϡxyx $fOr"*LK͢۴F37Q B4Gg@A>'#9e"]3v*,xFLRKUҤf /͈{,\@Vi # !A>҇{xk sdkko"l{{S(;*Q wqaliPXt"L>jvǽ.R+2̮%L9MhfA!#py겴aly3{bcrD'B-36bl7ǑYPx qaݝTM]K%*m߇u kׯ}9h3#(0!ft9Eм ,TDMt!R6 A!t!AH4:3^D=,9gf?T`JXlEL!Bu\LRJ]W;T-|ztVJDLǚ[A!Ej"Ҵ92=*L})bLƥ]""`@FnVJ2c "yD  E0jD,2A!ݵ8jZatIUáL&5 ҮZRD\E30(9"u'|xs Ui}jLfI{83 \:ިj= KaYR$w32?4fI~z|/}4UUqq\ j5,Wrw˞'];i[qcâR䳢'N.l0JIr] ,0TmI1(G83'#fY恠p8 yDP3݉I?|Ue$'DR9F%NbedpuSy98ckM [f?U"1"#F卮,4G uȢHeT殖IIY;3TY%`B)EX9TYXQ WBk'c0)䤑T!b7^rPN)f)Z p7Z@VTۤnafs,ab.B"uV4aL.-Ju}K*lÀ`gv,9Ȍc>z3S?/@6P0 .8IFo6jsPgH(&":9qh6=4˟/zK?pYu-y~g- {׿#~<(=w_ u.wDMBܚ^ۋY-qĄN6%3@a,!DW!yD GKEd^"L5>gtfw8gS u%  2 甌x =]Ճ`8h_@-f>U~]} ^7࢟g=xr/>ʷGyWaeQ? G}gח eFeI06qPaA .gM h=Xg0Q1ǚ5k0<" IJ6fG3զg&7Y*Ba ԑ̜DDU+yx.RUmR 49l"6[Վ$f",T!\3ZX:åҌ̄$`t}]e;*a:KEP2M穗YRJAQ~88i[*iժB֮:`fij1)\EU -nJ݈Qp3r:\UMR8!@7apNi9:EV$8nR86 xXaf.@RԒQ +ZּٵFz#w‹O[}uѥ~/=>p[yoY軾 C]CU=I ȌC"AʄuMPQլ) ]OR aa66PVDd-XN^V WU*[lo8Lmҝa/ݰk"b'jnV UҘ aZR2NE*iKBVt᭭6 *]7M1K0SaE Ԝ`mjjiZ4bNpRXJRԈP 7Fx~\܌u)AlnRJ_KE4ayUוCۧ`aaZSS̗ʫv(FB !Rdz(BqrnaTҨ5Mik^̮$G}#666777k_2#2#ZMK' _;춫1\-$9' H*D/|HQ*+`. % W z"X.*x`,p -&9}߽ך|9$眜Hrg'>s\]s1~E(AQ* ;A.U O 8d6NS0 +̃9j{+pwZW MMUUH BLDjmf:֚qb "ب̆+7frT IDAT"JeNDff[ {ΤfDD$ycYHh<ܝE):`:8dH`86@8ԬM[:0ƦӢ!co{ݟ{\x}oyԅw۝j?G?n7܉L hV#FRLI(y1"1!ͼM) IKJP&S5$D`@et 2e-H)pQ ugGEZRV:{ɓ~4GkjfD0KhaV "&Dĸ3PL[kM2Zk9˪m8GRk]_S$Y)B$K%u0,SDnIa^j)LZZeP&3k0%ԭЦ\F"b1TH ZL)ּA` "3K3fi0umD!aiDfhY憇T9|x:wpf.,@!^+={5LPI]c?u}}Ҵz[l ͿO|$_z= G??uW=e={+dyqOGZmA>p(Kusu s{P@ykjњ5U6R aK|fkbanMUZ0WL 8FmZsm , VLMkf/ (ɥTnSCp3e%rBFSUm,PL]=`N 0 Bڰg}3wyÞ #F]+>ںSGl~ʶsĶ=tO=rŸsDw֡ii=dD\ZԦ[ۇYZJTAT**PY37۷w߰;c{}sK9?켮o+1ְ#'Uo GVv17O8n'Ucg O8ٖ吮{or޳왿7|&s5ϩ;A(",Zx(Rk"uN0"g"4tg>9}š#nھrkΡ+olӴ=M[8N4iS7ePdm֚ դvbpt dvi1ow֑;ܺ_+/CWlmZFYٰgƞ={ 5bQ4ԼiES']9jS5w5-bykfͧqZ;[G9uN:ssϺP{# .UT-Vf#9dA*11F3MmG+l9:6uڙMM[EVZ[3?۷m{ƞ?;sv9}g9{sY78qƁ3l_Gm^77?G? [a_w#]Ed?Wa]ߴԦ%,(":!z Ԃ:A9.&3@.&D_3-+HCg6"DcZ#K92`U@ :p ΠɈiL/|_?FY}QGڭ#e*R;2Idnq@T Q1JBa*Lmm4*ezkf6p)N/X5qI0ws 8Sb`(nH J:ppJ)k9Z=WcWEdpQNIDwKLUd D*%:ܢղ6_b@9 u&pxPJn$ ٻXf36g0L wAsg}ӷ?u3_?q7߿iw|_Ks+_=qo~ ~|~?'\l=5{w/o~4_u|%wμ3~}ǽo 7~g/<_sm8Ox$r/>늷8ḝl$UVh gw'~{W| ^O9_{ѣ/❧i^ӟӽ߮{cM`]4_{ҜO?o=.~!V!}ʧ9!ј;Ija<)-ܑ MѺ*'3 CZTuEHSg4(ij' 4:3IDp! TENB)lNJD:E"-S9QKb s-pS_άD"^! DW.x”!8H::Ipvvi2 v| L=IC!H">MIkPT[,v܍yL6͊RrX) FB(opQaI\TkwsJaŒL9h,RT5JhW"B"* S7׊͜j$#/o;v;|gUw-nq?ݯ׽o|o>9;l;ko<'{O%y橿v~/ 1?xݶMq1/>w@]'o}ա#͍lB]37'9W힏Բ6UTH&" KC$'D0zPP­KWE&2;34;I*Kl80Rґy$m$Rzj)CAA% ! P8rR-s!"g.9g|]w7kgQs=Ru3^zw{􄝫9C&a6]U#,7~?fCBC86WK&8~$}Շ>9Y=ḝl5=CBLij{ rx{Ͼ~eħuy *|1gi?7<釟6+PLu*C;) ҫ !N`dr"Pij?Q)e Zii9,1ZkfYI%DRt٤$\6kBI)R$$qz Kfo(y9Sh8oҦADaVP ºrE:e{l&q0"ESgF@@ܚ>uP a~LY\{0b> DPʬʬl"j-xRJI)"̔^gZIMS=mrItPkAqjOw0YzPD88u=,i=O{,8o8Y=N Ƶ^_ڷ}{NYn=?WV/tGXUmXip,7b >fW]-y"pci~CR m&U8ȗ`YYI nTK:nHS+@9XvcUs޾ᑟP/ا  aa"-=YF$rБĬ "n4 2  RB"AfZ C,L6*EJ}uڎ{3Aa0hGFfl̇ZZy9YYLi pDBpIcYt+QSgY݈L`.N!W!"RUN+|B$ּ;XA%oSkJ:aocWnj$\8#ڬjJ"hs88o=ǖԝǯl-7[7gzOo|:=ݒl䓵3oc?r//oqmtģtazgq Nv ^%pcrQ鳐yx4~u'_ӿ߮{/sozmŻ.4Hf їOnJ{$ r !8&l:cG5 $rLĵd1#`BH~3 䎦U\eptޓ03 f*$+ 26# D ; bQ)E=Vb60IP ̔A ` Ff!r*YCAuHq7Tn A TU04"GdQAJt RaRY22[StVs?[ E [[jDi P!"*dqlJ"lVEB4$pgNݮn+勵|л-Oc{]tطO/>䛾G맏=ooO|2_6K^O[GWr!}­.~ <ȳm_͗-Kоr'Kp$ ǷHatP ";3F>seDp)¦RәШ5'CeR!;$+D.,{+%V#~I}?tyۧ;?ʷ1gg7w|ԓu;۞ß3i|w^zmmwvw#NS}tmlp/.k;!]^Nv}_/yw'ɅnÚR uRYpPH9#(PMN?tDYdR*֘K1Ub6tu+"%L@0930"L`'aP9L zD("Rvis]X03 k#l2p @pDV_" T}Z@kǬkXL:M 0l fdM>/, xjZ3zQ*pN,J\\0ZZf8!ȉ@3s` g& K Ptk-s 7+E 28Li5H\ËzªvY\ l&"IzNoIQWg d',L̒E}}e֫OWo>0Op7_l;_~-վ@BgW[{߯q#o?=qwKÇoz۬{_&O.7ӵGp<ǟ~^t~wz? Dq0)LCf6̉`LuGaO:@MYeDB3sZ#\e~."Tw/'Dw:52t6R$?ĥ+[0P$aaE2^a EDiJ)" 3c*,4uiM0;D;Dj6EJ`jnDNB@0s4#8ץ\E%s"( "xڂjQĤ(D Wcf!&H#:I@wI,Dw S@d a(]@"dXebOL"D33:ݠWAZ*w+t@cH.'o64$-ijt3m" )P!$A±&fiQTcSXR{S$S3 R"BK!%nj!9 -(E<0HIGC)P&Zk,,HTJ ;φa:sfU"PkaЦdDJ,YOm3w3M-9{+:Il&3?Vܢ0*BtO̘;c8% k7KI(L`YK:#HL(7UJbw0by-C:-! l-=@j@*,@*իN{=p{?OWox-+/z_W}[=oW]w/-D+ww Lo={xe]p ! ww;awNXSVvo{c#@aA~^)@,):I,MnA53A}zcg9(ɞ&cp4LL mf '*A]Ky;kXzGxt:k`aZ2"f w1G J-,1MlkE NS*{,ݙ IDAT[ gnɃ(5ᘓY/ *"eiF2 OIX L\wN*ÐFyL.K DzHAug1_,?Z Q@MY i aV!X(R2. p7WX{(3Cղd,nysbrT[uG?~ ?zOa?}͝Wy۾wݞ|O4:W[[?>Eunwӗnz|k>6O}ǿ/>tBU <1vN5'NN}MO~>s.vQ?/կny2M@ fA*0#£,`7Z,=_oj) 2c6(݂Q# )B0rz/ce%NfP-\ z @"f7t"Qmjmj ^)Y]SG6eApWOIZA!ì2IB3mY3`BD u 栮̥XW& ,A#\0w )Q[9H]iGpEwJga@P5`a)TW 7O~iJ::s)!\)  b_FDzafn-' `-2nkѦ1??zdkjZй. I;0 l ǒnp;k3ɭQ7?K7bqheeo=}g8kUvkvVwrz{{\ՈƘGR0Hk Dnf͒БHN4$`0 #5An4Lv! *CY Rd<\0.jX)ktNjPU`vF%Yt@xN",fR&9ÍR֡ndwP*TEJ^MSaNFDA,@it ,J0KZ$DAn=)yHRIe#úw)$#+,, _ufަ ,6XVrgAj: %i)0 w+D)8ڢIpg[҃HHTlBeE(V,QAbX(I0<,Vz_P&"R̼:HtE;lYDӟ2X!B/{ ^PqAċEb1m,ܼtC{7/ 'O80guhuڎ랝?]?w}}î8.чfsvAwCI ˯]կv zOBO7Ǐ 첲ΌpZw!b)u>m&BfYS8U#Ҙ,YeV >21 c&S? +ٞ_H$H%&bhnf-7+Լ7IJ(N %EH "P rWLXSń@5}V  Ӵ1XilcaphN fCJIWȻ톗ؽ7vi 0f IwpӯA, ;y7_ܜ3> DE!(TaB4.L-x^w7:wQQ YDkVXFTmj։ ,<6-,7 +p""LL©µpRKK?4J#tYd[<)rCGPs YFNXY <iJEl}M󽴆aVS8 A/d薗1rE w׮AK=؋I /0yV(dcR'˨Y2Dhm[wƩxX,6bPK*qR5(G{tY[\=wnwG;~~tvqGǝF3ɌYJ-"bD$O b:= AH:I}1.5W҈ZF @ ,!˜)Ɠ.DgB)4tLZk-FZ̖zt)nb:]p~ xp>rsD >dapGߗH\M*EhaE \ ,iTOpݙPW%zD] |LDzWÂ:۴{{XYZ$tb:}ѣw@)SD@~&0L3Kki.NuK̫gyW?o3{E{zwXlmOApm_qFpNHY)P677Uu&j)UКismޚy fq׈rnFfjTQqql4Mlme&&3uP  ^myN=oӳp鈴 FΖݘ5`F)E8Bݛ6 Z |1jS"b)+>QKɡ1 xrL=V3EYIV]##K8&L& # *DaK%Z-(KK",t mp32Fk0.n)hPFH?.=DRR6C.{0զ{X*gY 06Wuf,\8053܃Y3_Ån 8#;wn6Zj[aQY-E0Pkf;ݲ܅z[J t3iqlSKN)>Bp[__[[kC-Ӥ;NR *E7a)]HaI},@Q6%RJ%76.Y`;R)BE+\ JkkUR("CHz=EwG0GZLTK B< Lpm ,ۣYMچYp)e(u(REHR=K/iօ=BDjp3w 0$m$<$rP&niVf!,Al, #A#ʯiakqָX c[Gvvv,`b7­CbM&x1}h#a4 &ʲ`ɺ䧮NAQx mK״o3No}})>?~pW|,tCApp!fL͂qܙ/ 0s5&ms^[iTU#RijiSyR$E˹NSK,F0Ugfn92\w=S!Ue&YD+zX{QOw\aqD*t2n @>*@\È8@&(t'T j[s."‘R#^e!$TQBHM5QHOuPNýr PG2X p"+yj{PmKKNnd ,X AGx\D(XPJ1Ȭͦ͜NLt/u 'CRar:|FR*ç߅c暀RKUu2'U>. n09o%|c;tdKm2f("bZAj!FfemmY"qZ,q1L9ZÞujmD4bZV55R<"B[GrB;2T ,X`n#͍A9vݲM 4 Ej-u("Y!3K]R%hP57 _YzI9"(HA CHA09rmPis$^76nnػ/PfkR8PJav$R3(<)̝<V0s* S,gyr*D^&1mwX/C!j6ig{~/eG(L0;7"`B8 ϼiH2x.̈sO8DMSMW_@ˌ=nCO>24Ç]~_~\pw<}{n؞, N ]u8;&31`&&[=txlmbCN:)sY:v )i3 GZ3p0%XPB]g,ԌJrF}j@7c"@%ix=,)kn&RT,^>RclhK] rOa0R  Ry"K,,@)U Wf.R }/eG@Ȓ]< fr /ť[-0sED!!̉5 01EVz(V;zb) P6rz J]AiQc!%a:#E!P8"HppD@j]W{ۓ}ݛ;xˣ.禟׬n `vݷ6eEq2w+ 7mP)#Yut! L 8.b$ifF" .W PPDPڞ`fLLYXRE8 2"lNQ&i#$9$L$oisOA iBY(rwr2Po=/vƝyk+z8 j$Wv,¹g?xs~%RDI, !p ,RDzg3A4֪Kdjl>_up|Xna)6m1_3I)lblW!|HAtS,\R'D(d28T5kMu ЅC̚zpN;][{8+*f6xg9olla/{'LZT\UΗ؃ifMm]'BusM薏Q@өi8TMI2.FIHSRrtlMݚZp'f!ȃqՁ.R9D.yܑub#wɆs}uW_vO^{; ('~Kȗ7 v}Ea\汽 _2u6 vt$g 3}=+/x_VN>u_^+FV߮_|/ Wv+RY83#H _+ uLMbrMn-:>zLOcj+lņͭɭĐU> T u-iTzA? eQn޺eӖLF;#Hou6\]koƫVZlh'NgSvnYaSv;ErinHc) dHcu_&7nذu[7NOMU3Sjrs֍Sm [6&7oٴiɬL'zz?kTՍ֕ f Met֩🿼7iuUCg|le{,_rŊ+W|ي壣&VD41RY67+.'?_so4iDH (P$c22ASNM#m'HBde8Z h7vݯ͕W\sWG??wK/7.틿sɅ|_?UW?կw7n[ݸp݆맧U/I0E tPYa)!"P؁+a1pv0&xа꺉OMe|̝`EST76±+&O> ]R~le9 ?;}g_}yҋOS^n/w 6;D Rf &5 LZI3 i@tꦏ LE,E:5"hII tcs'p凾5)Iv|grrP-3Sn{j)(8l.2vhõ'LA O%}r*7!15g#UhD@H#.E`Aύ8ɓ8+]y.u`dJ&(egLȚZ{ΤC4mMYbL9l-A,Ijrwں[]'&*Nq%oI9cEerW.x܍,;r#Ǧ4rMÈJ IDAT2s'&!*8wN BPfꩲ(bu]5Mr*^41>1>1>T96W3Vn ~%\91eم 9I%L]4ť):߯IbnctPzP bQdf{:eYU?3)FB(bDc${uڈ&Tof?= dF!F&9Txw|t+"MS7v W͓u])14EDӯgiVtcPFPB%RrFB0!%:uI n6U2Q$ԯ&~p`N*R ާH 8ϦxPA }pxCӴ7VŬ6:sRmxto;|ax?=KSR z 믿} _\'/<3pڵOn:Tr ϻ+-t7G{uW~|ͷ>|ߝ8_>66:6::::22vN'({puw𮬵_@_<9^zu1mGu,cS~] "Jvʑn(bUUMӸv <.2CjYxmp=)v]ʰbfIܦF!j6cG) fF}1!)TQUum&YON0O5sÁs~s,]KV 9_ͲfDV0KLU]lt\C ey&ᵚ cRAES9(sYD5qqOpՐ /糺){5*9/Bx04aqxȕLM0(2l>RͱۿsV2{ XvOUQuf ۀ8K,"6ITQCG>&"h%ڹ7iyv].;rE~O{is1r4[AJ}Raʛ+٧̨NPK{jp 1;⡏=餿8]rUƟ,Ro__x^?Yߧ^gܼLJo_w#cX`#,֖kr1?\wN$}+NbS֌H}sC]H?mO:?v]-FU6[J:Vw9.λXTe25;{‰}g|˅ a ]+Rh?ͥσS~cbɦ("T! .:XiPcP! `2)Jcl|[20/88bfn:5u#ˮԨQ%eёFkuU$FL5IrO,_1chꪪݕ+-ݲMTd&S[gfg(`Mݘ*d)ʉ˗1SUՃ E,b#i檪 P)c,b)SN([-5($@QtH zf?0*jP6_NLN6u&Y~a{'eZh-=HZr}G`fuPYjP D9;"!Ȼ>#9N%J#Ґ岖clD){9r2be;K叧R~{w\k>39~\|ƍ9#+tNqߟ}̈""6 9 zE1@9Iyۢ>z0!4N dFSr(\dNH1OZ5wG,E%mjNA1Qꨌ&qny D 6[@ [v7{~>cvBJA8T`JԾcQYP5zx4  P޶D Yi-jQɠ&3 isL 'Q>U#rB[ô:r{Zє3wc23׌o=<8\5Ϝ;߾`Q=VfG1Ͽo~x/}*6eVQ @E jLfj%s#967FFLB=|u1p2Aɦ{c9S,cs+2΂NB  185 "IEqW ؤp5(ڼ\dbozf5b 1 5D\$-Fъ7? 0VV)^̬, ( F́ mGG m# lDƞʕUB *,Y22(@,% I%1Qޝx 'Ԕ)1O?/A}/x {cs_oVr^ ezi'_gg/^ʹc;dz{N/Ƿx{UN{wO]oהGG 6Žz^yzWOE!;g\?cw#L:6/Uϕ]*Ke'ZI\{bX'H_x[٤a8m*C(Ǐ Uh)T3P2ܗ DFٿ 1"0B * VeY1#FFEU7uݤ:U*uzPߊPjMP>t*q(dAjA"`zuӄ5)el`Y$^H%jdL11Uؠє@0M3B"Џ@ f6%RLH 4ՠzL7ݟX10 Ti4fgz3S`f0k93qJd|]x`4Ej=(@|3ic128s=eI8R Gx[ :E 1Ԑ[Ւh$ILMM}3c1FՔ"ۚ@ >쵬_a8dQ5i|cfDb`.b4UxHJ0KaE(֒\bIڎ˶DˑDc(b!"!+S82`=_̭Ff$#q >4zw$ڈG(I Ky TBdn "fVS0EĜDU !8mC"J)s FDTKI~+ϸ}kn뮇柾H尼g-{}o}/܎U5}䤃L#?wЇ~FZ+yN^so?.x$_p]Oe}ooTn,>NF2 >G2Z]ݨ`2EAN`)1fyxr,L3 Ҝ*HFZ;{7 u! 33)3E )2A pdo3;tІ:!cQ4}ܴ~fjf, @gfѲFnMԀ(79' к'Q"i"ђ7{rJ( w1UQI)>f~L59jMɗ*TmHvპΛSߵmq}vW؅F<fGbe\`t9)[9h~u{ろõC{g^3g^oGr ?t ?'=weGey+R=]Yp@ Ch>1hE4xB! ]:nY P@}#PˀH#"@PE!G@ !"D"EZa4g_J IhC0AiN-íF".Fn]Mo&)"ȷfH6O !ȼ6!;F_`%"$Ctt06zWNU5ujzfda؊1N4M+9Q'sgd; 4Ԙ1P(95RN*V4 2 0XJa'F|^("b̶~%ml}j6 8Zv|[)eh#k]m X*dǼ.5Cqt_\iӦ;$#OOyz+u3i]+;x+.囪ٹow'3P#wo+|ve K@L];(8fy;o"07^t̂,d OfYnW$s%}$h&|ܚAEg!S#8CBalueYf4% c.hPL8~(%Nڈw]|/*HICD(i ,D2Zh-BOpPb|-LdFf IT=5PIT ;>$&_QLiU|8>EUA) 'D"aS N$5̂*}9TS$CzǷш8L䮰",bd)* ٸ$X^F;2P w~o,]T~/7$J0A@2@5KH)sT/80JP"RߚOMP %$[+S]( ơfr+0 ,`PR ;_>88â`dуO"+CtC4w{LE$}pK,14)satC61~, 7&25==uzP7HB% eѝ骖A<-D Fp$BsBY &c 1EL"݂l^*C@昅 JT=di͡`Ü IF*!+YT=4  6C#,עKRcz=̑6~ۏm/_]`CV vB7=Z=_yCOzsG~Yv.fŷ?ЩJН8b Wp iᦹ,@<' yv=]Pڡ >?/ "2"?%S:72fQ +pl9Hs081O>pCH0 |Za9.ډ־F3 Q!=jTD`sXqɝB˦"owgQy&h6I3/|lvN;.Փs6U9}3 gFE1v+PQ3C;'.D0(T!1ܬ0Xl)wFKC%`,?T09.(MYhmߢ.1е4'yU+ 3>P?n\",sWkU6"~kkA726.h5P=Iȼv,qnb2/"YHPCAqrb[51QL D4:2l4Hn ۍ- C.(8f1 ,iCa"& qu B)8d:(hTr/ym;C-30e`F}֯E9l'^^}֞3^[~wT )&nykype˗-[}k}cNJ2W~isyK:NxOx/S213OMwm@" C)IBx$ #,VgkB=\+"mthgR?&6LOq"ȌT{L&ocJ!i#KKQdLZCk_0gHY[Ȳˮ%`ރqc 3S_ᒱ5JL&*9&adˀV2yФF~ΜpFLޛ'6X*XN%7'?wUW:n)6"AI, Hf, _3G/gV8dX6gr=\mɌ`Ž r6qၘlRMRY*Ke^0PvͼA4wϔ#-܂G6Z6k^܉ b'僶tVU?y_;h<Þ6IV+n)̣lm]|Bo{oJ{pH#7EQiEUaıca$:'$̵r6QÐW_&dwd4@!"28NݑjT jPu2zjv璲QqyYā=3wv[~KC\*2vrm3 o@=gu78,[O.8p^wS[?k^y@ͼrU׋~~߻  IDAT]Q>Xzٰ9#`=|4=zrCQoG0C|B0 PwW'Ol9oATdy؋M3i F"sp8|.0@<얠$J!pCx;ǎÞ ܖÍ5Zϣ(A6(`zFkb6 D Sā$)ksUH\oQ_m~";860 !1W&%2,ja~A29'JƤj#{mv=/"3DΫƩ䗾{3VL^>??KOf:ȓ;{Ue_Nx|(6^fg;?X/ٌaYJfd:Ic14C!Y2SX ꔝnKF$JG=t"@VCd3#GCb`vL?^Ծ1j#pO@k;3?X_[@0lkԄ@0U𑮒1FB(L#eέ535u>91!L7^{e/&{}Z55(qk`4L &AdLL@)ւ8bpC7YX83"3VWv9{4g&3{0K#MTuc1u[AU%1Vl\HU1 `#׼dq 8cfbf94@! *IRB %Q%f8% 03Œ`E )Mj (z%NI$I-冯O ;%k~G1K,ƚ7Vd]p=E3bBh۪6.^DBOL1´ɴ~o F e16)Go\79:ϋ"k#]v\`/A%wFG#r|t(;fTUuum~H`PzZUs.Cɏ@=$8d#ASC FIP7p!Xγͺ]67\yQ6./}+Oyމ]M>;l7x2e9籯zu?}Yw8zݿf:fݻ|gB>S_t+?E>O8|χ:[W۞~^/ϊC^C.=]\|nzի_׏>k2ַgy ^׼j[˕/[8u^z>7#v>2i-#"{:}fn""n h !tN(:eH5fPl`b2i:(cP\$54IIIZLiQ$JIJe[ \PXpRȔT j=@-&ULH"ֈ)5̔swt2b eݢ)bQp G c#DiDU뺩͖䉼ζdb[1$cE0 @B@ -(؉\RQ$EP7gDIDH d!u,0$k1@j4`u %S0CJ +"w˂m5=ǕZS Lj`d9U11,M**ҤTUUUUIDMҺALMOONNLgz~_lo橍&7pԆ[&7ltˆ6lڸa 7:i䭛&l{AJjJ*6&gl6mN[A\hT|ɟ|E_xQNE/lzt)ca~m]o {s>ᇏ嚻?me#ޯ[U~GH%KwA9]?7xʉۧvx] ;?Xw+2rst!׽UtcyG9QG='c'ofn?ѝ|.x߾ǜr-ݰ~?9?q}ݶ??n%S^zR2yK]\fgoõt̽bA֯>>f/鳿qN^tqO{ak_}ٟ޽春嘻 3ӛ~=6 S?-wI-2{G+qJcubXv$ !Ts`0g S: d]E(@ v(#ՠpSyPIq cZ{Valy"(X %7hզ 5w*V8("[u~ 3ijX$*퉫nL&1@ 9?/)nDbFsP2!9Px`QMTU4X3L ӔZ%9OӒHɥASij9Y<0SAݯ7$M".af? xRJC YL&9]ىf5 [ʹhZ@994ĀkL젱B"Ӂ瓷^{aͮ?x{歟?<ƟH<׼g]{qkN s>'?yqiv} rXOy''/=wc߳Iu:O7x׼b=O\w_mxOس#eGǹ7샏=y wJYvmM~q'n{>ǝyշ|Kps"?k_+z-X&iu˃3/Sşg-V{v߽ݮKe,B W&ŠFݠ4M,1?r  Y4*}Tu'm=,{yXY*;8qB# jc *1e(hGp\0 l֙-33Y%R[#eE,XRFF'F`BD&uSM 1Qer.3ZkR"hK.  qbf`W׵f0@]# hU{v@0g=kΆԬ}i,qq;]Űf^pCˮ_O//#wv^=v=|YtK}kFĀiQ}i.کkm"&Nt#odOo[Wɾh>P؍e8D1ƥM8D& !A!'Ц(p`w$ȜL TČI!0) jܤ!)PƯ%@Ƚ)J"fFZLLTā ⱶ0jE+ v\ƟP[\&5qL졸0Q 5R /B 0T4@Sa cj 6KXJ3JfHjA`rm ˪Y$Ss: 1H"BnB9{L`2xM]5@\1 DXSEv!DM)%I!P!%dD!P򞒪 R8}R0iͩǞtGH尼-?}#G ~+Á<ˏtcV[;+s֝IO{7vŧeGǹ\۞t{zZvlms~oS>qV>l7OZ7Tevk:|7-}w]n?tx²/mꟷ':U}[z:|dîmv˰=Tvo) L)L9"&if+!PTD|H586* P D`] i !9KXEɀNGeBdbnGPDUgji*Ij#hU-XX ȝUSjwcŴSZ( 2M#'6`z Nv4R83ӟzRNmMA<\E&eIq!mRJ!E81~Ko2y7>+K~ḱ #0ɪVScp :Z޻˖^as#ބ% 2F` c"Qe )lvaRېq@b'v8{NGX>B3wf[w={=a3ˤ9 wVc"R Oϙ;a0g"h@Ty-HKn)S[7&LS.kKEͦv&fjEjz_")((C܉f.@Znrx@,Cr^nf p4Ox4n;e.+`2mU5'cf0Eơ6˵U͋8]h`Rq u6m PH2m9I35Y"Ch%#c*̵ #*W괃 2&¦DNs00'E$'|o~?|wHW>}->f|?_?-O|-u+GeKrz$ozOv6Y#G{GC7ܮrA>=k |d]|~~s}?v~oݟߟMhqz;Xt 'F S3HHJ00p1QEp-̔4 %4.Sɚ0+]_}jQ'F`Cv, 4H [pjwwN,m{"[ܻZac\]YAuzy&w\'8aF3FwHCW8h'& /}i:*X7#! -mjjrns|eGvwU?>zgo+7ys??}7g{P姾x'G_yֿ_Ͼ?؛~v>'kޏ_ԫ^?,xO}ğzz}[oWv~o{7~r=C a 6i qy]Z&֒*^_}<s/З\adnө,` IDATEM4USU1 4=xA˔ u pr<01m)_%vt~3卹& ȻD0j\'1%3s U\IӹnثdNjhL]TrڌNUFc4 PCgh}wa>n^]6fE8 z_̷mcFYMvDLc=mz0bHERۄby\aa>,=娇0fEnbj%"\_W~9s|/Oxԟ}Gv?_=볞~Glww~W}'{{^/z>R||[{~k^?KП?-ݯ}4+((YDDZonͭm:cEH28ondh`B3}l:T- `ZLCX:׾4m+D`[Ācl8(^(~2y-ZuÕ @yG=i ~۾|m>Eߟ/[^oG}k5翸~ɟσӾ쁯w}ʏy__sYp>Oܗ7?]}z^_k⫿Or<{q㿦I=Y9/}u_!>UW̧t{үݹޓ2pFjב9qq.(mqXqX1V% pܐ^SYt.;s9AO '9/FA@->hsj^AMj @+L+bc饑 Hd& aBXh*sգ9gI@ "ɕ06l,K6E5@ 샜9zzZ]0a KăT-EƗ{u[Kk֙s6w.ݹ{nAdah]0H 8:2aYЄz&]ky38|"nJL|d>ƶ5-}ucF,Xm:=k_m1 BqQ"1Nݟy _7G7ܛ>?~'?w~u񛾙9YLƶmu; ~~7K?ݲ,˲ޚHy/~_?㕯"o74W5~󟹁O:U I];;Xʨ X6h 8R XG$Jp',  BX:"j`X jѕи׶\G^fRC f`sx .Dq/pD0s5, #l#[-65 sӉ |y{+6`CB{1\,ꀡ( HĴB9yno+Xr$ 8Z+G~苨ź0i7q=tĦ4H:X2%kH6Gc^Z;yqG{/1 lZDLJtҹ F?q/'{l]o/>QѠn=Q_?}0qM2K|huzgvq//ܙ)IK4TG7`Be)@cbc,wɎ(t<m6YN_5N~c=6pcnwn\vm݇Ѻ\vNԅ)8=̈Aap&&!mÈ&flX 5zWǶYZ0Xfbq\dhS{39|vo5UĆXUIキh&`׽u??x//yxoV4㹹d!cj#"܌6`蒔 bf%p ԓ"p%Q3%V P$40hA  ڈrL׌*O!EQWhr+c8(48 a(nV^_kljzbXS4^JFQV6AQC)`%h:qjGrk1ՔY%!{g°8˱;X2ҤBBV;k D.MZQ38/K*Vc\P6!T .5J:8Z}R24Cb{ XLy~Lj0[K3 y7<5QBY,1IyJ_ze;?!2Sz pM,I=ȵ{Gs$&spvDc<ۥHCGleb[y-sꀓl=UkGusU 1ex.%192'P)ͨ~,ru0\ꪑi 1=XDކ/qy|/yRv%aun] NUUI< @ɣ;+J4Gө_{5[eNHҌDIOg9ɴmLYhҸ tXEŚ $W LZ^ƽ)hFxwx&a#L3Oj"Bۦۦ"<2o+"$5t`!xL1܇[IiE U.M@%@@AM &%r`ϣ\9|H[A#x`S ō}"p@ ۆDי9: FV|sN{[2&[ffU3z_֠uU3w=g\O=mqgq8m z#Ř8nxmy81Q#dPz*G fBmt@ piϙh撢 S,$c$0y F`}Y΀NEܘV.D'Mk[񣊡θ9o.Iu>EMά,2S(@֖P(fBXF0啦F࣑6C^hnX蝜>d`p`߱Xly6ZpqI<ڼ,Y:`eMX-xvNq6и 򟔖!RFe&eӡςkY<))?:׹[-I 3ܽ6B>x5L?ڄy.5eRgB;∤cpy@~eQٱrb,7S#0^Gm_Gƹu[}'~yd:!cP!hR>:Jw.L 2S FsW?Gm  dsSS3tJDs 2S$ӏgJ|^O9&fbH`8* 'l236̀U6X"IqbQ?߼j9aK)I 萄2Χ'}z!ӃTEhN]/P9[grZSq/PDS(O19QDQΛdڂj z 8NymQ|mG3Fn4鰺dsLus=ẺUl4&lu, E<CtU8.(! ڮ>[F)B)=*aa(A 790P_K,5NADVA( pJEc3#<'"%,"3ncL9z#V{zN).sRp.88Nk/mosc5ƽ0ysykN"jm۶&:D,I#1n١lK_;U$3ubGb8I#DP W n28a>cl#"HD!C7WC뽷~PD*U8d<]E-̣=w䑊$`jnjwކmd S/kϟ:׹IlABfԽOԧ~"@9̱Nmj1h4u"ĥXI_FA,Lu+#&UtJODIʝ"&pDR1J > &/]IHcf&aAڌVG* !S C16ٯH.!kc(VEE^2ox2b0Man$s!exB~eBB boBYM'!Iq")qKR<% VB<8֦H^1O^|ha^yae 8N,cjIbpe'йus=zC`~,8045gh"0GI1 S߬V@ťajRuXѹEDzw, 7Yznn̐.am&Y9(n"Tj fsE*W e$4Bu;ꭁ="T = ՝wqI-q$5BH3mMqu|7׬s ~*m|~K>X9Vr, /VȘhNm̰QA6 1AP{znXP1tBPo 's@(K/譺vrۺ0P nP@W'q@14i m C'H;E bB4,>B8 $1-34dURyaHd=8usq'qwAeq7MOXٟ4`D3s`p|i$ pQ6RjG&nm1:!fj[iDLu &Zbv0B)4^ Q* &($h(ͷzNeD SS;wxz e4VZ]IMt4SYPr8*{ٵGnw ͷݷ>y˃޼yci 3S3DB 3%pjတHw5SUUwgin8=lC$#T1tciLD:F83ݸI]曩z8Vv]hYb/ 1E,yzaU3w9&Ɔ: 3w|8Lgus=E]=$SH ,V0 CUkϘ}HN2wIs3y\jAeP1.ax^{i}!w 2>nƨyH#N-Bmp I9kPc( &`J隷YJ' 7K;3hkM(:EyK:_7R*\4/GrOҒ#ϏP *MZZkI U0mH5t:DL Zx{.-׌L`[Ǝ.s\zUI|r\^§q k"svJn3Q8un?2w5 .JNt _abQceiKksN { ߤ 1ŷ @m@qnnfN'/b؜Uu߾>0<_3>y4!M#rZ-\ ,Xڲ nLc1̱.,>"LX$,<;5̈W!7@zkv껾k~sfb(BHԈT@ZmZZ@+b,(:KKkfhuZG(ՖТ&L`9<{׵}skRWޜﻟg}{p$B9$Nc8A#FHj64H"v3/rjB:oEfHmaҎ.({#}uQG}ڍi, Qq+ԬW|􍸱H"84`]nݸMr_9Eb"%º4b}Q7ա[0@s[z%=F!bsx18fİlAv"mKwŴ +ـ,;>@a,هErTY\1L e@sshܼȒV-Jf >l0VP(1ר+Tr*GeDkմt@7raZB UɫWv m"EPv#\a:ꨣzeҬ+>k3Z_R!]Iv i$ҊB =?,͉-d9%/? c8#JC)1u4!!b" h w&!݈XZc@`"bƩ+Af[Dn9"pRPs55W%`puŐ8SiǢS ]D&Q~Q|K[Ê9-SD(,' L֋].vU ozӧ0qlAU^կdK$,Kr1Wj轻8}ռ50 5 11s|^Tјif1Fe)GcOcQG2du%rgZ;n$ NDBk(az @f6@! tfz9eh  "yxۍ#|MgzCE\Ĝ%HVu,QU)czjaՄ# #"}Cм}̾eNX$Rc߈S[]#vĆuNwp^J6]H⮙ Dtw 179l]muȖw6F'y2D)q,]V{\pT8P'ԆJ$-N>F,(7F" I!f"El,ј9C"2ub%֌F4H v] -j%j tǎϦ:ꗬ3 @(&B/?qqt[̂te0:?v17x#},Mp>(HE\,<"-|T++2 n#@ XWv\,C4B {ı,y(ߊ]߰7'~UcԒ(!V1lhG#1_EpLibV ƫqFo B;c5u^ kMBU!;@c*$`ۘV-ZeGN$aPbl9  S3o:c{nGuQG2GA8-XtKB+ҜKERyѰDFlc:J IT OeT_T|x8S%SB*N XH6ټOT)F -M'9ZY ZSQ;'Լ0Dl:ĐHJ륾tu<<3?s~cR$"17wS]`j +ɀ-]Bq#sfd&RPLʴ1ܚIoMDp&qD4͸BQ.`s)ZSM\\;ڲ"3nPH0D2~tQG}:N$C!2 δh%k-LPhzӫ!r!I5H]v؛}}}iX:: tM Ќ,udXIh^ 3tIF\ۈhnq",S` A  r%H7,%͌KJ2p f7 ©v39 WudNE7Q;tVv/bp eb5A, `!|P3wP&SK|gO.4V/OՔ#XZHYAYGc&fj5.'t˄P)hfU9Li 'up#bb-)(+Toi(5Gb(:aZXH&z1gjR% DZ_obIN6T,4qa"13G~mKcOohNl`u\1VS>"LB|^NgVml­,-ser0 adXɉqon 1)Zo,fqޛ02S;1'T6),m07 +O騣(]z>Gӓ22DpQ CȾ&dcЂV;U IDAT ÀY'POhhi4&Sr koS"tF#QMDq>@Twذ ߝ25bX_MZSsL~;5c9=&T"ƐD4Fw@Mc˜0Ř^pԄ$(F;L sK1hXCah:`eep@W /KaZ8^6xJQ`M_oMKqe:ZeF  &+GuQG}|jVy {³(iG:kJ `@6 A5PS!:5DKSKyNS @g%M̉1S! ]ZaNLrv8iAHuΑgxhfXR =ա<( D2?.2&#bVfݓ=}x`AX݅DLp#8ęDb1@| Ok2@݆ifD;ΪCmЉs,XT3wf>}x,|:t]/""C'37"И4U:fN]HkOz%Xweav=ꨣxTqfa"J8@-EFCy8ΡRLuLrۀ7I$yKۓM#U c06 p9#sӠgHK<{hYA4DIҰ}f]Nv(ZT#[&P@ KE@a;lX%#=P g@]25\BNajMdu:pZuXӿVT1(Xt`I.o< imtި$T!19P۴%Huk޳7ʦ[=B*AJCvtъ‰n&VZr⣎:ꨣ^~9!>h!` $q,#-u!w'B[@ <'qޢ*ly {["?q&f8/\) SDipܻ1؝}N]wө5a5sJ[+Ɗ9(];ZCc^5& N0B'fhO6|,]9JN`0G['t Ej_kA9D f T11::gu&E p9;ᓽLnjsֺpg>T"A`̘]LY[k.afN=5G7(Arʣ:O⺻}>>|y|{_~m D^vOǿ:A7yOANd$2MEl' ',0hbL![-ʃVH`&f0DWŠo0߅rd i}'qő߶XSM` )*zf7EzhwQsJBQEk:YZòpc,@0;($-!eT޲]`i~&s:a 7~y8*9jY9*E* 6~ZX+LA0 1bfqd`MbQGuQhzgwEiu6c5CCÜRH*ȝAL:qR!f"3nhB)ѕ3 NTcIqaDB=O 7&v\}"WAyBWaii XݝSrٕvkE[TRWu37&| N<@lC:z ܃ Nw",OEIsP>zo$E vq4᥉ ; Jܛȉ[͈*\jf Tc 4iY^0"^cLUma'+46r, MyR@췷"h?8'oC19OOg_2ܫ~Lߒ5#a;d uh0*,o.7M"HTDGzR6B:Hx 74J4P|A <w[Pf!p[ҪUI^*!!WSq1 n&~&r8cL BB ΋TڃkD$AET#!-F`JtLF1L1aSc-#*Gۈ;H%fέsD /R]Jc~ @d b=er?ҙ ]g&x{4@}:WZ!g/_L%5 Fi&XDR\ )~0'2s[4dk Dh KKyfq7M- +%b5afb]9l`sundEZm(F Ɗ5.Ef'R=B5!m9ǘiL궾t oQqid$Atvezi?b;קw,'N-,aFkt:7#ܶ 1܅y9up7e%r175'"+qGnM9_ӧ/~ XNCnf7u"VN]םw%E4a>c̶` 9ffՌz-,jDx-y~}|G_?ȑ[d,Cw6ݴhI8&;ˆ+۵tʨH:Ww(-h Apd()[ o61D +ʕI"Z S.87N|vM7t y4O{R+MˆoOK8+IotR3Q+u(4fU5{KAsVA@1s@)m}ezu)ESmD5BaJ1j-Vmsfm?.aROOuQGҺ;hT|2h ʟ6ʪ_Yr&ֈB!ԋy(ׄ]G>ـztL5,}NvV3UUKaH?vRV|X튒|aTK Wf섦XpïhKF<Qts d6,K2DzImΕM Dser,K腅1 3Yz͎FM/a}|̜u覨p<}z9.pO|>/s?8Ա35O9swwi몗K]WKd0}/DmG3_iw;쓿wV|ѻ~o_~gFADww/<olq)۾~|~sqw|uԯDy|>xyxUO7 * nB M#3+u=.%V('Ԁ&mX\W<\>M_-rSh,l[7})'ōEWX$Wծcxz1dTҰs3޻;6{|2Tނ^0s$}jXBIʌ5_+1ZzLmJ~~`pV"Osp0#+a͑]Mt3r-@hגD39hB,j:DkHhИ&ZdSȒk ^GJ&7 ;jxߠ&{B;3KϾQ1Ƙ:gl_f}˪G1E>>V}Sz1|ヷe=gЈN//Bā܁,P6{njaaeYT9p1s,}G>hR{UmL/:`Ƹ=unmɄATm f:@$n<{Bl<ӓ"W*pwG /g5#+=BVxO,OĻ~}_7/?|gakӃ _o{~OGo0xM䇿+>G|W'_-_~QG}KکdT DIO e&Whp> 1c~9[JkZ<)NtEpBHXGf[7:t&<-( CDoU"7@53U(ɗ^0g+6>e S_X tTn^"Mc#n[Ţg`4Ƭ &gFO YِiDtp0|xM4`XZN+$7^sxlz!(i/v\K/*jzhX4rdYް{Ș=l-xCg&i@9zI@k(V"muQG괴֙j~]^^p^gRMo[zQ0uƜzNo?cCuLa6jB`V IV/LծSmdd9_c#[P5HE!?%3!f:w`1ADu&[I *L̼K5cxg~fgZ_.t0}nߕc'`>٭{(U41Tu=lNYK_EX0l1svZ^_x`Y챥k=HNrc}x,)Mo~cYX>\/DtY( ,u"~xx]Ǻs wʮgN g2 %? Mtg,_-ÿ 8_?oUod~]緾O?puԯz RU'V KBsNmyqb@Ct(pwʙjA,?[+|BᧈhRN#JW̉nt%H鶊Y|eCCR!>A;1f:&*F$*=E]p> BAXjْȮ!\UyAU0o 5mI+r*t?=݃(ɯeYysץeMŇPMCPkYz&P]²$˥bi?aƲ` ņj/*։99 M0kkh/QQeD࠸EDǬ5QGuQ/TMNOfP5 T>LJ[pwe$6߰ҲWMCG%CEj3EZP7L6u.u*I_`]fXWkcb]K"XN rsg@u z9G{N*T%$L(ٜ6" zvvtn"!XN{*f&"X 0fus'Q&ltuiX1f?:밙$]1x_ND3 f߽sbuN530%" h\l6qo{>~1'}_֒~ͳ9w/ok_wuQ<Ӎ׫ܱ cv1L: U&X9oI"1pjp.e $9An;!/z CWOhzA -A!ѩ!g{P@F=2mo8;#47Hs_a)͈c*cq6ũftQGuQЉ11F7-We@N}#gn_s^N J-q[ob4#Ny0Khw3= qp>%=䇆th e9ډ ,ux> lS#5Ef cJeTGk 1ˉ; `Ø,&VY']T 0-)WL<0:,P&.סF5\ݣ 4nYXuY*:>'բdlMaGd0Z,s⇴h!0)Zרt qN9C=Y?i\XN7P:B[5$K:g% XQnlyve WS7/&1$ քj$*lšmܦGS!LйYA.e?/cogmRmҳ yf3ev'yUGDDo33/K&HA`RxzD"tc(M 8\E̔怙`[d%L&rnLlK6 u, ċqSlkY[ k-sKB!m9Om__{׻~}O_Ko{YoϿK~[/?{~3~7?~w>?o>>=:Wt}Ot#P<|ޛ>?8qƝl;LTv{MQ IDATɹdٞ5%QRZ+O6 >TC)LE˜dX~ϜV-nbF,a $L bu-sEl6ƺ? -U=9) 聱tvV1 CsB8vff!ò74NI+)0"7&Sqa3!ئTGk^I4VL$O2Og8`Tl53|JYPH0,4芩eN*lsTAiKݬCtLMn 0zQG6)q;ӏ@h]DtRƶ`z$3rEcj GJ7OsJO! 0ZgA=c}AoZsnƖM;M-џ>>4:WpN7p/ykqdZ #M{ds8fatY,h1GJg:WPke@.P7X\a3[RZ!4QD"okB.Xpx ԰p, .G`u>|B*Rd"f60q.YTz -d9`̉5c1dUPx8B ZZϿږ#t=^mG|-L7tfq3hȬٚwtFs4ETe`}ZTX/^rQGukcd|yo\AoEp7hR!f"PYzI/Kw3^$gZj lsGo=-sI, ţun,D̬%'3rSMˉ*fAr./Njt3{8ȅ̘Kyș<nPRӞC5<.& wHWYttPu'3s3uwfv9wppܸb"fjDFdJC-E@dAΩcb#1|s]c+@HU׋K-QGu'g8#<|5>[TC\ǘ4H\f9 8匥7a9KOxTlƣ}8vO qw);@*c"E~Q3o% t`2ƕn8H+N=pD2 * <)Fel7 - {OXH5.jTNFn"hDW)>UJ'BA]^ `$Qf%zMgo At 5zof }mDZ4fR~eCRDy+||uQGiQ_C<>`^)?,['ܝAai[WFPf%|ꭉ ֡~rXa:yY+33zyc9 /3"PO';?`Ӄρ _b9Tuz~nڂX0јb`=Y R&ذ+BhL A0CgLOWȹn%jMG\:sh( "0"{x%ݒkuQϲP{6˭'"@tdݎ13VBts6v>peB+AGo8w&ʾ N'܍b̌Z2ab9 <AOCcSKu5T 'eo[TĨbu@ ?YZw=6i7\: GuQ,su{'ιAfБd /8_л! fc6 ny(&fU%y"\īYA)!piuLEhN\,ypScXE(4fjX'ĜH: 3$|}bh Eo*M;.t֢kYhYz􇡨%wsSss@Dsn8c)uܖYCUqLLa;V.FƎ9$:tjզ|"A*ZvFNwa!js<<\DvZXu9]5C]tF?E1tLEbGٍœP9cP%7h@RM!a4֫uL>J1 ;ꨣ:Qff0r0k<^=q_VT5ZDs9Fm|l-KiLG+ms V"NL& &dvUܖZ8[݇2癉<9dlW5!gt'0C%S t7"jҖ9fIW W H7Hx:@</?\$lP K,"fPa/DZٌ m\PEu`DoנjUN"Υ`T9/f@'h1nĊTm0mF}MfIM_IčÂ$XN108ꨣz05{xkM_Һ>҇T +c\`9V ),INR6" fwYx :{ie~2\ܫw=['C%'<(DlJ6VkTҨwqoS[וhur7M1S9aDHLDmY|NgS`[89JDUw!b37s3N:M-a:=%n^^drbX|08vq#(zGӼ6ƌYfi큜a1FSc6I!b{"9McwsṳA^ fBKZ31wnKkڝEA,D|>;3nfU39Xā&aX]M}Za&<Ռ0cքSxIU9`M591uiK@[cjۘ)5S#}b)8"9]a雍 "p3'>˄]ns+3ԘcC&04Xob}XuQG/ernM L/v(,K).8і$!B\Lƚ20l#4*35d3 21f/70URGjMP6[v*$^tvtɾāF$Y LNdN.h]W|^.SObJ ȼd e- it|YԂIDD:ܖ"@*?WDU#a׵5ffb/:zYpi;- sNu'ayiU7i⠔-3_\~̛3FGTQEC>8>:O v =;u(aAb~PT;7ܝIiGAX5\DHPH(@Dps1a;b?TM4D@Nc S'6 ['P ]L##n:& Ts5]c bV@Z"0gP&@ESm ~:j6gj7$ uɌpmloEwk|{T|2}6`Nnֹݎ%#19DBot̏tmC1pmxD1rY[zԳ*qr3) -DDOM_^z׻!Udb r 3"A>&H` /vMR1(ɭr/jaV\ՔxD+1nN IDPDI(vDo? jxnR vlPOr͂p6"p&( aQ̤b79D$"=#D! YW߻t5G:{f cxv}'Ȯ$"h&Ow]ຍMz;j-@ h+'Qɵ$*>>0 \.C7dQw~(QyF Z@Od%h\ A!D|=~ϯH+6 ::+[M[?I='t Yjct+,ߐmH+ D`> ݝ/w]zT_s|e" ŨXG$3QRIdFe`=EtbH5"3HD0sj-+0FӲIt\ :8 `\2o8&,P""zff"U>ZB8H{QA"w# A80y)8:TT"@,̲~>Nw{YJ3㹄 Ʉc**#1k ~SUn0P  V}fT02I&(jt expj@ rOBݐ4$C|;-R0, 91fX%* ]ũwȄ#"bo#"$i##BM*NXB2̑,DQ(P(3{_ 2.7p%`""61zfDzމt3a{gTe,‘p\-mDĶH2e8YJ/R#:!Μw` r /G tZ)y {qGx׻?Kaj[TrfITUBD$"tw <)@u} l,tLIEcJ/\>ۈppz1WD(բ @.v4L%#/&{aץ5Xeme$ E! ưY`jk-0,Ʊw'ۛѓ _lNIU2^VK2K`~$TKF@D"ׄ%"K^s2W+2+DqPX`[y! a+9E%%~_|98l`NcCn7~i x]z׻~m J{Re7⎻2oA㫳uC5(@0)lM,:3Q¢9 $E͈w%$q-`2/u).፻bfCy*Cĩ"R(P 1:aqe%νe_W91eS2so/Fş+f2 +q=M",Dp2<)}G&FTD fT6ZX3xmkek۷`CG's {>OX,HzuYf+Me` ,ɶ24˰<9/(..Zb{3KZ{w]R B Hb2X@LcLI"0s(G2"F(Hc>x@cy +R<d{%0a!ZȬ,/X:d0(Y,Gx\1R9~Wpi5Y`E2,`+H`f a: }vk|m6e0Z@:h]8 o@.#J(/qh/5"5q!.^%hqrƗyeebۥ|z4O_K+j>uLLmOHq:n7|18~C-'~wAoawZd)H!7&51x 84A f}G_kv{_Ak7Cɥ<%2-_D&(fÛDR(wĽSB: wVv(3 1U%)sePU½cfb0kf[x5!zz.R-,sI,*Sz>^ F]DZ762pL1W8}!ZD j[)3^l^oʎW_?)wR& dP@(8H>\XBy({?NBÞN nՀ;~xݙ0RXؐcåx}]Md<|}B؂4 f*\`Bv nH_)= Bgپzhؑrpl!qIP a _e5e$qx&@-*]_)A ZP/kM4<;pe6"0"E3XV۽_M/W䧞_(]1T` 1(ۡ9Rkwq1'qjEO[ն<sw]51 /]m52Q7U>5@])Ř"A[YWKԠRPRլ {fe" pkVTEBYNV&ʵ>GACpa9v:TDnq|e!LL e*V(ZfY+6""(g?Z2S J 6YEXd|W^P$3Dn,|q.{  ڥW1pHĻw {c_e~8 ;۱7Pơ#ӂ r%6-%I"~o/_?GǧrO~!) C,ZD^˟s2bM `ܻI O REIN*Gޞ@2೶pb|q;sis?{{QۍE#&~P-,$DH7C$3 >on<%~q($1rGrH~± zAK+|e/(:<WC=2menS*uBrA:z׻wY ERQUDA(Uq w<0nGm 2`m +#fY7jTibhBK 5tBx@z x&Bcb(D( s-ٷq!`ì;|<'|# aVЃ!WEW\HY9 +%KŸԯBWEJ-m#:ɭay@lo b3h_O,ƈ8qˍRS},T~8;v e8 ^3KJb{Κc~1wZi9lko|EUCDHs?<~[Zi'H|>;}rH<3"<ͷ1<Jc*y,ۑǶ ^:!20oΖ6J&kUPu8L͛o f틣پFw]bgz Wmr;0 )Ę0,Hr`\ _l0L'D5H!4oK4gs Y^р9R2&/u%c{V;>Zu€uǁ@`F|9>p8U~%mШ fg DꩍS 8X\ f@| \AKzOd$MD v >I[uhLPww|s 7A18,D LHrΩ oZ,LPeUȵsoۖOx ݼ]z׻~Un,+BQ# -s6s#ƯZX$\B'3zHpc0&}ΏcΡʬBD*L6k D‚A2+HXힵaSWC {fRlojo‘u01{7F9bƁъ^Tr9";&/`@WK= SjY 򊀱~9D\Q/+t$Th5*GLF%`,64Gc5Κe2P H &hmcQD鏏ǘURLt(3HXB21BZ"`r>6x8דw][_HN@)re^zfT+ ሰ]'Ԇ᷿ <2bKW <P D='!,jĔ "J$7AH"QJdi>HXfiv5HE10[@BdozT9kD)QϼZYQ/I`o  R$Nd#{>_9D Y+0;ZNb<Bⷳ=tM)Ĉ ,rI_JS@I1Z3q+~v+w'w]KkWB% duT\wc~X*D߄__+QV0C @z qo0o_$lk Xɍ{7]R1AJx8"˜M} k}òCIE /YJ`0PP2/3M>Ka[;DJQVʅWv80.a->\U3T)!/:^YZ5f+a$5+hЕD`< : ! omj+̐J|yy hJ~@gE?w˹#MW K~t]-Z_6vDUQz\"O'6-]qת:`8;_j^Q`H;䕪ЏqLAl䶵.1Z}.t8\s0pm" ;< Jwbf҃vXZF^x> ¬V"̻wW8e~ #dE^A5'f3e ߾>ooߏqeR'<3<tXbomvdbt<3^k9 C${y@\͡@KP&s=O]y¬{fZM\*:Oύ PT]D:۰;/92euV5~5K:pȄ!sNbE,m xfCEZ223"k⓪BZ/~Fd4RlZH;T aaf{y2rG8v"c$2iϽν;޸9ŵ{jvQmN`@oaLlV&!zW߾?&wO׿G&PEg]gd7 Hn>rc)&&@ ]Wvw2*+B5y23J`b;?wS;_^ D C F mA6N_vaXq%`lDhCq?64*jn9I"<=Ok P`O$zDV{WpV>+<Q("J-B' dt+gX`( myC~ҧB[,q:[]ލf]2\zz`*l'T1SmJaᎡoyG 33Y:IH*"tj"=v:h`j+!|q xtF,;wK=wI\(]KCF9HϹaV'/?cc܏yO,pc`=La:pK'y /j3^ɚ& ,GJJx-Xcm}Yհf{){i.FRdzAXx.bq82#Ε8׵'(EG?gg#*y 3@L4!cl2TJ@f|~ZA.G5 @FDD92}o_a(.枂EyBŇbx809SݗX0(^-BUqC0&n7Y5o +l =woQ@5G8YqWdɵwɊ1  "ֆ4ws(&P0ajOkab)!Cu.H+ hK[ 2 #Rw IDAT>jAdxEYX[ȡ]0;g]z% xq. !nDz"S"Y9ZQj,Y[:Q9b#=: N9ـȏKMcvĔrr<0q壩05T"LN!2?eW1 (AqLnfvPf)!o @x$) px3Bn GZKCǷx,$w__y׻q#Ia"N⠒gB@IIpJ1&f61s5#BD <>)c;N{W1ocx> ;ԑ^;q{q`(8/Y60{%̐@p!:\{/_&T`F={9a}[}cCu!3=]L?py>qLb"I UȌȌu.,bFc2Ezvfde2NLҩ$`TFdD#IRy+C=`}akpc'=7X@ܴWD+6:cZ1dZ[ka@v/2 r,w]TdoS2ڸ1Ƅje}a$^Ȩ QAK=Qo4Ta̰US 4)"f^rra$s~4 $! ^FBT484"Sq=A{0ψtҡn)#,J3~ z/[kIE϶(n7"q4 oex>aV y3!׎+Ĩt[3$`Bԩ8|C ĘLE`thlZ| , Kb(V<3e+LO{B_}*~3 "3L#Τi:mβ>1AYD_J9D 1oc-ڶw8%m̀ E yZ>z׻Z>"AD!Ię X ۱ kG"1M22|?}= z0x>)~]ܵ#/KpI Z*\qd^i` 8cCORX@"o5+m;mk}__>`s<~ !TNM`U?N~]'q}0 ͼ &|YYso Mď13#ch29v҃2 U0 x}C>;;Ǿ擿weO[w?#^_{)ܨfN__u_w`,r;)w.f86D`CS;=͓_v@, m#06ylty͖D%g"j@m),R/; UP&HB"hYH"#Jy&VKJF"3ʄI@&$⁈H3$LWm2{xSU,MS%.pNޣ!ЛDCTҪG)iD{P,,19L 5 [{gDg=DcLe𺂏%9t9q5C^! ƒ&=6 ҝDu59i/Q 31ׅa5"؃)<"5f("1ɬfy]\!l漭q=zE7'Lh'X fxyx=.O?cd7BdTOͧ@xl8#B2QNq=B;b`W,Pf. @[p&_-8qXB)ya$gn Z< ,!bBkؼj0Qdzn1ޚeAk>)2#e229Tpf)\͚Y,D*]sdDe!@Dnt9񠴌Rb$"USe3ynUɸ +h (7wB ]?z-}uOηO}~.Ϋ>멿+ǿ˞۾{}o~慏yW-/}͍ nZVxS_uo}:{\)\'̡jcJ=U!iz?`! $`Fa3!;"z ACj#P (S.K3q"bo&# D A,P0 '<RB&(pɁ(9r0, q܀f(F~݁\"GKAj3F]2tш!t5aQ,m$c3)'Ֆ5/9}xF ,m\z[ #+0_y0FF*3}it,Ϣm 3I8Sxm1q@3^3)زjv:\Nvkf G+z|vmA+f"|c= a2M8ښ&64أ}VG[%xn;|qh:Ǎz4" ncG? kkkT<Ƶ3a0Cjr5F"&wh0!NJLB fF XP]m'Š P!7&fI[TsK  qDzd^ =xhH h,#(mSgUnjg$ )#'HʖAQyiFm/+ݒ7y%)_}yϽNe{?-=>|_>龟/ſw۽~e_{_S_ܾO{=/SeymoOٔͧ}ٳͯ¨7=ÛGN_{Vw~<y+\_ǯW6~ O]v~S??o7MC=g>Ӈ}ۻoc\7g<غ4T,/ ^Śkc3a1O'LS\hwsnѩ Β0%Оh0 ^U-wmdK̛i:)í-;W-ytBp0;J"3f;r0QIȌM&cd`N$̂Wt<]7kr<`sfsnb.j38%d` `3ŮbI}l$9w~s"apb0hE]p?mbC J1"gsH`J PQsᄫpqx2aUW>ҝD^s8q0kC>;_{pCB]Q;TJPA .2bkdU)B\7]4lqthۥ_"pv8iU;~q ;7pqKb_^Q{#ñb{a=@ ,m7 صse=!HA.( 4,H9c*jP_9dnlAH@xl5u4N A;u0M0l^P3:u<(yabsȲ.q%#%SQ&e>*l6ԆZh,-kbiݵ^ O{|³1Χ|^?{cަH_sUPzP;+R on,ꣿA˭_oq9c^>W}ptz^ywGwG}+sM?=Owx?Gg}}W>7esD{xڷ?'=qso ʔ+HTB I=3h$E%k#$Ǥ30gD9zCۙfL(SÓ!P uFB"n=3,2'f<\-REh2Oڴz%FCp⃜//Ch0ffDfL,,LHC_UsI[a1!sBDIdI EH&s׶;YtC(S*<-55 |ލ<;5g;!%N#ܓ9,Iţk+]A4E2y|D$.(Lj1HӰ9LwI/A|jbe̚ÃeErd \G֬@HFFyߞ!VXz Șîn& [6,6b%7;4G3,-k46^r* l?`c=n I( I}(w2c[Ha#$ rimt IoRa\0MZ]Uj#Gu",B{DU='>K%]2s:xZ5( =9ȄjnAtrv_n54!8À޼Ʒy*%pb!F04]~ PP0Q+5>q_YSd֜#D[3"l6p@ lxuO=wjHIBzqh N!#pY)W_mw[^/}:}-/=g/\#z#)~O>!s=G({؁Ї=GW^2?)/Ƌzcގ^7X.W`[9?/|;jAn)'^rnR(»~;Iw_헽M_ygn ]/rWhGw `*' bUZNDݷykE4d I$g'syCTJN\BM7)fzݶʙ;S%!)ZSfu9S63f'&Pnt|Rdw,z2TY9C]GfDwe G 2Z"`f=RPvב;6Q ,ᣲO)A `HpPp͜SN5_8:pq֬ n8AͺU'RAJ¦aLtN6dPs2 x1/ԘbeHyp]a׆v'  zaj{m/p DkcꞚ1ۥ(cW2ΥK=(ll6Zo2|.Y <4kNMð)c) sq% y4A a\XH/_$(%q0s0 x6ݞ鍤@|H^FӸ7\*]7$L͖߰-[!;JDž=(7Tjڬ61Y$ÝLpWt@+5K #Vc%&5`0E?^g? _Q3 _<.áΗn"]Oo}D7Q=)e)a8`Pb89Ck lf$ D!@/LܦL%|^@SB Ԇ `0m eMb:,¹HIH-.AN#LM81sZ83R5Z+Ln:WZ=Gn;o{_Gox]}{9]᝗3n.㳾O|ڃt?kx=zww<偿_~=> yv<o1o?_|~ȯr;M{|O_/}֛w8nLDxӦ2g IDATZ{:Q%&' # s LA) p)n=-Hr;ܐGtNLPx1;jʂhe \1OZ-9d^DT2 `*$ `&w{m*v A*pmLۆeX~€@'Kgc 4Cbp֐ :m=j(I"ֽEEFTY^8zi ¬$dLQ4YmcY@ckL8.i҈RuʡH=) BN4r5ڄ5*I #iCᣰ/ƃt )CBZXc$"'Ct(pFMw\c33ΘE٭y}'Nt{?%ÚIowy? _=>/iyܳ8ys˞ǿ[9O{?C/_¨oKI}#}-o~cٟvS  }s~|,{񷊛*S22M!4a᪨+ $"LTJ!Kc`*䴙ʔB3snD 4j1.B@!;ɔ z`LО߱4ݓpNX"G#(03 "R*8Q@"N)Gxr S!0:qR# [`kh>YBku 54 Tׄg#b3IP; ' 3=I>qQ Q;sv׃M>< .{׀y*p# ME#-9%0REDnIx+SdbN"ASA h x()0ԯa05sn{'0 Jju4_Ά񇯋Xy«k(UO=cۆeg`0?.c32Δw٪GpB\3(GHB2ĚkNv4cN8.[8-~Htzf.dbXcP5;ikUeAեs^Lۡա"50v9ʄM[mΧ i݂f(ǡtkj*ew8H"aœr"4M4\v.MmU59H)9xWOU흋QEPdձk8YS4s|32z =U/AZH :/ie;NRep:V9ZKƦW_H9yZi8>Yrf>w'TOSmc~z9%JݚcND\} ۿ|/vVTj gT?m{nݵOsXNM+n1nּChp>#2NY5SOhXj EыPc@qp#19f 8BrJL)Y`iUs'bIBN"Y$13`f'{kmyJIv8wTXD$-KKpI wAg_SQe#иx`P]vm8wn}w oW7cۍ+(S QJB$I4_3J""fL$2 sp pY&!",IJ)f@̚ky4njӥ RˡM QKvTaH)S&!"8Ъ 8L=6ZmYj2GPDI96w"J3XSi0VUk萵iO=nH)r$`3`0h')y$ˍ5=&eVKZa>!tlmv #pFΘ7&yJ,D_kQR1z Yy`Yu"LBT t#͙Co/RBJh=н!u@I{_LBl3{T`i! jdȂ, Bu,n@`AB`՞Hv7ԊUA Ib\ߣK R0LT~CJ`&& Fl6yw F/$ H͐VrqR#FNzxH.NŚߺy<3uۘDFdd ]~R"Z訹/rNUꀙ9hNfi%zZ;ScHWQp{{ NnAad,k<6m`" (5")T5UU%p753)\8"Yףxs820xtmYBYCt 1U-m&Ʈ"TC$ҘcM6yN3K,sITm{:tv9&6.$\4-V 5 .r&`-#)U) ~C24&a8Y/IHDDHز a%%Dm{wpuX{J.HlA6@#b+c=Ñ#ͺv"H/nVei"ff D,Z Q )P-pފyT0-ї/=5hHbsʙ#)% i׌h^diID&#a4X3-u8I 4_L'4 l @ JOE9mFiĦbwQh9pu,z[fVeڮ-o ݑ363=_m&K dXs)'MsFJIHF(jNtS&n:{vuT+=><fm'!$eM4:lpx(da=Y't~5iZR"*Lp>1ɲ[Txñ{ A&Dfe%SX"̂"fQGtz8ͽ:eqtrI0mQBIHH`&%023g\17]e+`נɏ01mZZoh4,,9NK^)6t.$fij:5>W&uת :RByĂX |,0%if"&fW23upr'u""<)[233s\tuf2n"h2C$Zf>jb$s, {ޟvh'-:dSOv3q=Ddx`2wE1<@iDFPT]aWsĢT5jÉ$wgEzCipEvnN6|D#ԣҗB؈) YSJi讈kJ 7Ziʚj d Mm[v9ޫ* l,GOAܡ JUtH8@!@JGHHHl'64B%=$\CDEHi a{9{9몒wT֜sFSE|d%%fF)1p.XpU< zvE*sRS^A*VK;m @:TA Ǿw eFʈ¼&ʠݎ9q5!lhNuy7oХֶGpR#CKDHUsG=Drcʽ̃0r0O?FWjZ@NPrDhd Vr锟6~%a Ήhr"Kc h.Tjy? ]+)M^ Imߎp7 5 @[k|[-hrEmIpeQ,+<`SN 󁪠3ҋ nj1ʪh̴5E.[^>UF7|KϷ0VtI ,F" _ȮNW$3nj৹C6'0>ڙI`kZDŽ3[hM;ڠ )g&&`"5 H|2ͷm l _cgq6s)K{k=@~<1ΈITI-tF 3{4pes6[oXLf+lEMaPx`,Lt,Um9ǭsDBX픙 ⿸ǘr@.gBx2M"ou5?yFB!AdL~7mi`pSS7V]cǾ#ݍ A5-(1|cկ֤XOyu!+/ $:\Md8>w6+Ě7 ǜ8nO(DpbpĀ}@0BYT<7ճyڤ(0+N:@WhV81F$)ZHr4iL[ؔTpDjБ9n[ϓ|W3!0`f!PD(("lzi$fk-+23Z˓Gg.y'iBؚceg&8HQ)xbXpT, hw5bmMUi5pVt`fkYw9q8a&\ :ujV`gQ!Nh%MDV$%S!;i0:/GDRb#/:%hP%fA|!4sp["Dp-Zbt6ùw|> jޡYFR_.ex!OJ? 8!1lK=*)SDY׎q1NIM:@ӂ D: s;3 =My$$Ha'Ys*aS!v?LLr.ffVJJ13܈@"6 '7N&*c4)8 'Κ$Uz q*Z]< P_i7DN\$L,{XށO=^0Gma * \Qe|7trEZ~ɝwY*d;,0|Q;2=&uh(Ĥ~MCOV$LJE墿\'=2/ok tߣg[޹ rC(̈1uP@5T‹pegq_ D7쭻qi0}p7`Da0 aFRm_$,L>>a[PmAMAL|Dz:/}ɛO?qܞh0X3ƽXhK-Dc" f,ƴ.WprܞB X>jgak#8>w64\q"f2yo˗>0y!dh 8c`KtGSӱ[d.9spSz?:ʸR9C\HXü>S+ 'sI-be<̎1V)Y7r& n4|ྖs@m J,r%u۴֝EuW(JXVv%"Q[e#\n*΋ lcVɪ'B*JVHГQ:1c*!a!28W1h ‹)5+ MgQ}ɂyIJQŊ/W LbXhD|aMYKї3Rw){|OV\hɚ$Eo` r Bk|˜pC5=?exP.mNy+>hRnL cT? 5 ohʙ7\̶|}+W_4峇@\ bi&mk8P&QJmZ~ *jRBt-bkm3']645[3ko;"汎c^w%xZKAf+ɱb MKQ;j+ƌ<'[B"ePVŻ A%)KK6k/~RTG>ETٙ(:<\Vy1)$^e,kaFkmmX$av\7NUz]]۽3K&SXrox@W˵].v6l'exm\a봀k3x9KE4쳷8nz)î!̊s\0VU/5+7M8Td-\%DvFY`dr? (VlNϚUJ HCJeA-[(r16xpW13d27 ,-ַDVUe*Ē MzIӡj3'Ag,;gOM@Dv2ZJlH(#֐I'e@'e N#"E7B^425A^b)F۪ǚuυ?٢xaU4I|'%y|N`ת@OwTb AH94> WS!q' h~d- 3{5A۲5VZdrU+pXI9'[ړXS'.LMaP0wʦ c Ö̟^w^mrI KI%qh7 GWlT32^ yP<ES@؉_W6wp`\l 3,oe|aY9BAH  6&9́9tcк-d'"X~dx[v~9#BlҮ ܞ?wkZ5YA8`h=U(&]W> aiZ1ocvq:(ہ_|+77w{s0}ڛ7ohL[cvMv1nc Q؇DUX+կ|廾7[W_?s_s? ƭ 1`=ͬUƂHGq-՛̬@ 'MH9a+ytRIkO7P,Ok60)h:M{Tjx`Z(KWǗ",G5""׿XZ~N^/&b'bxE9 WEXH$2ek20+NcLLq1gO<gv9y֊@%R[un8زiOEyXp"b` 7sȾR3u<> szۺ ߏ7ʻUXߡo^[޷K^lcq6gKyJ* zY4QnזNe ivW2tӼQ)dۋzY}QMr_p\fbN~~\B M:I1[`g8WNa?8Gyig^/9zt `ͅ}hIQS%T\%I8%VwFriY"FD|Փ:mH-Kw̳mBeVxy"f/)E|>8ԓˠA aM̄\w6aۯ|KM8nm<MSF; #, i`g^;>28>?A/{_|?:1D7~'~w7--{_7^os}fov?Cw>1+<.W?3nX^Zzu^eu*Ě\nj 9D]mcA 19Ŝ倖0}XA("LbE}%!RUM+{)]i'Q_,@M' B.TV 0ayPx3SPSbbۚW0a [;w9bOZ=)21̐dw9"%!F 3|U(}r[61m{iۺ*KNSL?`/v*a8B/xs3Nj ॎ j[<(R=א5hӁ6m! ",z IDATWa5ux"UJxR緙A&8>Y!U@ҫ6NPH9A~ QY* 0,B:0e m m+pDոNo RW +]/ȓtN ahZ0B:#izZ˒.67$LT Y4/MDEga' qiB<6d&VYOJ$)íd/MBjtԡD:T$ӕ3M/I*A/"?3^!PV $1P Jt^5`ZB~@5^ EyvNH:aY M4F䅽)QJ'Loh)J\}`{) s2¦*Z914 @8^3c>^wI>) 䤥Q[a-瀗(:<*Cn茦$Ө6|2vwQု0u?L >f``LOoj6̃}NLр12w3q,cr')(H"yI\ å!N!vh۾+a1_֒?~{9?/??__{8~W?߽{׿OK_/ۧ?9sĘ P*R @T\+5CNr~U,dB/zi~6Duz2 +38OX%YI ԕɪ^R> !,{Λv}+M6"h%Q~|J[}*VZxabVoP[VH.bfiQ8@#V\ֺ$e`ep .Y 8 AI4ES1B\OYʫ2([l@΂bPWZL lގWG9˃S*67 9h7&X ǜ$ V4&KӮh11i%QtdљKz&(}NcjUϷqlUϧ2" NBiuqLM${^p5#@JJS2 Bv9J"$;H_YqҔN|KP4.XHk+ЮqXK= ,w4]8rRϕ3֖[I=v4z8qRʸn+Ĺ%zߴ׌nXVcLb+ĄB*af1[Z;PIUVx($ `-Ch2w}d;`s tFk`!a%” 0Z~?Y$yiA&m*©XuVi+qO]9泻=#\|PVy;k`- wnV-w\6h6mH 1%sߋ'?F)#y3 Z#0i%NAzXg~Ƭ@'IsrΜd)k sWEv?F{E*$U/}Cʌ$ed>e"{*V ҅td.{OY CCI@JBړߎ|J]R̄+6=}gqI\d;R&>{ ` 04. OOA;ṱm[w&$-lQ\hX@u`LA;EF*UE*@5兓t ͤ\^I/ѧkIZA*TLQ2\v"&BW4 fsBqizLX@`YgFR=>,T!ʉnH-9sbhqsA2"c8!^y3x6q5Ⲧ2]=_x 8BӘq?|E56\'TUnGr|3N>3# bQr$y[ing5`3aX5)>sH0 V3J]Чs/D1  ڱ/-ǑvbQ| LazönjÂ&1G@Y2X ]>O>i=?===ޟ>"Oa NmሂS *`Drulpxx e\w+26U@,+|tBbw'8nME7&yX6h2žu'(%\|GZA35žUy8 5Ɓu ^KbkrXX[36ڧ lpq1pc 8Xgcm׺٣tUӧi=/K}rZkc}x~oywͭ030CXʴ+ |A]i'tN\_N , {'0cYڭ!^9y7@XWyV,kI|ycOn͹W(~]Hun=sp6Ffemiᚵgrk]mKÓ+o}d۾]}i%?;hڲշf:g_/i8pwPD\w*f=԰Ci]of{o}֟=w-u)J.E߾zm]U6BGf{0U0]^%Lu1|u.'imREq˖їO`j){7ٳ7ono/ <[W\?W? ?}}Χַ<~?x//M홸Hýa!bfwcBaQ0sU*_h)‰n#{wpAk EEJaQ/7n34xg/v 󆹮A~lE87fb}xxQ[%x~+o+"f}^A`3{6gfIk 1qAY d >o S{7 '"W#pe G#O"At[D!#fKͮ&c8}P+j]zjuI\9 K-M7''Yϟ(@[q:tVK(/GVj2Z1H? DZ)2#@ A&dRuӭ+}9!pŦtb/7Ё}o Saasv ;b&1cYL zLg; C1ƴBcl@6I({|B<"6&hu&?z;i8r*(D" 6c&u)C h*qhVu>q;|®G,='DAh9٦u8vAz^g}M"GjM"BXsطrk1UƎږH(Gd)&;Gzcw$)̆+je|8nEDHZhnhAj-4;U(c̫[d;pL(rNYuQhVlaF& ݦ%D각#P §A~@}Yvt S|6ȂxԂD71|.hACCf94PCzt8BfhHO*N)d̪m,|{XBDA7kqҤq[0eu]KDށ`ilcjaJfe#,QS8EmEΤÉZJMͺ^/?EC}?=>?_%_??+W?7Ӂ}ɿ _o}g??e? N aas 3".L`& vE ƶi0Ʋku62 cx!dG}ivq#lfs#8-R'l>[9gwޗiN|8a ;XiO˩RXRnHמZ1 +VYdUkLpw7 ^T!*ND"LE""݆FP=͏8D:r`]P2GWOe:"wݮ#g0|eAѻ`lNs)3'QJaAonyYZ0&D 1wT)ĴU--,RüD~@ņ&0#@YЙc.d X4Ng||gzr()2?ϸ>Ol\c: GI񕏌l̲\L8pG3,u&nFA(f[A`Y }IJ,';LJ"x@ 6/_) T#pFѱ< qHî{l03̼$%PiKoI!wN.=ijXBȸe}ض L>#Y03m- M #*3*BDFgx44pE1l 0 V\[ IDAT3UAy6zwٹTX+Ϋ nW0Z!u ١ PHl-ڥLyT8|hNDxw@)> pPETx*47$DӘM:o6uH~j`~5C~dPXY+ @EBΚ&WshǢSQRJ!FQ+Q+*W`0 #s:=m8) &vD`'㑐cNmi-}W<9Lһ!pi\ 1Zbʐ/^|w\]?\g23}<ֶ\gw 1lT+mϟ?M8F^KÓۺm^ iRn+3-5j%:JLcپgrHV` 8-+>"ccy0[`\h*/o|'~?f\P]%c~?W~oOY?ԟ_?M_÷|) Tߏ+j<J$)WxDHGޜمkc+L&koVPt{C*c><Ji܈.NC:fYN~֖V/^ ,YOϕ[ԉ0˘ *SYZYU+*H5#\-)!fiK:Υ)1;cjC"tXN=Z@96,7&.Vêma 7!`DmDLFR*4H7@pAD)EDDhvOpnC=b'P)!b暭ȲS*T K*R lהQ*J RŃj)EUUZL'}eH'rl6B1WE떶J,ca <g#11N$K9fk2XBRZ2=2q|ǷP|) ŚC;31MȰHyj9wVz8S'qN]6gXT!N (Ԁ9 4ofaJu#ڔM&/ZڲU=`T<-s\4%gejRejU6n>#@ap#GSJdƣZ YI#RT_Hu1M*tEYd4|>翏*aD %dՈXͳ(7yo-h#LTqPG-i6OKn,f&hfbeVf[JF ~ny"F 6(]9@\hAM`lLRO->%8<ð)˯5`Iu}7tY.ḙEF)qN"/K-N<VµP,+3 ~ї_;~o}7|P?x&\Cf@L\[3ZZ\U# >#o&P R WIMq'7Y> %#(p8jQF`ԑ=!`&R@5lNېGnb>2riXi yy M<7] >,; )I(`]S(,f9h0J6MI!c)2G;\go m^M4?Kԉ c.(Bᑄj2sLܘiBA=.r7g<gbsј쌈uT,сD͌R|:liQ]( 6v1$\_p^.E2HR=BS< " R!k,3ܮ"CƐSCb+r0'^rS_rZtU0.3l5nHJR 1=WRo$~wŮX cMO$sLAnxvP FFLD yU}tꥱ+PO|xQ5TRTOl~Ԋ'OqsS[BV {xK+m>tnׇk9H{G''77tW!\P\xv 0KIj}e2Ye^{k.дŔ6pQȏ|z)v^ nn|{juַp9Uf"ҭ7{t"5FvDaR1w>Zf7FyHO_F aX.VJY$y/D.́nZ%PS fj~^k5µYKB`V r) mxy|!p|O_7y{sC?CIϟ߽c?}>_1;7_y{+wmM}ɿ|oݿ+??~kO;}uI]AMz4*--ݩq1;\Sdnw^.6x``F\d  @0e(u :G2?*B0Chl+8&1-5"ffAH8kI<""$0U!%fRhd&"o(DDRvl  f)) D)2=p '"{xZQKF,%73Q.Ec3@q["TZe߷MeީX& P (F, c;k0s̒L*F"hot"PN;vA%ya~,f[{ͷaHv=1d1flz=ҋ+0Hˋ[qO YZaK1"2?72oaxwM2k?~Gt.]S4 0z8b Os \ `bjnf;( v͟עwO OxֲRx9lԦRD "AtV:q=òUfJ-0{&&aY< R 7 f()- nFR,33[C4A:S8Aq0SS3LJVZ"3e%bX` i6"1Fu=jNsR%Fz Fg m nnHGh 1U/ɧlMR`̺ఇs 'ND(Z1Xɭ,49uᱥj`B%oԪNHw9(aSҸۜd),3/Mn ;#7LDYNk[[*uӛRqDm9CZЊdQޯLJk#m^L3Ɉ}h+iLdۙ )0E0\?_Ap`Ltu^G T!qЁ, 4qnSXƭi)eir1z8ZNE . #b0Zwo=ޱ]! _?AtN16tnҖ07B60z4n&:$5:HD"_ %1Vv>N4ںz*7K95aRR˶mo.$uЇ(q`<\tz{#xk^;h~>b>t PV 16qa&!3[׊Qݢ{"̋<^/_`~?gM_k[ػ?wwwz׻篽@o؏mm/+~u?7[~ju%³9,^ !q3ƂVd]Wf`fAH+}L!@Zo]nu.snӨ>Ge '0:7ܹAM]R,d#asnvpMiA5o Q:٧ dۨ P 0W5w0RJzL=" u GJ@ˆE(1 b lAՆZKZ{3S~w59ޒ"DP1+*a"YNEs[EJ)E0G#P}O';u)1e[J+u- m1F3gTq5BV^1|@FǜԆ@LrI#X1 &Uȏee(eтP G]砥ICVB>vSe:Wf;1ɝi&SmY:G/N+~>H \u^0Ggыpž j9z(| xF&З!67'gxL[ɻ K:92 $P̦L`!VHx 8bA@V :;@(E\UBEǰ G37t{ \7\Lk9M'Ǔygul㈓VTnn:!xjI^If2LE"g3niD"G4Ewc*ϴT0{,]X: yr{Zu޼}v[G>&1'q0J+ܡ jQ<u!" ѡn?HvE)TMEɫ秷|]U#B ARd=s5 3h*78E~\i)) r8ic ^ 5zƓ3NgnK!PSaUWdl'^jS/Hq0.g=ˊ&"+9WKK f&h4]1g2 ͣt8ഔ'*L[kpVU(RZD8Lwwmûuk8 "zwcJ6JW_7˹iYG7kx楏|mz_*8_oyUP릵ܞm}@ t6aZ;$~psɥKQh]OΧ NPXs |h9ϰ_Otw\NϞA"=}5 EgN#C4c!' v0p60P@~o^}fvwa0znyP1q 0qcV>o:K߯.R">JP[I Y܅%Exy| [?_]z|? ~/e4+[?};{#<) (FD '`6fH.sW/Zk]* XgEsk|87F.Pw{nmYc, XL݆c۰A4ZKEZZpw nf>:p>󲞖D,Zt=D%Q*Cu@ " Xt V*Nj1 ~:k2[,O f6aX+ #L,ecji,=L?|¿0 }GkV5 'Gp C)t4`߁.X|겱m!C r&%@C͂9iԙOb64unSi1Lzl`%fQeRmxE|&1s@aZuwwg‘x3[bk|@/w= ؆XZk6Tΰө0v| qKmr͙yEj3I@Á1}6rtXy[ƊܴgmvR:/by:u=p8=0, Cኞ#w't^ǶϺYDZݦ"{+juGV/ p:F t&*Hi`;NeVf0,-70mUD`YWa?c! &3Xp|n0{ak-RRm(j-1., 0 |p b-RKۘ)v$ܜ(o{SY׵yD!7 wUV۲(tG7}&^Vm8j+#(ye?Y)hm^XkXY0;!j+zS[*O[*>}K]!S[9K) *ž۷m5pwCc7}p{*mm`tÓ[ZUHkna_}? ԔW_{kUmx~>)R!!B$¥ {]HMM.B-ìU& ضa#{ ʓ ƛ>k {vg PSಃ TᎭ:S1i3nI0`"pt W 7Z*^{OVn9 B [*z.&ηƛض cD)t~TmcQ)*(f,ut%+bf!=T n/#*/_};( IDATy|s{?ڏ^Go?'w_w_տ3>?uTmWKz#Ҷ("4>b_-a{4Qxxli7`1Ɣԇ;f?h rRa0GlvYPAX7{DX, -3am-`m,ﻻnt!" P&"V[94q0n1YIfR=|͏G Tt-$фT-<̳e#'8f&""l6c>%ݔJ"A0w"R4FO 3#HJ{tLh ܉X@"bR5fJa`Oo%@і&EA1n[/|ozI1 }ԂKc!Y*+94  1"~$Qcv%Mx6مvT/R*Y/G/)3Zᾧwh\XR\4tLy/0@ώlv1B 0L#ȧd,8ckòtrhR`"i,O@E/## Q*j]LwQ1s 9z[aG8,e]o,>ER$mx& 0$rcjl*PBjXдB2+x'4 [WBJ8U0 ^o 0{F'P&upʚ) &ۏBG6,1yŁeICd*_8\%H+(̜P+xsݳ׫ q 6dCcNUx߇:A Stc-ǩ2 \'9`\T[e!ip!B!ԊD̴,Çy j 7 (c R4);T'ah$SDCO{T*ITZiY3.`R˺.me>+3 M)NXog_yAi])X v"KE[fjİ!=bLN*\煥5 :[xS<=ݞO[9s,K(]][VMjs-2 # Du)"!R f)B?t߰_aonr?Uede* "nw?5]cvlۧʹwfScPA!pw+f0^&OҁE27dzͦL\xv>Y,:dJ,Z.h) S+\ ֢-uYœE伮1:k)QIH 2Z! & GXoM># +FDDkY qbxA wO[t?fbmL4"b37/yI&"}Ub|:iٺ}{UpH\a`ܠl}k:$n#XSA ?_~#C!v9U;6nrLpSUYZ*[Y=,X}4au͢,p̓TUgGەs3>uIƅR^*Xi Ysaߋ}3xk>uc$ `E@V߰*(x[]TEo.Vm-!&2C"#0!DADH%Z9FsD8Q!,uO%m6uމ XD7}ӽ S &"R(H&McM83dEcRf<  L}im6.LJ>?1=nus@LHQժkɬn+ v m̿#]w;ksD0>l:Q ,"rszxa>jk_¡L\5إO8e{vV:`k_1 XcE&3-7E6DjVc]$Vw32  /^*o!6g\Y. teO&@5bb>6 79kdИ5@bI8u:~'_Nݿ?<1縆ސWo2_N{98f> 6%dĜa3$hVkuK$sGYyr yw||Uϊ Vi>j@[(X@\5h)n7 2t˶ 0k_@ٻ0d2goUݢ+x2-FLw tCzDج<,\'"B,1mW2D{ !3DIL 2Q63E(` #2=2Q(9}+v(j$R%&EjH,1g̥s5kO*ZHD"yipbpY[fXTE{g`$~(J"<#kKJ k{\܈Q|Vp}T'j#ޟZCGid 5o_X'FX_s**g7US  UZxV^ՃX?KI+V>a6y- L`QUvL仴eL_R1hOfv;nnGWTtI0k bwl*v-bbuw W&n"UR4708ku^ KT(o䘼'@ =ﴂB+T:6ng~ Av2 i}&VOͼn 1urfаp͸7iX7e ]Vp,o3nՀDůn\0:nFLx{`:pO3u)3p@ fRѮ z[. }*UWUv`UUh YB1ט&̈!LL>,\ /\OĬWq% ~uZ-d} 김\dr!il]ط~*J_&# 4/+Q#FrǟY9?1 hp^6h_ǯe[w9Î⣑6??'?{{C|׵H@ݫE`QfUAde"խIkny[֠L2N<_81W_X%s$|_akWhQZBBy 67ɢI2wHV}Mk+@{EWkқ>FRz:2D3 g$܈8t~lYj͟(#fqSW]k5VGj>|2W'] *.Xh_<[RFڥߠǤ̀U[>- 'Z_8?_t.#.4@uK v5F2?trd ? ^M׼ 7R0y!N#(9s_bKE`UOjUUxp>WQ@8MZ5jmkk`NXRUkuduOy\C$Krwf8h "gN9@Qp*)\5\L[Am˄G@wvK m+jHa+8' uInOFoض>*l9w̹iUQQ%8_2,U HC86](b@xc*Α}[E$BS7T wZ۳ֹ25vQMc[PjbXNm}ٚeahKӈH! iNۑƒ)8UT@6gx\@MX6H&pD׹,0s@8,WSR 0j6K" Ӻm;r=hj<p"9?@)o:0@fHMisk&X2bZk\/|4V"B!6Q~qIb;yYMDdI&ޛB8{#_-a nB6ȣnh 6@,@Kk1py}!=e B0M,umޒ$xTm ؝TrGXl{'pkȎKЧr:*yGPz;$2enaf[&]x״sǜ9("nj?cN-BUm,ϵ&b>Fڟ~)_ǯn/zz2ͪ ۤC <簄lU98<6,YBFL_$$gXݖs]r[%v]6@Iy"o_meX=exm5Ti%02VOhCk 3;6s,+sa3#GqBIec9g^U-a #AW, iˑDM%;@,h ȉB4baZ$"RDs\nv*s"jeIPX&jQr$sI$n wk<|al Y )OMF"M7!AM9X!mvL"ߜQîh `BB&*cYWQKV Bӏ`^%JʢK|zVy-b$ cD?7Zqܪ+| /gx( bm @7"dѭNo*5 9I)Z_Ssku-v:2lZftK㴥,Gz_ŋ yaS  1cw`Z 0OC+`P+eV!CFuəAy]+JnLJm :c݄2Dԫee}cۺ3Ѿws*Q|rJD8z ZLH>c! à1}): Gu(WOP:kib_"UL%`.3![zb#IޠT̈́TIUu6n#Ƽ4^-B"cDsdzSa33È)g}v^vh_m":l1DWfbjq/Y>a l|>O'X-k n9 MP@hQ7W&qE§puFP>:EV&m9y3W" n,4)Ѷa?ǿjClÜI~:/;縮[ۄ[&Ӿixor~qb1am#A [;nK]e*x wǶ7֭@We&O(;)2e2c8SA`ڿGYÃ=<ckJ1$jN)&ue "]3LPdkS~̘'̠ >~cwhZᲅ-;^@aۑq/+n/k۸mқ903n IyE)My9`w"}. ^SZn}z9볋 -CQ]+ s BzdD8}ֺh+G½t =ëTZF9hiksN{@cG}#njs"@$}`iD˛fBU%d9w*,2R9,BL$ 6֎TD#b6=uy⺖,ɫeq,dffɄ d51rac-0m"$ )>h$XZ]gqs+_4;|b㳲 孨eqoLQK@HYc^[[MȎ};6pii4|2vAMז@͋ L) H{aHExPC5Ŭ 3:c>xX D\+nd)F DӲSl`^ HCu"p]wX@V t4Xlu22:5|wi0@k/ %4 Q Ʊn"rd+ae|\# XFO9 O<՘[ ^;Am[2 YF:-J()2 :_U B-n*<$24֩7RH2 [piQn%H I:<[G$ cѰC;nU;#bm_2DAd H( bv03iPULV.A@ArڈUN\D-ҼnUVsQ-gN Q2r1$ [ 0("V#,Ǥ Um/U IDAT&&m]|G\- H]jl*ȗhcοU&^'Ή(['Sx[ex0͵co_ߑ S~G_pLJ,g1Ǵk uf%M)î뼦tus3'23Z։z}\D NfQ{d}#Ez1n)zemk$:{ oMUEDKf(Kf6$|F*ho.;ݓ#x ǖ–9?OqN$isz2>As yafy+rSȞh LG=q#p nJ@4. B%R@܂@ -גv]sc$bL)3ޟд(0oK]ߙKcGM$O7o{;<3|߾86Ut>xѱگ{ Ce;1%TBD̈ȵaH_Z뻇UMޙYV(+h1c:2b(*yԢ72W 7]2Beǧ^#Q"EM t0KΈ<ƪ F qjAӋr_LFl9/|sOf9pFN!&Uzl>"bp!izK*DR lۦͼ1MsE?әFD$kD-&=ECfXSI&1 DoN"iKDUˑEd2|uaB4b+t͔ !ec4"%20Z/.>eJs,k>Ʒ( yP|i 9ϵ3pCLVbB%y Ǵe%%pc$|a|:Yd4 ċCWMM2AS@OZS$.] Qx6QdU4}]Y|eh_۱cA %vkx¡~@  4,jq&F"'@`LV.Lq!#uP+R[AB;v;F qH"k>hC_sSk ˜~SWOGڭ3Se[-"-GmWЉ}fVԌ:b#'V{1{ME)3çQ}:%NWnF8 7ׯ2G)ce7d={Ca93f6\ hhJ(EI5ޚ*!4Jo gWҋpO>F%M *Es|*cq^U~*^n*#) 8sZ0Džp02)2>Wn|ž7'F3AZ }_ ~y:#yaB:g1C:fxG ǘӬҦAs7<~6z? ~|}c3;3,Ӽ7ݛt q @UDAc=:&hׅ̜?% c%G0@PmjS#IϘ~=? k}Lڴs ܯcNԢC3 dqeimk6qlxꎙ|9"]{C|K! %7x݀^$x.4reYyd)[[zcׇ^V9Uf:35/<8_h ߾[[G^WaDx<3RKёad1=xb:~GoP-+9 Gl'Nz<,ŁUʖ@,o9F"њqP /@Vw+pQ%bUR;. b̴fBC/`Hzfd9"*>U?0?X@3_y^2`YTAz9y椠:ƪ֎`8V*HOkM} ̉>T͈,Lk;M{LR($($δjșKwP]3r0q&E[,GzY31Nʜ s5B:5Q$lNi5UDN7Ow` g^58wajmJ+͢\70ƹ\&b(c`ZosL\޾e(Y%SCf\vȭT"2ݻB/bY⮀!DEƶuиf\pЂ;fe}`lk,nKYoo:yb4Zvbx 8.,l<xi>C[ DFu?V@(,jP`__B#\̳ᛗi+2Ә 2֍1g1'4Q: Qbƪˉe|LLCc<q*")B{&pr&y+_bb 6K+jJrm4T 0,jD/Ҍea^r@*K D țSNeóe#ΔonRvu!_ش&x} 7}uF !p9{[Ih$A ͌x*Uy@>c2󅭁D/}lrHiöw}ب襭$ U$jt`b:!%8G csؘIwWei&hy)޾ls$ypalHΏ9wy5`H 4F&пj̠7Ɨom6yيϬ&!?=OzkǶ ޾~پm]c>/Qf䌸'.&B*C!7 1EضMEd^ccLs2AΰmmG"jdsw?@o/3lu \/_y?ޛ43"3:#"PǾ(_GHRcVN!,I |O(" NTQ*C ix .c: z,҆㱷^yihΕ@4023sZ8-.BkH]#UZUT-LŁw(/rUyX߰ h&JBkh]5qL؉K{ôhJ5I}+Y9-k0SGƯuQwˌ e4FXz 2XR҉Xa~nptϠ1X1LF) 83zgfb^!HH-}*b7UL`Aۥ)!])2nc|V7(vWL>PwtTX$mCSrL1gz mt%1[$2Uժdδ@k Sx&I'q&KFEF2XX"2P5  ,Vki!E˼SW-2"&×kikS! OϘȋH2cEdAmqy3ل]+RlbX73'➘& ܡVcH"IN @-8ִ؁NQCCnA>*|O' VDZ*%h/cX&e2] q1GYֿ583eo)VG,X\խA#p"sM-xh0|Wjz_[Oќ0_2bօDwb,&l`k 4eZ/'V_,n L  l6Y%". [k[uMwL!;#xVLlV`w{q Z\FPRAds]ל*].! .z=2=1gDP"k| Bik`[*d7TQpxC~P{<˗j%IKvdCxژp{<9ҦXoz׵&A\y Q99noݷxlKPcLxJ z㷃"[SQf 8pfL ΄uu1c ,DQ0J7 Eck[x8UZdA 91Zy^OL G?m\]>|ЭaM3H&b5`lڶe`Zt0 Wfut7 fgxn<RdSDUoymIHKw95X#%)kdW%@#?aXM ooDt>2 &BDߟ^ͬXQ{c82UX#j Ie1.z\,?owQ&Vql5|>EH<!8]]]Q˩ El2~L&ЩOE-zk5pX.s,v 1,0/8p9.[mѻxMdbs&J*,kP"Q򶀱X3u) ޹pUA̎.D-  8Co[n$ ۱ibބz([l6kN1ڦX;nJ4 x\-K~8b9`]Y;װfeLJKb]0kw1+ OHR\ 9 4Y߻ \1W@A1`ce "zCP6~5;zV28ϿhP#HE~Pu:#f$\^_cSYLh @zĜhJcW!N&BE0v*o"9ivR"]nɹJu9^aAo\mfp"czUs fOthCy`m׭Gm63("|cL`Hlmp+p?6Kpv0{$kM2pάj3"sc,і@YW^Uׄ~nT2I:ox<~Idૢ$hFx8wU&Ljgp޷L.#>Lwc]v9|"ݷ]/R:hi鑮DE8B|aI WTqPK3?Ƶ\a0SW#izcV:$q.y<` B{6ymOtAp9OzsU(5#azWj{- ֶ)%&pGr&(ckvJ29܄" ihkV`pgަZ|"eЈzK&T5f͈̚ë ̟+䟥Ǜ{xzd*9,Ku8jN_DI"(Vo*]QւZO+&7ɪPZe"c8d2%5XD" Є2O\ G f!p=jb@[6DhD1f0iQ*<1cV⮩ܰim*'!Y% hՂBAGi_sfކվss*cs\%{X[AJnᠵx FJ× / )Vik+.QVeƍ[n`&qģ/cOaAvT?豚c}›`L4L[v@pg PPBߐp\ڤz*ļ-' y`_3X IDATh;ιǩHAй7KTʵ^KItO$z[Dp,޲eI4-=ښjS%psgDRdz01eO 61Ht9RU#EQ 5|co9!!vic̀N{nc秉 tT̐TY&p3(sCd%56|}T32@Is5l{6͟|~_ژ Iڿf+5~;Ǿ7a̮k.{WiD4z뙜xEsf32 u=p7Iy0Ɂ ĨOW5YW晐lk. t=lHnBg@ ntCʞ7y{{b_~8?ʜ09ky_Z_fڶ0$[kL/g" fF$LG.LEd9DEE+j凤;1=YQAy#0/|>qYO5J_Qe D6L}msYY]+:# +z_UjO/vDef)@0k 7˔cx-jD<24򶟃|:"P6"^VSLfab|*Y_h1pMJāM $l N4AkרwBx<!~X&`;q[ӌt$Vd79!&8@tE@3s:Ra̾=lὯ]ۆF 4+Qh*Y|on6?O $. yFi芭5#+|eA|28ͫIwcۡ]e FLTs̏be')Ʀtlmˀ+jO5Ƅ_uk{ߛ?_ϣ{z"D maš7;'cMqPs8ǜ6gxiu:~lqxǡ[7:iȤciۇE8*-ֆIob6JCjRh荎}{lѿfc[d&Kþ}ưdkK@N׉sh;WDdH tLu9DMZZ;|ǷϏ9cd5Ŀ=޾fzaum0Z}ukrlf樔Mo-Ǽ,?!ys=3"Lv]5T*V(s0/5 d ҪY` C뚃2*, "MPZ"D|V ylzHտcrdJՉN=FDcrU)R>ǙwT@ՓRiB2x|1.AdG,O}[el]-$V>",.|LDM$%ȉVv eģPLre f6fxYtENj0ۢ_j$b5X[kǷijmy(`mJ7n4\Wr̥U#w:I 0=uy -RK+I@1۔ c.DnˏPq֕FI|0:J[Y} R * BYLRY_'X+e 5@`40a8 tmWfmGd^וɗttϗ䧂q-Nmi4Z}uAf`CAXv0$qlu QR>8r}o"+qZz`\x  5ŵ9V8,vx?Ct.09lza;m76mmksmKNKvY "~s'k$X$dr;ANVDkPUD,eE|gRxmO;+szqٮ}၄/mGq9R@||_ޯoKWjX4 m2& mˤ1d `lDDr0Ps:&6խ1mN*#cӂy]^YȰ`fĸaMUDGL"\z}^EEthoyILו9(m/.^#AWDZGD2݆2痷DZo6^1^߿=K3d[}ذwܣh,t󙥵krM)ɮ_c@$6} T65̌q0r%nƅܶBq:Pѭ[){Dtei6A⼮o>ݒo`Ʊ|yu*V!8"ĊURg]+E >Iy~?lW=wAUޚa^YGqA'q9*%dҍ3<$p Z c]P*Dr֚hF^s]TT̸9 ٘5*d2RzA)>yk[yp T+P]FnL)zDD{fVU\o 4tޱk ^f6]&׉י@l`FH ֢]\ցDq "^MFDdD@,49a׉qδɼl mo %b߈=KMZo%,)BEEjWhZ׃PuND#OQZsu*n̲"жV5/]_~ 7ʏT^k>1)ƅ1@\༓<j@+6}1@}-7W'<T3G2[F p*͕v!hi= n,@[$xeTz#WҌ`?pTԓ n@hH^j `!&Ԗ$|i tWVNVgb|GI@ +mT/)1T1zɐ>y]>W$DU2r/ް?Vʜ5'Z*I*M0@;BץP@Rif9X׬JMxl3Lh(an3#x,|#-Z'DD"zc LP1bQ d50Rڙ͵ p#X"N >Uk r9 $`ex]@Su^_/۱ ryZh<҅D£22ԴrUD[XHw4 o `@dL蠀 DDc fHvG5?u" Mu߶i{K=(# DIevÛ~5J6P:2-, *LDR(q&gdde!q5;n$Jj+Bs>9E)&D"-`LK9/=c[D4"=33c3B#&fsVy~C>qf6.9=AkȦsZuF2(0XJ@ &(AEHV T Oj´ffQ;ki^rd/ 8J7l%,R[֢].R@Di,W!{5̬yeW2EJO`{%\U?}~_իc}AQf75iZЀ z_S7 VMXEsDz@zF&%[SR|<_pq퍕3Fp>:N}FCP=U`Y2 ftn^T CǖpApTM)AyǴ G H1mgN+\ ś{ syXJЩ-}8LVO\VL`TdVAD9⁜w} J")NUo4p[Rl@Kh=jNY>}_'f,eS}7q^Z>/N|\Uf꒴Qqtsu9R`+ei^_0-_dсLy^Woڄ-'@q>U}D []f$"%66B<>W3̹Tʱtc֕dA Ajp =SpkȶlJYΝH#ܪFޟx޻r[y\JԶsf w7pdf9wFMlz>LfLcj6!b!xDZ眐HJR9_۟3~9oں s\Sr#s k+s4s>6"i|]D554l ½w fiAHtm|^fޛT7])jc8(ڶ¹wmMHM??)[ʤnD@z9M2&O9GJ9s`΢#$@ 1tö13bǘW=F(#`~8/0u6l}cx80S)`ty낊_uQN&ze?8OenBD]Ai 7$!"|N1u*0"ym"PB6wͼџy~LbZJV>DY^Ds&"lNHQH m?fDA@"L \Y&Gₖa&{B$yMx03VMSQ*Sdq  TЄQ󫴡+65lj"fkI"MUrZem#CE32+[p ^waJIs*5TRXNIvb.G7.yz$C3†(ay76br][caaLʈȀp5Dff05L]*+ eS@kϯ9p,oKBHq ΐDk>X,cl`< AFuگ à3&hl0Ƚƪ+fZвlMUX(BV%"QHQ/wJ5B$5 keE'b%x lFȞ0p/5f%SR7̑Gr}K B0/.K(!9MUUڊRE*ת@f]S;V{64e0[EVK0Tq٪{ճ)Ʌm13Xvܖ0'H]S\e4AW0h)S`«aJj{Y `83};86a7TE,iZ# zJ0U?B굕)3 UPd,NCչ> ZBƶ7"uŬ]UT`RޣGGHCW0dq)@+k羉'#ƸfK{50N >AT$TD2:tY,OGFL\8#UweA1@"iU.LV ) ) @XDn#l!. Lpi3˫қB#a}pei6%nK&S"#bU'!d-an|]*x9~!`i(%L*2#5| D,925F{dմ ."N<ωXDEZEAۺ<#5Dx 7彵H[kr]Cc?:GfT֚j3nI mOC)B,`7D$**mNJ"b Ƙ1x.چo8&cYD"0!Ŵڱ23ޔRo: 0899KF^ϧ2q8<&pdbmMdӶ{^fCH9a.H)pND"2”nUX *fmq[ѩ0WfH\+Ҡda2Mua蠪DƢD"ڷ194[Ke:ݧ1g%A"`Hbq"&=} DI U@;V NJ umG*x^Z&bsN @3a6fvE@;lFؒVV4['Ŷ˾o>ge`aD @T3. &)[R誄yn?-ЊK,JeW Zxv|Vi},V.h9h- 4@λ햗uWe ow(AnG;|Jt#383P^D]**Sgnr-Y佊qу򫫂E ^pg+?X2rצ#{ 2Ww=6$pEMF%!cU~OKxwBcX1;b+ZE! T`ǖ# $׻-/@%2 b oZU2L[`$p]&,W0qT =)çq,/\M["˪a6O,O5*) XbDWsiL L/;eh/UiwF͙DfmәPGS4*" $"ІDj[w[Ц&H6GxSJ /KtV+ WZIx8!T% 38g5*{oLJ t+~\6HEx30F܆e}ȰaH,Iw_mo 4s 1,ՂaY))HVpPPhWp"C! Qޥ3j%()>efPߺtɬ j,fʜaKurb!b%:QXL<#2H#38Hdy|ß~6'_ x/o2Bw%DrXN% !aiںB[_5y<v3'DR]I[WP Wn~a X mۉ%I_̣Goy (; 13PeInmk5}=?)2(>ic"}{SB8Is1`a.{[$BtWT2en- ON}{oo{.c'֦Ϣoy^n$!q-p= YRzo[ck3)U2v [f!Vx^ڛvLoF,y].ˑ#|r s:lo?'y~Ck$ozh͌df9FkšHǬD13#sX&-Y{03bkSW]E@̐5o2(LD€p2K#LTXzԙD9hr$LAWner"<ªflm--q,Ɂ@]|#+o2(=ܽnT%AIQQap&h1A+2J D}}ۅe|5ޛ‘B?:1m ͠m`&6㝟W\y,1&6-*D vHCrOF~qc ;-j^ UR+혎ȝwAX-usUbHdBmZePJ*mfjK[Un,EEW(rp#)Drg0]? jb Cwz[C'uErRK06lbq]4F,LE\ƪ'XU{8tt]K[F0x&!LO̙5U`khi[T6l;;3׳~**;ڃyU{y\}1vJ'`/* )2 }3j̤B* !NiؔZS~'QRBr>91 &}5s<'xi\,k&}WiH۷ߧ9Hz%}xtwd[|֫u:VM8BڱGoB~|ùOc2n(zGߩfmz?a l"$zbW dg YY[Zfq\Tɰ'D狉zͦ'Xy|9ݷ|y5??/˗ǾI"czicePi:>pͥ_//Otg_ϷCvo/'yܶfiO|T?޿py`8zsӦeP 6R& p0GDz/_v3b&ifcHlQۮ7[%ɲQ5s8'@ދ7xc@s"T[-"kH^U{-yZћ'gR"92T[keK\vi<#mz&kd(i[ED'",d oNi۟߅#6uO8_(&KToox"F>UUtTPUm[D-u*ZC11vimkcZ$̏8눚 n& ~=,#Ѳow?փH,r6c H֤BocHfizW/nja'D۾gsfa{xq9xkJU՜W zS&k|M1t&2™]Ok\PJ0ceN8Vv{M Aߠ -;j\e.[~V[[ _EZĻz ve\k2\Hjtm+VL˾PFo);/Oku`YӠzxp[+栦hJvi5$uwi FU_ \74%X`?KDRs&Z")r #\;uӊ1`5lwd jbSƄdJfjJOzx0=\zމ_ǜ"Åњ3mt$H9t,;D{338<\DD~ *:D9gfR3iÃ% i1mNGfJT&^+įIn1'Bh07ԖTdi=━ǭr \;}:ܮ}tP toxyuu{Nޱ)ұ% 8r17/Ra0,q,jx LCdCh iA& HǶko>ٵPra#΅e^b]\[Kk]^m  gXCuim@Bk/9⻔ 0CoP>YXE!X^G*ӁIkαcʗײ=u`Ǘ.]^:%]X̀9^/4^[%|o\D:>z0|T 4 %d@ l;n7Ĥ %Uv؁yێLN0C KqHG%Ɯc2 HvŦhNo +];ka'N1_`7$%b2}oo}3LJK"I%yΗQћl Ku{#$!O2oqx3xKBPOod91kA6'2@wqRN~%&owOFټAyIdۚE0'^|7 ,nALbE,& p09|#0cdbE;q䰜3_zވ"1ntctZ'Kα`z>m_˷~l {kn]|&F7CERc,~NCKp?GUɷ["=""#L7vLֹ1K3OrCf1߾y6̘iv>O3m<_:WӐ8/֠"[oou̟??yLw "[w1H3T67d4iӑ*|ߘuYɚM"aF2&VEو{ky?xpGovU`u7lTD aqx"Olu8;qQ>_ 20;q)VQ'B#a\ }kf63[nYÒ -Cq$ŘWAx*(Uu[?6]S4fB)TҺP+&E%FUS?g̹JҢ *ڧZHk ȼFhQ+% n{WU?1F'kVǂ־zqMwg+cg9j)ʫc k ,)%]f0P`\u+w|ɡScB ^V_ 3Ǖ0IH:R꽵߽ q5@D35B;2Vy51 dɷZhz]%CF@"`v0s<Pi9Ubp08_! )Y$I 푟sS&:[ψ1YԨ MO5n;$V~YRvHm@S#CmLKti,=peY|FeĐp1ZVd۶oyƢ#}kq%̆-u:R"J@FÆY51E$9&8,o5WD&% x?"*0޾Q~$z}MwɈ(~oҴvq$4fa9-U .{offd1JOLReP#aq|DDn1#ӉInEU53_s.ͽiDIvQ0<_h [&Ҙ̽U#L~Hԫ]nLzƕOI E0^fv$My ~ @'"ǁ90xϵ!<r k%pV$Tp.[D)>P,v+3^3W/^9:ײUmE̖-j8c^ U;JѶf+6c] xkh؟yj+Kj7eƩ ؐ2c 2^^ќq][i^WiClu@J5Z}8֊fs^O_4FWl(TWL4}>ӿCD`y 9WE~Yx";qxmԊcH :+aWv7nDv+S_kڸ,u.`*HMU4y|7uh+EEK5B<^-!"HZnfD(D|} .}otTE>=vsqF㾷VYǨm|^GnbE0KY#&D4EU%q~; YyM!߰u"`8aavn ,^&sl%sj#$d< w۶q)'qe "B۰6j][2Qx~By@n5i6}ꍪnh7 G$1FM[LB2Ι"1`8"33}G8s땯Zߚ)h D8N CoP <<6]]`֟7|ְK5хz㽫Q{>?Ϗwp7_$N顪c؜$ ,hRB5-G%߱o*B 2eW5JE 2bbn5Ų/JϨ,QY,KVD-RsooR.fg]hM2P Hs(K"zJе`|Q%Xjz1߰30\r@A4#+5&`Xm kH`t &\10NF♠J9W^Ir5pzOg\fђ >Vnh +.( ֢_ 0pN2J񰀟q<*+ :I$Ǽ !UV>Li`Z Җ a5"BX ^hp_*:pb y.畂Y mTZ)xw&~lE& eT[ IDATV| `Jb"yl Vkv+UqU-Ü"X@aa322R[?!Gq9qy`k]V^K?+R@ pVx.nzohu;3@`IUHΈ,ƌN}auFy `zάr'<{:0pkLsشim `l]03^3o }d<ow0;:cPo [6eueQkfPwQep:V<& o} pzK"R@%hHvґĽoxU[M|BH&FydqSqq""[ZD0;L'HκMM e1rͥj2]Iʰiә#x ?ƉMA6WXoҔnx{awZTQ(A szXH2RW %D"HH(DJ6Sss E9{@(ZX43͑Vβ0w`f9aqox>+nvos8lжoH6Npqmo7"X+ʳYD P@&猶j 25NXLމQjZIDAj82yVjm{gY< 4x5EF)<ͼYj+ѩJMstOl7PR3DzW p8" d1*SR`7m"DL"ZL礥g@T9cyGuvs- d~%,EmV%ָUᛑsxR;6D{[ҥ6S"uXn [Y\N훨bFAh*|Ekty _d\zd7 _m2ĜG@JK7^M`X^ik R\uqpHd\؄*V^ ÿqmq0XZMUNgaȦ ͸vtpvsUkP>2H^#qm @HzŠPmĜ XZ?F(v?Y( îg_n0}e}WRmG1 fT`]GזK jk3r@d)n>9&Ui#n0gfS/ ]m #c 7VJjed!pbe0z[G.bbduΈ%]ڡtgJ DJsg B)2/g=~قܗ 0 J-uRI^ |9ψK_zLr]1%d[#p<27"RǽK'R$ل<]e Ef` K_ŋ<31=Zsm^0hm5췽MMv X%hڄLF:9(pQ6Vnnvg֡hIA%+ㆌ,}SiDBLq&suϪcEX3 *pF"AB 'zP$W*y #b:lƜ)ؠ?6#1N;ST RnDΩB #sc,LV̜II$HJ #$'Gԫ,߿~3#Zށp9y4RNFdpWQeDA9׌<"YhڤVb&%ho]<91B r$i tk#1ɘ2*sD>g0Sm}͜ ƜUDEZ߲{'t>9Ji`@xy[{Vc'HnE46hcgJ4M3fuy e™X ɜ8l5 e]yNsjVĄݤ ̯&LUs,f/ޅ'Kos !pK.8c#L,P+TdGf:6EW%R/kS&GpLXZ QU3'HdMMeLsmThOa[\UF1tғhZ[\QI+հKQҿpz" >/>`rxCVض9«g2@ XoW) ^!Ij҇ҕI˕S1Noٶ?dW ID\UJ"̜^x}dfu7ø5e\):'"'شA%Ey"iuIfŎLU010hѽ,˄ETe$)9ε,Ih=LD`x3Cgr'Դu^OǨ/?7" l%jGd )J"neZӅTpm0JҤvfZ*/30$1QHHNX b_aJ`_U-DJ \p>.$+WWoylY;Bs/??|)8 +*LKUJc1ĮY^]?~)pS3Y"VY_Of%\[{bڵo41me G%|U[ֳ%cǒfЅe-S *!!Ր udIoLgIWQEo'.N@x 9mDY@dqAZkk5\ש+ OR@ *;R9\LWj+'dKI$T2dyx,3_e+M[ǭ?:n7Eq Ks[n=Q MjIu{GvRDF]V&?1 <ƸhVN̑4S& D2^G\Q,< e{GXz)|}G !& ^|/OMè9L[DHxd0F d"0y_鍹y7j2aV62 !mx<2iN{'BqXǴJ+m)=1-3-ƈ9V ˿7Oweg޶ou"5Ƭ%<{4=0sr0_ oL`I`ٕSXUckCRa&Ji(eJ҄[)Kzp,DBDiwis4l")6My>,9i\3徰De$xy2A䒃3C0q03)]5e xޭ7Ril ti1#|y:"gdȬzIMZo;:1g)zCmZ$M-&Ja&D J"98M5)1E۴qNG X< ¸5*szy{=yL'44 /Ax~B?rӱo|H|G%,Uyی|)l3=wUXvRMu /FQ8@R) ,Ve뵺 2ш):# ^s 0qqWMj9a*A f-M9e_c|$W@_ wbŮ}z:?&ޫ|ź?vtn׹0_4^ ảHHn~SmyEm^q6^5jWZ-,GcHla5r@71 >0YʔӐq LJgwau~)1~U 3Xzj6w%-$tQdeGj'WMP&TWE&-_ށLb]%V&"BEMn3«_48Kas,{`޶N$Jb9çq_[$Oڕr:qt$I^~!NrV$ aiA,}15$n\I̶(a`j[x<9l1 D{ܻ23v6Q*3[oBI$plyn\^0bx>3bFce<͒*Bj qiqNUfC$s%5eI 7 6 "ĜnsL'J iZfZΏwiixNed,ڷx  `9 R컴6lT袆N,pU/m88%sha 9+"1J`Sl;n5xH8.-j20Z[JU6]KP]&Ў NH,p\ +]+L" `:13@]p&#cI 5Va]*B DA|"y2E,}nm Q|Ojb7?8V2>&{׌ѣu*1Z+I/Lqv`+DGh+Rή@C6Y3.G҈aW +Q^ֱwCb6OK ϗ^ ¯Vqo~5l[J% E?s"r`%H32dFٔEDDMzٜ\ժ qAXUf QSl/KZkɜEÑu(d3HOP|1!8t]ZC:^z Oloox2O;Y$i+FnzaDBX$SJFcp0"(,ĜL`D̙˴,l25[Z[lY֘H sk@pr /30N=gVBDvhKL|([*3SʂK]Q5DWC%9,V[IFzͽ[dAL:`L6'hU]LX$% )LX'̽QT@wBV0L$lʞf{Gk= PʶtNOPc& UAh>_T&|,?)'j،X$P RAo>6j]5'xDطxmc=f`Q#fpE)&&ݖ tbXΩSB㣂sB)3Sggt5D(("*ΌHBY*\,@P2 ;H}Bp,@~㖺>kMcI8Yǚ;wVd1tn4͗u0W[4IlMYN]0ֻ7wf>) fꮺYoiq3h&dVߍj۱ލJ8޴*saY#I0±*ዠs8M:kM7ǒczeЊ RJ"T(3r7㺫()2301vԷǶog04a$n֐x/c6F2fvyYc?lNd{- !J|y!)(c-Z3Y=6 ^ MᙙN"\TD$Dʱogp$m[%s2\$OAHz IDAT2$UW֩wH6R _AIU<1Ɯ 9;H)S! "eTvatbnff$UKEv}c~+l؟_Ӆg1y]6,>?񄍕Un J (ܥːp~z}+=5^‚c߭'~#NGl`u˗pRMT2<2gcnmrV1pN$pVw |B<\(RPx>???}||o_1_DZ\*ʆ/U. 'hNEd+Jey /fQ,>#EālB$,u6-UhGd;m^XQHU+b$rK1|TKIfDzag`."E#nZf[ٮFy+Z+ Z#bRP*kṯ GL)D+&2"ZKf"͆^W8<2I"Ek `RcظX5_{{L.\A13;Io&h+͂lBn}ۗ^Gro\" ;Ex豩*;ՂR>2cx^+ڭ1 8 J@`či6Eu9G- ̽6/Bĝ<R&Yqo(%B"(ZQ2p?%VJtNF*<qT]hme &p" Z=ۚ6|k3H_;/ n}@8Fy37KXfDfTF:[{ $8$0U@iY*Ex #"1t_9Љ*xDy%,- ePlUH(ZL<s "Ylfw%D_ox|j \8g-3ġD,EFD͇, {mE0n[&ۘRT> .tOVI4[3g W0"#{gaP*X` #27 GL}pU|^M~ X% :7W~?]Be+a`yiωpq2rd2XT0m8R&jF'K,2ZDL"^ {R DH OujE$ʢJ&hyf8PpTXEWXeZ-"o4rMZZ jmHX2zq8Pnh-符*̋Jz[SxzDOrj"=]Vwws62Exc{#EDT B-EG>| ="\ˌ9Q;:zAZs 9=VB0["%#X7`fȊ ]Lh7lB\5W.@hyON?<1p'Q:j2DT:hR9u V֗: *uḖ=֒YN€bcfp2\'JŮƥ7q'$=CDwR+|.&Qf h}a*8FX7vrִ~5V?vJIڻ|3ػa?vb6'j\΀F Aphs=5 c{)H_CߵP* dbg7z-B+slʑqeo" %@u!h}y&ʋ  (\4Mgb*>4-4;3ٌô@l;s1#6QUDF?s 8VE2#}d(z5&'ݽo lly} uVq7!͛k:{O   i@rY'3bvˆ|>̏E7X @d^( {-a9fXJM GGD ̢m۳KCO"G1BTv!Jn*s/K?JnWÌ<+Hqt]9OgI_?W\;!+Q Fh_?3YKp>dU )"™+Oӈ%A.trZFH%{X0J sm[ dN%_Wqg.||àO|h}}ŗJ ΙZ`;W)3v1Fe2Vn#½KQ`WX\yE(rGC#r#CaԞ8^KzlK爎p W l[dټqC2Hi# @z<Hj)ZLnңfI!*DLQZ*+Y",3=iݟ=[{ϗh&Y*938xtEeQy{}a3~Z*#S)B,6~mF,nE pE\{>Aa#Gn_VymCgl%l匼T8I!Hb.6L{7^x:q2na*W4M Oj,fUDZd;̴ Zx9~~H$C:B f֭0Dt:#ƍh0XDfHL$jFXdfAsg&WuZT&,s-و;@>.w/0`Ja$̳9>3H0`?CRt# qڼc l9q.v19geЍȝg\uͰ)":1+7SD-xT.xyQ-ejApsdEGO_O\W_E-tk80?Qekl =ȉxmv AڷǰN}3!y]/u#r(zޜ D4(al~"uֱq.8)QaDz C̭(SLI t}{QUYXջy[)Edz}LyJPFp'W%ҢiI ,B5)$%!Q'Da?G`QBDq]m#bzl[x.wS4IkyGaj“1ZG}?=߿)Bj9?ߞϿܟWL&Np Jgf @I؊[$4,RT={@|GٶC}^H==ĬeXyhgM^@Y57lEղaB\ Eҷ+)QZr*Oۿ|? c&a b% 7CJ:> P]c۶Xgv]=ڕs!>xX\E 1EKôg >>>m)N`y؊V&k),"E͑I 92"8AM5(YXwstR @DrRDEGk&sxۈ86;j=j!z쏏%bKO\67`|fb?RFD)*}DRP:cEXu~Lb M0V>Hr Jwdy#BEV\&M,Twq "d ƴ/0$Jnx,+ޙS974H|1^x(6O *OhZ9\ "8pZ}l&Z$!GdƺilD*+=Js7[&vM mb+(o`]f;$1* eJcqUlkmL]׹_@h":n cj籖73 2k uEroo{Z vX_C3 ZUyyȱ1y<\c vX !×͑hHyѕѯNpBgG<.xڄ/1!z3?:w6?_7'3#S6acmCUc2kƸh@,YW0lG@df+C<ӢH(@Dl{Xw1jp!~ \#@1Z׵^v80idyos'D(N$k߫:2w\? 3wEY,N b1j0Zd`Z&C m;DK32"}dDf08f+sC+9%"\t'"$f ED0s8D啐nfc$Ĉ<5^7v}Em Q!fQ"J ̌HeePX.xapֲ3d z&Cr|`60UȾ)2R ?¡wm0&dK$ X )7eCd`p\n֜" aC+Eu,%%|l!rp#H k侜ċy1s1?N{z=lM > UB @ ;dǾ33nk+2p"@ .o 񼠕` 2z0|znӽ9ha* ¶Zg+Z[I[T(++0WQZ@PW%ZC24Y+^ۗI ʢl<5fA(>R/,*fQy+k̄/fT6Vj04=1?oYK/mdA_QsTۊ¬Ȫ$݆gyqlAH6ʦyk TUqE~uBEj),E V,ΔVh*= zo?^AS}#dps3oӄ["c\,g bT!pHV.‘njg!r H~ҝw;IILS(҇ZkHe.#R/˗> ZD-fo #'ZZa$4ï_W)؏r[ٶGou-U$UVFBh0Yq]cJTuckj)%Í~#u6|`F;7@ RH<0݅BUGj~a7DDDeَ???KdhA'ƅfVU ;m*[%"ÅuX*?}y9x{}{{<2 UUu_߯¬U'ʹn%sR5Fm֋ bN`ŦiUQ U9l3]XN|ʬTx$,IF mNd3"0{;yl`y "z;UD#ԊQTe<]ȉ4VmcZh9'cu4"-ͧ Qdf[g؁@)*Y 2ݏn]o[(,2ܼҐ.+яwYbU( JWQb l¤QC559=1 9]Sjͦ !L%qĄB3tawPRY- \pV5 ܎pWίmCKN X Д0T't 9!n46͙D ݘpu.;z0mwnwee&fʉY0tBGGc"|xʒXFi=@?j86_Đ`Z5!V@2LofbB7<5s6U$3!`G셀ObH;Ib1"x_OzGjky"»ZeD䩣 IDATD0 [Dk193)u~r]1"g"1~h,Av8E:3Q7./_(E"DZL)| mo\kVeRm=3 %(sF0[OoǷ_/?/_oUj9y6Z&eJ*e,?ln;Y$֧r bϳxC[eّj9ίUr6? .-,GHeIyA,YS=wΣ[ IN6x6rxvgnOӨ/uG{pJ(phsxtU#}&Lj_jQ ^U  -auvrÆ$:w}ajy]~|u]VWac' Rz&L 77B"#myx4d>DV5҂p&ZM2[h*yn_|_ *\jHg<8P.ҙebW݅EuFӆg[RU~@BIٌ t ^Z/FDQ- v1& 2G-DF2GdTDLۛ6Va>#f"wvyvYtnJgz[CU}baX꟫@Fyg^@𲷁Q#]mX&wj d^($US92g%}U #s@(&&HQ-+p<9莺-ܓ -WPk#"R4i'zx e4`˴SeRHX"|~ЎYf723f<2]sk3GwiYP*U-O,fEIO#gdF57Zg[%ߨ'+Ym7`H`O~mv~܍n?"{Ŵ<据XmP^hIII">%a"Ö́0 rMLtգ iE)m,f>1]Ħx$ࡨf]ˌ35ecj>svSXjo>Up*? }ՙm(>/,"N` t^s.6ܨU/dAjmS 2G!R u߷}UfJyJJNk3q0_-"́|@ *+Z!R!eC“/DZosl6F=7R6-Hvfȸn$"Z&*̫)X:o+>?״(a/BGkc\*Q3hi#T5DFF&b,ETX3b>̂<uR K}beH>ͮfK&ʄaQ2'M BKXlJ VJ UeA V0Sѯ#>>.D`8vl_P ^0x>?5gxE[6<"Vf;2Fxeە\?j]Z  MYo㼮>PwM(jʶ:,Jsuhov|P2#n[}GLpcq>6<Y >v>z̺u;Ql6Fvw3c0BhFkC102K"Q) a1꣙1<3EUHG BɅI1"e/Gy='Ͷ((=3U0-24$g3~G!.`IH`9\Γ:'"}yV;#1ZF7༠r}mO|_{em5E[9u jŶatpE$$a9g"pN .\cs-Ä} NۚnLecř-(&fyi)g9^KrRy33=mi +y.w*z?<3 XGbmzP{Y_377l_m-`dӪ@@{ 4\gD1F"1x %afnY Z|ўfNJOmcf bI%J9Ήi2C)(a('DIFh T9#q"DE9k}:^"W>"kgR`ō;) ѻ! '/ŽB&R n7cmnJig|!Bg{|n͗˫U=a5: PI˷ E^U(V'/gzs /Iz,&U9T*Pۺ}k*җY.aÇeT%- +PG(V1o *6osS-B$}/2q=n,$5l>" 9q0藱c0?+[-n2&\E rXp7?|=W/-kľ}<},m^xa}i\xՆϾ*@! /};oB' u) yl)Zk)MwVPz*UIBbacL 2{~k 3MJb-j@ Zm(O.o 88 {VQU2JF*RE'E)ѴhE&@枙`  1bR-h$Gmo*e5 W!+8b4#PWdterR%!)%a9V8yyRP5 W-.(m,t.T^*"y.DQQRn;Z`&˞\zbl1a+@b a82'ۆ^To% Av` je `-"5I&>>o_=W+m7ܶ׭ lL4^yZ}ۉqy~<7oQB2>p g-Eh<Qfj1-jI,,֐dq秇R >sMa6ly*muI(mc7PGCP #<; MhCUёGZ(ZEUc )Զ`MmQ 3Dx >LX_֝v/œʂZmE8Go#3C(hyb":a"Umy纉yL%p ,W:+X"̈ݐ ׅnQ8x^8/di(  Um?`D+Ceꜩ*DR.+J0zm+=s q\rx|ޛo1x<< y?N)`3$K>օ$m'kXpAmnv^*k`!-6'\cz.89ƵiDn7NZ!0gNdMټ@d%aVihSWm"@Z8'Ftڏs]-AG7jڸ^tE -G:"! D4;,%lrْ#ԧ(K"avuyȂ%sGCs^c̣.|JƠyIF&JLmO" Sk23m2sfB3 uJI 2-DF=}VP3>̪ft~0ņ@PGdKOLRV+I9?~y|GjF08C"=Xm.BL٘#asIAZs|s0XQ5 Y`6_* } #}b`^"QIka~7hf2TXϟ*Z3uE$<qkJzx։zM dcqKUm 8Ll1P=:uaP~|?E1 ʒA9̏Ƿ1:|_/>A0n@R$Ŷ,$qϣx> >P*J+_y~;~Z~2ݭ<< $u1l R@je*D[b ^@$E"|IlDpۆVeȐ~SV-6[ًN;&Ъsϸ'XsĹQq VXDVphMZ)l!_mþ׭UjO!R&-3@bggqr0ec#"S5rd3/Beĺ rJd^g?90O"uax#u}MJA/[p چRrnnT#G 6Ŧ5gf0b߰JyRuّ% 4@/0\ZZ+pva$.;|,c0cNu?%@ju(cZ>fZ`^py8]'33yyxBp K &j-|e @GjA)> 61INߍ±KzE9lyT t-%a8yA4HJb܎qCՁ>l'P |*J` 5Hfj6R_xo9"N]?8?x8?_kW"+@!7JZk f"wDF`.,EQy~>~DO,x>#U`v\7bgTͲ{aa8^dW aed̩ar8~I Uq^>Z:{4*$/;s.|f&!iE e=Ӻ)('gvT^1TKëJ)"I4'D$[-ӪBdY'Tm݆y9քR| J(TVsPR"+ n71ų'2" DOe xYК<ޏPZi@% T?8/u\u8Ic&o<?@&1(m(_¸xE=瞇^wK& HP]yu/ {_ۏOv0i7EV??rV)3)ymn;q"2"`>6: IDATJ<'ad~O hiTžGZmyGZ[)g?!ێv[s! Æ0bla3xMV{Vvޭip"AL=>8ovc(uZ9z|<>y\}C:(  RHz1pyҴDžۆ$k̼ū~1(|.ETm _B%=+Hvm:]"斑Zmsig//o[o?~z{̜'o_po_0+1 wO6Zh-ae=/z]xv;>u$^c䞙Kl8]8~~ `!Uj~!YhkMaGDJ|W\BD1"&Z+w0mE[Qu_rU}}}"ֽ,E5ai#i"b&a1q5 w=>5*)Eo/ 1AVW:s݆+xA;T-PT6>v)ɛ&/}A#8,-֣ )uM LW^|M-Mv4>޹_BZ/SÜH)=,ǔkHpk">QtA-"(R21Hyo嗭ޯ>?To*w8΄uc)  d 2a݅3gx{s\ᐄENZtGƺ+H.A@8@RÇĬ9* 2?hYoiG8eЏ珩O* UP+n;mMBퟶ:{b{ $qy7yB볽׿a_⃌F+0o59O<+oDXm("mhu&S|\ ;` ׄfw=76%/%+,^>&FpuKD C.}]JE(E"\YXʢs t`eg|s*" aQ"}T-/$"0bBru̞Bx{jB|~Ff*D4@Duy n77j-"3O}3?IJϑo[+ȰY=gsZxx5c#GQbDNH Zjnl{6"bf.E4"YxF15xy hdL^x5H .'h6Z'y et.N!/A" Gkk=%ێm/_n||"?k Tژ) = U\7E+O7C )Mezp۴({ȶsD$sZ Qd"♄lmG= W\cg^c>؈Z/{ -8UyvRk՚NHg!J3Vk)*ݓZT&Eܬ۸Y sӯ{$"ܔ 6;{[mv[qB,6aqJG!"y]y\h'iar~su>Ͽ8Opc8UV` Ql!O7:q+>ߞ'z_mib<P(zG@5q]׶շ V*VM_#q=~wʤr{*%'TEz)i锔>A NO'VET l 47s"E"?&0}pj=7pA$J̴$IAMy2)1n{k}߿}M\uV>.w"9+R'H&R `dhfYn, W@vT8 :1=\k u ,>'z8h9kC@BooiW=Zpə H}:#mi'ng^3ji]AqY#i#"H^W >`jȋ43@ Z}$Ds_6ٰЂj)$ຜo[T2ێR ImoNLE}qFZH.䤯231Ӽ&na@RwϪ1u?{j?= ˭_{7!HfX4sX,iG. Y]U1ꎲ(T0ͯ|bќ?Ӻ0&{YZOz.'^֟̀qq]*pzڶ}_ ڰmL9WD޽,0$Mcnc QʶUwθ.'Vʉ͆GqHDJ)D<6"@E]%#bވ!2AXlyffQR@|U <ܶmc!։iƌHHDN:u* ֭F+*CluU @8(j3DPJg~\6CAřY5}b٠Wym+1Friů:&ݰ 2R$"MyQ|>^Qr ;}]eڞ/X`oZZ7A@:_u@4z|>H}N7^VUEEiy|_~hQ0|@?i Y dbH7A}Ig~rՈhFd CтP MʌJemWƙ=o q]>aa m .(3&.s30SdE2s_< IG~4h;M|>Q%<2#%2Au~;1_?({m̒6lx<2"9ta@0f3s-=3 7I'|"b3 leEmɦ ff˟9TlXRk&5A'wbk!/˘ۍnm%t6-"(9D*E cH'q^auҦ}kgPjL=o_ gPQinUnǀǙI|| {Z8Ta`+yrz%Jb7޻}<n$cLUtխ$~H,'@@b**RON1d4'B<"eg" J( H\2DAnɑ3meisHD1uemTНINWbPx)BH7vnDKETs6z8E 1P9$_|2Tm7cVpOsDL%$fiٻuzo"1gI\('4*F8sI: Zeb 44!:$'%  2̙zPc ~(y`z*)(-|a"Eno)Ž&EDU<F*DQ L̤HDD([f֔A1pGF.>|~u"\k‹+u.7Z" rL,[bln[.QlnwԽhVΈB4Cg̈́J˻lK L} [tOdBa $H J°9bq?g sۚoZREï&ϘȀ2ThY$YXGD 8g :oM@̭Psp@܍3QdzETݢEKf#4ięSHZټ}?̨׌JʝrTn0Ƹ!`ٚ%/xR^EirB˔L/f f8/2S>(k!&L" ͍ =m'V1|n(U)Һ &$ʽ{pUfxBH-b ]nȓͻdxyhdSb2 *B e(Ax K1_íOu2ɥ)}tg`ߥX2<Y6NEc⶗R8-Ss\Nc FP8p~rgpjaƼ)#pAݚל]O-~rIҮ1GfA9(N_8iL]_:@ Uq>%Ў$ݏv'<ا_g&I-ͦ_'lRYU>O*2"_6J&J[k:nyPJPܑQ‘@_XƽFm8on(Z+Œ pTӑ`Bkx/kcȸ{gǚnx9K rׅM\>*\ls#(AIkk* \ס% fhQңxե2>u9e>;"qٜOIPB5fDFpx)k鿕HAY5laˁKijw,%@G+SK͛UyR4DjTiIs:_L,waLLNʝM`~Xtw#j qHԲיd__ˁRYg#ϙOJ5 p lwEw'm0n/"0lm+S[frDyZHdya,>mkV#ssUC= [HD??,|@YfGAy&.f~x=HX 綒^̲* \0_1f" Xaвy>`-/OY"W*Ot*LOԧP-P {ix<ϱ"ba  &!obB`TYA+ IDAT-v1@yPAuBt k ӷcdxeP&4I= ZF}3'҃)Z^֐|6hJ06!(O+|@=:("vww͙ Ɏd [%ziKׅP3[_Xغbk0.KvVq7vQsq%T $M 8`u1>l}bKʁ֨59rE ') L>[ G0_K75HTs9"b:| -HOZk`ٓn=Zcǘnn-Pə ( 0!+, I(ZlؼeY_R*p z.Nc)HF-8xg#oMcAJȈֳRT6GU+f}hk8DQ6%"{i9ѭdEhK);PçnbLfȔ1׵V&J>g&g)r4dǡs$28i\3ivcY׋^a J7.2Ƅ_t4PȾTᦍI=b:{xCWT{^r->Q"; 6RD8:^8% /]k"5}ȗu[@0d 4E{g3NoQEI^5]^0(aXU@TP0!o_(x ƍ՚k64-ϢvD/t{=]}}ڥ@sH"vJKV1oxa 8Cgh p)J( M3l,L‘Hdkl,dF,xZS*'(YgkDJa[>7pT&,D.?{$pe[F2L()0AN˺uU%\D' FD1͈8lP etK*]wY*e؜Hfa)ԜEd'y=?K)E"1"DZ'z~\ónf\Fp7_>&pBDsw|=sj?7@X+RB=]@~?4VU]$Z1IwP)IdHD2(#/"0ȟT /tcb##)EYd2+4Ǒn5/fJ*,laѯD`Xa1J\34mD,fP mD&ע f^:}0CU~%MVRř:Ph&;E@ _Rʌ1(Rl, !?"_>[?O;~fghZ~&ti2&%K !VDXZ&3 f7. 毬(|-HN ʋt,}FGz#_4+u1Pr'ت0.5\#8J턈yiz5fRsOv45` ='Ώg,"EIfls3?A։~?6b -Lk1clnv`aj8~,(q"ƴq\=:a *ןx>xZ_b*y!&(+E`:<|VpIk5##Frp!DWy+9F 'ڀ FVP 2m*ڴ VʣݦQ袻 ҋyEAt [ +m^߾VPP_[V_~߿Z8ApdfDPQR6{`b0$tw(kDFD+~2f}UϠ1 K>Ns x.{y>ٯ/tX mW<GԂ6OȈg=9ȃc, W "C3=É23 vPFe kXsBيD_`ReQ9"JDk,) wUq)hH0WwYe}ic .z qH㷳V[Da"8nB ly=}_b1Cs icv5 5l_Ţun/j <;f),P>w)N_n*{v֚[}>|<=L\O#tc{<*.Zk (܈y3]S|fvI,!NR vR֒"Ґ b)W"1&-FLUbi窂ײ A ƢI4e`-h78$ Ki\k(>ƫ1ᆑU<2w& N%ĸ*DyD<@"_R)5rY&y4#S\e/$LrZ aIRMFCC|h7Wf [ { +҉1p + C%3=pBP&bZY Uo< K@@BI?x!#as/s=|C~C#&&ʹd*}Ru #Nb@l(MJ0yFJv00$`ԑSH5)2{VݘJǜ&E#3F 7t P̙kݘ΂Rv 晏qj:BL}8CUF5i&uIM>{ bYdhK I"y $/\"8< rNDk.* $mK2#|!B ҂ yEw_$FsD0>( ac];.n`H9n5ߤ}YZp@v,D.ڞ:IL,"\3,}B,kL*k멥$#," d3z}5+UVH0 VǪ*3 *!1Ks(TIi15NO|= GBIIHZdZE)L 43\;1`fVe@Rw۫v] @N0Pd5P&_c_vkX{cbM>'ډ_)Bn Q*6=#cڜbZj~?PBx\=y'>>waäl2%&{zln.W Lq 2`-eg(zJdSksz_Rfa"22r1+? JRVod53,݋pSʀGox?8b.`\sFrzǟ_|uc>4D%eB{V%52 vǿ۷u=#ې h㲉Roѯ9}}mjz1SRdԻ3luXӐH퍹LB|{ood~]XtYAxL@Eh?Zcf4'uci3[#?~P,0/#_!u\Zvlx>0a?MWn^59]) A9/TƯ+?5[8r(ZkB>E0S h%}Ae>` SnGns &Qe)JD>ӧ1Qz;j:{7'Xyul Մ'ZҚO\;xi+uixJ-2<W7h1|)3,l y w>@(\8kI, fU=q @fwF64 œ9bΜiV{} f,ʨZwk~scYppظVz+R '@cLSG!IGr__=_]Z_RWd5;*.PzT ”x. jE2K6@w=| G*p$} vooP1#3-||xYw0 K+HƴރLfEd5gzسi`fO<<&s;ukUxksk?~Y7|{;Pnf˭3'J~lcLx+WIFOpOjG牳V 㸱5횳OCR)M[;"Zk5@6pMtVjz>1,Zzܬ\Im+_?6C1hQĭsxe \'h{#̣d!^ ۷v%*"L$p,*s\و͟דA$hanXMDX˜0빰L c{AJLVka s =qy?c#BD3B !]J$NaY'óîsǯ3̫K1v|~|(AkiUybS"c?6"53 f*"\) sʤ??h'A4AB@f[ذ O""3"Mc#'fH ǁnI*y%Hɸ 'X(hMjz.FAs[a l֚|Qhū ; *-˙`AmɈ^e ZdNQEeN_"e7Gx 8ZB&qr+* 'JPl?C :( AP#lYBD"3IЂƭJajU6K >v_WZ =3HY'z+ _^󎈞znQa@1c^٣C}!BaTa>?֟ UǷox;m^B#tsjP>$_хnN dׂRZvke rM1q:(+v䀏dm  HA)LWҸ qpe$Bӳ6ɯ Ua0eUY0 7=vR"(}?𸐼Uv@%U27ՎrB& %|a4c WU,~<{X:|$1 h_c 7Y[<ݣю"g-u G@dΣ}^c}j%gZ4@ rdQ S"ݽ&Z[-NKEc< AZ{NRTUU}F5F>z0:mjY #5Gy%8YEHʵꃠUUd<%j$}T!qc3?#GS;67c_ވZ<%GdcAk*|=*t)>-+1' pddfϜ2h|\sosqD̢$wsnVc~/X@5Q>OsH79beG`sؖ Ax4ʛqThG %MCWpK/J5:o[w5g& h.`{zKHL<֝Ց}oeeGO+&?`RpyY E)cC"#>>|8Xq orBHe qO|(hzȜ>4pp{nD~1Ӊsvk=H ʞxR X\/x"Bt}1;u#hF^:v2]6ͧynhjisWգ{xƚ "muULDbn IDATMX(*q IyGSQ2Oc~}]לvG+Mbm1w6ğ| j֎"Z 1KanN@xo-h-\ulOtPyGe:XkRPմC&s&as4}NC*jzh6ctd ɥ2sy x;wFnj4(66bזfڶ<4@WUlPRF u-t{㒻_=f7t>|a\"}'pTZCi&}m&ȃ$ '$ڋE&#3 ?t8kQ5!HxD,D9lN#Mo™tY,> \=g`JG!82'cے#;{R(_80biqL(8 Ʒ&,֎D)Z*(BL@$aRZX""@fm )g feڵ:NKpocbJN(v7{~##Ac3_Z$2|'K[J5m98rhQ̴ʡv̯sn[:1{')km"9=!L\xe\J(DD=d h~JC&b,9g̉Ԇۭ;QnZJn6-"җUcY~*Yt$Rnwg~\#a`~ua=yV!BfDZZZ^t=zq J7:(ˆ43#G e& 3"03 FsD(y4fӒ0=%͙IND/TWVGw8f'y=0_RD҄_?~ szFi5C 0Z*p"-jI͑ctDDc*@>8qj#5"(Qeou, Yvsc(H!ąUx~vo4fDT.-Z9j417P*z{mr\; 0D6j-öjsX%^=G$wvU>T3/7?'ZYTVDGy||~~|Q*(mClZ!P&J'bA.1jJ"O豨 4"7ӝ/"^>s7ڶr/t&\Wt)i$Bt8pttc(HH_WSB͈\RA9Fqer Ԯ93PώGnRae5ζ`+ GVA _'7At+ZDR}=JN'1GEEzAdD,…T眣g[mHغ%͑6@tJV!)Li{^F$@div!^XȬh19B*>=7@p+и:A5ww!f~nog-G`+|4*kd5ϣ$^TK)UO.(",4kLvq%n+^ڥu'rϯ:H-&OBD^pNjggb'-}}O 4ars.GvN4,&`BfuUL-mgDXǚGs8,{Z Rnn`I!QYp I9F9fV]K!GnsyRȕZC+AVѢf613Y !%X>P[9緕]n[RT#}o3%GO.'o-cF+Z{q!W'0Qe 2#[2/H@yL*J$9XZ[k‚}>Îp׷V۽J1콛YmBJȾ߇MF dM,R>tGZ$(_5Q7=rc"6- YL?~6MHdzLCe)ªfsrđV0G,Eh V08g@:ÓE>@PwomoU)@Imߟ}tj3קiNK@SG*+۾ݘmz@)$¼S!i:,xS;y1cY-Y% 4 >7j9YVcy-{V7_)f+N ȘQZHƄ\ tg !j0 K^U!\i0շfgu@Z]ymIDwv4EQ: _mfc}ԦIDl~WtߩV1G>0:o*f""0tDЊQY#\ "۴y2 יp}q:ij5I\VDܘDˢ=1(+E5eٰƢ =Eg*(RȺo<~|cMHϰ0@ZA$:O jZs]!eU Hek%#|z&dkKAR|_#..o"(c$LOJS)1>k0{uЂ0z ;W`>1 e([?tBHkХdD-VݾKۑXطMXݦB$|tPg_O<;Nm1ھmy>*s^UbAo"۽U.+fXi9=4<|%E_fw$qVY k)EB&r5YJ_ݓE Fၣľik?~yo`rB c|GBS&erz; -)D L;B\@vy!"~Z! Py9@qs0K|fs"0u{ KJ0iB8)@cƯ9.Tuͺ9,Gof3cMDnۖq3Z SHZ?e'O D8DuE\x@LoZ[-$%hN\r&#"QYe#Fd(<Z{ބ>5$6 )hr3s沜4P䣫e ^˸MkGuv8UZD#WK`9Z'=v L~d8KTy=B{\q J e)WW!K5Į\=ދg'*e3+;cWU?{G[^V z䉄2H y28QAnj5Ly *PAz8-+@,WRV83 vU@'H&V@Ќ#<̉]y4./1.v5}rkm"1Ū }k3#Xsr; }E,j\1N#Ѿ}۞Ggd٘%sBl~{׏o}/L)̙f!ӧ@gw,m{mTT%Zϵq̜J%gUk,$0 ~v)Y8~9P@2IQJ"NLBP\+NHn̗ 0DDMnpEa1&"e Ђ㹧X\55X׶[K&HX>CE _IM&f40{OTG+0밫u?t2tӝhg?qn9&d.Eevτ*ZuL731װ֗!@qvLj: hm~@yFժ>m9D#s/Yf ~%EKd`}}^օc\1m=Boo Kqam+}C z *\Tjtc5֬(g+/V ,G)Z̗nFwseMa 7w9&L 0RTU*@0֑'32FT)aQwmi`6Т,Z=N#sKi$GJBLrwN_gA瓮$ 5KH"Upa%e:Zgu*.>NwUVWe"IB2|vܚ{5GmB-"*tەM>|+Cȵ_z b@[i"l]^y="" O(PnooP> ^qkL:$PJ"/И0T"kL|yb fJU\҉?@J9#B+DvKeUxT(" "EvTtd`)6k^ks"t8$oL()W|UjѢL} >lNS-??nmf݇(ELJYK"f9inp\uQ1iUF'Ba9Z^PpdFU9{VyВh(\F2DD/BztO wAi P ; W& ER95IhdX$5I$KI(_* n:6s@jmuEb"x>h!j4ؗK~c11 _n,jҾ\ Q̔n)g1GX ZӍאt}n/a+µjmEEV 7"g J#(ׇ="at\1f,_{+:q|0}Y*DhdH"" fY9`v)cDk$ı+F>W]+F5V99W7J WTM` %`] 0 ϭ]IaGbwU2L/iUWᢱzF4c2U?I_O}7ϋ]vGH!n7aT%ҋǁljaI7iKExj0+Ak)mG %cMi[$sF {Ahk<8s}gu\Rpt&}@eɮSS63yII4`ZЂЗiZ\V޶s͟"2cf$z?^TYED{{yq1v,s~~^ >TD hԒ*kSɞs|akKţP"HcpAA_Za!vF4ZA6Ju㤰wdeYY,6ET@̴U[0{>`&fH͉HfڶAZi>YDfgj+uc->|Z߾3HII$ᑙ(p 3CZ,Un#(jU گvv#+Bs hqר du嘔S UPUv)眧YԺmPv; ?;ZCf< ZiVf__2!z 2(43Hc Ѷm$N$4s牀Y?pgD(QiBԺkpeKD%U!eQ8tu+9̺ N`ba!MB3RdzmFf]eR2;F[YD ;|n劬y=+-X%X_ b݆gFgQH]X"]9E/ mk` w#1_|ϟKU[#A7Gܶ"*"9mkWڕ3^xQ0R61'mæ' kQ̼,&kcdH!b3JR^hC4s_٥K>ʜA{h3|y<~'OSlbX}GDDDm k_ŗ:HfbWmVr܋zF—!1_jKVLBIs-(.КA(.c֘x92eJ½g~8nmgT=g;' *=cL@91;T2s l, iSSIu sXd8$ʜϞv)xĴ uf;r J^7*@308{n 'mIʠXrzRd\a% W\Q^j)˛mTE 2<¼Zy|W m^ L_@"#lBD"I˖rb]m£ykf|@@D0 bkf̍2iHlb3UN\b Cf5b Kf)1zV4񊗃 t2PmK֋/Wz( D|V`7a6˫ZvpH R(V A/IF6 >PBDOL܇$n-o'׻r{mCඣJR ).KiBce p@HDJ68GþW4?mv<չWm\4KK ;'i[(Sa{kV4}4 PE1knS"oȩJF#C$-Z}"JX3(U"&(Ko 8a w'ɞUXks&Ȝ}r,pþkV"׏M[6R:eE0;ۆ߾aۡ oE{ %c9cW̕gm'Y b{iƝ,1"lL*?~"j?>ya@ pebDR8 Fѭ+Z[e>zu+531P8?<N\= Z", 1ֶ0fpO$3HaH41Fj-n=3Tg>ܰ߶Vjz؜I$r>JQ՝Io?O׏f##2m -JE*G`9mDx3klvCi tGdgxª8?q< ~+"K}v; +D̨2-K2;JV;fk߷v>ІHyq Gds sLZ᭔ ϕaI?u6#E+,&_6sմ03G)_y)K_kBln7o Oe5ʽCo "VGL3i6%[haU IJhuMKD ӕ^ "NU6LnW} 2\ۿq=g5R9J^y1>&Ae!գۆRXE% 5f @" qUrI=H"S]u^cm k 0  ,&mߢIꭶ:mI}*(Z+7Z _B&1/ooR Fbޘ4U6ٜ9*F+|RӮ"7 Z!(ZC~%r_ǥnWVb\/'`훵puUu&"RL nݪ(/){FR*ёL*."Ee|65Hx.W6-Jsj-(1("WI2i-̈HH2Fti@P/3fϋӂ Վ|ZTWfbOEL ;Ty~=ךΉ$XW&-~XRUpȳcy9@zy%իt, N9VZWUB+q U)uhJeiI$"E1 V>{Ǖ[ (-̂ ێVU-i_$\í^\ !:zF+I VX@]K|{[2&fqx>>(.1}fnUQh-Z˶yLn<9]=y8hE=ə?691IHLo~1-[)D(3JPBL[aV},ߜ>JHZq0߈0̷[c(DHfO hEFl`0VݹV0W1AV(c$<"zdo7!i>g4":町ei"13=)f.\'m/Pr(5_VMs‡["3HD<_Ķek FDBd3ώy@mʈ9=(+WmkӟA߾ezw"=rZ0:Ƹ0mi8p0ۆ"X/EkZ#KE4LvXЍ9VDEQU(h6n6-6@qPJMOB< qXk4[߰mMQʥ kt$!bxy3qtlBI}X6xZ]!'"mEo6FP"3Gq#12oo1 ʴdUxzoVBޓG}n HIB^["ox<+][+1$1F_Ga*et[ZWDxα° TE^[cVkCnZJqq9 Vlfs\dfV&œ lo03f>$_ R rE[GcX.0xD]ܴ~pGXQ RG\\qN0ΞRk)0fAbq]m~mX"1\Kst-3#>TҶ☖aRLȁZVTŜ9V1L*uFtoo|1wKDROE \n_ XQYO"aV֓UleǨlZ "Ins*J>̈2݉Iе "" <}\R>g5x",F$҄H3Ɯ8;Nmsemv9nB'}_E3b0i ӓ]+vO ۗ4 ǙR`apŕlz{cQʝ-2!J)Sm>~x~IKaLǾ֠JV9[-X֚ٻ\XmVOCZ5QZ@Bl0Si@f;1ƜgH"b*EzSdΕŐ5XszмFR>B%8aFs?mo%`PM@,|0xUBl^;e6a |} VP;UD b)* >(Jgǒ\Lz( 6vL10_unMx/``d+xZ3 @)d~_Eߌ(t ~@jv÷7" Ïv-C ¨`vaߖ"[x& Dk{I=c+i}U .$ʔn^/+hM|u=QNEmX?~@oU9GGZ֛}׭6_{)2VV]t&a1ݜ*\o{zx3TK*"Y+??ǘ̸̷ϟ?4P0̇\@8nzgqWG-6|W~}^¾~[-Dxjj^i -6f?~+e;|93Sؐ\JWpskSEv߷<a31ZH0=orq7NJi &)fVnM͆>̅BbW!pDεH bQ: {ŷ{oR9f$DB"䴰nGF`!rZƚn!,|HtpZL&.Rj53X.HcljRW蜝f1/GDe6ȰL'HZmR|Ef7}Dv wێײ,׾ $wS'GUefIF8Y]o%I`c9-;ƈ.Z[۷M3W91:VZJ%wsLs,EZ Z}pD-ֶ^E|ϧV~^5 Gj}b\vf Ncy^@6ـ|~9gsV,92&BIdxzdD$"qczdbΰ}NH3}lRYKUHq!tPdp&ƴOs6F?o X42׽TE}k,[{^gw}E*̜sbt_H}󏇶 q^DŽ΁u{U9:W8~?պQ$3YVBw18" }_m[* HgZ2<zʬOdq)6odJ h+i۵{a dxBFx 3/r.At3!V0D3XY4akLj 1ey̴lhMc̻jA'jD4#IãJqosoU9¦ۺ0v z&eD3#H^Вs7U(VGJiww%E+71qu{.R1wc^zj>Bzo@qV*B63Qv'A f Um!ZrbvHW"w]Ĕpt<3A?ϫh)H%VfadQ]tW*"KƑFjED #7 f=ye{%gwwLӦ! {;3}/U1שzY}9LjHUb*s5SJ XlױVn~~G1E!\RKQea9i,~=3__m[FiN<؛6%EEJfZT5#<«"u bc#2D#P( "a"Ɲ>ƈiu3i%a@2ת$cD#zF WojC&/O\[,:fHG-|+q˟[W? 7442aM(Y&Zt[ '8F~(P5x7v0V}v v3oZҕXB~SK@x{o~(ן0""2]xlF['N QIᔘݵ{޴^1*VR%za]ƺA CJUN"d{mmw-e-3kkNcǫ@v,cn"*n5ε$ʴ|W8o[y;8׌LmbQZ! ajq^0G-x{TIA1,cbfD}2q^d8lLtiӭGQ3usdc]U#h^\K[m[&x>o[}?_?~AoOc½}ڜCf?ڢ(#h./OhVU"L`|lLR@zNT}Vp^ IDAT@.ZIx )fH1󲣷Rݦ%I;VFCD:MU3iZvJb0:ϷkUpmbzqDP lݽZT+<Di:ǜI0w V8%cp,fqVLVl#ܥLmp#Ƹ2`9>up )>y___oo[e]|Asf$fxn7IZ홞$}q~q]iE:1'ۦ7SU!!R$\3#j"s"̸-0)"Uئx X׉ώo^j",N#h$@Q?|(! ~pn$~wD(i)(F@q, ל@ƪy?W"jjUJ uL3G0cvy`t@QQ'3>w6 "U>D-yVM?D@Eد+Î+ 6&c8ϻE6獐D6< 㳶2m0:|`|ۣmܚʰ5i[!=ܕ$ԑ|D¡J)o?V1缮8N2?E5*ZE"0yt(e}Xqv?%ݦ^kĝ(j-qv?Ɲ?qt{?x  0h!222meL2IU)11N#ԪUj&עt"XKwVK$(e% 2|S22]!Zg:BPх 0-MQ Hna6t[۾眃<2~dDj>ІҤTRH v BmX$ =bYI)ʯbS\; ZҚ6i}DeIfXE,5ppmaLNt;=P%"1S }BZ)ϑG}o1*X *TTtP! 3_->|q(ud{2_"WkJk*JP"1.^jӪ@,Pc{=iڌdݺVC`2X⊠B$cWΟo;3-l hWD kifn[m>-KDH{E 8^BtGLq XO6O GZ)Zk({G$jKmncyڷgʐ#s]lȤY8ms [DzRgSY3?l Ϫ㘅H}ka&`PZ66TYuv!3:t)gUTK#("DHU>}4uWxd,^޶pY oV"̌I-9B7 mEewʢZ,82Ѷu^ݪTdo}ØPmwVrY _by p"waWCҴv"{"L،@g̡o  |Di6nhSTP @8F\CbVе kXk9rz|;ϝ[ȥX>oU)}wj%Ք"ۮx}]r!.S)9l 1.Y羫' |\8E!bZ5.Myc n䲻GGxi|X&i5Y;F [*7qzu QZJX0(<ЧGƌLTӆ;ln̜fbL` ZJ[aE`x =2_5xl}(v<)(>TC$mZn=y|l|>HǠĤP&fˡ*U"2)0+.4TaEVUAfnn$B)se2@EB (kK"]Zɭ2U Ώ>^}ʾm-"? Rt{_uF@G!|^Y87F3ѻ 2>A pSZC,=)0'FZ57!$Jlep5=3Paaiʢ_Q,m*Q"a Y5tuz icG"O#cYrk0!0YPF)U8#Z +_#y}#YleL]'60!nc{/nr[Ǹ&ѧ%~q]9DʲkQ*N mݎs+h?qW3|NZṷj)ޑ9 6ч'ާhY Fr\wuD}#$ "Q Qf:~ D->iua)'5lshaS7D8OНEB(Sܙɹ@|Eᭉ7/ghf2Z$_R+0u {Ac_qjV7戰Zt' a<RB}Ir9<GT`y-0B2*^m{8/iC Hslyؼ}(s Wď:lG[c BL>c00׽_²rV$J6Y*64HH"iucBFeҜ2 \j`{8l >59ē*yz|tc)~+A Bs(C2n#XZbJ@#3!508"b4[Hi&i+W%(S2)*aRf7w9m[a|qoo.2Dm&E- w 2c,J!-B$ZkM3KGz^9Hf1qx,$b"QNPFÆ#̮MA"\kQ6D!  \ȅ#{(siiee f5I5-(=fZk}"s52byo93x_X}> @!y-zɵ*1]ЄE9 N!.,ʜ+_t]<>b@с`}̷|<+K$D+D>? 9x#!fR5X#BU r" a9]X)"n^ZkUz]생RDF1t~fs/EnoR~O)s_F9: p+o{[&&*^ھ$Z2MsR$HsRb,֩q~H(܄h]9co",EDn3}}}}0?*Q[ow$a**ul}TeJ D.ь3DㆄL0[Wf{nU-2fci+_iW:R!fDȰpFlR&MF,K%)L* 2\ɓ|irZAA,__q.>v;&w60DX]vZWirn޸it+t0 "P!X~=Y)DQ5n?BP 6emeJEv7n nhUbLdP$[O=Z 90@VESyPM1i{PyGC{FH,gJų@100\BQBٮ"1$""CAD Mau>ڴ#?cCA^8)EG/C AQSN|珪.h nu۷9#!@zz?A7C>UuuU2D&L>ω aN>'"[1.x"mGۗ<{LWqafrmGnLfv~F?Z£pH"g 6nV*(d]Z@F۽HKfޫ{]i}fƊ7QxLYTq$e_T0"z-<8؎AMU'Nf9[esEC(W??845RLuDMT%Jc:6l"|5eHEED!ZHXj@FUYQBi.:Y&$WM%6̈Jv*jnoϭmfw|fp-10* e*Bdذ>$V$M]N10-<=gENr"iDt52ZŸM#s+* NNc#ʑVQ[݊"SEJ)ZGд%ڎ(#b&Ut>5LRVpNs8fVĴƵmZe<"3kyc"UsB%aHV"u"™Q[Kd&™!A{+Hxfݫ(#S6ʤ5ȏu0:& 84ipFQaHODdd}ư+@dUMj0"C!?-jr5m͞@S3&

oԗ BgNJ,ω0 WSU*H,mEYTo].EV|%#tpjz0XU'T޳w6gtwuprfq3NukYnDL77r:/aGyP_:P ō6~I,kR6DӜ7"YDKas[A`L36@,wLKpD 8GG>#9sN+gJc23_L0xZV‹XG`Zp9oI7O"!&1 ҹ抣ւ"(6 (K$`N^1#=ù;xDɚ1̝&Jb$T  5%dZ_3KR R'JEHLN"j%VnM!ߕ("{4䌅"pC  LطIIзf!CLQo[$T,K+m + fajlۂVouUIL,LN֠'ۢm-^J/5RIV825^Q%"ҊlmpVwq_S e\q\+7V21=c۷mkw%a(~ϏxtP-|`+ę?>?#iWrlkmԄ\ *U%cڜz̤0.?Yoefl>)ITUĦq]4\U N4Ax<y)EUXH$`&)D̘í(2gTطG}(d*f>|BۏnJR`b ! .ԶFx?2'8PZ%NIps!ٸfinªEɧt dIJ'1z0c y{  +aEkkV؊>c/L9X"~2x}4LcD,: ( UK5yIoDZ5n'źG-Z.Ж9P "W3-]LBBLcuub~gxM@qLr/1ʿ`N_zE6bi]goboWnZ RY&Hr "-:fHfQG&!o\6NG, {*J͎*AĶP {="὇{c`U!{8 2=}y@u3ҮZ?i/qP2AUAJZ"ЯDpc\-zD!39[)M_V= fj+*̾"Et:e']S:'cJIε+X'"݆dbd2$רOR2Iu}+EzeP;ʮn'@d$4>>X}Vk*(}VU-`,{(E~R(3{r_G$sUƼpb&-Dp9O=>i#"-qqt-=~\WQIs7Kmsxvv;/:VZ*@[U&͠9"!2lr|yZhdߴOisNQQ9Ijk L0e*uRZ}\3<1"FfDʴ Ҽ{UIJ\װ`_, CHPGW7 0=͏Iz%lΈŝsw'Xԗ1/Q|ɪAӒF` r%8t932g&KңLhZ3aq8 |9b1Nz/*Ƅ{F+[cyy}ƕ[U)߃Ķ!) I.)p-W2OM"e.)} Vhr'8,`X47|ۙAvS^vDgi{ZC1ݱ2'Vn/hˎ% IDAT绖pX׀e40^+( hp6Q=Dk! Ė\(A记5z'PsVoL 3b&Ꜵ:Dp: 밯ϯON<_ђ Ql[ycDjq+?ua hckڣQ$[ 7n"ZR#V,,RR{6X%o")Ugf"2u}}>H孢H7P ᰉӴeCS<[k V;$n]OUSOsNTB\FZ="3Wn(ӉmxmMp33%9*eRDݗKEH*xhhmg+LrA[{<~Ϗ|kjd?ׅ#m*@9h-`Ba䩤mnZ-g}568qynUHweOae͵}&dR _U[@*qV!R5,"k <ֆIyׅІ0^B ([x_$~oR&ȘE)#F1o1+x=XֳZ<  @2`UUѲg2ϙɼ 9^8y2"3 J!<Pjif}`fh+xIɾ1E8z!vYk+)jfDLRnq$Y>3sTF^5ZTwUnfsd1I9{_@\ID)UE̍3V(*NSJu+P)^nGx~'(mpfy"Kpa+P<²#"=N0qP ת$ R'iAc0Ikm߅^`3}"읅3mx̄) p@:U`~J">/Xz鑠X]{i"׹˭V̮zrۖ˾5eF"測"epZmsMx&ؾ ʙiL_~U=8㪩zKg3% hghU8G<{7_UY+&vn*(u0QڴY!D$n%a~kQe8ly"4| CQE%˝!E59"(RA)<]b[)!2ehk~k)A`s rQF 3qCH0S2BVJJǏis\33Y)-,EEAXaǰa`5H)Ls9cň!b i^Ekij}"/Xv}}ic#| ]%æxyoIܻs([VZ)GS)Hư|?>>Ae%e8MB4&*Rt!9|>TUE34#AI|w 0t#$5SbJ LbM3;G<_KXY94ig xVm\uǸm[тy1f(-KU !EmxN뉒HyLv`DYCgd!Z-Dai }?q{'n|qNrz}?YwH?WA8OTq\2x3# ` "IcZ99vJUDmo^J$xE K edۛP.AfVDTʶݦGhCE޲ȇO#>~}@o_"7=4V}RDlXw$ S1{GN0 VN<9_^8|0 fYĴV1CDNJgHѤRycf-W=Ɛژ*ڗ[$C,g?}Nr: *+3d)Umn|}|Hѭm9۾Tj 1gm$vmjYl:3gZk(͌t߂vnjYZR6-k}nc6=cdx2f,lT1M%_n$ZG9Gk~֏ɚЭfz:Q Z41&3G&(?9r w:Y m[۶mÖH)Ӭxj+ mGځ < Z5=&(PI[{|=VmSD`fQ|yj"׽B'3 ZqHc8ϵ$xb\4NN˰ti0'i}ۭ*OB`0|q%AZ4mWK:J//n  e|u}|?2h= !jK0c cМ4aF8+xyѶMT[89$Jc:hd}oR_I\<|>#eݴU2mј3s= 2eٙ*M>}@9E!MX@B\af3Ehre]g5Id?10'X;;0hIض'/bt q/JI'Q+ | %l;D@(( X5 J/q /UDx _NejN\wF7Dޮ%rDYN&Cp]^Vl}`:vV*XwɗF>)>b=  ޾ai֠)I~ʴ3`v4E/ՋkU~!0:Oo߹(A`\&(ZۖcO[+}1̄Y7sXiokl(H8ErFUB:cy1J>f ?}|<sD8XQwKחW'jm~y?N;*_~y{Zǣ~|v_~='(1mDzMϏU&3="J)ns ~Zy>>O$-ǩ6V8LUoMYx =mZ+j}Ĝ'!e(Dž Oz۾p?Z)ņG}Ι}m9D&.Zk{qasov?OO6b^x[}}{-xy~׿oĨpx>3QKJ#]2}>-V*=& tĜq@(Zf1Hj,\[]gy QDx[- AD ]K;稵ۍ@c8J[+$xFnv%`UVIDjX N"2XZ+'2(#}Z ˶yz0G~gAgŨ^jKZmMal3tfi[y{mesRۯ+H6k۽@RHK'*'/r߫B4=#o9F$Ѫ!۷8yG"}R ~{3kي*Q0'b}גh;yqiRt݆E/CM)¢f_`a5VViV<|A|섡‹O{{۶V#}q1(-,}\C^_Zp]`js0QQ93#1ܵmUseGciKy8{UdZ+2)aaNN&VD^ZK$G2R2Ȇ1ǘ 'Ӿ( e |9ՖZDlJOL U>;BU0.VLx!*Fz)6ڰ :'?u>BQ16L+eN*j{ ޥ}TwfU(Z0j - !1HP#SxoU k &*)RH[6`/A&vۄn>F تdR&}<)= B8nhM0݇J3"fb|@<+v`fa}%G0`cx{CQ W|e}~|RaR -[my0`кo[|_r=}Z^^8gy` ˯Ӡ p' cǏKDŽo3#1GI qv'Q5m9>VDiekTk3p>yRjR4b>m{)o6 ! $Я[ѭj)> _Yc$Hօ+Z ׽GQZ91"˜bg!;daf3\}+2S&n,n9|131gCi_)"a\}dz47m\6UZsF!"4pemR\[t@"v(Ђ_nx>ꬓ/ ]\nuZ %.ٲzlBK"J^Vv?Aj_/射TLq?WyUbFLbR#,GޯsW CI":®JHĔ՗bUI"a› IDAT3.`+ žaI膀/ezT$}u.W< !`3]Az%#13a+j1d)Ȁ mĸl1a/ "3 bG,`5cF9XA'd")~;yt ~FIhz!^eL sA*Xaqi\$O&@Q 7@d>mc8ϠS’j1Uz>mQx315ֶe 拻24Dp3X"4#$6`~۾ je aIKU'4gRiEIlUU%#@UQ ?SUjV(Vmy=(#)DPr&tB>C6Qd6f3.-,y˯릤 ھ|+Dqg M`Rmp|Grp]Zb}G)<9 8KsaxLrssD[PYj{ELHʘkDyam+h2}%"P}ӆ1ᱎD? s"#mpjGP tE">^OCMNt]tD&%>smۦUhRmg y攩L$V,¬ ` P}".Rd9K%Q!FdbJb.$ e~cH4U_" \9v4 ƘW,Q[K4+f#>X_ ,(Zc< ]̐j _ZMO2Њ;Xy *_UATlMQia_]Y!dXE'/XK)ų ݜ2`@k$HjE1<'TH 0i}-/Ԩr/#9\Du)I~ /N8zc|'6j]r e?HE;^3 ʴeO2ֵÁ(T*Aُ1=RNDӱT9ͧ#vC'4D IJ]'⭖Z <1^.n{ʤ40H*''ԉ n9/&R3ۛTynu"4g />OO <`Wr, d-mGwd2 1;q*i9>HIZU9YT^_o\T0GxvV۶Mds DQ~8=.,"@^i+DeR)̒100M{Q!^ThQAZeJN?r3QD轟VQy1ǜsD١2, ʄGVKYhi}fV* #3QY+ "dj)[-EȜvHjRU;h14Jpdex O=&MQn}B,*Ki!KLp&;eXxJy{y9g088|qFBၺak =gx Îfmf58nz//Y-RLNW,kAfHTgw9Fs||:$Zq002WUIt1Lq8#zens|1N|>P'3T~o{#|!N|ٟOw*T(cn1Bi>J3\w0xX>1咷<2=aJq@HÔą)幍$1Z8GGD^jkFBkHӓ@M(s^ 4׵Av%ٱ"3A["]zeNW?W뉐t!H#a8c,~B/q\*Xj%9(E-xeum_Oܼw0^}b(<2A0*"e9n&fN:&W|E"x+B|V[skK ȰXxI693FCARW0o  jbt )u^;-'h"VbVJq~SL;O( |Tժkq`3H944)OXNZHmXeH ۮֻ/V \!knY3#2#,q^BM%îi8\xZkp"r<:Œ\1B%Z)E p)\lKfaɜZW*-$K|:lblme"RB@DX>J-e4*ھ Fʠ @eٓ{(Gqak4R\,0EAd"I3TmEDxR"MhឋzHws4YUTզ6"LY Z.B̀pS/V18ØUHh-:'Ϥ4aT-j -3!W"BW~"tsNj\ZI! J,֌ B5x!C%nDvE/rb(pBO@hxd F`p۰ګ]~r='A@JW26 $FkU@o_b o@z@9|qB =Dqڟ֦S]6J[w2wB§'#oE>#F Aۮ4 Zӭ~WKNv+*6<$ JpueAZsLXgNj]Y^oֶ9-kj߼֦ZΣgch$KR4DLt_x aNT8g>~|_ Opr>aQfa:Ϝf45-}V0w)D%"2k[89bL|L(ExLr}'֝%cΉ^ݿ{ɷV%qI?9Nf}٧Y yVӞvtX?>c_z%`+bsE١A0ӚGEtCY["هߴ o9g?>(S2BUl2g  p1D,y=,"W;t/֪ZgsF;}'ξdF m@2Y#yXgᡥM1w*x}DiI3} ̢ʟqwW~//uߋV-h”LABIZ-BnsN Mfif >-*#b2i=gTᬋz덆UI4ID4/|mGdYzp'ꮞi4 Ώ. I}Xyk$ }"#Y g(N)G,4 oWQ,qں*n6x?5HdDFER^_/[]%}l[]-?'Ly"=Uk)aa1s8}nق>Jz6VCcz}Fqbm-γ Ar{c뿾/k_#͟Yeay&Ir;)c>P*XD=rt|bK+gd\ mT;DA@ Tŭb- c޴'< e`t~ /5 bFs' עokQEFȼ4sME ;""T#3H-eۖ1ƒÉJ2$6$g )1S RKę$)/4Ű48*E3H"sEƜ""Lr1tJ0M>=(283#Im̰CPk_Dk y39)3P] 9Eq){f sGmJ"ʪ3 -Xk9C>,rlދ9ˎR+mYy[|laP *4'"`"PβT8<& 0v ys0 y{ERD۰4wkgTDd"(=\GuO 8{dh& 1@\Ҿ]Ipf %DDS̘2mDmmE7a8|.?TEgp}ZT@y& %1W/ 4tdfu '̑ = j(b]8{o8R^W wS D\)Mbxtd`]/m].҄߈2G[ yCE>_+ob@\4X THP R楄g0G&BhvW ԑ8; n˪>,<$,Vq.v5AJRkdgn7^TUm]ǧmue;?z8 VdFk! 8V_򛽿>KBLLHY}-143u o\dTV{J-eE=b̹@PJ RL8Zcf_WcdH* K-Bt nu[jla;X*E!ڸ@JejpP%t%u!if""gs8A׉ѝHIDm#7s籟>0~F˺xD>!Jj ~ GHϋn-sZA$W9/{T5#GXYĸG]֪Ey<q۪HD$h;gUrs/Ek]t9({(*ZW@tIяpۊ??VEC 3lt*{Gp3GuehDG'>XV,+8Y*G;j3P "sKٱ_FRqcm4O Pm*an1U 6ԥPW{䰜\ѧ,)=6b H"XK-Km?яO__w|~`FU8[gV#31~:~^]@h3y)m|oKK7x6L9zڴ*S 5hy &Vaf:4</ K1mB],M8h0x8;@S՜ $bvjC0'՜H4em]RF;z[qb .ɘ k[y ꩒"פZԊkS C#}E5f:7O2mTQ*cSTEՊb:6־'"eN b3atY3uL\G)RȘ}4'kxZ DGB,,nÆ_ˋ{~) Ņ }gkh cseY&.̅XEdFNg7OmO$QuʵY]"PEsX?WlYΔb8y:T)IjmA<&#T.Qa (C.F0_,>>{NK‘dN@(@|a0rsyr SXj6P,p(PY%qc?l2ɁZQ@qyzwvq~|ZEHcK8hCu>^e??o+3e@ 菷[(3#rcct;;eb[vJKCr`Y*巷Ed꺔|Z~O'Dq$!TbS2=x %Ĩ z1! IDAT1ٺXxZRzFyo`ڙf6"/nepB`fYTTݼv׌<3VZȑQ$ك@@L 9@&<8﷗e9TmلR5 㹷]}I=ov^k/ԏn菸࿮nP" 0RNKP"}8I0y<ݴ"yv\Xv .^YəV( J%"ֱ<'B:㩂&uVrB0}|!f7AzUmk1@6}f\CeJrF .55V?L`HQȰ."T}d2臏n!* +14#sYz8g#fu[$:۰;ۭ\8/L("e)lYm)pasỳ*G`1/̟% a?A2Y{ "Zo/LDѻ]Ie~|XS,ɈwEK- 0438=&"a}JuigDZ H]^˒ARxE| -'s>@zdBh2̓%H|ZHXIo{{6G,9iLaBd1Hu?>o*!ϳ~8;±,X׋mYj%ǢEY$'nNE T)ttTH?[{SBDA3z?VjeV*6F?cb_^hےfL doUP"nKE 2<>y7m%u8298`G304KŰ:^`C%xCf'p 0sSH% qyRD"|6*f\ܣ$"\8r(U0@2 90!L'Z7&tLє/bkX, &Pբ3ARg{z!\q"8͠@T! (T I yhk/djKɥIzNl]]wk8N@ cZ |N*bwxBR 'X_hdl6&/W(X8l~R- SL~FDD539_TR~_14@0 }粐REZm5ؓ@ܷ)(v[",8@r۴Xw̙GcDcaWbnE}ƔR .6HŖHę4wП&1`""DFWyhX U. KHº`1ALR7gaL6G; GHoS篾( Xl{LG?ر]Z/m>ڟ8E͎RQ. [_Vq+l\q(qǷ㛔"uY~߶ۣ QmÆ'LF5"l$u{"Gan]rM yupVlh5ljd [^~m)g`mme[ HBH+bݴ֪cpeުFe"Ve>(R$s8ʦ1` k>̦'uYـ*5֕hir&zc.߾}[<GjuV^,_H`[߿=~譵Kǣu/#asد'k???;ˊ1P j!*X7_7*y⯧__BKHV&!̰\x|&I) pZ'ߞrvFb]Ӵ׷6ϟ>un۝!J-?>?W*>>”9m\%`H1W'PpG 6/Yi) tjPU D;l\?!}@A`l7&ž .$c0!$@@ $rVZS A:GK8Tm ?söR*(}?jQ0} bUZhE#L+)bY$"#m(9RJF8?OBD1p'|۶ɶ` w731:M@KKբ"*26<,*:%=ݚGQu.ub7uT'sN={^W {Dzfb M.El_l\.'!f5^^v#=/嶭ۢǯѯ$ P"£bY #G\mQD/HA |>R?~@Dda13H5DdۖptWѥ,"*W nn(Cꆣn8֠ {o]5TcSu϶>w*:Zr]kwȒQO7b_ouy<>Ͻ?x)vvۖঌkf}?ݍۣ{X]oj AZv3$RJ$S]""s4"BAa4_7Fkމq2_n7l[L`!DHU]E׿ 0?3Gg=BKtK!P 쳅D8s/ K鷛8mga,W&"ÎTÎR􅜎`2јG;gH^[ϾgC]G df!b$Z;#!wd^>.OhoXגsZpC-( LtM!~gDK.۶*:cYk|{c.E2"L͔Y"a1bM7IrO+h0Z!@ ^j_6ʢ$Ytt4AU2nl:)}N5w2fzC%5M\w)qM's |.kR0'$Gbk;ӆ Y>tb`8,ٌA)æPQբ 6|g9XJ9~󜠐IO@;q_˸KAl]WQ+ ?*u+mk fX+UeB<*00c@k5;v1sF.JRس}J);3n b@B|o1z&IZa]uUEjZ)zxpu< p6}QYEbt1 E*Iu@{=2flh }`a6bXk0"l2pvKZs]#QWZ*C{DP+O.BX3yY,gJճG}rؖRas$#-lw fxJR7yǴNL}[cχcZ*`'xm~<1O)• pd,/"#$@j HRnm}}ݾk}w zkkY"H4AcRHvfImf\ |p2QSx1nǻ矽+~><6f,l$1/dTJ>/r.}'svv _iKLuD.[˺Pyh+q)a61S-3Ho|)K" dhZy)e'1 A+6bUl#-OrUuݱbf9}>Vn7ЖxǺo0Z1۷rnx}ŷo >chV텙l`Cj"Go.mL$@Q[ kjLgXDR97v> 1KL=ZW8KEQy|WJky}>v8.AzXe9iA)w <'^Y$8ei} BۋfdnǶ?GC7 }yI&bJ hS?׬FG8I 'ƀ ^tc?Pn"HwŖ%Aipc`8TZM H(sd8KR!jvC8;4.)jUz 8b sׂ3"Xo0F? gRfz@n𹮧k4 3Q2˚D: ` S ,"Eo̐vVKĘE7^S?~MYHZ "Ue%"<}Wc5){(֥bI9#"fIF0nEtpU>bc0Z^^??<Zκqh%qv/N-GH)+t("U[A2<[x+ah5 +@{f&Ja4kFxsƯ`Aq@eD: ZUysA$b90"aEVZpdR Qv0Xxf\ ԥ5 .,$sNsG$&I)LͭٗX*G$s"9㬹Ps <-c?a@.\!0 s`,0o9jVdE8◘FpGo8?Q|6dvqp|u Dc6VԵP$@o}e,L<oe.zʼi})JXml "ɌHp9_}`:ΎׁHd*V5.ܓ5`w` ub6/%럺jp_ظ+ F}~'.Fx~J\ U6\/+ _8: qͿ,%kuЏ/1c`ZVP1Y@` df6NDDV2s%FFnc8 e,X֌cs87%d "[ef‚֪`2H8i(D$~yNl3h}Mk-s+@m)*m/Y*<| +z133T.Zy?|Pώo?hE-<3]|eKcrKV`;߿8џGhܶRlc KA 7S&a!m) "^ggfYĪL>O_5̫Ɓ/q䕸)ۊ bt{>r@ZaײiYڈjs%`}Gܦ1P5vW8n] qCSR$~ 2"" IDAT8c|y}>޶}/Li+*uZr6 YD۶ %\4ǘBJq /'R-V$Z^҉>!_1@%X&C03.fH`kekY}y|mUAԇ-낚z+'Qܯ}.Za(C5Č"W*18 TLȺΈ%H bټ%ʵ&o|c "ԫ >2!sf-@Dw[R>xaE83ӥ0we"3Y"{i'sځ~ kT6gLw)GF9aԍj''ґ {ca'-ffp'WDa9M\>MP3K83qq&O>j!R(bn~$/9 싼+#>~>E 숸_+&V*:k|&ىՈ^C=5kD7xm7-H wSVPjZe)UVAIL* bw7FTf13"jϿ|??¨}dF99,|F"%fOZ I1}ߵJmcFq9baO9.锢\`}X,11Rf֪1>@*Df8;- 8tuؚ1go[bFB72& ai~6I1m|:C-ȁ`ZSl(oPVj-s2aJ"Gg?l6Lh ZK-Q VgmkNV|n6s̫O*\UX7bִcc8#KeMEpgXbU_XseXw\B(v^7|gX7k 0sV)` WɬVln;Zz #"mL""JEm.,Uckc9p3 c E+q F9}epOO yeBJHh2hQE2QdMsPPl:'>?Ϸo/ dbIq|:\][rҪ}yvgxNk-$L*Z VXæ0+0MJôIHys%s1FO-n1Dcf@apn,!*VjeHM_t}Q;R˨,Ƅl\U>8}.5o(zE/6ASE=-aXbe|[d0U3Hd^@U_(\"BHg?UG JC Ǽ˙@JRTyZ$xU9EB8E3|f5!+XJI1/5JimræL޽r}2 a@*VC< N,ek*OR 0Rsz$R02"V3€Vu8lk  sts] fԊH8y LLk sBIjD4Gٺy1uvq[C7n”}%l5¾]R7L>=;/^z~ؙa#mń =no89y^qdբ:9A\uTUsx1}g}tg2 KUKܥmoo71\:W1P JPK"uQR 3aZiL> _2B(*6H"ǘ>_O1v;T9M'H0 )ǙgzT)"?Pus-|/} 0PTk-JdQZDDq~qo =EU)}/6:'Vd,\4dL&tcL$$! babm6= NX̥c&$fa1Oy0Apj؈ײ-,H &vu eHD&K2H()oE)YE}uL$e.*ukcynɊR~ۙn""2}FfTVVg(e%ȓM3bZY 8|""=r}#U9γ?ɅEXkz3iu篢B-"‰3(Y|æ-Mxb!ʽǂ: N!' Ee2kMϣToeooo%_qwٽ5a0cFܬß6@hbm;[{uo$TĜ|٬[/|9mo)n5V?>R)`ζ5Ҝʕ"~$o \ 5-+BZ%yN3ԢhX|/ vDJ"X`u[Q>WvoKZ> 4gpD١ "tOƢZwe}@^U^LkQ.NdGjjsĦq+ Sm)4z ")t3Tx\hOp-Z#!#l{2=}+t$Dm^cRc)`V5,ϣ-AIpU^}RR3|!afJ%I0щf`9M,\ʵtDcmLt-jbgDD 9hZӮɟ`D_~|mUwa冈}4l.l`aH@W#90R֋Ժ/D@KRUjm}W0!'pZʘs7G+`!asLǁ9FlA!QU1!(0"DVm|)0#$Ñkdc* dHjku1%{B(ss.Y8qkث{&8hF,'hQ?.Wpa mri[oxmjk4B|Vڶu(RZU\6zPhѺ J[,EJk}k;_G?:߱Wݚ[)E(TKaEad佲VЪ CFL,4pt<۾f|>_'1n7&d+89"goǏo8n֗!89A.` #{5MUmzyv<_XO|q-4 4ξ]Ejb?x~uz#_OƐ?5_qL\U*-EtRa_BʀzAsaj.L8IQ Q/vJo-sB ©Ol ĉVUn?1tS*ZT)T!Eх*U^XI afGx[֊h23ܝHf>|U-`䈌 0'lTb@ըJDD"sQ"Z ea{F֖g @x,ҸF6ŀ۶ G?kn%#<8գ5)0ML[rIf6Ē is„] Ru#ܯx IuTe%Oh@NG0(,VN} 0w;~;HIuT >V#ޫ^)k|\7e9UeX[`$?5Y\ܪp>&PQ-Z˫cLOHt7!| #ms @UYxtOxcδt,Yk-BǺ4fӝsrkoc6NchD afR)@*Q-"g{$+_ݩ%RWlUUJ)i69)sR1]#H&_,+FI56>+$J_3rv(1"f6Hd]oa.HaEn ȵMͱ_c`! cNK=ЪH&c+U~BE~!k<$Ұx&Vk5~^(u\sgwRFmКc`ۨ#T߾ߜ؛2G|EK9&,UIG78yKǵ`^bgqG][3J]Z¶(c(Vp_L(Gض%9:G*xar|)Udq?lm?21϶mxW2WRU߾)KDȽ0oe+$6)PINy ^bM >W7/?SRs~9ZK7ݽ} f,3p>" coNkVSo`E׬c@ܿɶWfRt7R񦥺m4^6v}ynckAy(Z=<*8$R_[s|_CqP)|^/M2B#U`I3~ֈk Us {h*^% ֐pcXI>|mVaQ2=ܴ*|9{?".*h)8m+i9}90Ax;+@f RBΞT7.j4x=P_[嚙ObaU$9Q~M߷Au1h鉀1bV1L7=1"?> "U?~όZJi>i1^G,wupM#n$Qfջan4s63<.%URm;A1L⁼|u pD6v<~vA["BѴQYVv|}4t ˰o3яˈTV q6k%';99 3"~mt IDATL~UVUU sn ~YYҜIc}Hi(5>,.a8(zðb,M禎+mKM]5TUZ*ذ8X9p|Ghu-z5<[whsf>{'֋-S?ϟ?Ur y-D%Nw3ZyxeU =6 psx{B Ao{n uy̵< i 9uA0y>G"}'i`A;PשVTjq1}̘K1ɺ=T.ļ;Ĕkߴ~mKNhN CѤяӰu_?Wzu#[?$b2) -m=XÐYզ4-vY RJ)2,VPan1֌[DL39㣿+Z-ảwc=B"=$7u7a0s&eD TX?.bl *Le֚XTE)"20J71FJL WlUe%+pL4LR769ga5X~^|AD4|R0;|F9IE*L Z)W9Up?bT*)`f߱IJJnZ1qk' ;XQڶ,ѧc^< AqKk%nom&3|#m e~2:@oo߻z0qqn$)e3g Gsz0>ُvxzoߟ8眖~~Mt6ۏǜ0;}zou=x iĂxcͣѻN$h^UCY *+^} s3axtlE)Ђoo;9nZY|}uQ j?77߾۶ƜPmi3?1=,U)Λ*MyVbEx9F>vHo_ǁD/<0C*,?q=j1Aۮnj20H7" ޿ C Y+缒eU -dFiʒb߾݊0]1A;or|Rz)-AY1c&kQE_?qwھ}3©ZU8g.NY_a۶^)F?>h4o?qWɥ"6[Q}mooߓU%o.ʵ[bci"E2x>J6ʹ1תz־nD&q~ӧmn"oTwϙqOl^Ǹxgl=wֻlmV#cqd!(ͬOKV7&||~mecbٙW5m9vXs~5ZQjٶm7&y{l^GfGs>?qDVePȚ6Q՛4EԶk"1->?< *T״UϏWNwt5TFk허DĈD?'(7 y 7ظ>I l1n,ޟٱUP|,} WdPk^p1'8T۶5wk#I^="0ʊ;3] 3rIAh Ħ>zEly?Eqqݓqf>M÷7<l+{[+/^pFދ &aZ+Z 1u^x}S2<Rʜ HXhZ߾vGxJr81N9-<5*WG?~ε`߱?`l{aHcL3!nk_ * WRo۷<X!b7kZKGA*?^ü\ƌ`R2#5HS h`VL̄H#1 "ЭH~~ZN0"鞙oZk?H=3f}Y.49mNnox]+)Q{CkLę08>qpY!h5>\ӑtHU<w33?zA*Od .[js-|u-b)BJ<ڶ [;:ƜSea RfZQۛZ<JYrJUP:< Z\Ϗ{@ћ&Y$pp6TE E-#PmM \'}o SV3ǘ_/;{K 8ub`kο"kEqWm^/؄%=~TqdyJmdq\F]aGnx{!##5ͦg^9vLX`^>[xKg= y\~@ďv]wPD ("*:S7yfF۷9F)|7f5prg#`"<;}#M_?w.UERnCY`c#px/ՍDx%!J!&⭵Ƕ[?=n(<͈c w 4§9c VNn?;2&,A+ ',& ,`NUTДZD(_'g<4!㴈oӈnۣpS>oۏ,J3@xĈ4fעhm(D= ~E+ڰ:żϏ=sŌzvr?Dm"0ϕ>._)}_JA#c `>:hy\3YZHy^>f5-=k)*_RGBn|1㧪T$ƣޟmy߅0e{, Hp͛8S :PmԪukܢݛϏѿV(~O7}۷MDY{d$c[YO/[> h zksZN;wP`Gp0@~ih4p0 & }WD5gDK0FFhB9]r*R - |l[+6F9"V=Ë홏9Gf{UD{{nfP$N" @7L 6f9( MԢb#s\%JdX.S~M׀ب1M7Ì沵 quC m y^Lۣ\[Q-w2K uɒ 8^|#3 )@P6ЪzZjk71 (rZLl%7H'(6(]Qkٲ~}bk!W:Tv/.2e6|͉! &UugRUTo9E8fJ$q]qWkLL(2Etih_'@b965G-%SVtkV^xH JE%sU LΌ r0K*۬*,RjX"CDYvl=T6aWGɔY n}K2Q A -HS?;)KQKE55XTrMs~t2wqAޫ *Wfzw i,{U-`!R<,7%vJO2Z23P Zyoe #hRR)ns$@`*Eq7֢,$D$f($"ay2|<<&2ID)"}E#{y4s kۘ)A9_cBcp$'Nȅf\)sm 6сUE[ȹoqCH?#R4V+`  Lf09(oOd}�H%<'Bk7򕎮y74eTL}'AtLzVl~ZGQڷƥֶ GDFnJWc",x|_ 禋&y^?9|wz5-̄@-a-g1 .>bq|T HxlU3c&A h9g7[3)DEJZHǜZ6жVJ% x>X{ >Y,F7)s|_G .WH` BE,!A^xfA)(%Z{DXBb̉n99y۳>ڢ?g]Z^xs䪇M.Xr1-&pssRjkZ>%3#¦e3YaP 28?xz7}kR.;?B uu;<w,~Bǽw⾒ $_=W|>Pf!*WH[O UVKBz Qڴ9[U%b~7),]Q31y ط}(UDtV #2>2m3kpn1z֊2mDv^¾( a$""c<ǘ 2/&HU+ #y/myu3/ 7f01szh1N  Vܶi:TD9Ei<͇Y^'ZcϨJ_ZĜR'EUV2"qq\ZS$B趪VZT3SDd)EjdԦD+U#Ez^fVrX!uB{:}ȊB׍%5@46L`gcVnUEV)æb Y1Rv"0i=Ja,U1fjU N'ԃ*/=11k\=1k :3œwV ]ټ[_ ȍ[]Ƽ|q^ KZ  X 5}?3}@ J0n,Ja`¶n"ZDccܟ{,G[~Ui IDATMJӊu&΁Vbq+wn)ʬ+ *z|PfTIZ*a0Pi-#A:g'6؛*?BXf&m+Y4~K[SU U%PY{Ud>3km+TE2vPKnҊh$P jjU2="BkK)Sr]nX܍r4|q!f+D֘>2ik*Z fM]G?O.?Y4_:ǣ? Ux~:-#fl989?aLrk ECHw{:85lϽRK֢<[b4/4 D}AXBy sJbF7:" siƌqgÄe !y?~*AKĬ ۶=mk%uuO,2>̼9,"6x -nTJ)6}N1 x0HXiIw h[3\Q}a9DS  vE!ZTY,ʵH)BQm# 9 HAD ʤ`2\tULըZ0:nkSOt8aۂ`"TXnVB`L=92bFRĉ(hv> `@9Gҭ5f ڎZaQtCy,Vm)weiZrָʬHLbu^^kR8<^˧{! &gJfqf)x}}=7w9ЗQxx]gK_js0l~'gEYQ̈3܉1m HC ̸Yu=2LT52m%Lk;5VL/" Z@BAkoTEJQ6]Eç2Q"ݦ{Fܾe'$/cdIX`-qu J1XJ,uV`71h{ 1 YZ A~|u^?^Cχe EUJr$"ܶ⩍M'&ZZI׼-yƹy^X4qEk)ڮ+nD+}po-D蜾Kkl `0uOs Raי uZKUER+aJKsڗ_ć*@!Dk^.Z6WHC˄v!(6ums `;J8 paK V220CJD!NzH|RQXj ).wpsgf"32K-iF)LRD< s5 o`b [d~}E{<_Xhxb֋q9[&wkLy>ȉ9E9 $<`Q NpM{QGi~~1ۛXh#8 5Gw*3Nz)̐TJIspJwqYBtl5e ̘X$U jCDܝg𕩕$|cvÎ}5D!JVLYdHDV">>׿2=,z&m)Ҧ>c$!}I$q}%B*箖1'ࢺo??~uNG6% + Cɗ_`Vo_JcLOw8>4ZZdϣ:|vl{x^13<%I2QJ%LH)6 O1r!E@J6WH)Xic!M(&$IqF$?4zpf$x{4,AOW+߷V0gw&,N Iq:1譕b|T9bY:<4[A0KJa4Pd,DHi91 1/ a:JAkmx@D+  3q<#բ%F "JGd/ g,=&Xf-U@u*KH ץw~>*eWteu@4DKV^ hjG,k{5ןF$)vs2m2dľR4mGm9{rFا113ADZ2uigR9"c$[i f-E4H!/{f% N`坾݄sN#mkb9ǘf!$ZMiPa9@] 5 fb!$kXקl1Kdzd2̖hpkfKuR ]SZj5[C ba5e-j)6}XXp $BYh!=E:ʐfRNHB!DUZx\@}}qmAel@8ߞU<$yъp&sʼ|Em2(S_= su]c%3eޯ 5#̯Dž{DRx(@Pm6"L*Po5{0ApA ? ̻wĭFo>r5oJE0DƘDafIZS&Q($g?ֲTVHa"fX*,(Fctqغ<~Z]hy'0P½IG)( :רfL_<5^]*`x! .@ꊐAGDH7t J)Bmn@9ƪpYH`y]ZJunjR4o/hݠ%n<9X5#jZJ53pTE]ΉIiCU"c"S#̧gbAf8CBDĤH"Z(|I$cf8 !"3X`mEike)EXhybϋ]FzymHBEKĺ-4̙Ѵh%H%-ܾ|dtKVy-s5f`GC AHYZf&{N<}>K)ʵ%m=! -٤ZR@d O&Ji6Ӊea˙DXjlQ-<#8kwےbJ3u/JPht~~ք ,!JLT5TDVI'EY)H*-0hyIXcLnWջ8_u-0[X^ѢD$6jRt~ p0>gx8ATF[F@ RT)ʢ`De-Hf IHTZ832:y]kNupN#QҎ#_`D< [,t8{9:FRw|a#_Wf>M׍N]"3Л /! xuU;ьf5~}ΫǜB@`7߁=ܠEs=rhO{aoS+=۶mfN V6^"@Pw}(*}oR4IM9ٷ=V­EB2 sc&>m FFա"Z"H\@EaZ_Lb688Ey]#B"BLf!bRyZ=,Z˪RRN^˖ {B)Huc&w+xt `5ګ_^EKZt\|G%ŖMifFL$+###8 id5{^\ / &]`cuoZLU"H(RXPV"*Dɔ-̎y(QjI ,*m]i 8At9WZ eh{xl4mi |}"[a: PZJ}>\ L_sx"V}^y!9GWYqaʟ)x<[߿&@^na+LFdz21Z[ p$kX=ETʉi"jEfv ZEG)JB̢Fq^z-Sfw3wZ$immJ-1fSe%d OHF6G>V*bĚ Jw<i><mݗ j0JAi$* G7VJiov(&$ʄd s \RIͯwF!&;@5 6i2, HD~]6 `I3%Uz1H^b&= cYuMnIM_&sj=ܶDi˙ƘrXTRaM)_m>mF@)G?4r$."8 L(f)ھcGmCD~Jή0?Cd9[~OՒF+"6U,D$kEBu -Īs}'!1'`I"dN+̯rz((,Oxݼb~!D.K&Q$iG{h-'[d,F+ tk kR9!s@2#^9JzPWD a B֥b0}BH"TYlR gD%Lп6[MsfksNDK9J39&އp;0\H*oy$]?Υzٱi234Y]DG$d4i3RXt핡3c4AD$"GD]x{O[544FAε9VJΉ@qoCDVn[xi|oABAf1fpTsI*:X 1{kaFY\vQ2sr8'f@ l=/8nGM,=UopC*@>qJ&Ic,6r~ S3x>;Bo 1B"|=|{{c|b%8J&3!$ aNq-|ԂΫF$%nY Rmg:[CH ւH`nnWW1Rs;hDwM5+(O2pVH$XnYic GbŰsq54&|{㷽$br0ԇt䚭0T~{__><cNrbs)e ئ_m8çpgViPqJE5RS`jW;y/EEu`Ns9ʎD)X8==|^z "8ʞl߮Xy5h_Щ%\`m<}CNt^ m. 'Rm\[͉cyyxnS.![[FmIR BRYb9zb6\L݆Lbʬ"R$,Dd l w8c4$e>a2:њo}UvztmZܙôގ׿|ά٪q~W_=V~/z^?6xN?^}?NHn,MRRtֻM>PeU.I}v1=efcZc>mV pƶۭBOm~crNns\cN9o6GhҤu(c=<5J۶T#jM.AU[oͷa6<1v}<ӜIxu9_t6m7x \̎)@65Ō_pꭄIP3Z21FkgMUY͏ioDa6F?ٻ0՜@GkPY$4Ft5IƈErDڴtx `PsIEj|:e.10FؗhA4FOIk-]}>dkz̮W>%%bV̩*Txt Rɝ8{J/> c-?G.P㴔E Rr5a"vo>ծQ[ɵ{if9.K>,*ʱhyPMY~yW'HV$9i)G'cnu\a梴9>43(KG" }asDD~{{Mh\TPK<Auq$(Dbe%|63r$\U1EL~b ?P\HT$IkGUl$--UihmKҼ "f6"n;[]Ȋ.t+Fꖒw)>ϳ'2=ey V9?8WixRBJhy-ݾcn9W>& I Ck'|@n;Zmh>d2fa4ZR",*?9(* sJ3HYE%~1mȯ(՚r֜%e 0.9s\`}ײъ{5XC>3MATsyxm@[ x~;rgCU5>XPj~Wv_,}4I_ Q[3Dj}I Kģjn>N 䄽 sDn`^|%+E2'|^mǭPȊ}9fMq=l'Z{uv%[LãVѠ25WW ;'fy l&!/ȉ{Jr߫&f};]}aDhooۜݧ#f5{oۻ÷|3G7k}98_9Wr7m͈c4V!>mksZIpRU&`fۖr8haVV3A4 1{ZXh}r) hkf+Ñ9>?`8C_my}EgZrz%N\ɽW$k'[mϋJW= n,N+BU7|VT@Ur z4em#H5}5??; /y8{KYsVt{s 9!Ht:ѨϘ<#%'&2k 0tTb1zz#gJ%szp\k93yR=i7e]y[ݶu/vq<}פ|/T.^@SJɵnt1Cn"0f9 Dp_p|PZʭn9e<a"rRX0\X$$%M%K|^G2uF"G a}󬹨.sL3ZtU|th)r#|h:XuRAYD,M?>q0{UwkE)J!UڶBssdBi0JFA.ob6:Oesp'FX#oVH-=,"c66e Y eW>SovM8g΢8kR3gm?O z5o;MK > {6>GGNw3nv~FM>A\vްWj' 4)%m>`|Qo0",D/,L7fYYݢ7k o4c1U€`oy`_޿y a;3||cƘdf&"P~glU㷵zp^  j4ctD-HBx)Z"av$ nnEDw$ʚXcF CZ)a b&QM3‰]WkmIUNIDe[Eiw9rzyRA+咅ID9'>qX`q_5>qW v?]J" ЫMێA~an 4^?󉣣 9ct?I6d^W Ul[(% jAR|>dN>y̟?0'A@iD~Gά*DG/ U*IU]AQ7rOLE߿RTUXկgx7Ѭb¦uImYd ^3q=Ѻ l7z{DR?_J `߱ofMIj31"*c.Ry^m ͈RIl4 ǒ%/'cB1̷}3In3J91hqiq^l4M7fI昫яUS7?~|W&G1[깤zr;Tnc]5 s4B9%M8_[ԜAn"xm*{i]]%'-*xygN[s}>Fo*9MKBu^!#Gu<-4.z^ZoH-ע¼Rt7_pb\(T˭8Ց^%߶E$dӄEY£9R8bƾRˊM֙YDf6qmb$۷n*2f>zuW7ܝH$y>~\8"9hGpx*vm/ώW](G8Rrur{뀪ITuai+1i?2+HBT r>8qMq`lYq8gAkj"_'[%f 1#t B6N`I6g,;o$> ,u!Wl|XvR61f "n1{\ٮB{ml*1ZW;et00`j7A z5E7 u.qF/hn汮9E%rʉ Ⱦ~/LeTOU&%l?=\D}ČϪd cj0  KI"ڕQ•ek\SYN}u}^zIqs ;<>?~|U?߱9L{)\[HAD&@>(', 9AĘ PF kòH hǸ窚SdKQA{#1yBb3qsLaC&E@$4 ftj wr!EX1;lę5$}n6'Q)KPH1\s4gVIY(5e>$Z9V-# 0 00RT Æ{F,&r@8l`q4imiKffc,l;H,h5QhJEdF̪LcLwb@}J5>)-zZֲAs "cy|<sncK>kh¶u79$шJ9?=%s8J֭Jt>y~14[&`HR}hz0rD-(@^|Vafs!E~1F~Μ:=@#5kڼ .^ߓZyU$IRN+G4Ngqt%gcDDj8lj1raTjslFΉ: h5h, @O8t *mU!J=l3`fU#z3JΚD׀f$yQʼeI&䂤>X^T(+F|-]ES{7Ra daip9цV5kG Z!&&cIlmIaA*wUeѻssbdkMÝ=l-@Z,bfv?\V9tZ'Q/ &Q1TK9& 0IKF"/MQ9'fa4PyJ4_61;cx>/Y_-ŎlԼ^Uq^m5%m?>Rv1ۀ&$!hTYl}Y$EfN ]| w9h-Z*/+ OH Ͻd6O{Qe [D,%fs\ADPY@-䜄)"zܢgVB&܎anPFΚqyuzBQ#/_ &/pTXڑ5\A,̟? b'tybp@0Cx}hg~U (0Z #?Lcc'爀!)ܯ~^ fCKV,$bƳ % p|A.eS8́뜿1!'8@ (>-0iEUC*_Y H%B$f3ɦ۴Ě k͉S`$&f b FD%#UYx]YX&5E5o6ҊP`OT8՟< -q'&=W(0k큫s]ʴ[9!"~{jcl:,c P5̼z%P3n%Py| I TYrZ=6 a}Dz%I-nGDf@(s!'$]2v IDAT2T<8P1ZD+i"<^kHhA%(K:I'|uDftO Z)T31饔R(#tM֦ӦGyM&rmu?yvbˮiÇI3&+@ 8!Z 7 HraZ#5 ] z;mY-90D̅Q01q&8˓n-XtW*$Yo__H( 0+/93ځc= Kdj5yeL:] (%,3hZ5Hd0mmY[Z!(<_3VK㢤zV #cI2Qf3*Heʰ~]}42X{Ӯ<ݍP 9ITfnBn'xzFPdP{:*B8#03[l5aB/ly\C/-AC$iU#`LwZew_{z&RYRk}% ;>r >'3ݷViG5A D}i3kKc!b 'JVa&PX{BcprYRiɶZl`l|ڂI붳kL'7Gbl9x7U[w#x %-ٶ,%1 3ܕR}F6H*A@wM*ZJszpjZE=ǴeHx&nm.^\EkR${QR^x$(rf=M#r. w/9h03"ae&ѫ\CIJ|v?acl[XLc٬Ӡ%T~u%&UF AUxgG[ceȈ.̦eUbOv/ '|1|͈(2p L9p\$,aj"&ʔz*gc IB\lmUK)e"0Qm7ی O1-XP'ܱ!0I?ɯQ``qu"hMhU8͉97Z6o65tE μ[dJ>fD" ;?j)Dk)FcΕg" 3Xj*p9%{hfTFw.yO31%[ F@&XX犕^9ߡRJ+r<>s3~H3c8YfeɯkS F:D%" 8^0Hf$^x1az\8N<pZ?8՗vUԪc@ *< $,*sGs\Xf:h#-ĝˠբ=}\Ǻq ۘfM U 6z;U7|~۶rO"[bmX\vjDBn(mi#҈sIwcB-+|?֢G@$%OR508RZc8` JϘ} hY7v*luN3|gA,YB),,F,E9oDmE@Pe!g2d4$)OƵpV7IEKk |?2|(<-F^"X"$ Vgl<|t80 [V[lrۤ*<' "__@ | D$c :_\׈10Fk˙XS* R&V` #,\ `UE{ Nt1D%2Pw-Eʴʙ֚Rz=Ӧ.};+b\ȑ}q\ o%3f^9>;r:jDD%Ki)8.7۞D{ۄ8"|u\2ypjiMH,E[N1&ʘF;HkMy]W8(Q߂ E!!*n[۪^VtKϐZt+Az~q<ڪP$e,`xJ[5s^_6YisEvjIJUʈ"DqVK^wl45)ɔTUDKct_g>݁UK%޻R˶߶_AT8,Bn橭$p岣EZ)f(0.?io9{Df3IQR} `f ^K7Z1"sND4 _IJ4U3ZӍ%lWز HBrq݄WrEW cXpnvNʫ;7Yx)<^A]^nJ$TT@dED٪Kf>gDaHiaK`XؘL/YilVNK`Tˊ#R hy4G<`,]#py{^x\'o"KXmx߿}klmzci1bZc&bdR\Q鲞6I:&b$!@DIDR+U*DL7f{Puk鶴 EvcSo:Ȉޯ**úERbv WH4Z*B>"x8 |\`5ƌ1uD"Lw%3;E>=hE(U9g_/Z)BIzm, >?ZTH;3a3#|.S"Ӂo;!V֘2) JYʺZ%Knu'&۶]6"DuZ Z`zfP¥(B >!AfX((zeEʪ>rozQfHa-**|!*[B1#¯=cBkn/Euu!yv9-U)*;%8x_kvc+~kvjܱ>' UJ~C+xnӾ~_u\}R%wg¼e33M #ÁJaBf6)3@DWawHJVfh^ 6`&e9&u(Uj}~>m{ii#4O;\,_l;m0a]tHpt\>,vlsWL0CB2*@sxy 0S{U c߬ZQ[-e&  h v<Ǘ?/tc V wQ_?ӦY59O߿߿u>B%3U9S-Qל_kj+`b8|/j2xVtY~߶rCQn#{H_Yi k-ѫVY~f3!oRP{ jBc9-j/J7\Ay}bNtN'ejmD?OIw2f}c川nv]ט1c1[eO}֞[cJb'Jr3>& 2st?8_)|a XXM:k]€!*jQ!?-qZRHxs;'~ 2%aL7f[m C$O3Mt_xL "*UQ}ÞaQ"EYly NHCYڈ"-]n*>3mN  m*dEOwU2>~߅}G!Cp!~?x_<߿_}vޜq{{}oMlؘZ__WwI.̓rZygt\➴ |x[EhU2R##\='5et 7^ZD`#2ۡZWFd}km%o{&uvT%jǔ>V}Eؠ$Op]$ axUUo[՟? R֭HD D**ذ߇͙IէgUD'MǏ$"‘1gŻZnM*Јeʮ{I[*:0O } ("nHGVnB^ bXտn}Bl[p9[zR"Uւk Pw1spkW rR12\Zs<QTav;H!q`Aݕ9jUDl1V% C531mlnvyy(^i*pz|}>G-[Ƭ .B4_ZtR(Id>C*U<~[) Ú0RZE1F췽>"TH[{L)\!Dm3$sqH?}|7Yŕ$^UJmӣG1jc Qo~8vӶU XRrעm4~h{m*%yu.I`b8HnoTZ9RYT)AZԔ"$P{aMca*?@1|pDDL9"lBDRGբ .[ݫNzdz?7~<8_vKx\c=%j+EyRmoowdH(5ޣ$"ۍ^{} W&fC _Mmc꟟k$˳nxovES8("l+ݷ^aկ0rQע"̻nDu=>G+hydy(~։- U˂Dbh)s!ׅ3JZ$ J1] QZ&{ :5X="@k$¢M*ښ IDATjR ,DRFKa~}ZyDX)EmEY N*gH)%J#R@fHh__q1^>us"^_`XUGG @_h`lf}Ptj"rxzLG$]\@ m5m<[%3f/Q8χxxB:6B0%-Yn; 9y1/s ZEQdG c5GZ!Y~LxuX1c~-|Leͨ[_DLhwZkimDn{Wdn[(oݧ46p'%%8pZӏXy\n7ԊM]cγ W톽0yU~Qs͑[AF[sVyk:y&1iz&ĔAzYffe}sL+{uPh!)"WdMƪ:כ̇1V1{ϯ_J5hmy eX.]7fJ9g`];QUb # ono[=g%bx+\UZ[k?_ @)XŖ|&s\d.g_k 7^o߿oR-JUKek>q#2Bay V9)7U&~]_ x{_bښoB$ו58Nh oqۛ"KeiL3NfG|~u-H+R\=d'> K\߿ ֘r~>Nkk>b/E2YjZ-|aEr)tU췢d> :1qv\nwdYp& L\(#)=)S,\s\[ֺ sj} P,r"oM 2-8>m ] a ̗@nRQ  iIl0D 1љ 75ȈZfL.}]W?γ &Vq>M qcK)BREts$a60B]L2 2:bЂ@Z};JmL'cb{,sV!<2e:߿%U^Uz<_7M3gmR0SGs&^Ut3QX"V0>3aaITT2"ӀTR[-I ann :l{{xge(`"0_}L_-d&׉HUu^ fVՕ%&"-%"Gd3__cl & {4*Z+[T83qmo, J&1mDxz Iv7K)VGu"jڶLDϽF2Ue/>3}I1#&L$L mo%a5zJ29B=<9l\}Ie}V(q6%@T@̔1z#Afff xʢ|]6\Y'W o@Js-tJKHhDk"Z8ZAVi 3a:'F`kx} xu}=:nmOޯaHJ_aV{۶V^я缮B?z<9WtHfcJХ.k@1g\#D$ xE[Cq9*~οo__kvb|=76GD-ya Eqo}Mo{{1+ưi qV||Gڒ"mRrWXw4(uSDBɅi*W@*n-=$1ףvY<eQFc z/;>>6bs*(ܳH2s2n/X+N;n_eԪ zY,a>9#_R4ҧn2paZ$W? 2H51V<|=ۉ_qZ8TJBuߺ_?jlu=-X6lFJ-0SDk)I__Xy~H-7-<_KVRb%{VHMjd$| |b̜uE<0 %3O&bV ?a$GlYn0s YgHTeVnf"B>d[ڶ{0 a8.?/dL! N<%INds`^pEk`ULGĚ(= h&'NA)B1{ZpPG~A˵fFDEUElXH;g9Fx>7ab@KԊ@/kIkgҗM@K&@41z 9y __]jBAO#r)=y׽@Lnæq`J>k٧Yk\k)LR#uxY`%3㼜8k-z##P$xx*ZD<{e" $DE7F+@.9|ŬW*g5[{0(mpJτye( +^O8",/7VSl6;P M)6m[ K̅e*(MCBlI9)պmM۴Li3=YEH($d7su-$ Z\+x˪-}1<@$ c'!2{) _O9ұm֚r&RM2އ#e !ĸF߰xu]N A)ׯ~߿Bf( #̳4pFĬRE+` YtEu) όV 3Qi-U+ X*U $U.}d# AMV׸F-^+Q7f#ph32%"TLA$9yRۋYf E;fAEզN1LEIjnI3%فDp3m1{T5DEI<@ ôڶ|3%̒DcĘLDN*09DsZ$'6Qh;mX2eA^w_PDF;q)Z"\2|sp&bbx_GO۸rZ#|ڀWMwFh^y^_`j~߾o[UJ̤*Zٯ#)Zt蚉UUE2b̤KɃRؗ(V0!J%sjUQw)3?B1Y{Ƽ G#g) "T]sνy09̥@ٴy}ۤR[a *H\p@h-E"_3u^5꤂Dxh@`0s9ݝo<Hc|hizg|\߾؟!sX"g_pVOn(2l" 2 &R\+]@9ǒ M45.<_߉D"R66}ylG((tBFrcln`T种yæuO(M@T^F*Xw$`URQb#pu Z"+(1?~w&^u88_>嘸moߋ\ކVv^ݮur,nsujh&kd(G)MPbI`R$Dל>z+79#<,|fj$lGώd"MԂ#ܫd:|녏Oκ-@G+aur Z}}\0(aqny)s/2WdPls~}ڂ0dM_e f!a^XD5"p@UEDdI%_vFbS0(ٜٻ1F)V$T.#݅(Ն#fQZ8zZHjAZOHt#kIp>6rOA Bu No+p٣3(U!p$iyNxqѷR۾:[$%@" $(A}G6ƌ9^1כPs{5Mt629G,'(zVLژ1GLB$101T@b V"Xy,x<L@\(- ww# $k& ,5 DmRQeB\JaLE60v-*ʙ#}q@xEIYGM[m0H/~G,a(RH%AV4<bgXsS |9ǁρ3RЗGwA`*l9++rDd }߮9,bQԉR İH$KL3]e?c㉘NQ Z[L9cnUk)e۫9=i,:iV Rᰉ`D!*kV LyyZQKQzHeI;(S6_V᭕%KZ~fxFdT8|ٵz90j !+$B o(OVJ19LA<9WKDNPj}BErM{R#3:Lݠї,A', ]Nag\LWDXNkRUXjoqu7)Zt` ;NC %|"y8_Z̀Ps> lD}LHC#(pNXUo9%<"%Ԫ5-biTkQJ;,|F>uMB6p)nH&H _>1)RI y\Kh1\EYweZ}1n8gkaB}R82LZȈ\(8T Xt51oX[ I.uq#93E /yݘ8r'.:odOU=ϫN @.*αa 0h{gZ"׭@Њ--nMU9hZf'̤ýp CK2kUd-Ey\WٚIQ*Z. X-'Fa0=o,inckX܈؜sR g<4 |Ԍ ϢMH)AY4t㺮sD̖WMKi=y9 &Ɉ 9&cCr\ғL$F"Z&Pڎ0w6#*IAִ|cvb (<PV"@,c9}0fv( `D1Q*R w61&`x}FDx&S)*; 3!ech鈛 LQQa-!x*_~ŝ(w3DQ[™ -ԪUf7~= ضVBs10:i3>?Ͽ9Qs߶*a$ԙ -.B*mhm[cO0yRڴL ϰHU'{q֭+ bup{{QW#&RPY;V $;F-kbIL+my x43Ž %p>;Dc=ۍ/Zz_+YM#`HUW`M,9ǜ1;l@?vuRźmZbHTBwYi&@rP19>k!&ʀJ#JU_ R!`+O\J$m*鐰W^~~ > W{Mjncue9-֊0 z',2:uן:~9}WUYOHA*j[np/THT߿ׅ9̃PaYRtafd2-#dq)WFfHƘ`cGb>&fO$V ǃr 2q.5frEf~>, \i vM"dXR$2""04at\Ǣs=̉Hw_rK#p\Xj̥;|o hi.,xpfIX@̬aMJaWHI1 3nʞd)Ȉb0^#D6FҜϴs9: bf2*JpbrDD&D9fefBbեzbT 21q220` #kAi4{ pC$a 1:w{}}%~ ޶E!N&IHe.B F:I}V3 Sao).yV(mRAj5?ssx$oo5~P[smZk.ʗH\G;1Ȝ.Zֶ}ܧgܪR[FD:2Ƽ6 Lf1O pv 3=VMU gfD"E%/)%¥r)*xy(XQo72 Y <{V*N맆\ mGm`:Be-6<-2 CRA>#s øV+3#sN*>×2?wU:}RaF.pfYDg_?CJiycǿ{ _+KR/20I\}lxf=> 6#' (Mhf[ "#D ru0յ+*LcWW'@cD4W?I"DDį\=[$@+oUى, kit7#Feyhǯhз̘LjMG ɘMnJ$ąTH󈱄MȴVHx"8mm|!Y>u D4Os#~Խi%a9_ט=08njcbo{cǾ[H2G۩5p,*[+m;JcJ[52G8 .EYbZ1K$R^+bVD4ӚFsFj ۰p@XĬ_@jGZ-Vmb(#ʖ>f2P&O J)ZKYxRy]=6{+ME9Zݷ= 4Ȝ|GC-|xG7 w< J!4}@EV)k?ݣٯx@AVv֮c-y]<@vҦE:2ka!G,D[auodoV#e+oiǁ~}Ubn<=IX1,'1V#̱ftbӯ4&񲣣*o P"-^pbVVN1_o H2WHT)D>9&Vì~ Z,8лH;y1 *Wwv׶ay`LrPf2i2"s-AH0TȮ)Ow"؄;MKȊ.Hf:R(%80UR*ǴNU\2AP"zqEHR4w%%(ooKp^g-5U}/E8CY5ym3sbl[il[Ɯdg9𴻌T Ҷasy00c^WZk)BqsNw턛KGB>[ J֊He*}r SfԂza*O< H ͉"4!"b_/8₶o,drTkպmmm!qsj)s}9 &0/ƸL䑋X/b9;?? ̝=r(B2xn`7g,r*̑p,:3",`V}\Lw S<2q|C)ED¹鱺j拓F-N fb2_͉L͕;{]'cٲ#`0ߪ*htHYyХ<0[RIJx<J-Z1(0VcbhrnH}L$Iج7QNJK ߚ8*%eD؄2/ y#" drVǘ-$iimYl9SdrY8`,*E@egu0QQgz.؅'3]kIID >=`{жHfշGF{ĩe ȫ>c%:#=nqDz>sޯi^ ֘__6'J@)Ok[E1 y5( m#r~^RAA9'ɂGqeuwe1y1(xT8ʍ2}>;p{k>sÌ)"gRmeF-h)z=˜T* Oj8^/SExMO`ލ%iw [uv]PեRK)UKR4mNsH6A`1zkMPaI^dѢ̥J"3|e\c\#(Zvc{mg0wc:R 7D1?1TYT6II0'*#ct#3 !S{e^SMb"*B J "{Qp<1#T-$rw#12]ҵ0!1E$YtӧH.0! %M ҮVbBDΞѺoiF3f$9 lVYf49|\ .c)>PKZxYIsD?9,A@* Pλk_y^˶nf6}sFG||92Yp~`TTuLcEU# 끏Div|X/̵XZyF`ڸ"ax oogk' |{{\c ޛ $xu@עh綩*Zm"&Fe8!e:#lH@ kSU%<(!3C`!0ɽw_O!Oq nmW)+o"XUe{<|&\EP^jf匘cG|{?c49%#>?1&ߞV1 C[-4̙?0 w$P5T~<#630`kxhUy Z3R6)E[-U_#r&,õ 'SVXquhm÷ʌsgL`+|LDYlo{}}L莾dB @捕ч`פ##5)uϟ?qx{[VI[a$H^+ COPJR>GL!yi$"Ef uc`!Y!rVs9nXrQs.}=}%E8x(xn@L_YU `}~?@+0jk21ZOƴmCa@ #L[!W<"'!Ry.C}HSb"bAdE.` I+z#W)7z>9mٕ9 }@k_?>_eEiRyXeǍ_9o"r5["pqQdcfBdэ8@UV<L˿̥9SHrN }b %PbwtێMi NYLچڠ0nItcXܑ9/gJRmT5Ol;޿m= i(B=$~>3#lC*37ߌUMTPs"3_{=kvJ2K}o[huk`LVZ5qsp7g&* IIP6k>2n6|sG-hN!GigE S}ߞo5,^Wz/L`dd6E ӑ=n%j)Md:Pzpy>>~vH[|r!fܞk2KNZPZ !*}\ p<uJQAGxmF*R6g fm{ N,B*F'VUUF aF\G֤>{nDRtkml\}ZRXJO`6}8^u}ܮ_D-3Y}8n կ_r -yekK !;Eu]D$d>KQ:ƐR r! $D%)"E,8_G@< A%oE,Z+ɒ!E>p\&4Tr1u71uݴ1(V<c&-"D 6fCg-ҚVeBe=waFdanĖҩˆ:~ugψ){0/#݉wJXj),J2EHQb@XEyxfpg$<~cc-烉$KX@UۺbrRufa3 gGk}l>}@rS -{g׬>߾1^]+1eǿk30#jQ9"Dmj9/1?>q^Wקu}09q($=Jc)\fMKee0K!Znek.B`M 4G [(``qsou@dL!rkaڢR# x>^H$LY3=#|ڃXS9y\ ?_?Կw-;> ogە\:PB HEf ("*(MvA@DB$4үoq! I|ۙyޛ3tX,DaaMU\﫚F$Xx$tz8\,` @صHe :1k a! p6=5Ҟ98}A37#Ua\I@Mh" tO^:q6bstm[kN!5 8fO^F5p*)E p`L,SYĄ_)8G@(\ CBP(ʍ3%`Cb ۷2Tu JdgI ֳRy !0,B,Ba՚DcRCS N5ovR7_3.1&GiW܌XUU]kyfE5yrHe:]H(Ӫٜ} :OGfFkKUABOc/38yrcxܾz 7~aRX$k&9=oDŰ,[8e9,Y9| lJІ`JzՋB-68.{EIX,#x^s`Bx!YmROs:W^bt(O[ڍǮvl4yVVi롂NM?2/i$i=!j} !]Bd~P7z j":F0O/zh?ݰaspH\FJ58fM!\ op,r,[8xcϝ;Eh8 7()soघjo! 9z*{SC Nj15Wj xj<@Q/ٹ&cְ^CR4 ]*kzv dNZd9LdGa5eArR?pjU/DuBBO)EW'<.5ߑr8'HN{W$95wӰ`5 e;&SVUdp8UxUQ)Ьؒ),9Ø<0bNMK0F0 cuڪXqNp$ ,f3֫4KӒsE&>7O,21*& Nz,}A|$lzk6 m<ϿtU޷IfIdI%م(_4EUUUS5M$ԩSSx$8dGUGi;=5:IOQ]\A=$9bW|\>6okדY,Kl8AF p,;؆FÔK7k,|A{]ԝ<8Jv74m?~wߕ}uni;nWǯfTc%Yds(]*K 9CL#1"i4+=k$#fy׳'Sp,6z,j;-tZ'wԲ(jw#Vex\h31&Aaܼ[볗qȈYjϻ߽3÷3;rٿT%MbTZ:<)<L6ۺI 2*eY˔*zimb5& 3w*?GWMk6o‚*^xnºs=ӞY?wO?샧o~%ɒ氢)kHM4 c5 ^)r…\^*؝|gz6:27.?,c}\>J5ߍs,r2Cv?ow*  HtoYҒO5$8_70jf3 ho{[]ɶ MKJ=fȨ-;ow RIDAT%)?ֱe_ٕQ 3+>Yj#t싴)w?DǽW3C$\o=)M+e:'Iho鷙/֕o۲mV.~y <0ָAzNWRf|&ՙʳvU#AF! aYN-հ7OWݢLݻ~ nPe+eYh}]a=fP5|)=raֳGyHVk['&u7N]PPQW Uw9GOK<lf!k&„[9"={DX1 lt;rM>$>MgqbwӹMז+I]o_]-D&G&{ڶUηcݷQ.]J߸i˚23lb4tǮ׆~bNP~,G>9oSGΆCLQteq|pףAuXSvdWMaȞ#Gv>wkw[ę~޺4%ݒ藷zJ豮ğWٸ@J'@V6XmjY`qNTYIšjgPi뗫aoPExh:mᯒtQVReGq7nj<ǾS ׶{)Gd\ASޚUz(OMutO7wB.;@E_-Tޟ0Zt}wm.RBf3{|u?g\a3o-?,I9;g~댻חo0pϯ?l9 JN>ygқ_pg?s /_;Fwis}> 7>_< }S4ò"k-u!GrG}e}`_ 'OPq=j@1ܨ4-af.VD|dKbp_ԸڍhF=<5CG,~S/n{ _XAs9]By8t^^XP (N)UJ|Mrtzslm/d ?(:e k}KZ%vrWsy +n,W&*AU0$SV??TI9{ybU`ڝqL;',oޘR V/ȽoԛWx߯~ŏOar2ѽ˖0)|yɯ9/w`W}fͺ/y+9k9G-)\>{Y& jZo#~H6?*ϣuig~Njc++zJ豮7~E.a͓##kŽ,2:%90@pf:ȕ~ 崙;?ƧNmyi.-2Gy<\<:Gӗ2tvm*{V}?V쇷,:}gsYyߎ٢~dzԲnXE=7u΢Cd{o~/(0UJ^x;XukiϸvJ )+\t6ķ̋'u+e+*h5 !F5OLVQ9펬lUU1&jԨ۳2bJ)hȑyth nr{ѐicO6yK2ovh\MG֎o̊ı d%ݮm6CgޛG?u9Uɠ3+QgY!Fea4Mt+ 1Ԝ":jO|/'Nx}Oyqwy?5CA/ʲHհc9BERrRt]Y(j'_hBwpq62{ˏqaXu`^RhvJz7j#fxm6vHQT\גtC, 70{8fR'~筜s:_({]/o۹)^SVBuy~mf N;,ɓ%U#I838D7oRi뗫aoPХ\İ#{àGŵ/9  D:ϣx3jZ].7t婮}cwQ.D*<2zܕpxUt93˿XԖ;ܖgr7ŐF=nn`]nyy9O`%YtEؕ8u#MX:Wrf o'.0ſ~"^ϕ,-J&R&F=//_Uew)ꍪ̿ FbYcr|xXͩ I:/Mݙzns:{`O:MK=1JAy/Z;{ݱ'tw.a"`B (F1&'& 2Q#J(|lX1͵< ){h#g.o[{ptkU_r:" Ђu  ;䤨u'LCTQ>N]XCG!.7x"D3+-ؔem,9ڕXC@m_o9G^yw5—O]$ IdPT]~/ov=_DO_bϓ*ZGEM~s:‚$2 Uh֢y9}X\ 1`sKXghYQsxݲJįܟ)߿:/ˣx4})<(VQ]]TSy?'x><֏R :v|c]|vL/.7EJtE#zc@{_Tƣ%'fWαk fci\dm\ub\ۣ-6:\E^V4S)*,LOKr왴F Ekܰa%4C#k-a/ycU/w^_CY}(ݗJtqq>>m$&X2dZUU4a18NDQ]ˋ<%ҝ R4W[: wyPxrUqy螺kgXz,"NєAV( bj ,@Mc0DkKΥw,1M\nxkm~Qm::lWgF-7̀X%;%mh=#]ΤOLH~zuw—kV#ƴz^)^|h\ ݊C^go_j[N>7 D*T@Ad]ƍš7oVi뗋P!^Y[jE_nZVQ7(e˕'m>y|;Gӗ&yX_TbV~fN!pҶ.!:w3{=;Z&?qM,N:5~Pub'Z^TE]]TOL)(co-rk`*K#z}8ݶߙJ)a=G-ޣ_ ^/{tLy#e\ J2S1n̪G\鷿SwomSsݧTizCsy׆)ܿyҿ-;v4:QŠ Q/Dax3V)uҩriJnҭgR6mڵ'ݭhYO~;wO@^xxhh`D(5BnX ,v ;/|8M[yx-,21Mߕ?:Gk{d..sE}s/;0 ]gH 0hdI1R Y\ZS5+weʿ& g,m~ơ Δ6냓\t׳\Ʒy` d)Fm&_K:`s,GQL}㣣ZOR@Xm K>4v퓏1b|uC^H%[A@2Gm׊vooQS`֭u_@s"gEA8!jNgIH]wy9|lBWw|kފ"9^8!o k|EW?e. ,`+\W_=N8#b \dYYr_.ܫ9pXv]vg:a%iޠR+9!)iA)(T5, K,. 4u1Pq^! ` l ,Hc02 "X]*+֜BjkLNz* 7bL&b=rJf>ԏh̺fxs`'ccaM~TTD0X]ǭxHepuI׹аl( OEKWI߹d*l%݌$jxucQ1_n\gϜg'[,6L1(Rp>Zj$?v i|Wvޥb&rx[*Eڬ&j*q|?_ N2  <&61ջhS!.c9uMv" ȓ:,ga>ĩAk)ukj撽uGB2艖ۮiv*Gbybrī1хZGox9r!a(\C7='Ac(Ubѥ籇‰Hy},x1p̟NX?G{JHjy2VHo]v67Dd  9]&zZӥ.CNӹ[K'<{Փ`fDŽ̷e5|fH-kFcqBEEn"h{ )ɝ6(C5|뷳]4g:}Vuc2Ä \,n)s#6sGs8ol g4;kfqK&7u~)|7zlTv1`.20xSVтn;06pN1t$bMȇH^t죽?&ӳ}'m|||?_~VDƸUS6{Heq t>"m_jq hV.ڐ. uM]A v[ cv{a &M,G>dYns_h`g/|Qއ;7?䞏Gzz^xpYxDk!uiI+tI M!B6-$m뼲m{&{gx8\Y^l^pm@'|+ؚEbz(%"UɤQ([siڙ/ CugKK ;E}|χ&95Err\xMC{b͵pBRkVg Ok!!Hf$f$*DzLtO}@.ۏW BLZ}}T&v]^1+_{jU3a9&^Ԫ!쩴W;6XZ',uf ZmgHXAYc. LgXd6|Hf'-ᜓ۔$Cr>.1ˏ,i<"))ncCVuh0PIwzYl5uCXS=5S{{ۊͫhe6|cQMRBUVA: x$ ԩ o,ì*]dAqjЈ}Ք1hY ]!QîƬX̀ 7HuYcR ͿMn> ?l/:tQq K7X*Jten`92{I㦑k˾Li{ owҞk\c]qc1c1xc<1c1cގk^R8W4N[F6aq㷧@BR 79q [ǯ"qDjqV 8 'bl(hXA`c i&p7y3ݠcV~`7EIqhMC7٦W(]l!p@rh0lkcء7 `Qud{a['+7^eX~~eyΗa1;;yr}`T~*sc +j]x 7:o,̎QEIe@8}31'DqJ*i܉ȑrkG@hqAk,t/ͣpDn0b`'Aq4T _6 Gx&-Va&.5ds!B2O",u8EX!I"y3T2/z|{\"v3$I(W4f`Y#_i^V"lgKg8/՟ qޠNkZbKeFga99f3#6CY],76qI`om- (hA=rrc KшѰVa90()7( R"web[͸l7l*6Xy#Խ}6M$pGk1-K{^/;iڅb@UJ J[1`~X#-x!sMs% s`'1-rg$LuźŢN:fHɬ,FgdyZ%j8jlӘaKa WF 73))L!<;3_~k_0x月#)TnISc 4 tx͑aB0] ƙM7iKJFR3$hH u 6I1 f:,ɾHқ*NqB5"6'rfQ|Sɐ0hEXJmn*2IE,X7ӚE}X=Ŷjrf9O4pilcˍ;961pzb ,\͠S)v0d#x#G:tH;&ALQꙶ65=4X)fa9V ȘmFm_I}uﴀX(V kR*\FN) GT f6u"L%{HҏԂ-4"PQ(ɓi*@ikM"gXώ1=Fvm[q*Xbxz [.3yY<{@TäSO$ziy-5*1njmM<}\-y6\lx~Ljӣ,zo}=V? s5^λioq3s3ƌĨ=ny9D/rZ(<e[0qxTx*e@Q<",P(WKR"L&XW 0$lB5JW"AK|e-U@Xy5s]rR0\s NKݷ4%1%+g¶6=}˙EW,,k1iq5fޡ.VIlvVݩT(QO|v8TAv!D*BcO$W"Ѽc1 6VƐ|?PuEI<}/(E,T]eB荥l՚0HziUU;L_k\1p+<%ae@ h'\譥i%AT3tlIXŋQ(BXS̎ R:K!UY>ȪV:#\ϴ_Y8aa+EhVN]] ^AǑ!yp~t 3*$"[(EQ+25)M]CRE׎\&t8Ƃg:\D(m-Mg945bUsc7ytԓmv\<8͕3*e^+2v.cꗧX՛URR\poloBղMDRХUSJE-r<ҧ;hJikBьy!^U`L" &`I&kFG7DmD9o @e[” e$4Ϯ0xxm~s|}}+)<%Ք FAFowdLŘ6LyOĞO&tytԧl}ۗoi#aqSZZgjꇧ-H'q& q0&>Au Ŝم6}2$"? ) ev߉ sP-"I(^k^'Vo+X}$ǦloʩW?Vf!X }:]GN:ZYDKe;ɇwJ/r}Q0˭k-iz,JCjbnդ)c鄭t<?R5w-7 2齸^5F{vtM;hoQIB([jrE. t2<޲ Kqv> JRk9,7:=C:gRcc!`R=pZ=Pƀuڶ̇xloP$Npz }uV+.`)2_Yת&-fJJڔ6T4CQCs!W(-}&InW/ e񼳴h!U*/MR;*?,TҸ1Uu@WJLHRS끖Y2 EnoQ(AB+L7Uq">r֝=E`(N_KUրﲚb6זðjޔRǶ۾ML03bh3BƁzZX g)4J5fU씦vs[ tϭ1_`l$ R6KFdiIM)B8է3l]9Wj08A}iE_$|c)Cu(Zǐ) {am޴Br4ZS9sRE5|Q)Qp2!=,mr[UJ;sKi+j~XS R4S-k-n~T&qz{6DToìP#;UXóv8ՀbRWFbivAVn**34Q*X׃U(==ZvO_6G`ߗDwCi~J#"XEN`4m39ͭ!jZ׷<DqӪdsF*f1ܡ*KN #W{bl;֏Y] D,FXY{ꭃHtjKHA+|R}޽.H``)YepcS#qnEAS-\iQKxvlԪ|جKmLD1&R9'TjQ$xC&&dJdZ\6 lk6IŮ#e!:clqysO1u).nͧ3wú19ѫrԗm뼍hS?tmqO5[RĚo7Rc^A#SFk ވ \cKnre>b4eĀ+#nܸa=s3 2*%ՠd5A54_…-MY[5kmKYv tOUFt63j`N'e )F}Km#ovy_VoS>J{by1^ܘ{pUӃG8\T 'X$=XxvDQHd?z::=\(VS]Z<1 2`RA6axv}I'MtIٯ;o/ڿ~}a=#XwOck4ր˵+U/X(q`dUNZ?vt@beb9v|χ {sΕúqho{`S)<**XUsZ&چʝ]F1Cwܷ5Jl0@2Tmy`a,  y̏\8(vkEYSEN|uKBļy^nAf#-ܜuD,G@<$[qޢMHmv}Dv▮q?uV;Ns1#)B,%@ckyQĵ^sK<>|jML],͢:mȲ3 br4f:?;sm~#S@2[ȻP4&D:AŚZhkos/xY21^WQZ q ԅ_>EZ$$-׆hAk1mI -M;M(Jmܖ.F گy tiOY~5G2-Líyx$;u%4657fՊm]lVIlo+vĚmmsqm8>1+yWu ^wօWM4gJ,v miqG:m6mA=~G~c/ݞV ʸҷ[#6cᶠly<<\y37<||1_1צoèX/|:_SWK/1ףs@u? 3}`c?M,+|?t^1צoèX/|:_M4z>*g/f:_GèX/^Y﷗ݏDn;+2Hx+QSh{^igi-ѭZ,IZ7(ٹ7j+ikqţi1~ʰڭ нF07zk36HJU۠3"k. )GfQޗE" f5X6-{02R;H^h^ 2tB;fI&^ H![*pv&AfxوauNSmVt')muyp|6(TR$ds[>)y9<* džs|<9roM{\A|Rِ@NnK g9zGrotuȯyȸ_z;~=5yW:6ۉz(c0ɗ:͐KMH#'5ns3{u9P]%UZr1,[pAf2r&cŃv#fjM ;UBIvBh;H\lpKsmZMԑaAb%M'gƸ?(RWK!’ wޚ.YX;: F%iF1K"!Uj9TS5-a4tevR_/h.Zz@ԗdrXc%A]cHU؎C]zZ9d~E\Iҭ  ;UI+m3ɒQA0ӛ!x,s73 9Ə3+e 3[$uQ vEKRx;NjTGb2ԏŵc}QFnwKzվ9qJDD+ۘ,plm^'WMR-\$Uy{ 6VuPm|yگQg|':R ?w+%J֮'xPY<]iIp`OwMW+ūrwO<ӹݸn@Wp$#l+CdNƜ304bQBpچ'WZwbLd+R>佯ܼfڹ_'ԇY NQg|':[qar?&qۊ'氷|)8.y[WJ$tH)E1̶GZlUO̗}o蔧aalKJ~':Kz?0?,`'NUS%|:=UO̗}o髤 >OtU?2]TwNi-,`'G:}UO̗}oU?2]Kz?0?,`d.?}:}UO̗}oU?2]B>CPJ沾ZCs@6jAח:`W!ru"u.N\4SkZkU,qر.%gAvWel n:Χjk7Ez2ǝ_gyL*_wy#F@M&j)\$lֲ0,1$JQ{7x=ᔽw ӀƑY=MknOֆƖUubJ(i%Z3Dd˲F=s={ѓu޿/X֚ZjSA4Κ&Iyb\Vg9:[SQu͵1.(V%)KD\sk]DɟposGr^\~" kǐ  ̙ak#Yl[RR",Ԋv$rb|ƫ鴔*vN=S^vybHL*TFfC99eyߙYCo-kSXo__a_gO|>}?_'rn'rnjXW}a_gOW ſ27[ ſ27[tGXW}UBqo̬!VBqo̬!V馩|>}?4g~U~[+/y>]+/yi9&LX;WJW,li+F"KYV<-5n`l"aqaX(L+lց-`X6Ҙƽ :Y%$glGml]9Rr`#lj1}MRMQ#<r)Lu Lj}eu okҭ,eĬS[X_n)+MLtd!H)av`ȯ?u>/^>d?A%l/3ɜg)&ceՒ% *HƈqqvefⅯˋ2ebdHh w-04.R_{ߚrߩG {B[#wz0Sm5ںB19fهqsr^+i9t!\')U9_{ߚrߩG {B[#wznJ󛳰p &t'g BQT}EUe&A ":}ziuFBu0.uIGA\hj\EdRĩX4FF C+g{]s"iC8Y=E$@l2nLE3:V>:+tt\~7 { &,=Iy3x|5(b^g3Vf8ϗ8sK"͔K0#9p'5*ǩuxB 6ss bar{տ5®&uFs+sK ׫7GWigpǦ]KFmS\H3 kU | d1ׯu*$zC]xKF8VR8bв12rJν+15+Z _H<ƚZmd2f$W@UPC;F~zB Ե:!L5-RV#qB1Y B[Ǫ4& :hYz.>ܦ7lĈau̘Wʗa2+[9fCheN^#/kU0#&7PBx]Z-,+1+,*R8X hV Hm&[]B(TX&n:͕:A% W6]G8mjay^oErc$K=ު)6Wq@8`=Wut"E78 5/* ?AZi =T™]fX\*j\;D4W5H E%- 3h$Qdg3ٝĬ[Ueӑ5׉cT`8Xؤh 4 m|mp݌7H@ˮS$VFlR6=f߉[]rd﮲!䆚.\z*nЧYH#E^tr l dxU `fj#5wd%L.RpĻƹ93|grEy_Т; +ARq.GGaȈ3 b@E9~)>+5RnѡKhwխR<~p6ٴ<ȸk(󈺨t狝7K8uc::1]KvyHHS$}7p[fyM9Uiӕ뢑`jb7O9֔[#xLj!pRjr@-8ˆsYb>eҰN?{R5$DL፭7T@shlH^H*lGJ^kNYa0 odQ:s.#lݯ" !%C [1x$.Dey\T[5d ZIعR%R}HV˵5'u9Gт 怖X:{<52"XZ3DD)|u|1 . O jXe]ğ+kMhTRp5} 6٭f!]ag+du㳢ن!ws2 !i%F d $):oY6U w_ff eY2%E l^Gqzf5}sk] beְ8JA11CeVVg]1\`>{):Tk@}M X5 o% d!H">>'Sw%P$$ZɘDp=i!20l;UJ- xp[q4D'H\( ۈ\1ňvkJ̵ m`#{`"oQ]6~O SLQN71 2Ku[p'mҐX#[Dʷj1\:'VxPWi8t<~QȮkLiFɪl_NeEk@[dbn=fT.3  y+NTkZ&}فլSC)2q:A4[mysӷ55y`M9]\wk;MaE1XEur+G]agr5z*j8_fE{(RaZkMm4m"F>w't̝hS>F^;.U} 2R}`.y %G(2MTn[d.gvg^Cp2i֘Kt GCc N6rB1 |nUw=Xy3YՄw]qxB/SUă'0Eb6/Ѻu z z<%(Ƞyj4 \b ]A B 4! ;ıpA\M{59yOZh7ۨ.&9fK0#2y-v ]*8u0ӵUN;J#`͝}reJ]g7^7H}leX* ʹ1$AE0ɏ<^Oҡ`m *Tܡ!-Vyk \Hgi7XaR*Q%.XhxLӜȠM!"RWdQ}={m}̛k"CJS!Vb)v}:pȦV^s QFuĸK:K09}mזa&Xwԩz0k};к-q*N/۴\A0PVQei̛4[D-^ /:B 28kcZeD&PMdS_VhGBD}^m o3i+vK!F Ŷ䰖HBܰI@ qÙcTG["l@`!w Ŗ"㈖JeASa==ոz-{9mYqeC[p]Jm2_Y6L7,Ѓ^[%#ζ J]1|KYbF5eeK{<\3NIUu]ԊNqX Aҕo.x" |j:sӄYXlݓid!x2-'}szQn!^ۅxS.p$*T`@BHWaBSW(ij:sX\ESUn)č*o5FkIBΛ0Im$Bk|ͪ7Tqڢ.QATJvY;هgia[¶Pwqy5||>UeFՎUPkŃ$&.vrN+}fN_+3~DAefg(zЀRɓ:::R/'.w__+?­jۇ. {UYpQ4e{hXW畺:>[umGY[~. O jN3f\ԕ~{65rT3{J媒I2`. O jcq!09 ݡ*D>Nk_H"Ej5m)#+/!zjP!`|YȓV^WI\<nk]o Q#jpV4I@u訄aYy4EIj7V3y58D%ˆlbҀP*|U\cA%{vPMjM8,"ߩ:졓5*-X&jɦmvK Hk4$X6>e\RC&^S[ 2!jal,&{ `+v˵@^*ZڳVr)D:S6~`tKmt_60N؍8dpD,5H𓚜b* sf% x-CZJ::::R)]Ymh*U=Т^1:@¬>oD/3vc3'.w__QZ:Q4~[umGGa}`u_V4o|)o?CRxڴըo'abK |/`^Ls5jqnw "ęN,. O j=#h$`]${M&~,5tʲs-TeSQً}V@6`8H= *pu5=fN5+()ͽW+pv>O`dDp5B+ 1׶l cD8=A8lkېP+3p]l dA+3"7r͐BL&X8=nO{H'_PM nJsbH܃qݶ3auÚK6r(0uoQXR-"lKV5LF(4Z0% B VA ?@$zV>ȃCx/WgXH} &"xf]M"0#5+7W޷LZ+(ј,?fJ[M |0H8^0ʭrviOl"݇^IdPYаcŏ UtN,m,*y!\+Ŧb´շ/Z;Xm̩Dbbٯ|f\MWBXEb  l 'F5$XNǛ%;1nPzh^ a][>Pb\PvNb9?bۗUkuYAlWPWHWTİ.EΊ^1emçwKQfw/7:Eњ[-WJ7.z#7+TGK?ļ9ƚRu嚘&,f\ mxq\mo`2Z:xaWNsD&Y]\~{C}Z0 OjNFMWUVS}9&nEB'signٕuUly`7's2ڪt"ʿĂomxkljP-j "A!zʂꌯB a" O,PfL,7>Aҩ|Nj3RzVMf*jĤ@J@M 4%f75F )%S9Tةui L611@!44-Qŕ9ǕqOk^˩sS VhxO)*R=u)|bkZp l2~hW{C_(®'8UU&#]p1>ߏӜ8:::R/'.w__QZ:?uևu{hXW畺:>[umGY[~. O jXe]!I84O-"9;q=W^\MQ,Suc8 ]c~xM6Bv몶;a5vYbR!+q)̼gɌɎ?8,FYlӫ1$f DMXžJ~HAo ]t*{HMO0d2F̾ q6wK#^I6H\*ېz% Vp,_fx`i ښe4 Afil?U*TI$a3SA bCX%nb>E:$Lo&u< SQG %Ԓ,&s;k! 0qmƤVЙjy4@ovOػ[ޣ KMqn"zH0AMl[mV^H\(k=e4GIG™CGI6A27sgz0u&6`NXw𢊩qynׂg9Jӗ֭14rU}I>H{فYt']Җ3O"45]sŋm3pE}b]h6iȤFpYouf>bح?q,M @Ť-,nZHi|K%ͬ2-LIhJ8 KS 0'` kn4b:b\X^e)(sAu2f!?sVk1"R9hW 9kvEf C]vh^jIT*+r HXdc%As-=>żb;,E5+ .jP*hǴS7nWʑ+BFITj njE%aOf!Olm u#̪zy{0i7#Npez+NT ņM9񉺛!dSɻQ7Y3m W쀄 /4kl%<|:lb2D`4/U`0ܞ[8ՋI{_d1snFcp !6?FHlL.9^%`H-M*v/|`OG;}[rzcG뱩W辭o=Eo}yzv4}|~[. C';01&[qLٛYvTj5dUFd‹&FhWgƏ_~a}`u_Vl=մsfwx>ݺ$swNWeݭbmi2-!JePЩ-΄aHw!QLYxvM3+ Qf'OkeWeDSm7U][M]8SW)ؾ/?ӳe}m]eBӳ"ϴYpZw#x ;? Zy @"D@#ߑohrH r" FǍkU޳Tr41 ?t㻎9k+C A8TH%1ŜyJy m-y}[N~u_O8SAdLK2:1WRr0[ M݃e B |+fyYh~~uth!eC-qY9!,N+s +sq(N9eQqgOeS|_;]o;g󾔧GMeS|_;]o;g󾔧GMeS|_;]o;g󾔧GMeS|_;]o;g󾔧GMeS|_;]o;g󾔧GLRiėHTT6۴JU7l25'B,cavsa7%jRKEs*IL;J#V>:+tt|U9n+.=ջgpηՁVnYxwz_ ^UM[]yiVTKM~H{ qk6P0NUQL3%澂O:+tuҗ(8sZߪJիy-6E=3pz䮪y !;+ݛQ0t_sonata-1.7.0/website/images/t_sonata2.jpg000066400000000000000000000372601377142014300203210ustar00rootroot00000000000000JFIF{{Created with GIMPCC"   P  !STU V"1X#24AQqt$%&8BERұ6!1A"Qaq2RBbr$3 ?N{5P C 0baN۹p(*t9K>7bL&{J`c}љto'?s`'ccaM~TTD0X]j6z p5EኋyKhc&C_WiH˯X7}R%tGIMbJ*܃G.>#{krq7kQ$1F,E FZձWgDsاz@ax""f ;U6E7Y_ݡ Sʑp#+{Ps8 Rfzq*k\eÌv(L6{@j*}{% cYRYzWnP}=]2u[f60kH3m:nD,%fǶVdh4{9}4bW6`6nIA Sʍp%b]ǧFd]6a]yx:T?UnkbValaі!/| irH]4̖yW"RH0b|ȓ<(͎;uٿq;}fg uh Mm@\3zI|릿qxm1K>ιƑ^q>\mpN|vlkq֒?Gz=Gz=oa181P7vro@ $Љ#EkB` TmdVQL"R5If$bH2ie$B`Y_4YƂQ+UK?L}hww{܌W{qtaPB:1Wنރr3ߋ6_$Mkw0^Ddq"O9뾛Q>hǎRCMhó\ {1nj6^ٹMțo9 Z NbY񌆢~|hm$Tg ;FA xٗL&`.';˷M|k7O.YFQ!RCH)5J("dDdֳrvVEjvMp3} Vh)zVrЏI{VԤ:wr` ȶ@%+lEyLCٶ6u×LA aʄKD첈W=kr[d q覎b"hy4& ^Lw kcnkuL" T41f>Ag>3|;[#kz^ng{.=,8n"y3e >!᧵um8nN]%0ȉ%"rvTnn?b#cs$ԙ@7jՍylZiL‘J/5ϺgvmӮP߆c˯^Y\}nFhڑb3%Ү0mf}e!r zv|8/)K.-:/5FpBb2}f}$QꝨ^!_%ȍl+e 2tץW8З\vv ڏ7|7%ᶶm Ν>%ݓądC!p hixXhDVu$fW| PMޒ 5l4=˚w#&K}qWEf& ST[F"D֯<Z aՑXۺWinw$hU`ԧUBr_Fį^R UW*Յu[2t?xRs{6z;(N\8 x$C(1G0GÉ:kG\kZ3/VA]+!KDEh\q ֋,# y)#]jryFPTŐY<<ںΥclFwH(7n7+7T&{jXIVg2Q攷 jd(WdhB>X&-|f0Mpc"r7c*OM1_=,i J>li<&4ʳ8dz|($[LƣaXh 8 cMt|EEcC,s;go>>h3mώ6m8>=쫄ؕv0!uil )4K kj,2]" i˕A6EJ@l"H _$lH[ijX<,8d&&&k>/i~?@aE%l4; flE$lo>W]"|zr6lyf;I7J^?N^i_ItsQdW[}k}\Ւ`(Y6#ڒ]!kH0DΛ ];"56ʪXfnWyBQdlN͍Z!^a DXiqGԈ4<|6_+k,LG0- c9@䒁|Ff  x5R5kb%R7]/za;i -`J4櫐̌pk#}ܳY!+o# l8(߳cz[VQ71\"z\A[3#at;r$`PRky"*vV(LیQYʪ;Sy­} o0h60"yf,kæ#L^664ފ'eV*,` )` K+v*ćj&A8g.P'< p3" &rL[ [Z$d:ܚfyh؉~ &G,6Uq?;U`uKf& Tb['J0H1 L^!JaqIuOY"@质ua;M n O$BV4iPm6ahEykx- p}rY^{5u}署uw=1H508SZC05Di g8K8|aAM1_׻_UQ}Z#YvwQ*C3dV̴=~M+ӃJ!՚CʷX1.| jYu?ۙ<$UL6&z}",X7˚E|<ŶIi!I3xa.7\_6qQpO4X>?5v͒GVx]NRmo 7|pu]k3mzIw[qdz`-`llYG#]!K8]wMmg;Mygjf 7)3Lma/q\ &;4mXVKlSt9Dc1B:ipmxG,7œjܝZH)X;nAgaeC%t9c0n, -zHO$Ue|%ot5ԍnF4EI/U҄%RUn64'+VYΔuuMr(bBe,¢;5IX~M+5p[^RW30 +Gk)OJAԮM8$jJ+$ZjDZ:9/>3ߥY۝BˆjL5DF0n{(ā=Pfԓff9 8+jj:)G6kX \Bmir0 -'Hd,wvPʅ)(kO b!T,-@3[ JVdk,;XVΔ{\1^<$ʪjˁ1k9(-Nkqɬpp7rGa3, 2N m-#,/\3Ӌ"_ű&FSSDE2;PSA1<.1s'k(bCIC&5"iG05ZU8;& Z2AukBji_n̈́_S1åLa~Svn;)dv|#ͫ wIPI\XI#RIrI<1ɾ$mtaM5A\hƹE'quXx{e*4]fly8#_l(fv)2`~[^3q 3ޒvQ%=,3$}q= }֠b'I]f?z~vv ( ᜮ+WL!C=vK)kz>۱On)>?x}tO1d1Iٴ"A#β ?'Ӄj}YF[ *|`&pssZ{1@2j@$ Lc7sCdtjvceR[R6 %rs H=`,01VSn5{?gݻȤX.X]}M|?Ȉ.qM~-;x'˕`6"eNjxg)74%W؇iAv^SMXSV ~ ]VwUZ5N(o5'.x5 Dʫs˛j=|8h5{0[ǨTaX+kwmp6LYgc.D} W4-Cr.rg!ql'g+}%9`5xЏx1dq})tMLWw~*zZ᧢p})ADGt}ql{m:lq?ϟD2i ٸ:cjFODW7KW.@8tVȖ@Pl<cp;]V* -maA4i@KNd|{I:tb*09,єYDhӊ9۶Gl܇3&%gA<Q:>f[l%u '[xR# vn%%Hu-T\{~[%sW&iuIDD Ժc 9SS8&RVF\jЗanY{ >ػQ)F0?L!zTs9܏Tl>?<ѯ"Uk.ֆ]8n{؀SfY_~ 6z(UhpZ^gS!d疔+5|^ɭ_Յ)-` sg&BjP&98j5Pݣ0U!vKͦE㊑(sOcdE\[R +.դb09܇C`Y1O=DU&'GDƵeHu@t3ܸhI:jO\(XM/w&}|?S/:QG|cմL=~y~O&L50'9/M!IhpƹƮN1Gs؎[nRE\aFEXB j@}W +d"WV-xA#XeH$ȂIkw&}|?S/:T_JRt򮡋[mwzc}^71-;/6=]-hMg\#K+jC*3;_)%M,N}ͧ!q' H@e9e7#fw$H/O}|?S/:=q`Lx=‹9?UEq`Lx~,F~,j6ߋm=13d:d7Xdsq6+KcMP'(eryՆ&ZQ usd<0EW!m`AG8Gc(Mu)NU[YYF$Vn)([ UB+:;y^DO !/`^Pyռ֜|eZPEV2K0mjG$DF'9Li$3k-_m+5Td],NQh)QR=v2XD""c:O5dRTǴ ﮚレm\o>mVq8LJWGM5o{rCÀ߈o܏ͽ)-*<Y\%sH߈$V+vK=G#[Ym¶on3է.*!JmMne }UJr\7b֒DJnKU]flzܷ4>〸s+"rFQqQFY,Y #hde 1 `#K@Ǯ.i&vp5jiKE5EVRRuy=sdoSh;G?h\r LӑN6]:]L flw:ZCGo*ƨWM5u-JdEKn u}NԡK,h32aU#-^wqk x9 /+MQc}䰛.R^YdV)BN'hluwuOpڍEVy X^dF%PY"B'XtFmrVzhItˮ32*N6][djʪ$`zoΐ7+^VKy4kR o?z޻+Xk&J kvڽ җ('#h54t-{Z"~"QKW֜ŅϸV@%í3^A)DBj'OdMz 7$VV5Z$ݧ6\Ծ9NPT~9܅ϒs6Ihcݬ=܈PHƊ[L-ĿMN|b'jEyŤLqn9qi'g} Ucj`nLBeVfY@:Ip̑HHzd@Z8.uү?w!-6Inc MCw l` Dhg^Y$4RGX0RētՄ Hu675#4$Y\|ѪP{{z}=u~zn^{_\;]WaTGK~Q??_ipt{_\;]PC/s~GK~馯ǺUgþpuAyC/s~連WaGUgQ??_>yjHWJĸe=ƾJ}22;J=xUGʕg Z_~Y,&Y/s=m(|t䑃sƫ{{vͽϒIolq?מ'w-ZtWvphNw CB@ Vf$ N/ywɂm ЇZˑuX'L7O!8n4䃒c-JB#MtoEu\mpFZAEBlߊ<=J5"Nc!%ZZf\~J’]}a^Yd_7^?GJ$2kݴp1=~O-uNEaI.c=f)Z8?]h5F.ܙ]׆?(*ùdԊs^QֆK[BQ Wc^ iu^]ys>V_6{IZR,g@mgI&*!f2)a/>M%(+={[l [q캁^\?'$LWl.ke*)ӖmUGI?666}l+}MeTDRc%mk9@.QZMU1SRvs~92vSѥ{DiW܅{RnVD"QMk4GXͿz6v)=)%öN3z%{V[> [o,P"k8 wc5iHcX+=VzfP$FuN@}Rֺ0r3`j+io֦ Jd&Hsn5rcEjTfg4*s[:+"r w.sD\wru)5/JgXzb[-=<ָX~<A:"!elb'pgu%Y=g`9M ZRy.ZN\jZ3D[U[6]} {v J-X,ҏ * }EŖ;<]mK"_gcCM2^d(!Uۺ_vI kf`ܞ)uC=%-r{+5,C-5f *H.я@R U*,aYrϓb%e4UcnT4Q;X!Kq[w0Vv>Ku:=09d}GU]LʮwPߌS 7˃76*[Rؗ5Ջ4@Z;?Ec֡"5|(nXT8+e.j{KEjaQwZ}2u֟G1LtRZj~m/R{5S+]is3㦚BR- @{<4-l9xS+tq8+X=xso14.s^oJ5}zkWVzu\.e}&F y3\!i*1Hy3fS;HMa=>bPv$wae,+ȣEg !i k S5!̩<$2SZ$mG,&fu9)}k.ERbJ[',aHEwkZzR;۬$NRђVᾸTR+jS&zٍ bwIT|ō8}5fo8пSux sWM8ͲeSbfyC ,ЂecPU 2rV6V6jj3c S䅣i6nU(l3p>?!'t|?CN馕\y Qth!mbavG*KJfJޝw:H6yULv́Xȵr#oZ?ݎCrwG/ ?icH8k;!m۶6d[R􌦼DiQFqMkt"@%^xzo~샐>?!'tOdwm7G;^l_/ ?_A4}/M/[?9;CrwM4GvK~ {#oְ?a?CNdMd."lYpQCv9;`lFhb8#$Q׬MbST"NiOJU_ʦ:{]0 $QǮ$]?UM5 rD*& rQ krɢ8mAmEQ&|GU{JXX-ܾv+ʫÀyZU\OTHWZ榕j!L:4dl{# -wE)":&cUp~:CHACi#j|ιx0:n j:::čylx_f4$1"`M˗T|'pWu|ni+Q+?rYaxd򢳛LF#CSY8lk5ZXD87 qC]ݙBm +APd " ?A::LH?+Vimr-%GKO7y0cEvHwhtYXiSN@We2f1R ,'puA'"[pӚQسҶhcR'[f%*Pa2)ahqMz啤`DLM:޼\c?yh\nk$RWYhMܯM1Ka-%?U΁~K`:YkmS/ԍ{==Gldnk^2tx;dչ%>4 ~.[}}On*h{Qm40R+xfa+ꨡ dic/NV3əc藗5%7,8A辥2.fh68S(7x8h AZ8S:>mΠGBB[T{qܶ|4: D٪Tls ɿ[{mt}u!_j"~گ#|8;=X\KpXc9qяޕG(C_'(C_'o+1)VJ)IAu4ehbL#' Dh*u;hk4ZvElq+!Чv]g,/J[0'RstZ"v aGz=aGz={9 j{$d↍q=|TK._mKY-$`5%Af~ceB1g}"A 9Z AFҼWGy[vP3-}s5BZmQqa [Tg,b2e/D3g;v5\`)l* C$\@Ʉ  & /~ПYc*`59Zl6ZPf ]>8-GqV=tUL w>x ;0ɪ({ZU:ru-)Pp6,-5j/ uKUѬ"13 y1z1W"P$¢aN@LkQL6Tā6gB@h:IUe6Ei<- >v[x_^Ңm&=9<`Xx0{]wZ-y-NA۸gt@cMq;;kg%[@t5lW6݌G$6V3]N㵙kEDk^%uvm̬mJjo( f@qH A1@I1DHdD  H4^6_W3gD+/cV9Q~pO1>6c,;l[ț|z]? T.υs6cT^sc gcW UV*r$ g/=I+ ncX1ERceP3zS~-Gb}G7Ȼ_m+AM~Ɖc `QY㛫!;=X{+PVg9 AI&fDL2qD2I;uO1H 08e}کKw21+/H5Bؐ2vVd՘l` ilc%*Ň\2gK~.q㋡+sxהpY]|rW"׋pv"* ]@ 9J]:W0yRjj]BH""fda ~ܟ>) !$ɂG*)@$P yA b@2( Ir˦Glb7Y!lcˉ>>83bY#L=SbX5NXs3҅#2$\}T씽o'=; ȘM ~/[Z `*V .ûԻ{v|#txPQO`$P1W ;}~ҭ:jnT֪"1l`{2qP]Yg ÖvFp12 gf2s83/sَ%ҽ)M>lDn^Pק#VlbZZRh4Jl#{(fC :R)5j+Xl,^\>[YѢ4XJn*$za=O\UjE\du_VFᰙ(*=tկqmmGL]5%*^P$14Z Ex6jZ&n m=p*rSr3`־s fmcI\A>ď9wb|:uh)^}-[q kCw}GGh~XӭSxYNO}gJUߋ@\N˸ȪiXYq޺p"޼[H>YT=-S\Em ax>i)=ZgJjQ:uTj'tO):m/bz,ZiPJ5 PNpn3V~N3+ևŊ:=\TXqq N33SoΔgrMg񤁿:$F˛a[g>lB_L||<>ٴ!-WO/'xyJ|^ǃpuԭං*ʵ6I .MM2WmsA ?`ءDloe85ZhbԜ8lL N*~ю8KW\cZ$c$-_杮IJBJqa^ʲf}9o ul[ӭؗ#%9 qfIcmq]K` lB{pmD:-%)T\JJ#iWݨRZJ^q-`=(a.lwsk4ukRQзlV6,m <befD*Ȭyv"D59 W;"p4B!Gr&K~K]zfPtMAPj3Mݬhf/$Y?jk<["0ם M Ɲ]px}P kX&W4c$3i#f,",w xdzS:/cL[6AkPL ;ﮘA:`@iKj*l]ܚTXܣ#͚Y)ĎT EZ ( Dg iތʼn7[m Y9C@(vb#}IMKf.leaZ^+&qYf;ru*n#߳V gȷ%F6Y̙N9Lm՝dpYOwJ6& ?e4 9 -"]#w dq:h~#?g@(Kok|0{Sw# -V@2U.8[jEdJ65Q9dk%juYj ֶ=Nح"㋀ |h{rOS:dr{FȖj{mdcQrŌ c]d.2k"ujŃ\qrmJg*a]QB]cF+_X#)2L cc@i :3:lUه %xpȩ_=t8RuTb+oVl^0/}+U7J]kLvW;qAFØ4cmLhsFw9S=XϖSQLvʛK#x}S$ߑsvя[8qxK9:9'T-١oj3J@/ntVU%gVZTe"W[Jue/iZGk q.gkw?0<(!!Lf8=lmx;XB[o);kt{,u zsP11 Cq$ 9PP4MRcuŜyי xlP`iXM%H*^ sʮª28|QG`|x8j5Ut~ҲLz.#hƅPn LJ+YM_l*~j]ـ3}aQU[8qxg33gg3PUHEƴ eqae@7<%I9ZQ\*:aUu ĝcTPC kc ] (UGj*U za hBj+1c_S$rsJ2ImEMF }{Tq ɦW6Im9ʠxBZ5Uw@8G@H:LͰÉ]yγ.q3yk^2>6Xf8-oZ R}o"OCj}GJT(24ڟj˻e$0;Nۆzû]%s:5ߜSl5jsϑu?lF& k z> he"N̘D'-~I28'5_d?'}z4ޘEOvr>FeYkemm44 ^G~>iTn]z=V[DD Q_7r0[b.יǩŅZڠ-DħiA*i@ a ㉦o(B{ƭWO:!䐫eդ$‹t-SH툞1j;"mguJv]m6@AtזE( PQՀEul0_ymCbh6#s:VfRTشVBv(Өl4[ڋhXeQ Ѹ1"GPSڈ&(.'"EbYvbZTf۩ҨQJ:=Чن SMہ `^<U"Z.8cQ1$ GfLȜɒu LN-Kb1V63T#ȆCFARĜG+V^K?+_sWX>ednX NWFBa7}TgyY  dzmf“Ml5S*~}mTucve –RS#7!m6FZ v Y&`amT~DGѲЗnVfouߚN)O jBt1SI$zLH;uq?'S;Ν_tF^In 9&=M@ce "5ro3^>+۪_X,, b˥Kze9tWQF4se}Yrhg]: &X:ԌSk4֛.'r'6HYqիA@\q/saKmt&TL`̘Fdh.yR 8 ԉ#bq1&$rC̜CyUbr ijlF\]ȜU^O<*L8hd׹#hQ {Eߕm]#,ǂA˪ΩbQ!gWo[Ƌ@` *wm_?)yVNbtjC휤&mnK ˜ -#3vm+R_ as^V(G3 -+ԲnmCs#UlD|At S-d m Y4,$FE)_Wq'S-4-GnC4@NjƸ@cei: gtιwdzdUh{ !pXYv :*"vJY+a, ijkO~͸㊢AIHŒ lrMdb[Q 0Eã 0iNdI=I$NI$X Yb"$UkK ֧JܬS.4C0K{&ګM_``K5ؖs\YyXm"˥lȕ]fqO ^˾cZbR&N8?*2g yb8,k>C?s?3MGq0v E{ >.`gzc]f--)_ f^"ev)9&T$%12Ԩ']hgoJ CM1Œ7XI> 6GІu캍NLi xĎV1 l)ET]`6գMj$n 4qg(6}{A7=(F`$88&}FsCPt-{ d(7Hиf^{Q8̺HyߴV}Tq?V즞fkf r7SE&\&5h::W ؎*#סqo^e6t[1u\}!%61ɧUw:jCF|dH`S#)!B F3R#1: H8='T> zDHMdd}c$T-;D usJUe#Ge: r.l|ivC_m;(SJ)4dCftn; EO)Rڑ=sV_dc3gKc9Le]w7 7&Ubfdn){#-d!3J6Xe+~6ӷs^eZpERRuq\y]$pNAHK) sgZ'#]2#ʯmEoT&iMҙD&N$EATsYll~hMEYu[c:ꦚ9uLBsO8# Y#rJ*+Eݯ-q4 f8YSEń+V;Z@5<\ǐXeT P,`Ap +UXL^r3}AxsUM\c9GI'yh5d3dE%w<`=0z"_ov%)e)N9ge"z޻.XJfCd:):Kbmb(mu,6RJm\!"O#M%nxP I$ 걲{^Zsl_jٓyyg,6s}fT;ˋ-LPT$>Ne|V~Y^9jmv;NRZ` eK\a=oggc V^keY!SKTNL#N(VK;Ow89 }ې}0զ%!*zblǵ(j-B!fhcSwQ~iv!Bǚ} tC-5c|E"$a%cT JLj49%EZss0DB)% (<;]g8ݧ⾇_7(3]+9V~0Iˌ̄=)έ"$}CAq=܏`>kIR2uHNDfQc'g9|s9s9s~9Yi??jz|&cI}Ӝcu?G8k?GJTO.rT&B*aK-C+] U0)]" \jg}g[|EF9)2Xmy0qqT:ykR6ל4%UK6FŮn6c(NQ&p>ͷgL.4NEǰ^E7!='YPjv֮&@ 8q'!o72#}'}N%>Zc81(^~?PzƔԊ)86m“bY4Z>*QU'FYsaDbʡ(=xĂ i, iVTWid+JeJꏏGJW\; ]uj]ښ椻\zHtr[Z3V_;jb.)CBG 3ȳ0TldgOERp(6Lc.$/K+.wttu"dcH0FA bbAJ:H$hDȝ}5(W[T7Mq&;u/Z5,bMVow<n2x.ͧMo,>\tB2hے8%5.]0msUtٟ!:yQ tm^NԒNTyIm*}nOZ$k\iV]bŀ썀.ls){e2詊M$GD=NQԢN<1RbHme-_/u HL%Prg#0sU r![i;]3] $I^dI2̗`S2§_X::#=1Pf 9$HT )uIQg;R-=÷b{ߘ m 5?/MN0`{)7p'E(эAf@'b\W'raourZ6՗3XNP-Cz om$,UkZ5 LeJ&9@)(8HH2D( eII>^(i0tu# F3ke{6Dw`d%?;lnה#5wb~цݾfRAN[6[ c"EW]EրC6u:kdm?ltunRc_5!;>EIOTgius_;K&~_tuk>/kgius_Jׯ/wu0UF0116o F11c1c_f}n8_R{hJe6xBg#0sm:Ύsonata-1.7.0/website/images/t_sonata4.jpg000066400000000000000000000344531377142014300203240ustar00rootroot00000000000000JFIF{{Created with GIMPCC"  NU !T1V"7WX$%2Atv#4DQBRSq6!1A"Qa2q#$Rbr ?>j+?aøs,9#P TE8sY|o6ęMsE{J`cR=25NaLOFš)-/,aYcVYwAܜtAJ t0} ~1q 1gg9X=(]OlJ ew1ΒU͂jwEƕ EEǾxɌ;pc Mrf2I#%b9 #YHXN~0/;93#> w$3XHHj(|LM#FϚ}ēM&7Z1{&Ph?+SLf\HJ~RV5b7^ݣrE0.EUl;Љ(pNe8`ګ]ս vv|9GU;%:9ƏQ9QzkWl1ބ8%cz7_M'^\MQwɚc&^Y*S"p͎LN=q@o", WCgRmHWo>" ^봓w6<[>ceP"9 Ǒrp-QZ⡈n0$U7*yXžB;ZMD+-0Af~P]?'~[Vd٘A<mYX&ZIVVXא%rhM.Ey3:ʃX:5fIesI^XAۣB^aZttDmG4;#L<9nUh#Lͷz\k!ӏl#i"si:\]7]1pW[󸱷&+'b$sm%3><I¨T͂ dQg!,ɬK%n9OMT}jmtTVH&Ґ< *]´!6ոX``V&tx(M ޯit|i뷡m=Vuc2Ä \,n)s#6sGs8ol g4;kfqذ.6>T#ط{ pGh܂A.;i6M.kdW6Ol[=ٟ 隑ibgN!=:zv0YVl 훞BdCsLk͗I \+pe^>1ehQ1;j͞R+\H).7瘧GڢC-r6 Shpb}tu@BݴĬå-%B4^ǘAIc=2H]4̀G@nu/O_o`P 2?uٿ$|;}fgjw6;H޹2F9==sd+yC^^w&^> ?` 6_  pA{Qnd{ݖg}1.ɤyhڛo9M]5M1|]Mn*`#qSOf!é!ezݘn17 L>>OEª{g!kK'%^(;(6y/]@5,GqF}r>x]VEv>łK&5n1'MiI_ qp?Y5isw\v6m#v+K=tѢ[ a1kJ&BƁir?{]6X/u;G!^6?Gj6ƛc8c po/9v&Dykr`2jݝZ,TB .3 ie+ENa1m| VHR O~7sji'a[I>ٮGSnTM :a*07=O:#! i Ad\/g Ӯ}#;C }LoK\:ohnR*cWrUnm]%V&gOPa10Dln<#AO)UiJZ ,bדm0Rmi^&jK1c"ia6ٷ/V/VBʲKȩ5_;Rl|#5%ǵ'd-S[pUՅQxP)vnSA4z>jfh<,j,K.m$64{$]`Ek->`3 `jY^$`/ɂQbhum+Xqk[m c;l6xcsx>4 rfR3` k;c8Q1ǎs9s[zC-Vc3bR-^q`nJFA{90G`9&+F"N.w&6h PjZF+с 0jpÒ"bFՊ0`,5m*pm\g9íC|<>R)*@f({HtHnw9mu/mǦsqK:59ܑf/_a^}_~UW?O+?ԗyX/1K7X*Jten`92{I㦑k˾Li{ owҞk\c]qc1c1xc<1c1c1ގkK68m.V>(SUBcb_13 *spO0AhyE2.b*z{T3!lR(.Pi!J`hXA!`c i&.2\)Vaℨ Lo]M,jp8ݸIͮl#[0y,M#ƼyyMүÖUp7 qjuܕ*Z`8 \3sk@ Fͭ ?R`F'+zF`13)5ʽ=fn+Dg,g*KxY }#(;I,6;oc]uv83I&bzZ"Dl ma"ɉ'LG.s~/c eœXREkpnDR)Pp7 .R1ѳldGfc;/vZ3ML;isH嗃dHy3MeSPiq{4M$M5W~Uc/>PCQHPh$]XK3Df)hK8pNxQ9pPv u (MZm$ݾ?fvNkiKSJ9;2 V]lVg9w+pöXAQxˋiT/$~ED̂'3Ga3 HyAIn+P M݊ 6qU6I {[XK,qD<کp%Ǽ̌JE&ĕp}$OV$ Z]d040@ 3. Yثeg%8g,9}x≯(YM>͹+cĸVv5 >6t ]hg mqg A%+yfՉ0U1ؖ*9Lof:SRCxw3랧ֿ:j?jK1ZV1Gc fX.D%cL&fiCԁ[DI91"bMLB΢2o5ȳ{BTq)D(R#bw1ۈ`q{ji&j]{gAdh1r 6I8lŹٻJKa%S*\eYXQykӤe"M >" r<<>9,uc_Nvz]ϵ{ז;FL!.4vօÐ}L t'|Cd$R;#E_B]lCʐ)nFD3Y0ճ-d4@'X`{i\H廤[{Z@R,̌:ȟ<ARJ٢G#PXV0  6,j=9!I`zDq,G.1A!i3JyL#c7\k8ƹa]7his6'NR`Z,G9F:tH?m &(i65;ԥX)fa9n9&8WQ@xb_`h; *V /?4ߗPȎqHR?0rpOk6/?>3qa($BFxE߯~3H(eiUb6B66͏Bi048|qNoo{A\<5aX'Ln edC RM<馺L|cX_mfj\*܊Q 0d$x`^Drd?j`ؤu587+DɤVmogvOSȨ99|:=}oyʪCGe,Z1gy$]4jK\c14ֵ8f}(obg" nRo=lqK,zIg}4]u1&s[MhNX. oR7ml5Q܉ZXQ)+3 ocpC&fFc|VK={.jMn[אNt_orؠO-P5PeP̾Xe8ñԽ#{jYQn,P\MWN9(!3Q ]n^.ڎr`Dޞ UdmXidiJp96ϭpi̺aGCl ܲȴ89Cr#IWN9np착X.<*/ݘ"x? ` Uhʁ*S7?RꊗH,}\<~94!zU@6Jӝդ/Ԍ4k"2 uVMz5EG00Z0VMż)YVkEBote؁/%}=Kd*oז 0*.m[uB6Lщ}pOWT]*b,{xP n+:yBrSf֭`(lXx$a@- ]H5̀ld6X dVcTFTd{3Q[nn՝,tS{_"25ebBE[C[pfk~]#-ߗ@ZmY O%hQkS)Y{Yuuk4n@sg(еBڽnЮeѽ ZL`MMS/`XF\4(Xu͍KV<ۻ(RAL۰ [^3[PIYٳUT % Jd@TṔa2 c H#z*V8'Pzx7I9i%]d^} ==7X[҅gMIq`&5>G37?u\P "e՘'ēޜ]'|0{XN.o}~tya?M8Q]a|=Q{X-YCj)ż30k&1kI<68qMjs[?9W馟{nwQjЩJ=U =ثAk*&eb9ir t<3ͯNn>{qqhyg"\bK^U;ہpɒϫYkOHQDe>K2\{&J73Vk_4+r7Q$D{wtWh4, !3+&=ݿXdiTmm&٘+o5&#M1 ;QL|J!†]vמ LŭpKƦG$Dѥ'X+,odaFH~73%&LM<, ,2V.x#"FY^+zƘfky.qSj(&q`qc\i>u\gl8>cBl=qqkX7"V2r ACNحZ*8 =<[vQ" TRٳٯی" O<Q&. *ЖޖaNQ K^Ah Evo8Fzfőҍ^O{8?gFi?FGJHoM.kOFƺWȀ{9+}32*gd$OXMUYg.^yT޼$jdϺ6)552ڕX$SɁhYfBg#z"-B &i..EGmO}x>G}^EӇմ{<}.=4{ᆵޢ{ptI'z, DfDì11}D{֓LgǏ){T:iF?nu!2fo[;jZg}7u678:pt#e}4w߇ G%Umi䵣HwksُXqO rVr|VBT>˕]wɝq8E蜺]Yz.bUmk-(Ra;:Ƌ*DKm@-rNS{|W\9w_AL;r}c%hĚqf %Wv [*& 7*nvl::@rka.S*p#툲jѐsmc7FAgYtcļC^OK;`00vFk$\ZB(HXݯE+l*c;ۢʱDrP97˒ !+[) &mpZcȄ,Gk5F4DEW-*Dq_l FNk'U{4=^}2;. wIyz+ʚfX KF}P S0mºԘͽ;;f9( $ٓܞ[GvФzG4 PJr>l9_o-Ъ|7.ڵ(ZzaXSN 3VfTlusѻ kþ 䇐E,TWU[^d4 )v(D$920[Gb%0bLI>t917Kw8@0-$эoF 'mԥOs4O2rkUs=rk,jkx6\.t[-"X &\?%6gR&p\y vA[ۭƗ+'q5Y)q)-Dh+R?jC] ܈!Ub"%5{:&-a*M {0}*]Z0ZEo5ӷ -l95ēFP4H@0[I_8gk>c@\\qW6Q2V U4MS]jSrj tC̊ [#lj+"]u-KDv4=@Z31vSM2{Jڍ^ ")cWΕR`Q 43*yhLB=l~%V\Kk7. a9i9pC4ctv#G"~X+A@| ѼȈ놭/Cxm[jY6w܎A D#Nm4qK6x%Nļ^ ֫sZk XDV忈SXLK-ld^B_k'(x#oȒՌqաǼ \t:FL}Q HnII\oU\+ 3"mk#ͧԄ1Xa x' WHDg*:ID30;ߨl@7אHN ]QN1%w$E]3fqŬT1HDmL:ʭeFlSbJbfr]^!+M5G=L~j148jm\9Ӗ*YVE_@p,'DcnKܜj\09r(u$fIc"u|k#"_D'). W^iN c fZb6P31F^.ihGKh`̚b?V8[ qn(LHqE+KXԶjGXԶj@H5wuo07٘t'U^!K_R-P0^io7z<Ѫo*2\~W\~WjUvS~W</Q_l~l~jUvS~W</Q_l~l~k۝naCTE%tmw3V 5 y[+%SӣPTEYs;j]ؠ d^Iu7@w&4>A4_ hCS"AϙTIwhlf6[m$eԈIX]7U~z4h֊ȕsnL3ʹ[^gN%iϫ\t]ւAkUYj3\M{J 9@ BH(njAGhc d>(*Ȣȷ oI 46\Lb4pV',|OMsuqo9߰ +6^ּlc7KS .)0:;SRJ2_)oyLu(,YD$`⏮HKI`^QxaQf\$qkSp jRS[<.{rg$J:9, M 1{XX!C] h,ҽ;g`fk$;z-oXd@t%jXbY{U=c$# u%f6/; 3-~xqqɜGc |n_YI&]=pul˚[u\[ .W@dnJ0!n_4G p8ͨ8dϠtu'=5PM~vORl$ />rVv{3B/)j;S*$V+sSJ&vE6zSa wE)":&cUp~:CHACi#rZauÀ@ttu _rl(l=0(]qdХ]փAMDDbiw5fe8>aʊn2iT Nf㹳ib-uwvf &n+GBNzIlE~1T tu##>1QGJg9$d5zc=5evHwhtYXiSN@We2f1R ,'puA'"[pӚQسҶѴ"ω MGR1du ]e-E+01`lV(2E1$AjclGq !Lg!&ƠF2.:Y̸. yO}MI1G RSMZ06êH-f,ױؑH\v(lxcbOTek?βPO~@_вc<2]7Gy_>xx(&Y֗Kc,QִA'+ -pQʗ+Xn[ ϒ5 B6_%TQjS w4rzy}:q$S}?3Waudls{K9Oܙ7s!j#pk˯Ee0eT|Vd01U۹+S;",ۧ2J-j/ [T!"fc)d @8J sfY9![0 Hnv]%=7ShI9q*GVGJU^{0,J@XHmA1x,ȋVˌN>ݿg~]Εfje HxQYאPMsr}L2T4l^)vpR2Lag$Hu V 2HX] W_Gzo=B?urz\>\˦׳D/+RqT\#د߃:LbAfwʭ 6ޔ㲎q GlgqyK%c8eg>̱_hvWT}XgIyg5x8 8"͓s`ivOU~K6_絛ah-j UHҔٲj $h\FC]xlE/@0]*g쳼Xn`hDfxcREz'?bU,GQ6s@ UY-qY_lg,YXdd ,|>lbRa99JIP)RIJD`:DPP I# $z2*),Ze?%C :JF,'#HOLS1qOyoVkǺy.hWmɻuLivk0;&ogf)N[ZX|U6W9 ۃsK9|0J-#S DSqeh l3,A exiƼN{p(yl2Z]y/2~h|2w񺄠! Jqȝu/PC7oz M;-jlV~>@JISCaEMϸ5n:.7 ck_\i*O b&JJ"ϭɚߑg]Ń$4zp/-h馊gRBbל0kŴNWzoh;/awNir-޽XҘoRYؒ5[TQ#ngb˅׭an VSB+yCѳ?eܴQ3u7F/18s FO|fx!OrZ]ubM5]L_ݺ͓9YfO2EZϒ("E@(e4peȄqD9YK8bydžz K2#ae(182seFA!y< P2Da8"C2!8Q3JUS?S/~O?7%/CX ( Ӓn1FIIV<}rMdeϒR_n_?c_}9ɰV>8\QDi:L4"Y[dOpMheefFJtb5u+jVšj]hvm3턓Njbד+LYcX}$C v!X.O3h9"䰯ө"Kx 22Hb&:geRtxPytp)Vjk(kÆ-sg2dR)?mTw(J/-Cؤ+*ܢ 25VgLD6(^$\&Z27-8fY>(q`kUۇ&[#lnm8ASZ1ڳa]m}XB@yuێs+shV 0]V{Nٯb^#%jzXӶ:bl,^ѵ 7&rLfG'$pH"U2'8Rn̤3a",d>$i͓!)󞖶JVY[#EvkA4#mH "]tI!(61,\KOM[[UMshUQͥMx+kw]uvǗ8Ŗ`L3)I$ NJr$( +)! RJҕT  I&DWh;7'CU 4yn]` >yi15rP1ѓ)xʷʓowK>MVW_V9q.z`-#wlwQ1q ɍ[#,c1cǏ1 c9|1Z浽I`3=XUVYu5Qlj, :-\Z)a\Lֱp厉Jݨ/AVٖ5[kfŽ㦕X%@VUa u" #F!8F0q81<|s,㞴'$2@BvVFJBw@1k``Ja;aECWHjV9u hV)]E`o V5G`FeX5<<\lz:~ߠBuRVU3x`[@Dɮ݉>3`8"Q32\!8g])X9O7 : KNDe} [;/4MHx`,ßmWxG=&[W/5cc^g;hIҢƩRe@1Ʌ1 ơVO:%5^E' 5md&%]^AԠ y`4%.A:]vm{ݡVQ3irfeEp/]Zp(0AO}$Qi r҈ZD$tLJuroTfoK%mM*mfܫ f Qͤ7ZFk)Pd-N (J6".&Hb7fC[b֎:O(khNthިe^uiW_[حj\zݟ Fs8ֿAUqg.R zIF $Mt?4ߠ-MA-MAJ~i׿A8 `ӯ~G\_6G\_6*--\rBO ̳ͬ g;UE$LIzX08˞n5"pP 0#3/,QQsgǎ3|>Q#Ӏp½f<ny&|Jw42ˇ$l3e<6U:G7WAМ',f2qX3t(;FiI"_"%lB_x||>'HWٴw>{+?qzrxyJ>K]nVBFiٿQFUFfrt @ @"`\9|9ܵo5Z ];^_+Xkv֨ahzmbjly ZĽqm[U .U5\7tu"kX:) Tؓi&F>Y=qV\ƼZT9t=mKV߮jchTcFڑ7UrUƷ^쭶{5uc$?yl]^'B^۪aFš&5P]<-φОÝ\FR, YuS*ȳB-պm_GѶɼjBrs$ujܹ#'4I&hħ&ӷi]ꞦNʼnJ5c%+O+yX8X's9q>^$z0bvÆRߴ֪[iaZ46\*o~:k 9J2B;M׏ZVa-55Y-@·xuezK,WRWq׆ejSZbj&JNjO|-RK>SDjFK+ jj{ozM\\iF@BUnRtxj'ޛNT/@ $d6AP)'pAO;'BsYg,ZkjDᛄ+鶧Azu2nC,Q+b&׍DtYZա K@E:ȅݦ u}4ww6+|^܉ ;Jf-]sN2MtOnVZªTP +RthuneF55wnu8.]۪t]lq>:VTDV2꠰.:H`ڴDsfq $$ALA AĚ$*ATA$`}1M}g)hY=kn*$mnK&o\s)YS{6ZA\{`,Uu_]%/ v<WZ/sFbbnERg*{= 6d[k0x_7>>:RGo]'OZR߇cF߻}knzj'k]UZQyst,K1p|?'F6CCRw&vja.WuӀ8~9另 `6mEW(O3٧q|owǷ.-{ܮ5N1i`e]RRTKvB{6iiPn H/ju~Iri+ӵQKa9hhk(1$WTd+#]Y[5\Zk z[eio^C,-[gyz|C8@Of/4릎oax}ZZog}mbm+{m".lR|Ahh6clk#˼6|K?WN-.UVU@p&afߵZ)qlԝ D1KuYda Fd:AԵ2agfzzqX' SmlǕf{ЦRcy>V߶Y`deYph5bd+JCtY,`BkdBͥkVGIifvϺ D`m\`0>z N4wIhJ OQ= v5`\`bR^eHrA,ǩ).3G'Q SCuf=qj^ojnqF*y `VڵeiU:6:iOmKyT~ 'q[)l`iE"tJFvB[X"]iׄC+⽻͚ ަI ukS u4z2V[*i@p@"zgDV:HR  p`@c TtnP5Z} XdEp.rNNldW#wp;% ޴y^u~Zz^!F3H+ D2Y@BYPʆ0]PDk1cv:_?I$IrI2I׭ {[LA-CB0Sp+@֢63UyfZMO(ΥkeB)=Zގf 4 Օ)X<&`:_?:_?=z>Tz#OgJ[7Ekw:պz,FujO/:*[ {[ +l\`i.5c{y󫘾OCq󫘾OCqВy3ϐ`zRi.5c{y,a3KZJ"1WJ1aG`%Xc1W1}W+㦆E;_Ɖ;KglG1l^2e ٘<&RUĎ",L5b1 pS,/4̖E)1)e Ou[8 B7G,80I(?g?gqB'"I4 yI #r98F#Ar|<-p&8GJPNvCy HK9~>yot?_ܗ>},{XI,} |׵A4TIgkFWyԸY@eukg3H$.!ÙLۂ6S8SkB:sol㭧S99iQO%k)*QQ`H$fHJI ' p]6qMkZ+)} c9f  }mPGVDNe7n;h憑nU+(vC#~eqcz!pɣR㦟'i@TCXCt>?}?>(Q$3U.d3NJC3<2CNER9_UuVYԙm7WiUXJ`(LL,qN 9H9riSKq}!!\}1JZz3K'VKŶI[7U):U%b)TQkO8CQ*CWkfVIJR+oejML}=r mhGCa#vn(=Bp;BL9< AHJc'憮ma0iS.Rk% BDJF44OMgUMaud֥bR=˖EMͱq@Y Kq}!!\}2uR\XmM*О-EB&ȄfCz(aeNQŢb2%b~ܳ=^iy |z}!!\}HktPF-@녶 \'2t!v~,vP+LӱrT:kxB$mDcDI$,Q1k̼o+(m(K@RV Ф$ T\noem-.$8ۨ%$JTAٛ#&M EFR@uQȲ= `2`%blb0>%n]EXIs92!g`&%X sxgĘ<|qxfPv/ LqwEUm3}|ar_K:;t0QxxXi=`XBt,'Vݝys!A!LL >CF2_,CZ[#:舽RX<&dK&"eq3P#kJotj^&Uk5Qz'iH̭*,drRN32:[q''fzi}}M2mڭ-T?M{L[He6+ UmqMQ)y'/;\1k40^ ԸvM֋d۾JSᒴKiB-wUBR7 ZhخkQg9/Ϙwcє)y1(9ώ3㏇K.8M Ǒj⚱"%y딬+`e vncdf֘KX.ٴ-?wϐãd^tSdAySSW$Zz6 8$AYJm׼+:v A\ NVGҴ"*%oʾT'^EЎ!;YJBM[+O9}?Slw 0D`#A  =@=)8m#ծvQ"| A*ҭi}/ -MadvYfQ)P)fQ )ahs03d2qyc _c?{O9}qNm7Zxy9~c"ĭU5'Py,2/ $j粢`lS6VlV[ZSU!rjm;MTb\NL=̝̫,lD$~>t|6st9˷lSK{*yBTiyiS),i% P7jgg-_Zv_N^Zf-{e*6Nm3NaGSrP}VݹZX@ MWq}6ի)MbL[؝%hZ3s*?hە/^&(,/,lNCMDG &}EdN9~Ɍc1៌%ϖYςO9}?Slwy, g&vn4\_:yҟoгFv6+*}zԄSv{JL,)Rh$͞#"DW6]&uES{tOGVe*c8Vv 3oT@V(m<ٔ4hƱbCn "6?cu:*75M=~OނEp%G+4ge] yiU%s&VYTAa ]i6CGԨij6lۆK@Jj%\ Vti#)]45GUXMii&Ek é&ưtBǘ̦$VYyfU}99TӗZMkZ7%sʍ5x}C6u ҅FG!^xDZgy,ssǘ*|{OQKg|Fz5D]~)>ஷQ"H섊='YY1.+)|ֽkdG+eYF{=ZF(XIĵԨト)a`3VGfb}oT&"\(r'2;.Avob@=FKa;e  cPA( Y3PˍtXef.޺5ZkKWj3Q’:1}cOrla~޾s.3S~~u=#xaYIBq0ϕʦ: >XInZKQXᯄg]}LOC>R)!RG292=]gNeԾxR] Vz|C"WlH)$Pək![=}9=xIH{8.s I'UWZ4tB_=@kʘ-r6/D;;:Nde*ն>Z;usJtMY$8T_4JY^Exώo825(b5U?$UbHo"+OOn.VBg3#)ݣ#*CWƳ>6@'=߀?큀 1o*{wߑvWzOgj~6tF=cq'%N[Gi%x64Ĥwx `w0B/uK;6pk0Bkc$fB29jJ9s{鏯 "گogt[/.|^-z{xH9QҲgƨFƱ y1jσĕ%sf}SU숪Sj}whJ-#t̍ e8 psf$PK(\dώ9E3_?C.[YqXϧҪo9EW#ڶMtjE&|M-7>_vTƪwUNvjO9Q;5Xh"#d+&%wvƉ4N_@x.A@FV+3١@,^#٧5* _bG\T&BINu|ib&EZ'b UKAI޸ĮYZ { x-ֽs{6!hnk(XD,pB3ZyL!k[o"F*跻@w=K-UvU ~lވ5AXBqrE%gJI3Y:2$69¾v6k9Ln  ga4x-\2z. ,%dV*"5u%R `oM:V}RhIH"UY$*Hv)zHYc9g -"psW;[6:e=^aҶ^׏0Ҕ:ۊ{BGVz6<fq=-SYVU-^&>j8+_%OWL^3rjt"@k Ni%VG2G2tyc{xtNmnυK8HA|Ce1|rq󒞀)Ml˺$V+-K0CNVM+#H3T%BDҿP&ctBp;BP<׭V6fca[LMOUI_IY+SWvV6j )@CYya_ΔJ(g o<0l%+Ս)4U,.:18ɡ${(-wԾk|q`YdžC!(ǪY.#UF}[PmJ(Ie ST",f0a#RN1M>j-XjCOR㪡Eci425 6)Q,i Z5(AԯV֊8%Gvji_Vj;81~-u">H$"$o4TIP%UG5HxX|NcUQ=,jGTIS#tptP9kF2t|K:`V+i')T H]cQWEh«4ͱS.ba,Y0C3I#Q繐m m,okVvUs^+^V9jUA$XYdASi#lC2@8rA we͏` Ќow6iRy gdPWSKRL00b4qVM׌'mMy+c*Z}R4YEXh0I#H8u{ S9|=U0VݽcG bkҲ=~JBă _e^]br?gwsM\Xd _" e,".8 gK - Ia#^;960ӮԞvE+54P&R2KV2DMҔ/$=jb6b< }$!#'7ȹ% lr`Dz7 acQ6FqfKd|q6[e: q2=K7s5*$A֫=*Dԅl%{0Lqϊ<.*i+i$>IcBx%U$ş-E3:K9T9kp*&bXe F8X% mAj4-]FֱZb,i5~i,waB괫 oO(rk4z5Y`Q,,Bz6 UzIYYN^KyHυv4ekt%>Ά&Y d-|s+dRD2?ޫ=2xY&kJ#llHlY2+eZ=;/,5_⛌?g'zyKWF=B$f;um0R:H;&Ic!YDAyV^;]0۸HRPCGOp ]5R ~;[<dxѝv^+vDp8huW"݈R#ldτI%cl^>rH=F,LcsK}w&^NSԟ00D#Ž2HezGZtj+{sGއ$I$rII>I>Ne#<] qsy61[-H` WgZ\gT튂U,رqoLi>&e|~QSa8K|Z zHZhM`]qMx'g ]%\(막sxme JH >gKdG3nzxXXCXkw-!A: V[&f ~oDPPOwW(g$wWcq( eB@=<@Vd_"t_~~Γ5^4ln ;0Uc.>NEnY\L:I>xkʗn\ٞ!VF`PS7mC4ZGH*G1- EU(EHO7|3Mk|qre_7Lʮͅ ,ْj6+9lac~n/q--9rTȊd7QJ .l!X_ ueѹݛNU)KH zeGIP$`i곎2yU`"GUEiDSk8iЁJm@\YALq9E-ǝ}/58 {&:  ,6aB9HU.D-)ZQ9:>ZGzL#'Iqu/9:Y[sº!x[Fҹ_t%pWO|5U#1ZC!6?&5r>4K{LѺprtyR&<$c[՞$KZ1*EtakZ,TGiiJMJ̵פiօi*ON =dlĽW$XRʒ$W^](0<>ba=Y>JE"0i) @XB-29«*nۃ2&e-rSξnXB)swa(EewIh# ⫘Üʜ=Ύ~:rk U[uvB@`3q[j}5[* T'xm+:}*#\aNIVÇ',F LWN3R_8r&ө֣rփ}Ms&NVZZӗR{MVȀ,5DA4M^j$^ETԫQZѤ&Iq%&VZWTydX?IlC$*4kd8YRh *TVh^1"uyzhL#A Dm}9Q<VFa'>e:RgXEKJj9K# u=tmw(c&kkƮ'eFxCGV=; 'E u¹>RF|q MqayDe k5bNV,4YD_kOgNg/B @f!$4'9BD^ fEcN?*D5?/66Auڊ 8f:[몭.i#W1$ڳՐ5Qk~>q^_@dVb2DI@aݞ螓=aǑxTNsM9w=vù_SZ3q|rS:RFm|q-A. ֹ@l5MElͯu,u {zz5Mz1 Vif*|GƛM^Y4Eŝ3lҪ<yJYmE$ Qo6#tWdy)#[T0kQ|G!,#@XylүQzy*crE7d*r." C]e3̜+cU|pPRH ]Mgg2P5Iʪ2*U_Qtjur6v'WwrMU]nvߍ\#]0A?d2كt"=.Kа( :DGЄgPB NUWaѧiYw3a`$Bj3ۉO\ ,@=͝H@56\,!M;i2'}J9n0S꾜BG+)9#v ys,ldti.Kd.`,'0x9Ū'j*'urz?_E_ԋ~#*ԯf=:#*EoQDhTrGz@>r 3.ĕw`1osz@:RmZ(+rW'_IJ]im Ic"()<pGW>֛\9*!+Y$# 9Ldcʁ6"?q%MƎ ͩaړAZ{hKAftd|ȱ!P=iʻog$#A  s+ҿ/A*sBYq!Mx kiN Sgh_Or7vڋ^g/i 㝇9y@Z#jnhs["Z dv;)tuTӭb> ;9|fߋI<9.^8Cz=jSq,q,+$ie4)^E!yDzO,u'VqWƠ^KUTMbVshK"uΡʍ4UktuzZC$87ڌ,-[=n0a;̓^Em75k.KO,Kv` WfGr;x䚴% u%Ε{6zL~#OGI~5% J 8=T:';P AVcoR\{n@H93{ȘEk2Q9;-_urGVg40W{ H"`Xhҝ#>_kEb1r5޳GUp(|I=DwGY<<c>t֣Ad˲9ZKskIeҗu=M2U9[I AଯW@a3VmeFƫ`mLģkVEI |ݕ#Gxֶ]-Ɨ#:i<՞.`OOH[XB6] G5~l{+rhHt*id%l1Dbls[澫4;'r'E.Bu\m^K2:q{+iOak>]֖g:~0\nI8?Syӹa\J$}j ]7)8aO~d?^Aj2fC#V2~*'W$G$P)_Ϗ9ۃy )5F@B!"A%0꫱Jcy HrB4inFmLUDH$wܨ^\H8"ӹ1TbDUO;_906CnIVK7:&#LwPGs`vïbnH*TlrgOcLU{yc-N$+I 4,4+2W""_+fnUՔ#kX I 1SRF9zW:P˳urY l bza.rZ':H# !@)MGSkRtg$2$YXY"L=cHϙWaosg`,Dٵ"Vr2TɌk@ֹMQ{HPԗ[(xt rw1QBj0$bYcWRU>o ق.7QW~x3%JiBC lm }Fh~Q|N]K0yN'DE a2E3dDxӋ/3t֟^heEo(P)H4>V`CҾ4$%xao&Q;eoN ?3uN&^NnJzG.q,h4GB%LHδ5.k~Y BEzV{;ʚwi.s7OprrAćnka+<=8I̱Y#Dk". 9W6q_yѷ}*4/J}7=O5>,<-ÓhkǺ,[+!=Vt=GUGWxLE,Bw69,&is$yS_"Y NQD~sUcsdFsdα-{$%O͖N&aH.kzL&QbiI%hԒ]Tdðoo~Djb}jtP:ze@6-UECď)ls1Th%X-:GK#BG汌{լvjw|^:uoSi6!f"{.`{WG2=8,C,/e͘bFckH2I$DD|nofP^e&YcfcO=f}\`pkֵG ;EHDfTl~ Ix4vA״V!0ɎڥF*<dY#cը{"ƽ,UBdUTk*)͔Cְ sژR0FG|滚zVд;3t[2]k1MjI$bi@@5s6zxaxydC5ibY266H$Y&l1H,F5^Buu&3V8Cŵ- &w=k`.ױ c5#qYP9ꛓ4@ Z!MR.ZԎ#MP9XC8HlO 'X!50!$\MGY]Ս_.B*_&>SĿSY&LO(62QEd:1&dSQ9䯅plv5MOOu#m!ī3 e 4fQdc!Y\r;=%~(n8ǂ:x`<I&|Jx{<|Jř%,![_d05=tlTf <!hGVC-㉈TVIW̚nu?t5Yv?=q+tl.PX(Tuq M HհDZ$Bu5$j5#:Vh/zF͇C}o1(FY!YX@h9oZ Hd i ʆ(Yf~rU>)ٟC7Rafmbqju&f*'a,x%W 黥ٺr$'K[!LDi)fqJ{b[uv/v>w[m@{=Rf8xZG_d#9< XQbTK+F:ڐDa:u9gڻW˪d*vB;ܜ ́&UV2OA'%/ajz{y(, ro͏ cd aq3bԛipK卻.8G8쓡.  ~XъاF#]Gjv EȽ(*s~\Ùs$V WkwNazC2 b:lI4jF EU-̴O1u\^D+Cڡ`Q0j3L&@27 H/l,c~1?_l<Ua_;㎦ޛ=ǰ2KQuy uO uG SRd_Kag͵-!TVXRu gcs?-k~Km{$7b])e7Si&<v0ߕ ag.)ExP곓'8 Oʤ1 rN}. aM`=9QsM{:E$jrVFbyĉ9V~/Cԓ86O5H]E /tv0A {&H[fB nvVCc/1 GC4SUV^QKk ."#6m/m\~H}ڝe[(MUvX_3]a'.W+1eۯU_ ^֯ST۶%Lx.:h5T٤qScֺb|D,s]:RSH5:t#iVV 8Y!zV*֏ʼz=ngR]"\גٰT&-ɩG;rL(Z\쵎/3>/=vn9żmmNr"qVVG hD"L4qXH;"%:09gڻ\:-s|8jtT\@'RDdTRckIK):s\j=tF"wy7uLme c}F=9O\aՉa fd,$N1ة#>{~gP'7`[-TrmoOx]5ސ3nvQf)35S}6Mgjs >+Zoy'S +Ngˌ6#cX|f >1I"Fo66'$乤Fl5v;9I A\dR2j#a~,XEVްM+G+7}c+MwUj$=:(ʈNiͳ_) ̊!uKrNӭ 0<0X9*~EX^ VFOmSxk&O,+Ra3q:lΥGWyBZژOnETW]?K:P;IX3p+BI^4,ADҵW)%ʲU\z=}BJȝhOBdxMbSvpG]!`ەK1r8U,Rf$iU00c3"Ȕ<-Al^Is2r^K6vKɯd1[W"X|E,IwgP6swAq۟?!f88jN2җq^1F!…VV.f"`GLTc+$3J⑩s:$\#rw~ޝ~'ܧWoqf'F˜m㕚}>~=% qU3fLӭ@a  j1a i^3_,Ltd*BT^X.QkH_!Js;⎡x[n~-L67WO]QP>kQu4K$WH_P_Úv{=_:xv'8Ur[ *<;V/l.:1oIT z~qybttU69PgrRT-G[dy%biw6>J)UK_P`؏,H,F7Z=b{F Oy>,YA)D7 ei{~7 <*]bp@6rj~$FEVnTD C_qC9!BBO0CI4ldcj 6]AGklY^2a.,rH&.ܪRW&{HJhVk&1YjZy&J"ySw{|GvX2N-uF"pw]Cĉ<ĤY/*9cF5OXǥď@pq̿:tgZqXIt2-!"WhϺ-8nڪԌ*s}S*kYrE$gHAP1XuC0i)?;0eRgf}[Utl%< 6:_\(oSЙ̺˪a"EM 0۰;CXn+9 d ۆ6\>qN  *)+o TYu=4A:df+2"*f>R n8̨?sՙ EL-v6-%FU.;"y3J@Pc]%N1V([cZ^{Rz( -,t#PQ]>_ZMrC^ycӳJ6%7q~ N#:k׆%S,^D4eUUTDDOuUUWvOֽbO~(8v)g6(I!i(>jQ[)"C*r!KOt=]c]maDһ.{8^t6ͫL`Se=<\l`M2m`~;## ;Kiq~]#{=# $ 6n.WC93E%7 Yr\OaqUU-Š9^H<,) )Z1i7 EߙQ3hWڂ+ckHFuQ9}Q;T:y+62qnFBث{E[r'ZVR4/ #IIŒfAIcXoRV;tsEn=QszMHVD^;{cJݧI ljw?1gjUzʺVDU= M[O}Rv%j_.=GO\:о'f>7Q6?cߢ|tCWL Rzwv VH&j1T4UNCxn_ƽxu^]CTN'{zA31:%sF,l;nU'¯o\/t=I?#cǦ;`oI̚&VO:=ޒKo_%^>޽?]%w,75]3<_SdUUDUZz^߯oSލo}c'X&hw4k|_V=ۅQ{9mV 5¥j{7C(rL9B#8Q2Dʖ 3Ƒ;dO=cDd/v/v#UXӷn'UNݕQHz88sonata-1.7.0/website/images/t_sonata7.jpg000066400000000000000000000410301377142014300203140ustar00rootroot00000000000000JFIF{{Created with GIMPCC" G   !t"147U AQ2TXq#$%RWa8!1AQ"a2q#B$Rbr ?<=5P OPÌ*4Ome>euh}Vl坅^WzVޥrͧs|<a\@Okcš+(./iYVYAx>D)o|%3K_a%:,~hOges.B]ϛ๪ril7_,bᥓ%6Q3kXC'y~nT }O6rgsÎQˍ ʨL4ʚ9ߥ(alj=#,X19$yMI:!0G )0iȒihDߝLQcܶԄJJzH";MyHeZ=~lE7I,o2A;P feU--^ v `[6;Zy=<-?ξR٥Ln].'9BMzs&!T!DV!|Fڻ\PyWNɳY/.냦[}[=SŚ2r Wd5E%\g.ٽcʏɊSOs \Xa;VDLϏ!#v"@Ӄs._)#eFu+(he?iTyB_cz$q|b@} `qRѢ=y4ӆGBS?a^-5pcn~lTwivOp͕obZgy\)ymj=]^ 'uOJkc{#L=n՜ \!ۥG^F<ui&όeD;\ꨞpZ{׃{{ u?_ÚRB=Ɏu#^Y7Vv=+y%l0{|~29?߿ztkg7vه.{*1{"BǷ0h )1揅ɪ6J9v;b(Cuo?'qJf_|qLE)8_qn{gMeTBƍ*E&[UT\Ua,tSx0"Cce:{FG\ uXo?UckQC~O{ߺ_~MFѦD! L?< ͭҜ<:n'." V)W/ qgGG>?uu~=ovP-~43;[¾M{/1^#`V{MGoR)˜[nPTt^~?v[?$EfFƛ)+GxG|kU%`L$c߭poaՁ|HŖ86lOeɑ.$Hّc_JE+N+9j EY}̋"MYH.\F eYi7d~q~+K当E u4OQZv-IjEY'$i9 p AjX< ,&B|]1F*ܹSsvςw2\,y,f=S%(]cB4ugŭ<\W5ǸzT}9"ذ:  Z`Z=" %0 L"=CUT(FB0#jY%*Q)]Yw/Ķ^Dn_E$:MKȚF}嵸א^4ܛ~l?yVGEmKHt#yTI&. !een2a%xw(y[g&ks|~\iIg0M !oīz&O*ȍ`TrԪb".xG֞!4󫖧.?lP4K'z\s}{qudv@OG=|+sKOVJ; O{Ϗ;/g{Rwl??q坌1w˰88֘좷.m)ϒ̯> hnb&/Gx5?/Itq*ϪPϷN+Ba !ǽ;>]X,=9}m~ x_曬Cc:2`l*eό!Tm%B5Ο6Bp'Oѣ^T@򑩨z)ϕQ\*r0䭶ss.Rzzz $M'>@ mVǏrϟWZ#Bfs #"QI\Po@wlVDXs`]_(6k E9|"d,RX?u*/: lXl6{~T'>G={r0⢈QdHTאdO)#)y: Vi\f*4yO0\*^]Xa<5qgbH~("z=>T `\XWϡqu~|Kǰ5}Hr6qyZ3U]\9]eIƿY0mUW]fUvp9sss[sns鿞kUʣm~܋VO<d:mD<vg6ƭ@CPy"d/rCþuf`%T/kTMK_iW(gF`d_{r~S8 BV:XV`P@ ŀmG1 ODt(MUlch}:)UCh,l"{>w]%/2B1(Zj^2-d=cۊmD*ێ5]\zCku3FR,%i!o5DY|VO$ W`} :{G^.4YAI);hdAf\*a@2&Wo_۟M=3+q+fº"F5ᵅGϒٮ`{ύSgߏ91GVS=zrcAx\d+5m9~SsPzz?sZb=>O7dxzIy/骏\љ}6P_⠩J5Z`П~n4zB]}lUPENk7*\2"u龏m]2HF u `GLHz)"m f* +c!dV:N^폆<ο"%^=rC>q>:$O}*选f"IULYhXh[{?| 5W{SwF..uٓS8 Mʰ,<m]Gxõx<--AQȎ(HRH,XHEa/(RXIfj䧨 ],úIǖ/8LR :CT. ?sܳڵKLT YxI`ݖgBF;HD2qm 2ѵ|XJ^WgIX6{cS'ࢲbjH_-TZuM~lrVaEI'HӦ&:F;L?-l.eS!UQXˌ}reEr1ehXḓN db.|vvɅ# nWc d\s:ƴ K U='VݯDiMxga}R\&ҾϿzv=.q?1Jw픁w2_y~\5>s>|di7*.֬6]pZ :/oSap!e;/O*=~YMeS,MvR+̮Ž#z$)D2-oc)Sb[ۼGE#m!ql_xm'Dϕ9v؉A2C'p>v>:3nWrbc'GD+BO@`UH̬Om?Gro9y-B $FϵG3kVp퀫sejoBy (WmpAI2M'lA͟iVř1mcEN"AY|31 n S}2q<#Osa9djt:4h jQ,L 'io-1IK =xXΛl{/ӘT:ɀl-W}@WбdM+wyěnI ^mJȔ#GdbNY|aW C0!W@\2q[*1{ͨe )P$|0PGɠa 郲ȥ1v(0b]Cxu&;4;X1!L3)#Q[XIehAڏD>u[tfBx%԰x7Mj\C'SA^ù >6a#y! ]2#t1^Y!r,$/ a=}OdtK+AGMy+ X=7:bf`SaĆbvB r"dhA2T P%n xZׇn*f?ӎA 9C-YK 4JDLFC?t{(-'HT`;vaǓcYST33%5۫U4^*`-j&z KW]\-@24!u\=pU6 ϏNx㵷}.eږ &n Ye hFE4f5Qw avG>ɳ9lFﬕZHk'V eccY&ڲ̶Hl zAkOf(lп{ywu={1wzF]{O9Ϗz9!Fi3@|ըtߓPy@Ud]V\,;8BcO=`u3@0I.!Á,yqtS]p%)vϖ=FS5^}]]ߜg^{T)鈾(ix@_*ʔ̯*˒a6 FvSt{! .?#2ߟW~CA]_\zwBWWe4\a)&KzϚPåߌ/9LBۥ<blŏ7 FFߓdT7QA m?u9GLmbFS=.l9R݂{jz{;{*5pl7U\U6 e@ESa\̛{gk4Y&XBʼV'9F-cj`bxR'D'.6b7?_s{E^/")dR$# ඒi4`` }dģy3Cˌ<%-9 jԳ萴|!ϺC|QؓP ͙ߝ6.NDqG,X Nj4qHY0mR4l3f:/2Kl H%9O # Y)H 11WAm51cX߄h#:w_yceuSχyrWsZ* N(eѨX@q&/ꬸY@SPS*K@wy'Oο]bg[k7вv#fғ&x՞MkDPQ*Vή|_=OboxyeNj0Lfybŵ_,iP;K10 3]DNJ̄G~}`P*${g6x_k㥏V]k]no!CJƙvZtASñS1AR>{7xW~Wr _ vO3 †LQ.@aSfs2u Pob>Ocy]pZ"Z,VySmQ)u?]V%?iv?ry(v<5=6wǸx(WthD>Iᜬ= //b7xlK3錙*!NU@ @r!TC$[~,Sv7FBT0bElWY<5;{l1[:Y$4 eIB(%=[h[%V QIYW*:lnjʌosr0t5v)V['~a;ylpECrɨ{&v-G}zP!x?& ()@d ɈdmIɟ$$C~#b@ԬH ʼpQhU $jǍ5X}&+jiJ3{x?,ml6Q[J-S[mLz;^ȐF..2+;)ȑUewO(f6e~ ca{p s;_;;i=wn_|o%,Ds9gT>2Ǒ?l~o֞fTp*/I,I9!&Bo@=/|m7/h-lp(G/b AH0-Y Ն0o{+q'BiY?e|NHIKBNCZM ^YCM cgΪ-aP 9 UQ9Gv#`xaeO|!*f_p.BBh\d_~MW6mmv/(+ Lԍ $T-,Nb #X%&cڌǐ؞%&86B,0n%#ܳѤ]>镌ǝUt͙EPuRR5dUT!J Y5g*c9b+AܚvIfm8fuw>$$/+-PKo.`\ v%M[j9g&b bX9`z>aY4U~-F,a^a Ǫ_X_{_s`q6nnSfw )WuwU{%^mʝFձ,iv8V[Z#ӟZ\wJcߟS9f#]R׫n =vmgC|A X~L`Zڅ64X5'Uұz p xYTb 1 C/, ١D@w `co?x)_)``?_{f=;sygf)וL:í`H5nҫHh)g*-"wy9y& {Z_̋N ulu.;!wZ*exG=y lv.MT.]M|2{%wz1f/j⺕ D)n~FѷK>?^\< NIVٌ &s:_3yJun}񮿽+{vB1=Ӯ_5܇N˦ B*/Kݝ%xS!I*]ߦ;"Wk ;a#MN` c^Br[:[^.] gp۪^[ R8QK (BHW"aBnp!.pe}e_ "E!A5Iy?#N˶e z$= C$j8Om:c:/gm|[}cJ<ˀͪp3MsKHjqܳ}}Е\>vC;$q XE \8񝳌#˾FyϨA7UE0{-ǝzªTR|͟u&$bxC Fgsnzõc[L3a+pzD̑?7ౣKs|' pseN s%]9Bqߏ%w%}z=FX˜!J`Iĵ^8vQ1W{Mg#er2}4z=F,Wo݄ ԋ:yO 5R?=N+z4ix^7x)#q1Dn p\9@ ּz #BSOyoxѶذtZyWh3+pHgYpҰ#h،[jz<H<O oRvWuDǔv~ 䤣fi$Yq{Q Xl|y ,q9G(a ՠנ;O>fвW-Ulp'&`RjLk 6z2,*\Bfؚo4%G !gv *;jQ5Jw)=Kbn~#eB AnO>|OH 'ՁgxDț[k-hOI# U M Dn ֏E5ѫcFCt_SnyNL65gTh9^|}ͨ BĒ:aEnrik?BueG  ^OҰڬ]+y{m[+Su KQܯ+&S?,~̼˸(f?_ųR/-*9 lq~~8zu} :x=>o_[Nc Vp5 /NjngiifC;@$eh]V^爚dVsPL5Ac0و[-RsƱ QQgw7.1{T<)eZ>ƗCZWA5l;{ ۖ1%Lb}h jl"4 .fބAU\+ mI`?'DpAXE0@""rnISՎOZ :7L Y嬻 ~ŋsZV̡X] H#0d/lbo;.#hKuRaWtA B\h9MU0ݱz_4x{Շ1l[fL<Y7ۢ>^lSk[+VNNky)VN)%4_$0JPfZQ5ߟ=O }j:@E a`}^*|>\jPIbS{Uz;x-_z2h:O\8& gNmbqEjh< yI=)r| ngJtB¢X.ЊxJueFYv.>fj _G Y~|N~ɘGY? v>@Ү`Sked- ^+<4DfTLarRMF};6?Q=T/cbʖuqYZg̭"M颿#FȺ ǻ0(߿"7ɑGՂ/,[R%Up!`{VH;.J׊rc N@*[0ĦG@ 5֑F;C kiqCEf D tFvt5gkC̿=Jiɺj_ǤEJTH@{|~,f)HVB3td۩{]B/ug q|UHJ̤qpt}9sd^}bݍ̾Q?g?/m]3sFQז7v.e7NJT&5b~ŽYdN󶐆+a KC~=h3#p0_ a>u#ʼu 围lE-} t?CΉ5atiѪ8AV޻&<.~^3-iGKkBjg 9Hr.R:A +ip"΄R>M'Ift \*{ǔ&p 9JTK˝ޏGW`DZH4G dYbb/b4y_f+[ P 8y9MG,5X5X|FĐle5jq~6TM.TpҮ?D^]6w=OR =oIM{yd*fo6Vt{r B3ֽɥZnLeulseGӘOن[:;!.ELRbDtNǩܪ3`u("O2 e`5TY_z4z= J_Mɾ)GG4>&܆>pv۹ɡQA i3U+yܰ=\2Qi͞MD_*F'Gڻxj-RvwDzf $I=\*d'̗A eNX=sÎ>E&ry$tY Co,z=1ő܁w嘚 נ6+…G$SA$6ʤb2x{+ dS>I8ZPdmtd*D:&: Q{+Fڷ8uIŰCe0dH.:1vZ <!קI5gY(t/?%any7 sOQp|euޏ/-?fz=4any7 sFxԱ4|!3iW}Fτ-y;Glz=sonata-1.7.0/website/images/t_sonata8.jpg000066400000000000000000000116261377142014300203250ustar00rootroot00000000000000JFIF^`ExifMM*Created with GIMPCC$"  = !1VX#28ARTw"$4.!1AQaq"B2 ?:Lr|߶)c~ZvJ߃ىfNbl3FI<'? N"2g|FWZnc~7 50޺{ )yUWi3Iہyڛo;ie.LhE='YDe2|fd"Ɣ788NXDu1Xdv݂Iu̳p*̊+c^ f҃,Mw/Nx]LT@JB@H[("ХwVO-ݠ 2xBBH`x$xazϹm[V e'krՔ3XTjE L8Z0 xZ$ߗ_6H ~`Flmv"a730Nc qP0QҐ!d p+䡙ΰ8K 2?BIn9EY-;tka'|_hnUePG#W D&]64,YKWi,HW*r|  A0kETJŶ()uv,%̗oӻE,[Z_EI)MUu<myoPf3‰jVy3XD3 >{"3g`tI`] o*2$v:t"w4sBjEVQJ|ei;hzY0dMxy)2ɶ=N͠+lgY+ЃEXZiJ܍I' VcbV"dt+%B_y''Pjm+U9[|,MzY *)\$<_?7Vr*XRo5f%ŽEծ5lW5{Zq;%-V]GcV2pHN[2 0gÞy;R@})|CuSKo]7v\pϑs-Z0~o(g>rnk;W,>} |}yu[|{p=o}y&1e,~ |qǞ'Ko]J_k/Tb駟ﯙUhrCiKZ,WzS^UFe,Jv%KzkE! ~_k\s?ޡn_ ޟg PLvȄQ&$U2U( %:ǺyF G&oxop0-83珷Qqܻ%hF.ϣ fgPR1YVFʀgH*RRZR7*Q`rMBBAQ, ' Hô{`!U)<-z ֛5~Ů5X@ rdr3jZWٮԫQΉ WvYU6ZZurY`2"ĉe.Lf>funvҡw*ĵxJ:@Z-2eئ l&#7mLo8?nO{c]ۖwTLkh\Y݉]>ҩiZ8\q3#vwuG]'Pqsb2mV[ (2Hxc=S=Kԑ6_n vń,sed% s wCTR,jJԱ0 2I LK%ۓV5sCg=Wmȅ#Sm,gLYA\= .Gb6~_C_܍ۺ_\0vw3#LRc 5!Fw=a:gurw4,)O1zU)9[v|Z:t[S)ָK J״=vW틐mEK'Y#+ks?QCUA]R$2G_Uh-I,_PbrҤpb!i$@9M.so[ZxxBJ2TeIe fbZ :KrSׅ˫k_\B^Dö  #h yb2ݸe;.i5YmYSΑ="[׷bHz-n~Z ji2НG9<JK@R~$lfVp,+um]hZ)WW h.zߜaأgm5~~>]O섮lUP5.k̂aYJʢ՛4+Le+-g@B L;+*vrc%"J%Ro $G$Qd`čr[ϠO Yl 5t 9ZaVκ5pr!)i]i8{~{=ڕ nvDž/)ɔȖ Rw&=M]{["K=Klⱅ5ŝ0y Ֆ,qy*#Tu aȖ) 曞$A"c탃8zk1$sꌿk6<\z7m<.03n%|g8ˌg8ϗ\ț2ûC&Uhm`N-*HƽUY|d!Ev8 P&pa=qgA 2!rŤ={f1̡5H`K@|14jUlK -3/F߼c2I/~Xϗߞ4jQD^[ U@ #$0ĉ9X)g9l+Q˄\6A$kZBv,aZIcLNb-1-?Jg#7<+,w\4sƠCL;E@YM _Tͤbg`#$3egm)~ci/IQܝ<FƜ)F&!ɗ \c`1tkxg{\5oS V0ǥFvQWXdGŽ Qfjp[5Z&b;2 iԳVXrıg2qygUjƶݪmi|0 fZT3$$$u$g2' r$̇9G1{Uu{[-UU;3ѶV܎UжNu,3MOe3,W-mH>F|Ap՘, ;(3w<^ZW'~YZ|Aq:;$aq~Ei?Wrҿs䎎~ /{OGGJQm;W ~[Rz>~ /{OGGJQm;W ~[Rz>~ /{OGGJQm;W ~[Rz>~ /{OGGJQm;W ~[Rz>~ /{OGGJQm;W ~[Rz>~ /{OGGJV5ܻjV)rMGI,ܛ[[PG |"%eF1tttsonata-1.7.0/website/images/t_sonata9.jpg000066400000000000000000000134571377142014300203320ustar00rootroot00000000000000JFIF_`ExifMM*Created with GIMPCC$"   ;  !"RU#$12A37Xw9 !1A"Qaq#2'U34GRe ?OGE5T,S qn a;NS̓Ͼ=,+gIO#;z 5ψ< y~"Q8{Q“ąs%eQ\o ޖAclQreF}u'vl,OYH5j 3qT<}\ B Q͡ $u9 =MDF$U IT\ChE:U[ qBWԆMn7Sv©}LWח6 e]A\sg6Lep uՅʉZ]ucC5X6=q|FY8>0=U֞GU!aD$R`pV#Ċde)F3rq-%5H"1$%gBϡBT`]&qYQĜ˪k5@W@ܢ9Z|K H8eeT'3#ϕ6eiO9(ﲣ.aIu:IbاE:WEAlLU8!#W5ҕ %6+Z}7}{ZHʷmV]9dd\EG0 YԱ)^TCAV Cku'am`/+лcRխ Eeu‰|t&yb+ YɤIG't ]שr+VDIyvQl*罌ŋ =Cqp̶&qY"E*YNָF Q[h-Gbsx>>)9oLQh%Kq\vǬ>̏-93XyrNHe\Klv_*Ny NeZJ{uʏMI֯г7|U]h:;]AWi̕SW0w{hXLٔGb@#I!19>r>ѮΟ`ꃧ۝ƿDLEQk))Z` .L`^Qr/ y/͑GM)֫_%LR4)Yi(3"2)61 !Pd& )kj &pPi"ǘ G[ip$ۙ?V6M+ e4 Le{3\֠K<:jT2F *#N9pd9B,,.y{b@lOr f1LSOFDqo,IJRϹF>2աryW%vrBmЎ2HfBL2.4j$"u {-9fR74Jd%I&%Pc!R"l+ԸKYbmTuؐN]N-XW<'m2(ⱕ ^Ccȓq_\kby*=,̯ If~2(RTBwǟ: ]s ۋ8T[^ע6W;vV{h8:̦4m&I„9-J%pܗUnTϵ`XIe#$U w L3r>_K-sqY4M扫z&tJM*};\yx6T2 X 6|pmCE;K`I+ d,251ſRGIgI ;}q_1GoíV(̥Zݣ)Ah]L i%15ÅŌF01,?==OUo~7\(~&8`918K!0le(\%uTQi}!5/#S1 0eSk i -y`O+~Sl o^=L$̹a7"#^iNNFN~B B|8h9Xه|zVS8 k,NĦ|W:l|M,}!%13ݜ?Js{Sa1oK'z2\l*ETٞ5@CBK~R,5KW:&ec'5?иDe5%HX &0͇QL@ 2^8X`Uy43>%3itx8"#O8ఔq9EM-V#,}#Trv)2f%nG<7b2!~_t's׷@l r{K؁[oK#rMU*uca}- ܬ+ oiS?9f52,'ʒE6ПVEO^w`/t5)Wple۔oV8](0M!Mk4?KsVx,c8K[HsqQ$g1;G1ϖ%v ezOSb[ۦ%6ПVE?zJCz D -5_ԍC1UGK !ML+$8]AM^zp-ZYΨ_Y.8k~FGLCKs𙧌B2X n40Hrp%FdK)s R@#Pumec#}3r^0AXYIep2O˷.禳zcKOMzwTWks4Wc+t UecZKYrM\`zU}YWSUKŸؔ?Oه(/z=}G5W ;ya,Ec"(3,HevXUx(禨4gKVX-.'[,N0qm˙d)"!ߧтo/~g Oه(/z='mo~g÷?3k+oq\ؖ\*moybXawǶq桬?HƸoMfuf2. 1'c܃*,_,gC2{K '8S k/[ 4bVr\ MX|x#C#e|JQƶQ78(c #!13?G°0lVh}d UQ)W͙H1jNAZGj*̬dZ55sUVXz[g%8N&jNd de9Q~3,rgʰt6^akSUrmԞ"S^U/ ;yc _Ԩ5h4iL0Zel,ĥOk6.74/e, Sonata Music Client for MPD

Sonata

An elegant music client for MPD.

   

   

About

Sonata is an elegant GTK+ music client for the Music Player Daemon (MPD). The latest version is 1.6.2.1.

Sonata is licensed by the GPL and is free software. It has been forked from the unmaintained Pygmy project in order to fix bugs, introduce new features, and proceed down a different path.

Features

- Expanded and collapsed views
- Automatic remote and local album art
- Library browsing by folders, or by genre/artist/album
- User-configurable columns
- Automatic fetching of lyrics
- Playlist and stream support
- Support for editing song tags
- Drag and drop to copy files
- Popup notification
- Library and playlist searching, filter as you type
- Audioscrobbler (last.fm) 1.2 support
- Multiple MPD profiles
- Keyboard friendly
- Support for multimedia keys
- Commandline control
- Available in 24 languages

Developers

Jonathan Ballet <jon@multani.info>

Past developers:
Scott Horowitz <stonecrest@gmail.com>
Tuukka Hastrup <Tuukka.Hastrup@iki.fi>
Stephen Boyd <bebarino@gmail.com>

sonata-1.7.0/website/screenshots.html000066400000000000000000000057641377142014300177120ustar00rootroot00000000000000 Sonata Music Client for MPD - Screenshots

Sonata

An elegant music client for MPD

Screenshots


The current playlist.


Jumping straight to track.


Music library, searchbar.


Artist & album browsing.


Batch tag editing.


Alternative album art.


Song info, lyrics, etc.


Collapsed "mini" view.


Notification window/tooltip.

sonata-1.7.0/website/screenstyle.css000066400000000000000000000045121377142014300175240ustar00rootroot00000000000000body { margin:10; padding:0; font-family:verdana, arial, sans-serif; font-size:80%; color:#666666; text-align:center; background-color:#EEEEEE;} p, dl { margin:0.2em 0 1.2em 0.6em; padding:0.3em; align:justify;} h1 { padding:0; margin:0; font-size:250%; font-weight:normal; font-style:italic; color:#658bb5; font-family:"Trebuchet MS", verdana, arial, sans-serif;} h2 { background-color:#DDDDDD; color:#3B4471; font-size:100%; font-weight:normal; margin:0.5em; padding:0; font-style:italic; font-family:"Trebuchet MS", verdana, arial, sans-serif;} div { margin:0; padding:0; display:block;} a:link, a:visited { color:#658bb5; text-decoration:underline;} a:hover { color:#3B4471; text-decoration:underline;} a:active { color:#658bb5; text-decoration:underline;} img { border:0;} .container { background-color:#FFFFFF; margin:0 auto 0 auto; padding:0; width:65%; border: 1px solid #BBBBBB} .titleblock { padding:2em 2em 2em 13em; margin:0; text-align:left; background-image:url(images/logo.png); background-repeat:no-repeat; background-position:left center;} .titleblock p { text-indent:4em; color:#3B4471;} ul.navbar { list-style-type:none; float:left; display:block; width:100%; line-height:0.2em; clear:both; margin:0; padding:0; background-color:#999999;} ul.navbar li { display:inline;} a.nav:link, a.nav:visited { display:block; float:left; width:16.64%; padding:1.2em 0 1.2em 0; margin:0; text-decoration:none; background-color:#999999; color:#FFFFFF;} a.nav:hover, a.nav:active{ display:block; float:left; width:16.64%; padding:1.2em 0 1.2em 0; margin:0; text-decoration:none; background-color:#658bb5; color:#FFFFFF;} .leftcontainer { float:left; clear:both; width:165px; margin:1em 0 0 0; padding:0;} .leftbox { margin:0.5em; padding:0.3em; border:1px solid #999999; text-align:center;} .leftcontainer h2 { text-align:left; padding:0 0 0 1.5em;} .linkbox a {display:block;} .content { clear:right; text-align:left; margin:2.5em 1.2em 0 165px; padding:1em 1ex 1em 1.5ex;} .content2 { clear:right; text-align:left; margin:2.5em 1.2em 0 1.2em; padding:1em 1ex 1em 1.5ex;} .content h2 {text-indent:0.5em;} .content2 h2 {text-indent:0.5em;} .footer { color:#999999; font-size:75%; margin:0.5em 2.2em 0.5em 2.5em; padding:0.8em; text-align:left; clear:both;} .footer .right { float:right; clear:right; text-align:right;} .footer p {margin:0;} sonata-1.7.0/website/sonata32.png000066400000000000000000000037271377142014300166210ustar00rootroot00000000000000PNG  IHDR szzsRGBbKGD pHYs  tIME4 t1ntEXtCommentCreated with GIMPW2IDATXõ[l\Wϙx$npPm*B %EU.JI ajHOQ$T!@BMTLEBER/(m'qc'؞qbK[gў6$<x""?ܳg#G ݻW9̃ϝw3㊈ADDDbcd刍dhDNђwbٿtzJ5x(Q[gxUEbԒ3 QD3޳g]ڽ{!S,xSQC@Zס\E-BJQ#Lj[ <<_( M6xsj Iq]N+`m˝s`~zEyeym^?i@ڻ8nzsm*̜Gt29v=a[$nN!/eti|0 &t\6:E_y[O3O>}*}}}{nvN;1_ *my-֩&׭&ס)NJJS(:n˟Ztll챇~xD<ϣ'7< Sonata Music Client for MPD - Support

Sonata

An elegant music client for MPD

Support

The project is hosted at https://github.com/multani/sonata.
There you can file bug reports and feature requests, etc.

There are also a mailing list:

   sonata-users - Questions, comments, suggestions